@shefing/quickfilter 1.0.0
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/README.md +0 -0
- package/dist/FilterField.d.ts +8 -0
- package/dist/FilterField.d.ts.map +1 -0
- package/dist/FilterField.js +87 -0
- package/dist/FilterField.js.map +1 -0
- package/dist/QuickFilter.d.ts +9 -0
- package/dist/QuickFilter.d.ts.map +1 -0
- package/dist/QuickFilter.js +331 -0
- package/dist/QuickFilter.js.map +1 -0
- package/dist/filters/components/checkbox-filter.d.ts +12 -0
- package/dist/filters/components/checkbox-filter.d.ts.map +1 -0
- package/dist/filters/components/checkbox-filter.js +104 -0
- package/dist/filters/components/checkbox-filter.js.map +1 -0
- package/dist/filters/components/date-filter.d.ts +11 -0
- package/dist/filters/components/date-filter.d.ts.map +1 -0
- package/dist/filters/components/date-filter.js +379 -0
- package/dist/filters/components/date-filter.js.map +1 -0
- package/dist/filters/components/select-filter.d.ts +14 -0
- package/dist/filters/components/select-filter.d.ts.map +1 -0
- package/dist/filters/components/select-filter.js +223 -0
- package/dist/filters/components/select-filter.js.map +1 -0
- package/dist/filters/components/small-select-filter.d.ts +18 -0
- package/dist/filters/components/small-select-filter.d.ts.map +1 -0
- package/dist/filters/components/small-select-filter.js +120 -0
- package/dist/filters/components/small-select-filter.js.map +1 -0
- package/dist/filters/constants/date-filter-options.d.ts +6 -0
- package/dist/filters/constants/date-filter-options.d.ts.map +1 -0
- package/dist/filters/constants/date-filter-options.js +74 -0
- package/dist/filters/constants/date-filter-options.js.map +1 -0
- package/dist/filters/types/filters-type.d.ts +99 -0
- package/dist/filters/types/filters-type.d.ts.map +1 -0
- package/dist/filters/types/filters-type.js +3 -0
- package/dist/filters/types/filters-type.js.map +1 -0
- package/dist/filters/utils/date-helpers.d.ts +23 -0
- package/dist/filters/utils/date-helpers.d.ts.map +1 -0
- package/dist/filters/utils/date-helpers.js +159 -0
- package/dist/filters/utils/date-helpers.js.map +1 -0
- package/dist/filters/utils/layout-helpers.d.ts +6 -0
- package/dist/filters/utils/layout-helpers.d.ts.map +1 -0
- package/dist/filters/utils/layout-helpers.js +73 -0
- package/dist/filters/utils/layout-helpers.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +18 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/badge.d.ts +10 -0
- package/dist/ui/badge.d.ts.map +1 -0
- package/dist/ui/badge.js +28 -0
- package/dist/ui/badge.js.map +1 -0
- package/dist/ui/button.d.ts +12 -0
- package/dist/ui/button.d.ts.map +1 -0
- package/dist/ui/button.js +45 -0
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/calendar.d.ts +9 -0
- package/dist/ui/calendar.d.ts.map +1 -0
- package/dist/ui/calendar.js +126 -0
- package/dist/ui/calendar.js.map +1 -0
- package/dist/ui/checkbox.d.ts +5 -0
- package/dist/ui/checkbox.d.ts.map +1 -0
- package/dist/ui/checkbox.js +21 -0
- package/dist/ui/checkbox.js.map +1 -0
- package/dist/ui/command.d.ts +81 -0
- package/dist/ui/command.d.ts.map +1 -0
- package/dist/ui/command.js +80 -0
- package/dist/ui/command.js.map +1 -0
- package/dist/ui/dialog.d.ts +20 -0
- package/dist/ui/dialog.d.ts.map +1 -0
- package/dist/ui/dialog.js +61 -0
- package/dist/ui/dialog.js.map +1 -0
- package/dist/ui/label.d.ts +6 -0
- package/dist/ui/label.d.ts.map +1 -0
- package/dist/ui/label.js +16 -0
- package/dist/ui/label.js.map +1 -0
- package/dist/ui/popover.d.ts +7 -0
- package/dist/ui/popover.d.ts.map +1 -0
- package/dist/ui/popover.js +20 -0
- package/dist/ui/popover.js.map +1 -0
- package/dist/ui/separator.d.ts +5 -0
- package/dist/ui/separator.d.ts.map +1 -0
- package/dist/ui/separator.js +16 -0
- package/dist/ui/separator.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { Check, ChevronsUpDown, X } from 'lucide-react';
|
|
5
|
+
import { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';
|
|
6
|
+
import { Label } from '../../ui/label';
|
|
7
|
+
import { cn } from '../../lib/utils';
|
|
8
|
+
import { Button } from '../../ui/button';
|
|
9
|
+
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '../../ui/command';
|
|
10
|
+
import { Checkbox } from '../../ui/checkbox';
|
|
11
|
+
import { Badge } from '../../ui/badge';
|
|
12
|
+
export function SelectFilter({ label, options, value, onChange, placeholder, locale = {
|
|
13
|
+
code: 'he',
|
|
14
|
+
direction: 'rtl'
|
|
15
|
+
}, className, multiSelect = true }) {
|
|
16
|
+
const [open, setOpen] = useState(false);
|
|
17
|
+
const [internalValue, setInternalValue] = useState(value);
|
|
18
|
+
const isHebrew = locale.code === 'he';
|
|
19
|
+
const showSearch = options.length > 10;
|
|
20
|
+
const showSelectAll = multiSelect && options.length > 3;
|
|
21
|
+
// Sync internal state with external value prop
|
|
22
|
+
useEffect(()=>{
|
|
23
|
+
setInternalValue(value);
|
|
24
|
+
}, [
|
|
25
|
+
value
|
|
26
|
+
]);
|
|
27
|
+
const selectedValues = internalValue?.selectedValues || [];
|
|
28
|
+
const allSelected = selectedValues.length === options.length;
|
|
29
|
+
const labels = {
|
|
30
|
+
selectAll: isHebrew ? 'בחר הכל' : 'Select All',
|
|
31
|
+
deselectAll: isHebrew ? 'בטל בחירת הכל' : 'Deselect All',
|
|
32
|
+
search: isHebrew ? 'חפש...' : 'Search...',
|
|
33
|
+
noResults: isHebrew ? 'לא נמצאו תוצאות' : 'No results found',
|
|
34
|
+
selected: isHebrew ? 'נבחרו' : 'selected'
|
|
35
|
+
};
|
|
36
|
+
const getFilterValue = (values)=>{
|
|
37
|
+
if (values.length === 0) {
|
|
38
|
+
return {
|
|
39
|
+
type: 'none',
|
|
40
|
+
selectedValues: []
|
|
41
|
+
};
|
|
42
|
+
} else if (values.length === options.length) {
|
|
43
|
+
return {
|
|
44
|
+
type: 'all',
|
|
45
|
+
selectedValues: values
|
|
46
|
+
};
|
|
47
|
+
} else {
|
|
48
|
+
return {
|
|
49
|
+
type: 'some',
|
|
50
|
+
selectedValues: values
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const handleSelectAll = ()=>{
|
|
55
|
+
const allValues = options.map((option)=>option.value);
|
|
56
|
+
const newValue = getFilterValue(allValues);
|
|
57
|
+
setInternalValue(newValue);
|
|
58
|
+
onChange(newValue);
|
|
59
|
+
};
|
|
60
|
+
const handleClearAll = ()=>{
|
|
61
|
+
const newValue = getFilterValue([]);
|
|
62
|
+
setInternalValue(newValue);
|
|
63
|
+
onChange(newValue);
|
|
64
|
+
};
|
|
65
|
+
const handleToggleSelectAll = ()=>{
|
|
66
|
+
if (allSelected) {
|
|
67
|
+
handleClearAll();
|
|
68
|
+
} else {
|
|
69
|
+
handleSelectAll();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const handleToggleOption = (optionValue)=>{
|
|
73
|
+
let newValues;
|
|
74
|
+
if (multiSelect) {
|
|
75
|
+
newValues = selectedValues.includes(optionValue) ? selectedValues.filter((val)=>val !== optionValue) : [
|
|
76
|
+
...selectedValues,
|
|
77
|
+
optionValue
|
|
78
|
+
];
|
|
79
|
+
} else {
|
|
80
|
+
newValues = [
|
|
81
|
+
optionValue
|
|
82
|
+
];
|
|
83
|
+
setOpen(false);
|
|
84
|
+
}
|
|
85
|
+
const newValue = getFilterValue(newValues);
|
|
86
|
+
setInternalValue(newValue);
|
|
87
|
+
onChange(newValue);
|
|
88
|
+
};
|
|
89
|
+
const getDisplayText = ()=>{
|
|
90
|
+
if (selectedValues.length === 0) {
|
|
91
|
+
return placeholder || (isHebrew ? 'בחר אפשרויות' : 'Select options');
|
|
92
|
+
} else if (selectedValues.length === options.length) {
|
|
93
|
+
return labels.selectAll;
|
|
94
|
+
} else {
|
|
95
|
+
return `${selectedValues.length} ${labels.selected}`;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
99
|
+
className: cn('space-y-1', className),
|
|
100
|
+
dir: locale.direction,
|
|
101
|
+
children: [
|
|
102
|
+
label && /*#__PURE__*/ _jsx(Label, {
|
|
103
|
+
className: cn('useTw text-sm font-medium', isHebrew && 'text-right block'),
|
|
104
|
+
children: label
|
|
105
|
+
}),
|
|
106
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
107
|
+
className: "relative",
|
|
108
|
+
children: [
|
|
109
|
+
/*#__PURE__*/ _jsxs(Popover, {
|
|
110
|
+
open: open,
|
|
111
|
+
onOpenChange: setOpen,
|
|
112
|
+
children: [
|
|
113
|
+
/*#__PURE__*/ _jsx(PopoverTrigger, {
|
|
114
|
+
asChild: true,
|
|
115
|
+
children: /*#__PURE__*/ _jsxs(Button, {
|
|
116
|
+
variant: "outline",
|
|
117
|
+
role: "combobox",
|
|
118
|
+
"aria-expanded": open,
|
|
119
|
+
className: "w-full justify-between bg-background relative",
|
|
120
|
+
children: [
|
|
121
|
+
/*#__PURE__*/ _jsx("span", {
|
|
122
|
+
className: "truncate",
|
|
123
|
+
children: getDisplayText()
|
|
124
|
+
}),
|
|
125
|
+
/*#__PURE__*/ _jsx(ChevronsUpDown, {
|
|
126
|
+
className: "h-4 w-4 shrink-0 opacity-50"
|
|
127
|
+
})
|
|
128
|
+
]
|
|
129
|
+
})
|
|
130
|
+
}),
|
|
131
|
+
/*#__PURE__*/ _jsx(PopoverContent, {
|
|
132
|
+
className: "w-80 p-0",
|
|
133
|
+
align: "start",
|
|
134
|
+
children: /*#__PURE__*/ _jsxs(Command, {
|
|
135
|
+
children: [
|
|
136
|
+
showSearch && /*#__PURE__*/ _jsx(CommandInput, {
|
|
137
|
+
placeholder: labels.search
|
|
138
|
+
}),
|
|
139
|
+
/*#__PURE__*/ _jsxs(CommandList, {
|
|
140
|
+
children: [
|
|
141
|
+
/*#__PURE__*/ _jsx(CommandEmpty, {
|
|
142
|
+
children: labels.noResults
|
|
143
|
+
}),
|
|
144
|
+
/*#__PURE__*/ _jsxs(CommandGroup, {
|
|
145
|
+
children: [
|
|
146
|
+
showSelectAll && /*#__PURE__*/ _jsx(CommandItem, {
|
|
147
|
+
onSelect: handleToggleSelectAll,
|
|
148
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
149
|
+
className: cn('useTw flex items-center w-full justify-between', isHebrew && 'flex-row-reverse'),
|
|
150
|
+
children: [
|
|
151
|
+
/*#__PURE__*/ _jsx(Checkbox, {
|
|
152
|
+
checked: allSelected,
|
|
153
|
+
className: cn(isHebrew ? 'useTw ml-2' : 'useTw mr-2')
|
|
154
|
+
}),
|
|
155
|
+
/*#__PURE__*/ _jsx("span", {
|
|
156
|
+
className: cn(isHebrew && 'useTw text-right flex-1 mr-2'),
|
|
157
|
+
children: allSelected ? labels.deselectAll : labels.selectAll
|
|
158
|
+
})
|
|
159
|
+
]
|
|
160
|
+
})
|
|
161
|
+
}),
|
|
162
|
+
options.map((option)=>/*#__PURE__*/ _jsx(CommandItem, {
|
|
163
|
+
onSelect: ()=>handleToggleOption(option.value),
|
|
164
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
165
|
+
className: cn('flex items-center w-full justify-between', isHebrew && 'flex-row-reverse'),
|
|
166
|
+
children: [
|
|
167
|
+
multiSelect ? /*#__PURE__*/ _jsx(Checkbox, {
|
|
168
|
+
checked: selectedValues.includes(option.value),
|
|
169
|
+
className: cn(isHebrew ? 'useTw ml-2' : 'useTw mx-2')
|
|
170
|
+
}) : /*#__PURE__*/ _jsx(Check, {
|
|
171
|
+
className: cn('useTw h-4 w-4', isHebrew ? 'ml-2' : 'mr-2', selectedValues.includes(option.value) ? 'opacity-100' : 'opacity-0')
|
|
172
|
+
}),
|
|
173
|
+
/*#__PURE__*/ _jsx("span", {
|
|
174
|
+
className: cn(isHebrew && 'text-right flex-1'),
|
|
175
|
+
children: option.label
|
|
176
|
+
})
|
|
177
|
+
]
|
|
178
|
+
})
|
|
179
|
+
}, option.value))
|
|
180
|
+
]
|
|
181
|
+
})
|
|
182
|
+
]
|
|
183
|
+
})
|
|
184
|
+
]
|
|
185
|
+
})
|
|
186
|
+
})
|
|
187
|
+
]
|
|
188
|
+
}),
|
|
189
|
+
selectedValues.length > 0 && /*#__PURE__*/ _jsx("button", {
|
|
190
|
+
className: `useTw absolute ${isHebrew ? 'left-8' : 'right-8'} top-1/2 -translate-y-1/2 h-4 w-4 p-0 hover:bg-muted rounded-sm flex items-center justify-center z-10 `,
|
|
191
|
+
onClick: (e)=>{
|
|
192
|
+
e.stopPropagation();
|
|
193
|
+
handleClearAll();
|
|
194
|
+
},
|
|
195
|
+
children: /*#__PURE__*/ _jsx(X, {
|
|
196
|
+
className: "h-3 w-3"
|
|
197
|
+
})
|
|
198
|
+
})
|
|
199
|
+
]
|
|
200
|
+
}),
|
|
201
|
+
multiSelect && selectedValues.length > 0 && selectedValues.length < options.length && /*#__PURE__*/ _jsx("div", {
|
|
202
|
+
className: "flex flex-wrap gap-1 mt-2",
|
|
203
|
+
children: selectedValues.map((value)=>{
|
|
204
|
+
const option = options.find((opt)=>opt.value === value);
|
|
205
|
+
return /*#__PURE__*/ _jsxs(Badge, {
|
|
206
|
+
variant: "secondary",
|
|
207
|
+
className: "text-xs bg-background border",
|
|
208
|
+
children: [
|
|
209
|
+
option?.label || value,
|
|
210
|
+
/*#__PURE__*/ _jsx("button", {
|
|
211
|
+
className: "ml-1 hover:bg-muted rounded-full",
|
|
212
|
+
onClick: ()=>handleToggleOption(value),
|
|
213
|
+
children: "×"
|
|
214
|
+
})
|
|
215
|
+
]
|
|
216
|
+
}, value);
|
|
217
|
+
})
|
|
218
|
+
})
|
|
219
|
+
]
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
//# sourceMappingURL=select-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/components/select-filter.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\nimport { Check, ChevronsUpDown, X } from 'lucide-react';\n\nimport { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';\n\nimport { Label } from '../../ui/label';\n\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../ui/button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '../../ui/command';\nimport { Locale, SelectFilterOption, SelectFilterValue } from '../types/filters-type';\nimport { Checkbox } from '../../ui/checkbox';\nimport { Badge } from '../../ui/badge';\n\ninterface SelectFilterProps {\n label?: string;\n options: SelectFilterOption[];\n value?: SelectFilterValue;\n onChange: (value: SelectFilterValue) => void;\n placeholder?: string;\n locale?: Locale;\n className?: string;\n multiSelect?: boolean;\n}\n\nexport function SelectFilter({\n label,\n options,\n value,\n onChange,\n placeholder,\n locale = { code: 'he', direction: 'rtl' },\n className,\n multiSelect = true,\n}: SelectFilterProps) {\n const [open, setOpen] = useState(false);\n const [internalValue, setInternalValue] = useState<SelectFilterValue | undefined>(value);\n\n const isHebrew = locale.code === 'he';\n const showSearch = options.length > 10;\n const showSelectAll = multiSelect && options.length > 3;\n\n // Sync internal state with external value prop\n useEffect(() => {\n setInternalValue(value);\n }, [value]);\n\n const selectedValues = internalValue?.selectedValues || [];\n const allSelected = selectedValues.length === options.length;\n\n const labels = {\n selectAll: isHebrew ? 'בחר הכל' : 'Select All',\n deselectAll: isHebrew ? 'בטל בחירת הכל' : 'Deselect All',\n search: isHebrew ? 'חפש...' : 'Search...',\n noResults: isHebrew ? 'לא נמצאו תוצאות' : 'No results found',\n selected: isHebrew ? 'נבחרו' : 'selected',\n };\n\n const getFilterValue = (values: string[]): SelectFilterValue => {\n if (values.length === 0) {\n return { type: 'none', selectedValues: [] };\n } else if (values.length === options.length) {\n return { type: 'all', selectedValues: values };\n } else {\n return { type: 'some', selectedValues: values };\n }\n };\n\n const handleSelectAll = () => {\n const allValues = options.map((option) => option.value);\n const newValue = getFilterValue(allValues);\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleClearAll = () => {\n const newValue = getFilterValue([]);\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleToggleSelectAll = () => {\n if (allSelected) {\n handleClearAll();\n } else {\n handleSelectAll();\n }\n };\n\n const handleToggleOption = (optionValue: string) => {\n let newValues: string[];\n\n if (multiSelect) {\n newValues = selectedValues.includes(optionValue)\n ? selectedValues.filter((val) => val !== optionValue)\n : [...selectedValues, optionValue];\n } else {\n newValues = [optionValue];\n setOpen(false);\n }\n\n const newValue = getFilterValue(newValues);\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const getDisplayText = () => {\n if (selectedValues.length === 0) {\n return placeholder || (isHebrew ? 'בחר אפשרויות' : 'Select options');\n } else if (selectedValues.length === options.length) {\n return labels.selectAll;\n } else {\n return `${selectedValues.length} ${labels.selected}`;\n }\n };\n\n return (\n <div className={cn('space-y-1', className)} dir={locale.direction}>\n {label && (\n <Label className={cn('useTw text-sm font-medium', isHebrew && 'text-right block')}>\n {label}\n </Label>\n )}\n\n <div className='relative'>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n variant='outline'\n role='combobox'\n aria-expanded={open}\n className='w-full justify-between bg-background relative'\n >\n <span className='truncate'>{getDisplayText()}</span>\n <ChevronsUpDown className='h-4 w-4 shrink-0 opacity-50' />\n </Button>\n </PopoverTrigger>\n <PopoverContent className='w-80 p-0' align='start'>\n <Command>\n {showSearch && <CommandInput placeholder={labels.search} />}\n <CommandList>\n <CommandEmpty>{labels.noResults}</CommandEmpty>\n <CommandGroup>\n {showSelectAll && (\n <CommandItem onSelect={handleToggleSelectAll}>\n <div\n className={cn(\n 'useTw flex items-center w-full justify-between',\n isHebrew && 'flex-row-reverse',\n )}\n >\n <Checkbox\n checked={allSelected}\n className={cn(isHebrew ? 'useTw ml-2' : 'useTw mr-2')}\n />\n <span className={cn(isHebrew && 'useTw text-right flex-1 mr-2')}>\n {allSelected ? labels.deselectAll : labels.selectAll}\n </span>\n </div>\n </CommandItem>\n )}\n {options.map((option) => (\n <CommandItem\n key={option.value}\n onSelect={() => handleToggleOption(option.value)}\n >\n <div\n className={cn(\n 'flex items-center w-full justify-between',\n isHebrew && 'flex-row-reverse',\n )}\n >\n {multiSelect ? (\n <Checkbox\n checked={selectedValues.includes(option.value)}\n className={cn(isHebrew ? 'useTw ml-2' : 'useTw mx-2')}\n />\n ) : (\n <Check\n className={cn(\n 'useTw h-4 w-4',\n isHebrew ? 'ml-2' : 'mr-2',\n selectedValues.includes(option.value) ? 'opacity-100' : 'opacity-0',\n )}\n />\n )}\n <span className={cn(isHebrew && 'text-right flex-1')}>{option.label}</span>\n </div>\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n {selectedValues.length > 0 && (\n <button\n className={`useTw absolute ${isHebrew ? 'left-8' : 'right-8'} top-1/2 -translate-y-1/2 h-4 w-4 p-0 hover:bg-muted rounded-sm flex items-center justify-center z-10 `}\n onClick={(e) => {\n e.stopPropagation();\n handleClearAll();\n }}\n >\n <X className='h-3 w-3' />\n </button>\n )}\n </div>\n\n {multiSelect && selectedValues.length > 0 && selectedValues.length < options.length && (\n <div className='flex flex-wrap gap-1 mt-2'>\n {selectedValues.map((value) => {\n const option = options.find((opt) => opt.value === value);\n return (\n <Badge key={value} variant='secondary' className='text-xs bg-background border'>\n {option?.label || value}\n <button\n className='ml-1 hover:bg-muted rounded-full'\n onClick={() => handleToggleOption(value)}\n >\n ×\n </button>\n </Badge>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n"],"names":["useEffect","useState","Check","ChevronsUpDown","X","Popover","PopoverContent","PopoverTrigger","Label","cn","Button","Command","CommandEmpty","CommandGroup","CommandInput","CommandItem","CommandList","Checkbox","Badge","SelectFilter","label","options","value","onChange","placeholder","locale","code","direction","className","multiSelect","open","setOpen","internalValue","setInternalValue","isHebrew","showSearch","length","showSelectAll","selectedValues","allSelected","labels","selectAll","deselectAll","search","noResults","selected","getFilterValue","values","type","handleSelectAll","allValues","map","option","newValue","handleClearAll","handleToggleSelectAll","handleToggleOption","optionValue","newValues","includes","filter","val","getDisplayText","div","dir","onOpenChange","asChild","variant","role","aria-expanded","span","align","onSelect","checked","button","onClick","e","stopPropagation","find","opt"],"mappings":"AAAA;;AAEA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAC5C,SAASC,KAAK,EAAEC,cAAc,EAAEC,CAAC,QAAQ,eAAe;AAExD,SAASC,OAAO,EAAEC,cAAc,EAAEC,cAAc,QAAQ,mBAAmB;AAE3E,SAASC,KAAK,QAAQ,iBAAiB;AAEvC,SAASC,EAAE,QAAQ,kBAAkB;AACrC,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SACEC,OAAO,EACPC,YAAY,EACZC,YAAY,EACZC,YAAY,EACZC,WAAW,EACXC,WAAW,QACN,mBAAmB;AAE1B,SAASC,QAAQ,QAAQ,oBAAoB;AAC7C,SAASC,KAAK,QAAQ,iBAAiB;AAavC,OAAO,SAASC,aAAa,EAC3BC,KAAK,EACLC,OAAO,EACPC,KAAK,EACLC,QAAQ,EACRC,WAAW,EACXC,SAAS;IAAEC,MAAM;IAAMC,WAAW;AAAM,CAAC,EACzCC,SAAS,EACTC,cAAc,IAAI,EACA;IAClB,MAAM,CAACC,MAAMC,QAAQ,GAAG9B,SAAS;IACjC,MAAM,CAAC+B,eAAeC,iBAAiB,GAAGhC,SAAwCqB;IAElF,MAAMY,WAAWT,OAAOC,IAAI,KAAK;IACjC,MAAMS,aAAad,QAAQe,MAAM,GAAG;IACpC,MAAMC,gBAAgBR,eAAeR,QAAQe,MAAM,GAAG;IAEtD,+CAA+C;IAC/CpC,UAAU;QACRiC,iBAAiBX;IACnB,GAAG;QAACA;KAAM;IAEV,MAAMgB,iBAAiBN,eAAeM,kBAAkB,EAAE;IAC1D,MAAMC,cAAcD,eAAeF,MAAM,KAAKf,QAAQe,MAAM;IAE5D,MAAMI,SAAS;QACbC,WAAWP,WAAW,YAAY;QAClCQ,aAAaR,WAAW,kBAAkB;QAC1CS,QAAQT,WAAW,WAAW;QAC9BU,WAAWV,WAAW,oBAAoB;QAC1CW,UAAUX,WAAW,UAAU;IACjC;IAEA,MAAMY,iBAAiB,CAACC;QACtB,IAAIA,OAAOX,MAAM,KAAK,GAAG;YACvB,OAAO;gBAAEY,MAAM;gBAAQV,gBAAgB,EAAE;YAAC;QAC5C,OAAO,IAAIS,OAAOX,MAAM,KAAKf,QAAQe,MAAM,EAAE;YAC3C,OAAO;gBAAEY,MAAM;gBAAOV,gBAAgBS;YAAO;QAC/C,OAAO;YACL,OAAO;gBAAEC,MAAM;gBAAQV,gBAAgBS;YAAO;QAChD;IACF;IAEA,MAAME,kBAAkB;QACtB,MAAMC,YAAY7B,QAAQ8B,GAAG,CAAC,CAACC,SAAWA,OAAO9B,KAAK;QACtD,MAAM+B,WAAWP,eAAeI;QAChCjB,iBAAiBoB;QACjB9B,SAAS8B;IACX;IAEA,MAAMC,iBAAiB;QACrB,MAAMD,WAAWP,eAAe,EAAE;QAClCb,iBAAiBoB;QACjB9B,SAAS8B;IACX;IAEA,MAAME,wBAAwB;QAC5B,IAAIhB,aAAa;YACfe;QACF,OAAO;YACLL;QACF;IACF;IAEA,MAAMO,qBAAqB,CAACC;QAC1B,IAAIC;QAEJ,IAAI7B,aAAa;YACf6B,YAAYpB,eAAeqB,QAAQ,CAACF,eAChCnB,eAAesB,MAAM,CAAC,CAACC,MAAQA,QAAQJ,eACvC;mBAAInB;gBAAgBmB;aAAY;QACtC,OAAO;YACLC,YAAY;gBAACD;aAAY;YACzB1B,QAAQ;QACV;QAEA,MAAMsB,WAAWP,eAAeY;QAChCzB,iBAAiBoB;QACjB9B,SAAS8B;IACX;IAEA,MAAMS,iBAAiB;QACrB,IAAIxB,eAAeF,MAAM,KAAK,GAAG;YAC/B,OAAOZ,eAAgBU,CAAAA,WAAW,iBAAiB,gBAAe;QACpE,OAAO,IAAII,eAAeF,MAAM,KAAKf,QAAQe,MAAM,EAAE;YACnD,OAAOI,OAAOC,SAAS;QACzB,OAAO;YACL,OAAO,GAAGH,eAAeF,MAAM,CAAC,CAAC,EAAEI,OAAOK,QAAQ,EAAE;QACtD;IACF;IAEA,qBACE,MAACkB;QAAInC,WAAWnB,GAAG,aAAamB;QAAYoC,KAAKvC,OAAOE,SAAS;;YAC9DP,uBACC,KAACZ;gBAAMoB,WAAWnB,GAAG,6BAA6ByB,YAAY;0BAC3Dd;;0BAIL,MAAC2C;gBAAInC,WAAU;;kCACb,MAACvB;wBAAQyB,MAAMA;wBAAMmC,cAAclC;;0CACjC,KAACxB;gCAAe2D,OAAO;0CACrB,cAAA,MAACxD;oCACCyD,SAAQ;oCACRC,MAAK;oCACLC,iBAAevC;oCACfF,WAAU;;sDAEV,KAAC0C;4CAAK1C,WAAU;sDAAYkC;;sDAC5B,KAAC3D;4CAAeyB,WAAU;;;;;0CAG9B,KAACtB;gCAAesB,WAAU;gCAAW2C,OAAM;0CACzC,cAAA,MAAC5D;;wCACEwB,4BAAc,KAACrB;4CAAaU,aAAagB,OAAOG,MAAM;;sDACvD,MAAC3B;;8DACC,KAACJ;8DAAc4B,OAAOI,SAAS;;8DAC/B,MAAC/B;;wDACEwB,+BACC,KAACtB;4DAAYyD,UAAUjB;sEACrB,cAAA,MAACQ;gEACCnC,WAAWnB,GACT,kDACAyB,YAAY;;kFAGd,KAACjB;wEACCwD,SAASlC;wEACTX,WAAWnB,GAAGyB,WAAW,eAAe;;kFAE1C,KAACoC;wEAAK1C,WAAWnB,GAAGyB,YAAY;kFAC7BK,cAAcC,OAAOE,WAAW,GAAGF,OAAOC,SAAS;;;;;wDAK3DpB,QAAQ8B,GAAG,CAAC,CAACC,uBACZ,KAACrC;gEAECyD,UAAU,IAAMhB,mBAAmBJ,OAAO9B,KAAK;0EAE/C,cAAA,MAACyC;oEACCnC,WAAWnB,GACT,4CACAyB,YAAY;;wEAGbL,4BACC,KAACZ;4EACCwD,SAASnC,eAAeqB,QAAQ,CAACP,OAAO9B,KAAK;4EAC7CM,WAAWnB,GAAGyB,WAAW,eAAe;2FAG1C,KAAChC;4EACC0B,WAAWnB,GACT,iBACAyB,WAAW,SAAS,QACpBI,eAAeqB,QAAQ,CAACP,OAAO9B,KAAK,IAAI,gBAAgB;;sFAI9D,KAACgD;4EAAK1C,WAAWnB,GAAGyB,YAAY;sFAAuBkB,OAAOhC,KAAK;;;;+DAvBhEgC,OAAO9B,KAAK;;;;;;;;;;oBAgC9BgB,eAAeF,MAAM,GAAG,mBACvB,KAACsC;wBACC9C,WAAW,CAAC,eAAe,EAAEM,WAAW,WAAW,UAAU,sGAAsG,CAAC;wBACpKyC,SAAS,CAACC;4BACRA,EAAEC,eAAe;4BACjBvB;wBACF;kCAEA,cAAA,KAAClD;4BAAEwB,WAAU;;;;;YAKlBC,eAAeS,eAAeF,MAAM,GAAG,KAAKE,eAAeF,MAAM,GAAGf,QAAQe,MAAM,kBACjF,KAAC2B;gBAAInC,WAAU;0BACZU,eAAea,GAAG,CAAC,CAAC7B;oBACnB,MAAM8B,SAAS/B,QAAQyD,IAAI,CAAC,CAACC,MAAQA,IAAIzD,KAAK,KAAKA;oBACnD,qBACE,MAACJ;wBAAkBiD,SAAQ;wBAAYvC,WAAU;;4BAC9CwB,QAAQhC,SAASE;0CAClB,KAACoD;gCACC9C,WAAU;gCACV+C,SAAS,IAAMnB,mBAAmBlC;0CACnC;;;uBALSA;gBAUhB;;;;AAKV"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Locale, SelectFilterValue } from '../types/filters-type';
|
|
2
|
+
interface SmallSelectOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
interface SmallSelectFilterProps {
|
|
7
|
+
label?: string;
|
|
8
|
+
options: SmallSelectOption[];
|
|
9
|
+
value?: SelectFilterValue;
|
|
10
|
+
onChange: (value: SelectFilterValue) => void;
|
|
11
|
+
locale?: Locale;
|
|
12
|
+
className?: string;
|
|
13
|
+
multiSelect?: boolean;
|
|
14
|
+
maxOptions?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare function SmallSelectFilter({ label, options, value, onChange, locale, className, multiSelect, maxOptions, }: SmallSelectFilterProps): import("react").JSX.Element;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=small-select-filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"small-select-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/small-select-filter.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAElE,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,sBAAsB;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAyC,EACzC,SAAS,EACT,WAAkB,EAClB,UAAc,GACf,EAAE,sBAAsB,+BA4HxB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
import { X } from 'lucide-react';
|
|
5
|
+
import { cn } from '../../lib/utils';
|
|
6
|
+
import { Button } from '../../ui/button';
|
|
7
|
+
import { Label } from '../../ui/label';
|
|
8
|
+
export function SmallSelectFilter({ label, options, value, onChange, locale = {
|
|
9
|
+
code: 'he',
|
|
10
|
+
direction: 'rtl'
|
|
11
|
+
}, className, multiSelect = true, maxOptions = 3 }) {
|
|
12
|
+
const [internalValue, setInternalValue] = useState(value || {
|
|
13
|
+
type: 'none',
|
|
14
|
+
selectedValues: []
|
|
15
|
+
});
|
|
16
|
+
const isHebrew = locale.code === 'he';
|
|
17
|
+
// Limit options to maxOptions
|
|
18
|
+
const limitedOptions = options.slice(0, maxOptions);
|
|
19
|
+
// Sync internal state with external value prop
|
|
20
|
+
useEffect(()=>{
|
|
21
|
+
setInternalValue(value || {
|
|
22
|
+
type: 'none',
|
|
23
|
+
selectedValues: []
|
|
24
|
+
});
|
|
25
|
+
}, [
|
|
26
|
+
value
|
|
27
|
+
]);
|
|
28
|
+
const handleOptionToggle = (optionValue)=>{
|
|
29
|
+
let newSelectedValues;
|
|
30
|
+
if (multiSelect) {
|
|
31
|
+
// Multiple selection mode - allow multiple choices
|
|
32
|
+
if (internalValue.selectedValues.includes(optionValue)) {
|
|
33
|
+
newSelectedValues = internalValue.selectedValues.filter((val)=>val !== optionValue);
|
|
34
|
+
} else {
|
|
35
|
+
newSelectedValues = [
|
|
36
|
+
...internalValue.selectedValues,
|
|
37
|
+
optionValue
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
} else {
|
|
41
|
+
// Single selection mode
|
|
42
|
+
if (internalValue.selectedValues.includes(optionValue)) {
|
|
43
|
+
newSelectedValues = []; // Deselect if already selected
|
|
44
|
+
} else {
|
|
45
|
+
newSelectedValues = [
|
|
46
|
+
optionValue
|
|
47
|
+
]; // Select only this option
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const newValue = {
|
|
51
|
+
type: newSelectedValues.length === 0 ? 'none' : newSelectedValues.length === options.length ? 'all' : 'some',
|
|
52
|
+
selectedValues: newSelectedValues
|
|
53
|
+
};
|
|
54
|
+
setInternalValue(newValue);
|
|
55
|
+
onChange(newValue);
|
|
56
|
+
};
|
|
57
|
+
const handleClear = ()=>{
|
|
58
|
+
const newValue = {
|
|
59
|
+
type: 'none',
|
|
60
|
+
selectedValues: []
|
|
61
|
+
};
|
|
62
|
+
setInternalValue(newValue);
|
|
63
|
+
onChange(newValue);
|
|
64
|
+
};
|
|
65
|
+
const hasSelection = internalValue.selectedValues.length > 0;
|
|
66
|
+
const isOptionSelected = (optionValue)=>{
|
|
67
|
+
return internalValue.selectedValues.includes(optionValue);
|
|
68
|
+
};
|
|
69
|
+
const getButtonColor = (optionValue, index)=>{
|
|
70
|
+
if (!isOptionSelected(optionValue)) {
|
|
71
|
+
return 'useTw bg-background text-muted-foreground hover:bg-muted';
|
|
72
|
+
}
|
|
73
|
+
// Different colors for different options when selected
|
|
74
|
+
const colors = [
|
|
75
|
+
'bg-blue-600 text-white hover:bg-blue-700',
|
|
76
|
+
'bg-green-600 text-white hover:bg-green-700',
|
|
77
|
+
'bg-purple-600 text-white hover:bg-purple-700'
|
|
78
|
+
];
|
|
79
|
+
return colors[index] || 'bg-accent text-accent-foreground hover:bg-accent/80';
|
|
80
|
+
};
|
|
81
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
82
|
+
className: cn('space-y-2', className),
|
|
83
|
+
dir: locale.direction,
|
|
84
|
+
children: [
|
|
85
|
+
label && /*#__PURE__*/ _jsx(Label, {
|
|
86
|
+
className: cn('useTw text-sm font-medium', isHebrew && 'text-right block'),
|
|
87
|
+
children: label
|
|
88
|
+
}),
|
|
89
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
90
|
+
className: cn('flex items-center gap-3 transition-colors py-0.5', locale.direction === 'rtl' && 'justify-start'),
|
|
91
|
+
children: [
|
|
92
|
+
/*#__PURE__*/ _jsx("div", {
|
|
93
|
+
className: cn('flex items-center', locale.direction === 'rtl' && 'order-first'),
|
|
94
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
95
|
+
className: "flex rounded-md border overflow-hidden",
|
|
96
|
+
children: limitedOptions.map((option, index)=>/*#__PURE__*/ _jsx(Button, {
|
|
97
|
+
variant: "ghost",
|
|
98
|
+
size: "sm",
|
|
99
|
+
className: cn('px-3 py-1 text-xs rounded-none border-0', index > 0 && 'border-l', getButtonColor(option.value, index)),
|
|
100
|
+
onClick: ()=>handleOptionToggle(option.value),
|
|
101
|
+
children: option.label
|
|
102
|
+
}, option.value))
|
|
103
|
+
})
|
|
104
|
+
}),
|
|
105
|
+
hasSelection && /*#__PURE__*/ _jsx(Button, {
|
|
106
|
+
variant: "ghost",
|
|
107
|
+
size: "sm",
|
|
108
|
+
className: cn('h-5 w-5 p-0 hover:bg-muted rounded-full -mt-1 -ml-1', locale.direction === 'rtl' ? 'order-last' : 'order-last'),
|
|
109
|
+
onClick: handleClear,
|
|
110
|
+
children: /*#__PURE__*/ _jsx(X, {
|
|
111
|
+
className: "useTw h-3 w-3"
|
|
112
|
+
})
|
|
113
|
+
})
|
|
114
|
+
]
|
|
115
|
+
})
|
|
116
|
+
]
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
//# sourceMappingURL=small-select-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/components/small-select-filter.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nimport { X } from 'lucide-react';\n\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../ui/button';\nimport { Label } from '../../ui/label';\nimport { Locale, SelectFilterValue } from '../types/filters-type';\n\ninterface SmallSelectOption {\n value: string;\n label: string;\n}\n\ninterface SmallSelectFilterProps {\n label?: string;\n options: SmallSelectOption[];\n value?: SelectFilterValue;\n onChange: (value: SelectFilterValue) => void;\n locale?: Locale;\n className?: string;\n multiSelect?: boolean;\n maxOptions?: number;\n}\n\nexport function SmallSelectFilter({\n label,\n options,\n value,\n onChange,\n locale = { code: 'he', direction: 'rtl' },\n className,\n multiSelect = true,\n maxOptions = 3,\n}: SmallSelectFilterProps) {\n const [internalValue, setInternalValue] = useState<SelectFilterValue>(\n value || { type: 'none', selectedValues: [] },\n );\n\n const isHebrew = locale.code === 'he';\n\n // Limit options to maxOptions\n const limitedOptions = options.slice(0, maxOptions);\n\n // Sync internal state with external value prop\n useEffect(() => {\n setInternalValue(value || { type: 'none', selectedValues: [] });\n }, [value]);\n\n const handleOptionToggle = (optionValue: string) => {\n let newSelectedValues: string[];\n\n if (multiSelect) {\n // Multiple selection mode - allow multiple choices\n if (internalValue.selectedValues.includes(optionValue)) {\n newSelectedValues = internalValue.selectedValues.filter((val) => val !== optionValue);\n } else {\n newSelectedValues = [...internalValue.selectedValues, optionValue];\n }\n } else {\n // Single selection mode\n if (internalValue.selectedValues.includes(optionValue)) {\n newSelectedValues = []; // Deselect if already selected\n } else {\n newSelectedValues = [optionValue]; // Select only this option\n }\n }\n\n const newValue: SelectFilterValue = {\n type:\n newSelectedValues.length === 0\n ? 'none'\n : newSelectedValues.length === options.length\n ? 'all'\n : 'some',\n selectedValues: newSelectedValues,\n };\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const handleClear = () => {\n const newValue: SelectFilterValue = { type: 'none', selectedValues: [] };\n setInternalValue(newValue);\n onChange(newValue);\n };\n\n const hasSelection = internalValue.selectedValues.length > 0;\n\n const isOptionSelected = (optionValue: string) => {\n return internalValue.selectedValues.includes(optionValue);\n };\n\n const getButtonColor = (optionValue: string, index: number) => {\n if (!isOptionSelected(optionValue)) {\n return 'useTw bg-background text-muted-foreground hover:bg-muted';\n }\n\n // Different colors for different options when selected\n const colors = [\n 'bg-blue-600 text-white hover:bg-blue-700', // First option - blue\n 'bg-green-600 text-white hover:bg-green-700', // Second option - green\n 'bg-purple-600 text-white hover:bg-purple-700', // Third option - purple\n ];\n return colors[index] || 'bg-accent text-accent-foreground hover:bg-accent/80';\n };\n\n return (\n <div className={cn('space-y-2', className)} dir={locale.direction}>\n {label && (\n <Label className={cn('useTw text-sm font-medium', isHebrew && 'text-right block')}>\n {label}\n </Label>\n )}\n\n <div\n className={cn(\n 'flex items-center gap-3 transition-colors py-0.5',\n locale.direction === 'rtl' && 'justify-start',\n )}\n >\n <div className={cn('flex items-center', locale.direction === 'rtl' && 'order-first')}>\n {/* Toggle Options */}\n <div className='flex rounded-md border overflow-hidden'>\n {limitedOptions.map((option, index) => (\n <Button\n key={option.value}\n variant='ghost'\n size='sm'\n className={cn(\n 'px-3 py-1 text-xs rounded-none border-0',\n index > 0 && 'border-l',\n getButtonColor(option.value, index),\n )}\n onClick={() => handleOptionToggle(option.value)}\n >\n {option.label}\n </Button>\n ))}\n </div>\n </div>\n\n {hasSelection && (\n <Button\n variant='ghost'\n size='sm'\n className={cn(\n 'h-5 w-5 p-0 hover:bg-muted rounded-full -mt-1 -ml-1',\n locale.direction === 'rtl' ? 'order-last' : 'order-last',\n )}\n onClick={handleClear}\n >\n <X className='useTw h-3 w-3' />\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["useEffect","useState","X","cn","Button","Label","SmallSelectFilter","label","options","value","onChange","locale","code","direction","className","multiSelect","maxOptions","internalValue","setInternalValue","type","selectedValues","isHebrew","limitedOptions","slice","handleOptionToggle","optionValue","newSelectedValues","includes","filter","val","newValue","length","handleClear","hasSelection","isOptionSelected","getButtonColor","index","colors","div","dir","map","option","variant","size","onClick"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DateFilterOption } from '../types/filters-type';
|
|
2
|
+
export declare const pastDateFilterOptions: DateFilterOption[];
|
|
3
|
+
export declare const futureDateFilterOptions: DateFilterOption[];
|
|
4
|
+
export declare const pastDateFilterOptionsEn: DateFilterOption[];
|
|
5
|
+
export declare const futureDateFilterOptionsEn: DateFilterOption[];
|
|
6
|
+
//# sourceMappingURL=date-filter-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-filter-options.d.ts","sourceRoot":"","sources":["../../../src/filters/constants/date-filter-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,eAAO,MAAM,qBAAqB,EAAE,gBAAgB,EAKnD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,gBAAgB,EAKrD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,gBAAgB,EAKrD,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,gBAAgB,EAKvD,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export const pastDateFilterOptions = [
|
|
2
|
+
{
|
|
3
|
+
value: 'yesterday',
|
|
4
|
+
label: 'אתמול'
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
value: 'lastWeek',
|
|
8
|
+
label: 'שבוע שעבר'
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
value: 'lastMonth',
|
|
12
|
+
label: 'חודש שעבר'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
value: 'allPast',
|
|
16
|
+
label: 'בעבר'
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
export const futureDateFilterOptions = [
|
|
20
|
+
{
|
|
21
|
+
value: 'today',
|
|
22
|
+
label: 'היום'
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
value: 'nextWeek',
|
|
26
|
+
label: 'השבוע'
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
value: 'nextMonth',
|
|
30
|
+
label: 'החודש'
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
value: 'allFuture',
|
|
34
|
+
label: 'בעתיד'
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
export const pastDateFilterOptionsEn = [
|
|
38
|
+
{
|
|
39
|
+
value: 'yesterday',
|
|
40
|
+
label: 'Yesterday'
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
value: 'lastWeek',
|
|
44
|
+
label: 'Last Week'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
value: 'lastMonth',
|
|
48
|
+
label: 'Last Month'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
value: 'allPast',
|
|
52
|
+
label: 'All Past'
|
|
53
|
+
}
|
|
54
|
+
];
|
|
55
|
+
export const futureDateFilterOptionsEn = [
|
|
56
|
+
{
|
|
57
|
+
value: 'today',
|
|
58
|
+
label: 'Today'
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
value: 'nextWeek',
|
|
62
|
+
label: 'This Week'
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
value: 'nextMonth',
|
|
66
|
+
label: 'This Month'
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
value: 'allFuture',
|
|
70
|
+
label: 'All Future'
|
|
71
|
+
}
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=date-filter-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/constants/date-filter-options.ts"],"sourcesContent":["import { DateFilterOption } from '../types/filters-type';\n\nexport const pastDateFilterOptions: DateFilterOption[] = [\n { value: 'yesterday', label: 'אתמול' },\n { value: 'lastWeek', label: 'שבוע שעבר' },\n { value: 'lastMonth', label: 'חודש שעבר' },\n { value: 'allPast', label: 'בעבר' },\n];\n\nexport const futureDateFilterOptions: DateFilterOption[] = [\n { value: 'today', label: 'היום' },\n { value: 'nextWeek', label: 'השבוע' },\n { value: 'nextMonth', label: 'החודש' },\n { value: 'allFuture', label: 'בעתיד' },\n];\n\nexport const pastDateFilterOptionsEn: DateFilterOption[] = [\n { value: 'yesterday', label: 'Yesterday' },\n { value: 'lastWeek', label: 'Last Week' },\n { value: 'lastMonth', label: 'Last Month' },\n { value: 'allPast', label: 'All Past' },\n];\n\nexport const futureDateFilterOptionsEn: DateFilterOption[] = [\n { value: 'today', label: 'Today' },\n { value: 'nextWeek', label: 'This Week' },\n { value: 'nextMonth', label: 'This Month' },\n { value: 'allFuture', label: 'All Future' },\n];\n"],"names":["pastDateFilterOptions","value","label","futureDateFilterOptions","pastDateFilterOptionsEn","futureDateFilterOptionsEn"],"mappings":"AAEA,OAAO,MAAMA,wBAA4C;IACvD;QAAEC,OAAO;QAAaC,OAAO;IAAQ;IACrC;QAAED,OAAO;QAAYC,OAAO;IAAY;IACxC;QAAED,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAWC,OAAO;IAAO;CACnC,CAAC;AAEF,OAAO,MAAMC,0BAA8C;IACzD;QAAEF,OAAO;QAASC,OAAO;IAAO;IAChC;QAAED,OAAO;QAAYC,OAAO;IAAQ;IACpC;QAAED,OAAO;QAAaC,OAAO;IAAQ;IACrC;QAAED,OAAO;QAAaC,OAAO;IAAQ;CACtC,CAAC;AAEF,OAAO,MAAME,0BAA8C;IACzD;QAAEH,OAAO;QAAaC,OAAO;IAAY;IACzC;QAAED,OAAO;QAAYC,OAAO;IAAY;IACxC;QAAED,OAAO;QAAaC,OAAO;IAAa;IAC1C;QAAED,OAAO;QAAWC,OAAO;IAAW;CACvC,CAAC;AAEF,OAAO,MAAMG,4BAAgD;IAC3D;QAAEJ,OAAO;QAASC,OAAO;IAAQ;IACjC;QAAED,OAAO;QAAYC,OAAO;IAAY;IACxC;QAAED,OAAO;QAAaC,OAAO;IAAa;IAC1C;QAAED,OAAO;QAAaC,OAAO;IAAa;CAC3C,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export interface DateFilterOption {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
}
|
|
5
|
+
export interface DateRange {
|
|
6
|
+
from: Date | undefined;
|
|
7
|
+
to: Date | undefined;
|
|
8
|
+
}
|
|
9
|
+
export interface DateFilterValue {
|
|
10
|
+
type: 'predefined' | 'custom';
|
|
11
|
+
predefinedValue?: string;
|
|
12
|
+
customRange?: DateRange;
|
|
13
|
+
}
|
|
14
|
+
export interface SelectFilterOption {
|
|
15
|
+
value: string;
|
|
16
|
+
label: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SelectFilterValue {
|
|
19
|
+
type: 'all' | 'some' | 'none';
|
|
20
|
+
selectedValues: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface SmallSelectOption {
|
|
23
|
+
value: string;
|
|
24
|
+
label: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SmallSelectFilterValue {
|
|
27
|
+
selectedValues: string[];
|
|
28
|
+
}
|
|
29
|
+
export type CheckboxFilterState = 'checked' | 'unchecked' | 'indeterminate';
|
|
30
|
+
export interface Locale {
|
|
31
|
+
code: 'he' | 'en';
|
|
32
|
+
direction: 'rtl' | 'ltr';
|
|
33
|
+
}
|
|
34
|
+
export type FilterType = 'date' | 'select' | 'checkbox' | 'small-select';
|
|
35
|
+
export interface BaseFilterConfig {
|
|
36
|
+
id: string;
|
|
37
|
+
type: FilterType;
|
|
38
|
+
label: {
|
|
39
|
+
he: string;
|
|
40
|
+
en: string;
|
|
41
|
+
};
|
|
42
|
+
title: {
|
|
43
|
+
he: string;
|
|
44
|
+
en: string;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export interface DateFilterConfig extends BaseFilterConfig {
|
|
48
|
+
type: 'date';
|
|
49
|
+
placeholder?: {
|
|
50
|
+
he: string;
|
|
51
|
+
en: string;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export interface SelectFilterConfig extends BaseFilterConfig {
|
|
55
|
+
type: 'select';
|
|
56
|
+
options: {
|
|
57
|
+
he: SelectFilterOption[];
|
|
58
|
+
en: SelectFilterOption[];
|
|
59
|
+
};
|
|
60
|
+
placeholder?: {
|
|
61
|
+
he: string;
|
|
62
|
+
en: string;
|
|
63
|
+
};
|
|
64
|
+
multiSelect?: boolean;
|
|
65
|
+
showSearch?: boolean;
|
|
66
|
+
}
|
|
67
|
+
export interface CheckboxFilterConfig extends BaseFilterConfig {
|
|
68
|
+
type: 'checkbox';
|
|
69
|
+
checkboxLabel: {
|
|
70
|
+
he: string;
|
|
71
|
+
en: string;
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export interface SmallSelectFilterConfig extends BaseFilterConfig {
|
|
75
|
+
type: 'small-select';
|
|
76
|
+
options: {
|
|
77
|
+
he: SmallSelectOption[];
|
|
78
|
+
en: SmallSelectOption[];
|
|
79
|
+
};
|
|
80
|
+
multiSelect?: boolean;
|
|
81
|
+
maxOptions?: number;
|
|
82
|
+
}
|
|
83
|
+
export type FilterConfig = DateFilterConfig | SelectFilterConfig | CheckboxFilterConfig | SmallSelectFilterConfig;
|
|
84
|
+
export interface FilterState {
|
|
85
|
+
[filterId: string]: DateFilterValue | SelectFilterValue | CheckboxFilterState | SmallSelectFilterValue | undefined;
|
|
86
|
+
}
|
|
87
|
+
export type FilterDetaild = {
|
|
88
|
+
name: string;
|
|
89
|
+
label: string;
|
|
90
|
+
type: any;
|
|
91
|
+
options?: Array<any>;
|
|
92
|
+
row?: number | undefined;
|
|
93
|
+
width?: string;
|
|
94
|
+
};
|
|
95
|
+
export interface FilterRow {
|
|
96
|
+
rowNumber: number;
|
|
97
|
+
filters: FilterDetaild[];
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=filters-type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters-type.d.ts","sourceRoot":"","sources":["../../../src/filters/types/filters-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/types/filters-type.ts"],"sourcesContent":["export interface DateFilterOption {\n value: string\n label: string\n}\n\nexport interface DateRange {\n from: Date | undefined\n to: Date | undefined\n}\n\nexport interface DateFilterValue {\n type: 'predefined' | 'custom'\n predefinedValue?: string\n customRange?: DateRange\n}\n\nexport interface SelectFilterOption {\n value: string\n label: string\n}\n\nexport interface SelectFilterValue {\n type: 'all' | 'some' | 'none'\n selectedValues: string[]\n}\n\nexport interface SmallSelectOption {\n value: string\n label: string\n}\n\nexport interface SmallSelectFilterValue {\n selectedValues: string[]\n}\n\nexport type CheckboxFilterState = 'checked' | 'unchecked' | 'indeterminate'\n\nexport interface Locale {\n code: 'he' | 'en'\n direction: 'rtl' | 'ltr'\n}\n\n// New filter configuration types\nexport type FilterType = 'date' | 'select' | 'checkbox' | 'small-select'\n\nexport interface BaseFilterConfig {\n id: string\n type: FilterType\n label: {\n he: string\n en: string\n }\n title: {\n he: string\n en: string\n }\n}\n\nexport interface DateFilterConfig extends BaseFilterConfig {\n type: 'date'\n placeholder?: {\n he: string\n en: string\n }\n}\n\nexport interface SelectFilterConfig extends BaseFilterConfig {\n type: 'select'\n options: {\n he: SelectFilterOption[]\n en: SelectFilterOption[]\n }\n placeholder?: {\n he: string\n en: string\n }\n multiSelect?: boolean\n showSearch?: boolean\n}\n\nexport interface CheckboxFilterConfig extends BaseFilterConfig {\n type: 'checkbox'\n checkboxLabel: {\n he: string\n en: string\n }\n}\n\nexport interface SmallSelectFilterConfig extends BaseFilterConfig {\n type: 'small-select'\n options: {\n he: SmallSelectOption[]\n en: SmallSelectOption[]\n }\n multiSelect?: boolean\n maxOptions?: number\n}\n\nexport type FilterConfig =\n | DateFilterConfig\n | SelectFilterConfig\n | CheckboxFilterConfig\n | SmallSelectFilterConfig\n\nexport interface FilterState {\n [filterId: string]:\n | DateFilterValue\n | SelectFilterValue\n | CheckboxFilterState\n | SmallSelectFilterValue\n | undefined\n}\n\nexport type FilterDetaild = {\n name: string\n label: string\n type: any\n options?: Array<any> // Replace `any` with a more specific type if known\n row?: number | undefined\n width?: string\n}\n\nexport interface FilterRow {\n rowNumber: number\n filters: FilterDetaild[]\n}\n"],"names":[],"mappings":"AA0HA,WAGC"}
|