@shefing/quickfilter 1.0.11 → 1.0.13
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 +859 -0
- package/dist/FilterField.d.ts.map +1 -1
- package/dist/FilterField.js +18 -9
- package/dist/FilterField.js.map +1 -1
- package/dist/QuickFilter.d.ts.map +1 -1
- package/dist/QuickFilter.js +227 -55
- package/dist/QuickFilter.js.map +1 -1
- package/dist/filters/components/checkbox-filter.d.ts +2 -1
- package/dist/filters/components/checkbox-filter.d.ts.map +1 -1
- package/dist/filters/components/checkbox-filter.js +9 -7
- package/dist/filters/components/checkbox-filter.js.map +1 -1
- package/dist/filters/components/date-filter.d.ts +2 -1
- package/dist/filters/components/date-filter.d.ts.map +1 -1
- package/dist/filters/components/date-filter.js +26 -24
- package/dist/filters/components/date-filter.js.map +1 -1
- package/dist/filters/components/select-filter.d.ts +2 -1
- package/dist/filters/components/select-filter.d.ts.map +1 -1
- package/dist/filters/components/select-filter.js +20 -18
- package/dist/filters/components/select-filter.js.map +1 -1
- package/dist/filters/components/small-select-filter.d.ts +2 -1
- package/dist/filters/components/small-select-filter.d.ts.map +1 -1
- package/dist/filters/components/small-select-filter.js +4 -3
- package/dist/filters/components/small-select-filter.js.map +1 -1
- package/dist/filters/constants/date-filter-options.d.ts +7 -4
- package/dist/filters/constants/date-filter-options.d.ts.map +1 -1
- package/dist/filters/constants/date-filter-options.js +25 -70
- package/dist/filters/constants/date-filter-options.js.map +1 -1
- package/dist/filters/types/filters-type.d.ts.map +1 -1
- package/dist/filters/types/filters-type.js.map +1 -1
- package/dist/filters/utils/date-helpers.d.ts +4 -3
- package/dist/filters/utils/date-helpers.d.ts.map +1 -1
- package/dist/filters/utils/date-helpers.js +14 -11
- package/dist/filters/utils/date-helpers.js.map +1 -1
- package/dist/filters/utils/layout-helpers.d.ts.map +1 -1
- package/dist/filters/utils/layout-helpers.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/labels.d.ts +326 -0
- package/dist/labels.d.ts.map +1 -0
- package/dist/labels.js +192 -0
- package/dist/labels.js.map +1 -0
- package/package.json +1 -1
|
@@ -9,13 +9,14 @@ import { Button } from '../../ui/button';
|
|
|
9
9
|
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from '../../ui/command';
|
|
10
10
|
import { Checkbox } from '../../ui/checkbox';
|
|
11
11
|
import { Badge } from '../../ui/badge';
|
|
12
|
+
import { getLabel } from '../../labels';
|
|
12
13
|
export function SelectFilter({ label, options, value, onChange, placeholder, locale = {
|
|
13
14
|
code: 'he',
|
|
14
15
|
direction: 'rtl'
|
|
15
|
-
}, className, multiSelect = true }) {
|
|
16
|
+
}, className, multiSelect = true, style }) {
|
|
16
17
|
const [open, setOpen] = useState(false);
|
|
17
18
|
const [internalValue, setInternalValue] = useState(value);
|
|
18
|
-
const
|
|
19
|
+
const isRtl = locale?.direction === 'rtl';
|
|
19
20
|
const showSearch = options.length > 10;
|
|
20
21
|
const showSelectAll = multiSelect && options.length > 3;
|
|
21
22
|
// Sync internal state with external value prop
|
|
@@ -27,12 +28,12 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
|
|
|
27
28
|
const selectedValues = internalValue?.selectedValues || [];
|
|
28
29
|
const allSelected = selectedValues.length === options.length;
|
|
29
30
|
const labels = {
|
|
30
|
-
selectAll:
|
|
31
|
-
deselectAll:
|
|
32
|
-
search:
|
|
33
|
-
noResults:
|
|
34
|
-
selected:
|
|
35
|
-
selectedOne:
|
|
31
|
+
selectAll: getLabel('all', locale.code),
|
|
32
|
+
deselectAll: getLabel('all', locale.code),
|
|
33
|
+
search: getLabel('selectOption', locale.code),
|
|
34
|
+
noResults: getLabel('custom', locale.code),
|
|
35
|
+
selected: getLabel('selectOption', locale.code),
|
|
36
|
+
selectedOne: getLabel('selectOption', locale.code)
|
|
36
37
|
};
|
|
37
38
|
const getFilterValue = (values)=>{
|
|
38
39
|
if (values.length === 0) {
|
|
@@ -89,7 +90,7 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
|
|
|
89
90
|
};
|
|
90
91
|
const getDisplayText = ()=>{
|
|
91
92
|
if (selectedValues.length === 0) {
|
|
92
|
-
return placeholder || (
|
|
93
|
+
return placeholder || getLabel('selectOption', locale.code);
|
|
93
94
|
} else if (selectedValues.length === options.length) {
|
|
94
95
|
return labels.selectAll;
|
|
95
96
|
} else {
|
|
@@ -99,9 +100,10 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
|
|
|
99
100
|
return /*#__PURE__*/ _jsxs("div", {
|
|
100
101
|
className: cn('space-y-1', className),
|
|
101
102
|
dir: locale.direction,
|
|
103
|
+
style: style,
|
|
102
104
|
children: [
|
|
103
105
|
label && /*#__PURE__*/ _jsx(Label, {
|
|
104
|
-
className: cn('useTw text-sm font-medium',
|
|
106
|
+
className: cn('useTw text-sm font-medium', isRtl && 'text-right block'),
|
|
105
107
|
children: label
|
|
106
108
|
}),
|
|
107
109
|
/*#__PURE__*/ _jsxs("div", {
|
|
@@ -147,14 +149,14 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
|
|
|
147
149
|
showSelectAll && /*#__PURE__*/ _jsx(CommandItem, {
|
|
148
150
|
onSelect: handleToggleSelectAll,
|
|
149
151
|
children: /*#__PURE__*/ _jsxs("div", {
|
|
150
|
-
className: cn('useTw flex items-center w-full justify-between',
|
|
152
|
+
className: cn('useTw flex items-center w-full justify-between', isRtl && 'flex-row-reverse'),
|
|
151
153
|
children: [
|
|
152
154
|
/*#__PURE__*/ _jsx(Checkbox, {
|
|
153
155
|
checked: allSelected,
|
|
154
|
-
className: cn(
|
|
156
|
+
className: cn(isRtl ? 'useTw ml-2' : 'useTw mr-2')
|
|
155
157
|
}),
|
|
156
158
|
/*#__PURE__*/ _jsx("span", {
|
|
157
|
-
className: cn(
|
|
159
|
+
className: cn(isRtl && 'useTw text-right flex-1 mr-2'),
|
|
158
160
|
children: allSelected ? labels.deselectAll : labels.selectAll
|
|
159
161
|
})
|
|
160
162
|
]
|
|
@@ -163,16 +165,16 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
|
|
|
163
165
|
options.map((option)=>/*#__PURE__*/ _jsx(CommandItem, {
|
|
164
166
|
onSelect: ()=>handleToggleOption(option.value),
|
|
165
167
|
children: /*#__PURE__*/ _jsxs("div", {
|
|
166
|
-
className: cn('flex items-center w-full justify-between',
|
|
168
|
+
className: cn('flex items-center w-full justify-between', isRtl && 'flex-row-reverse'),
|
|
167
169
|
children: [
|
|
168
170
|
multiSelect ? /*#__PURE__*/ _jsx(Checkbox, {
|
|
169
171
|
checked: selectedValues.includes(option.value),
|
|
170
|
-
className: cn(
|
|
172
|
+
className: cn(isRtl ? 'useTw ml-2' : 'useTw mx-2')
|
|
171
173
|
}) : /*#__PURE__*/ _jsx(Check, {
|
|
172
|
-
className: cn('useTw h-4 w-4',
|
|
174
|
+
className: cn('useTw h-4 w-4', isRtl ? 'ml-2' : 'mr-2', selectedValues.includes(option.value) ? 'opacity-100' : 'opacity-0')
|
|
173
175
|
}),
|
|
174
176
|
/*#__PURE__*/ _jsx("span", {
|
|
175
|
-
className: cn(
|
|
177
|
+
className: cn(isRtl && 'text-right flex-1'),
|
|
176
178
|
children: option.label
|
|
177
179
|
})
|
|
178
180
|
]
|
|
@@ -188,7 +190,7 @@ export function SelectFilter({ label, options, value, onChange, placeholder, loc
|
|
|
188
190
|
]
|
|
189
191
|
}),
|
|
190
192
|
selectedValues.length > 0 && /*#__PURE__*/ _jsx("button", {
|
|
191
|
-
className: `useTw absolute ${
|
|
193
|
+
className: `useTw absolute ${isRtl ? '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 `,
|
|
192
194
|
onClick: (e)=>{
|
|
193
195
|
e.stopPropagation();
|
|
194
196
|
handleClearAll();
|
|
@@ -1 +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';\nimport { Locale, SelectFilterOption, SelectFilterValue } from '../types/filters-type';\nimport { Label } from '../../ui/label';\nimport { cn } from '../../lib/utils';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';\nimport { Button } from '../../ui/button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '../../ui/command';\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 selectedOne: 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} ${selectedValues.length > 1 ? labels.selected : labels.selectedOne} `;\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='useTw 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","Label","cn","Popover","PopoverContent","PopoverTrigger","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","selectedOne","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":"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"}
|
|
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';\nimport { Locale, SelectFilterOption, SelectFilterValue } from '../types/filters-type';\nimport { Label } from '../../ui/label';\nimport { cn } from '../../lib/utils';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../ui/popover';\nimport { Button } from '../../ui/button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '../../ui/command';\nimport { Checkbox } from '../../ui/checkbox';\nimport { Badge } from '../../ui/badge';\nimport { SupportedLocale, getLabel } from '../../labels';\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 style?: React.CSSProperties;\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 style,\n}: SelectFilterProps) {\n const [open, setOpen] = useState(false);\n const [internalValue, setInternalValue] = useState<SelectFilterValue | undefined>(value);\n\n const isRtl = locale?.direction === 'rtl';\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: getLabel('all', locale.code),\n deselectAll: getLabel('all', locale.code),\n search: getLabel('selectOption', locale.code),\n noResults: getLabel('custom', locale.code),\n selected: getLabel('selectOption', locale.code),\n selectedOne: getLabel('selectOption', locale.code),\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 || getLabel('selectOption', locale.code);\n } else if (selectedValues.length === options.length) {\n return labels.selectAll;\n } else {\n return `${selectedValues.length} ${selectedValues.length > 1 ? labels.selected : labels.selectedOne} `;\n }\n };\n\n return (\n <div className={cn('space-y-1', className)} dir={locale.direction} style={style}>\n {label && (\n <Label className={cn('useTw text-sm font-medium', isRtl && '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='useTw 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 isRtl && 'flex-row-reverse',\n )}\n >\n <Checkbox\n checked={allSelected}\n className={cn(isRtl ? 'useTw ml-2' : 'useTw mr-2')}\n />\n <span className={cn(isRtl && '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 isRtl && 'flex-row-reverse',\n )}\n >\n {multiSelect ? (\n <Checkbox\n checked={selectedValues.includes(option.value)}\n className={cn(isRtl ? 'useTw ml-2' : 'useTw mx-2')}\n />\n ) : (\n <Check\n className={cn(\n 'useTw h-4 w-4',\n isRtl ? 'ml-2' : 'mr-2',\n selectedValues.includes(option.value) ? 'opacity-100' : 'opacity-0',\n )}\n />\n )}\n <span className={cn(isRtl && '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 ${isRtl ? '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","Label","cn","Popover","PopoverContent","PopoverTrigger","Button","Command","CommandEmpty","CommandGroup","CommandInput","CommandItem","CommandList","Checkbox","Badge","getLabel","SelectFilter","label","options","value","onChange","placeholder","locale","code","direction","className","multiSelect","style","open","setOpen","internalValue","setInternalValue","isRtl","showSearch","length","showSelectAll","selectedValues","allSelected","labels","selectAll","deselectAll","search","noResults","selected","selectedOne","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":"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"}
|
|
@@ -12,7 +12,8 @@ interface SmallSelectFilterProps {
|
|
|
12
12
|
className?: string;
|
|
13
13
|
multiSelect?: boolean;
|
|
14
14
|
maxOptions?: number;
|
|
15
|
+
style?: React.CSSProperties;
|
|
15
16
|
}
|
|
16
|
-
export declare function SmallSelectFilter({ label, options, value, onChange, locale, className, multiSelect, maxOptions, }: SmallSelectFilterProps): import("react").JSX.Element;
|
|
17
|
+
export declare function SmallSelectFilter({ label, options, value, onChange, locale, className, multiSelect, maxOptions, style, }: SmallSelectFilterProps): import("react").JSX.Element;
|
|
17
18
|
export {};
|
|
18
19
|
//# sourceMappingURL=small-select-filter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"small-select-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/small-select-filter.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"small-select-filter.d.ts","sourceRoot":"","sources":["../../../src/filters/components/small-select-filter.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAMlE,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;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAyC,EACzC,SAAS,EACT,WAAkB,EAClB,UAAc,EACd,KAAK,GACN,EAAE,sBAAsB,+BA4HxB"}
|
|
@@ -8,12 +8,12 @@ import { Button } from '../../ui/button';
|
|
|
8
8
|
export function SmallSelectFilter({ label, options, value, onChange, locale = {
|
|
9
9
|
code: 'he',
|
|
10
10
|
direction: 'rtl'
|
|
11
|
-
}, className, multiSelect = true, maxOptions = 3 }) {
|
|
11
|
+
}, className, multiSelect = true, maxOptions = 3, style }) {
|
|
12
12
|
const [internalValue, setInternalValue] = useState(value || {
|
|
13
13
|
type: 'none',
|
|
14
14
|
selectedValues: []
|
|
15
15
|
});
|
|
16
|
-
const
|
|
16
|
+
const isRtl = locale?.direction === 'rtl';
|
|
17
17
|
// Limit options to maxOptions
|
|
18
18
|
const limitedOptions = options.slice(0, maxOptions);
|
|
19
19
|
// Sync internal state with external value prop
|
|
@@ -81,9 +81,10 @@ export function SmallSelectFilter({ label, options, value, onChange, locale = {
|
|
|
81
81
|
return /*#__PURE__*/ _jsxs("div", {
|
|
82
82
|
className: cn('space-y-2', className),
|
|
83
83
|
dir: locale.direction,
|
|
84
|
+
style: style,
|
|
84
85
|
children: [
|
|
85
86
|
label && /*#__PURE__*/ _jsx(Label, {
|
|
86
|
-
className: cn('useTw text-sm font-medium',
|
|
87
|
+
className: cn('useTw text-sm font-medium', isRtl && 'text-right block'),
|
|
87
88
|
children: label
|
|
88
89
|
}),
|
|
89
90
|
/*#__PURE__*/ _jsxs("div", {
|
|
@@ -1 +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';\nimport { Locale, SelectFilterValue } from '../types/filters-type';\nimport { Label } from '../../ui/label';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../ui/button';\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
|
|
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';\nimport { Locale, SelectFilterValue } from '../types/filters-type';\nimport { Label } from '../../ui/label';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../../ui/button';\nimport { SupportedLocale } from '../../labels';\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 style?: React.CSSProperties;\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 style,\n}: SmallSelectFilterProps) {\n const [internalValue, setInternalValue] = useState<SelectFilterValue>(\n value || { type: 'none', selectedValues: [] },\n );\n\n const isRtl = locale?.direction === 'rtl';\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} style={style}>\n {label && (\n <Label className={cn('useTw text-sm font-medium', isRtl && '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","Label","cn","Button","SmallSelectFilter","label","options","value","onChange","locale","code","direction","className","multiSelect","maxOptions","style","internalValue","setInternalValue","type","selectedValues","isRtl","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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"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import type { SupportedLocale } from '../../labels';
|
|
1
2
|
import { DateFilterOption } from '../types/filters-type';
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
5
|
-
|
|
3
|
+
export declare const pastOptionKeys: readonly ["yesterday", "lastWeek", "lastMonth", "allPast"];
|
|
4
|
+
export declare const futureOptionKeys: readonly ["today", "nextWeek", "nextMonth", "allFuture"];
|
|
5
|
+
export declare const getDateFilterOptions: (locale: SupportedLocale | string) => {
|
|
6
|
+
pastOptions: DateFilterOption[];
|
|
7
|
+
futureOptions: DateFilterOption[];
|
|
8
|
+
};
|
|
6
9
|
//# sourceMappingURL=date-filter-options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-filter-options.d.ts","sourceRoot":"","sources":["../../../src/filters/constants/date-filter-options.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"date-filter-options.d.ts","sourceRoot":"","sources":["../../../src/filters/constants/date-filter-options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,eAAO,MAAM,cAAc,4DAA6D,CAAC;AACzF,eAAO,MAAM,gBAAgB,0DAA2D,CAAC;AAazF,eAAO,MAAM,oBAAoB,WAAY,eAAe,GAAG,MAAM;;;CAKpE,CAAC"}
|
|
@@ -1,74 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
label: 'שבוע שעבר'
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
value: 'lastMonth',
|
|
12
|
-
label: 'חודש שעבר'
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
value: 'allPast',
|
|
16
|
-
label: 'בעבר'
|
|
17
|
-
}
|
|
1
|
+
import { getLabel } from '../../labels';
|
|
2
|
+
// Define the option keys for past and future date filters
|
|
3
|
+
export const pastOptionKeys = [
|
|
4
|
+
'yesterday',
|
|
5
|
+
'lastWeek',
|
|
6
|
+
'lastMonth',
|
|
7
|
+
'allPast'
|
|
18
8
|
];
|
|
19
|
-
export const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
}
|
|
9
|
+
export const futureOptionKeys = [
|
|
10
|
+
'today',
|
|
11
|
+
'nextWeek',
|
|
12
|
+
'nextMonth',
|
|
13
|
+
'allFuture'
|
|
72
14
|
];
|
|
15
|
+
// Create date filter options dynamically based on locale
|
|
16
|
+
const createDateFilterOptions = (keys, locale)=>{
|
|
17
|
+
return keys.map((key)=>({
|
|
18
|
+
value: key,
|
|
19
|
+
label: getLabel(key, locale)
|
|
20
|
+
}));
|
|
21
|
+
};
|
|
22
|
+
export const getDateFilterOptions = (locale)=>{
|
|
23
|
+
return {
|
|
24
|
+
pastOptions: createDateFilterOptions(pastOptionKeys, locale),
|
|
25
|
+
futureOptions: createDateFilterOptions(futureOptionKeys, locale)
|
|
26
|
+
};
|
|
27
|
+
};
|
|
73
28
|
|
|
74
29
|
//# sourceMappingURL=date-filter-options.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/filters/constants/date-filter-options.ts"],"sourcesContent":["import { DateFilterOption } from '../types/filters-type';\n\
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/constants/date-filter-options.ts"],"sourcesContent":["import { getLabel } from '../../labels';\nimport type { SupportedLocale } from '../../labels';\nimport { DateFilterOption } from '../types/filters-type';\n\n// Define the option keys for past and future date filters\nexport const pastOptionKeys = ['yesterday', 'lastWeek', 'lastMonth', 'allPast'] as const;\nexport const futureOptionKeys = ['today', 'nextWeek', 'nextMonth', 'allFuture'] as const;\n\n// Create date filter options dynamically based on locale\nconst createDateFilterOptions = (\n keys: readonly string[],\n locale: SupportedLocale | string,\n): DateFilterOption[] => {\n return keys.map((key) => ({\n value: key,\n label: getLabel(key as any, locale as SupportedLocale),\n }));\n};\n\nexport const getDateFilterOptions = (locale: SupportedLocale | string) => {\n return {\n pastOptions: createDateFilterOptions(pastOptionKeys, locale),\n futureOptions: createDateFilterOptions(futureOptionKeys, locale),\n };\n};\n"],"names":["getLabel","pastOptionKeys","futureOptionKeys","createDateFilterOptions","keys","locale","map","key","value","label","getDateFilterOptions","pastOptions","futureOptions"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,eAAe;AAIxC,0DAA0D;AAC1D,OAAO,MAAMC,iBAAiB;IAAC;IAAa;IAAY;IAAa;CAAU,CAAU;AACzF,OAAO,MAAMC,mBAAmB;IAAC;IAAS;IAAY;IAAa;CAAY,CAAU;AAEzF,yDAAyD;AACzD,MAAMC,0BAA0B,CAC9BC,MACAC;IAEA,OAAOD,KAAKE,GAAG,CAAC,CAACC,MAAS,CAAA;YACxBC,OAAOD;YACPE,OAAOT,SAASO,KAAYF;QAC9B,CAAA;AACF;AAEA,OAAO,MAAMK,uBAAuB,CAACL;IACnC,OAAO;QACLM,aAAaR,wBAAwBF,gBAAgBI;QACrDO,eAAeT,wBAAwBD,kBAAkBG;IAC3D;AACF,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters-type.d.ts","sourceRoot":"","sources":["../../../src/filters/types/filters-type.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"filters-type.d.ts","sourceRoot":"","sources":["../../../src/filters/types/filters-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/filters/types/filters-type.ts"],"sourcesContent":["export interface DateFilterOption {\n value: string
|
|
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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SupportedLocale } from '../../labels';
|
|
1
2
|
export declare function addDays(date: Date, days: number): Date;
|
|
2
3
|
export declare function subDays(date: Date, days: number): Date;
|
|
3
4
|
export declare function addWeeks(date: Date, weeks: number): Date;
|
|
@@ -15,9 +16,9 @@ export declare function endOfWeek(date: Date, options?: {
|
|
|
15
16
|
export declare function startOfMonth(date: Date): Date;
|
|
16
17
|
export declare function endOfMonth(date: Date): Date;
|
|
17
18
|
export declare function formatDate(date: Date, formatStr: string): string;
|
|
18
|
-
export declare function getDateRangeForOption(option: string, locale?:
|
|
19
|
-
from: Date;
|
|
20
|
-
to: Date;
|
|
19
|
+
export declare function getDateRangeForOption(option: string, locale?: SupportedLocale): {
|
|
20
|
+
from: Date | undefined;
|
|
21
|
+
to: Date | undefined;
|
|
21
22
|
description: string;
|
|
22
23
|
};
|
|
23
24
|
//# sourceMappingURL=date-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-helpers.d.ts","sourceRoot":"","sources":["../../../src/filters/utils/date-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"date-helpers.d.ts","sourceRoot":"","sources":["../../../src/filters/utils/date-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAY,MAAM,cAAc,CAAC;AAEzD,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAItD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAExD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAI1D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAI3C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAIzC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,IAAI,CAOrF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,IAAI,CAKnF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAI7C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAI3C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAqBhE;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,eAAsB,GAC7B;IAAE,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IAAC,EAAE,EAAE,IAAI,GAAG,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CA8EvE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// Custom date utilities to replace date-fns
|
|
2
|
+
import { getLabel } from '../../labels';
|
|
2
3
|
export function addDays(date, days) {
|
|
3
4
|
const result = new Date(date);
|
|
4
5
|
result.setDate(result.getDate() + days);
|
|
@@ -80,7 +81,6 @@ export function formatDate(date, formatStr) {
|
|
|
80
81
|
}
|
|
81
82
|
export function getDateRangeForOption(option, locale = 'he') {
|
|
82
83
|
const now = new Date();
|
|
83
|
-
const isHebrew = locale === 'he';
|
|
84
84
|
switch(option){
|
|
85
85
|
case 'yesterday':
|
|
86
86
|
const yesterday = subDays(now, 1);
|
|
@@ -110,11 +110,14 @@ export function getDateRangeForOption(option, locale = 'he') {
|
|
|
110
110
|
description: `(${formatDate(lastMonthStart, 'MM/yyyy')})`
|
|
111
111
|
};
|
|
112
112
|
case 'allPast':
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
113
|
+
{
|
|
114
|
+
const yesterday = subDays(now, 1);
|
|
115
|
+
return {
|
|
116
|
+
from: undefined,
|
|
117
|
+
to: endOfDay(yesterday),
|
|
118
|
+
description: `(${getLabel('allPast', locale)})`
|
|
119
|
+
};
|
|
120
|
+
}
|
|
118
121
|
case 'today':
|
|
119
122
|
return {
|
|
120
123
|
from: startOfDay(now),
|
|
@@ -143,14 +146,14 @@ export function getDateRangeForOption(option, locale = 'he') {
|
|
|
143
146
|
};
|
|
144
147
|
case 'allFuture':
|
|
145
148
|
return {
|
|
146
|
-
from: now,
|
|
147
|
-
to:
|
|
148
|
-
description:
|
|
149
|
+
from: startOfDay(now),
|
|
150
|
+
to: undefined,
|
|
151
|
+
description: `(${getLabel('allFuture', locale)})`
|
|
149
152
|
};
|
|
150
153
|
default:
|
|
151
154
|
return {
|
|
152
|
-
from: now,
|
|
153
|
-
to: now,
|
|
155
|
+
from: startOfDay(now),
|
|
156
|
+
to: endOfDay(now),
|
|
154
157
|
description: ''
|
|
155
158
|
};
|
|
156
159
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/filters/utils/date-helpers.ts"],"sourcesContent":["// Custom date utilities to replace date-fns\nexport function addDays(date: Date, days: number): Date {\n const result = new Date(date)
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/utils/date-helpers.ts"],"sourcesContent":["// Custom date utilities to replace date-fns\n\nimport { SupportedLocale, getLabel } from '../../labels';\n\nexport function addDays(date: Date, days: number): Date {\n const result = new Date(date);\n result.setDate(result.getDate() + days);\n return result;\n}\n\nexport function subDays(date: Date, days: number): Date {\n return addDays(date, -days);\n}\n\nexport function addWeeks(date: Date, weeks: number): Date {\n return addDays(date, weeks * 7);\n}\n\nexport function subWeeks(date: Date, weeks: number): Date {\n return addWeeks(date, -weeks);\n}\n\nexport function addMonths(date: Date, months: number): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + months);\n return result;\n}\n\nexport function subMonths(date: Date, months: number): Date {\n return addMonths(date, -months);\n}\n\nexport function startOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(0, 0, 0, 0);\n return result;\n}\n\nexport function endOfDay(date: Date): Date {\n const result = new Date(date);\n result.setHours(23, 59, 59, 999);\n return result;\n}\n\nexport function startOfWeek(date: Date, options: { weekStartsOn?: number } = {}): Date {\n const { weekStartsOn = 0 } = options;\n const result = new Date(date);\n const day = result.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n result.setDate(result.getDate() - diff);\n return startOfDay(result);\n}\n\nexport function endOfWeek(date: Date, options: { weekStartsOn?: number } = {}): Date {\n const { weekStartsOn = 0 } = options;\n const result = startOfWeek(date, { weekStartsOn });\n result.setDate(result.getDate() + 6);\n return endOfDay(result);\n}\n\nexport function startOfMonth(date: Date): Date {\n const result = new Date(date);\n result.setDate(1);\n return startOfDay(result);\n}\n\nexport function endOfMonth(date: Date): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + 1, 0);\n return endOfDay(result);\n}\n\nexport function formatDate(date: Date, formatStr: string): string {\n const day = date.getDate().toString().padStart(2, '0');\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const year = date.getFullYear().toString();\n\n switch (formatStr) {\n case 'dd/MM/yyyy':\n return `${day}/${month}/${year}`;\n case 'dd/MM':\n return `${day}/${month}`;\n case 'MM/yyyy':\n return `${month}/${year}`;\n case 'PPP':\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n });\n default:\n return date.toLocaleDateString();\n }\n}\n\nexport function getDateRangeForOption(\n option: string,\n locale: SupportedLocale = 'he',\n): { from: Date | undefined; to: Date | undefined; description: string } {\n const now = new Date();\n\n switch (option) {\n case 'yesterday':\n const yesterday = subDays(now, 1);\n return {\n from: startOfDay(yesterday),\n to: endOfDay(yesterday),\n description: `(${formatDate(yesterday, 'dd/MM/yyyy')})`,\n };\n\n case 'lastWeek':\n const lastWeekStart = startOfWeek(subWeeks(now, 1), { weekStartsOn: 0 });\n const lastWeekEnd = endOfWeek(subWeeks(now, 1), { weekStartsOn: 0 });\n return {\n from: lastWeekStart,\n to: lastWeekEnd,\n description: `(${formatDate(lastWeekStart, 'dd/MM')} - ${formatDate(lastWeekEnd, 'dd/MM/yyyy')})`,\n };\n\n case 'lastMonth':\n const lastMonthStart = startOfMonth(subMonths(now, 1));\n const lastMonthEnd = endOfMonth(subMonths(now, 1));\n return {\n from: lastMonthStart,\n to: lastMonthEnd,\n description: `(${formatDate(lastMonthStart, 'MM/yyyy')})`,\n };\n\n case 'allPast': {\n const yesterday = subDays(now, 1);\n return {\n from: undefined,\n to: endOfDay(yesterday),\n description: `(${getLabel('allPast', locale)})`,\n };\n }\n\n case 'today':\n return {\n from: startOfDay(now),\n to: endOfDay(now),\n description: `(${formatDate(now, 'dd/MM/yyyy')})`,\n };\n\n case 'nextWeek':\n const thisWeekStart = startOfWeek(now, { weekStartsOn: 0 });\n const thisWeekEnd = endOfWeek(now, { weekStartsOn: 0 });\n return {\n from: thisWeekStart,\n to: thisWeekEnd,\n description: `(${formatDate(thisWeekStart, 'dd/MM')} - ${formatDate(thisWeekEnd, 'dd/MM/yyyy')})`,\n };\n\n case 'nextMonth':\n const thisMonthStart = startOfMonth(now);\n const thisMonthEnd = endOfMonth(now);\n return {\n from: thisMonthStart,\n to: thisMonthEnd,\n description: `(${formatDate(thisMonthStart, 'MM/yyyy')})`,\n };\n\n case 'allFuture':\n return {\n from: startOfDay(now),\n to: undefined,\n description: `(${getLabel('allFuture', locale)})`,\n };\n\n default:\n return {\n from: startOfDay(now),\n to: endOfDay(now),\n description: '',\n };\n }\n}\n"],"names":["getLabel","addDays","date","days","result","Date","setDate","getDate","subDays","addWeeks","weeks","subWeeks","addMonths","months","setMonth","getMonth","subMonths","startOfDay","setHours","endOfDay","startOfWeek","options","weekStartsOn","day","getDay","diff","endOfWeek","startOfMonth","endOfMonth","formatDate","formatStr","toString","padStart","month","year","getFullYear","toLocaleDateString","getDateRangeForOption","option","locale","now","yesterday","from","to","description","lastWeekStart","lastWeekEnd","lastMonthStart","lastMonthEnd","undefined","thisWeekStart","thisWeekEnd","thisMonthStart","thisMonthEnd"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-helpers.d.ts","sourceRoot":"","sources":["../../../src/filters/utils/layout-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"layout-helpers.d.ts","sourceRoot":"","sources":["../../../src/filters/utils/layout-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEjE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAuBvE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB1D;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAiBhE;AAED,eAAO,MAAM,YAAY,QAAS,OAAO,KAAG,MAAM,EA4BjD,CAAC"}
|