@clicoh/orion-library 1.1.0 → 1.2.0-beta.10
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/assets/css/base.css +24 -1
- package/dist/components/01-atoms/Badge/Badge.d.ts +13 -3
- package/dist/components/01-atoms/Badge/Badge.d.ts.map +1 -1
- package/dist/components/01-atoms/Badge/Badge.jsx +21 -4
- package/dist/components/01-atoms/Badge/Badge.jsx.map +1 -1
- package/dist/components/01-atoms/Button/Button.d.ts +7 -1
- package/dist/components/01-atoms/Button/Button.d.ts.map +1 -1
- package/dist/components/01-atoms/Button/Button.jsx +46 -4
- package/dist/components/01-atoms/Button/Button.jsx.map +1 -1
- package/dist/components/01-atoms/IconButton/IconButton.d.ts +28 -0
- package/dist/components/01-atoms/IconButton/IconButton.d.ts.map +1 -0
- package/dist/components/01-atoms/IconButton/IconButton.jsx +32 -0
- package/dist/components/01-atoms/IconButton/IconButton.jsx.map +1 -0
- package/dist/components/01-atoms/IconButton/index.d.ts +2 -0
- package/dist/components/01-atoms/IconButton/index.d.ts.map +1 -0
- package/dist/components/01-atoms/IconButton/index.js +2 -0
- package/dist/components/01-atoms/IconButton/index.js.map +1 -0
- package/dist/components/01-atoms/Input/Input.d.ts +5 -1
- package/dist/components/01-atoms/Input/Input.d.ts.map +1 -1
- package/dist/components/01-atoms/Input/Input.jsx +12 -6
- package/dist/components/01-atoms/Input/Input.jsx.map +1 -1
- package/dist/components/01-atoms/Input/utils/border.d.ts +3 -1
- package/dist/components/01-atoms/Input/utils/border.d.ts.map +1 -1
- package/dist/components/01-atoms/Input/utils/border.js +3 -3
- package/dist/components/01-atoms/Input/utils/border.js.map +1 -1
- package/dist/components/01-atoms/MultiSelect/MultiSelect.jsx +2 -2
- package/dist/components/01-atoms/MultiSelect/MultiSelect.jsx.map +1 -1
- package/dist/components/01-atoms/ProgressBar/ProgressBar.d.ts +42 -0
- package/dist/components/01-atoms/ProgressBar/ProgressBar.d.ts.map +1 -0
- package/dist/components/01-atoms/ProgressBar/ProgressBar.jsx +52 -0
- package/dist/components/01-atoms/ProgressBar/ProgressBar.jsx.map +1 -0
- package/dist/components/01-atoms/ProgressBar/index.d.ts +2 -0
- package/dist/components/01-atoms/ProgressBar/index.d.ts.map +1 -0
- package/dist/components/01-atoms/ProgressBar/index.js +2 -0
- package/dist/components/01-atoms/ProgressBar/index.js.map +1 -0
- package/dist/components/01-atoms/Radio/Radio.d.ts +19 -2
- package/dist/components/01-atoms/Radio/Radio.d.ts.map +1 -1
- package/dist/components/01-atoms/Radio/Radio.jsx +51 -6
- package/dist/components/01-atoms/Radio/Radio.jsx.map +1 -1
- package/dist/components/01-atoms/Select/Select.d.ts +3 -1
- package/dist/components/01-atoms/Select/Select.d.ts.map +1 -1
- package/dist/components/01-atoms/Select/Select.jsx +8 -4
- package/dist/components/01-atoms/Select/Select.jsx.map +1 -1
- package/dist/components/01-atoms/Skeleton/Skeleton.d.ts +32 -0
- package/dist/components/01-atoms/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/components/01-atoms/Skeleton/Skeleton.jsx +34 -0
- package/dist/components/01-atoms/Skeleton/Skeleton.jsx.map +1 -0
- package/dist/components/01-atoms/Skeleton/index.d.ts +2 -0
- package/dist/components/01-atoms/Skeleton/index.d.ts.map +1 -0
- package/dist/components/01-atoms/Skeleton/index.js +2 -0
- package/dist/components/01-atoms/Skeleton/index.js.map +1 -0
- package/dist/components/01-atoms/SmallInput/SmallInput.jsx +1 -1
- package/dist/components/01-atoms/SmallInput/SmallInput.jsx.map +1 -1
- package/dist/components/01-atoms/Switch/Switch.d.ts +5 -2
- package/dist/components/01-atoms/Switch/Switch.d.ts.map +1 -1
- package/dist/components/01-atoms/Switch/Switch.jsx +15 -12
- package/dist/components/01-atoms/Switch/Switch.jsx.map +1 -1
- package/dist/components/01-atoms/Textarea/Textarea.d.ts +38 -0
- package/dist/components/01-atoms/Textarea/Textarea.d.ts.map +1 -0
- package/dist/components/01-atoms/Textarea/Textarea.jsx +50 -0
- package/dist/components/01-atoms/Textarea/Textarea.jsx.map +1 -0
- package/dist/components/01-atoms/Textarea/index.d.ts +2 -0
- package/dist/components/01-atoms/Textarea/index.d.ts.map +1 -0
- package/dist/components/01-atoms/Textarea/index.js +2 -0
- package/dist/components/01-atoms/Textarea/index.js.map +1 -0
- package/dist/components/01-atoms/Toast/Toast.d.ts.map +1 -1
- package/dist/components/01-atoms/Toast/Toast.jsx +3 -1
- package/dist/components/01-atoms/Toast/Toast.jsx.map +1 -1
- package/dist/components/01-atoms/index.d.ts +4 -0
- package/dist/components/01-atoms/index.d.ts.map +1 -1
- package/dist/components/01-atoms/index.js +4 -0
- package/dist/components/01-atoms/index.js.map +1 -1
- package/dist/components/02-molecules/Accordion/Accordion.d.ts +15 -4
- package/dist/components/02-molecules/Accordion/Accordion.d.ts.map +1 -1
- package/dist/components/02-molecules/Accordion/Accordion.jsx +20 -6
- package/dist/components/02-molecules/Accordion/Accordion.jsx.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionContext.d.ts +5 -1
- package/dist/components/02-molecules/Accordion/AccordionContext.d.ts.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionContext.jsx +4 -3
- package/dist/components/02-molecules/Accordion/AccordionContext.jsx.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.d.ts +2 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.d.ts.map +1 -1
- package/dist/components/02-molecules/Accordion/AccordionSection.jsx +35 -8
- package/dist/components/02-molecules/Accordion/AccordionSection.jsx.map +1 -1
- package/dist/components/02-molecules/Accordion/index.d.ts +1 -0
- package/dist/components/02-molecules/Accordion/index.d.ts.map +1 -1
- package/dist/components/02-molecules/Accordion/index.js.map +1 -1
- package/dist/components/02-molecules/Autocomplete/Autocomplete.d.ts +10 -1
- package/dist/components/02-molecules/Autocomplete/Autocomplete.d.ts.map +1 -1
- package/dist/components/02-molecules/Autocomplete/Autocomplete.jsx +29 -10
- package/dist/components/02-molecules/Autocomplete/Autocomplete.jsx.map +1 -1
- package/dist/components/02-molecules/DatePicker/DatePicker.d.ts +79 -0
- package/dist/components/02-molecules/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/components/02-molecules/DatePicker/DatePicker.jsx +229 -0
- package/dist/components/02-molecules/DatePicker/DatePicker.jsx.map +1 -0
- package/dist/components/02-molecules/DatePicker/index.d.ts +2 -0
- package/dist/components/02-molecules/DatePicker/index.d.ts.map +1 -0
- package/dist/components/02-molecules/DatePicker/index.js +2 -0
- package/dist/components/02-molecules/DatePicker/index.js.map +1 -0
- package/dist/components/02-molecules/Filter/Filter.d.ts +1 -0
- package/dist/components/02-molecules/Filter/Filter.d.ts.map +1 -1
- package/dist/components/02-molecules/Filter/Filter.jsx +25 -4
- package/dist/components/02-molecules/Filter/Filter.jsx.map +1 -1
- package/dist/components/02-molecules/Filter/index.d.ts +1 -0
- package/dist/components/02-molecules/Filter/index.d.ts.map +1 -1
- package/dist/components/02-molecules/Filter/index.js +1 -0
- package/dist/components/02-molecules/Filter/index.js.map +1 -1
- package/dist/components/02-molecules/Filter/types.d.ts +24 -5
- package/dist/components/02-molecules/Filter/types.d.ts.map +1 -1
- package/dist/components/02-molecules/Filter/utils/pruneOrphanValues.d.ts +34 -0
- package/dist/components/02-molecules/Filter/utils/pruneOrphanValues.d.ts.map +1 -0
- package/dist/components/02-molecules/Filter/utils/pruneOrphanValues.js +70 -0
- package/dist/components/02-molecules/Filter/utils/pruneOrphanValues.js.map +1 -0
- package/dist/components/02-molecules/ImageViewer/ImageViewer.d.ts +55 -5
- package/dist/components/02-molecules/ImageViewer/ImageViewer.d.ts.map +1 -1
- package/dist/components/02-molecules/ImageViewer/ImageViewer.jsx +118 -27
- package/dist/components/02-molecules/ImageViewer/ImageViewer.jsx.map +1 -1
- package/dist/components/02-molecules/ImageViewer/ImageViewerImage.d.ts +40 -0
- package/dist/components/02-molecules/ImageViewer/ImageViewerImage.d.ts.map +1 -0
- package/dist/components/02-molecules/ImageViewer/ImageViewerImage.jsx +108 -0
- package/dist/components/02-molecules/ImageViewer/ImageViewerImage.jsx.map +1 -0
- package/dist/components/02-molecules/InlineMessage/InlineMessage.d.ts +37 -0
- package/dist/components/02-molecules/InlineMessage/InlineMessage.d.ts.map +1 -0
- package/dist/components/02-molecules/InlineMessage/InlineMessage.jsx +59 -0
- package/dist/components/02-molecules/InlineMessage/InlineMessage.jsx.map +1 -0
- package/dist/components/02-molecules/InlineMessage/index.d.ts +2 -0
- package/dist/components/02-molecules/InlineMessage/index.d.ts.map +1 -0
- package/dist/components/02-molecules/InlineMessage/index.js +2 -0
- package/dist/components/02-molecules/InlineMessage/index.js.map +1 -0
- package/dist/components/02-molecules/Modal/Modal.d.ts +5 -1
- package/dist/components/02-molecules/Modal/Modal.d.ts.map +1 -1
- package/dist/components/02-molecules/Modal/Modal.jsx +7 -5
- package/dist/components/02-molecules/Modal/Modal.jsx.map +1 -1
- package/dist/components/02-molecules/index.d.ts +3 -0
- package/dist/components/02-molecules/index.d.ts.map +1 -1
- package/dist/components/02-molecules/index.js +3 -0
- package/dist/components/02-molecules/index.js.map +1 -1
- package/dist/components/03-organisms/MapView/MapView.d.ts +73 -0
- package/dist/components/03-organisms/MapView/MapView.d.ts.map +1 -0
- package/dist/components/03-organisms/MapView/MapView.jsx +228 -0
- package/dist/components/03-organisms/MapView/MapView.jsx.map +1 -0
- package/dist/components/03-organisms/MapView/index.d.ts +2 -0
- package/dist/components/03-organisms/MapView/index.d.ts.map +1 -0
- package/dist/components/03-organisms/MapView/index.js +2 -0
- package/dist/components/03-organisms/MapView/index.js.map +1 -0
- package/dist/components/03-organisms/index.d.ts +1 -0
- package/dist/components/03-organisms/index.d.ts.map +1 -1
- package/dist/components/03-organisms/index.js +1 -0
- package/dist/components/03-organisms/index.js.map +1 -1
- package/dist/components/04-templates/DashboardTemplate/DashboardTemplate.jsx +2 -2
- package/dist/components/04-templates/DashboardTemplate/DashboardTemplate.jsx.map +1 -1
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.d.ts.map +1 -1
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.jsx +4 -1
- package/dist/components/04-templates/SideFilterTemplate/SideFilterTemplate.jsx.map +1 -1
- package/package.json +5 -2
- package/tailwind.config.ts +10 -0
|
@@ -28,16 +28,24 @@ import { debounce } from '../../../utils';
|
|
|
28
28
|
* @param {string} props.label - The label text for the input field.
|
|
29
29
|
* @param {string} [props.helperText] - Helper text displayed below the input.
|
|
30
30
|
* @param {boolean} [props.isMutedWhenEmpty] - Renders the border and label in gray while the field has no value.
|
|
31
|
+
* @param {boolean} [props.hideLabel] - Keeps the label for assistive technology only and drops the floating label. Use it when a heading outside the field already names it.
|
|
32
|
+
* @param {string} [props.placeholder] - Placeholder shown inside the field. Only rendered together with `hideLabel`.
|
|
33
|
+
* @param {string} [props.toggleButtonLabel] - Accessible name of the button that opens and closes the list.
|
|
34
|
+
* @param {boolean} [props.hideToggleButton] - Hides the dropdown-toggle chevron, for search-as-you-type fields with no closed list to browse.
|
|
35
|
+
* @param {string} [props.noOptionsText='No hay opciones'] - Text shown when the query matches nothing.
|
|
31
36
|
* @param {string} [props.error] - Error message displayed below the input.
|
|
32
37
|
* @param {string} [props.value=''] - The controlled value of the input.
|
|
33
38
|
*
|
|
34
39
|
* @returns {ReactNode} The rendered Autocomplete component.
|
|
35
40
|
*/
|
|
36
|
-
export function Autocomplete({ options, onSelect, onChange, onDebouncedChange, debounceDelay = 200, onHandleKeyDown, disabled, label, helperText, error, value, isMutedWhenEmpty, toggleButtonLabel, noOptionsText = 'No hay opciones', }) {
|
|
41
|
+
export function Autocomplete({ options, onSelect, onChange, onDebouncedChange, debounceDelay = 200, onHandleKeyDown, disabled, label, helperText, error, value, isMutedWhenEmpty, hideLabel, placeholder, toggleButtonLabel, hideToggleButton, noOptionsText = 'No hay opciones', }) {
|
|
37
42
|
const [query, setQuery] = useState(value ?? '');
|
|
38
43
|
const [filteredOptions, setFilteredOptions] = useState([]);
|
|
39
44
|
const [isOpen, setIsOpen] = useState(false);
|
|
40
45
|
const [activeIndex, setActiveIndex] = useState(-1);
|
|
46
|
+
// True between a keystroke and its debounced remote result: the "no options" row
|
|
47
|
+
// must not flash while the consumer is still fetching.
|
|
48
|
+
const [isSearching, setIsSearching] = useState(false);
|
|
41
49
|
const listboxId = useId();
|
|
42
50
|
const containerRef = useRef(null);
|
|
43
51
|
const justSelectedRef = useRef(false);
|
|
@@ -55,9 +63,18 @@ export function Autocomplete({ options, onSelect, onChange, onDebouncedChange, d
|
|
|
55
63
|
setFilteredOptions([]);
|
|
56
64
|
setIsOpen(false);
|
|
57
65
|
setActiveIndex(-1);
|
|
66
|
+
setIsSearching(false);
|
|
58
67
|
return;
|
|
59
68
|
}
|
|
60
|
-
|
|
69
|
+
let result;
|
|
70
|
+
try {
|
|
71
|
+
result = await onDebouncedChangeRef.current?.(q);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
if (latestQueryRef.current === q) {
|
|
75
|
+
setIsSearching(false);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
61
78
|
if (latestQueryRef.current !== q) {
|
|
62
79
|
return;
|
|
63
80
|
}
|
|
@@ -84,6 +101,7 @@ export function Autocomplete({ options, onSelect, onChange, onDebouncedChange, d
|
|
|
84
101
|
}
|
|
85
102
|
setFilteredOptions(options.filter((option) => option.label.toLowerCase().includes(newQuery.toLowerCase())));
|
|
86
103
|
setIsOpen(true);
|
|
104
|
+
setIsSearching(Boolean(onDebouncedChangeRef.current));
|
|
87
105
|
onChange?.(newQuery);
|
|
88
106
|
debouncedCallback(newQuery);
|
|
89
107
|
};
|
|
@@ -214,14 +232,15 @@ export function Autocomplete({ options, onSelect, onChange, onDebouncedChange, d
|
|
|
214
232
|
'aria-activedescendant': isOpen && activeIndex >= 0
|
|
215
233
|
? `${listboxId}-option-${activeIndex}`
|
|
216
234
|
: undefined,
|
|
217
|
-
}} iconR={handleIcon()} helperText={helperText} error={error} isMutedWhenEmpty={isMutedWhenEmpty}/>
|
|
218
|
-
{!!isOpen &&
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
235
|
+
}} iconR={hideToggleButton ? undefined : handleIcon()} helperText={helperText} error={error} isMutedWhenEmpty={isMutedWhenEmpty} hideLabel={hideLabel} placeholder={placeholder}/>
|
|
236
|
+
{!!isOpen &&
|
|
237
|
+
(filteredOptions.length > 0 || (hasSearchQuery && !isSearching)) && (<ul id={listboxId} role="listbox" className="dark:bg-black-1 absolute z-40 flex max-h-28 w-full flex-col gap-y-1 overflow-y-auto rounded-md bg-white px-3 py-2 shadow-lg dark:text-white">
|
|
238
|
+
{filteredOptions?.length > 0 ? (filteredOptions.map((option, index) => (<li key={option.value} id={`${listboxId}-option-${index}`} role="option" aria-selected={activeIndex === index} className={clsx('hover:bg-gray-5 dark:hover:bg-gray-1 cursor-pointer rounded-sm px-1 py-0.5', activeIndex === index && 'bg-gray-5 dark:bg-gray-1')} onMouseEnter={() => setActiveIndex(index)} onMouseDown={(event) => event.preventDefault()} onClick={() => handleOptionClick(option)}>
|
|
239
|
+
{option.label}
|
|
240
|
+
</li>))) : hasSearchQuery && !isSearching ? (<li role="option" aria-disabled="true" className="autocomplete-option no-options">
|
|
241
|
+
{noOptionsText}
|
|
242
|
+
</li>) : null}
|
|
243
|
+
</ul>)}
|
|
225
244
|
</div>);
|
|
226
245
|
}
|
|
227
246
|
//# sourceMappingURL=Autocomplete.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Autocomplete.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Autocomplete/Autocomplete.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAIL,SAAS,EACT,KAAK,EACL,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"Autocomplete.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/Autocomplete/Autocomplete.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
export type DatePickerQuickAction = {
|
|
3
|
+
readonly label: string;
|
|
4
|
+
readonly value: string;
|
|
5
|
+
};
|
|
6
|
+
export type DatePickerProps = {
|
|
7
|
+
readonly value?: string;
|
|
8
|
+
readonly onChange?: (iso: string) => void;
|
|
9
|
+
readonly minDate?: string;
|
|
10
|
+
readonly maxDate?: string;
|
|
11
|
+
readonly monthLabels: readonly [
|
|
12
|
+
string,
|
|
13
|
+
string,
|
|
14
|
+
string,
|
|
15
|
+
string,
|
|
16
|
+
string,
|
|
17
|
+
string,
|
|
18
|
+
string,
|
|
19
|
+
string,
|
|
20
|
+
string,
|
|
21
|
+
string,
|
|
22
|
+
string,
|
|
23
|
+
string
|
|
24
|
+
];
|
|
25
|
+
readonly weekdayLabels: readonly [
|
|
26
|
+
string,
|
|
27
|
+
string,
|
|
28
|
+
string,
|
|
29
|
+
string,
|
|
30
|
+
string,
|
|
31
|
+
string,
|
|
32
|
+
string
|
|
33
|
+
];
|
|
34
|
+
readonly prevMonthLabel: string;
|
|
35
|
+
readonly nextMonthLabel: string;
|
|
36
|
+
readonly quickActions?: readonly DatePickerQuickAction[];
|
|
37
|
+
readonly label?: string;
|
|
38
|
+
readonly helperText?: string;
|
|
39
|
+
readonly error?: string;
|
|
40
|
+
readonly disabled?: boolean;
|
|
41
|
+
readonly placeholder?: string;
|
|
42
|
+
} & Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>;
|
|
43
|
+
/**
|
|
44
|
+
* DatePicker renders a pill-shaped date field with a calendar popover.
|
|
45
|
+
* All visible labels are provided by the consumer.
|
|
46
|
+
*
|
|
47
|
+
* @component
|
|
48
|
+
* @example
|
|
49
|
+
* <DatePicker
|
|
50
|
+
* value="2026-09-20"
|
|
51
|
+
* onChange={(iso) => console.log(iso)}
|
|
52
|
+
* monthLabels={['January','February','March','April','May','June','July','August','September','October','November','December']}
|
|
53
|
+
* weekdayLabels={['S','M','T','W','T','F','S']}
|
|
54
|
+
* prevMonthLabel="Previous month"
|
|
55
|
+
* nextMonthLabel="Next month"
|
|
56
|
+
* placeholder="Pick a date"
|
|
57
|
+
* quickActions={[{ label: 'Today', value: '2026-09-14' }]}
|
|
58
|
+
* />
|
|
59
|
+
*
|
|
60
|
+
* @param {DatePickerProps} props - The properties of the DatePicker component.
|
|
61
|
+
* @param {string} [props.value] - Controlled ISO date `YYYY-MM-DD`.
|
|
62
|
+
* @param {(iso: string) => void} [props.onChange] - Fired when a date is selected.
|
|
63
|
+
* @param {string} [props.minDate] - Minimum selectable ISO date.
|
|
64
|
+
* @param {string} [props.maxDate] - Maximum selectable ISO date.
|
|
65
|
+
* @param {readonly string[]} props.monthLabels - Twelve month names.
|
|
66
|
+
* @param {readonly string[]} props.weekdayLabels - Seven weekday short labels starting on Sunday.
|
|
67
|
+
* @param {string} props.prevMonthLabel - Accessible label for previous month.
|
|
68
|
+
* @param {string} props.nextMonthLabel - Accessible label for next month.
|
|
69
|
+
* @param {readonly DatePickerQuickAction[]} [props.quickActions] - Shortcut buttons above the calendar.
|
|
70
|
+
* @param {string} [props.label] - Floating label text.
|
|
71
|
+
* @param {string} [props.helperText] - Helper text below the field.
|
|
72
|
+
* @param {string} [props.error] - Error message below the field.
|
|
73
|
+
* @param {boolean} [props.disabled] - Disables the control.
|
|
74
|
+
* @param {string} [props.placeholder] - Placeholder when no value is set.
|
|
75
|
+
*
|
|
76
|
+
* @returns {ReactNode} The rendered DatePicker component.
|
|
77
|
+
*/
|
|
78
|
+
export declare function DatePicker({ value, onChange, minDate, maxDate, monthLabels, weekdayLabels, prevMonthLabel, nextMonthLabel, quickActions, label, helperText, error, disabled, placeholder, ...restProps }: DatePickerProps): ReactNode;
|
|
79
|
+
//# sourceMappingURL=DatePicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/DatePicker/DatePicker.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAMf,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,SAAS;QAC7B,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;KACP,CAAC;IACF,QAAQ,CAAC,aAAa,EAAE,SAAS;QAC/B,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;KACP,CAAC;IACF,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;AAiFrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,WAAW,EACX,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,KAAK,EACL,UAAU,EACV,KAAK,EACL,QAAgB,EAChB,WAAW,EACX,GAAG,SAAS,EACb,EAAE,eAAe,GAAG,SAAS,CA6O7B"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { useEffect, useId, useMemo, useRef, useState, } from 'react';
|
|
4
|
+
import { FiCalendar } from 'react-icons/fi';
|
|
5
|
+
import { MdChevronLeft, MdChevronRight } from 'react-icons/md';
|
|
6
|
+
import { Each, Show } from '../../00-base';
|
|
7
|
+
import { RenderErrorOrHelperText } from '../../01-atoms/Input/utils/RenderErrorOrHelperText';
|
|
8
|
+
function parseIso(iso) {
|
|
9
|
+
if (!iso || !/^\d{4}-\d{2}-\d{2}$/.test(iso))
|
|
10
|
+
return null;
|
|
11
|
+
const [y, m, d] = iso.split('-').map(Number);
|
|
12
|
+
const date = new Date(y, m - 1, d);
|
|
13
|
+
if (date.getFullYear() !== y ||
|
|
14
|
+
date.getMonth() !== m - 1 ||
|
|
15
|
+
date.getDate() !== d) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return date;
|
|
19
|
+
}
|
|
20
|
+
function toIso(date) {
|
|
21
|
+
const y = date.getFullYear();
|
|
22
|
+
const m = String(date.getMonth() + 1).padStart(2, '0');
|
|
23
|
+
const d = String(date.getDate()).padStart(2, '0');
|
|
24
|
+
return `${y}-${m}-${d}`;
|
|
25
|
+
}
|
|
26
|
+
function startOfDay(date) {
|
|
27
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
28
|
+
}
|
|
29
|
+
function isBefore(a, b) {
|
|
30
|
+
return startOfDay(a).getTime() < startOfDay(b).getTime();
|
|
31
|
+
}
|
|
32
|
+
function isAfter(a, b) {
|
|
33
|
+
return startOfDay(a).getTime() > startOfDay(b).getTime();
|
|
34
|
+
}
|
|
35
|
+
function isSameDay(a, b) {
|
|
36
|
+
return (a.getFullYear() === b.getFullYear() &&
|
|
37
|
+
a.getMonth() === b.getMonth() &&
|
|
38
|
+
a.getDate() === b.getDate());
|
|
39
|
+
}
|
|
40
|
+
function buildCalendar(year, month, min, max) {
|
|
41
|
+
const first = new Date(year, month, 1);
|
|
42
|
+
const startOffset = first.getDay();
|
|
43
|
+
const start = new Date(year, month, 1 - startOffset);
|
|
44
|
+
const cells = [];
|
|
45
|
+
for (let i = 0; i < 42; i += 1) {
|
|
46
|
+
const date = new Date(start.getFullYear(), start.getMonth(), start.getDate() + i);
|
|
47
|
+
const disabled = (min != null && isBefore(date, min)) ||
|
|
48
|
+
(max != null && isAfter(date, max));
|
|
49
|
+
cells.push({
|
|
50
|
+
date,
|
|
51
|
+
iso: toIso(date),
|
|
52
|
+
inMonth: date.getMonth() === month,
|
|
53
|
+
disabled,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return cells;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* DatePicker renders a pill-shaped date field with a calendar popover.
|
|
60
|
+
* All visible labels are provided by the consumer.
|
|
61
|
+
*
|
|
62
|
+
* @component
|
|
63
|
+
* @example
|
|
64
|
+
* <DatePicker
|
|
65
|
+
* value="2026-09-20"
|
|
66
|
+
* onChange={(iso) => console.log(iso)}
|
|
67
|
+
* monthLabels={['January','February','March','April','May','June','July','August','September','October','November','December']}
|
|
68
|
+
* weekdayLabels={['S','M','T','W','T','F','S']}
|
|
69
|
+
* prevMonthLabel="Previous month"
|
|
70
|
+
* nextMonthLabel="Next month"
|
|
71
|
+
* placeholder="Pick a date"
|
|
72
|
+
* quickActions={[{ label: 'Today', value: '2026-09-14' }]}
|
|
73
|
+
* />
|
|
74
|
+
*
|
|
75
|
+
* @param {DatePickerProps} props - The properties of the DatePicker component.
|
|
76
|
+
* @param {string} [props.value] - Controlled ISO date `YYYY-MM-DD`.
|
|
77
|
+
* @param {(iso: string) => void} [props.onChange] - Fired when a date is selected.
|
|
78
|
+
* @param {string} [props.minDate] - Minimum selectable ISO date.
|
|
79
|
+
* @param {string} [props.maxDate] - Maximum selectable ISO date.
|
|
80
|
+
* @param {readonly string[]} props.monthLabels - Twelve month names.
|
|
81
|
+
* @param {readonly string[]} props.weekdayLabels - Seven weekday short labels starting on Sunday.
|
|
82
|
+
* @param {string} props.prevMonthLabel - Accessible label for previous month.
|
|
83
|
+
* @param {string} props.nextMonthLabel - Accessible label for next month.
|
|
84
|
+
* @param {readonly DatePickerQuickAction[]} [props.quickActions] - Shortcut buttons above the calendar.
|
|
85
|
+
* @param {string} [props.label] - Floating label text.
|
|
86
|
+
* @param {string} [props.helperText] - Helper text below the field.
|
|
87
|
+
* @param {string} [props.error] - Error message below the field.
|
|
88
|
+
* @param {boolean} [props.disabled] - Disables the control.
|
|
89
|
+
* @param {string} [props.placeholder] - Placeholder when no value is set.
|
|
90
|
+
*
|
|
91
|
+
* @returns {ReactNode} The rendered DatePicker component.
|
|
92
|
+
*/
|
|
93
|
+
export function DatePicker({ value, onChange, minDate, maxDate, monthLabels, weekdayLabels, prevMonthLabel, nextMonthLabel, quickActions, label, helperText, error, disabled = false, placeholder, ...restProps }) {
|
|
94
|
+
const generatedId = useId();
|
|
95
|
+
const id = restProps.id ?? generatedId;
|
|
96
|
+
const descriptionId = error || helperText ? `${id}-description` : undefined;
|
|
97
|
+
const panelId = `${id}-panel`;
|
|
98
|
+
const containerRef = useRef(null);
|
|
99
|
+
const [open, setOpen] = useState(false);
|
|
100
|
+
const selected = useMemo(() => parseIso(value), [value]);
|
|
101
|
+
const min = useMemo(() => parseIso(minDate), [minDate]);
|
|
102
|
+
const max = useMemo(() => parseIso(maxDate), [maxDate]);
|
|
103
|
+
const initialView = selected ?? min ?? new Date();
|
|
104
|
+
const [viewYear, setViewYear] = useState(initialView.getFullYear());
|
|
105
|
+
const [viewMonth, setViewMonth] = useState(initialView.getMonth());
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
if (!selected)
|
|
108
|
+
return;
|
|
109
|
+
setViewYear(selected.getFullYear());
|
|
110
|
+
setViewMonth(selected.getMonth());
|
|
111
|
+
}, [selected]);
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
if (!open)
|
|
114
|
+
return;
|
|
115
|
+
const onDown = (event) => {
|
|
116
|
+
if (!containerRef.current?.contains(event.target)) {
|
|
117
|
+
setOpen(false);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
const onKey = (event) => {
|
|
121
|
+
if (event.key === 'Escape')
|
|
122
|
+
setOpen(false);
|
|
123
|
+
};
|
|
124
|
+
document.addEventListener('mousedown', onDown);
|
|
125
|
+
document.addEventListener('keydown', onKey);
|
|
126
|
+
return () => {
|
|
127
|
+
document.removeEventListener('mousedown', onDown);
|
|
128
|
+
document.removeEventListener('keydown', onKey);
|
|
129
|
+
};
|
|
130
|
+
}, [open]);
|
|
131
|
+
const cells = useMemo(() => buildCalendar(viewYear, viewMonth, min, max), [viewYear, viewMonth, min, max]);
|
|
132
|
+
const displayValue = useMemo(() => {
|
|
133
|
+
if (!selected)
|
|
134
|
+
return placeholder ?? '';
|
|
135
|
+
return `${selected.getDate()} ${monthLabels[selected.getMonth()]} ${selected.getFullYear()}`;
|
|
136
|
+
}, [selected, monthLabels, placeholder]);
|
|
137
|
+
const shiftMonth = (delta) => {
|
|
138
|
+
const next = new Date(viewYear, viewMonth + delta, 1);
|
|
139
|
+
setViewYear(next.getFullYear());
|
|
140
|
+
setViewMonth(next.getMonth());
|
|
141
|
+
};
|
|
142
|
+
const pick = (iso) => {
|
|
143
|
+
onChange?.(iso);
|
|
144
|
+
setOpen(false);
|
|
145
|
+
};
|
|
146
|
+
const hasValue = Boolean(selected);
|
|
147
|
+
const borderClass = error
|
|
148
|
+
? 'border-error'
|
|
149
|
+
: disabled
|
|
150
|
+
? 'border-gray-3'
|
|
151
|
+
: 'border-black dark:border-white';
|
|
152
|
+
return (<div {...restProps} ref={containerRef} className={clsx('relative w-full max-w-full', restProps.className)}>
|
|
153
|
+
<Show>
|
|
154
|
+
<Show.When isTrue={Boolean(label)}>
|
|
155
|
+
<label htmlFor={id} className={clsx('mb-1.5 block text-xs font-semibold tracking-wide uppercase', disabled ? 'text-gray-3' : 'text-black dark:text-white')}>
|
|
156
|
+
{label}
|
|
157
|
+
</label>
|
|
158
|
+
</Show.When>
|
|
159
|
+
</Show>
|
|
160
|
+
|
|
161
|
+
<button type="button" id={id} disabled={disabled} aria-haspopup="dialog" aria-expanded={open} aria-controls={panelId} aria-invalid={Boolean(error)} aria-describedby={descriptionId} onClick={() => {
|
|
162
|
+
if (!disabled)
|
|
163
|
+
setOpen((prev) => !prev);
|
|
164
|
+
}} className={clsx('flex h-9 w-full items-center justify-between gap-2 rounded-full border bg-transparent px-5 text-left text-sm outline-0 transition-colors dark:bg-black', borderClass, disabled && 'text-gray-3 dark:text-gray-2 cursor-not-allowed', !disabled && !hasValue && 'text-gray-2', !disabled && hasValue && 'text-black dark:text-white')}>
|
|
165
|
+
<span className="min-w-0 flex-1 truncate">{displayValue}</span>
|
|
166
|
+
<FiCalendar className={clsx('shrink-0', disabled
|
|
167
|
+
? 'text-gray-3 dark:text-gray-2'
|
|
168
|
+
: 'text-gray-1 dark:text-gray-2')} aria-hidden/>
|
|
169
|
+
</button>
|
|
170
|
+
|
|
171
|
+
<Show>
|
|
172
|
+
<Show.When isTrue={open && !disabled}>
|
|
173
|
+
<div id={panelId} role="dialog" className="border-gray-5 dark:border-gray-1 absolute z-50 mt-2 w-full min-w-72 rounded-lg border bg-white p-3 shadow-md dark:bg-black">
|
|
174
|
+
<Show>
|
|
175
|
+
<Show.When isTrue={Boolean(quickActions?.length)}>
|
|
176
|
+
<div className="mb-3 flex flex-wrap gap-2">
|
|
177
|
+
<Each of={[...(quickActions ?? [])]} render={(action) => (<button type="button" key={action.value} onClick={() => pick(action.value)} className={clsx('rounded-full border px-3 py-1 text-xs font-semibold', value === action.value
|
|
178
|
+
? 'border-lavender bg-lavender-2 text-lavender dark:bg-lavender-dark-1 dark:text-lavender-dark'
|
|
179
|
+
: 'border-gray-5 text-gray-1 dark:border-gray-1 dark:text-gray-2')}>
|
|
180
|
+
{action.label}
|
|
181
|
+
</button>)}/>
|
|
182
|
+
</div>
|
|
183
|
+
</Show.When>
|
|
184
|
+
</Show>
|
|
185
|
+
|
|
186
|
+
<div className="mb-2 flex items-center justify-between gap-2">
|
|
187
|
+
<button type="button" aria-label={prevMonthLabel} onClick={() => shiftMonth(-1)} className="hover:bg-gray-6 dark:hover:bg-gray-dark-1 flex h-8 w-8 items-center justify-center rounded-full text-black dark:text-white">
|
|
188
|
+
<MdChevronLeft className="h-5 w-5" aria-hidden/>
|
|
189
|
+
</button>
|
|
190
|
+
<p className="text-sm font-semibold text-black dark:text-white">
|
|
191
|
+
{monthLabels[viewMonth]} {viewYear}
|
|
192
|
+
</p>
|
|
193
|
+
<button type="button" aria-label={nextMonthLabel} onClick={() => shiftMonth(1)} className="hover:bg-gray-6 dark:hover:bg-gray-dark-1 flex h-8 w-8 items-center justify-center rounded-full text-black dark:text-white">
|
|
194
|
+
<MdChevronRight className="h-5 w-5" aria-hidden/>
|
|
195
|
+
</button>
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
<div className="mb-1 grid grid-cols-7 gap-1">
|
|
199
|
+
<Each of={[...weekdayLabels]} render={(day, index) => (<span key={`${index}-${day}`} className="text-gray-2 text-center text-[11px] font-semibold">
|
|
200
|
+
{day}
|
|
201
|
+
</span>)}/>
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
<div className="grid grid-cols-7 gap-1">
|
|
205
|
+
<Each of={cells} render={(cell) => {
|
|
206
|
+
const isSelected = selected
|
|
207
|
+
? isSameDay(cell.date, selected)
|
|
208
|
+
: false;
|
|
209
|
+
return (<button type="button" key={cell.iso} disabled={cell.disabled} onClick={() => pick(cell.iso)} className={clsx('flex h-8 w-full items-center justify-center rounded-full text-xs font-medium', cell.disabled &&
|
|
210
|
+
'text-gray-3 dark:text-gray-2 cursor-not-allowed', !cell.disabled &&
|
|
211
|
+
!isSelected &&
|
|
212
|
+
cell.inMonth &&
|
|
213
|
+
'hover:bg-lavender-2 dark:hover:bg-lavender-dark-1 text-black dark:text-white', !cell.disabled &&
|
|
214
|
+
!isSelected &&
|
|
215
|
+
!cell.inMonth &&
|
|
216
|
+
'text-gray-3 dark:text-gray-2', isSelected &&
|
|
217
|
+
'bg-lavender dark:bg-lavender-dark font-semibold text-white')}>
|
|
218
|
+
{cell.date.getDate()}
|
|
219
|
+
</button>);
|
|
220
|
+
}}/>
|
|
221
|
+
</div>
|
|
222
|
+
</div>
|
|
223
|
+
</Show.When>
|
|
224
|
+
</Show>
|
|
225
|
+
|
|
226
|
+
<RenderErrorOrHelperText id={descriptionId} error={error} helperText={helperText} disabled={disabled}/>
|
|
227
|
+
</div>);
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=DatePicker.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.jsx","sourceRoot":"","sources":["../../../../src/components/02-molecules/DatePicker/DatePicker.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAGL,SAAS,EACT,KAAK,EACL,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oDAAoD,CAAC;AA6C7F,SAAS,QAAQ,CAAC,GAAY;IAC5B,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,IACE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EACpB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,KAAK,CAAC,IAAU;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,IAAU;IAC5B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,QAAQ,CAAC,CAAO,EAAE,CAAO;IAChC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,OAAO,CAAC,CAAO,EAAE,CAAO;IAC/B,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,SAAS,CAAC,CAAO,EAAE,CAAO;IACjC,OAAO,CACL,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;QACnC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;QAC7B,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAC5B,CAAC;AACJ,CAAC;AASD,SAAS,aAAa,CACpB,IAAY,EACZ,KAAa,EACb,GAAiB,EACjB,GAAiB;IAEjB,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;IACrD,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,IAAI,CACnB,KAAK,CAAC,WAAW,EAAE,EACnB,KAAK,CAAC,QAAQ,EAAE,EAChB,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CACpB,CAAC;QACF,MAAM,QAAQ,GACZ,CAAC,GAAG,IAAI,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACpC,CAAC,GAAG,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC;YACT,IAAI;YACJ,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC;YAChB,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK;YAClC,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,WAAW,EACX,aAAa,EACb,cAAc,EACd,cAAc,EACd,YAAY,EACZ,KAAK,EACL,UAAU,EACV,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,WAAW,EACX,GAAG,SAAS,EACI;IAChB,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,WAAW,CAAC;IACvC,MAAM,aAAa,GAAG,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC;IAC9B,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAExD,MAAM,WAAW,GAAG,QAAQ,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IAClD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEnE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACpC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,MAAM,GAAG,CAAC,KAAiB,EAAE,EAAE;YACnC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE,CAAC;gBAC1D,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,KAAoB,EAAE,EAAE;YACrC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/C,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAClD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,EAClD,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAChC,CAAC;IAEF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,CAAC,QAAQ;YAAE,OAAO,WAAW,IAAI,EAAE,CAAC;QACxC,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;IAC/F,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE;QACnC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;QACtD,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAChC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QAC3B,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK;QACvB,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,QAAQ;YACR,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,gCAAgC,CAAC;IAEvC,OAAO,CACL,CAAC,GAAG,CACF,IAAI,SAAS,CAAC,CACd,GAAG,CAAC,CAAC,YAAY,CAAC,CAClB,SAAS,CAAC,CAAC,IAAI,CAAC,4BAA4B,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAEnE;MAAA,CAAC,IAAI,CACH;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAChC;UAAA,CAAC,KAAK,CACJ,OAAO,CAAC,CAAC,EAAE,CAAC,CACZ,SAAS,CAAC,CAAC,IAAI,CACb,4DAA4D,EAC5D,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,4BAA4B,CACxD,CAAC,CAEF;YAAA,CAAC,KAAK,CACR;UAAA,EAAE,KAAK,CACT;QAAA,EAAE,IAAI,CAAC,IAAI,CACb;MAAA,EAAE,IAAI,CAEN;;MAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,EAAE,CAAC,CAAC,EAAE,CAAC,CACP,QAAQ,CAAC,CAAC,QAAQ,CAAC,CACnB,aAAa,CAAC,QAAQ,CACtB,aAAa,CAAC,CAAC,IAAI,CAAC,CACpB,aAAa,CAAC,CAAC,OAAO,CAAC,CACvB,YAAY,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC7B,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAChC,OAAO,CAAC,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,QAAQ;gBAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CACF,SAAS,CAAC,CAAC,IAAI,CACb,wJAAwJ,EACxJ,WAAW,EACX,QAAQ,IAAI,iDAAiD,EAC7D,CAAC,QAAQ,IAAI,CAAC,QAAQ,IAAI,aAAa,EACvC,CAAC,QAAQ,IAAI,QAAQ,IAAI,4BAA4B,CACtD,CAAC,CAEF;QAAA,CAAC,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAC9D;QAAA,CAAC,UAAU,CACT,SAAS,CAAC,CAAC,IAAI,CACb,UAAU,EACV,QAAQ;YACN,CAAC,CAAC,8BAA8B;YAChC,CAAC,CAAC,8BAA8B,CACnC,CAAC,CACF,WAAW,EAEf;MAAA,EAAE,MAAM,CAER;;MAAA,CAAC,IAAI,CACH;QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CACnC;UAAA,CAAC,GAAG,CACF,EAAE,CAAC,CAAC,OAAO,CAAC,CACZ,IAAI,CAAC,QAAQ,CACb,SAAS,CAAC,4HAA4H,CAEtI;YAAA,CAAC,IAAI,CACH;cAAA,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAC/C;gBAAA,CAAC,GAAG,CAAC,SAAS,CAAC,2BAA2B,CACxC;kBAAA,CAAC,IAAI,CACH,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAC9B,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAClB,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAClB,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAClC,SAAS,CAAC,CAAC,IAAI,CACb,qDAAqD,EACrD,KAAK,KAAK,MAAM,CAAC,KAAK;gBACpB,CAAC,CAAC,6FAA6F;gBAC/F,CAAC,CAAC,+DAA+D,CACpE,CAAC,CAEF;wBAAA,CAAC,MAAM,CAAC,KAAK,CACf;sBAAA,EAAE,MAAM,CAAC,CACV,CAAC,EAEN;gBAAA,EAAE,GAAG,CACP;cAAA,EAAE,IAAI,CAAC,IAAI,CACb;YAAA,EAAE,IAAI,CAEN;;YAAA,CAAC,GAAG,CAAC,SAAS,CAAC,8CAA8C,CAC3D;cAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,UAAU,CAAC,CAAC,cAAc,CAAC,CAC3B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9B,SAAS,CAAC,4HAA4H,CAEtI;gBAAA,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAChD;cAAA,EAAE,MAAM,CACR;cAAA,CAAC,CAAC,CAAC,SAAS,CAAC,kDAAkD,CAC7D;gBAAA,CAAC,WAAW,CAAC,SAAS,CAAC,CAAE,CAAA,CAAC,QAAQ,CACpC;cAAA,EAAE,CAAC,CACH;cAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,UAAU,CAAC,CAAC,cAAc,CAAC,CAC3B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAC7B,SAAS,CAAC,4HAA4H,CAEtI;gBAAA,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EACjD;cAAA,EAAE,MAAM,CACV;YAAA,EAAE,GAAG,CAEL;;YAAA,CAAC,GAAG,CAAC,SAAS,CAAC,6BAA6B,CAC1C;cAAA,CAAC,IAAI,CACH,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CACvB,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CACtB,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC,CACvB,SAAS,CAAC,mDAAmD,CAE7D;oBAAA,CAAC,GAAG,CACN;kBAAA,EAAE,IAAI,CAAC,CACR,CAAC,EAEN;YAAA,EAAE,GAAG,CAEL;;YAAA,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CACrC;cAAA,CAAC,IAAI,CACH,EAAE,CAAC,CAAC,KAAK,CAAC,CACV,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,UAAU,GAAG,QAAQ;gBACzB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAChC,CAAC,CAAC,KAAK,CAAC;YACV,OAAO,CACL,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACd,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CACxB,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAC9B,SAAS,CAAC,CAAC,IAAI,CACb,8EAA8E,EAC9E,IAAI,CAAC,QAAQ;oBACX,iDAAiD,EACnD,CAAC,IAAI,CAAC,QAAQ;oBACZ,CAAC,UAAU;oBACX,IAAI,CAAC,OAAO;oBACZ,8EAA8E,EAChF,CAAC,IAAI,CAAC,QAAQ;oBACZ,CAAC,UAAU;oBACX,CAAC,IAAI,CAAC,OAAO;oBACb,8BAA8B,EAChC,UAAU;oBACR,4DAA4D,CAC/D,CAAC,CAEF;sBAAA,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CACtB;oBAAA,EAAE,MAAM,CAAC,CACV,CAAC;QACJ,CAAC,CAAC,EAEN;YAAA,EAAE,GAAG,CACP;UAAA,EAAE,GAAG,CACP;QAAA,EAAE,IAAI,CAAC,IAAI,CACb;MAAA,EAAE,IAAI,CAEN;;MAAA,CAAC,uBAAuB,CACtB,EAAE,CAAC,CAAC,aAAa,CAAC,CAClB,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAEvB;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/DatePicker/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/02-molecules/DatePicker/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
|
|
@@ -58,6 +58,7 @@ type TFilterProps = {
|
|
|
58
58
|
* @param {string} [props.inputs.config.placeholder] - Placeholder text for the input field.
|
|
59
59
|
* @param {string} [props.inputs.config.helperText] - Helper text rendered below the input field.
|
|
60
60
|
* @param {string} [props.inputs.config.chipLabel] - Overrides the text of the applied filter chip.
|
|
61
|
+
* @param {boolean} [props.inputs.config.disabled] - Renders a select or multiselect read-only, keeping its value.
|
|
61
62
|
* @param {boolean} [props.showAppliedFilters] - Renders the applied filter chips inside the panel. Defaults to true.
|
|
62
63
|
* @returns {ReactNode} The rendered Filter component.
|
|
63
64
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filter.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Filter/Filter.tsx"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"Filter.d.ts","sourceRoot":"","sources":["../../../../src/components/02-molecules/Filter/Filter.tsx"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAef,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG5D,KAAK,YAAY,GAAG;IAClB,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,IAAI,CAAC;IAChE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;IACpD,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,IAAI,CAAC;KACtB,CAAC;IACF,YAAY,EAAE;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,IAAI,CAAC;KACzD,CAAC;IACF,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,MAAM,CAAC,EACrB,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,MAAM,EACN,eAAe,EACf,iBAAiB,EACjB,kBAAyB,GAC1B,EAAE,YAAY,GAAG,SAAS,CAoa1B"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import clsx from 'clsx';
|
|
3
|
-
import { useEffect, useState } from 'react';
|
|
3
|
+
import { useEffect, useMemo, useState, } from 'react';
|
|
4
4
|
import { Each, Show } from '../../00-base';
|
|
5
5
|
import { Button, Checkbox, Input, MultiSelect, Paragraph, Radio, Select, Switch, } from '../../01-atoms';
|
|
6
6
|
import { Autocomplete } from '../Autocomplete';
|
|
7
7
|
import { FilterChips } from '../FilterChips';
|
|
8
|
+
import { pruneOrphanValues } from './utils/pruneOrphanValues';
|
|
8
9
|
/**
|
|
9
10
|
* Filter component for managing a set of filters with various input types.
|
|
10
11
|
*
|
|
@@ -47,6 +48,7 @@ import { FilterChips } from '../FilterChips';
|
|
|
47
48
|
* @param {string} [props.inputs.config.placeholder] - Placeholder text for the input field.
|
|
48
49
|
* @param {string} [props.inputs.config.helperText] - Helper text rendered below the input field.
|
|
49
50
|
* @param {string} [props.inputs.config.chipLabel] - Overrides the text of the applied filter chip.
|
|
51
|
+
* @param {boolean} [props.inputs.config.disabled] - Renders a select or multiselect read-only, keeping its value.
|
|
50
52
|
* @param {boolean} [props.showAppliedFilters] - Renders the applied filter chips inside the panel. Defaults to true.
|
|
51
53
|
* @returns {ReactNode} The rendered Filter component.
|
|
52
54
|
*/
|
|
@@ -86,6 +88,13 @@ export function Filter({ filtersEnabledText, submitButton, resetButton, inputs,
|
|
|
86
88
|
return previousValue;
|
|
87
89
|
}, {}));
|
|
88
90
|
const [autocompleteOptions, setAutocompleteOptions] = useState({});
|
|
91
|
+
const optionsFingerprint = useMemo(() => JSON.stringify(inputArr.map(([name, { config }]) => [
|
|
92
|
+
name,
|
|
93
|
+
config.map(({ type, options }) => ({ type, options })),
|
|
94
|
+
])), [inputs]);
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
setFilters((prev) => pruneOrphanValues(inputs, prev).values);
|
|
97
|
+
}, [optionsFingerprint]);
|
|
89
98
|
const handlerChange = (name, value) => {
|
|
90
99
|
setFilters((prevValues) => {
|
|
91
100
|
if (!value || (Array.isArray(value) && !value.length)) {
|
|
@@ -166,19 +175,31 @@ export function Filter({ filtersEnabledText, submitButton, resetButton, inputs,
|
|
|
166
175
|
</Show>
|
|
167
176
|
<div className={clsx('grid gap-4 dark:text-white', columns === 2 ? 'grid-cols-2' : 'grid-cols-1')}>
|
|
168
177
|
<Each of={config} render={(inputConfig, index) => {
|
|
169
|
-
const { type, label, options, minDate, maxDate, placeholder, helperText, onDebouncedChange, debounceDelay, toggleButtonLabel, noOptionsText, } = inputConfig;
|
|
178
|
+
const { type, label, options, minDate, maxDate, placeholder, helperText, onDebouncedChange, debounceDelay, toggleButtonLabel, hideToggleButton, noOptionsText, } = inputConfig;
|
|
170
179
|
const onAutocompleteSelect = type === 'autocomplete' &&
|
|
171
180
|
'onSelect' in inputConfig
|
|
172
181
|
? inputConfig.onSelect
|
|
173
182
|
: undefined;
|
|
183
|
+
const onSelectChange = type === 'select' && 'onChange' in inputConfig
|
|
184
|
+
? inputConfig.onChange
|
|
185
|
+
: undefined;
|
|
186
|
+
const isDisabled = 'disabled' in inputConfig
|
|
187
|
+
? Boolean(inputConfig.disabled)
|
|
188
|
+
: false;
|
|
174
189
|
const filterKey = config.length > 1 ? `${name}__${index}` : name;
|
|
175
190
|
return (<Show key={label}>
|
|
176
191
|
<Show.When isTrue={type === 'select'}>
|
|
177
192
|
<Select label={label} select={{
|
|
178
193
|
name: filterKey,
|
|
194
|
+
disabled: isDisabled,
|
|
179
195
|
value: filters[filterKey] || '',
|
|
180
196
|
onChange: (event) => {
|
|
181
197
|
handlerChange(filterKey, event.target.value);
|
|
198
|
+
onSelectChange?.(event.target.value, {
|
|
199
|
+
filterKey,
|
|
200
|
+
setFilter: handlerChange,
|
|
201
|
+
filters,
|
|
202
|
+
});
|
|
182
203
|
},
|
|
183
204
|
}} options={options} placeholder={placeholder} helperText={helperText} isMutedWhenEmpty/>
|
|
184
205
|
</Show.When>
|
|
@@ -217,7 +238,7 @@ export function Filter({ filtersEnabledText, submitButton, resetButton, inputs,
|
|
|
217
238
|
}}/>
|
|
218
239
|
</Show.When>
|
|
219
240
|
<Show.When isTrue={type === 'multiselect'}>
|
|
220
|
-
<MultiSelect label={label} options={options} value={filters[filterKey]} onChange={(selectedOptions) => handlerChange(filterKey, selectedOptions)} helperText={helperText} isMutedWhenEmpty/>
|
|
241
|
+
<MultiSelect label={label} options={options} value={filters[filterKey]} onChange={(selectedOptions) => handlerChange(filterKey, selectedOptions)} helperText={helperText} disabled={isDisabled} isMutedWhenEmpty/>
|
|
221
242
|
</Show.When>
|
|
222
243
|
<Show.When isTrue={type === 'autocomplete'}>
|
|
223
244
|
{(() => {
|
|
@@ -246,7 +267,7 @@ export function Filter({ filtersEnabledText, submitButton, resetButton, inputs,
|
|
|
246
267
|
}
|
|
247
268
|
return result;
|
|
248
269
|
}
|
|
249
|
-
: undefined} debounceDelay={debounceDelay} toggleButtonLabel={toggleButtonLabel} noOptionsText={noOptionsText} helperText={helperText} isMutedWhenEmpty/>);
|
|
270
|
+
: undefined} debounceDelay={debounceDelay} toggleButtonLabel={toggleButtonLabel} hideToggleButton={hideToggleButton} noOptionsText={noOptionsText} helperText={helperText} isMutedWhenEmpty/>);
|
|
250
271
|
})()}
|
|
251
272
|
</Show.When>
|
|
252
273
|
<Show.Else>
|