From 7f71d52e2e6e6e8ffb5ea2837be84c800d04ef95 Mon Sep 17 00:00:00 2001 From: Miqdad Date: Tue, 28 Oct 2025 12:26:03 +0700 Subject: canonical product detail --- src-migrate/libs/slug.ts | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) (limited to 'src-migrate/libs') diff --git a/src-migrate/libs/slug.ts b/src-migrate/libs/slug.ts index 5ab3b3dd..e8267ed2 100644 --- a/src-migrate/libs/slug.ts +++ b/src-migrate/libs/slug.ts @@ -3,21 +3,30 @@ import { toTitleCase } from './toTitleCase'; export const createSlug = ( prefix: string, name: string, - id: string, - withHost = false -) => { - const cleanName = name - .trim() - .replace(new RegExp(/[^A-Za-z0-9]/, 'g'), '-') - .toLowerCase(); - - let slug = `${cleanName}-${id}`; - const splitSlug = slug.split('-'); - const filterSlug = splitSlug.filter((x) => x !== ''); + id: string | number, + withHost: boolean = false +): string => { + name ||= ''; + + // pastikan id jadi string + const safeId = (id ?? '').toString(); - slug = `${prefix}${filterSlug.join('-')}`; + let slug = + name + ?.trim() + .replace(new RegExp(/[^A-Za-z0-9]/, 'g'), '-') // non alphanumeric -> "-" + .toLowerCase() + + '-' + + safeId; + + const splitSlug = slug.split('-'); + const filterSlugFromEmptyChar = splitSlug.filter((x) => x !== ''); + slug = prefix + filterSlugFromEmptyChar.join('-'); - if (withHost) slug = process.env.NEXT_PUBLIC_SELF_HOST + slug; + if (withHost) { + const host = (process.env.NEXT_PUBLIC_SELF_HOST || '').replace(/\/+$/, ''); + slug = host + slug; + } return slug; }; -- cgit v1.2.3