further implementing service page (#3)

This commit is contained in:
UUBulb
2024-11-17 10:05:20 +08:00
committed by GitHub
parent 0c38d52025
commit f4fbc9f488
20 changed files with 936 additions and 333 deletions
+38
View File
@@ -1,6 +1,44 @@
import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"
import { z } from "zod"
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs))
}
const emptyStringToUndefined = z.literal('').transform(() => undefined);
export function asOptionalField<T extends z.ZodTypeAny>(schema: T) {
return schema.optional().or(emptyStringToUndefined);
}
export const conv = {
recordToStr: (rec: Record<string, boolean>) => {
const arr: string[] = [];
for (const key in rec) {
arr.push(key);
}
return arr.join(',');
},
strToRecord: (str: string) => {
const arr = str.split(',');
return arr.reduce((acc, num) => {
acc[num] = true;
return acc;
}, {} as Record<string, boolean>);
},
arrToStr: <T>(arr: T[]) => {
return arr.join(',');
},
strToArr: (str: string) => {
return str.split(',');
},
recordToArr: <T>(rec: Record<string, T>) => {
const arr: T[] = [];
for (const val of Object.values(rec)) {
arr.push(val);
}
return arr;
},
}