summaryrefslogtreecommitdiff
path: root/lib/rfq-last/validations.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rfq-last/validations.ts')
-rw-r--r--lib/rfq-last/validations.ts104
1 files changed, 87 insertions, 17 deletions
diff --git a/lib/rfq-last/validations.ts b/lib/rfq-last/validations.ts
index b133433f..34110141 100644
--- a/lib/rfq-last/validations.ts
+++ b/lib/rfq-last/validations.ts
@@ -66,22 +66,92 @@ import { RfqLastAttachments } from "@/db/schema";
>;
- export const searchParamsRfqAttachmentsCache = createSearchParamsCache({
- flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]),
- page: parseAsInteger.withDefault(1),
- perPage: parseAsInteger.withDefault(10),
- sort: getSortingStateParser<RfqLastAttachments>().withDefault([
- { id: "createdAt", desc: true },
- ]),
- // 기본 필터
- attachmentType: parseAsArrayOf(z.string()).withDefault([]),
- fileType: parseAsArrayOf(z.string()).withDefault([]),
- search: parseAsString.withDefault(""),
- // advanced filter
- filters: getFiltersStateParser().withDefault([]),
- joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
- })
+// 공통 탭 파라미터
+export const searchParamsRfqTabCache = createSearchParamsCache({
+ tab: parseAsStringEnum(['design', 'purchase']).withDefault('design'),
+})
+
+// 설계 탭 전용 파라미터
+export const searchParamsRfqDesignCache = createSearchParamsCache({
+ design_page: parseAsInteger.withDefault(1),
+ design_perPage: parseAsInteger.withDefault(10),
+ design_sort: getSortingStateParser<RfqLastAttachments>().withDefault([
+ { id: "createdAt", desc: true },
+ ]),
+ design_search: parseAsString.withDefault(""),
+ design_fileType: parseAsArrayOf(z.string()).withDefault([]),
+ design_filters: getFiltersStateParser().withDefault([]),
+ design_joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
+})
+
+// 구매 탭 전용 파라미터
+export const searchParamsRfqPurchaseCache = createSearchParamsCache({
+ purchase_page: parseAsInteger.withDefault(1),
+ purchase_perPage: parseAsInteger.withDefault(10),
+ purchase_sort: getSortingStateParser<RfqLastAttachments>().withDefault([
+ { id: "createdAt", desc: true },
+ ]),
+ purchase_search: parseAsString.withDefault(""),
+ purchase_fileType: parseAsArrayOf(z.string()).withDefault([]),
+ purchase_filters: getFiltersStateParser().withDefault([]),
+ purchase_joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
+})
+
+// 통합 파라미터 캐시 (모든 파라미터를 한 번에 파싱)
+export const searchParamsRfqAttachmentsCache = createSearchParamsCache({
+ // 공통
+ tab: parseAsStringEnum(['design', 'purchase']).withDefault('design'),
+ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]),
- // 스키마 타입들
- export type GetRfqLastAttachmentsSchema = Awaited<ReturnType<typeof searchParamsRfqAttachmentsCache.parse>>
+ // 설계 탭 파라미터
+ design_page: parseAsInteger.withDefault(1),
+ design_perPage: parseAsInteger.withDefault(10),
+ design_sort: getSortingStateParser<RfqLastAttachments>().withDefault([
+ { id: "createdAt", desc: true },
+ ]),
+ design_search: parseAsString.withDefault(""),
+ design_fileType: parseAsArrayOf(z.string()).withDefault([]),
+ design_filters: getFiltersStateParser().withDefault([]),
+ design_joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
+
+ // 구매 탭 파라미터
+ purchase_page: parseAsInteger.withDefault(1),
+ purchase_perPage: parseAsInteger.withDefault(10),
+ purchase_sort: getSortingStateParser<RfqLastAttachments>().withDefault([
+ { id: "createdAt", desc: true },
+ ]),
+ purchase_search: parseAsString.withDefault(""),
+ purchase_fileType: parseAsArrayOf(z.string()).withDefault([]),
+ purchase_filters: getFiltersStateParser().withDefault([]),
+ purchase_joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"),
+})
+
+// 타입 정의
+export type GetRfqLastAttachmentsSchema = {
+ page: number
+ perPage: number
+ sort: Array<{ id: string; desc: boolean }>
+ search: string
+ fileType: string[]
+ filters: any[]
+ joinOperator: "and" | "or"
+ attachmentType?: string[]
+}
+
+// 헬퍼 함수: prefix가 붙은 파라미터를 일반 파라미터로 변환
+export function extractTabParams(
+ allParams: Awaited<ReturnType<typeof searchParamsRfqAttachmentsCache.parse>>,
+ tabPrefix: 'design' | 'purchase'
+): GetRfqLastAttachmentsSchema {
+ const prefix = `${tabPrefix}_`
+ return {
+ page: allParams[`${prefix}page` as keyof typeof allParams] as number,
+ perPage: allParams[`${prefix}perPage` as keyof typeof allParams] as number,
+ sort: allParams[`${prefix}sort` as keyof typeof allParams] as any,
+ search: allParams[`${prefix}search` as keyof typeof allParams] as string,
+ fileType: allParams[`${prefix}fileType` as keyof typeof allParams] as string[],
+ filters: allParams[`${prefix}filters` as keyof typeof allParams] as any[],
+ joinOperator: allParams[`${prefix}joinOperator` as keyof typeof allParams] as "and" | "or",
+ }
+} \ No newline at end of file