aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElmar Ludwig <elmar.ludwig@uni-osnabrueck.de>2023-05-02 10:21:26 +0000
committerElmar Ludwig <elmar.ludwig@uni-osnabrueck.de>2023-05-02 10:21:26 +0000
commit99e6757bf03e25dab1576847c6cfe020234c26e0 (patch)
treea7d55e5c0207dfdb91d53ef93ae584d98c8aceab
parent736c8d12156eceace76b4a53043b69edbc6e3996 (diff)
avoid pre-loading all file-refs available to the user, fixes #2566
Closes #2566 Merge request studip/studip!1748
-rw-r--r--resources/vue/components/courseware/CoursewareFileChooser.vue70
-rw-r--r--resources/vue/components/courseware/CoursewareFolderChooser.vue5
2 files changed, 29 insertions, 46 deletions
diff --git a/resources/vue/components/courseware/CoursewareFileChooser.vue b/resources/vue/components/courseware/CoursewareFileChooser.vue
index e433c93..0200684 100644
--- a/resources/vue/components/courseware/CoursewareFileChooser.vue
+++ b/resources/vue/components/courseware/CoursewareFileChooser.vue
@@ -7,17 +7,10 @@
<option v-show="canBeEmpty" value="">
<translate>Keine Auswahl</translate>
</option>
- <optgroup v-if="this.context.type === 'courses' && courseFiles.length !== 0" :label="textOptGroupCourse">
- <option v-for="(file, index) in courseFiles" :key="index" :value="file.id">
- {{ file.name }}
- </option>
- </optgroup>
- <optgroup v-if="userFiles.length !== 0" :label="textOptGroupUser">
- <option v-for="(file, index) in userFiles" :key="index" :value="file.id">
- {{ file.name }}
- </option>
- </optgroup>
- <option v-show="userFiles.length === 0 && courseFiles.length === 0" disabled>
+ <option v-for="(file, index) in files" :key="index" :value="file.id">
+ {{ file.name }}
+ </option>
+ <option v-show="files.length === 0" disabled>
<translate>Keine Dateien vorhanden</translate>
</option>
</select>
@@ -45,17 +38,12 @@ export default {
return {
currentValue: '',
selectedFolderId: '',
- loadedCourseFiles: [],
- courseFiles: [],
- loadedUserFiles: [],
- userFiles: [],
- textOptGroupCourse: this.$gettext('Dateibereich der Veranstaltung'),
- textOptGroupUser: this.$gettext('Persönlicher Dateibereich'),
+ files: [],
};
},
computed: {
...mapGetters({
- context: 'context',
+ fileRefById: 'file-refs/byId',
relatedFileRefs: 'file-refs/related',
urlHelper: 'urlHelper',
userId: 'userId',
@@ -64,12 +52,13 @@ export default {
},
methods: {
...mapActions({
+ loadFileRef: 'file-refs/loadById',
loadRelatedFileRefs: 'file-refs/loadRelated',
}),
selectFile() {
this.$emit(
'selectFile',
- this.userFiles.concat(this.courseFiles).find((file) => file.id === this.currentValue)
+ this.files.find((file) => file.id === this.currentValue)
);
},
filterFiles(loadArray) {
@@ -79,9 +68,6 @@ export default {
if (fileTermsOfUse !== null && fileTermsOfUse.attributes['download-condition'] !== 0) {
return false;
}
- if (this.selectedFolderId !== '' && this.selectedFolderId !== file.relationships.parent.data.id) {
- return false;
- }
if (this.mimeType !== '' && this.mimeType !== file.attributes['mime-type']) {
return false;
}
@@ -115,40 +101,32 @@ export default {
),
}));
},
- updateFiles() {
- this.courseFiles = this.filterFiles(this.loadedCourseFiles);
- this.userFiles = this.filterFiles(this.loadedUserFiles);
- },
- async getCourseFiles() {
- const parent = { type: 'courses', id: `${this.context.id}` };
+ async getFolderFiles() {
+ const parent = { type: 'folders', id: `${this.selectedFolderId}` };
const relationship = 'file-refs';
const options = { include: 'terms-of-use', 'page[limit]': 10000 };
await this.loadRelatedFileRefs({ parent, relationship, options });
- this.loadedCourseFiles = this.relatedFileRefs({ parent, relationship });
- this.updateFiles();
- },
- async getUserFiles() {
- const parent = { type: 'users', id: `${this.userId}` };
- const relationship = 'file-refs';
- const options = { include: 'terms-of-use', 'page[limit]': 10000 };
- await this.loadRelatedFileRefs({ parent, relationship, options });
-
- this.loadedUserFiles = this.relatedFileRefs({ parent, relationship });
- this.updateFiles();
+ const files = this.relatedFileRefs({ parent, relationship });
+ this.files = this.filterFiles(files);
},
},
- mounted() {
- if (this.context.type !== 'users') {
- this.getCourseFiles();
- }
- this.getUserFiles();
+ async mounted() {
+ if (this.value != '') {
+ await this.loadFileRef({ id: this.value });
+ const fileRef = this.fileRefById({ id: this.value });
- this.currentValue = this.value;
+ if (fileRef) {
+ this.selectedFolderId = fileRef.relationships.parent.data.id;
+ this.currentValue = this.value;
+ }
+ }
},
watch: {
selectedFolderId() {
- this.updateFiles();
+ if (this.selectedFolderId !== '') {
+ this.getFolderFiles();
+ }
},
},
};
diff --git a/resources/vue/components/courseware/CoursewareFolderChooser.vue b/resources/vue/components/courseware/CoursewareFolderChooser.vue
index be458eb..e071679 100644
--- a/resources/vue/components/courseware/CoursewareFolderChooser.vue
+++ b/resources/vue/components/courseware/CoursewareFolderChooser.vue
@@ -158,5 +158,10 @@ export default {
await this.getUserFolders();
this.confirmSelectedFolder();
},
+ watch: {
+ value() {
+ this.currentValue = this.value;
+ }
+ },
};
</script>