nest-filter 1.0.14 → 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AdvancedFilter.js +4 -4
- package/dist/components/AdvancedFilter.js.map +1 -1
- package/dist/components/ui/dialog.js +1 -1
- package/dist/components/ui/dialog.js.map +1 -1
- package/package.json +1 -1
- package/src/components/AdvancedFilter.tsx +9 -4
- package/src/components/ui/Dialog.tsx +1 -1
|
@@ -51,7 +51,7 @@ const FilterGroupUI = ({ group, depth, columns, onAddRule, onAddGroup, onUpdateR
|
|
|
51
51
|
? "bg-slate-900 text-slate-50"
|
|
52
52
|
: "text-slate-500 hover:text-slate-900"}`, children: "OR" })] })] }), jsxs("div", { className: "flex items-center gap-2", children: [jsxs(Button, { variant: "outline", size: "sm", onClick: () => onAddRule(group.id), className: "h-7 text-[10px] font-bold uppercase", children: [jsx(Plus, { className: "mr-1 h-3 w-3" }), " Rule"] }), jsxs(Button, { variant: "outline", size: "sm", onClick: () => onAddGroup(group.id), className: "h-7 text-[10px] font-bold uppercase", children: [jsx(Layers, { className: "mr-1 h-3 w-3" }), " Group"] }), depth > 0 && (jsx(Button, { variant: "ghost", size: "sm", onClick: () => onRemoveItem(group.id), className: "text-slate-400", children: jsx(Trash2, { className: "h-5 w-5 text-red-500" }) }))] })] }), jsxs("div", { className: "space-y-3", children: [group.items.map((item) => {
|
|
53
53
|
const column = columns.find((c) => c.id === (item.type === "rule" ? item.columnId : null));
|
|
54
|
-
return item.type === "rule" ? (jsxs("div", { className: "flex flex-col md:flex-row md:items-center gap-3 p-3 bg-white border border-slate-200 rounded-md shadow-sm", children: [jsx("div", { className: "
|
|
54
|
+
return item.type === "rule" ? (jsxs("div", { className: "flex flex-col md:flex-row md:items-center gap-3 p-3 bg-white border border-slate-200 rounded-md shadow-sm", children: [jsx("div", { className: "w-1/5", children: jsx(Select, { value: item.columnId, options: columns.map((c) => ({
|
|
55
55
|
value: c.id,
|
|
56
56
|
label: c.label,
|
|
57
57
|
})), onValueChange: (val) => {
|
|
@@ -68,10 +68,10 @@ const FilterGroupUI = ({ group, depth, columns, onAddRule, onAddGroup, onUpdateR
|
|
|
68
68
|
: "contains",
|
|
69
69
|
value: "",
|
|
70
70
|
});
|
|
71
|
-
} }) }), jsx("div", { className: "w-
|
|
71
|
+
}, className: "w-full" }) }), jsx("div", { className: "w-1/5", children: jsx(Select, { value: item.operator, options: getOperatorsForType(column?.type || "string"), onValueChange: (val) => onUpdateRule(item.id, { operator: val }), className: "w-full" }) }), jsx("div", { className: "w-2/5", children: column?.type === "date" ? (jsx(Input, { type: "date", value: item.value || "", onChange: (e) => onUpdateRule(item.id, { value: e.target.value }), className: "w-full" })) : column?.type === "boolean" ? (jsxs("div", { className: "h-10 flex items-center px-3 border border-slate-200 rounded-md bg-slate-50 text-[10px] font-black uppercase tracking-tighter text-slate-400 italic", children: [jsx(Binary, { className: "h-3 w-3 mr-2" }), "Binary state"] })) : column?.type === "select" ? (jsx(Select, { value: item.value || "", placeholder: "Choose option...", options: (column.options || []).map((opt) => ({
|
|
72
72
|
value: opt,
|
|
73
73
|
label: opt,
|
|
74
|
-
})), onValueChange: (val) => onUpdateRule(item.id, { value: val }) })) : (jsx(Input, { placeholder: "Search query...", value: item.value || "", onChange: (e) => onUpdateRule(item.id, { value: e.target.value }) })) }), jsx(Button, { variant: "ghost", size: "icon", onClick: () => onRemoveItem(item.id), className: "h-9 w-9 text-slate-300 hover:text-red-500 hover:bg-red-50", children: jsx(Trash2, { className: "h-5 w-5 text-red-500" }) })] }, item.id)) : (jsx(FilterGroupUI, { group: item, depth: depth + 1, columns: columns, onAddRule: onAddRule, onAddGroup: onAddGroup, onUpdateRule: onUpdateRule, onUpdateGroupLogic: onUpdateGroupLogic, onRemoveItem: onRemoveItem }));
|
|
74
|
+
})), onValueChange: (val) => onUpdateRule(item.id, { value: val }), className: "w-full" })) : (jsx(Input, { placeholder: "Search query...", value: item.value || "", onChange: (e) => onUpdateRule(item.id, { value: e.target.value }), className: "w-full" })) }), jsx(Button, { variant: "ghost", size: "icon", onClick: () => onRemoveItem(item.id), className: "h-9 w-9 text-slate-300 hover:text-red-500 hover:bg-red-50", children: jsx(Trash2, { className: "h-5 w-5 text-red-500" }) })] }, item.id)) : (jsx(FilterGroupUI, { group: item, depth: depth + 1, columns: columns, onAddRule: onAddRule, onAddGroup: onAddGroup, onUpdateRule: onUpdateRule, onUpdateGroupLogic: onUpdateGroupLogic, onRemoveItem: onRemoveItem }));
|
|
75
75
|
}), group.items.length === 0 && (jsxs("div", { className: "flex flex-col items-center justify-center py-6 rounded-md border border-dashed border-slate-200 bg-white/50", children: [jsx(ListFilter, { className: "h-5 w-5 text-slate-300 mb-1" }), jsx("p", { className: "text-[10px] text-slate-400 font-bold uppercase tracking-widest", children: "Add a rule to filter" })] }))] })] }));
|
|
76
76
|
};
|
|
77
77
|
const AdvancedFilter = ({ isOpen, onClose, data, columns, setFilteredData, initialFilters, }) => {
|
|
@@ -156,7 +156,7 @@ const AdvancedFilter = ({ isOpen, onClose, data, columns, setFilteredData, initi
|
|
|
156
156
|
setFilteredData(data);
|
|
157
157
|
onClose();
|
|
158
158
|
};
|
|
159
|
-
return (jsxs(Dialog, { open: isOpen, onOpenChange: onClose, title: "Advanced Filters", description: "Refine your dataset using structured logic and multi-type comparisons.", children: [jsx("div", { className: "max-h-[60vh] overflow-y-auto px-1 custom-scrollbar pr-3 pb-32", children: jsx(FilterGroupUI, { group: rootGroup, depth: 0, columns: columns, onAddRule: handleAddRule, onAddGroup: handleAddGroup, onUpdateRule: handleUpdateRule, onUpdateGroupLogic: handleUpdateGroupLogic, onRemoveItem: handleRemoveItem }) }), jsxs("div", { className: "flex w-full justify-between items-center gap-4", children: [jsxs(Button, { variant: "ghost", onClick: handleClear, className: "text-slate-400 hover:text-red-500 font-black text-[10px] uppercase tracking-widest gap-2", children: [jsx(FilterX, { className: "h-4 w-4" }), " Reset Filters"] }), jsxs("div", { className: "flex gap-2", children: [jsx(Button, { variant: "outline", onClick: onClose, className: "font-bold h-11 px-6", children: "Cancel" }), jsx(Button, { onClick: handleApply, className: "bg-slate-900 font-bold h-11 px-10 rounded-lg shadow-lg hover:shadow-xl transition-shadow", children: "Apply View" })] })] })] }));
|
|
159
|
+
return (jsxs(Dialog, { open: isOpen, onOpenChange: onClose, title: "Advanced Filters", description: "Refine your dataset using structured logic and multi-type comparisons.", children: [jsx("div", { className: "max-h-[60vh] max-w-[70vw] overflow-y-auto px-1 custom-scrollbar pr-3 pb-32", children: jsx(FilterGroupUI, { group: rootGroup, depth: 0, columns: columns, onAddRule: handleAddRule, onAddGroup: handleAddGroup, onUpdateRule: handleUpdateRule, onUpdateGroupLogic: handleUpdateGroupLogic, onRemoveItem: handleRemoveItem }) }), jsxs("div", { className: "flex w-full justify-between items-center gap-4", children: [jsxs(Button, { variant: "ghost", onClick: handleClear, className: "text-slate-400 hover:text-red-500 font-black text-[10px] uppercase tracking-widest gap-2", children: [jsx(FilterX, { className: "h-4 w-4" }), " Reset Filters"] }), jsxs("div", { className: "flex gap-2", children: [jsx(Button, { variant: "outline", onClick: onClose, className: "font-bold h-11 px-6", children: "Cancel" }), jsx(Button, { onClick: handleApply, className: "bg-slate-900 font-bold h-11 px-10 rounded-lg shadow-lg hover:shadow-xl transition-shadow", children: "Apply View" })] })] })] }));
|
|
160
160
|
};
|
|
161
161
|
|
|
162
162
|
export { AdvancedFilter };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedFilter.js","sources":["../../src/components/AdvancedFilter.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { useState, useEffect, useCallback } from \"react\";\r\nimport {\r\n FilterRule,\r\n FilterGroup,\r\n ColumnDefinition,\r\n LogicalOperator,\r\n FilterOperator,\r\n FilterItem,\r\n} from \"../types\";\r\nimport { Button } from \"./ui/Button\";\r\nimport { Input } from \"./ui/Input\";\r\nimport { Select } from \"./ui/Select\";\r\nimport { Dialog } from \"./ui/Dialog\";\r\nimport {\r\n Plus,\r\n Trash2,\r\n Layers,\r\n Binary,\r\n FilterX,\r\n ListFilter,\r\n} from \"lucide-react\";\r\nimport { applyFilters } from \"../utils/filterLogic\";\r\n\r\ninterface AdvancedFilterProps<T> {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n data: T[];\r\n columns: ColumnDefinition<T>[];\r\n setFilteredData: (data: T[]) => void;\r\n initialFilters?: FilterGroup<T>;\r\n}\r\n\r\nconst getOperatorsForType = (\r\n type: string\r\n): { value: FilterOperator; label: string }[] => {\r\n switch (type) {\r\n case \"string\":\r\n return [\r\n { value: \"contains\", label: \"Contains\" },\r\n { value: \"not_contains\", label: \"Does not contain\" },\r\n { value: \"equals\", label: \"Exact match\" },\r\n ];\r\n case \"select\":\r\n return [\r\n { value: \"equals\", label: \"Is\" },\r\n { value: \"not_equals\", label: \"Is not\" },\r\n ];\r\n case \"number\":\r\n return [\r\n { value: \"equals\", label: \"=\" },\r\n { value: \"not_equals\", label: \"!=\" },\r\n { value: \"gt\", label: \">\" },\r\n { value: \"lt\", label: \"<\" },\r\n { value: \"gte\", label: \">=\" },\r\n { value: \"lte\", label: \"<=\" },\r\n ];\r\n case \"date\":\r\n return [\r\n { value: \"is\", label: \"On date\" },\r\n { value: \"before\", label: \"Before\" },\r\n { value: \"after\", label: \"After\" },\r\n ];\r\n case \"boolean\":\r\n return [\r\n { value: \"true\", label: \"True\" },\r\n { value: \"false\", label: \"False\" },\r\n ];\r\n default:\r\n return [];\r\n }\r\n};\r\n\r\nconst FilterGroupUI = <T,>({\r\n group,\r\n depth,\r\n columns,\r\n onAddRule,\r\n onAddGroup,\r\n onUpdateRule,\r\n onUpdateGroupLogic,\r\n onRemoveItem,\r\n}: {\r\n group: FilterGroup<T>;\r\n depth: number;\r\n columns: ColumnDefinition<T>[];\r\n onAddRule: (parentId: string) => void;\r\n onAddGroup: (parentId: string) => void;\r\n onUpdateRule: (ruleId: string, updates: Partial<FilterRule<T>>) => void;\r\n onUpdateGroupLogic: (groupId: string, logic: LogicalOperator) => void;\r\n onRemoveItem: (itemId: string) => void;\r\n}) => {\r\n return (\r\n <div\r\n className={`rounded-lg border border-slate-200 bg-slate-50/50 p-4 mb-4 ${\r\n depth > 0 ? \"ml-6 md:ml-10 relative border-l-2 border-l-slate-300\" : \"\"\r\n }`}\r\n >\r\n <div className=\"flex flex-wrap items-center justify-between gap-4 mb-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-[10px] font-bold uppercase tracking-widest text-slate-500\">\r\n Group Logic\r\n </span>\r\n <div className=\"flex rounded-md border border-slate-200 bg-white p-1 shadow-sm\">\r\n <button\r\n onClick={() => onUpdateGroupLogic(group.id, \"AND\")}\r\n className={`px-3 py-1 text-[10px] font-black rounded-sm transition-all ${\r\n group.logic === \"AND\"\r\n ? \"bg-slate-900 text-slate-50\"\r\n : \"text-slate-500 hover:text-slate-900\"\r\n }`}\r\n >\r\n AND\r\n </button>\r\n <button\r\n onClick={() => onUpdateGroupLogic(group.id, \"OR\")}\r\n className={`px-3 py-1 text-[10px] font-black rounded-sm transition-all ${\r\n group.logic === \"OR\"\r\n ? \"bg-slate-900 text-slate-50\"\r\n : \"text-slate-500 hover:text-slate-900\"\r\n }`}\r\n >\r\n OR\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onAddRule(group.id)}\r\n className=\"h-7 text-[10px] font-bold uppercase\"\r\n >\r\n <Plus className=\"mr-1 h-3 w-3\" /> Rule\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onAddGroup(group.id)}\r\n className=\"h-7 text-[10px] font-bold uppercase\"\r\n >\r\n <Layers className=\"mr-1 h-3 w-3\" /> Group\r\n </Button>\r\n {depth > 0 && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => onRemoveItem(group.id)}\r\n className=\"text-slate-400\"\r\n >\r\n <Trash2 className=\"h-5 w-5 text-red-500\" />\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-3\">\r\n {group.items.map((item) => {\r\n const column = columns.find(\r\n (c) => c.id === (item.type === \"rule\" ? item.columnId : null)\r\n );\r\n return item.type === \"rule\" ? (\r\n <div\r\n key={item.id}\r\n className=\"flex flex-col md:flex-row md:items-center gap-3 p-3 bg-white border border-slate-200 rounded-md shadow-sm\"\r\n >\r\n <div className=\"flex-1 min-w-[140px]\">\r\n <Select\r\n value={item.columnId as string}\r\n options={columns.map((c) => ({\r\n value: c.id as string,\r\n label: c.label,\r\n }))}\r\n onValueChange={(val) => {\r\n const colId = val as keyof T;\r\n const col = columns.find((c) => c.id === colId);\r\n onUpdateRule(item.id, {\r\n columnId: colId,\r\n operator:\r\n col?.type === \"date\"\r\n ? \"is\"\r\n : col?.type === \"number\"\r\n ? \"equals\"\r\n : col?.type === \"select\"\r\n ? \"equals\"\r\n : \"contains\",\r\n value: \"\",\r\n });\r\n }}\r\n />\r\n </div>\r\n <div className=\"w-full md:w-44\">\r\n <Select\r\n value={item.operator}\r\n options={getOperatorsForType(column?.type || \"string\")}\r\n onValueChange={(val) =>\r\n onUpdateRule(item.id, { operator: val as FilterOperator })\r\n }\r\n />\r\n </div>\r\n <div className=\"flex-[1.5] min-w-[180px]\">\r\n {column?.type === \"date\" ? (\r\n <Input\r\n type=\"date\"\r\n value={item.value || \"\"}\r\n onChange={(e) =>\r\n onUpdateRule(item.id, { value: e.target.value })\r\n }\r\n />\r\n ) : column?.type === \"boolean\" ? (\r\n <div className=\"h-10 flex items-center px-3 border border-slate-200 rounded-md bg-slate-50 text-[10px] font-black uppercase tracking-tighter text-slate-400 italic\">\r\n <Binary className=\"h-3 w-3 mr-2\" />\r\n Binary state\r\n </div>\r\n ) : column?.type === \"select\" ? (\r\n <Select\r\n value={item.value || \"\"}\r\n placeholder=\"Choose option...\"\r\n options={(column.options || []).map((opt) => ({\r\n value: opt,\r\n label: opt,\r\n }))}\r\n onValueChange={(val) =>\r\n onUpdateRule(item.id, { value: val })\r\n }\r\n />\r\n ) : (\r\n <Input\r\n placeholder=\"Search query...\"\r\n value={item.value || \"\"}\r\n onChange={(e) =>\r\n onUpdateRule(item.id, { value: e.target.value })\r\n }\r\n />\r\n )}\r\n </div>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={() => onRemoveItem(item.id)}\r\n className=\"h-9 w-9 text-slate-300 hover:text-red-500 hover:bg-red-50\"\r\n >\r\n <Trash2 className=\"h-5 w-5 text-red-500\" />\r\n </Button>\r\n </div>\r\n ) : (\r\n <FilterGroupUI\r\n group={item}\r\n depth={depth + 1}\r\n columns={columns}\r\n onAddRule={onAddRule}\r\n onAddGroup={onAddGroup}\r\n onUpdateRule={onUpdateRule}\r\n onUpdateGroupLogic={onUpdateGroupLogic}\r\n onRemoveItem={onRemoveItem}\r\n />\r\n );\r\n })}\r\n {group.items.length === 0 && (\r\n <div className=\"flex flex-col items-center justify-center py-6 rounded-md border border-dashed border-slate-200 bg-white/50\">\r\n <ListFilter className=\"h-5 w-5 text-slate-300 mb-1\" />\r\n <p className=\"text-[10px] text-slate-400 font-bold uppercase tracking-widest\">\r\n Add a rule to filter\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport const AdvancedFilter = <T,>({\r\n isOpen,\r\n onClose,\r\n data,\r\n columns,\r\n setFilteredData,\r\n initialFilters,\r\n}: AdvancedFilterProps<T>) => {\r\n const [rootGroup, setRootGroup] = useState<FilterGroup<T>>({\r\n type: \"group\",\r\n id: \"root\",\r\n logic: \"AND\",\r\n items: [],\r\n });\r\n\r\n useEffect(() => {\r\n if (initialFilters) setRootGroup(initialFilters);\r\n }, [initialFilters, isOpen]);\r\n\r\n const updateItemRecursively = useCallback(\r\n (\r\n group: FilterGroup<T>,\r\n targetId: string,\r\n updater: (item: FilterItem<T>) => FilterItem<T> | null\r\n ): FilterGroup<T> => {\r\n if (group.id === targetId) return updater(group) as FilterGroup<T>;\r\n return {\r\n ...group,\r\n items: group.items\r\n .map((item) => {\r\n if (item.id === targetId) return updater(item);\r\n if (item.type === \"group\")\r\n return updateItemRecursively(item, targetId, updater);\r\n return item;\r\n })\r\n .filter(Boolean) as FilterItem<T>[],\r\n };\r\n },\r\n []\r\n );\r\n\r\n const handleAddRule = useCallback(\r\n (parentId: string) => {\r\n const firstCol = columns[0];\r\n const newRule: FilterRule<T> = {\r\n type: \"rule\",\r\n id: Math.random().toString(36).substr(2, 9),\r\n columnId: firstCol.id,\r\n operator:\r\n firstCol.type === \"string\"\r\n ? \"contains\"\r\n : firstCol.type === \"select\"\r\n ? \"equals\"\r\n : \"equals\",\r\n value: \"\",\r\n };\r\n setRootGroup((prev) =>\r\n updateItemRecursively(prev, parentId, (group) => ({\r\n ...(group as FilterGroup<T>),\r\n items: [...(group as FilterGroup<T>).items, newRule],\r\n }))\r\n );\r\n },\r\n [columns, updateItemRecursively]\r\n );\r\n\r\n const handleAddGroup = useCallback(\r\n (parentId: string) => {\r\n const newGroup: FilterGroup<T> = {\r\n type: \"group\",\r\n id: Math.random().toString(36).substr(2, 9),\r\n logic: \"AND\",\r\n items: [],\r\n };\r\n setRootGroup((prev) =>\r\n updateItemRecursively(prev, parentId, (group) => ({\r\n ...(group as FilterGroup<T>),\r\n items: [...(group as FilterGroup<T>).items, newGroup],\r\n }))\r\n );\r\n },\r\n [updateItemRecursively]\r\n );\r\n\r\n const handleUpdateRule = useCallback(\r\n (ruleId: string, updates: Partial<FilterRule<T>>) => {\r\n setRootGroup((prev) =>\r\n updateItemRecursively(\r\n prev,\r\n ruleId,\r\n (rule) => ({ ...rule, ...updates } as FilterRule<T>)\r\n )\r\n );\r\n },\r\n [updateItemRecursively]\r\n );\r\n\r\n const handleUpdateGroupLogic = useCallback(\r\n (groupId: string, logic: LogicalOperator) => {\r\n setRootGroup((prev) =>\r\n updateItemRecursively(\r\n prev,\r\n groupId,\r\n (group) => ({ ...group, logic } as FilterGroup<T>)\r\n )\r\n );\r\n },\r\n [updateItemRecursively]\r\n );\r\n\r\n const handleRemoveItem = useCallback(\r\n (itemId: string) => {\r\n setRootGroup((prev) => updateItemRecursively(prev, itemId, () => null));\r\n },\r\n [updateItemRecursively]\r\n );\r\n\r\n const handleApply = () => {\r\n const filtered = applyFilters(data, rootGroup, columns);\r\n setFilteredData(filtered);\r\n onClose();\r\n };\r\n\r\n const handleClear = () => {\r\n const emptyGroup: FilterGroup<T> = {\r\n type: \"group\",\r\n id: \"root\",\r\n logic: \"AND\",\r\n items: [],\r\n };\r\n setRootGroup(emptyGroup);\r\n setFilteredData(data);\r\n onClose();\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={isOpen}\r\n onOpenChange={onClose}\r\n title=\"Advanced Filters\"\r\n description=\"Refine your dataset using structured logic and multi-type comparisons.\"\r\n >\r\n <div className=\"max-h-[60vh] overflow-y-auto px-1 custom-scrollbar pr-3 pb-32\">\r\n <FilterGroupUI\r\n group={rootGroup}\r\n depth={0}\r\n columns={columns}\r\n onAddRule={handleAddRule}\r\n onAddGroup={handleAddGroup}\r\n onUpdateRule={handleUpdateRule}\r\n onUpdateGroupLogic={handleUpdateGroupLogic}\r\n onRemoveItem={handleRemoveItem}\r\n />\r\n </div>\r\n <div className=\"flex w-full justify-between items-center gap-4\">\r\n <Button\r\n variant=\"ghost\"\r\n onClick={handleClear}\r\n className=\"text-slate-400 hover:text-red-500 font-black text-[10px] uppercase tracking-widest gap-2\"\r\n >\r\n <FilterX className=\"h-4 w-4\" /> Reset Filters\r\n </Button>\r\n <div className=\"flex gap-2\">\r\n <Button\r\n variant=\"outline\"\r\n onClick={onClose}\r\n className=\"font-bold h-11 px-6\"\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={handleApply}\r\n className=\"bg-slate-900 font-bold h-11 px-10 rounded-lg shadow-lg hover:shadow-xl transition-shadow\"\r\n >\r\n Apply View\r\n </Button>\r\n </div>\r\n </div>\r\n </Dialog>\r\n );\r\n};\r\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdvancedFilter.js","sources":["../../src/components/AdvancedFilter.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { useState, useEffect, useCallback } from \"react\";\r\nimport {\r\n FilterRule,\r\n FilterGroup,\r\n ColumnDefinition,\r\n LogicalOperator,\r\n FilterOperator,\r\n FilterItem,\r\n} from \"../types\";\r\nimport { Button } from \"./ui/Button\";\r\nimport { Input } from \"./ui/Input\";\r\nimport { Select } from \"./ui/Select\";\r\nimport { Dialog } from \"./ui/Dialog\";\r\nimport {\r\n Plus,\r\n Trash2,\r\n Layers,\r\n Binary,\r\n FilterX,\r\n ListFilter,\r\n} from \"lucide-react\";\r\nimport { applyFilters } from \"../utils/filterLogic\";\r\n\r\ninterface AdvancedFilterProps<T> {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n data: T[];\r\n columns: ColumnDefinition<T>[];\r\n setFilteredData: (data: T[]) => void;\r\n initialFilters?: FilterGroup<T>;\r\n}\r\n\r\nconst getOperatorsForType = (\r\n type: string\r\n): { value: FilterOperator; label: string }[] => {\r\n switch (type) {\r\n case \"string\":\r\n return [\r\n { value: \"contains\", label: \"Contains\" },\r\n { value: \"not_contains\", label: \"Does not contain\" },\r\n { value: \"equals\", label: \"Exact match\" },\r\n ];\r\n case \"select\":\r\n return [\r\n { value: \"equals\", label: \"Is\" },\r\n { value: \"not_equals\", label: \"Is not\" },\r\n ];\r\n case \"number\":\r\n return [\r\n { value: \"equals\", label: \"=\" },\r\n { value: \"not_equals\", label: \"!=\" },\r\n { value: \"gt\", label: \">\" },\r\n { value: \"lt\", label: \"<\" },\r\n { value: \"gte\", label: \">=\" },\r\n { value: \"lte\", label: \"<=\" },\r\n ];\r\n case \"date\":\r\n return [\r\n { value: \"is\", label: \"On date\" },\r\n { value: \"before\", label: \"Before\" },\r\n { value: \"after\", label: \"After\" },\r\n ];\r\n case \"boolean\":\r\n return [\r\n { value: \"true\", label: \"True\" },\r\n { value: \"false\", label: \"False\" },\r\n ];\r\n default:\r\n return [];\r\n }\r\n};\r\n\r\nconst FilterGroupUI = <T,>({\r\n group,\r\n depth,\r\n columns,\r\n onAddRule,\r\n onAddGroup,\r\n onUpdateRule,\r\n onUpdateGroupLogic,\r\n onRemoveItem,\r\n}: {\r\n group: FilterGroup<T>;\r\n depth: number;\r\n columns: ColumnDefinition<T>[];\r\n onAddRule: (parentId: string) => void;\r\n onAddGroup: (parentId: string) => void;\r\n onUpdateRule: (ruleId: string, updates: Partial<FilterRule<T>>) => void;\r\n onUpdateGroupLogic: (groupId: string, logic: LogicalOperator) => void;\r\n onRemoveItem: (itemId: string) => void;\r\n}) => {\r\n return (\r\n <div\r\n className={`rounded-lg border border-slate-200 bg-slate-50/50 p-4 mb-4 ${\r\n depth > 0 ? \"ml-6 md:ml-10 relative border-l-2 border-l-slate-300\" : \"\"\r\n }`}\r\n >\r\n <div className=\"flex flex-wrap items-center justify-between gap-4 mb-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <span className=\"text-[10px] font-bold uppercase tracking-widest text-slate-500\">\r\n Group Logic\r\n </span>\r\n <div className=\"flex rounded-md border border-slate-200 bg-white p-1 shadow-sm\">\r\n <button\r\n onClick={() => onUpdateGroupLogic(group.id, \"AND\")}\r\n className={`px-3 py-1 text-[10px] font-black rounded-sm transition-all ${\r\n group.logic === \"AND\"\r\n ? \"bg-slate-900 text-slate-50\"\r\n : \"text-slate-500 hover:text-slate-900\"\r\n }`}\r\n >\r\n AND\r\n </button>\r\n <button\r\n onClick={() => onUpdateGroupLogic(group.id, \"OR\")}\r\n className={`px-3 py-1 text-[10px] font-black rounded-sm transition-all ${\r\n group.logic === \"OR\"\r\n ? \"bg-slate-900 text-slate-50\"\r\n : \"text-slate-500 hover:text-slate-900\"\r\n }`}\r\n >\r\n OR\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex items-center gap-2\">\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onAddRule(group.id)}\r\n className=\"h-7 text-[10px] font-bold uppercase\"\r\n >\r\n <Plus className=\"mr-1 h-3 w-3\" /> Rule\r\n </Button>\r\n <Button\r\n variant=\"outline\"\r\n size=\"sm\"\r\n onClick={() => onAddGroup(group.id)}\r\n className=\"h-7 text-[10px] font-bold uppercase\"\r\n >\r\n <Layers className=\"mr-1 h-3 w-3\" /> Group\r\n </Button>\r\n {depth > 0 && (\r\n <Button\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onClick={() => onRemoveItem(group.id)}\r\n className=\"text-slate-400\"\r\n >\r\n <Trash2 className=\"h-5 w-5 text-red-500\" />\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"space-y-3\">\r\n {group.items.map((item) => {\r\n const column = columns.find(\r\n (c) => c.id === (item.type === \"rule\" ? item.columnId : null)\r\n );\r\n return item.type === \"rule\" ? (\r\n <div\r\n key={item.id}\r\n className=\"flex flex-col md:flex-row md:items-center gap-3 p-3 bg-white border border-slate-200 rounded-md shadow-sm\"\r\n >\r\n <div className=\"w-1/5\">\r\n <Select\r\n value={item.columnId as string}\r\n options={columns.map((c) => ({\r\n value: c.id as string,\r\n label: c.label,\r\n }))}\r\n onValueChange={(val) => {\r\n const colId = val as keyof T;\r\n const col = columns.find((c) => c.id === colId);\r\n onUpdateRule(item.id, {\r\n columnId: colId,\r\n operator:\r\n col?.type === \"date\"\r\n ? \"is\"\r\n : col?.type === \"number\"\r\n ? \"equals\"\r\n : col?.type === \"select\"\r\n ? \"equals\"\r\n : \"contains\",\r\n value: \"\",\r\n });\r\n }}\r\n className=\"w-full\"\r\n />\r\n </div>\r\n <div className=\"w-1/5\">\r\n <Select\r\n value={item.operator}\r\n options={getOperatorsForType(column?.type || \"string\")}\r\n onValueChange={(val) =>\r\n onUpdateRule(item.id, { operator: val as FilterOperator })\r\n }\r\n className=\"w-full\"\r\n />\r\n </div>\r\n <div className=\"w-2/5\">\r\n {column?.type === \"date\" ? (\r\n <Input\r\n type=\"date\"\r\n value={item.value || \"\"}\r\n onChange={(e) =>\r\n onUpdateRule(item.id, { value: e.target.value })\r\n }\r\n className=\"w-full\"\r\n />\r\n ) : column?.type === \"boolean\" ? (\r\n <div className=\"h-10 flex items-center px-3 border border-slate-200 rounded-md bg-slate-50 text-[10px] font-black uppercase tracking-tighter text-slate-400 italic\">\r\n <Binary className=\"h-3 w-3 mr-2\" />\r\n Binary state\r\n </div>\r\n ) : column?.type === \"select\" ? (\r\n <Select\r\n value={item.value || \"\"}\r\n placeholder=\"Choose option...\"\r\n options={(column.options || []).map((opt) => ({\r\n value: opt,\r\n label: opt,\r\n }))}\r\n onValueChange={(val) =>\r\n onUpdateRule(item.id, { value: val })\r\n }\r\n className=\"w-full\"\r\n />\r\n ) : (\r\n <Input\r\n placeholder=\"Search query...\"\r\n value={item.value || \"\"}\r\n onChange={(e) =>\r\n onUpdateRule(item.id, { value: e.target.value })\r\n }\r\n className=\"w-full\"\r\n />\r\n )}\r\n </div>\r\n <Button\r\n variant=\"ghost\"\r\n size=\"icon\"\r\n onClick={() => onRemoveItem(item.id)}\r\n className=\"h-9 w-9 text-slate-300 hover:text-red-500 hover:bg-red-50\"\r\n >\r\n <Trash2 className=\"h-5 w-5 text-red-500\" />\r\n </Button>\r\n </div>\r\n ) : (\r\n <FilterGroupUI\r\n group={item}\r\n depth={depth + 1}\r\n columns={columns}\r\n onAddRule={onAddRule}\r\n onAddGroup={onAddGroup}\r\n onUpdateRule={onUpdateRule}\r\n onUpdateGroupLogic={onUpdateGroupLogic}\r\n onRemoveItem={onRemoveItem}\r\n />\r\n );\r\n })}\r\n {group.items.length === 0 && (\r\n <div className=\"flex flex-col items-center justify-center py-6 rounded-md border border-dashed border-slate-200 bg-white/50\">\r\n <ListFilter className=\"h-5 w-5 text-slate-300 mb-1\" />\r\n <p className=\"text-[10px] text-slate-400 font-bold uppercase tracking-widest\">\r\n Add a rule to filter\r\n </p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport const AdvancedFilter = <T,>({\r\n isOpen,\r\n onClose,\r\n data,\r\n columns,\r\n setFilteredData,\r\n initialFilters,\r\n}: AdvancedFilterProps<T>) => {\r\n const [rootGroup, setRootGroup] = useState<FilterGroup<T>>({\r\n type: \"group\",\r\n id: \"root\",\r\n logic: \"AND\",\r\n items: [],\r\n });\r\n\r\n useEffect(() => {\r\n if (initialFilters) setRootGroup(initialFilters);\r\n }, [initialFilters, isOpen]);\r\n\r\n const updateItemRecursively = useCallback(\r\n (\r\n group: FilterGroup<T>,\r\n targetId: string,\r\n updater: (item: FilterItem<T>) => FilterItem<T> | null\r\n ): FilterGroup<T> => {\r\n if (group.id === targetId) return updater(group) as FilterGroup<T>;\r\n return {\r\n ...group,\r\n items: group.items\r\n .map((item) => {\r\n if (item.id === targetId) return updater(item);\r\n if (item.type === \"group\")\r\n return updateItemRecursively(item, targetId, updater);\r\n return item;\r\n })\r\n .filter(Boolean) as FilterItem<T>[],\r\n };\r\n },\r\n []\r\n );\r\n\r\n const handleAddRule = useCallback(\r\n (parentId: string) => {\r\n const firstCol = columns[0];\r\n const newRule: FilterRule<T> = {\r\n type: \"rule\",\r\n id: Math.random().toString(36).substr(2, 9),\r\n columnId: firstCol.id,\r\n operator:\r\n firstCol.type === \"string\"\r\n ? \"contains\"\r\n : firstCol.type === \"select\"\r\n ? \"equals\"\r\n : \"equals\",\r\n value: \"\",\r\n };\r\n setRootGroup((prev) =>\r\n updateItemRecursively(prev, parentId, (group) => ({\r\n ...(group as FilterGroup<T>),\r\n items: [...(group as FilterGroup<T>).items, newRule],\r\n }))\r\n );\r\n },\r\n [columns, updateItemRecursively]\r\n );\r\n\r\n const handleAddGroup = useCallback(\r\n (parentId: string) => {\r\n const newGroup: FilterGroup<T> = {\r\n type: \"group\",\r\n id: Math.random().toString(36).substr(2, 9),\r\n logic: \"AND\",\r\n items: [],\r\n };\r\n setRootGroup((prev) =>\r\n updateItemRecursively(prev, parentId, (group) => ({\r\n ...(group as FilterGroup<T>),\r\n items: [...(group as FilterGroup<T>).items, newGroup],\r\n }))\r\n );\r\n },\r\n [updateItemRecursively]\r\n );\r\n\r\n const handleUpdateRule = useCallback(\r\n (ruleId: string, updates: Partial<FilterRule<T>>) => {\r\n setRootGroup((prev) =>\r\n updateItemRecursively(\r\n prev,\r\n ruleId,\r\n (rule) => ({ ...rule, ...updates } as FilterRule<T>)\r\n )\r\n );\r\n },\r\n [updateItemRecursively]\r\n );\r\n\r\n const handleUpdateGroupLogic = useCallback(\r\n (groupId: string, logic: LogicalOperator) => {\r\n setRootGroup((prev) =>\r\n updateItemRecursively(\r\n prev,\r\n groupId,\r\n (group) => ({ ...group, logic } as FilterGroup<T>)\r\n )\r\n );\r\n },\r\n [updateItemRecursively]\r\n );\r\n\r\n const handleRemoveItem = useCallback(\r\n (itemId: string) => {\r\n setRootGroup((prev) => updateItemRecursively(prev, itemId, () => null));\r\n },\r\n [updateItemRecursively]\r\n );\r\n\r\n const handleApply = () => {\r\n const filtered = applyFilters(data, rootGroup, columns);\r\n setFilteredData(filtered);\r\n onClose();\r\n };\r\n\r\n const handleClear = () => {\r\n const emptyGroup: FilterGroup<T> = {\r\n type: \"group\",\r\n id: \"root\",\r\n logic: \"AND\",\r\n items: [],\r\n };\r\n setRootGroup(emptyGroup);\r\n setFilteredData(data);\r\n onClose();\r\n };\r\n\r\n return (\r\n <Dialog\r\n open={isOpen}\r\n onOpenChange={onClose}\r\n title=\"Advanced Filters\"\r\n description=\"Refine your dataset using structured logic and multi-type comparisons.\"\r\n >\r\n <div className=\"max-h-[60vh] max-w-[70vw] overflow-y-auto px-1 custom-scrollbar pr-3 pb-32\">\r\n <FilterGroupUI\r\n group={rootGroup}\r\n depth={0}\r\n columns={columns}\r\n onAddRule={handleAddRule}\r\n onAddGroup={handleAddGroup}\r\n onUpdateRule={handleUpdateRule}\r\n onUpdateGroupLogic={handleUpdateGroupLogic}\r\n onRemoveItem={handleRemoveItem}\r\n />\r\n </div>\r\n <div className=\"flex w-full justify-between items-center gap-4\">\r\n <Button\r\n variant=\"ghost\"\r\n onClick={handleClear}\r\n className=\"text-slate-400 hover:text-red-500 font-black text-[10px] uppercase tracking-widest gap-2\"\r\n >\r\n <FilterX className=\"h-4 w-4\" /> Reset Filters\r\n </Button>\r\n <div className=\"flex gap-2\">\r\n <Button\r\n variant=\"outline\"\r\n onClick={onClose}\r\n className=\"font-bold h-11 px-6\"\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n onClick={handleApply}\r\n className=\"bg-slate-900 font-bold h-11 px-10 rounded-lg shadow-lg hover:shadow-xl transition-shadow\"\r\n >\r\n Apply View\r\n </Button>\r\n </div>\r\n </div>\r\n </Dialog>\r\n );\r\n};\r\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { X } from 'lucide-react';
|
|
|
4
4
|
const Dialog = ({ open, onOpenChange, title, description, children, footer }) => {
|
|
5
5
|
if (!open)
|
|
6
6
|
return null;
|
|
7
|
-
return (jsx("div", { className: "fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-slate-950/80 p-4 pt-[5vh] backdrop-blur-
|
|
7
|
+
return (jsx("div", { className: "fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-slate-950/80 p-4 pt-[5vh] backdrop-blur-3xl animate-in fade-in duration-200", children: jsxs("div", { className: "relative w-full max-w-4xl rounded-lg border border-slate-200 bg-white p-6 shadow-lg animate-in zoom-in-95 duration-200", children: [jsxs("div", { className: "flex flex-col space-y-1.5 text-center sm:text-left mb-6", children: [jsx("h2", { className: "text-lg font-semibold leading-none tracking-tight", children: title }), description && jsx("p", { className: "text-sm text-slate-500", children: description }), jsxs("button", { onClick: () => onOpenChange(false), className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 disabled:pointer-events-none", children: [jsx(X, { className: "h-4 w-4" }), jsx("span", { className: "sr-only", children: "Close" })] })] }), jsx("div", { className: "py-2", children: children }), footer && (jsx("div", { className: "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-6", children: footer }))] }) }));
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
export { Dialog };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.js","sources":["../../../src/components/ui/Dialog.tsx"],"sourcesContent":["\r\nimport React from 'react';\r\nimport { X } from 'lucide-react';\r\n\r\ninterface DialogProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n title: string;\r\n description?: string;\r\n children: React.ReactNode;\r\n footer?: React.ReactNode;\r\n}\r\n\r\nexport const Dialog: React.FC<DialogProps> = ({ open, onOpenChange, title, description, children, footer }) => {\r\n if (!open) return null;\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-slate-950/80 p-4 pt-[5vh] backdrop-blur-
|
|
1
|
+
{"version":3,"file":"Dialog.js","sources":["../../../src/components/ui/Dialog.tsx"],"sourcesContent":["\r\nimport React from 'react';\r\nimport { X } from 'lucide-react';\r\n\r\ninterface DialogProps {\r\n open: boolean;\r\n onOpenChange: (open: boolean) => void;\r\n title: string;\r\n description?: string;\r\n children: React.ReactNode;\r\n footer?: React.ReactNode;\r\n}\r\n\r\nexport const Dialog: React.FC<DialogProps> = ({ open, onOpenChange, title, description, children, footer }) => {\r\n if (!open) return null;\r\n\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-slate-950/80 p-4 pt-[5vh] backdrop-blur-3xl animate-in fade-in duration-200\">\r\n <div className=\"relative w-full max-w-4xl rounded-lg border border-slate-200 bg-white p-6 shadow-lg animate-in zoom-in-95 duration-200\">\r\n <div className=\"flex flex-col space-y-1.5 text-center sm:text-left mb-6\">\r\n <h2 className=\"text-lg font-semibold leading-none tracking-tight\">{title}</h2>\r\n {description && <p className=\"text-sm text-slate-500\">{description}</p>}\r\n <button\r\n onClick={() => onOpenChange(false)}\r\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-slate-950 focus:ring-offset-2 disabled:pointer-events-none\"\r\n >\r\n <X className=\"h-4 w-4\" />\r\n <span className=\"sr-only\">Close</span>\r\n </button>\r\n </div>\r\n <div className=\"py-2\">\r\n {children}\r\n </div>\r\n {footer && (\r\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 mt-6\">\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"names":["_jsx","_jsxs"],"mappings":";;;AAaO,MAAM,MAAM,GAA0B,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAI;AAC5G,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;AAEtB,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mJAAmJ,EAAA,QAAA,EAChKC,cAAK,SAAS,EAAC,wHAAwH,EAAA,QAAA,EAAA,CACrIA,cAAK,SAAS,EAAC,yDAAyD,EAAA,QAAA,EAAA,CACtED,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,mDAAmD,EAAA,QAAA,EAAE,KAAK,GAAM,EAC7E,WAAW,IAAIA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,wBAAwB,EAAA,QAAA,EAAE,WAAW,EAAA,CAAK,EACvEC,iBACE,OAAO,EAAE,MAAM,YAAY,CAAC,KAAK,CAAC,EAClC,SAAS,EAAC,2MAA2M,aAErND,GAAA,CAAC,CAAC,IAAC,SAAS,EAAC,SAAS,EAAA,CAAG,EACzBA,cAAM,SAAS,EAAC,SAAS,EAAA,QAAA,EAAA,OAAA,EAAA,CAAa,CAAA,EAAA,CAC/B,IACL,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,MAAM,EAAA,QAAA,EAClB,QAAQ,GACL,EACL,MAAM,KACLA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oEAAoE,YAChF,MAAM,EAAA,CACH,CACP,CAAA,EAAA,CACG,EAAA,CACF;AAEV;;;;"}
|
package/package.json
CHANGED
|
@@ -165,7 +165,7 @@ const FilterGroupUI = <T,>({
|
|
|
165
165
|
key={item.id}
|
|
166
166
|
className="flex flex-col md:flex-row md:items-center gap-3 p-3 bg-white border border-slate-200 rounded-md shadow-sm"
|
|
167
167
|
>
|
|
168
|
-
<div className="
|
|
168
|
+
<div className="w-1/5">
|
|
169
169
|
<Select
|
|
170
170
|
value={item.columnId as string}
|
|
171
171
|
options={columns.map((c) => ({
|
|
@@ -188,18 +188,20 @@ const FilterGroupUI = <T,>({
|
|
|
188
188
|
value: "",
|
|
189
189
|
});
|
|
190
190
|
}}
|
|
191
|
+
className="w-full"
|
|
191
192
|
/>
|
|
192
193
|
</div>
|
|
193
|
-
<div className="w-
|
|
194
|
+
<div className="w-1/5">
|
|
194
195
|
<Select
|
|
195
196
|
value={item.operator}
|
|
196
197
|
options={getOperatorsForType(column?.type || "string")}
|
|
197
198
|
onValueChange={(val) =>
|
|
198
199
|
onUpdateRule(item.id, { operator: val as FilterOperator })
|
|
199
200
|
}
|
|
201
|
+
className="w-full"
|
|
200
202
|
/>
|
|
201
203
|
</div>
|
|
202
|
-
<div className="
|
|
204
|
+
<div className="w-2/5">
|
|
203
205
|
{column?.type === "date" ? (
|
|
204
206
|
<Input
|
|
205
207
|
type="date"
|
|
@@ -207,6 +209,7 @@ const FilterGroupUI = <T,>({
|
|
|
207
209
|
onChange={(e) =>
|
|
208
210
|
onUpdateRule(item.id, { value: e.target.value })
|
|
209
211
|
}
|
|
212
|
+
className="w-full"
|
|
210
213
|
/>
|
|
211
214
|
) : column?.type === "boolean" ? (
|
|
212
215
|
<div className="h-10 flex items-center px-3 border border-slate-200 rounded-md bg-slate-50 text-[10px] font-black uppercase tracking-tighter text-slate-400 italic">
|
|
@@ -224,6 +227,7 @@ const FilterGroupUI = <T,>({
|
|
|
224
227
|
onValueChange={(val) =>
|
|
225
228
|
onUpdateRule(item.id, { value: val })
|
|
226
229
|
}
|
|
230
|
+
className="w-full"
|
|
227
231
|
/>
|
|
228
232
|
) : (
|
|
229
233
|
<Input
|
|
@@ -232,6 +236,7 @@ const FilterGroupUI = <T,>({
|
|
|
232
236
|
onChange={(e) =>
|
|
233
237
|
onUpdateRule(item.id, { value: e.target.value })
|
|
234
238
|
}
|
|
239
|
+
className="w-full"
|
|
235
240
|
/>
|
|
236
241
|
)}
|
|
237
242
|
</div>
|
|
@@ -412,7 +417,7 @@ export const AdvancedFilter = <T,>({
|
|
|
412
417
|
title="Advanced Filters"
|
|
413
418
|
description="Refine your dataset using structured logic and multi-type comparisons."
|
|
414
419
|
>
|
|
415
|
-
<div className="max-h-[60vh] overflow-y-auto px-1 custom-scrollbar pr-3 pb-32">
|
|
420
|
+
<div className="max-h-[60vh] max-w-[70vw] overflow-y-auto px-1 custom-scrollbar pr-3 pb-32">
|
|
416
421
|
<FilterGroupUI
|
|
417
422
|
group={rootGroup}
|
|
418
423
|
depth={0}
|
|
@@ -15,7 +15,7 @@ export const Dialog: React.FC<DialogProps> = ({ open, onOpenChange, title, descr
|
|
|
15
15
|
if (!open) return null;
|
|
16
16
|
|
|
17
17
|
return (
|
|
18
|
-
<div className="fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-slate-950/80 p-4 pt-[5vh] backdrop-blur-
|
|
18
|
+
<div className="fixed inset-0 z-50 flex items-start justify-center overflow-y-auto bg-slate-950/80 p-4 pt-[5vh] backdrop-blur-3xl animate-in fade-in duration-200">
|
|
19
19
|
<div className="relative w-full max-w-4xl rounded-lg border border-slate-200 bg-white p-6 shadow-lg animate-in zoom-in-95 duration-200">
|
|
20
20
|
<div className="flex flex-col space-y-1.5 text-center sm:text-left mb-6">
|
|
21
21
|
<h2 className="text-lg font-semibold leading-none tracking-tight">{title}</h2>
|