diff --git a/.changeset/wet-beds-fold.md b/.changeset/wet-beds-fold.md new file mode 100644 index 0000000000..91e67c2974 --- /dev/null +++ b/.changeset/wet-beds-fold.md @@ -0,0 +1,5 @@ +--- +"@directus/app": patch +--- + +Fixed incorrect endpoints for system collections diff --git a/app/src/interfaces/translations/translations.vue b/app/src/interfaces/translations/translations.vue index 4eba455d1a..b4e6af8f42 100644 --- a/app/src/interfaces/translations/translations.vue +++ b/app/src/interfaces/translations/translations.vue @@ -82,6 +82,7 @@ import { cloneDeep, isNil } from 'lodash'; import { computed, ref, toRefs, watch } from 'vue'; import { useI18n } from 'vue-i18n'; import LanguageSelect from './language-select.vue'; +import { getEndpoint } from '@directus/utils'; const props = withDefaults( defineProps<{ @@ -291,7 +292,7 @@ function useLanguages() { try { languages.value = await fetchAll[]>( - `/items/${relationInfo.value.relatedCollection.collection}`, + getEndpoint(relationInfo.value.relatedCollection.collection), { params: { fields: Array.from(fields), diff --git a/app/src/layouts/calendar/index.ts b/app/src/layouts/calendar/index.ts index 8691db6deb..a30afc7e8a 100644 --- a/app/src/layouts/calendar/index.ts +++ b/app/src/layouts/calendar/index.ts @@ -3,6 +3,7 @@ import { router } from '@/router'; import { useAppStore } from '@/stores/app'; import { useServerStore } from '@/stores/server'; import { getFullcalendarLocale } from '@/utils/get-fullcalendar-locale'; +import { getItemRoute } from '@/utils/get-item-route'; import { renderDisplayStringTemplate } from '@/utils/render-string-template'; import { saveAsCSV } from '@/utils/save-as-csv'; import { syncRefProperty } from '@/utils/sync-ref-property'; @@ -176,11 +177,7 @@ export default defineLayout({ } else { const primaryKey = info.event.id; - const route = collection.value.startsWith('directus_') - ? collection.value.substring(9) - : `content/${collection.value}`; - - router.push(`/${route}/${primaryKey}`); + router.push(getItemRoute(collection.value, primaryKey)); } }, async eventChange(info) { diff --git a/app/src/layouts/kanban/index.ts b/app/src/layouts/kanban/index.ts index 90bf3a31d0..25ae7bfa6a 100644 --- a/app/src/layouts/kanban/index.ts +++ b/app/src/layouts/kanban/index.ts @@ -6,7 +6,7 @@ import { getRootPath } from '@/utils/get-root-path'; import { translate } from '@/utils/translate-literal'; import { useCollection, useFilterFields, useItems, useSync } from '@directus/composables'; import { User } from '@directus/types'; -import { defineLayout, getRelationType, moveInArray } from '@directus/utils'; +import { defineLayout, getEndpoint, getRelationType, moveInArray } from '@directus/utils'; import { computed, ref, toRefs, watch } from 'vue'; import KanbanActions from './actions.vue'; import KanbanLayout from './kanban.vue'; @@ -255,7 +255,7 @@ export default defineLayout({ const gField = groupField.value; const pkField = primaryKeyField.value?.field; - if (gField === null || pkField === undefined || event.removed) return; + if (gField === null || pkField === undefined || event.removed || !collection.value) return; if (event.moved) { const item = group.items[event.moved.oldIndex]?.id; @@ -288,7 +288,7 @@ export default defineLayout({ } } - await api.patch(`/items/${collection.value}/${event.added.element.id}`, { + await api.patch(`${getEndpoint(collection.value)}/${event.added.element.id}`, { [gField]: group.id, }); } @@ -459,19 +459,19 @@ export default defineLayout({ async function deleteGroup(id: string | number) { const pkField = primaryKeyField.value?.field; - if (pkField === undefined) return; + if (pkField === undefined || !groupsCollection.value) return; items.value = items.value.filter((item) => item[pkField] !== id); - await api.delete(`/items/${groupsCollection.value}/${id}`); + await api.delete(`${getEndpoint(groupsCollection.value)}/${id}`); await getGroups(); } async function addGroup(title: string) { - if (groupTitle.value === null) return; + if (groupTitle.value === null || !groupsCollection.value) return; - await api.post(`/items/${groupsCollection.value}`, { + await api.post(getEndpoint(groupsCollection.value), { [groupTitle.value]: title, }); @@ -480,9 +480,9 @@ export default defineLayout({ async function editGroup(id: string | number, title: string) { if (isRelational.value) { - if (groupTitle.value === null) return; + if (groupTitle.value === null || !groupsCollection.value) return; - await api.patch(`/items/${groupsCollection.value}/${id}`, { + await api.patch(`${getEndpoint(groupsCollection.value)}/${id}`, { [groupTitle.value]: title, }); } else { diff --git a/app/src/layouts/kanban/kanban.vue b/app/src/layouts/kanban/kanban.vue index 8e7091d0be..9c85fab687 100644 --- a/app/src/layouts/kanban/kanban.vue +++ b/app/src/layouts/kanban/kanban.vue @@ -50,7 +50,7 @@ @change="change(group, $event)" >