Skip to content
Snippets Groups Projects
Commit d0c04219 authored by Marcus Eibrink-Lunzenauer's avatar Marcus Eibrink-Lunzenauer Committed by Ron Lucke
Browse files

Courseware: vollständiges paginiertes Nachladen ohne hartes Limit

parent 52c3a703
No related branches found
No related tags found
No related merge requests found
......@@ -14,7 +14,7 @@
"@babel/plugin-transform-runtime": "^7.12.1",
"@babel/preset-env": "^7.12.1",
"@babel/register": "^7.12.1",
"@elan-ev/reststate-vuex": "~1.0.4",
"@elan-ev/reststate-vuex": "~1.0.5",
"@fullcalendar/core": "^4.3.1",
"@fullcalendar/daygrid": "^4.3.0",
"@fullcalendar/interaction": "^4.3.0",
......@@ -1142,9 +1142,9 @@
"dev": true
},
"node_modules/@elan-ev/reststate-vuex": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.5.tgz",
"integrity": "sha512-WDXJOocwxgMPHvW7veGhjcyhDXBtzhQA/TylSNTd7iDNpCItTyT2Y+gFoJBm8o+JpvYRdanH56GRHwiqidgNJQ==",
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.6.tgz",
"integrity": "sha512-hj1MCzPx9dF2jhQ2rstTBqg4WGNT+cvfIBBpCgsAE9CSrroZlL0Gdb6+3XVnM9cOKQi7NdAnTy6b/FMC5+rlaw==",
"dev": true,
"dependencies": {
"@elan-ev/reststate-client": "^1.0.0"
......@@ -15219,9 +15219,9 @@
"dev": true
},
"@elan-ev/reststate-vuex": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.5.tgz",
"integrity": "sha512-WDXJOocwxgMPHvW7veGhjcyhDXBtzhQA/TylSNTd7iDNpCItTyT2Y+gFoJBm8o+JpvYRdanH56GRHwiqidgNJQ==",
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.6.tgz",
"integrity": "sha512-hj1MCzPx9dF2jhQ2rstTBqg4WGNT+cvfIBBpCgsAE9CSrroZlL0Gdb6+3XVnM9cOKQi7NdAnTy6b/FMC5+rlaw==",
"dev": true,
"requires": {
"@elan-ev/reststate-client": "^1.0.0"
......@@ -204,11 +204,14 @@ export const actions = {
type: 'courseware-blocks',
id: block_id,
};
const relationship = 'file-refs';
return dispatch('courseware-blocks/loadRelated', { parent, relationship }, { root: true }).then(() => {
const refs = rootGetters['courseware-blocks/related']({
return dispatch('loadRelatedPaginated', {
type: 'file-refs',
parent,
relationship,
}).then(() => {
const refs = rootGetters['file-refs/related']({
parent,
relationship,
});
......@@ -804,24 +807,50 @@ export const actions = {
context.commit('cwManagerFilingDataSet', msg);
},
loadUsersCourses({ dispatch, rootGetters, state }, userId) {
async loadRelatedPaginated({ dispatch, rootGetters }, { type, parent, relationship, options }) {
const limit = 100;
let offset = 0;
do {
const optionsWithPages = {
...options,
'page[offset]': offset++,
'page[limit]': limit,
};
await dispatch(
`${type}/loadRelated`,
{
parent,
relationship,
options: optionsWithPages,
resetRelated: false
},
{ root: true }
);
} while (rootGetters[`${type}/all`].length < rootGetters[`${type}/lastMeta`].page.total);
},
async loadUsersCourses({ dispatch, rootGetters, state }, userId) {
const parent = {
type: 'users',
id: userId,
};
const relationship = 'course-memberships';
const options = {
include: 'course',
'page[limit]': 10000,
include: 'course'
};
await dispatch('loadRelatedPaginated', {
type: 'course-memberships',
parent,
relationship,
options
});
return dispatch('course-memberships/loadRelated', { parent, relationship, options }, { root: true }).then(
() => {
const memberships = rootGetters['course-memberships/related']({
parent,
relationship,
});
let courses = [];
memberships.forEach((membership) => {
if (
......@@ -831,9 +860,8 @@ export const actions = {
courses.push(rootGetters['courses/related']({ parent: membership, relationship: 'course' }));
}
});
return courses;
}
);
},
loadRemoteCoursewareStructure({ dispatch, rootGetters }, { rangeId, rangeType }) {
......@@ -859,20 +887,22 @@ export const actions = {
);
},
loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) {
async loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) {
const parent = {
type: 'users',
id: userId,
};
const relationship = 'course-memberships';
const options = {
include: 'course',
'page[limit]': 10000,
};
await dispatch('loadRelatedPaginated', {
type: 'course-memberships',
parent,
relationship,
options
});
return dispatch('course-memberships/loadRelated', { parent, relationship, options }, { root: true }).then(
() => {
const memberships = rootGetters['course-memberships/related']({
parent,
relationship,
......@@ -897,9 +927,8 @@ export const actions = {
}
}
});
return commit('setUserIsTeacher', isTeacher);
}
);
},
loadFeedback({ dispatch }, blockId) {
......@@ -909,7 +938,12 @@ export const actions = {
include: 'user',
};
return dispatch('courseware-block-feedback/loadRelated', { parent, relationship, options }, { root: true });
return dispatch('loadRelatedPaginated', {
type: 'course-block-feedback',
parent,
relationship,
options
});
},
async createFeedback({ dispatch }, { blockId, feedback }) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment