aboutsummaryrefslogtreecommitdiff
path: root/resources/vue/courseware-tasks-app.js
blob: af72430ea8bdc1aba780f68f4e9aed4a26c825ac (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
86
87
88
89
90
91
import TaskGroupsIndex from './components/courseware/tasks/PagesTaskGroupsIndex.vue';
import TaskGroupsShow from './components/courseware/tasks/PagesTaskGroupsShow.vue';
import { createRouter, RouterView, createWebHashHistory } from 'vue-router';
import CoursewareModule from './store/courseware/courseware.module';
import CoursewareTasksModule from './store/courseware/courseware-tasks.module';
import CoursewareStructureModule from './store/courseware/structure.module';
import axios from 'axios';
import {h} from "vue";

const mountApp = async (STUDIP, createApp, store, element) => {
    const getHttpClient = () =>
        axios.create({
            baseURL: STUDIP.URLHelper.getURL(`jsonapi.php/v1`, {}, true),
            headers: {
                'Content-Type': 'application/vnd.api+json',
            },
        });

    const httpClient = getHttpClient();

    const routes = [
        {
            path: '/',
            name: 'task-groups-index',
            component: TaskGroupsIndex,
        },
        {
            path: '/task-groups/:id',
            name: 'task-groups-show',
            component: TaskGroupsShow,
            props: true,
        },
    ];

    const router = createRouter({
        history: createWebHashHistory(),
        routes,
    });
    router.beforeEach((to, from, next) => {
        if (to?.query?.cid !== undefined) {
            next();
        } else {
            next({ ...to, query: { ...to.query, cid: window.STUDIP.URLHelper.parameters.cid } });
        }
    });

    store.registerModule('courseware', CoursewareModule);
    store.registerModule('tasks', CoursewareTasksModule);
    store.registerModule('courseware-structure', CoursewareStructureModule);

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

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

    store.dispatch('setUserId', STUDIP.USER_ID);
    await store.dispatch('users/loadById', { id: STUDIP.USER_ID });
    store.dispatch('setUserIsTeacherInCourse', isTeacher);
    store.dispatch('setHttpClient', httpClient);
    store.dispatch('coursewareContext', {
        id: entry_id,
        type: entry_type,
    });
    await store.dispatch('tasks/loadTasksOfCourse', { cid: entry_id });

    const app = createApp({
        render: () => h(RouterView),
    });
    app.use(router);
    app.mount(element);

    return app;
};

export default mountApp;