nest-filter 1.0.11 → 1.0.12

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.
@@ -45,13 +45,13 @@ const getOperatorsForType = (type) => {
45
45
  }
46
46
  };
47
47
  const FilterGroupUI = ({ group, depth, columns, onAddRule, onAddGroup, onUpdateRule, onUpdateGroupLogic, onRemoveItem, }) => {
48
- return (jsxs("div", { className: `rounded-lg border border-slate-200 bg-slate-50/50 p-4 mb-4 ${depth > 0 ? "ml-6 md:ml-10 relative border-l-2 border-l-slate-300" : ""}`, children: [jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4 mb-4", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("span", { className: "text-[10px] font-bold uppercase tracking-widest text-slate-500", children: "Group Logic" }), jsxs("div", { className: "flex rounded-md border border-slate-200 bg-white p-1 shadow-sm", children: [jsx("button", { onClick: () => onUpdateGroupLogic(group.id, "AND"), className: `px-3 py-1 text-[10px] font-black rounded-sm transition-all ${group.logic === "AND"
48
+ return (jsxs("div", { className: `rounded-lg border border-slate-200 bg-slate-50/50 p-4 mb-4 ${depth > 0 ? "ml-6 md:ml-10 relative border-l-2 border-l-slate-300" : ""}`, children: [jsxs("div", { className: "flex flex-wrap items-center justify-between gap-4 mb-4", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx("span", { className: "text-[10px] font-bold uppercase tracking-widest text-slate-500", children: "Group Logic" }), jsxs("div", { className: "flex rounded-md border border-slate-200 bg-white p-1 shadow-sm", children: [jsx(Button, { variant: group.logic === "AND" ? "default" : "destructive", onClick: () => onUpdateGroupLogic(group.id, "AND"), className: `px-3 py-1 text-[10px] font-black rounded-sm transition-all ${group.logic === "AND"
49
49
  ? "bg-slate-900 text-slate-50"
50
- : "text-slate-500 hover:text-slate-900"}`, children: "AND" }), jsx("button", { onClick: () => onUpdateGroupLogic(group.id, "OR"), className: `px-3 py-1 text-[10px] font-black rounded-sm transition-all ${group.logic === "OR"
50
+ : "text-slate-500 hover:text-slate-900"}`, children: "AND" }), jsx(Button, { variant: group.logic === "OR" ? "default" : "destructive", onClick: () => onUpdateGroupLogic(group.id, "OR"), className: `px-3 py-1 text-[10px] font-black rounded-sm transition-all ${group.logic === "OR"
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: "flex-1 min-w-[140px] w-1/5 border", children: jsxs(Select, { value: item.columnId, onValueChange: (val) => {
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: "flex-1 min-w-[140px] w-1/5", children: jsxs(Select, { value: item.columnId, onValueChange: (val) => {
55
55
  const colId = val;
56
56
  const col = columns.find((c) => c.id === colId);
57
57
  onUpdateRule(item.id, {
@@ -65,7 +65,7 @@ const FilterGroupUI = ({ group, depth, columns, onAddRule, onAddGroup, onUpdateR
65
65
  : "contains",
66
66
  value: "",
67
67
  });
68
- }, children: [jsx(SelectTrigger, { className: "w-full", children: jsx(SelectValue, { placeholder: "Select column..." }) }), jsx(SelectContent, { children: columns.map((c) => (jsx(SelectItem, { value: c.id, children: c.label }, c.id))) })] }) }), jsx("div", { className: "w-full md:w-1/5 border", children: jsxs(Select, { value: item.operator, onValueChange: (val) => onUpdateRule(item.id, { operator: val }), children: [jsx(SelectTrigger, { className: "w-full", children: jsx(SelectValue, { placeholder: "Select operator..." }) }), jsx(SelectContent, { className: "z-[100]", children: getOperatorsForType(column?.type || "string").map((op) => (jsx(SelectItem, { value: op.value, children: op.label }, op.value))) })] }) }), jsx("div", { className: "w-full md:w-2/5 border", children: column?.type === "date" ? (jsx(Input, { type: "date", value: item.value || "", onChange: (e) => onUpdateRule(item.id, { value: e.target.value }) })) : 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" ? (jsxs(Select, { value: item.value || "", onValueChange: (val) => onUpdateRule(item.id, { value: val }), children: [jsx(SelectTrigger, { className: "w-full", children: jsx(SelectValue, { placeholder: "Choose option..." }) }), jsx(SelectContent, { className: "z-[100]", children: (column.options || []).map((opt) => (jsx(SelectItem, { value: opt, children: opt }, opt))) })] })) : (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 }));
68
+ }, children: [jsx(SelectTrigger, { className: "w-full", children: jsx(SelectValue, { placeholder: "Select column..." }) }), jsx(SelectContent, { children: columns.map((c) => (jsx(SelectItem, { value: c.id, children: c.label }, c.id))) })] }) }), jsx("div", { className: "w-full md:w-1/5", children: jsxs(Select, { value: item.operator, onValueChange: (val) => onUpdateRule(item.id, { operator: val }), children: [jsx(SelectTrigger, { className: "w-full", children: jsx(SelectValue, { placeholder: "Select operator..." }) }), jsx(SelectContent, { className: "z-[100]", children: getOperatorsForType(column?.type || "string").map((op) => (jsx(SelectItem, { value: op.value, children: op.label }, op.value))) })] }) }), jsx("div", { className: "w-full md:w-2/5", children: column?.type === "date" ? (jsx(Input, { type: "date", value: item.value || "", onChange: (e) => onUpdateRule(item.id, { value: e.target.value }) })) : 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" ? (jsxs(Select, { value: item.value || "", onValueChange: (val) => onUpdateRule(item.id, { value: val }), children: [jsx(SelectTrigger, { className: "w-full", children: jsx(SelectValue, { placeholder: "Choose option..." }) }), jsx(SelectContent, { className: "z-[100]", children: (column.options || []).map((opt) => (jsx(SelectItem, { value: opt, children: opt }, opt))) })] })) : (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 }));
69
69
  }), 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" })] }))] })] }));
70
70
  };
71
71
  const AdvancedFilter = ({ isOpen, onClose, data, columns, setFilteredData, initialFilters, }) => {
@@ -150,7 +150,7 @@ const AdvancedFilter = ({ isOpen, onClose, data, columns, setFilteredData, initi
150
150
  setFilteredData(data);
151
151
  onClose();
152
152
  };
153
- return (jsx(Dialog, { open: isOpen, onOpenChange: onClose, children: jsx(DialogContent, { className: "min-w-[65vw]", children: jsxs(DialogHeader, { children: [jsx(DialogTitle, { children: "Advanced Filters" }), jsx(DialogDescription, { children: "Refine your dataset using structured logic and multi-type comparisons." }), 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: "font-bold h-11 px-10 rounded-lg shadow-lg hover:shadow-xl transition-shadow", children: "Apply View" })] })] })] }) }) }));
153
+ return (jsx(Dialog, { open: isOpen, onOpenChange: onClose, children: jsx(DialogContent, { className: "min-w-[80vw]", children: jsxs(DialogHeader, { className: "w-full", children: [jsx(DialogTitle, { children: "Advanced Filters" }), jsx(DialogDescription, { children: "Refine your dataset using structured logic and multi-type comparisons." }), jsx("div", { className: "max-h-[60vh] w-full 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: "font-bold h-11 px-10 rounded-lg shadow-lg hover:shadow-xl transition-shadow", children: "Apply View" })] })] })] }) }) }));
154
154
  };
155
155
 
156
156
  export { AdvancedFilter };
@@ -1 +1 @@
1
- {"version":3,"file":"AdvancedFilter.js","sources":["../../src/components/AdvancedFilter.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\nimport {\n FilterRule,\n FilterGroup,\n ColumnDefinition,\n LogicalOperator,\n FilterOperator,\n FilterItem,\n} from \"../types\";\nimport { Button } from \"./ui/button\";\nimport { Input } from \"./ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from \"./ui/dialog\";\nimport {\n Plus,\n Trash2,\n Layers,\n Binary,\n FilterX,\n ListFilter,\n} from \"lucide-react\";\nimport { applyFilters } from \"../utils/filterLogic\";\n\ninterface AdvancedFilterProps<T> {\n isOpen: boolean;\n onClose: () => void;\n data: T[];\n columns: ColumnDefinition<T>[];\n setFilteredData: (data: T[]) => void;\n initialFilters?: FilterGroup<T>;\n}\n\nconst getOperatorsForType = (\n type: string\n): { value: FilterOperator; label: string }[] => {\n switch (type) {\n case \"string\":\n return [\n { value: \"contains\", label: \"Contains\" },\n { value: \"not_contains\", label: \"Does not contain\" },\n { value: \"equals\", label: \"Exact match\" },\n ];\n case \"select\":\n return [\n { value: \"equals\", label: \"Is\" },\n { value: \"not_equals\", label: \"Is not\" },\n ];\n case \"number\":\n return [\n { value: \"equals\", label: \"=\" },\n { value: \"not_equals\", label: \"!=\" },\n { value: \"gt\", label: \">\" },\n { value: \"lt\", label: \"<\" },\n { value: \"gte\", label: \">=\" },\n { value: \"lte\", label: \"<=\" },\n ];\n case \"date\":\n return [\n { value: \"is\", label: \"On date\" },\n { value: \"before\", label: \"Before\" },\n { value: \"after\", label: \"After\" },\n ];\n case \"boolean\":\n return [\n { value: \"true\", label: \"True\" },\n { value: \"false\", label: \"False\" },\n ];\n default:\n return [];\n }\n};\n\nconst FilterGroupUI = <T,>({\n group,\n depth,\n columns,\n onAddRule,\n onAddGroup,\n onUpdateRule,\n onUpdateGroupLogic,\n onRemoveItem,\n}: {\n group: FilterGroup<T>;\n depth: number;\n columns: ColumnDefinition<T>[];\n onAddRule: (parentId: string) => void;\n onAddGroup: (parentId: string) => void;\n onUpdateRule: (ruleId: string, updates: Partial<FilterRule<T>>) => void;\n onUpdateGroupLogic: (groupId: string, logic: LogicalOperator) => void;\n onRemoveItem: (itemId: string) => void;\n}) => {\n return (\n <div\n className={`rounded-lg border border-slate-200 bg-slate-50/50 p-4 mb-4 ${\n depth > 0 ? \"ml-6 md:ml-10 relative border-l-2 border-l-slate-300\" : \"\"\n }`}\n >\n <div className=\"flex flex-wrap items-center justify-between gap-4 mb-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-bold uppercase tracking-widest text-slate-500\">\n Group Logic\n </span>\n <div className=\"flex rounded-md border border-slate-200 bg-white p-1 shadow-sm\">\n <button\n onClick={() => onUpdateGroupLogic(group.id, \"AND\")}\n className={`px-3 py-1 text-[10px] font-black rounded-sm transition-all ${\n group.logic === \"AND\"\n ? \"bg-slate-900 text-slate-50\"\n : \"text-slate-500 hover:text-slate-900\"\n }`}\n >\n AND\n </button>\n <button\n onClick={() => onUpdateGroupLogic(group.id, \"OR\")}\n className={`px-3 py-1 text-[10px] font-black rounded-sm transition-all ${\n group.logic === \"OR\"\n ? \"bg-slate-900 text-slate-50\"\n : \"text-slate-500 hover:text-slate-900\"\n }`}\n >\n OR\n </button>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onAddRule(group.id)}\n className=\"h-7 text-[10px] font-bold uppercase\"\n >\n <Plus className=\"mr-1 h-3 w-3\" /> Rule\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onAddGroup(group.id)}\n className=\"h-7 text-[10px] font-bold uppercase\"\n >\n <Layers className=\"mr-1 h-3 w-3\" /> Group\n </Button>\n {depth > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onRemoveItem(group.id)}\n className=\"text-slate-400\"\n >\n <Trash2 className=\"h-5 w-5 text-red-500\" />\n </Button>\n )}\n </div>\n </div>\n\n <div className=\"space-y-3\">\n {group.items.map((item) => {\n const column = columns.find(\n (c) => c.id === (item.type === \"rule\" ? item.columnId : null)\n );\n return item.type === \"rule\" ? (\n <div\n key={item.id}\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\"\n >\n <div className=\"flex-1 min-w-[140px] w-1/5 border\">\n <Select\n value={item.columnId as string}\n onValueChange={(val) => {\n const colId = val as keyof T;\n const col = columns.find((c) => c.id === colId);\n onUpdateRule(item.id, {\n columnId: colId,\n operator:\n col?.type === \"date\"\n ? \"is\"\n : col?.type === \"number\"\n ? \"equals\"\n : col?.type === \"select\"\n ? \"equals\"\n : \"contains\",\n value: \"\",\n });\n }}\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue placeholder=\"Select column...\" />\n </SelectTrigger>\n <SelectContent>\n {columns.map((c) => (\n <SelectItem key={c.id as string} value={c.id as string}>\n {c.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"w-full md:w-1/5 border\">\n <Select\n value={item.operator}\n onValueChange={(val) =>\n onUpdateRule(item.id, { operator: val as FilterOperator })\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue placeholder=\"Select operator...\" />\n </SelectTrigger>\n <SelectContent className=\"z-[100]\">\n {getOperatorsForType(column?.type || \"string\").map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"w-full md:w-2/5 border\">\n {column?.type === \"date\" ? (\n <Input\n type=\"date\"\n value={item.value || \"\"}\n onChange={(e) =>\n onUpdateRule(item.id, { value: e.target.value })\n }\n />\n ) : column?.type === \"boolean\" ? (\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\">\n <Binary className=\"h-3 w-3 mr-2\" />\n Binary state\n </div>\n ) : column?.type === \"select\" ? (\n <Select\n value={item.value || \"\"}\n onValueChange={(val) =>\n onUpdateRule(item.id, { value: val })\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue placeholder=\"Choose option...\" />\n </SelectTrigger>\n <SelectContent className=\"z-[100]\">\n {(column.options || []).map((opt) => (\n <SelectItem key={opt} value={opt}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Input\n placeholder=\"Search query...\"\n value={item.value || \"\"}\n onChange={(e) =>\n onUpdateRule(item.id, { value: e.target.value })\n }\n />\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onRemoveItem(item.id)}\n className=\"h-9 w-9 text-slate-300 hover:text-red-500 hover:bg-red-50\"\n >\n <Trash2 className=\"h-5 w-5 text-red-500\" />\n </Button>\n </div>\n ) : (\n <FilterGroupUI\n group={item}\n depth={depth + 1}\n columns={columns}\n onAddRule={onAddRule}\n onAddGroup={onAddGroup}\n onUpdateRule={onUpdateRule}\n onUpdateGroupLogic={onUpdateGroupLogic}\n onRemoveItem={onRemoveItem}\n />\n );\n })}\n {group.items.length === 0 && (\n <div className=\"flex flex-col items-center justify-center py-6 rounded-md border border-dashed border-slate-200 bg-white/50\">\n <ListFilter className=\"h-5 w-5 text-slate-300 mb-1\" />\n <p className=\"text-[10px] text-slate-400 font-bold uppercase tracking-widest\">\n Add a rule to filter\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport const AdvancedFilter = <T,>({\n isOpen,\n onClose,\n data,\n columns,\n setFilteredData,\n initialFilters,\n}: AdvancedFilterProps<T>) => {\n const [rootGroup, setRootGroup] = useState<FilterGroup<T>>({\n type: \"group\",\n id: \"root\",\n logic: \"AND\",\n items: [],\n });\n\n useEffect(() => {\n if (initialFilters) setRootGroup(initialFilters);\n }, [initialFilters, isOpen]);\n\n const updateItemRecursively = useCallback(\n (\n group: FilterGroup<T>,\n targetId: string,\n updater: (item: FilterItem<T>) => FilterItem<T> | null\n ): FilterGroup<T> => {\n if (group.id === targetId) return updater(group) as FilterGroup<T>;\n return {\n ...group,\n items: group.items\n .map((item) => {\n if (item.id === targetId) return updater(item);\n if (item.type === \"group\")\n return updateItemRecursively(item, targetId, updater);\n return item;\n })\n .filter(Boolean) as FilterItem<T>[],\n };\n },\n []\n );\n\n const handleAddRule = useCallback(\n (parentId: string) => {\n const firstCol = columns[0];\n const newRule: FilterRule<T> = {\n type: \"rule\",\n id: Math.random().toString(36).substr(2, 9),\n columnId: firstCol.id,\n operator:\n firstCol.type === \"string\"\n ? \"contains\"\n : firstCol.type === \"select\"\n ? \"equals\"\n : \"equals\",\n value: \"\",\n };\n setRootGroup((prev) =>\n updateItemRecursively(prev, parentId, (group) => ({\n ...(group as FilterGroup<T>),\n items: [...(group as FilterGroup<T>).items, newRule],\n }))\n );\n },\n [columns, updateItemRecursively]\n );\n\n const handleAddGroup = useCallback(\n (parentId: string) => {\n const newGroup: FilterGroup<T> = {\n type: \"group\",\n id: Math.random().toString(36).substr(2, 9),\n logic: \"AND\",\n items: [],\n };\n setRootGroup((prev) =>\n updateItemRecursively(prev, parentId, (group) => ({\n ...(group as FilterGroup<T>),\n items: [...(group as FilterGroup<T>).items, newGroup],\n }))\n );\n },\n [updateItemRecursively]\n );\n\n const handleUpdateRule = useCallback(\n (ruleId: string, updates: Partial<FilterRule<T>>) => {\n setRootGroup((prev) =>\n updateItemRecursively(\n prev,\n ruleId,\n (rule) => ({ ...rule, ...updates } as FilterRule<T>)\n )\n );\n },\n [updateItemRecursively]\n );\n\n const handleUpdateGroupLogic = useCallback(\n (groupId: string, logic: LogicalOperator) => {\n setRootGroup((prev) =>\n updateItemRecursively(\n prev,\n groupId,\n (group) => ({ ...group, logic } as FilterGroup<T>)\n )\n );\n },\n [updateItemRecursively]\n );\n\n const handleRemoveItem = useCallback(\n (itemId: string) => {\n setRootGroup((prev) => updateItemRecursively(prev, itemId, () => null));\n },\n [updateItemRecursively]\n );\n\n const handleApply = () => {\n const filtered = applyFilters(data, rootGroup, columns);\n setFilteredData(filtered);\n onClose();\n };\n\n const handleClear = () => {\n const emptyGroup: FilterGroup<T> = {\n type: \"group\",\n id: \"root\",\n logic: \"AND\",\n items: [],\n };\n setRootGroup(emptyGroup);\n setFilteredData(data);\n onClose();\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent className=\"min-w-[65vw]\">\n <DialogHeader>\n <DialogTitle>Advanced Filters</DialogTitle>\n <DialogDescription>\n Refine your dataset using structured logic and multi-type\n comparisons.\n </DialogDescription>\n <div className=\"max-h-[60vh] overflow-y-auto px-1 custom-scrollbar pr-3 pb-32\">\n <FilterGroupUI\n group={rootGroup}\n depth={0}\n columns={columns}\n onAddRule={handleAddRule}\n onAddGroup={handleAddGroup}\n onUpdateRule={handleUpdateRule}\n onUpdateGroupLogic={handleUpdateGroupLogic}\n onRemoveItem={handleRemoveItem}\n />\n </div>\n <div className=\"flex w-full justify-between items-center gap-4\">\n <Button\n variant=\"ghost\"\n onClick={handleClear}\n className=\"text-slate-400 hover:text-red-500 font-black text-[10px] uppercase tracking-widest gap-2\"\n >\n <FilterX className=\"h-4 w-4\" /> Reset Filters\n </Button>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n onClick={onClose}\n className=\"font-bold h-11 px-6\"\n >\n Cancel\n </Button>\n <Button\n onClick={handleApply}\n className=\"font-bold h-11 px-10 rounded-lg shadow-lg hover:shadow-xl transition-shadow\"\n >\n Apply View\n </Button>\n </div>\n </div>\n </DialogHeader>\n </DialogContent>\n </Dialog>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"AdvancedFilter.js","sources":["../../src/components/AdvancedFilter.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\nimport {\n FilterRule,\n FilterGroup,\n ColumnDefinition,\n LogicalOperator,\n FilterOperator,\n FilterItem,\n} from \"../types\";\nimport { Button } from \"./ui/button\";\nimport { Input } from \"./ui/input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./ui/select\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from \"./ui/dialog\";\nimport {\n Plus,\n Trash2,\n Layers,\n Binary,\n FilterX,\n ListFilter,\n} from \"lucide-react\";\nimport { applyFilters } from \"../utils/filterLogic\";\n\ninterface AdvancedFilterProps<T> {\n isOpen: boolean;\n onClose: () => void;\n data: T[];\n columns: ColumnDefinition<T>[];\n setFilteredData: (data: T[]) => void;\n initialFilters?: FilterGroup<T>;\n}\n\nconst getOperatorsForType = (\n type: string\n): { value: FilterOperator; label: string }[] => {\n switch (type) {\n case \"string\":\n return [\n { value: \"contains\", label: \"Contains\" },\n { value: \"not_contains\", label: \"Does not contain\" },\n { value: \"equals\", label: \"Exact match\" },\n ];\n case \"select\":\n return [\n { value: \"equals\", label: \"Is\" },\n { value: \"not_equals\", label: \"Is not\" },\n ];\n case \"number\":\n return [\n { value: \"equals\", label: \"=\" },\n { value: \"not_equals\", label: \"!=\" },\n { value: \"gt\", label: \">\" },\n { value: \"lt\", label: \"<\" },\n { value: \"gte\", label: \">=\" },\n { value: \"lte\", label: \"<=\" },\n ];\n case \"date\":\n return [\n { value: \"is\", label: \"On date\" },\n { value: \"before\", label: \"Before\" },\n { value: \"after\", label: \"After\" },\n ];\n case \"boolean\":\n return [\n { value: \"true\", label: \"True\" },\n { value: \"false\", label: \"False\" },\n ];\n default:\n return [];\n }\n};\n\nconst FilterGroupUI = <T,>({\n group,\n depth,\n columns,\n onAddRule,\n onAddGroup,\n onUpdateRule,\n onUpdateGroupLogic,\n onRemoveItem,\n}: {\n group: FilterGroup<T>;\n depth: number;\n columns: ColumnDefinition<T>[];\n onAddRule: (parentId: string) => void;\n onAddGroup: (parentId: string) => void;\n onUpdateRule: (ruleId: string, updates: Partial<FilterRule<T>>) => void;\n onUpdateGroupLogic: (groupId: string, logic: LogicalOperator) => void;\n onRemoveItem: (itemId: string) => void;\n}) => {\n return (\n <div\n className={`rounded-lg border border-slate-200 bg-slate-50/50 p-4 mb-4 ${\n depth > 0 ? \"ml-6 md:ml-10 relative border-l-2 border-l-slate-300\" : \"\"\n }`}\n >\n <div className=\"flex flex-wrap items-center justify-between gap-4 mb-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-bold uppercase tracking-widest text-slate-500\">\n Group Logic\n </span>\n <div className=\"flex rounded-md border border-slate-200 bg-white p-1 shadow-sm\">\n <Button\n variant={group.logic === \"AND\" ? \"default\" : \"destructive\"}\n onClick={() => onUpdateGroupLogic(group.id, \"AND\")}\n className={`px-3 py-1 text-[10px] font-black rounded-sm transition-all ${\n group.logic === \"AND\"\n ? \"bg-slate-900 text-slate-50\"\n : \"text-slate-500 hover:text-slate-900\"\n }`}\n >\n AND\n </Button>\n <Button\n variant={group.logic === \"OR\" ? \"default\" : \"destructive\"}\n onClick={() => onUpdateGroupLogic(group.id, \"OR\")}\n className={`px-3 py-1 text-[10px] font-black rounded-sm transition-all ${\n group.logic === \"OR\"\n ? \"bg-slate-900 text-slate-50\"\n : \"text-slate-500 hover:text-slate-900\"\n }`}\n >\n OR\n </Button>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onAddRule(group.id)}\n className=\"h-7 text-[10px] font-bold uppercase\"\n >\n <Plus className=\"mr-1 h-3 w-3\" /> Rule\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onAddGroup(group.id)}\n className=\"h-7 text-[10px] font-bold uppercase\"\n >\n <Layers className=\"mr-1 h-3 w-3\" /> Group\n </Button>\n {depth > 0 && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onRemoveItem(group.id)}\n className=\"text-slate-400\"\n >\n <Trash2 className=\"h-5 w-5 text-red-500\" />\n </Button>\n )}\n </div>\n </div>\n\n <div className=\"space-y-3\">\n {group.items.map((item) => {\n const column = columns.find(\n (c) => c.id === (item.type === \"rule\" ? item.columnId : null)\n );\n return item.type === \"rule\" ? (\n <div\n key={item.id}\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\"\n >\n <div className=\"flex-1 min-w-[140px] w-1/5\">\n <Select\n value={item.columnId as string}\n onValueChange={(val) => {\n const colId = val as keyof T;\n const col = columns.find((c) => c.id === colId);\n onUpdateRule(item.id, {\n columnId: colId,\n operator:\n col?.type === \"date\"\n ? \"is\"\n : col?.type === \"number\"\n ? \"equals\"\n : col?.type === \"select\"\n ? \"equals\"\n : \"contains\",\n value: \"\",\n });\n }}\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue placeholder=\"Select column...\" />\n </SelectTrigger>\n <SelectContent>\n {columns.map((c) => (\n <SelectItem key={c.id as string} value={c.id as string}>\n {c.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"w-full md:w-1/5\">\n <Select\n value={item.operator}\n onValueChange={(val) =>\n onUpdateRule(item.id, { operator: val as FilterOperator })\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue placeholder=\"Select operator...\" />\n </SelectTrigger>\n <SelectContent className=\"z-[100]\">\n {getOperatorsForType(column?.type || \"string\").map((op) => (\n <SelectItem key={op.value} value={op.value}>\n {op.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div className=\"w-full md:w-2/5\">\n {column?.type === \"date\" ? (\n <Input\n type=\"date\"\n value={item.value || \"\"}\n onChange={(e) =>\n onUpdateRule(item.id, { value: e.target.value })\n }\n />\n ) : column?.type === \"boolean\" ? (\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\">\n <Binary className=\"h-3 w-3 mr-2\" />\n Binary state\n </div>\n ) : column?.type === \"select\" ? (\n <Select\n value={item.value || \"\"}\n onValueChange={(val) =>\n onUpdateRule(item.id, { value: val })\n }\n >\n <SelectTrigger className=\"w-full\">\n <SelectValue placeholder=\"Choose option...\" />\n </SelectTrigger>\n <SelectContent className=\"z-[100]\">\n {(column.options || []).map((opt) => (\n <SelectItem key={opt} value={opt}>\n {opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <Input\n placeholder=\"Search query...\"\n value={item.value || \"\"}\n onChange={(e) =>\n onUpdateRule(item.id, { value: e.target.value })\n }\n />\n )}\n </div>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => onRemoveItem(item.id)}\n className=\"h-9 w-9 text-slate-300 hover:text-red-500 hover:bg-red-50\"\n >\n <Trash2 className=\"h-5 w-5 text-red-500\" />\n </Button>\n </div>\n ) : (\n <FilterGroupUI\n group={item}\n depth={depth + 1}\n columns={columns}\n onAddRule={onAddRule}\n onAddGroup={onAddGroup}\n onUpdateRule={onUpdateRule}\n onUpdateGroupLogic={onUpdateGroupLogic}\n onRemoveItem={onRemoveItem}\n />\n );\n })}\n {group.items.length === 0 && (\n <div className=\"flex flex-col items-center justify-center py-6 rounded-md border border-dashed border-slate-200 bg-white/50\">\n <ListFilter className=\"h-5 w-5 text-slate-300 mb-1\" />\n <p className=\"text-[10px] text-slate-400 font-bold uppercase tracking-widest\">\n Add a rule to filter\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport const AdvancedFilter = <T,>({\n isOpen,\n onClose,\n data,\n columns,\n setFilteredData,\n initialFilters,\n}: AdvancedFilterProps<T>) => {\n const [rootGroup, setRootGroup] = useState<FilterGroup<T>>({\n type: \"group\",\n id: \"root\",\n logic: \"AND\",\n items: [],\n });\n\n useEffect(() => {\n if (initialFilters) setRootGroup(initialFilters);\n }, [initialFilters, isOpen]);\n\n const updateItemRecursively = useCallback(\n (\n group: FilterGroup<T>,\n targetId: string,\n updater: (item: FilterItem<T>) => FilterItem<T> | null\n ): FilterGroup<T> => {\n if (group.id === targetId) return updater(group) as FilterGroup<T>;\n return {\n ...group,\n items: group.items\n .map((item) => {\n if (item.id === targetId) return updater(item);\n if (item.type === \"group\")\n return updateItemRecursively(item, targetId, updater);\n return item;\n })\n .filter(Boolean) as FilterItem<T>[],\n };\n },\n []\n );\n\n const handleAddRule = useCallback(\n (parentId: string) => {\n const firstCol = columns[0];\n const newRule: FilterRule<T> = {\n type: \"rule\",\n id: Math.random().toString(36).substr(2, 9),\n columnId: firstCol.id,\n operator:\n firstCol.type === \"string\"\n ? \"contains\"\n : firstCol.type === \"select\"\n ? \"equals\"\n : \"equals\",\n value: \"\",\n };\n setRootGroup((prev) =>\n updateItemRecursively(prev, parentId, (group) => ({\n ...(group as FilterGroup<T>),\n items: [...(group as FilterGroup<T>).items, newRule],\n }))\n );\n },\n [columns, updateItemRecursively]\n );\n\n const handleAddGroup = useCallback(\n (parentId: string) => {\n const newGroup: FilterGroup<T> = {\n type: \"group\",\n id: Math.random().toString(36).substr(2, 9),\n logic: \"AND\",\n items: [],\n };\n setRootGroup((prev) =>\n updateItemRecursively(prev, parentId, (group) => ({\n ...(group as FilterGroup<T>),\n items: [...(group as FilterGroup<T>).items, newGroup],\n }))\n );\n },\n [updateItemRecursively]\n );\n\n const handleUpdateRule = useCallback(\n (ruleId: string, updates: Partial<FilterRule<T>>) => {\n setRootGroup((prev) =>\n updateItemRecursively(\n prev,\n ruleId,\n (rule) => ({ ...rule, ...updates } as FilterRule<T>)\n )\n );\n },\n [updateItemRecursively]\n );\n\n const handleUpdateGroupLogic = useCallback(\n (groupId: string, logic: LogicalOperator) => {\n setRootGroup((prev) =>\n updateItemRecursively(\n prev,\n groupId,\n (group) => ({ ...group, logic } as FilterGroup<T>)\n )\n );\n },\n [updateItemRecursively]\n );\n\n const handleRemoveItem = useCallback(\n (itemId: string) => {\n setRootGroup((prev) => updateItemRecursively(prev, itemId, () => null));\n },\n [updateItemRecursively]\n );\n\n const handleApply = () => {\n const filtered = applyFilters(data, rootGroup, columns);\n setFilteredData(filtered);\n onClose();\n };\n\n const handleClear = () => {\n const emptyGroup: FilterGroup<T> = {\n type: \"group\",\n id: \"root\",\n logic: \"AND\",\n items: [],\n };\n setRootGroup(emptyGroup);\n setFilteredData(data);\n onClose();\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={onClose}>\n <DialogContent className=\"min-w-[80vw]\">\n <DialogHeader className=\"w-full\">\n <DialogTitle>Advanced Filters</DialogTitle>\n <DialogDescription>\n Refine your dataset using structured logic and multi-type\n comparisons.\n </DialogDescription>\n <div className=\"max-h-[60vh] w-full overflow-y-auto px-1 custom-scrollbar pr-3 pb-32\">\n <FilterGroupUI\n group={rootGroup}\n depth={0}\n columns={columns}\n onAddRule={handleAddRule}\n onAddGroup={handleAddGroup}\n onUpdateRule={handleUpdateRule}\n onUpdateGroupLogic={handleUpdateGroupLogic}\n onRemoveItem={handleRemoveItem}\n />\n </div>\n <div className=\"flex w-full justify-between items-center gap-4\">\n <Button\n variant=\"ghost\"\n onClick={handleClear}\n className=\"text-slate-400 hover:text-red-500 font-black text-[10px] uppercase tracking-widest gap-2\"\n >\n <FilterX className=\"h-4 w-4\" /> Reset Filters\n </Button>\n <div className=\"flex gap-2\">\n <Button\n variant=\"outline\"\n onClick={onClose}\n className=\"font-bold h-11 px-6\"\n >\n Cancel\n </Button>\n <Button\n onClick={handleApply}\n className=\"font-bold h-11 px-10 rounded-lg shadow-lg hover:shadow-xl transition-shadow\"\n >\n Apply View\n </Button>\n </div>\n </div>\n </DialogHeader>\n </DialogContent>\n </Dialog>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nest-filter",
3
- "version": "1.0.11",
3
+ "version": "1.0.12",
4
4
  "description": "Reusable Nest Filter UI components for React",
5
5
  "author": "Arijit Barik",
6
6
  "license": "ISC",