feat: Enhance dataset management and improve frontend components

- Added preloads 'allowed_extensions_mimetypes' and 'dependent_array_min_length' in adonisrc.ts
- Updated @symfony/webpack-encore from ^4.6.1 to ^5.0.1
- AdminuserController: Implemented pagination for 10 records in index method
- Enabled reviewers to reject datasets to editors with email notifications (DatasetController.ts)
- Submitter DatasetController: Files now loaded in ascending order (sort_order) in edit mode
- file.ts: Removed serialization of fileData due to browser issues
- Modified FileUpload.vue to mark already uploaded files as deleted
- Improved keyword search in SearchCategoryAutocomplete.vue
- Started development on Category.vue for submitters to categorize DDC
- Added new route /dataset/categorize in routes.ts
- Introduced 2 new rules in start/rules: allowed_extensions_mimetypes.ts and dependent_array_min_length.ts
- Performed npm updates
This commit is contained in:
Kaimbacher 2024-11-29 15:46:26 +01:00
parent 49bd96ee77
commit f67b736a88
23 changed files with 2392 additions and 2759 deletions

View file

@ -440,7 +440,7 @@
</select> -->
</div>
<FileUploadComponent :files="form.files"></FileUploadComponent>
<FileUploadComponent v-model:files="form.files" v-model:filesToDelete="form.filesToDelete"></FileUploadComponent>
<div class="text-red-400 text-sm" v-if="form.errors['file'] && Array.isArray(form.errors['files'])">
{{ form.errors['files'].join(', ') }}
@ -482,9 +482,6 @@
import LayoutAuthenticated from '@/Layouts/LayoutAuthenticated.vue';
import { useForm, Head, usePage } from '@inertiajs/vue3';
import { computed, ComputedRef } from 'vue';
// import { ref } from 'vue';
// import { MainService } from '@/Stores/main';
// import FormInput from '@/Components/FormInput.vue'; // @/Components/FormInput.vue'
import { Dataset, Title, Subject, TethysFile, Person, License } from '@/Dataset';
import { stardust } from '@eidellev/adonis-stardust/client';
@ -620,6 +617,7 @@ const mapId = 'test';
// // });
// }
props.dataset.filesToDelete = [];
let form = useForm<Dataset>(props.dataset as Dataset);
// const mainService = MainService();
@ -681,10 +679,17 @@ const submit = async (): Promise<void> => {
// return MultipartFile for file upload
const options: FilePropertyBag = {
type: obj.type,
lastModified: obj.lastModified
lastModified: obj.lastModified,
sortOrder: obj.sort_order,
};
// let file = new File([obj.blob], `${obj.label}?sortOrder=${obj.sort_order}`, options);
let file = new File([obj.blob], `${obj.label}`, options);
// const file = new File([obj.blob], `${obj.label}?sortOrder=${obj.sort_order}`, options);
// const metadata = JSON.stringify({ sort_order: obj.sort_order });
// const metadataBlob = new Blob([metadata + '\n'], { type: 'application/json' });
const file = new File([obj.blob], `${obj.label}`, options,);
// const file = new File([obj.blob], `${obj.label}`, options);
// fileUploads[obj.sort_order] = file;
fileUploads.push(file);
} else {
@ -716,7 +721,17 @@ const submit = async (): Promise<void> => {
rights: 'true',
}))
.put(route);
// .put(route);
.put(route, {
onSuccess: () => {
// console.log(form.data());
// mainService.setDataset(form.data());
// formStep.value++;
// form.filesToDelete = [];
// Clear the array using splice
form.filesToDelete?.splice(0, form.filesToDelete.length);
},
});
};
const hasIdAttribute = (obj: License | number): obj is License => {