diff --git a/src/views/admin/js/admin-utilities.js b/src/views/admin/js/admin-utilities.js index 6fb938a3a..954d0251c 100644 --- a/src/views/admin/js/admin-utilities.js +++ b/src/views/admin/js/admin-utilities.js @@ -560,6 +560,38 @@ AdminOptionsHelperPlugin.install = function (app, options = {}) { console.log('Tainacan Admin loaded in ' + adminSpecialMode); + // Under these special modes, several routes do not need to exist + if ( + adminSpecialMode === 'itemsMultipleSelectionMode' || + adminSpecialMode === 'itemsSingleSelectionMode' || + adminSpecialMode === 'itemsSearchSelectionMode' || + adminSpecialMode === 'itemEditionMode' + ) { + app.config.globalProperties.$router.removeRoute('HomePage'); + app.config.globalProperties.$router.removeRoute('CollectionsPage'); + app.config.globalProperties.$router.removeRoute('CollectionCreationForm'); + app.config.globalProperties.$router.removeRoute('CollectionItemBulkAddPage'); + app.config.globalProperties.$router.removeRoute('CollectionEditionForm'); + app.config.globalProperties.$router.removeRoute('CollectionMetadataPage'); + app.config.globalProperties.$router.removeRoute('CollectionFiltersPage'); + app.config.globalProperties.$router.removeRoute('CollectionActivitiesPage'); + app.config.globalProperties.$router.removeRoute('CollectionCapabilitiesPage'); + app.config.globalProperties.$router.removeRoute('MappedCollectionCreationForm'); + app.config.globalProperties.$router.removeRoute('FiltersPage'); + app.config.globalProperties.$router.removeRoute('MetadataPage'); + app.config.globalProperties.$router.removeRoute('TaxonomyPage'); + app.config.globalProperties.$router.removeRoute('TaxonomyCreationForm'); + app.config.globalProperties.$router.removeRoute('TaxonomyEditionForm'); + app.config.globalProperties.$router.removeRoute('ActivitiesPage'); + app.config.globalProperties.$router.removeRoute('CapabilitiesPage'); + app.config.globalProperties.$router.removeRoute('AvailableImportersPage'); + app.config.globalProperties.$router.removeRoute('ImporterEditionForm'); + app.config.globalProperties.$router.removeRoute('ImporterCreationForm'); + app.config.globalProperties.$router.removeRoute('ImporterMappingForm'); + app.config.globalProperties.$router.removeRoute('ExportersPage'); + app.config.globalProperties.$router.removeRoute('ExporterEditionForm'); + } + for (let option in adminSpecialModes[adminSpecialMode]) app.config.globalProperties.$adminOptions[option] = adminSpecialModes[adminSpecialMode][option]; } diff --git a/src/views/admin/js/event-bus-search.js b/src/views/admin/js/event-bus-search.js index 1745bec46..c5adce371 100644 --- a/src/views/admin/js/event-bus-search.js +++ b/src/views/admin/js/event-bus-search.js @@ -3,11 +3,6 @@ import mitt from 'mitt'; export default { install(app) { - - const router = app.config.globalProperties.$router; - const route = app.config.globalProperties.$route; - const store = app.config.globalProperties.$store; - const userPrefs = app.config.globalProperties.$userPrefs; const emitter = mitt(); const bus = { @@ -18,18 +13,18 @@ export default { termId: undefined, searchCancel: undefined, performAdvancedSearch(data) { - store.dispatch('search/setAdvancedQuery', data); + app.config.globalProperties.$store.dispatch('search/setAdvancedQuery', data); this.updateURLQueries(); }, addMetaquery( data ){ if ( data && data.collection_id ){ - store.dispatch('search/addMetaquery', data ); + app.config.globalProperties.$store.dispatch('search/addMetaquery', data ); } this.updateURLQueries(); }, addTaxquery( data ){ if ( data && data.collection_id ){ - store.dispatch('search/addTaxquery', data ); + app.config.globalProperties.$store.dispatch('search/addTaxquery', data ); } this.updateURLQueries(); }, @@ -39,7 +34,7 @@ export default { if (filterTag.argType !== 'postin') { if (filterTag.taxonomy) { - store.dispatch('search/removeTaxQuery', { + app.config.globalProperties.$store.dispatch('search/removeTaxQuery', { filterId: filterTag.filterId, label: filterTag.singleLabel ? filterTag.singleLabel : filterTag.label, isMultiValue: filterTag.singleLabel ? false : true, @@ -47,7 +42,7 @@ export default { value: filterTag.value }); } else { - store.dispatch('search/removeMetaQuery', { + app.config.globalProperties.$store.dispatch('search/removeMetaQuery', { filterId: filterTag.filterId, label: filterTag.singleLabel ? filterTag.singleLabel : filterTag.label, isMultiValue: filterTag.singleLabel ? false : true, @@ -56,50 +51,50 @@ export default { }); } } else { - store.dispatch('search/removePostIn'); + app.config.globalProperties.$store.dispatch('search/removePostIn'); } - store.dispatch('search/removeFilterTag', filterTag); + app.config.globalProperties.$store.dispatch('search/removeFilterTag', filterTag); } this.updateURLQueries(); }, addFetchOnly( metadatum, ignorePrefs, metadatumIDs ) { - store.dispatch('search/addFetchOnly', metadatum ); - store.dispatch('search/addFetchOnlyMeta', metadatumIDs); + app.config.globalProperties.$store.dispatch('search/addFetchOnly', metadatum ); + app.config.globalProperties.$store.dispatch('search/addFetchOnlyMeta', metadatumIDs); this.updateURLQueries(); if (!ignorePrefs) { let prefsFetchOnly = this.collectionId ? `fetch_only_${this.collectionId}` : 'fetch_only'; let prefsFetchOnlyMeta = this.collectionId ? `fetch_only_meta_${this.collectionId}` : 'fetch_only_meta'; - if (userPrefs.get(prefsFetchOnly) != metadatum) - userPrefs.set(prefsFetchOnly, metadatum); + if (app.config.globalProperties.$userPrefs.get(prefsFetchOnly) != metadatum) + app.config.globalProperties.$userPrefs.set(prefsFetchOnly, metadatum); - if (userPrefs.get(prefsFetchOnlyMeta) != metadatumIDs) - userPrefs.set(prefsFetchOnlyMeta, metadatumIDs); + if (app.config.globalProperties.$userPrefs.get(prefsFetchOnlyMeta) != metadatumIDs) + app.config.globalProperties.$userPrefs.set(prefsFetchOnlyMeta, metadatumIDs); } }, cleanFetchOnly() { - store.dispatch('search/cleanFetchOnly'); + app.config.globalProperties.$store.dispatch('search/cleanFetchOnly'); }, removeFetchOnlyMeta( metadatum ){ - store.dispatch('search/removeFetchOnlyMeta', metadatum ); + app.config.globalProperties.$store.dispatch('search/removeFetchOnlyMeta', metadatum ); this.updateURLQueries(); }, setPage(page) { - store.dispatch('search/setPage', page); + app.config.globalProperties.$store.dispatch('search/setPage', page); this.updateURLQueries(); }, resetPageOnStore() { - store.dispatch('search/setPage', 1); + app.config.globalProperties.$store.dispatch('search/setPage', 1); }, setItemsPerPage(itemsPerPage, shouldNotUpdatePrefs) { - store.dispatch('search/setItemsPerPage', itemsPerPage); + app.config.globalProperties.$store.dispatch('search/setItemsPerPage', itemsPerPage); this.updateURLQueries(); if (shouldNotUpdatePrefs == undefined || shouldNotUpdatePrefs == false) { let prefsPerPage = this.collectionId != undefined ? 'items_per_page_' + this.collectionId : 'items_per_page'; - if (userPrefs.get(prefsPerPage) != itemsPerPage) { - userPrefs.set(prefsPerPage, itemsPerPage) + if (app.config.globalProperties.$userPrefs.get(prefsPerPage) != itemsPerPage) { + app.config.globalProperties.$userPrefs.set(prefsPerPage, itemsPerPage) .catch(() => {}); } } @@ -108,76 +103,76 @@ export default { let prefsOrderBy = this.collectionId != undefined ? 'order_by_' + this.collectionId : 'order_by'; if (orderBy.metakey) { - if (!userPrefs.get(prefsOrderBy) || orderBy.metakey != userPrefs.get(prefsOrderBy).metakey) - userPrefs.set(prefsOrderBy, orderBy).catch(() => {}); + if (!app.config.globalProperties.$userPrefs.get(prefsOrderBy) || orderBy.metakey != app.config.globalProperties.$userPrefs.get(prefsOrderBy).metakey) + app.config.globalProperties.$userPrefs.set(prefsOrderBy, orderBy).catch(() => {}); } else { - if (orderBy != userPrefs.get(prefsOrderBy)) - userPrefs.set(prefsOrderBy, orderBy).catch(() => {}); + if (orderBy != app.config.globalProperties.$userPrefs.get(prefsOrderBy)) + app.config.globalProperties.$userPrefs.set(prefsOrderBy, orderBy).catch(() => {}); } - store.dispatch('search/setOrderBy', orderBy); + app.config.globalProperties.$store.dispatch('search/setOrderBy', orderBy); this.updateURLQueries(); }, setOrder(order) { let prefsOrder = this.collectionId != undefined ? 'order_' + this.collectionId : 'order'; - if (userPrefs.get(prefsOrder) != order) { - userPrefs.set(prefsOrder, order) + if (app.config.globalProperties.$userPrefs.get(prefsOrder) != order) { + app.config.globalProperties.$userPrefs.set(prefsOrder, order) .catch(() => {}); } - store.dispatch('search/setOrder', order); + app.config.globalProperties.$store.dispatch('search/setOrder', order); this.updateURLQueries(); }, setStatus(status) { - store.dispatch('search/setStatus', status); + app.config.globalProperties.$store.dispatch('search/setStatus', status); this.updateURLQueries(); }, setTotalItems(totalItems) { - store.dispatch('search/setTotalItems', totalItems); + app.config.globalProperties.$store.dispatch('search/setTotalItems', totalItems); }, setSentenceMode(sentenceMode) { - store.dispatch('search/setSentenceMode', sentenceMode); + app.config.globalProperties.$store.dispatch('search/setSentenceMode', sentenceMode); }, setSearchQuery(searchQuery) { - store.dispatch('search/setSearchQuery', searchQuery); + app.config.globalProperties.$store.dispatch('search/setSearchQuery', searchQuery); this.updateURLQueries(); }, setViewMode(viewMode) { - store.dispatch('search/setViewMode', viewMode); + app.config.globalProperties.$store.dispatch('search/setViewMode', viewMode); this.updateURLQueries(); let prefsViewMode = this.collectionId != undefined ? 'view_mode_' + this.collectionId : 'view_mode'; - if(userPrefs.get(prefsViewMode) != viewMode) { - userPrefs.set(prefsViewMode, viewMode) + if(app.config.globalProperties.$userPrefs.get(prefsViewMode) != viewMode) { + app.config.globalProperties.$userPrefs.set(prefsViewMode, viewMode) .catch(() => {}); } }, setAdminViewMode(adminViewMode) { - store.dispatch('search/setAdminViewMode', adminViewMode); + app.config.globalProperties.$store.dispatch('search/setAdminViewMode', adminViewMode); this.updateURLQueries(); let prefsAdminViewMode = this.collectionId != undefined ? 'admin_view_mode_' + this.collectionId : 'admin_view_mode'; - if (userPrefs.get(prefsAdminViewMode) != adminViewMode) { - userPrefs.set(prefsAdminViewMode, adminViewMode) + if (app.config.globalProperties.$userPrefs.get(prefsAdminViewMode) != adminViewMode) { + app.config.globalProperties.$userPrefs.set(prefsAdminViewMode, adminViewMode) .catch(() => { }); } }, setInitialViewMode(viewMode) { - store.dispatch('search/setViewMode', viewMode); + app.config.globalProperties.$store.dispatch('search/setViewMode', viewMode); this.updateURLQueries(); }, setInitialAdminViewMode(adminViewMode) { - store.dispatch('search/setAdminViewMode', adminViewMode); + app.config.globalProperties.$store.dispatch('search/setAdminViewMode', adminViewMode); this.updateURLQueries(); }, async setSelectedItemsForIframe(selectedItems, singleSelection) { if (singleSelection) - store.dispatch('search/cleanSelectedItems'); + app.config.globalProperties.$store.dispatch('search/cleanSelectedItems'); - store.dispatch('search/setSelectedItems', selectedItems); + app.config.globalProperties.$store.dispatch('search/setSelectedItems', selectedItems); - let currentSelectedItems = store.getters['search/getSelectedItems']; + let currentSelectedItems = app.config.globalProperties.$store.getters['search/getSelectedItems']; if (window.history.replaceState) { let searchParams = new URLSearchParams(window.location.search); @@ -186,55 +181,45 @@ export default { searchParams.append('selecteditems', selectedItem); let newurl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + searchParams.toString() + window.location.hash; - - await router.push(newurl) - window.history.replaceState({ ...window.history.state, ...{ path: newurl } }, '') + window.history.pushState({path: newurl}, '', newurl); } }, cleanSelectedItems() { - store.dispatch('search/cleanSelectedItems'); + app.config.globalProperties.$store.dispatch('search/cleanSelectedItems'); }, - filterBySelectedItems(selectedItems) { - if ( route.name ) { - router.replace({ query: {} }); - router.replace({ query: { postin: selectedItems } }); - } else { - router.replace({ query: {} }); - router.replace({ query: { postin: selectedItems } }); - } + async filterBySelectedItems(selectedItems) { + await app.config.globalProperties.$router.replace({ path: app.config.globalProperties.$route.path, query: {} }); + await app.config.globalProperties.$router.replace({ path: app.config.globalProperties.$route.path, query: { postin: selectedItems } }); }, highlightsItem(itemId) { - store.dispatch('search/highlightsItem', itemId); + app.config.globalProperties.$store.dispatch('search/highlightsItem', itemId); this.updateURLQueries(); }, exitViewModeWithoutPagination() { app.config.globalProperties.$eventBusSearchEmitter.emit( 'exitViewModeWithoutPagination', true); }, async updateURLQueries() { - const newQueries = store.getters['search/getPostQuery']; - - - await router.replace({ query: {} }); - await router.replace({ query: newQueries }); - + const newQueries = app.config.globalProperties.$store.getters['search/getPostQuery']; + await app.config.globalProperties.$router.replace({ path: app.config.globalProperties.$route.path, query: {} }); + await app.config.globalProperties.$router.replace({ path: app.config.globalProperties.$route.path, query: newQueries }); }, updateStoreFromURL() { - store.dispatch('search/setPostQuery', route.query); + app.config.globalProperties.$store.dispatch('search/setPostQuery', app.config.globalProperties.$route.query); }, loadItems() { console.log('loadItems') - console.log(JSON.parse(JSON.stringify(store.getters['search/getPostQuery']))) + console.log(JSON.parse(JSON.stringify(app.config.globalProperties.$store.getters['search/getPostQuery']))) // Forces fetch_only to be filled before any search happens - if (store.getters['search/getPostQuery']['fetch_only'] != undefined) { + if (app.config.globalProperties.$store.getters['search/getPostQuery']['fetch_only'] != undefined) { app.config.globalProperties.$eventBusSearchEmitter.emit( 'isLoadingItems', true); // Cancels previous Request if (this.searchCancel != undefined) this.searchCancel.cancel('Item search Canceled.'); console.log('fetching') - store.dispatch('collection/fetchItems', { + app.config.globalProperties.$store.dispatch('collection/fetchItems', { 'collectionId': this.collectionId, - 'isOnTheme': route.meta && route.meta.isOnTheme, + 'isOnTheme': app.config.globalProperties.$route.meta && app.config.globalProperties.$route.meta.isOnTheme, 'termId': this.termId, 'taxonomy': this.taxonomy }).then((resp) => { @@ -267,9 +252,9 @@ export default { this.taxonomy = taxonomy; }, clearAllFilters() { - store.dispatch('search/cleanFilterTags'); - store.dispatch('search/cleanMetaQueries', { keepCollections: true }); - store.dispatch('search/cleanTaxQueries'); + app.config.globalProperties.$store.dispatch('search/cleanFilterTags'); + app.config.globalProperties.$store.dispatch('search/cleanMetaQueries', { keepCollections: true }); + app.config.globalProperties.$store.dispatch('search/cleanTaxQueries'); this.updateURLQueries(); } } diff --git a/src/views/admin/js/router.js b/src/views/admin/js/router.js index 732a68c65..8d73babc4 100644 --- a/src/views/admin/js/router.js +++ b/src/views/admin/js/router.js @@ -44,7 +44,7 @@ const routes = [ * https://router.vuejs.org/guide/migration/#Named-children-routes-with-an-empty-path-no-longer-appends-a-slash */ { path: '/collections/:collectionId', redirect: { name: 'CollectionItemsPage' }}, - { path: 'items', component: ItemsPage, name: 'CollectionItemsPage', meta: {title: i18nGet('title_collection_page') }, meta: { isOnTheme: false } }, + { path: 'items', component: ItemsPage, name: 'CollectionItemsPage', meta: {title: i18nGet('title_collection_page') }, props: { isOnTheme: false } }, { path: 'items/:itemId/edit', name: 'ItemEditionForm', component: ItemEditionForm, meta: {title: i18nGet('title_edit_item') } }, { path: 'items/new', name: 'CollectionItemCreatePage', component: ItemEditionForm, meta: {title: i18nGet('title_create_item_collection') } }, { path: 'items/:itemId', name: 'ItemPage', component: ItemPage, meta: {title: i18nGet('title_item_page') } }, @@ -83,7 +83,7 @@ const routes = [ { path: '/exporters/', name: 'ExportersPage', component: AvailableExportersPage, meta: {title: i18nGet('title_exporters_page') } }, { path: '/exporters/:exporterSlug', name: 'ExporterEditionForm', component: ExporterEditionForm, meta: {title: i18nGet('title_exporter_page') }}, - { path: '/:pathMatch(.*)*', redirect: { name: 'HomePage' } } + { path: '/:pathMatch(.*)*', name: 'DefaultRedirect', redirect: { name: 'HomePage' } } ]; export default createRouter({