diff --git a/ui/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue b/ui/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue index 9144eda85..5c440b161 100644 --- a/ui/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue +++ b/ui/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue @@ -5,7 +5,7 @@ import { setFocus } from "@/formkit/utils/focus"; import { FormType } from "@/types/slug"; import useSlugify from "@console/composables/use-slugify"; import { useThemeCustomTemplates } from "@console/modules/interface/themes/composables/use-theme"; -import { reset, submitForm } from "@formkit/core"; +import { reset, submitForm, type FormKitNode } from "@formkit/core"; import type { Category } from "@halo-dev/api-client"; import { coreApiClient } from "@halo-dev/api-client"; import { @@ -181,6 +181,28 @@ const { handleGenerateSlug } = useSlugify( computed(() => !isUpdateMode), FormType.CATEGORY ); + +// fixme: check if slug is unique +// Finally, we need to check if the slug is unique in the database +async function slugUniqueValidation(node: FormKitNode) { + const value = node.value; + if (!value) { + return true; + } + + const fieldSelector = [`spec.slug=${value}`]; + + if (props.category) { + fieldSelector.push(`metadata.name!=${props.category.metadata.name}`); + } + + const { data: categoriesWithSameSlug } = + await coreApiClient.content.category.listCategory({ + fieldSelector, + }); + + return !categoriesWithSameSlug.total; +}