aboutsummaryrefslogtreecommitdiff
path: root/resources/vue/courseware-shelf-app.js
blob: efbf0ca9cef9743c02c822c91143c2e91fc20c42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import CoursewareShelfModule from './store/courseware/courseware-shelf.module';
import ShelfApp from './components/courseware/ShelfApp.vue';
import { resourceModule } from '@/assets/javascripts/lib/reststate-vuex.js';
import { StockImagesPlugin } from './plugins/stock-images.js';
import { h } from 'vue';

const mountApp = async (STUDIP, c, store, element) => {
    // handle studip 5.0 to 5.2 urls
    const elemId = window.location.hash.match(/structural_element\/(\d+)/);

    if (elemId) {
        let url = new URL(window.location.href);
        url.searchParams.set('element_id', elemId[1]);
        window.location.href = url;

        return false;
    }

    let elem;
    let entry_id = null;
    let entry_type = null;
    let licenses = null;
    let feedbackSettings = null;
    let isTeacher = false;

    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);
            }
            if (elem.attributes['feedback-settings'] !== undefined) {
                feedbackSettings = JSON.parse(elem.attributes['feedback-settings'].value);
            }
            if (elem.attributes['is-teacher'] !== undefined) {
                isTeacher = JSON.parse(elem.attributes['is-teacher'].value);
            }
        }
    }

    const { createApp, httpClient } = await STUDIP.Vue.load();
    store.registerModule('courseware-shelf', CoursewareShelfModule);

    store.registerModule(
        'courseware-structural-elements-shared',
        resourceModule({
            name: 'courseware-structural-elements-shared',
            httpClient
        })
    );

    store.dispatch('setUrlHelper', STUDIP.URLHelper);
    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', {
        id: entry_id,
        type: entry_type,
    });
    if (entry_type === 'courses') {
        store.dispatch('setUserIsTeacher', isTeacher);
        await store.dispatch('loadCourseUnits', entry_id);
        await store.dispatch('setFeedbackSettings', feedbackSettings);
    } else {
        await store.dispatch('loadUserUnits', entry_id);
        await store.dispatch('courseware-structural-elements-shared/loadAll', { options: { include: 'owner' } });
    }

    const app = createApp({
        render: () => h(ShelfApp),
    });
    app.use(StockImagesPlugin, { store });
    app.mount(element);

};

export default mountApp;