Skip to content
Snippets Groups Projects
courseware-shelf-app.js 3.08 KiB
Newer Older
import CoursewareShelfModule from './store/courseware/courseware-shelf.module';
import ShelfApp from './components/courseware/ShelfApp.vue';
Ron Lucke's avatar
Ron Lucke committed
import Vuex from 'vuex';
import axios from 'axios';
import { mapResourceModules } from '@elan-ev/reststate-vuex';
Ron Lucke's avatar
Ron Lucke committed
const mountApp = async (STUDIP, createApp, element) => {
Ron Lucke's avatar
Ron Lucke committed
    const getHttpClient = () =>
        axios.create({
            baseURL: STUDIP.URLHelper.getURL(`jsonapi.php/v1`, {}, true),
            headers: {
                'Content-Type': 'application/vnd.api+json',
            },
        });

    let elem;
    let entry_id = null;
    let entry_type = null;
    let licenses = null;

    if ((elem = document.getElementById(element.substring(1))) !== undefined) {
        if (elem.attributes !== undefined) {
            if (elem.attributes['entry-type'] !== undefined) {
                entry_type = elem.attributes['entry-type'].value;
            }

            if (elem.attributes['entry-id'] !== undefined) {
                entry_id = elem.attributes['entry-id'].value;
            }

            if (elem.attributes['licenses'] !== undefined) {
                licenses = JSON.parse(elem.attributes['licenses'].value);
            }
        }
    }

Ron Lucke's avatar
Ron Lucke committed
    const httpClient = getHttpClient();

    const store = new Vuex.Store({
        modules: {
            'courseware-shelf': CoursewareShelfModule,
Ron Lucke's avatar
Ron Lucke committed
            ...mapResourceModules({
                names: [
                    'courses',
                    'course-memberships',
                    'courseware-blocks',
                    'courseware-containers',
                    'courseware-instances',
Ron Lucke's avatar
Ron Lucke committed
                    'courseware-user-data-fields',
                    'courseware-user-progresses',
Ron Lucke's avatar
Ron Lucke committed
                    'courseware-structural-elements-shared',
Ron Lucke's avatar
Ron Lucke committed
                    'files',
                    'file-refs',
                    'folders',
                    'users',
                    'institutes',
Ron Lucke's avatar
Ron Lucke committed
                    'institute-memberships',
Ron Lucke's avatar
Ron Lucke committed
                    'semesters',
                    'sem-classes',
                    'sem-types',
Ron Lucke's avatar
Ron Lucke committed
                ],
                httpClient,
            }),
        },
    });
    store.dispatch('setUrlHelper', STUDIP.URLHelper);
Ron Lucke's avatar
Ron Lucke committed
    store.dispatch('setHttpClient', httpClient);
    store.dispatch('setLicenses', licenses);
    store.dispatch('setUserId', STUDIP.USER_ID);
    await store.dispatch('users/loadById', {id: STUDIP.USER_ID});
    store.dispatch('setContext', {
Ron Lucke's avatar
Ron Lucke committed
        id: entry_id,
        type: entry_type,
    });
    if (entry_type === 'courses') {
        await store.dispatch('loadTeacherStatus', STUDIP.USER_ID);
        await store.dispatch('loadCourseUnits', entry_id);
    } else {
        await store.dispatch('loadUserUnits', entry_id);
Ron Lucke's avatar
Ron Lucke committed
        await store.dispatch('courseware-structural-elements-shared/loadAll', { options: { include: 'owner' } });
Ron Lucke's avatar
Ron Lucke committed

    const app = createApp({
Ron Lucke's avatar
Ron Lucke committed
        store,
Ron Lucke's avatar
Ron Lucke committed
export default mountApp;