Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions public/r/data-table-filter-list.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@
},
{
"path": "src/lib/parsers.ts",
"content": "import { createParser } from \"nuqs/server\";\nimport { z } from \"zod\";\n\nimport { dataTableConfig } from \"@/config/data-table\";\n\nimport type {\n ExtendedColumnFilter,\n ExtendedColumnSort,\n} from \"@/types/data-table\";\n\nconst sortingItemSchema = z.object({\n id: z.string(),\n desc: z.boolean(),\n});\n\nexport const getSortingStateParser = <TData>(\n columnIds?: string[] | Set<string>,\n) => {\n const validKeys = columnIds\n ? columnIds instanceof Set\n ? columnIds\n : new Set(columnIds)\n : null;\n\n return createParser({\n parse: (value) => {\n try {\n const parsed = JSON.parse(value);\n const result = z.array(sortingItemSchema).safeParse(parsed);\n\n if (!result.success) return null;\n\n if (validKeys && result.data.some((item) => !validKeys.has(item.id))) {\n return null;\n }\n\n return result.data as ExtendedColumnSort<TData>[];\n } catch {\n return null;\n }\n },\n serialize: (value) => JSON.stringify(value),\n eq: (a, b) =>\n a.length === b.length &&\n a.every(\n (item, index) =>\n item.id === b[index]?.id && item.desc === b[index]?.desc,\n ),\n });\n};\n\nconst filterSchema = z.object({\n id: z.string(),\n value: z.union([z.string(), z.array(z.string())]),\n variant: z.enum(dataTableConfig.filterVariants),\n operator: z.enum(dataTableConfig.operators),\n filterId: z.string(),\n});\n\nexport type FilterSchema = z.infer<typeof filterSchema>;\n\nexport const getFiltersStateParser = <TData>(\n columnIds?: string[] | Set<string>,\n) => {\n const validKeys = columnIds\n ? columnIds instanceof Set\n ? columnIds\n : new Set(columnIds)\n : null;\n\n return createParser({\n parse: (value) => {\n try {\n const parsed = JSON.parse(value);\n const result = z.array(filterSchema).safeParse(parsed);\n\n if (!result.success) return null;\n\n if (validKeys && result.data.some((item) => !validKeys.has(item.id))) {\n return null;\n }\n\n return result.data as ExtendedColumnFilter<TData>[];\n } catch {\n return null;\n }\n },\n serialize: (value) => JSON.stringify(value),\n eq: (a, b) =>\n a.length === b.length &&\n a.every(\n (filter, index) =>\n filter.id === b[index]?.id &&\n filter.value === b[index]?.value &&\n filter.variant === b[index]?.variant &&\n filter.operator === b[index]?.operator,\n ),\n });\n};\n",
"content": "import { createParser } from \"nuqs/server\";\nimport { z } from \"zod\";\n\nimport { dataTableConfig } from \"@/config/data-table\";\n\nimport type {\n ExtendedColumnFilter,\n ExtendedColumnSort,\n} from \"@/types/data-table\";\n\nconst sortingItemSchema = z.object({\n id: z.string(),\n desc: z.boolean(),\n});\n\nexport const getSortingStateParser = <TData>(\n columnIds?: string[] | Set<string>,\n) => {\n const validKeys = columnIds\n ? columnIds instanceof Set\n ? columnIds\n : new Set(columnIds)\n : null;\n\n return createParser({\n parse: (value) => {\n try {\n const parsed = JSON.parse(value);\n const result = z.array(sortingItemSchema).safeParse(parsed);\n\n if (!result.success) return null;\n\n if (validKeys && result.data.some((item) => !validKeys.has(item.id))) {\n return null;\n }\n\n return result.data as ExtendedColumnSort<TData>[];\n } catch {\n return null;\n }\n },\n serialize: (value) => JSON.stringify(value),\n eq: (a, b) =>\n a.length === b.length &&\n a.every(\n (item, index) =>\n item.id === b[index]?.id && item.desc === b[index]?.desc,\n ),\n });\n};\n\nconst filterItemSchema = z.object({\n id: z.string(),\n value: z.union([z.string(), z.array(z.string())]),\n variant: z.enum(dataTableConfig.filterVariants),\n operator: z.enum(dataTableConfig.operators),\n filterId: z.string(),\n});\n\nexport type FilterItemSchema = z.infer<typeof filterItemSchema>;\n\nexport const getFiltersStateParser = <TData>(\n columnIds?: string[] | Set<string>,\n) => {\n const validKeys = columnIds\n ? columnIds instanceof Set\n ? columnIds\n : new Set(columnIds)\n : null;\n\n return createParser({\n parse: (value) => {\n try {\n const parsed = JSON.parse(value);\n const result = z.array(filterItemSchema).safeParse(parsed);\n\n if (!result.success) return null;\n\n if (validKeys && result.data.some((item) => !validKeys.has(item.id))) {\n return null;\n }\n\n return result.data as ExtendedColumnFilter<TData>[];\n } catch {\n return null;\n }\n },\n serialize: (value) => JSON.stringify(value),\n eq: (a, b) =>\n a.length === b.length &&\n a.every(\n (filter, index) =>\n filter.id === b[index]?.id &&\n filter.value === b[index]?.value &&\n filter.variant === b[index]?.variant &&\n filter.operator === b[index]?.operator,\n ),\n });\n};\n",
"type": "registry:lib"
},
{
Expand All @@ -87,7 +87,7 @@
},
{
"path": "src/types/data-table.ts",
"content": "import type { DataTableConfig } from \"@/config/data-table\";\nimport type { FilterSchema } from \"@/lib/parsers\";\nimport type { ColumnSort, Row, RowData } from \"@tanstack/react-table\";\n\ndeclare module \"@tanstack/react-table\" {\n // biome-ignore lint/correctness/noUnusedVariables: <explanation>\n interface ColumnMeta<TData extends RowData, TValue> {\n label?: string;\n placeholder?: string;\n variant?: FilterVariant;\n options?: Option[];\n range?: [number, number];\n unit?: string;\n icon?: React.FC<React.SVGProps<SVGSVGElement>>;\n }\n}\n\nexport interface Option {\n label: string;\n value: string;\n count?: number;\n icon?: React.FC<React.SVGProps<SVGSVGElement>>;\n}\n\nexport type FilterOperator = DataTableConfig[\"operators\"][number];\nexport type FilterVariant = DataTableConfig[\"filterVariants\"][number];\nexport type JoinOperator = DataTableConfig[\"joinOperators\"][number];\n\nexport interface ExtendedColumnSort<TData> extends Omit<ColumnSort, \"id\"> {\n id: Extract<keyof TData, string>;\n}\n\nexport interface ExtendedColumnFilter<TData> extends FilterSchema {\n id: Extract<keyof TData, string>;\n}\n\nexport interface DataTableRowAction<TData> {\n row: Row<TData>;\n variant: \"update\" | \"delete\";\n}\n",
"content": "import type { DataTableConfig } from \"@/config/data-table\";\nimport type { FilterItemSchema } from \"@/lib/parsers\";\nimport type { ColumnSort, Row, RowData } from \"@tanstack/react-table\";\n\ndeclare module \"@tanstack/react-table\" {\n // biome-ignore lint/correctness/noUnusedVariables: <explanation>\n interface ColumnMeta<TData extends RowData, TValue> {\n label?: string;\n placeholder?: string;\n variant?: FilterVariant;\n options?: Option[];\n range?: [number, number];\n unit?: string;\n icon?: React.FC<React.SVGProps<SVGSVGElement>>;\n }\n}\n\nexport interface Option {\n label: string;\n value: string;\n count?: number;\n icon?: React.FC<React.SVGProps<SVGSVGElement>>;\n}\n\nexport type FilterOperator = DataTableConfig[\"operators\"][number];\nexport type FilterVariant = DataTableConfig[\"filterVariants\"][number];\nexport type JoinOperator = DataTableConfig[\"joinOperators\"][number];\n\nexport interface ExtendedColumnSort<TData> extends Omit<ColumnSort, \"id\"> {\n id: Extract<keyof TData, string>;\n}\n\nexport interface ExtendedColumnFilter<TData> extends FilterItemSchema {\n id: Extract<keyof TData, string>;\n}\n\nexport interface DataTableRowAction<TData> {\n row: Row<TData>;\n variant: \"update\" | \"delete\";\n}\n",
"type": "registry:file",
"target": "src/types/data-table.ts"
}
Expand Down
4 changes: 2 additions & 2 deletions public/r/data-table-filter-menu.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
},
{
"path": "src/lib/parsers.ts",
"content": "import { createParser } from \"nuqs/server\";\nimport { z } from \"zod\";\n\nimport { dataTableConfig } from \"@/config/data-table\";\n\nimport type {\n ExtendedColumnFilter,\n ExtendedColumnSort,\n} from \"@/types/data-table\";\n\nconst sortingItemSchema = z.object({\n id: z.string(),\n desc: z.boolean(),\n});\n\nexport const getSortingStateParser = <TData>(\n columnIds?: string[] | Set<string>,\n) => {\n const validKeys = columnIds\n ? columnIds instanceof Set\n ? columnIds\n : new Set(columnIds)\n : null;\n\n return createParser({\n parse: (value) => {\n try {\n const parsed = JSON.parse(value);\n const result = z.array(sortingItemSchema).safeParse(parsed);\n\n if (!result.success) return null;\n\n if (validKeys && result.data.some((item) => !validKeys.has(item.id))) {\n return null;\n }\n\n return result.data as ExtendedColumnSort<TData>[];\n } catch {\n return null;\n }\n },\n serialize: (value) => JSON.stringify(value),\n eq: (a, b) =>\n a.length === b.length &&\n a.every(\n (item, index) =>\n item.id === b[index]?.id && item.desc === b[index]?.desc,\n ),\n });\n};\n\nconst filterSchema = z.object({\n id: z.string(),\n value: z.union([z.string(), z.array(z.string())]),\n variant: z.enum(dataTableConfig.filterVariants),\n operator: z.enum(dataTableConfig.operators),\n filterId: z.string(),\n});\n\nexport type FilterSchema = z.infer<typeof filterSchema>;\n\nexport const getFiltersStateParser = <TData>(\n columnIds?: string[] | Set<string>,\n) => {\n const validKeys = columnIds\n ? columnIds instanceof Set\n ? columnIds\n : new Set(columnIds)\n : null;\n\n return createParser({\n parse: (value) => {\n try {\n const parsed = JSON.parse(value);\n const result = z.array(filterSchema).safeParse(parsed);\n\n if (!result.success) return null;\n\n if (validKeys && result.data.some((item) => !validKeys.has(item.id))) {\n return null;\n }\n\n return result.data as ExtendedColumnFilter<TData>[];\n } catch {\n return null;\n }\n },\n serialize: (value) => JSON.stringify(value),\n eq: (a, b) =>\n a.length === b.length &&\n a.every(\n (filter, index) =>\n filter.id === b[index]?.id &&\n filter.value === b[index]?.value &&\n filter.variant === b[index]?.variant &&\n filter.operator === b[index]?.operator,\n ),\n });\n};\n",
"content": "import { createParser } from \"nuqs/server\";\nimport { z } from \"zod\";\n\nimport { dataTableConfig } from \"@/config/data-table\";\n\nimport type {\n ExtendedColumnFilter,\n ExtendedColumnSort,\n} from \"@/types/data-table\";\n\nconst sortingItemSchema = z.object({\n id: z.string(),\n desc: z.boolean(),\n});\n\nexport const getSortingStateParser = <TData>(\n columnIds?: string[] | Set<string>,\n) => {\n const validKeys = columnIds\n ? columnIds instanceof Set\n ? columnIds\n : new Set(columnIds)\n : null;\n\n return createParser({\n parse: (value) => {\n try {\n const parsed = JSON.parse(value);\n const result = z.array(sortingItemSchema).safeParse(parsed);\n\n if (!result.success) return null;\n\n if (validKeys && result.data.some((item) => !validKeys.has(item.id))) {\n return null;\n }\n\n return result.data as ExtendedColumnSort<TData>[];\n } catch {\n return null;\n }\n },\n serialize: (value) => JSON.stringify(value),\n eq: (a, b) =>\n a.length === b.length &&\n a.every(\n (item, index) =>\n item.id === b[index]?.id && item.desc === b[index]?.desc,\n ),\n });\n};\n\nconst filterItemSchema = z.object({\n id: z.string(),\n value: z.union([z.string(), z.array(z.string())]),\n variant: z.enum(dataTableConfig.filterVariants),\n operator: z.enum(dataTableConfig.operators),\n filterId: z.string(),\n});\n\nexport type FilterItemSchema = z.infer<typeof filterItemSchema>;\n\nexport const getFiltersStateParser = <TData>(\n columnIds?: string[] | Set<string>,\n) => {\n const validKeys = columnIds\n ? columnIds instanceof Set\n ? columnIds\n : new Set(columnIds)\n : null;\n\n return createParser({\n parse: (value) => {\n try {\n const parsed = JSON.parse(value);\n const result = z.array(filterItemSchema).safeParse(parsed);\n\n if (!result.success) return null;\n\n if (validKeys && result.data.some((item) => !validKeys.has(item.id))) {\n return null;\n }\n\n return result.data as ExtendedColumnFilter<TData>[];\n } catch {\n return null;\n }\n },\n serialize: (value) => JSON.stringify(value),\n eq: (a, b) =>\n a.length === b.length &&\n a.every(\n (filter, index) =>\n filter.id === b[index]?.id &&\n filter.value === b[index]?.value &&\n filter.variant === b[index]?.variant &&\n filter.operator === b[index]?.operator,\n ),\n });\n};\n",
"type": "registry:lib"
},
{
Expand All @@ -73,7 +73,7 @@
},
{
"path": "src/types/data-table.ts",
"content": "import type { DataTableConfig } from \"@/config/data-table\";\nimport type { FilterSchema } from \"@/lib/parsers\";\nimport type { ColumnSort, Row, RowData } from \"@tanstack/react-table\";\n\ndeclare module \"@tanstack/react-table\" {\n // biome-ignore lint/correctness/noUnusedVariables: <explanation>\n interface ColumnMeta<TData extends RowData, TValue> {\n label?: string;\n placeholder?: string;\n variant?: FilterVariant;\n options?: Option[];\n range?: [number, number];\n unit?: string;\n icon?: React.FC<React.SVGProps<SVGSVGElement>>;\n }\n}\n\nexport interface Option {\n label: string;\n value: string;\n count?: number;\n icon?: React.FC<React.SVGProps<SVGSVGElement>>;\n}\n\nexport type FilterOperator = DataTableConfig[\"operators\"][number];\nexport type FilterVariant = DataTableConfig[\"filterVariants\"][number];\nexport type JoinOperator = DataTableConfig[\"joinOperators\"][number];\n\nexport interface ExtendedColumnSort<TData> extends Omit<ColumnSort, \"id\"> {\n id: Extract<keyof TData, string>;\n}\n\nexport interface ExtendedColumnFilter<TData> extends FilterSchema {\n id: Extract<keyof TData, string>;\n}\n\nexport interface DataTableRowAction<TData> {\n row: Row<TData>;\n variant: \"update\" | \"delete\";\n}\n",
"content": "import type { DataTableConfig } from \"@/config/data-table\";\nimport type { FilterItemSchema } from \"@/lib/parsers\";\nimport type { ColumnSort, Row, RowData } from \"@tanstack/react-table\";\n\ndeclare module \"@tanstack/react-table\" {\n // biome-ignore lint/correctness/noUnusedVariables: <explanation>\n interface ColumnMeta<TData extends RowData, TValue> {\n label?: string;\n placeholder?: string;\n variant?: FilterVariant;\n options?: Option[];\n range?: [number, number];\n unit?: string;\n icon?: React.FC<React.SVGProps<SVGSVGElement>>;\n }\n}\n\nexport interface Option {\n label: string;\n value: string;\n count?: number;\n icon?: React.FC<React.SVGProps<SVGSVGElement>>;\n}\n\nexport type FilterOperator = DataTableConfig[\"operators\"][number];\nexport type FilterVariant = DataTableConfig[\"filterVariants\"][number];\nexport type JoinOperator = DataTableConfig[\"joinOperators\"][number];\n\nexport interface ExtendedColumnSort<TData> extends Omit<ColumnSort, \"id\"> {\n id: Extract<keyof TData, string>;\n}\n\nexport interface ExtendedColumnFilter<TData> extends FilterItemSchema {\n id: Extract<keyof TData, string>;\n}\n\nexport interface DataTableRowAction<TData> {\n row: Row<TData>;\n variant: \"update\" | \"delete\";\n}\n",
"type": "registry:file",
"target": "src/types/data-table.ts"
}
Expand Down
Loading