import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; import { EachRoute, ROUTES } from "./routes-config"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } export function helperSearch( query: string, node: EachRoute, prefix: string, currenLevel: number, maxLevel?: number ) { const res: EachRoute[] = []; let parentHas = false; const nextLink = `${prefix}${node.href}`; if (!node.noLink && node.title.toLowerCase().includes(query.toLowerCase())) { res.push({ ...node, items: undefined, href: nextLink }); parentHas = true; } const goNext = maxLevel ? currenLevel < maxLevel : true; if (goNext) node.items?.forEach((item) => { const innerRes = helperSearch( query, item, nextLink, currenLevel + 1, maxLevel ); if (!!innerRes.length && !parentHas && !node.noLink) { res.push({ ...node, items: undefined, href: nextLink }); parentHas = true; } res.push(...innerRes); }); return res; } export function advanceSearch(query: string) { return ROUTES.map((node) => helperSearch(query, node, "", 1, query.length == 0 ? 2 : undefined) ).flat(); } // Thursday, May 23, 2024 export function formatDate(dateStr: string): string { const [day, month, year] = dateStr.split("-").map(Number); const date = new Date(year, month - 1, day); const options: Intl.DateTimeFormatOptions = { weekday: "long", year: "numeric", month: "long", day: "numeric", }; return date.toLocaleDateString("en-US", options); } // May 23, 2024 export function formatDate2(dateStr: string): string { const [day, month, year] = dateStr.split("-").map(Number); const date = new Date(year, month - 1, day); const options: Intl.DateTimeFormatOptions = { month: "short", day: "numeric", year: "numeric", }; return date.toLocaleDateString("en-US", options); } export function stringToDate(date: string) { const [day, month, year] = date.split("-").map(Number); return new Date(year, month - 1, day); }