11/02/2026

This commit is contained in:
2026-02-11 17:27:55 +07:00
parent 9851c311b3
commit 2bc93383a0
37 changed files with 3047 additions and 498 deletions

View File

@@ -0,0 +1,15 @@
import { DesignerToolDetail } from "@/data/designer-tool/Detail";
export function resolveDesignerPage(slug: string) {
const data = DesignerToolDetail.find(
(item) => item.item_info.url_index === slug
);
if (!data) return null;
return {
type: "designer_detail",
data,
};
}

View File

@@ -1,17 +1,21 @@
import { resolveArticlePage } from "./resolveArticlePage";
import { resolveProductPage } from "./resolveProductPage";
import { resolveJobPage } from "./resolveJobPage";
import { resolveDesignerPage } from "./resolveDesignerPage";
export type SlugResult =
| ReturnType<typeof resolveArticlePage>
| ReturnType<typeof resolveProductPage>
| ReturnType<typeof resolveJobPage>;
| ReturnType<typeof resolveJobPage>
| ReturnType<typeof resolveDesignerPage>;
export function findBySlug(slug?: string): SlugResult | null {
if (!slug || slug.trim() === '') {
return null;
}
// PRODUCT
const product = resolveProductPage(slug);
if (product) return product;
@@ -24,6 +28,10 @@ export function findBySlug(slug?: string): SlugResult | null {
const job = resolveJobPage(slug);
if (job) return job;
// Designer Tool
const designer = resolveDesignerPage(slug);
if (designer) return designer;
// 404
return null;
}

View File

@@ -90,4 +90,27 @@ export function normalizeKey(str: string) {
.replace(/[\u0300-\u036f]/g, '')
.toLowerCase()
.replace(/\s+/g, '-');
}
}
export function convertToSlug(text: string) {
let newText = text;
const lastDot = text.lastIndexOf(".");
if (lastDot > 0 && lastDot + 2 <= text.length) {
newText = text.substring(lastDot + 2);
}
return newText
.toLowerCase()
.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a")
.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e")
.replace(/ì|í|ị|ỉ|ĩ/g, "i")
.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o")
.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u")
.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y")
.replace(/đ/g, "d")
.normalize("NFD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[^\w ]+/g, "")
.trim()
.replace(/ +/g, "-");
}