diff --git a/app/src/composables/use-item/use-item.ts b/app/src/composables/use-item/use-item.ts index 1e0efb67a5..0e64f57589 100644 --- a/app/src/composables/use-item/use-item.ts +++ b/app/src/composables/use-item/use-item.ts @@ -43,7 +43,7 @@ export function useItem(collection: Ref, primaryKey: Ref) { if (!primaryKeyField.value) return; - return `/collections/${props.collection}/${item[primaryKeyField.value!.field]}`; + return `/collections/${props.collection}/${encodeURIComponent(item[primaryKeyField.value!.field])}`; } function selectAll() { diff --git a/app/src/layouts/tabular/tabular.vue b/app/src/layouts/tabular/tabular.vue index 5f1a13d5f8..314d870ce0 100644 --- a/app/src/layouts/tabular/tabular.vue +++ b/app/src/layouts/tabular/tabular.vue @@ -537,7 +537,7 @@ export default defineComponent({ const primaryKey = item[primaryKeyField.value!.field]; // eslint-disable-next-line @typescript-eslint/no-empty-function - router.push(`/collections/${collection.value}/${primaryKey}`, () => {}); + router.push(`/collections/${collection.value}/${encodeURIComponent(primaryKey)}`, () => {}); } } diff --git a/app/src/modules/activity/routes/item.vue b/app/src/modules/activity/routes/item.vue index 1b4cefe635..4b609a5746 100644 --- a/app/src/modules/activity/routes/item.vue +++ b/app/src/modules/activity/routes/item.vue @@ -87,7 +87,7 @@ export default defineComponent({ const openItemLink = computed(() => { if (!item || !item.value) return; - return `/collections/${item.value.collection}/${item.value.item}`; + return `/collections/${item.value.collection}/${encodeURIComponent(item.value.item)}`; }); watch(() => props.primaryKey, loadActivity, { immediate: true }); diff --git a/app/src/modules/collections/routes/item.vue b/app/src/modules/collections/routes/item.vue index b398c3ad69..af4283a65a 100644 --- a/app/src/modules/collections/routes/item.vue +++ b/app/src/modules/collections/routes/item.vue @@ -435,7 +435,7 @@ export default defineComponent({ if (props.primaryKey === '+') { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const newPrimaryKey = savedItem[primaryKeyField.value!.field]; - router.replace(`/collections/${props.collection}/${newPrimaryKey}`); + router.replace(`/collections/${props.collection}/${encodeURIComponent(newPrimaryKey)}`); } } catch { // Save shows unexpected error dialog @@ -461,7 +461,7 @@ export default defineComponent({ async function saveAsCopyAndNavigate() { try { const newPrimaryKey = await saveAsCopy(); - if (newPrimaryKey) router.push(`/collections/${props.collection}/${newPrimaryKey}`); + if (newPrimaryKey) router.push(`/collections/${props.collection}/${encodeURIComponent(newPrimaryKey)}`); } catch { // Save shows unexpected error dialog } diff --git a/app/src/views/private/components/drawer-item/drawer-item.vue b/app/src/views/private/components/drawer-item/drawer-item.vue index 1b5955d413..781201955f 100644 --- a/app/src/views/private/components/drawer-item/drawer-item.vue +++ b/app/src/views/private/components/drawer-item/drawer-item.vue @@ -238,7 +238,7 @@ export default defineComponent({ const endpoint = props.collection.startsWith('directus_') ? `/${props.collection.substring(9)}/${props.primaryKey}` - : `/items/${props.collection}/${props.primaryKey}`; + : `/items/${props.collection}/${encodeURIComponent(props.primaryKey)}`; let fields = '*'; @@ -264,7 +264,7 @@ export default defineComponent({ const endpoint = collection.startsWith('directus_') ? `/${collection.substring(9)}/${props.relatedPrimaryKey}` - : `/items/${collection}/${props.relatedPrimaryKey}`; + : `/items/${collection}/${encodeURIComponent(props.relatedPrimaryKey)}`; try { const response = await api.get(endpoint);