@stenajs-webui/filter 15.0.0-alpha.1 → 15.0.0-alpha.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/README.md +40 -0
- package/dist/features/search-filter/features/chips/EmptyChip.d.ts +7 -0
- package/dist/features/search-filter/features/chips/SearchFilterChip.d.ts +10 -0
- package/dist/features/search-filter/features/chips/SectionChips.d.ts +1 -2
- package/dist/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.d.ts +2 -1
- package/dist/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.d.ts +2 -2
- package/dist/features/search-filter/section-factories/date-range/DateRangeChips.d.ts +2 -2
- package/dist/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.d.ts +4 -9
- package/dist/index.d.ts +8 -1
- package/dist/index.es.js +61 -27
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +71 -25
- package/dist/index.js.map +1 -1
- package/package.json +12 -12
- package/dist/features/search-filter/section-factories/date-range/DateRangeTypes.d.ts +0 -4
package/README.md
CHANGED
|
@@ -140,3 +140,43 @@ They are API compatible and are interchangeable.
|
|
|
140
140
|
}
|
|
141
141
|
/>
|
|
142
142
|
```
|
|
143
|
+
|
|
144
|
+
## Chips
|
|
145
|
+
|
|
146
|
+
You can add all chips for a section using the `SectionChips` component.
|
|
147
|
+
|
|
148
|
+
```tsx
|
|
149
|
+
<SectionChips
|
|
150
|
+
sectionId={"divisions"}
|
|
151
|
+
emptyChipLabel={"All division"}
|
|
152
|
+
{...createChipsPropsForBooleanRecord(
|
|
153
|
+
state.formModel,
|
|
154
|
+
"divisions",
|
|
155
|
+
divisionOptions
|
|
156
|
+
)}
|
|
157
|
+
/>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Manual chips
|
|
161
|
+
|
|
162
|
+
If you need more manual control over each chip, you can add them individually.
|
|
163
|
+
|
|
164
|
+
```tsx
|
|
165
|
+
{
|
|
166
|
+
myList.map(({ value, label }) => (
|
|
167
|
+
<SearchFilterChip
|
|
168
|
+
key={value}
|
|
169
|
+
label={label ?? sectionId}
|
|
170
|
+
sectionId={sectionId}
|
|
171
|
+
onClickRemove={onClickRemoveOnChip}
|
|
172
|
+
value={value}
|
|
173
|
+
/>
|
|
174
|
+
));
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
If you need a chip to indicate no selection, you can use `EmptyChip`.
|
|
179
|
+
|
|
180
|
+
```tsx
|
|
181
|
+
<EmptyChip sectionId={sectionId} label={emptyChipLabel} />
|
|
182
|
+
```
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface EmptyChipProps<TSectionKey extends string> {
|
|
3
|
+
sectionId: TSectionKey;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const EmptyChip: <TSectionKey extends string>({ label, sectionId, }: EmptyChipProps<TSectionKey>) => JSX.Element;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { SearchFilterSectionOnClickRemoveOnChip } from "../../config/SearchFilterConfig";
|
|
3
|
+
interface SearchFilterChipProps<TFormModel, TSectionKey> {
|
|
4
|
+
sectionId: TSectionKey;
|
|
5
|
+
label: string;
|
|
6
|
+
value: string;
|
|
7
|
+
onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;
|
|
8
|
+
}
|
|
9
|
+
export declare const SearchFilterChip: <TFormModel, TSectionKey extends string>({ sectionId, label, value, onClickRemove, }: SearchFilterChipProps<TFormModel, TSectionKey>) => JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -5,6 +5,5 @@ export interface SectionChipsProps<TFormModel, TSectionKey extends string> {
|
|
|
5
5
|
chips?: Array<SearchFilterSectionChipModel>;
|
|
6
6
|
emptyChipLabel?: string;
|
|
7
7
|
onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;
|
|
8
|
-
disableChipClearButton?: boolean;
|
|
9
8
|
}
|
|
10
|
-
export declare const SectionChips: <TFormModel, TSectionKey extends string>({ sectionId, chips, emptyChipLabel, onClickRemoveOnChip,
|
|
9
|
+
export declare const SectionChips: <TFormModel, TSectionKey extends string>({ sectionId, chips, emptyChipLabel, onClickRemoveOnChip, }: SectionChipsProps<TFormModel, TSectionKey>) => JSX.Element | null;
|
|
@@ -3,7 +3,8 @@ import { SearchFilterSectionProps } from "../../../components/SearchFilterSectio
|
|
|
3
3
|
import { ValueAndOnValueChangeProps } from "@stenajs-webui/forms";
|
|
4
4
|
import { BooleanRecord, BooleanRecordOptions } from "../BooleanRecordTypes";
|
|
5
5
|
interface ChipMultiSelectSectionProps<TSectionKey extends string> extends SearchFilterSectionProps<TSectionKey>, ValueAndOnValueChangeProps<BooleanRecord> {
|
|
6
|
+
noneSelectedLabel?: string;
|
|
6
7
|
options?: BooleanRecordOptions;
|
|
7
8
|
}
|
|
8
|
-
export declare const ChipMultiSelectSection: <TSectionKey extends string>({ options,
|
|
9
|
+
export declare const ChipMultiSelectSection: <TSectionKey extends string>({ options, value, noneSelectedLabel, onValueChange, ...sectionProps }: ChipMultiSelectSectionProps<TSectionKey>) => React.ReactElement;
|
|
9
10
|
export {};
|
|
@@ -2,7 +2,7 @@ import * as React from "react";
|
|
|
2
2
|
import { SearchFilterSectionProps } from "../../../components/SearchFilterSection";
|
|
3
3
|
import { ValueAndOnValueChangeProps } from "@stenajs-webui/forms";
|
|
4
4
|
import { BooleanRecord, BooleanRecordOptions } from "../BooleanRecordTypes";
|
|
5
|
-
export interface
|
|
5
|
+
export interface SimpleCheckboxSectionProps<TSectionKey extends string> extends SearchFilterSectionProps<TSectionKey>, ValueAndOnValueChangeProps<BooleanRecord> {
|
|
6
6
|
options?: BooleanRecordOptions;
|
|
7
7
|
}
|
|
8
|
-
export declare const SimpleCheckboxListSection: <TSectionKey extends string>({ options,
|
|
8
|
+
export declare const SimpleCheckboxListSection: <TSectionKey extends string>({ options, value, onValueChange, ...sectionProps }: SimpleCheckboxSectionProps<TSectionKey>) => React.ReactElement;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DateStringRange } from "@stenajs-webui/calendar";
|
|
2
2
|
import { SearchFilterSectionChipModel, SearchFilterSectionOnClickRemoveOnChip } from "../../config/SearchFilterConfig";
|
|
3
3
|
import { SectionChipsProps } from "../../features/chips/SectionChips";
|
|
4
4
|
export declare const createChipsPropsForDateRange: <TFormModel, TSectionKey extends string, TField extends { [Key in keyof TFormModel]-?: TFormModel[Key] extends string | undefined ? Key : never; }[keyof TFormModel]>(formModel: TFormModel, startDateFieldName: TField, endDateFieldName: TField) => Pick<SectionChipsProps<TFormModel, TSectionKey>, "chips" | "onClickRemoveOnChip">;
|
|
5
5
|
export declare const createChipsForDateRange: (startDate: string | undefined, endDate: string | undefined) => Array<SearchFilterSectionChipModel>;
|
|
6
|
-
export declare const createOnClickRemoveOnChipForDateRange: <TFormModel, TField extends { [Key in keyof TFormModel]-?: TFormModel[Key] extends
|
|
6
|
+
export declare const createOnClickRemoveOnChipForDateRange: <TFormModel, TField extends { [Key in keyof TFormModel]-?: TFormModel[Key] extends DateStringRange ? Key : never; }[keyof TFormModel]>(startDateFieldName: TField, endDateFieldName: TField) => SearchFilterSectionOnClickRemoveOnChip<TFormModel>;
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import { DateRangeCalendarProps } from "@stenajs-webui/calendar";
|
|
2
|
+
import { DateRangeCalendarProps, DateStringRange } from "@stenajs-webui/calendar";
|
|
3
3
|
import { SearchFilterSectionProps } from "../../../components/SearchFilterSection";
|
|
4
4
|
import { SearchFilterActions, SearchFilterDispatch } from "../../../redux/SearchFilterRedux";
|
|
5
|
-
interface
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
export interface DateRangeCalendarSectionProps<TFormModel, TSectionKey extends string> extends SearchFilterSectionProps<TSectionKey>, Omit<DateRangeCalendarProps<{}>, "focusedInput" | "setFocusedInput" | "startDate" | "endDate" | "onChange" | "setStartDate" | "setEndDate"> {
|
|
10
|
-
value: DateRangeCalendarSectionOnChangeValue;
|
|
11
|
-
onValueChange: (value: DateRangeCalendarSectionOnChangeValue, options: SetDateOptions<TFormModel, TSectionKey>) => void;
|
|
5
|
+
export interface DateRangeCalendarSectionProps<TFormModel, TSectionKey extends string> extends SearchFilterSectionProps<TSectionKey>, Omit<DateRangeCalendarProps<{}>, "value" | "onValueChange" | "focusedInput" | "setFocusedInput"> {
|
|
6
|
+
value: DateStringRange;
|
|
7
|
+
onValueChange: (value: DateStringRange, options: SetDateOptions<TFormModel, TSectionKey>) => void;
|
|
12
8
|
}
|
|
13
9
|
export interface SetDateOptions<TFormModel, TSectionKey extends string> {
|
|
14
10
|
dispatch: SearchFilterDispatch<TFormModel>;
|
|
15
11
|
actions: SearchFilterActions<TFormModel, TSectionKey>;
|
|
16
12
|
}
|
|
17
13
|
export declare const DateRangeCalendarSection: <TFormModel, TSectionKey extends string>({ value, onValueChange, sectionId, ...dateRangeCalendarProps }: DateRangeCalendarSectionProps<TFormModel, TSectionKey>) => JSX.Element;
|
|
18
|
-
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -5,17 +5,24 @@ export * from "./features/search-filter/components/SearchFilterDrawer";
|
|
|
5
5
|
export * from "./features/search-filter/components/SearchFilterButton";
|
|
6
6
|
export * from "./features/search-filter/components/SearchFilterSection";
|
|
7
7
|
export * from "./features/search-filter/components/SearchFilterPanelHeader";
|
|
8
|
+
export * from "./features/search-filter/components/context/SearchFilterContext";
|
|
9
|
+
export * from "./features/search-filter/components/context/SearchFilterLocalStateContext";
|
|
8
10
|
export * from "./features/search-filter/config/SearchFilterConfig";
|
|
11
|
+
export * from "./features/search-filter/context/SearchFilterActionsContext";
|
|
12
|
+
export * from "./features/search-filter/context/SearchFilterModelContext";
|
|
13
|
+
export * from "./features/search-filter/context/SearchFilterStateContext";
|
|
14
|
+
export * from "./features/search-filter/context/SearchFilterDispatchContext";
|
|
9
15
|
export * from "./features/search-filter/hooks/UseLocalSearchFilterState";
|
|
10
16
|
export * from "./features/search-filter/redux/SearchFilterRedux";
|
|
11
17
|
export * from "./features/search-filter/types/FilterEntity";
|
|
12
18
|
export * from "./features/search-filter/features/chips/SearchFilterChips";
|
|
13
19
|
export * from "./features/search-filter/features/chips/SectionChips";
|
|
20
|
+
export * from "./features/search-filter/features/chips/SearchFilterChip";
|
|
21
|
+
export * from "./features/search-filter/features/chips/EmptyChip";
|
|
14
22
|
export * from "./features/search-filter/section-factories/boolean-record/BooleanRecordTypes";
|
|
15
23
|
export * from "./features/search-filter/section-factories/boolean-record/BooleanRecordChips";
|
|
16
24
|
export * from "./features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection";
|
|
17
25
|
export * from "./features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection";
|
|
18
|
-
export * from "./features/search-filter/section-factories/date-range/DateRangeTypes";
|
|
19
26
|
export * from "./features/search-filter/section-factories/date-range/DateRangeChips";
|
|
20
27
|
export * from "./features/search-filter/section-factories/date-range/DateRangePropsFactory";
|
|
21
28
|
export * from "./features/search-filter/section-factories/date-range/components/DateRangeCalendarSection";
|
package/dist/index.es.js
CHANGED
|
@@ -13,8 +13,7 @@ import { reducerIdGate, createValueByIdReducer, createEntityReducer, reducerIdGa
|
|
|
13
13
|
import styled from '@emotion/styled';
|
|
14
14
|
import { Checkbox } from '@stenajs-webui/forms';
|
|
15
15
|
import { ChipMultiSelect } from '@stenajs-webui/select';
|
|
16
|
-
import { DateRangeCalendar } from '@stenajs-webui/calendar';
|
|
17
|
-
import { parse, format } from 'date-fns';
|
|
16
|
+
import { stringsToDateRange, dateRangeToStrings, DateRangeCalendar } from '@stenajs-webui/calendar';
|
|
18
17
|
|
|
19
18
|
/*! *****************************************************************************
|
|
20
19
|
Copyright (c) Microsoft Corporation.
|
|
@@ -139,6 +138,23 @@ var formatColumnIdToHeaderCellLabel = function (columnId) {
|
|
|
139
138
|
return upperFirst(lowerCase(columnId));
|
|
140
139
|
};
|
|
141
140
|
|
|
141
|
+
var SearchFilterModelContext = createContext(null);
|
|
142
|
+
var useSearchFilterModel = function () {
|
|
143
|
+
var c = useContext(SearchFilterModelContext);
|
|
144
|
+
if (!c) {
|
|
145
|
+
throw new Error("Missing search filter context, wrap components with SearchFilterContext component.");
|
|
146
|
+
}
|
|
147
|
+
return c;
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
var SearchFilterContext = function SearchFilterScope(_a) {
|
|
151
|
+
var state = _a.state, dispatch = _a.dispatch, actions = _a.actions, children = _a.children;
|
|
152
|
+
return (React.createElement(SearchFilterDispatchContext.Provider, { value: dispatch },
|
|
153
|
+
React.createElement(SearchFilterActionsContext.Provider, { value: actions },
|
|
154
|
+
React.createElement(SearchFilterStateContext.Provider, { value: state },
|
|
155
|
+
React.createElement(SearchFilterModelContext.Provider, { value: state.formModel }, children)))));
|
|
156
|
+
};
|
|
157
|
+
|
|
142
158
|
var createSearchFilterInitialState = function (initialFormModel) { return ({
|
|
143
159
|
settings: {
|
|
144
160
|
open: false,
|
|
@@ -200,6 +216,12 @@ var useLocalSearchFilterState = function (initialState) {
|
|
|
200
216
|
};
|
|
201
217
|
};
|
|
202
218
|
|
|
219
|
+
var SearchFilterLocalStateContext = function SearchFilterLocalScope(_a) {
|
|
220
|
+
var initialFormModel = _a.initialFormModel, children = _a.children;
|
|
221
|
+
var _b = useLocalSearchFilterState(createSearchFilterInitialState(initialFormModel)), state = _b.state, actions = _b.actions, dispatch = _b.dispatch;
|
|
222
|
+
return (React.createElement(SearchFilterContext, { state: state, actions: actions, dispatch: dispatch }, children));
|
|
223
|
+
};
|
|
224
|
+
|
|
203
225
|
var ChipSpacer = styled.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n"], ["\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n"])));
|
|
204
226
|
var templateObject_1;
|
|
205
227
|
|
|
@@ -214,32 +236,49 @@ var SearchFilterChips = function (_a) {
|
|
|
214
236
|
React.createElement(FlatButton, { size: "small", label: "Clear all", onClick: onClickClearAll })))));
|
|
215
237
|
};
|
|
216
238
|
|
|
217
|
-
var
|
|
218
|
-
var
|
|
239
|
+
var EmptyChip = function EmptyChip(_a) {
|
|
240
|
+
var label = _a.label, sectionId = _a.sectionId;
|
|
241
|
+
var dispatch = useSearchFilterDispatch();
|
|
242
|
+
var actions = useSearchFilterActions();
|
|
243
|
+
var onClickLabel = useCallback(function () {
|
|
244
|
+
dispatch(actions.clearExpandedSections());
|
|
245
|
+
dispatch(actions.expandSection(sectionId));
|
|
246
|
+
dispatch(actions.openFilters());
|
|
247
|
+
}, [actions, dispatch, sectionId]);
|
|
248
|
+
return (React.createElement(ChipSpacer, null,
|
|
249
|
+
React.createElement(Chip, { label: label, variant: "secondary", onClick: onClickLabel })));
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
var SearchFilterChip = function SearchFilterChip(_a) {
|
|
253
|
+
var sectionId = _a.sectionId, label = _a.label, value = _a.value, onClickRemove = _a.onClickRemove;
|
|
219
254
|
var dispatch = useSearchFilterDispatch();
|
|
220
255
|
var actions = useSearchFilterActions();
|
|
221
256
|
var setFormModelFields = useCallback(function (fields) {
|
|
222
257
|
return dispatch(actions.setFormModelFields(fields));
|
|
223
258
|
}, [dispatch, actions]);
|
|
224
|
-
var
|
|
225
|
-
|
|
226
|
-
}, [
|
|
259
|
+
var onClickRemoveHandler = useCallback(function () {
|
|
260
|
+
onClickRemove === null || onClickRemove === void 0 ? void 0 : onClickRemove({ value: value, setFormModelFields: setFormModelFields });
|
|
261
|
+
}, [onClickRemove, setFormModelFields, value]);
|
|
227
262
|
var onClickLabel = useCallback(function () {
|
|
228
263
|
dispatch(actions.clearExpandedSections());
|
|
229
264
|
dispatch(actions.expandSection(sectionId));
|
|
230
265
|
dispatch(actions.openFilters());
|
|
231
266
|
}, [actions, dispatch, sectionId]);
|
|
267
|
+
return (React.createElement(ChipSpacer, null,
|
|
268
|
+
React.createElement(Chip, { label: label !== null && label !== void 0 ? label : sectionId, onClick: onClickLabel, onClickRemove: onClickRemove ? onClickRemoveHandler : undefined })));
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
var SectionChips = function SectionChips(_a) {
|
|
272
|
+
var sectionId = _a.sectionId, chips = _a.chips, emptyChipLabel = _a.emptyChipLabel, onClickRemoveOnChip = _a.onClickRemoveOnChip;
|
|
232
273
|
if (!(chips === null || chips === void 0 ? void 0 : chips.length)) {
|
|
233
274
|
if (!emptyChipLabel) {
|
|
234
275
|
return null;
|
|
235
276
|
}
|
|
236
|
-
return
|
|
237
|
-
React.createElement(Chip, { label: emptyChipLabel, variant: "secondary", onClick: onClickLabel })));
|
|
277
|
+
return React.createElement(EmptyChip, { sectionId: sectionId, label: emptyChipLabel });
|
|
238
278
|
}
|
|
239
279
|
return (React.createElement(React.Fragment, null, chips.map(function (_a) {
|
|
240
280
|
var label = _a.label, value = _a.value;
|
|
241
|
-
return (React.createElement(
|
|
242
|
-
React.createElement(Chip, { label: label !== null && label !== void 0 ? label : sectionId, onClick: onClickLabel, onClickRemove: disableChipClearButton ? undefined : function () { return onClickRemove(value); } })));
|
|
281
|
+
return (React.createElement(SearchFilterChip, { key: value, label: label !== null && label !== void 0 ? label : sectionId, sectionId: sectionId, onClickRemove: onClickRemoveOnChip, value: value }));
|
|
243
282
|
})));
|
|
244
283
|
};
|
|
245
284
|
|
|
@@ -267,8 +306,8 @@ var createOnClickRemoveOnChipForBooleanRecord = function (formModel, fieldName)
|
|
|
267
306
|
};
|
|
268
307
|
|
|
269
308
|
var SimpleCheckboxListSection = function (_a) {
|
|
270
|
-
var options = _a.options,
|
|
271
|
-
return (React.createElement(SearchFilterSection, {
|
|
309
|
+
var options = _a.options, value = _a.value, onValueChange = _a.onValueChange, sectionProps = __rest(_a, ["options", "value", "onValueChange"]);
|
|
310
|
+
return (React.createElement(SearchFilterSection, __assign({ disableContentPadding: true }, sectionProps),
|
|
272
311
|
React.createElement(Column, { maxHeight: "400px", overflowY: "auto", flex: 1 }, options === null || options === void 0 ? void 0 : options.map(function (d) { return (React.createElement(CollapsibleClickableContent, { key: d.value, onClick: function () {
|
|
273
312
|
var _a;
|
|
274
313
|
if (value && onValueChange) {
|
|
@@ -280,7 +319,7 @@ var SimpleCheckboxListSection = function (_a) {
|
|
|
280
319
|
};
|
|
281
320
|
|
|
282
321
|
var ChipMultiSelectSection = function (_a) {
|
|
283
|
-
var options = _a.options,
|
|
322
|
+
var options = _a.options, value = _a.value, noneSelectedLabel = _a.noneSelectedLabel, onValueChange = _a.onValueChange, sectionProps = __rest(_a, ["options", "value", "noneSelectedLabel", "onValueChange"]);
|
|
284
323
|
var _b = useState(""), text = _b[0], setText = _b[1];
|
|
285
324
|
var listValue = useMemo(function () {
|
|
286
325
|
return value
|
|
@@ -300,8 +339,8 @@ var ChipMultiSelectSection = function (_a) {
|
|
|
300
339
|
var onValueChangeInternal = useCallback(function (value) {
|
|
301
340
|
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(createBooleanRecordFromValue(value));
|
|
302
341
|
}, [onValueChange]);
|
|
303
|
-
return (React.createElement(SearchFilterSection, {
|
|
304
|
-
React.createElement(ChipMultiSelect, { options: filteredOptions, value: listValue, onValueChange: onValueChangeInternal, inputValue: text, onInputChange: setText })));
|
|
342
|
+
return (React.createElement(SearchFilterSection, __assign({}, sectionProps),
|
|
343
|
+
React.createElement(ChipMultiSelect, { options: filteredOptions, value: listValue, onValueChange: onValueChangeInternal, inputValue: text, noneSelectedLabel: noneSelectedLabel, onInputChange: setText, closeMenuOnSelect: false })));
|
|
305
344
|
};
|
|
306
345
|
var createBooleanRecordFromValue = function (value) {
|
|
307
346
|
return value.reduce(function (sum, item) {
|
|
@@ -355,20 +394,15 @@ var DateRangeCalendarSection = function (_a) {
|
|
|
355
394
|
var actions = useSearchFilterActions();
|
|
356
395
|
var options = useMemo(function () { return ({ dispatch: dispatch, actions: actions }); }, [actions, dispatch]);
|
|
357
396
|
var _b = useState("startDate"), focusedInput = _b[0], setFocusedInput = _b[1];
|
|
358
|
-
var
|
|
359
|
-
var
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
onValueChange({ startDate: format(startDate, "yyyy-MM-dd"), endDate: endDate }, options);
|
|
363
|
-
}, [endDate, onValueChange, options]);
|
|
364
|
-
var setEndDate = useCallback(function (endDate) {
|
|
365
|
-
onValueChange({ startDate: startDate, endDate: format(endDate, "yyyy-MM-dd") }, options);
|
|
366
|
-
}, [onValueChange, options, startDate]);
|
|
397
|
+
var dateRangeValue = useMemo(function () { return stringsToDateRange(value); }, [value]);
|
|
398
|
+
var onValueChangeHandler = useCallback(function (value) {
|
|
399
|
+
onValueChange(dateRangeToStrings(value), options);
|
|
400
|
+
}, [onValueChange, options]);
|
|
367
401
|
return (React.createElement(SearchFilterSection, { sectionId: sectionId },
|
|
368
402
|
React.createElement(Box, { flex: 1, alignItems: "center" },
|
|
369
403
|
React.createElement(Box, { background: "white", indent: true },
|
|
370
|
-
React.createElement(DateRangeCalendar, __assign({ setFocusedInput: setFocusedInput, focusedInput: focusedInput,
|
|
404
|
+
React.createElement(DateRangeCalendar, __assign({ setFocusedInput: setFocusedInput, focusedInput: focusedInput, value: dateRangeValue, onValueChange: onValueChangeHandler }, dateRangeCalendarProps))))));
|
|
371
405
|
};
|
|
372
406
|
|
|
373
|
-
export { ChipMultiSelectSection, DateRangeCalendarSection, SearchFilterButton, SearchFilterChips, SearchFilterDrawer, SearchFilterPanelHeader, SearchFilterSection, SectionChips, SimpleCheckboxListSection, createChipsForBooleanRecord, createChipsForDateRange, createChipsPropsForBooleanRecord, createChipsPropsForDateRange, createDateRangeSectionProps, createOnClickRemoveOnChipForBooleanRecord, createOnClickRemoveOnChipForDateRange, createSearchFilterActions, createSearchFilterInitialState, createSearchFilterReducer, formatColumnIdToHeaderCellLabel, getReducerIdFor, useLocalSearchFilterState };
|
|
407
|
+
export { ChipMultiSelectSection, DateRangeCalendarSection, EmptyChip, SearchFilterActionsContext, SearchFilterButton, SearchFilterChip, SearchFilterChips, SearchFilterContext, SearchFilterDispatchContext, SearchFilterDrawer, SearchFilterLocalStateContext, SearchFilterModelContext, SearchFilterPanelHeader, SearchFilterSection, SearchFilterStateContext, SectionChips, SimpleCheckboxListSection, createChipsForBooleanRecord, createChipsForDateRange, createChipsPropsForBooleanRecord, createChipsPropsForDateRange, createDateRangeSectionProps, createOnClickRemoveOnChipForBooleanRecord, createOnClickRemoveOnChipForDateRange, createSearchFilterActions, createSearchFilterInitialState, createSearchFilterReducer, formatColumnIdToHeaderCellLabel, getReducerIdFor, useLocalSearchFilterState, useSearchFilterActions, useSearchFilterDispatch, useSearchFilterModel, useSearchFilterState };
|
|
374
408
|
//# sourceMappingURL=index.es.js.map
|
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/features/search-filter/components/SearchFilterPanelHeader.tsx","../src/features/search-filter/context/SearchFilterStateContext.ts","../src/features/search-filter/context/SearchFilterDispatchContext.ts","../src/features/search-filter/context/SearchFilterActionsContext.ts","../src/features/search-filter/components/SearchFilterDrawer.tsx","../src/features/search-filter/components/SearchFilterButton.tsx","../src/features/search-filter/components/SearchFilterSection.tsx","../src/features/search-filter/redux/SearchFilterRedux.ts","../src/features/search-filter/hooks/UseLocalSearchFilterState.ts","../src/features/search-filter/features/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Heading, Indent, Row } from \"@stenajs-webui/core\";\nimport { FlatButton, Icon } from \"@stenajs-webui/elements\";\nimport { faTimes } from \"@fortawesome/free-solid-svg-icons/faTimes\";\nimport { faSlidersH } from \"@fortawesome/free-solid-svg-icons/faSlidersH\";\nimport { cssColor } from \"@stenajs-webui/theme\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n}\n\nexport const SearchFilterPanelHeader: React.FC<SearchFilterPanelHeaderProps> = ({\n onRequestClose,\n}) => {\n return (\n <Row\n height={\"48px\"}\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n indent={2}\n >\n <Row alignItems={\"center\"}>\n <Icon\n icon={faSlidersH}\n color={cssColor(\"--lhds-color-ui-500\")}\n size={12}\n />\n <Indent />\n <Heading variant={\"h4\"}>Filters</Heading>\n </Row>\n <FlatButton leftIcon={faTimes} onClick={onRequestClose} />\n </Row>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>((null as unknown) as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>((null as unknown) as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>((null as unknown) as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Column } from \"@stenajs-webui/core\";\nimport { SearchFilterPanelHeader } from \"./SearchFilterPanelHeader\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerProps\n extends Omit<DrawerProps, \"isOpen\" | \"onRequestClose\"> {}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n ...drawerProps\n}) => {\n const {\n settings: { open },\n } = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const closeDrawer = useCallback(() => {\n dispatch(actions.closeFilters());\n }, [actions, dispatch]);\n\n return (\n <Drawer\n background={cssColor(\"--lhds-color-ui-50\")}\n width={\"370px\"}\n isOpen={open}\n onRequestClose={closeDrawer}\n {...drawerProps}\n >\n <Column>\n <SearchFilterPanelHeader onRequestClose={closeDrawer} />\n {children}\n </Column>\n </Drawer>\n );\n};\n","import { faSlidersH } from \"@fortawesome/free-solid-svg-icons/faSlidersH\";\nimport { SecondaryButton } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n}\n\nexport const SearchFilterButton: React.VFC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickButton = useCallback(() => {\n dispatch(actions.openFilters());\n }, [actions, dispatch]);\n\n return (\n <SecondaryButton\n label={label}\n leftIcon={faSlidersH}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { Collapsible, CollapsibleContent } from \"@stenajs-webui/panels\";\nimport { lowerCase, upperFirst } from \"lodash\";\nimport { Banner, FlatButton, Spinner } from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n contentLeft?: React.ReactNode;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n label?: string;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n contentLeft,\n contentRight,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n}: PropsWithChildren<SearchFilterSectionProps<TSectionKey>>) {\n const state = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const expanded = state.expandedSections.values[sectionId] ?? false;\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.setSectionExpanded(sectionId, !expanded));\n }, [actions, dispatch, expanded, sectionId]);\n\n const activeLabel = label ?? formatColumnIdToHeaderCellLabel(sectionId);\n\n return (\n <Collapsible\n label={activeLabel}\n collapsed={!expanded}\n onClick={onClickLabel}\n contentLeft={contentLeft}\n contentRight={contentRight}\n >\n {loading ? (\n <CollapsibleContent>\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\n </CollapsibleContent>\n ) : error ? (\n <Banner\n variant={\"error\"}\n text={error}\n contentRight={\n onRetry ? <FlatButton label={\"Retry\"} onClick={onRetry} /> : null\n }\n />\n ) : disableContentPadding ? (\n children\n ) : (\n <CollapsibleContent>{children}</CollapsibleContent>\n )}\n </Collapsible>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { combineReducers } from \"redux\";\nimport {\n createEntityActions,\n createEntityReducer,\n createValueByIdActions,\n createValueByIdReducer,\n EntityAction,\n EntityState,\n reducerIdGate,\n reducerIdGateAction,\n ReducerIdGateAction,\n ValueByIdAction,\n ValueByIdState,\n} from \"@stenajs-webui/redux\";\nimport { Dispatch } from \"react\";\n\nexport interface SearchFilterSettings {\n open: boolean;\n}\n\nexport type SearchFilterDispatch<TFormModel> = Dispatch<\n SearchFilterAction<TFormModel>\n>;\n\nexport interface SearchFilterState<TFormModel> {\n expandedSections: ValueByIdState<boolean>;\n formModel: EntityState<TFormModel>;\n settings: EntityState<SearchFilterSettings>;\n}\n\nexport type SearchFilterAction<TFormModel> =\n | ReducerIdGateAction<ValueByIdAction<boolean>>\n | ReducerIdGateAction<EntityAction<TFormModel>>\n | ReducerIdGateAction<EntityAction<SearchFilterSettings>>;\n\nexport const createSearchFilterInitialState = <TFormModel>(\n initialFormModel: TFormModel\n): SearchFilterState<TFormModel> => ({\n settings: {\n open: false,\n },\n formModel: initialFormModel,\n expandedSections: { values: {} },\n});\n\nexport const createSearchFilterReducer = <TFormModel>(\n reducerId: string,\n initialState: SearchFilterState<TFormModel>\n) =>\n combineReducers({\n expandedSections: reducerIdGate(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdReducer<boolean>(initialState.expandedSections)\n ),\n formModel: reducerIdGate(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityReducer<TFormModel>(initialState.formModel)\n ),\n settings: reducerIdGate(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityReducer<SearchFilterSettings>(initialState.settings)\n ),\n });\n\nexport interface SearchFilterActions<TFormModel, TSectionKey extends string> {\n openFilters: () => SearchFilterAction<TFormModel>;\n closeFilters: () => SearchFilterAction<TFormModel>;\n setFormModelFields: (\n fields: Partial<TFormModel>\n ) => SearchFilterAction<TFormModel>;\n clearFormModel: () => SearchFilterAction<TFormModel>;\n expandSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n collapseSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n setSectionExpanded: (\n section: TSectionKey,\n expanded: boolean\n ) => SearchFilterAction<TFormModel>;\n clearExpandedSections: () => SearchFilterAction<TFormModel>;\n}\n\nexport const createSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>(\n reducerId: string,\n initialFormModel: TFormModel\n): SearchFilterActions<TFormModel, TSectionKey> => ({\n openFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: true,\n })\n ),\n closeFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: false,\n })\n ),\n setFormModelFields: (fields: Partial<TFormModel>) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntityFields(fields)\n ),\n clearFormModel: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntity(initialFormModel)\n ),\n expandSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, true)\n ),\n collapseSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, false)\n ),\n setSectionExpanded: (section: TSectionKey, expanded: boolean) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, expanded)\n ),\n clearExpandedSections: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().clearAllValues()\n ),\n});\n\nexport const getReducerIdFor = (\n reducerId: string,\n reducerIdSuffix: keyof SearchFilterState<unknown>\n): string => `${reducerId}.${reducerIdSuffix}`;\n","import {\n createSearchFilterActions,\n createSearchFilterReducer,\n SearchFilterState,\n} from \"../redux/SearchFilterRedux\";\nimport { useReducer, useState } from \"react\";\n\nexport const useLocalSearchFilterState = <\n TFormModel,\n TSectionKey extends string\n>(\n initialState: SearchFilterState<TFormModel>\n) => {\n const [reducer] = useState(() =>\n createSearchFilterReducer<TFormModel>(\"local\", initialState)\n );\n\n const [actions] = useState(() =>\n createSearchFilterActions<TFormModel, TSectionKey>(\n \"local\",\n initialState.formModel\n )\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return {\n actions,\n state,\n dispatch,\n };\n};\n","import styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n}\n\nexport const SearchFilterChips: React.FC<SearchFilterChipsProps> = ({\n children,\n disableClearAllButton = false,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickClearAll = useCallback(\n () => dispatch(actions.clearFormModel()),\n [actions, dispatch]\n );\n\n return (\n <Row flexWrap={\"wrap\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n disableChipClearButton?: boolean;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n disableChipClearButton,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemove = useCallback(\n (value: string) => {\n onClickRemoveOnChip?.({ value, setFormModelFields });\n },\n [onClickRemoveOnChip, setFormModelFields]\n );\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return (\n <ChipSpacer>\n <Chip\n label={emptyChipLabel}\n variant={\"secondary\"}\n onClick={onClickLabel}\n />\n </ChipSpacer>\n );\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <ChipSpacer key={value}>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={\n disableChipClearButton ? undefined : () => onClickRemove(value)\n }\n />\n </ChipSpacer>\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(formModel[fieldName], options),\n onClickRemoveOnChip: createOnClickRemoveOnChipForBooleanRecord(\n formModel,\n fieldName\n ),\n});\n\nexport const createChipsForBooleanRecord = (\n booleanRecord: BooleanRecord,\n options?: BooleanRecordOptions\n): Array<SearchFilterSectionChipModel> =>\n truthyKeysAsList(booleanRecord).map((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n });\n\nexport const createOnClickRemoveOnChipForBooleanRecord = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields, value }) => {\n const newRecord: BooleanRecord = { ...formModel[fieldName] };\n newRecord[value] = false;\n setFormModelFields(({\n [fieldName]: newRecord,\n } as unknown) as Partial<TFormModel>);\n };\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { Column, Text } from \"@stenajs-webui/core\";\nimport { CollapsibleClickableContent } from \"@stenajs-webui/panels\";\nimport { Checkbox, ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface CheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n error,\n loading,\n sectionId,\n value,\n onValueChange,\n}: CheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection\n sectionId={sectionId}\n loading={loading}\n error={error}\n disableContentPadding\n >\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1}>\n {options?.map((d) => (\n <CollapsibleClickableContent\n key={d.value}\n onClick={() => {\n if (value && onValueChange) {\n const sel = !value[d.value];\n onValueChange({\n ...value,\n [d.value]: sel,\n });\n }\n }}\n contentLeft={<Checkbox tabIndex={-1} value={value?.[d.value]} />}\n >\n <Text>{d.label}</Text>\n </CollapsibleClickableContent>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n error,\n loading,\n sectionId,\n value,\n onValueChange,\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection sectionId={sectionId} loading={loading} error={error}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n onInputChange={setText}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import { DateRange } from \"./DateRangeTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForDateRange = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForDateRange(\n formModel[startDateFieldName],\n formModel[endDateFieldName]\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForDateRange(\n startDateFieldName,\n endDateFieldName\n ),\n});\n\nexport const createChipsForDateRange = (\n startDate: string | undefined,\n endDate: string | undefined\n): Array<SearchFilterSectionChipModel> => {\n if (!startDate && !endDate) {\n return [];\n }\n return [\n { value: \"dateRange\", label: `${startDate ?? \"\"} - ${endDate ?? \"\"}` },\n ];\n};\n\nexport const createOnClickRemoveOnChipForDateRange = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, DateRange>\n>(\n startDateFieldName: TField,\n endDateFieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields }) => {\n setFormModelFields(({\n [startDateFieldName]: undefined,\n [endDateFieldName]: undefined,\n } as unknown) as Partial<TFormModel>);\n };\n};\n","import { PickByValue } from \"@stenajs-webui/core\";\nimport { DateRangeCalendarSectionProps } from \"./components/DateRangeCalendarSection\";\n\nexport const createDateRangeSectionProps = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>,\n TSectionKey extends string\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n DateRangeCalendarSectionProps<TFormModel, TSectionKey>,\n \"value\" | \"onValueChange\"\n> => ({\n value: {\n startDate: formModel[startDateFieldName],\n endDate: formModel[endDateFieldName],\n },\n onValueChange: (value, { dispatch, actions }) => {\n const fields: Partial<TFormModel> = {\n [startDateFieldName]: value.startDate,\n [endDateFieldName]: value.endDate,\n } as any;\n dispatch(actions.setFormModelFields(fields));\n },\n});\n","import {\n DateRangeCalendar,\n DateRangeCalendarProps,\n DateRangeFocusedInput,\n} from \"@stenajs-webui/calendar\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { Box } from \"@stenajs-webui/core\";\nimport { format, parse } from \"date-fns\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n} from \"../../../redux/SearchFilterRedux\";\nimport { useSearchFilterDispatch } from \"../../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../../context/SearchFilterActionsContext\";\n\ninterface DateRangeCalendarSectionOnChangeValue {\n startDate?: string;\n endDate?: string;\n}\n\nexport interface DateRangeCalendarSectionProps<\n TFormModel,\n TSectionKey extends string\n> extends SearchFilterSectionProps<TSectionKey>,\n Omit<\n DateRangeCalendarProps<{}>,\n | \"focusedInput\"\n | \"setFocusedInput\"\n | \"startDate\"\n | \"endDate\"\n | \"onChange\"\n | \"setStartDate\"\n | \"setEndDate\"\n > {\n value: DateRangeCalendarSectionOnChangeValue;\n onValueChange: (\n value: DateRangeCalendarSectionOnChangeValue,\n options: SetDateOptions<TFormModel, TSectionKey>\n ) => void;\n}\n\nexport interface SetDateOptions<TFormModel, TSectionKey extends string> {\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const DateRangeCalendarSection = <\n TFormModel,\n TSectionKey extends string\n>({\n value,\n onValueChange,\n sectionId,\n ...dateRangeCalendarProps\n}: DateRangeCalendarSectionProps<TFormModel, TSectionKey>) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions<TFormModel, TSectionKey>();\n\n const options = useMemo<SetDateOptions<TFormModel, TSectionKey>>(\n () => ({ dispatch, actions }),\n [actions, dispatch]\n );\n const [focusedInput, setFocusedInput] = useState<DateRangeFocusedInput>(\n \"startDate\"\n );\n\n const { startDate, endDate } = value ?? {};\n\n const startDateObj = useMemo(\n () => (startDate ? parse(startDate, \"yyyy-MM-dd\", new Date()) : undefined),\n [startDate]\n );\n\n const endDateObj = useMemo(\n () => (endDate ? parse(endDate, \"yyyy-MM-dd\", new Date()) : undefined),\n [endDate]\n );\n\n const setStartDate = useCallback(\n (startDate: Date) => {\n onValueChange(\n { startDate: format(startDate, \"yyyy-MM-dd\"), endDate },\n options\n );\n },\n [endDate, onValueChange, options]\n );\n\n const setEndDate = useCallback(\n (endDate: Date) => {\n onValueChange(\n { startDate, endDate: format(endDate, \"yyyy-MM-dd\") },\n options\n );\n },\n [onValueChange, options, startDate]\n );\n\n return (\n <SearchFilterSection sectionId={sectionId}>\n <Box flex={1} alignItems={\"center\"}>\n <Box background={\"white\"} indent>\n <DateRangeCalendar\n setFocusedInput={setFocusedInput}\n focusedInput={focusedInput}\n startDate={startDateObj}\n endDate={endDateObj}\n setStartDate={setStartDate}\n setEndDate={setEndDate}\n {...dateRangeCalendarProps}\n />\n </Box>\n </Box>\n </SearchFilterSection>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/features/search-filter/components/SearchFilterPanelHeader.tsx","../src/features/search-filter/context/SearchFilterStateContext.ts","../src/features/search-filter/context/SearchFilterDispatchContext.ts","../src/features/search-filter/context/SearchFilterActionsContext.ts","../src/features/search-filter/components/SearchFilterDrawer.tsx","../src/features/search-filter/components/SearchFilterButton.tsx","../src/features/search-filter/components/SearchFilterSection.tsx","../src/features/search-filter/context/SearchFilterModelContext.ts","../src/features/search-filter/components/context/SearchFilterContext.tsx","../src/features/search-filter/redux/SearchFilterRedux.ts","../src/features/search-filter/hooks/UseLocalSearchFilterState.ts","../src/features/search-filter/components/context/SearchFilterLocalStateContext.tsx","../src/features/search-filter/features/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/EmptyChip.tsx","../src/features/search-filter/features/chips/SearchFilterChip.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Heading, Indent, Row } from \"@stenajs-webui/core\";\nimport { FlatButton, Icon } from \"@stenajs-webui/elements\";\nimport { faTimes } from \"@fortawesome/free-solid-svg-icons/faTimes\";\nimport { faSlidersH } from \"@fortawesome/free-solid-svg-icons/faSlidersH\";\nimport { cssColor } from \"@stenajs-webui/theme\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n}\n\nexport const SearchFilterPanelHeader: React.FC<SearchFilterPanelHeaderProps> = ({\n onRequestClose,\n}) => {\n return (\n <Row\n height={\"48px\"}\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n indent={2}\n >\n <Row alignItems={\"center\"}>\n <Icon\n icon={faSlidersH}\n color={cssColor(\"--lhds-color-ui-500\")}\n size={12}\n />\n <Indent />\n <Heading variant={\"h4\"}>Filters</Heading>\n </Row>\n <FlatButton leftIcon={faTimes} onClick={onRequestClose} />\n </Row>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>((null as unknown) as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>((null as unknown) as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>((null as unknown) as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Column } from \"@stenajs-webui/core\";\nimport { SearchFilterPanelHeader } from \"./SearchFilterPanelHeader\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerProps\n extends Omit<DrawerProps, \"isOpen\" | \"onRequestClose\"> {}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n ...drawerProps\n}) => {\n const {\n settings: { open },\n } = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const closeDrawer = useCallback(() => {\n dispatch(actions.closeFilters());\n }, [actions, dispatch]);\n\n return (\n <Drawer\n background={cssColor(\"--lhds-color-ui-50\")}\n width={\"370px\"}\n isOpen={open}\n onRequestClose={closeDrawer}\n {...drawerProps}\n >\n <Column>\n <SearchFilterPanelHeader onRequestClose={closeDrawer} />\n {children}\n </Column>\n </Drawer>\n );\n};\n","import { faSlidersH } from \"@fortawesome/free-solid-svg-icons/faSlidersH\";\nimport { SecondaryButton } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n}\n\nexport const SearchFilterButton: React.VFC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickButton = useCallback(() => {\n dispatch(actions.openFilters());\n }, [actions, dispatch]);\n\n return (\n <SecondaryButton\n label={label}\n leftIcon={faSlidersH}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { Collapsible, CollapsibleContent } from \"@stenajs-webui/panels\";\nimport { lowerCase, upperFirst } from \"lodash\";\nimport { Banner, FlatButton, Spinner } from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n contentLeft?: React.ReactNode;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n label?: string;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n contentLeft,\n contentRight,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n}: PropsWithChildren<SearchFilterSectionProps<TSectionKey>>) {\n const state = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const expanded = state.expandedSections.values[sectionId] ?? false;\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.setSectionExpanded(sectionId, !expanded));\n }, [actions, dispatch, expanded, sectionId]);\n\n const activeLabel = label ?? formatColumnIdToHeaderCellLabel(sectionId);\n\n return (\n <Collapsible\n label={activeLabel}\n collapsed={!expanded}\n onClick={onClickLabel}\n contentLeft={contentLeft}\n contentRight={contentRight}\n >\n {loading ? (\n <CollapsibleContent>\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\n </CollapsibleContent>\n ) : error ? (\n <Banner\n variant={\"error\"}\n text={error}\n contentRight={\n onRetry ? <FlatButton label={\"Retry\"} onClick={onRetry} /> : null\n }\n />\n ) : disableContentPadding ? (\n children\n ) : (\n <CollapsibleContent>{children}</CollapsibleContent>\n )}\n </Collapsible>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { createContext, useContext } from \"react\";\n\nexport const SearchFilterModelContext = createContext<unknown>(null as unknown);\n\nexport const useSearchFilterModel = <TFormModel>(): TFormModel => {\n const c = useContext(SearchFilterModelContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as TFormModel;\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n SearchFilterState,\n} from \"../../redux/SearchFilterRedux\";\nimport { SearchFilterDispatchContext } from \"../../context/SearchFilterDispatchContext\";\nimport { SearchFilterActionsContext } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterStateContext } from \"../../context/SearchFilterStateContext\";\nimport { SearchFilterModelContext } from \"../../context/SearchFilterModelContext\";\n\ninterface SearchFilterScopeProps<TFormModel, TSectionKey extends string> {\n state: SearchFilterState<TFormModel>;\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const SearchFilterContext = function SearchFilterScope<\n TFormModel,\n TSectionKey extends string\n>({\n state,\n dispatch,\n actions,\n children,\n}: PropsWithChildren<SearchFilterScopeProps<TFormModel, TSectionKey>>) {\n return (\n <SearchFilterDispatchContext.Provider\n value={dispatch as SearchFilterDispatch<unknown>}\n >\n <SearchFilterActionsContext.Provider value={actions}>\n <SearchFilterStateContext.Provider value={state}>\n <SearchFilterModelContext.Provider value={state.formModel}>\n {children}\n </SearchFilterModelContext.Provider>\n </SearchFilterStateContext.Provider>\n </SearchFilterActionsContext.Provider>\n </SearchFilterDispatchContext.Provider>\n );\n};\n","import { combineReducers } from \"redux\";\nimport {\n createEntityActions,\n createEntityReducer,\n createValueByIdActions,\n createValueByIdReducer,\n EntityAction,\n EntityState,\n reducerIdGate,\n reducerIdGateAction,\n ReducerIdGateAction,\n ValueByIdAction,\n ValueByIdState,\n} from \"@stenajs-webui/redux\";\nimport { Dispatch } from \"react\";\n\nexport interface SearchFilterSettings {\n open: boolean;\n}\n\nexport type SearchFilterDispatch<TFormModel> = Dispatch<\n SearchFilterAction<TFormModel>\n>;\n\nexport interface SearchFilterState<TFormModel> {\n expandedSections: ValueByIdState<boolean>;\n formModel: EntityState<TFormModel>;\n settings: EntityState<SearchFilterSettings>;\n}\n\nexport type SearchFilterAction<TFormModel> =\n | ReducerIdGateAction<ValueByIdAction<boolean>>\n | ReducerIdGateAction<EntityAction<TFormModel>>\n | ReducerIdGateAction<EntityAction<SearchFilterSettings>>;\n\nexport const createSearchFilterInitialState = <TFormModel>(\n initialFormModel: TFormModel\n): SearchFilterState<TFormModel> => ({\n settings: {\n open: false,\n },\n formModel: initialFormModel,\n expandedSections: { values: {} },\n});\n\nexport const createSearchFilterReducer = <TFormModel>(\n reducerId: string,\n initialState: SearchFilterState<TFormModel>\n) =>\n combineReducers({\n expandedSections: reducerIdGate(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdReducer<boolean>(initialState.expandedSections)\n ),\n formModel: reducerIdGate(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityReducer<TFormModel>(initialState.formModel)\n ),\n settings: reducerIdGate(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityReducer<SearchFilterSettings>(initialState.settings)\n ),\n });\n\nexport interface SearchFilterActions<TFormModel, TSectionKey extends string> {\n openFilters: () => SearchFilterAction<TFormModel>;\n closeFilters: () => SearchFilterAction<TFormModel>;\n setFormModelFields: (\n fields: Partial<TFormModel>\n ) => SearchFilterAction<TFormModel>;\n clearFormModel: () => SearchFilterAction<TFormModel>;\n expandSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n collapseSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n setSectionExpanded: (\n section: TSectionKey,\n expanded: boolean\n ) => SearchFilterAction<TFormModel>;\n clearExpandedSections: () => SearchFilterAction<TFormModel>;\n}\n\nexport const createSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>(\n reducerId: string,\n initialFormModel: TFormModel\n): SearchFilterActions<TFormModel, TSectionKey> => ({\n openFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: true,\n })\n ),\n closeFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: false,\n })\n ),\n setFormModelFields: (fields: Partial<TFormModel>) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntityFields(fields)\n ),\n clearFormModel: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntity(initialFormModel)\n ),\n expandSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, true)\n ),\n collapseSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, false)\n ),\n setSectionExpanded: (section: TSectionKey, expanded: boolean) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, expanded)\n ),\n clearExpandedSections: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().clearAllValues()\n ),\n});\n\nexport const getReducerIdFor = (\n reducerId: string,\n reducerIdSuffix: keyof SearchFilterState<unknown>\n): string => `${reducerId}.${reducerIdSuffix}`;\n","import {\n createSearchFilterActions,\n createSearchFilterReducer,\n SearchFilterState,\n} from \"../redux/SearchFilterRedux\";\nimport { useReducer, useState } from \"react\";\n\nexport const useLocalSearchFilterState = <\n TFormModel,\n TSectionKey extends string\n>(\n initialState: SearchFilterState<TFormModel>\n) => {\n const [reducer] = useState(() =>\n createSearchFilterReducer<TFormModel>(\"local\", initialState)\n );\n\n const [actions] = useState(() =>\n createSearchFilterActions<TFormModel, TSectionKey>(\n \"local\",\n initialState.formModel\n )\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return {\n actions,\n state,\n dispatch,\n };\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { useLocalSearchFilterState } from \"../../hooks/UseLocalSearchFilterState\";\nimport { SearchFilterContext } from \"./SearchFilterContext\";\nimport { createSearchFilterInitialState } from \"../../redux/SearchFilterRedux\";\n\ninterface SearchFilterLocalScopeProps<TFormModel> {\n initialFormModel: TFormModel;\n}\n\nexport const SearchFilterLocalStateContext = function SearchFilterLocalScope<\n TFormModel\n>({\n initialFormModel,\n children,\n}: PropsWithChildren<SearchFilterLocalScopeProps<TFormModel>>) {\n const { state, actions, dispatch } = useLocalSearchFilterState(\n createSearchFilterInitialState(initialFormModel)\n );\n\n return (\n <SearchFilterContext state={state} actions={actions} dispatch={dispatch}>\n {children}\n </SearchFilterContext>\n );\n};\n","import styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n}\n\nexport const SearchFilterChips: React.FC<SearchFilterChipsProps> = ({\n children,\n disableClearAllButton = false,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickClearAll = useCallback(\n () => dispatch(actions.clearFormModel()),\n [actions, dispatch]\n );\n\n return (\n <Row flexWrap={\"wrap\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface EmptyChipProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label: string;\n}\n\nexport const EmptyChip = function EmptyChip<TSectionKey extends string>({\n label,\n sectionId,\n}: EmptyChipProps<TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterSectionOnClickRemoveOnChip } from \"../../config/SearchFilterConfig\";\n\ninterface SearchFilterChipProps<TFormModel, TSectionKey> {\n sectionId: TSectionKey;\n label: string;\n value: string;\n onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SearchFilterChip = function SearchFilterChip<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n label,\n value,\n onClickRemove,\n}: SearchFilterChipProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemoveHandler = useCallback(() => {\n onClickRemove?.({ value, setFormModelFields });\n }, [onClickRemove, setFormModelFields, value]);\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { EmptyChip } from \"./EmptyChip\";\nimport { SearchFilterChip } from \"./SearchFilterChip\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return <EmptyChip sectionId={sectionId} label={emptyChipLabel} />;\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <SearchFilterChip\n key={value}\n label={label ?? sectionId}\n sectionId={sectionId}\n onClickRemove={onClickRemoveOnChip}\n value={value}\n />\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(formModel[fieldName], options),\n onClickRemoveOnChip: createOnClickRemoveOnChipForBooleanRecord(\n formModel,\n fieldName\n ),\n});\n\nexport const createChipsForBooleanRecord = (\n booleanRecord: BooleanRecord,\n options?: BooleanRecordOptions\n): Array<SearchFilterSectionChipModel> =>\n truthyKeysAsList(booleanRecord).map((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n });\n\nexport const createOnClickRemoveOnChipForBooleanRecord = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields, value }) => {\n const newRecord: BooleanRecord = { ...formModel[fieldName] };\n newRecord[value] = false;\n setFormModelFields(({\n [fieldName]: newRecord,\n } as unknown) as Partial<TFormModel>);\n };\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { Column, Text } from \"@stenajs-webui/core\";\nimport { CollapsibleClickableContent } from \"@stenajs-webui/panels\";\nimport { Checkbox, ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface SimpleCheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n value,\n onValueChange,\n ...sectionProps\n}: SimpleCheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection disableContentPadding {...sectionProps}>\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1}>\n {options?.map((d) => (\n <CollapsibleClickableContent\n key={d.value}\n onClick={() => {\n if (value && onValueChange) {\n const sel = !value[d.value];\n onValueChange({\n ...value,\n [d.value]: sel,\n });\n }\n }}\n contentLeft={<Checkbox tabIndex={-1} value={value?.[d.value]} />}\n >\n <Text>{d.label}</Text>\n </CollapsibleClickableContent>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n noneSelectedLabel?: string;\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n value,\n noneSelectedLabel,\n onValueChange,\n ...sectionProps\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection {...sectionProps}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n noneSelectedLabel={noneSelectedLabel}\n onInputChange={setText}\n closeMenuOnSelect={false}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import { DateStringRange } from \"@stenajs-webui/calendar\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForDateRange = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForDateRange(\n formModel[startDateFieldName],\n formModel[endDateFieldName]\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForDateRange(\n startDateFieldName,\n endDateFieldName\n ),\n});\n\nexport const createChipsForDateRange = (\n startDate: string | undefined,\n endDate: string | undefined\n): Array<SearchFilterSectionChipModel> => {\n if (!startDate && !endDate) {\n return [];\n }\n return [\n { value: \"dateRange\", label: `${startDate ?? \"\"} - ${endDate ?? \"\"}` },\n ];\n};\n\nexport const createOnClickRemoveOnChipForDateRange = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, DateStringRange>\n>(\n startDateFieldName: TField,\n endDateFieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields }) => {\n setFormModelFields(({\n [startDateFieldName]: undefined,\n [endDateFieldName]: undefined,\n } as unknown) as Partial<TFormModel>);\n };\n};\n","import { PickByValue } from \"@stenajs-webui/core\";\nimport { DateRangeCalendarSectionProps } from \"./components/DateRangeCalendarSection\";\n\nexport const createDateRangeSectionProps = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>,\n TSectionKey extends string\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n DateRangeCalendarSectionProps<TFormModel, TSectionKey>,\n \"value\" | \"onValueChange\"\n> => ({\n value: {\n startDate: formModel[startDateFieldName],\n endDate: formModel[endDateFieldName],\n },\n onValueChange: (value, { dispatch, actions }) => {\n const fields: Partial<TFormModel> = {\n [startDateFieldName]: value.startDate,\n [endDateFieldName]: value.endDate,\n } as any;\n dispatch(actions.setFormModelFields(fields));\n },\n});\n","import {\n DateRange,\n DateRangeCalendar,\n DateRangeCalendarProps,\n DateRangeFocusedInput,\n dateRangeToStrings,\n DateStringRange,\n stringsToDateRange,\n} from \"@stenajs-webui/calendar\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { Box } from \"@stenajs-webui/core\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n} from \"../../../redux/SearchFilterRedux\";\nimport { useSearchFilterDispatch } from \"../../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../../context/SearchFilterActionsContext\";\n\nexport interface DateRangeCalendarSectionProps<\n TFormModel,\n TSectionKey extends string\n> extends SearchFilterSectionProps<TSectionKey>,\n Omit<\n DateRangeCalendarProps<{}>,\n \"value\" | \"onValueChange\" | \"focusedInput\" | \"setFocusedInput\"\n > {\n value: DateStringRange;\n onValueChange: (\n value: DateStringRange,\n options: SetDateOptions<TFormModel, TSectionKey>\n ) => void;\n}\n\nexport interface SetDateOptions<TFormModel, TSectionKey extends string> {\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const DateRangeCalendarSection = <\n TFormModel,\n TSectionKey extends string\n>({\n value,\n onValueChange,\n sectionId,\n ...dateRangeCalendarProps\n}: DateRangeCalendarSectionProps<TFormModel, TSectionKey>) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions<TFormModel, TSectionKey>();\n\n const options = useMemo<SetDateOptions<TFormModel, TSectionKey>>(\n () => ({ dispatch, actions }),\n [actions, dispatch]\n );\n const [focusedInput, setFocusedInput] = useState<DateRangeFocusedInput>(\n \"startDate\"\n );\n\n const dateRangeValue = useMemo(() => stringsToDateRange(value), [value]);\n\n const onValueChangeHandler = useCallback(\n (value: DateRange) => {\n onValueChange(dateRangeToStrings(value), options);\n },\n [onValueChange, options]\n );\n\n return (\n <SearchFilterSection sectionId={sectionId}>\n <Box flex={1} alignItems={\"center\"}>\n <Box background={\"white\"} indent>\n <DateRangeCalendar\n setFocusedInput={setFocusedInput}\n focusedInput={focusedInput}\n value={dateRangeValue}\n onValueChange={onValueChangeHandler}\n {...dateRangeCalendarProps}\n />\n </Box>\n </Box>\n </SearchFilterSection>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,7 +17,6 @@ var styled = require('@emotion/styled');
|
|
|
17
17
|
var forms = require('@stenajs-webui/forms');
|
|
18
18
|
var select = require('@stenajs-webui/select');
|
|
19
19
|
var calendar = require('@stenajs-webui/calendar');
|
|
20
|
-
var dateFns = require('date-fns');
|
|
21
20
|
|
|
22
21
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
23
22
|
|
|
@@ -165,6 +164,23 @@ var formatColumnIdToHeaderCellLabel = function (columnId) {
|
|
|
165
164
|
return lodash.upperFirst(lodash.lowerCase(columnId));
|
|
166
165
|
};
|
|
167
166
|
|
|
167
|
+
var SearchFilterModelContext = React.createContext(null);
|
|
168
|
+
var useSearchFilterModel = function () {
|
|
169
|
+
var c = React.useContext(SearchFilterModelContext);
|
|
170
|
+
if (!c) {
|
|
171
|
+
throw new Error("Missing search filter context, wrap components with SearchFilterContext component.");
|
|
172
|
+
}
|
|
173
|
+
return c;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
var SearchFilterContext = function SearchFilterScope(_a) {
|
|
177
|
+
var state = _a.state, dispatch = _a.dispatch, actions = _a.actions, children = _a.children;
|
|
178
|
+
return (React__namespace.createElement(SearchFilterDispatchContext.Provider, { value: dispatch },
|
|
179
|
+
React__namespace.createElement(SearchFilterActionsContext.Provider, { value: actions },
|
|
180
|
+
React__namespace.createElement(SearchFilterStateContext.Provider, { value: state },
|
|
181
|
+
React__namespace.createElement(SearchFilterModelContext.Provider, { value: state.formModel }, children)))));
|
|
182
|
+
};
|
|
183
|
+
|
|
168
184
|
var createSearchFilterInitialState = function (initialFormModel) { return ({
|
|
169
185
|
settings: {
|
|
170
186
|
open: false,
|
|
@@ -226,6 +242,12 @@ var useLocalSearchFilterState = function (initialState) {
|
|
|
226
242
|
};
|
|
227
243
|
};
|
|
228
244
|
|
|
245
|
+
var SearchFilterLocalStateContext = function SearchFilterLocalScope(_a) {
|
|
246
|
+
var initialFormModel = _a.initialFormModel, children = _a.children;
|
|
247
|
+
var _b = useLocalSearchFilterState(createSearchFilterInitialState(initialFormModel)), state = _b.state, actions = _b.actions, dispatch = _b.dispatch;
|
|
248
|
+
return (React__namespace.createElement(SearchFilterContext, { state: state, actions: actions, dispatch: dispatch }, children));
|
|
249
|
+
};
|
|
250
|
+
|
|
229
251
|
var ChipSpacer = styled__default["default"].div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n"], ["\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n"])));
|
|
230
252
|
var templateObject_1;
|
|
231
253
|
|
|
@@ -240,32 +262,49 @@ var SearchFilterChips = function (_a) {
|
|
|
240
262
|
React__namespace.createElement(elements.FlatButton, { size: "small", label: "Clear all", onClick: onClickClearAll })))));
|
|
241
263
|
};
|
|
242
264
|
|
|
243
|
-
var
|
|
244
|
-
var
|
|
265
|
+
var EmptyChip = function EmptyChip(_a) {
|
|
266
|
+
var label = _a.label, sectionId = _a.sectionId;
|
|
267
|
+
var dispatch = useSearchFilterDispatch();
|
|
268
|
+
var actions = useSearchFilterActions();
|
|
269
|
+
var onClickLabel = React.useCallback(function () {
|
|
270
|
+
dispatch(actions.clearExpandedSections());
|
|
271
|
+
dispatch(actions.expandSection(sectionId));
|
|
272
|
+
dispatch(actions.openFilters());
|
|
273
|
+
}, [actions, dispatch, sectionId]);
|
|
274
|
+
return (React__namespace.createElement(ChipSpacer, null,
|
|
275
|
+
React__namespace.createElement(elements.Chip, { label: label, variant: "secondary", onClick: onClickLabel })));
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
var SearchFilterChip = function SearchFilterChip(_a) {
|
|
279
|
+
var sectionId = _a.sectionId, label = _a.label, value = _a.value, onClickRemove = _a.onClickRemove;
|
|
245
280
|
var dispatch = useSearchFilterDispatch();
|
|
246
281
|
var actions = useSearchFilterActions();
|
|
247
282
|
var setFormModelFields = React.useCallback(function (fields) {
|
|
248
283
|
return dispatch(actions.setFormModelFields(fields));
|
|
249
284
|
}, [dispatch, actions]);
|
|
250
|
-
var
|
|
251
|
-
|
|
252
|
-
}, [
|
|
285
|
+
var onClickRemoveHandler = React.useCallback(function () {
|
|
286
|
+
onClickRemove === null || onClickRemove === void 0 ? void 0 : onClickRemove({ value: value, setFormModelFields: setFormModelFields });
|
|
287
|
+
}, [onClickRemove, setFormModelFields, value]);
|
|
253
288
|
var onClickLabel = React.useCallback(function () {
|
|
254
289
|
dispatch(actions.clearExpandedSections());
|
|
255
290
|
dispatch(actions.expandSection(sectionId));
|
|
256
291
|
dispatch(actions.openFilters());
|
|
257
292
|
}, [actions, dispatch, sectionId]);
|
|
293
|
+
return (React__namespace.createElement(ChipSpacer, null,
|
|
294
|
+
React__namespace.createElement(elements.Chip, { label: label !== null && label !== void 0 ? label : sectionId, onClick: onClickLabel, onClickRemove: onClickRemove ? onClickRemoveHandler : undefined })));
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
var SectionChips = function SectionChips(_a) {
|
|
298
|
+
var sectionId = _a.sectionId, chips = _a.chips, emptyChipLabel = _a.emptyChipLabel, onClickRemoveOnChip = _a.onClickRemoveOnChip;
|
|
258
299
|
if (!(chips === null || chips === void 0 ? void 0 : chips.length)) {
|
|
259
300
|
if (!emptyChipLabel) {
|
|
260
301
|
return null;
|
|
261
302
|
}
|
|
262
|
-
return
|
|
263
|
-
React__namespace.createElement(elements.Chip, { label: emptyChipLabel, variant: "secondary", onClick: onClickLabel })));
|
|
303
|
+
return React__namespace.createElement(EmptyChip, { sectionId: sectionId, label: emptyChipLabel });
|
|
264
304
|
}
|
|
265
305
|
return (React__namespace.createElement(React__namespace.Fragment, null, chips.map(function (_a) {
|
|
266
306
|
var label = _a.label, value = _a.value;
|
|
267
|
-
return (React__namespace.createElement(
|
|
268
|
-
React__namespace.createElement(elements.Chip, { label: label !== null && label !== void 0 ? label : sectionId, onClick: onClickLabel, onClickRemove: disableChipClearButton ? undefined : function () { return onClickRemove(value); } })));
|
|
307
|
+
return (React__namespace.createElement(SearchFilterChip, { key: value, label: label !== null && label !== void 0 ? label : sectionId, sectionId: sectionId, onClickRemove: onClickRemoveOnChip, value: value }));
|
|
269
308
|
})));
|
|
270
309
|
};
|
|
271
310
|
|
|
@@ -293,8 +332,8 @@ var createOnClickRemoveOnChipForBooleanRecord = function (formModel, fieldName)
|
|
|
293
332
|
};
|
|
294
333
|
|
|
295
334
|
var SimpleCheckboxListSection = function (_a) {
|
|
296
|
-
var options = _a.options,
|
|
297
|
-
return (React__namespace.createElement(SearchFilterSection, {
|
|
335
|
+
var options = _a.options, value = _a.value, onValueChange = _a.onValueChange, sectionProps = __rest(_a, ["options", "value", "onValueChange"]);
|
|
336
|
+
return (React__namespace.createElement(SearchFilterSection, __assign({ disableContentPadding: true }, sectionProps),
|
|
298
337
|
React__namespace.createElement(core.Column, { maxHeight: "400px", overflowY: "auto", flex: 1 }, options === null || options === void 0 ? void 0 : options.map(function (d) { return (React__namespace.createElement(panels.CollapsibleClickableContent, { key: d.value, onClick: function () {
|
|
299
338
|
var _a;
|
|
300
339
|
if (value && onValueChange) {
|
|
@@ -306,7 +345,7 @@ var SimpleCheckboxListSection = function (_a) {
|
|
|
306
345
|
};
|
|
307
346
|
|
|
308
347
|
var ChipMultiSelectSection = function (_a) {
|
|
309
|
-
var options = _a.options,
|
|
348
|
+
var options = _a.options, value = _a.value, noneSelectedLabel = _a.noneSelectedLabel, onValueChange = _a.onValueChange, sectionProps = __rest(_a, ["options", "value", "noneSelectedLabel", "onValueChange"]);
|
|
310
349
|
var _b = React.useState(""), text = _b[0], setText = _b[1];
|
|
311
350
|
var listValue = React.useMemo(function () {
|
|
312
351
|
return value
|
|
@@ -326,8 +365,8 @@ var ChipMultiSelectSection = function (_a) {
|
|
|
326
365
|
var onValueChangeInternal = React.useCallback(function (value) {
|
|
327
366
|
onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(createBooleanRecordFromValue(value));
|
|
328
367
|
}, [onValueChange]);
|
|
329
|
-
return (React__namespace.createElement(SearchFilterSection, {
|
|
330
|
-
React__namespace.createElement(select.ChipMultiSelect, { options: filteredOptions, value: listValue, onValueChange: onValueChangeInternal, inputValue: text, onInputChange: setText })));
|
|
368
|
+
return (React__namespace.createElement(SearchFilterSection, __assign({}, sectionProps),
|
|
369
|
+
React__namespace.createElement(select.ChipMultiSelect, { options: filteredOptions, value: listValue, onValueChange: onValueChangeInternal, inputValue: text, noneSelectedLabel: noneSelectedLabel, onInputChange: setText, closeMenuOnSelect: false })));
|
|
331
370
|
};
|
|
332
371
|
var createBooleanRecordFromValue = function (value) {
|
|
333
372
|
return value.reduce(function (sum, item) {
|
|
@@ -381,28 +420,31 @@ var DateRangeCalendarSection = function (_a) {
|
|
|
381
420
|
var actions = useSearchFilterActions();
|
|
382
421
|
var options = React.useMemo(function () { return ({ dispatch: dispatch, actions: actions }); }, [actions, dispatch]);
|
|
383
422
|
var _b = React.useState("startDate"), focusedInput = _b[0], setFocusedInput = _b[1];
|
|
384
|
-
var
|
|
385
|
-
var
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
onValueChange({ startDate: dateFns.format(startDate, "yyyy-MM-dd"), endDate: endDate }, options);
|
|
389
|
-
}, [endDate, onValueChange, options]);
|
|
390
|
-
var setEndDate = React.useCallback(function (endDate) {
|
|
391
|
-
onValueChange({ startDate: startDate, endDate: dateFns.format(endDate, "yyyy-MM-dd") }, options);
|
|
392
|
-
}, [onValueChange, options, startDate]);
|
|
423
|
+
var dateRangeValue = React.useMemo(function () { return calendar.stringsToDateRange(value); }, [value]);
|
|
424
|
+
var onValueChangeHandler = React.useCallback(function (value) {
|
|
425
|
+
onValueChange(calendar.dateRangeToStrings(value), options);
|
|
426
|
+
}, [onValueChange, options]);
|
|
393
427
|
return (React__namespace.createElement(SearchFilterSection, { sectionId: sectionId },
|
|
394
428
|
React__namespace.createElement(core.Box, { flex: 1, alignItems: "center" },
|
|
395
429
|
React__namespace.createElement(core.Box, { background: "white", indent: true },
|
|
396
|
-
React__namespace.createElement(calendar.DateRangeCalendar, __assign({ setFocusedInput: setFocusedInput, focusedInput: focusedInput,
|
|
430
|
+
React__namespace.createElement(calendar.DateRangeCalendar, __assign({ setFocusedInput: setFocusedInput, focusedInput: focusedInput, value: dateRangeValue, onValueChange: onValueChangeHandler }, dateRangeCalendarProps))))));
|
|
397
431
|
};
|
|
398
432
|
|
|
399
433
|
exports.ChipMultiSelectSection = ChipMultiSelectSection;
|
|
400
434
|
exports.DateRangeCalendarSection = DateRangeCalendarSection;
|
|
435
|
+
exports.EmptyChip = EmptyChip;
|
|
436
|
+
exports.SearchFilterActionsContext = SearchFilterActionsContext;
|
|
401
437
|
exports.SearchFilterButton = SearchFilterButton;
|
|
438
|
+
exports.SearchFilterChip = SearchFilterChip;
|
|
402
439
|
exports.SearchFilterChips = SearchFilterChips;
|
|
440
|
+
exports.SearchFilterContext = SearchFilterContext;
|
|
441
|
+
exports.SearchFilterDispatchContext = SearchFilterDispatchContext;
|
|
403
442
|
exports.SearchFilterDrawer = SearchFilterDrawer;
|
|
443
|
+
exports.SearchFilterLocalStateContext = SearchFilterLocalStateContext;
|
|
444
|
+
exports.SearchFilterModelContext = SearchFilterModelContext;
|
|
404
445
|
exports.SearchFilterPanelHeader = SearchFilterPanelHeader;
|
|
405
446
|
exports.SearchFilterSection = SearchFilterSection;
|
|
447
|
+
exports.SearchFilterStateContext = SearchFilterStateContext;
|
|
406
448
|
exports.SectionChips = SectionChips;
|
|
407
449
|
exports.SimpleCheckboxListSection = SimpleCheckboxListSection;
|
|
408
450
|
exports.createChipsForBooleanRecord = createChipsForBooleanRecord;
|
|
@@ -418,4 +460,8 @@ exports.createSearchFilterReducer = createSearchFilterReducer;
|
|
|
418
460
|
exports.formatColumnIdToHeaderCellLabel = formatColumnIdToHeaderCellLabel;
|
|
419
461
|
exports.getReducerIdFor = getReducerIdFor;
|
|
420
462
|
exports.useLocalSearchFilterState = useLocalSearchFilterState;
|
|
463
|
+
exports.useSearchFilterActions = useSearchFilterActions;
|
|
464
|
+
exports.useSearchFilterDispatch = useSearchFilterDispatch;
|
|
465
|
+
exports.useSearchFilterModel = useSearchFilterModel;
|
|
466
|
+
exports.useSearchFilterState = useSearchFilterState;
|
|
421
467
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/features/search-filter/components/SearchFilterPanelHeader.tsx","../src/features/search-filter/context/SearchFilterStateContext.ts","../src/features/search-filter/context/SearchFilterDispatchContext.ts","../src/features/search-filter/context/SearchFilterActionsContext.ts","../src/features/search-filter/components/SearchFilterDrawer.tsx","../src/features/search-filter/components/SearchFilterButton.tsx","../src/features/search-filter/components/SearchFilterSection.tsx","../src/features/search-filter/redux/SearchFilterRedux.ts","../src/features/search-filter/hooks/UseLocalSearchFilterState.ts","../src/features/search-filter/features/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Heading, Indent, Row } from \"@stenajs-webui/core\";\nimport { FlatButton, Icon } from \"@stenajs-webui/elements\";\nimport { faTimes } from \"@fortawesome/free-solid-svg-icons/faTimes\";\nimport { faSlidersH } from \"@fortawesome/free-solid-svg-icons/faSlidersH\";\nimport { cssColor } from \"@stenajs-webui/theme\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n}\n\nexport const SearchFilterPanelHeader: React.FC<SearchFilterPanelHeaderProps> = ({\n onRequestClose,\n}) => {\n return (\n <Row\n height={\"48px\"}\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n indent={2}\n >\n <Row alignItems={\"center\"}>\n <Icon\n icon={faSlidersH}\n color={cssColor(\"--lhds-color-ui-500\")}\n size={12}\n />\n <Indent />\n <Heading variant={\"h4\"}>Filters</Heading>\n </Row>\n <FlatButton leftIcon={faTimes} onClick={onRequestClose} />\n </Row>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>((null as unknown) as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>((null as unknown) as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>((null as unknown) as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Column } from \"@stenajs-webui/core\";\nimport { SearchFilterPanelHeader } from \"./SearchFilterPanelHeader\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerProps\n extends Omit<DrawerProps, \"isOpen\" | \"onRequestClose\"> {}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n ...drawerProps\n}) => {\n const {\n settings: { open },\n } = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const closeDrawer = useCallback(() => {\n dispatch(actions.closeFilters());\n }, [actions, dispatch]);\n\n return (\n <Drawer\n background={cssColor(\"--lhds-color-ui-50\")}\n width={\"370px\"}\n isOpen={open}\n onRequestClose={closeDrawer}\n {...drawerProps}\n >\n <Column>\n <SearchFilterPanelHeader onRequestClose={closeDrawer} />\n {children}\n </Column>\n </Drawer>\n );\n};\n","import { faSlidersH } from \"@fortawesome/free-solid-svg-icons/faSlidersH\";\nimport { SecondaryButton } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n}\n\nexport const SearchFilterButton: React.VFC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickButton = useCallback(() => {\n dispatch(actions.openFilters());\n }, [actions, dispatch]);\n\n return (\n <SecondaryButton\n label={label}\n leftIcon={faSlidersH}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { Collapsible, CollapsibleContent } from \"@stenajs-webui/panels\";\nimport { lowerCase, upperFirst } from \"lodash\";\nimport { Banner, FlatButton, Spinner } from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n contentLeft?: React.ReactNode;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n label?: string;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n contentLeft,\n contentRight,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n}: PropsWithChildren<SearchFilterSectionProps<TSectionKey>>) {\n const state = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const expanded = state.expandedSections.values[sectionId] ?? false;\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.setSectionExpanded(sectionId, !expanded));\n }, [actions, dispatch, expanded, sectionId]);\n\n const activeLabel = label ?? formatColumnIdToHeaderCellLabel(sectionId);\n\n return (\n <Collapsible\n label={activeLabel}\n collapsed={!expanded}\n onClick={onClickLabel}\n contentLeft={contentLeft}\n contentRight={contentRight}\n >\n {loading ? (\n <CollapsibleContent>\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\n </CollapsibleContent>\n ) : error ? (\n <Banner\n variant={\"error\"}\n text={error}\n contentRight={\n onRetry ? <FlatButton label={\"Retry\"} onClick={onRetry} /> : null\n }\n />\n ) : disableContentPadding ? (\n children\n ) : (\n <CollapsibleContent>{children}</CollapsibleContent>\n )}\n </Collapsible>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { combineReducers } from \"redux\";\nimport {\n createEntityActions,\n createEntityReducer,\n createValueByIdActions,\n createValueByIdReducer,\n EntityAction,\n EntityState,\n reducerIdGate,\n reducerIdGateAction,\n ReducerIdGateAction,\n ValueByIdAction,\n ValueByIdState,\n} from \"@stenajs-webui/redux\";\nimport { Dispatch } from \"react\";\n\nexport interface SearchFilterSettings {\n open: boolean;\n}\n\nexport type SearchFilterDispatch<TFormModel> = Dispatch<\n SearchFilterAction<TFormModel>\n>;\n\nexport interface SearchFilterState<TFormModel> {\n expandedSections: ValueByIdState<boolean>;\n formModel: EntityState<TFormModel>;\n settings: EntityState<SearchFilterSettings>;\n}\n\nexport type SearchFilterAction<TFormModel> =\n | ReducerIdGateAction<ValueByIdAction<boolean>>\n | ReducerIdGateAction<EntityAction<TFormModel>>\n | ReducerIdGateAction<EntityAction<SearchFilterSettings>>;\n\nexport const createSearchFilterInitialState = <TFormModel>(\n initialFormModel: TFormModel\n): SearchFilterState<TFormModel> => ({\n settings: {\n open: false,\n },\n formModel: initialFormModel,\n expandedSections: { values: {} },\n});\n\nexport const createSearchFilterReducer = <TFormModel>(\n reducerId: string,\n initialState: SearchFilterState<TFormModel>\n) =>\n combineReducers({\n expandedSections: reducerIdGate(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdReducer<boolean>(initialState.expandedSections)\n ),\n formModel: reducerIdGate(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityReducer<TFormModel>(initialState.formModel)\n ),\n settings: reducerIdGate(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityReducer<SearchFilterSettings>(initialState.settings)\n ),\n });\n\nexport interface SearchFilterActions<TFormModel, TSectionKey extends string> {\n openFilters: () => SearchFilterAction<TFormModel>;\n closeFilters: () => SearchFilterAction<TFormModel>;\n setFormModelFields: (\n fields: Partial<TFormModel>\n ) => SearchFilterAction<TFormModel>;\n clearFormModel: () => SearchFilterAction<TFormModel>;\n expandSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n collapseSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n setSectionExpanded: (\n section: TSectionKey,\n expanded: boolean\n ) => SearchFilterAction<TFormModel>;\n clearExpandedSections: () => SearchFilterAction<TFormModel>;\n}\n\nexport const createSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>(\n reducerId: string,\n initialFormModel: TFormModel\n): SearchFilterActions<TFormModel, TSectionKey> => ({\n openFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: true,\n })\n ),\n closeFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: false,\n })\n ),\n setFormModelFields: (fields: Partial<TFormModel>) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntityFields(fields)\n ),\n clearFormModel: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntity(initialFormModel)\n ),\n expandSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, true)\n ),\n collapseSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, false)\n ),\n setSectionExpanded: (section: TSectionKey, expanded: boolean) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, expanded)\n ),\n clearExpandedSections: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().clearAllValues()\n ),\n});\n\nexport const getReducerIdFor = (\n reducerId: string,\n reducerIdSuffix: keyof SearchFilterState<unknown>\n): string => `${reducerId}.${reducerIdSuffix}`;\n","import {\n createSearchFilterActions,\n createSearchFilterReducer,\n SearchFilterState,\n} from \"../redux/SearchFilterRedux\";\nimport { useReducer, useState } from \"react\";\n\nexport const useLocalSearchFilterState = <\n TFormModel,\n TSectionKey extends string\n>(\n initialState: SearchFilterState<TFormModel>\n) => {\n const [reducer] = useState(() =>\n createSearchFilterReducer<TFormModel>(\"local\", initialState)\n );\n\n const [actions] = useState(() =>\n createSearchFilterActions<TFormModel, TSectionKey>(\n \"local\",\n initialState.formModel\n )\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return {\n actions,\n state,\n dispatch,\n };\n};\n","import styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n}\n\nexport const SearchFilterChips: React.FC<SearchFilterChipsProps> = ({\n children,\n disableClearAllButton = false,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickClearAll = useCallback(\n () => dispatch(actions.clearFormModel()),\n [actions, dispatch]\n );\n\n return (\n <Row flexWrap={\"wrap\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n disableChipClearButton?: boolean;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n disableChipClearButton,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemove = useCallback(\n (value: string) => {\n onClickRemoveOnChip?.({ value, setFormModelFields });\n },\n [onClickRemoveOnChip, setFormModelFields]\n );\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return (\n <ChipSpacer>\n <Chip\n label={emptyChipLabel}\n variant={\"secondary\"}\n onClick={onClickLabel}\n />\n </ChipSpacer>\n );\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <ChipSpacer key={value}>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={\n disableChipClearButton ? undefined : () => onClickRemove(value)\n }\n />\n </ChipSpacer>\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(formModel[fieldName], options),\n onClickRemoveOnChip: createOnClickRemoveOnChipForBooleanRecord(\n formModel,\n fieldName\n ),\n});\n\nexport const createChipsForBooleanRecord = (\n booleanRecord: BooleanRecord,\n options?: BooleanRecordOptions\n): Array<SearchFilterSectionChipModel> =>\n truthyKeysAsList(booleanRecord).map((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n });\n\nexport const createOnClickRemoveOnChipForBooleanRecord = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields, value }) => {\n const newRecord: BooleanRecord = { ...formModel[fieldName] };\n newRecord[value] = false;\n setFormModelFields(({\n [fieldName]: newRecord,\n } as unknown) as Partial<TFormModel>);\n };\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { Column, Text } from \"@stenajs-webui/core\";\nimport { CollapsibleClickableContent } from \"@stenajs-webui/panels\";\nimport { Checkbox, ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface CheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n error,\n loading,\n sectionId,\n value,\n onValueChange,\n}: CheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection\n sectionId={sectionId}\n loading={loading}\n error={error}\n disableContentPadding\n >\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1}>\n {options?.map((d) => (\n <CollapsibleClickableContent\n key={d.value}\n onClick={() => {\n if (value && onValueChange) {\n const sel = !value[d.value];\n onValueChange({\n ...value,\n [d.value]: sel,\n });\n }\n }}\n contentLeft={<Checkbox tabIndex={-1} value={value?.[d.value]} />}\n >\n <Text>{d.label}</Text>\n </CollapsibleClickableContent>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n error,\n loading,\n sectionId,\n value,\n onValueChange,\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection sectionId={sectionId} loading={loading} error={error}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n onInputChange={setText}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import { DateRange } from \"./DateRangeTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForDateRange = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForDateRange(\n formModel[startDateFieldName],\n formModel[endDateFieldName]\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForDateRange(\n startDateFieldName,\n endDateFieldName\n ),\n});\n\nexport const createChipsForDateRange = (\n startDate: string | undefined,\n endDate: string | undefined\n): Array<SearchFilterSectionChipModel> => {\n if (!startDate && !endDate) {\n return [];\n }\n return [\n { value: \"dateRange\", label: `${startDate ?? \"\"} - ${endDate ?? \"\"}` },\n ];\n};\n\nexport const createOnClickRemoveOnChipForDateRange = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, DateRange>\n>(\n startDateFieldName: TField,\n endDateFieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields }) => {\n setFormModelFields(({\n [startDateFieldName]: undefined,\n [endDateFieldName]: undefined,\n } as unknown) as Partial<TFormModel>);\n };\n};\n","import { PickByValue } from \"@stenajs-webui/core\";\nimport { DateRangeCalendarSectionProps } from \"./components/DateRangeCalendarSection\";\n\nexport const createDateRangeSectionProps = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>,\n TSectionKey extends string\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n DateRangeCalendarSectionProps<TFormModel, TSectionKey>,\n \"value\" | \"onValueChange\"\n> => ({\n value: {\n startDate: formModel[startDateFieldName],\n endDate: formModel[endDateFieldName],\n },\n onValueChange: (value, { dispatch, actions }) => {\n const fields: Partial<TFormModel> = {\n [startDateFieldName]: value.startDate,\n [endDateFieldName]: value.endDate,\n } as any;\n dispatch(actions.setFormModelFields(fields));\n },\n});\n","import {\n DateRangeCalendar,\n DateRangeCalendarProps,\n DateRangeFocusedInput,\n} from \"@stenajs-webui/calendar\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { Box } from \"@stenajs-webui/core\";\nimport { format, parse } from \"date-fns\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n} from \"../../../redux/SearchFilterRedux\";\nimport { useSearchFilterDispatch } from \"../../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../../context/SearchFilterActionsContext\";\n\ninterface DateRangeCalendarSectionOnChangeValue {\n startDate?: string;\n endDate?: string;\n}\n\nexport interface DateRangeCalendarSectionProps<\n TFormModel,\n TSectionKey extends string\n> extends SearchFilterSectionProps<TSectionKey>,\n Omit<\n DateRangeCalendarProps<{}>,\n | \"focusedInput\"\n | \"setFocusedInput\"\n | \"startDate\"\n | \"endDate\"\n | \"onChange\"\n | \"setStartDate\"\n | \"setEndDate\"\n > {\n value: DateRangeCalendarSectionOnChangeValue;\n onValueChange: (\n value: DateRangeCalendarSectionOnChangeValue,\n options: SetDateOptions<TFormModel, TSectionKey>\n ) => void;\n}\n\nexport interface SetDateOptions<TFormModel, TSectionKey extends string> {\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const DateRangeCalendarSection = <\n TFormModel,\n TSectionKey extends string\n>({\n value,\n onValueChange,\n sectionId,\n ...dateRangeCalendarProps\n}: DateRangeCalendarSectionProps<TFormModel, TSectionKey>) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions<TFormModel, TSectionKey>();\n\n const options = useMemo<SetDateOptions<TFormModel, TSectionKey>>(\n () => ({ dispatch, actions }),\n [actions, dispatch]\n );\n const [focusedInput, setFocusedInput] = useState<DateRangeFocusedInput>(\n \"startDate\"\n );\n\n const { startDate, endDate } = value ?? {};\n\n const startDateObj = useMemo(\n () => (startDate ? parse(startDate, \"yyyy-MM-dd\", new Date()) : undefined),\n [startDate]\n );\n\n const endDateObj = useMemo(\n () => (endDate ? parse(endDate, \"yyyy-MM-dd\", new Date()) : undefined),\n [endDate]\n );\n\n const setStartDate = useCallback(\n (startDate: Date) => {\n onValueChange(\n { startDate: format(startDate, \"yyyy-MM-dd\"), endDate },\n options\n );\n },\n [endDate, onValueChange, options]\n );\n\n const setEndDate = useCallback(\n (endDate: Date) => {\n onValueChange(\n { startDate, endDate: format(endDate, \"yyyy-MM-dd\") },\n options\n );\n },\n [onValueChange, options, startDate]\n );\n\n return (\n <SearchFilterSection sectionId={sectionId}>\n <Box flex={1} alignItems={\"center\"}>\n <Box background={\"white\"} indent>\n <DateRangeCalendar\n setFocusedInput={setFocusedInput}\n focusedInput={focusedInput}\n startDate={startDateObj}\n endDate={endDateObj}\n setStartDate={setStartDate}\n setEndDate={setEndDate}\n {...dateRangeCalendarProps}\n />\n </Box>\n </Box>\n </SearchFilterSection>\n );\n};\n"],"names":["React","Row","Icon","faSlidersH","cssColor","Indent","Heading","FlatButton","faTimes","createContext","useContext","useCallback","Drawer","Column","SecondaryButton","Collapsible","CollapsibleContent","Spinner","Banner","upperFirst","lowerCase","combineReducers","reducerIdGate","createValueByIdReducer","createEntityReducer","reducerIdGateAction","createEntityActions","createValueByIdActions","useState","useReducer","styled","Chip","truthyKeysAsList","CollapsibleClickableContent","Checkbox","Text","useMemo","ChipMultiSelect","parse","format","Box","DateRangeCalendar"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/features/search-filter/components/SearchFilterPanelHeader.tsx","../src/features/search-filter/context/SearchFilterStateContext.ts","../src/features/search-filter/context/SearchFilterDispatchContext.ts","../src/features/search-filter/context/SearchFilterActionsContext.ts","../src/features/search-filter/components/SearchFilterDrawer.tsx","../src/features/search-filter/components/SearchFilterButton.tsx","../src/features/search-filter/components/SearchFilterSection.tsx","../src/features/search-filter/context/SearchFilterModelContext.ts","../src/features/search-filter/components/context/SearchFilterContext.tsx","../src/features/search-filter/redux/SearchFilterRedux.ts","../src/features/search-filter/hooks/UseLocalSearchFilterState.ts","../src/features/search-filter/components/context/SearchFilterLocalStateContext.tsx","../src/features/search-filter/features/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/EmptyChip.tsx","../src/features/search-filter/features/chips/SearchFilterChip.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Heading, Indent, Row } from \"@stenajs-webui/core\";\nimport { FlatButton, Icon } from \"@stenajs-webui/elements\";\nimport { faTimes } from \"@fortawesome/free-solid-svg-icons/faTimes\";\nimport { faSlidersH } from \"@fortawesome/free-solid-svg-icons/faSlidersH\";\nimport { cssColor } from \"@stenajs-webui/theme\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n}\n\nexport const SearchFilterPanelHeader: React.FC<SearchFilterPanelHeaderProps> = ({\n onRequestClose,\n}) => {\n return (\n <Row\n height={\"48px\"}\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n indent={2}\n >\n <Row alignItems={\"center\"}>\n <Icon\n icon={faSlidersH}\n color={cssColor(\"--lhds-color-ui-500\")}\n size={12}\n />\n <Indent />\n <Heading variant={\"h4\"}>Filters</Heading>\n </Row>\n <FlatButton leftIcon={faTimes} onClick={onRequestClose} />\n </Row>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>((null as unknown) as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>((null as unknown) as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>((null as unknown) as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Column } from \"@stenajs-webui/core\";\nimport { SearchFilterPanelHeader } from \"./SearchFilterPanelHeader\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerProps\n extends Omit<DrawerProps, \"isOpen\" | \"onRequestClose\"> {}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n ...drawerProps\n}) => {\n const {\n settings: { open },\n } = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const closeDrawer = useCallback(() => {\n dispatch(actions.closeFilters());\n }, [actions, dispatch]);\n\n return (\n <Drawer\n background={cssColor(\"--lhds-color-ui-50\")}\n width={\"370px\"}\n isOpen={open}\n onRequestClose={closeDrawer}\n {...drawerProps}\n >\n <Column>\n <SearchFilterPanelHeader onRequestClose={closeDrawer} />\n {children}\n </Column>\n </Drawer>\n );\n};\n","import { faSlidersH } from \"@fortawesome/free-solid-svg-icons/faSlidersH\";\nimport { SecondaryButton } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n}\n\nexport const SearchFilterButton: React.VFC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickButton = useCallback(() => {\n dispatch(actions.openFilters());\n }, [actions, dispatch]);\n\n return (\n <SecondaryButton\n label={label}\n leftIcon={faSlidersH}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { Collapsible, CollapsibleContent } from \"@stenajs-webui/panels\";\nimport { lowerCase, upperFirst } from \"lodash\";\nimport { Banner, FlatButton, Spinner } from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n contentLeft?: React.ReactNode;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n label?: string;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n contentLeft,\n contentRight,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n}: PropsWithChildren<SearchFilterSectionProps<TSectionKey>>) {\n const state = useSearchFilterState();\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const expanded = state.expandedSections.values[sectionId] ?? false;\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.setSectionExpanded(sectionId, !expanded));\n }, [actions, dispatch, expanded, sectionId]);\n\n const activeLabel = label ?? formatColumnIdToHeaderCellLabel(sectionId);\n\n return (\n <Collapsible\n label={activeLabel}\n collapsed={!expanded}\n onClick={onClickLabel}\n contentLeft={contentLeft}\n contentRight={contentRight}\n >\n {loading ? (\n <CollapsibleContent>\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\n </CollapsibleContent>\n ) : error ? (\n <Banner\n variant={\"error\"}\n text={error}\n contentRight={\n onRetry ? <FlatButton label={\"Retry\"} onClick={onRetry} /> : null\n }\n />\n ) : disableContentPadding ? (\n children\n ) : (\n <CollapsibleContent>{children}</CollapsibleContent>\n )}\n </Collapsible>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { createContext, useContext } from \"react\";\n\nexport const SearchFilterModelContext = createContext<unknown>(null as unknown);\n\nexport const useSearchFilterModel = <TFormModel>(): TFormModel => {\n const c = useContext(SearchFilterModelContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as TFormModel;\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n SearchFilterState,\n} from \"../../redux/SearchFilterRedux\";\nimport { SearchFilterDispatchContext } from \"../../context/SearchFilterDispatchContext\";\nimport { SearchFilterActionsContext } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterStateContext } from \"../../context/SearchFilterStateContext\";\nimport { SearchFilterModelContext } from \"../../context/SearchFilterModelContext\";\n\ninterface SearchFilterScopeProps<TFormModel, TSectionKey extends string> {\n state: SearchFilterState<TFormModel>;\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const SearchFilterContext = function SearchFilterScope<\n TFormModel,\n TSectionKey extends string\n>({\n state,\n dispatch,\n actions,\n children,\n}: PropsWithChildren<SearchFilterScopeProps<TFormModel, TSectionKey>>) {\n return (\n <SearchFilterDispatchContext.Provider\n value={dispatch as SearchFilterDispatch<unknown>}\n >\n <SearchFilterActionsContext.Provider value={actions}>\n <SearchFilterStateContext.Provider value={state}>\n <SearchFilterModelContext.Provider value={state.formModel}>\n {children}\n </SearchFilterModelContext.Provider>\n </SearchFilterStateContext.Provider>\n </SearchFilterActionsContext.Provider>\n </SearchFilterDispatchContext.Provider>\n );\n};\n","import { combineReducers } from \"redux\";\nimport {\n createEntityActions,\n createEntityReducer,\n createValueByIdActions,\n createValueByIdReducer,\n EntityAction,\n EntityState,\n reducerIdGate,\n reducerIdGateAction,\n ReducerIdGateAction,\n ValueByIdAction,\n ValueByIdState,\n} from \"@stenajs-webui/redux\";\nimport { Dispatch } from \"react\";\n\nexport interface SearchFilterSettings {\n open: boolean;\n}\n\nexport type SearchFilterDispatch<TFormModel> = Dispatch<\n SearchFilterAction<TFormModel>\n>;\n\nexport interface SearchFilterState<TFormModel> {\n expandedSections: ValueByIdState<boolean>;\n formModel: EntityState<TFormModel>;\n settings: EntityState<SearchFilterSettings>;\n}\n\nexport type SearchFilterAction<TFormModel> =\n | ReducerIdGateAction<ValueByIdAction<boolean>>\n | ReducerIdGateAction<EntityAction<TFormModel>>\n | ReducerIdGateAction<EntityAction<SearchFilterSettings>>;\n\nexport const createSearchFilterInitialState = <TFormModel>(\n initialFormModel: TFormModel\n): SearchFilterState<TFormModel> => ({\n settings: {\n open: false,\n },\n formModel: initialFormModel,\n expandedSections: { values: {} },\n});\n\nexport const createSearchFilterReducer = <TFormModel>(\n reducerId: string,\n initialState: SearchFilterState<TFormModel>\n) =>\n combineReducers({\n expandedSections: reducerIdGate(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdReducer<boolean>(initialState.expandedSections)\n ),\n formModel: reducerIdGate(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityReducer<TFormModel>(initialState.formModel)\n ),\n settings: reducerIdGate(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityReducer<SearchFilterSettings>(initialState.settings)\n ),\n });\n\nexport interface SearchFilterActions<TFormModel, TSectionKey extends string> {\n openFilters: () => SearchFilterAction<TFormModel>;\n closeFilters: () => SearchFilterAction<TFormModel>;\n setFormModelFields: (\n fields: Partial<TFormModel>\n ) => SearchFilterAction<TFormModel>;\n clearFormModel: () => SearchFilterAction<TFormModel>;\n expandSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n collapseSection: (section: TSectionKey) => SearchFilterAction<TFormModel>;\n setSectionExpanded: (\n section: TSectionKey,\n expanded: boolean\n ) => SearchFilterAction<TFormModel>;\n clearExpandedSections: () => SearchFilterAction<TFormModel>;\n}\n\nexport const createSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>(\n reducerId: string,\n initialFormModel: TFormModel\n): SearchFilterActions<TFormModel, TSectionKey> => ({\n openFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: true,\n })\n ),\n closeFilters: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"settings\"),\n createEntityActions<SearchFilterSettings>().setEntityFields({\n open: false,\n })\n ),\n setFormModelFields: (fields: Partial<TFormModel>) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntityFields(fields)\n ),\n clearFormModel: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"formModel\"),\n createEntityActions<TFormModel>().setEntity(initialFormModel)\n ),\n expandSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, true)\n ),\n collapseSection: (section: TSectionKey) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, false)\n ),\n setSectionExpanded: (section: TSectionKey, expanded: boolean) =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().setValue(section, expanded)\n ),\n clearExpandedSections: () =>\n reducerIdGateAction(\n getReducerIdFor(reducerId, \"expandedSections\"),\n createValueByIdActions<boolean>().clearAllValues()\n ),\n});\n\nexport const getReducerIdFor = (\n reducerId: string,\n reducerIdSuffix: keyof SearchFilterState<unknown>\n): string => `${reducerId}.${reducerIdSuffix}`;\n","import {\n createSearchFilterActions,\n createSearchFilterReducer,\n SearchFilterState,\n} from \"../redux/SearchFilterRedux\";\nimport { useReducer, useState } from \"react\";\n\nexport const useLocalSearchFilterState = <\n TFormModel,\n TSectionKey extends string\n>(\n initialState: SearchFilterState<TFormModel>\n) => {\n const [reducer] = useState(() =>\n createSearchFilterReducer<TFormModel>(\"local\", initialState)\n );\n\n const [actions] = useState(() =>\n createSearchFilterActions<TFormModel, TSectionKey>(\n \"local\",\n initialState.formModel\n )\n );\n\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return {\n actions,\n state,\n dispatch,\n };\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { useLocalSearchFilterState } from \"../../hooks/UseLocalSearchFilterState\";\nimport { SearchFilterContext } from \"./SearchFilterContext\";\nimport { createSearchFilterInitialState } from \"../../redux/SearchFilterRedux\";\n\ninterface SearchFilterLocalScopeProps<TFormModel> {\n initialFormModel: TFormModel;\n}\n\nexport const SearchFilterLocalStateContext = function SearchFilterLocalScope<\n TFormModel\n>({\n initialFormModel,\n children,\n}: PropsWithChildren<SearchFilterLocalScopeProps<TFormModel>>) {\n const { state, actions, dispatch } = useLocalSearchFilterState(\n createSearchFilterInitialState(initialFormModel)\n );\n\n return (\n <SearchFilterContext state={state} actions={actions} dispatch={dispatch}>\n {children}\n </SearchFilterContext>\n );\n};\n","import styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n}\n\nexport const SearchFilterChips: React.FC<SearchFilterChipsProps> = ({\n children,\n disableClearAllButton = false,\n}) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickClearAll = useCallback(\n () => dispatch(actions.clearFormModel()),\n [actions, dispatch]\n );\n\n return (\n <Row flexWrap={\"wrap\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface EmptyChipProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label: string;\n}\n\nexport const EmptyChip = function EmptyChip<TSectionKey extends string>({\n label,\n sectionId,\n}: EmptyChipProps<TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterSectionOnClickRemoveOnChip } from \"../../config/SearchFilterConfig\";\n\ninterface SearchFilterChipProps<TFormModel, TSectionKey> {\n sectionId: TSectionKey;\n label: string;\n value: string;\n onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SearchFilterChip = function SearchFilterChip<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n label,\n value,\n onClickRemove,\n}: SearchFilterChipProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemoveHandler = useCallback(() => {\n onClickRemove?.({ value, setFormModelFields });\n }, [onClickRemove, setFormModelFields, value]);\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { EmptyChip } from \"./EmptyChip\";\nimport { SearchFilterChip } from \"./SearchFilterChip\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return <EmptyChip sectionId={sectionId} label={emptyChipLabel} />;\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <SearchFilterChip\n key={value}\n label={label ?? sectionId}\n sectionId={sectionId}\n onClickRemove={onClickRemoveOnChip}\n value={value}\n />\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(formModel[fieldName], options),\n onClickRemoveOnChip: createOnClickRemoveOnChipForBooleanRecord(\n formModel,\n fieldName\n ),\n});\n\nexport const createChipsForBooleanRecord = (\n booleanRecord: BooleanRecord,\n options?: BooleanRecordOptions\n): Array<SearchFilterSectionChipModel> =>\n truthyKeysAsList(booleanRecord).map((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n });\n\nexport const createOnClickRemoveOnChipForBooleanRecord = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields, value }) => {\n const newRecord: BooleanRecord = { ...formModel[fieldName] };\n newRecord[value] = false;\n setFormModelFields(({\n [fieldName]: newRecord,\n } as unknown) as Partial<TFormModel>);\n };\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { Column, Text } from \"@stenajs-webui/core\";\nimport { CollapsibleClickableContent } from \"@stenajs-webui/panels\";\nimport { Checkbox, ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface SimpleCheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n value,\n onValueChange,\n ...sectionProps\n}: SimpleCheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection disableContentPadding {...sectionProps}>\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1}>\n {options?.map((d) => (\n <CollapsibleClickableContent\n key={d.value}\n onClick={() => {\n if (value && onValueChange) {\n const sel = !value[d.value];\n onValueChange({\n ...value,\n [d.value]: sel,\n });\n }\n }}\n contentLeft={<Checkbox tabIndex={-1} value={value?.[d.value]} />}\n >\n <Text>{d.label}</Text>\n </CollapsibleClickableContent>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n noneSelectedLabel?: string;\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n value,\n noneSelectedLabel,\n onValueChange,\n ...sectionProps\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection {...sectionProps}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n noneSelectedLabel={noneSelectedLabel}\n onInputChange={setText}\n closeMenuOnSelect={false}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import { DateStringRange } from \"@stenajs-webui/calendar\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForDateRange = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, string | undefined>\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForDateRange(\n formModel[startDateFieldName],\n formModel[endDateFieldName]\n ),\n onClickRemoveOnChip: createOnClickRemoveOnChipForDateRange(\n startDateFieldName,\n endDateFieldName\n ),\n});\n\nexport const createChipsForDateRange = (\n startDate: string | undefined,\n endDate: string | undefined\n): Array<SearchFilterSectionChipModel> => {\n if (!startDate && !endDate) {\n return [];\n }\n return [\n { value: \"dateRange\", label: `${startDate ?? \"\"} - ${endDate ?? \"\"}` },\n ];\n};\n\nexport const createOnClickRemoveOnChipForDateRange = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, DateStringRange>\n>(\n startDateFieldName: TField,\n endDateFieldName: TField\n): SearchFilterSectionOnClickRemoveOnChip<TFormModel> => {\n return ({ setFormModelFields }) => {\n setFormModelFields(({\n [startDateFieldName]: undefined,\n [endDateFieldName]: undefined,\n } as unknown) as Partial<TFormModel>);\n };\n};\n","import { PickByValue } from \"@stenajs-webui/core\";\nimport { DateRangeCalendarSectionProps } from \"./components/DateRangeCalendarSection\";\n\nexport const createDateRangeSectionProps = <\n TFormModel,\n TField extends keyof PickByValue<TFormModel, string | undefined>,\n TSectionKey extends string\n>(\n formModel: TFormModel,\n startDateFieldName: TField,\n endDateFieldName: TField\n): Pick<\n DateRangeCalendarSectionProps<TFormModel, TSectionKey>,\n \"value\" | \"onValueChange\"\n> => ({\n value: {\n startDate: formModel[startDateFieldName],\n endDate: formModel[endDateFieldName],\n },\n onValueChange: (value, { dispatch, actions }) => {\n const fields: Partial<TFormModel> = {\n [startDateFieldName]: value.startDate,\n [endDateFieldName]: value.endDate,\n } as any;\n dispatch(actions.setFormModelFields(fields));\n },\n});\n","import {\n DateRange,\n DateRangeCalendar,\n DateRangeCalendarProps,\n DateRangeFocusedInput,\n dateRangeToStrings,\n DateStringRange,\n stringsToDateRange,\n} from \"@stenajs-webui/calendar\";\nimport * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { Box } from \"@stenajs-webui/core\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport {\n SearchFilterActions,\n SearchFilterDispatch,\n} from \"../../../redux/SearchFilterRedux\";\nimport { useSearchFilterDispatch } from \"../../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../../context/SearchFilterActionsContext\";\n\nexport interface DateRangeCalendarSectionProps<\n TFormModel,\n TSectionKey extends string\n> extends SearchFilterSectionProps<TSectionKey>,\n Omit<\n DateRangeCalendarProps<{}>,\n \"value\" | \"onValueChange\" | \"focusedInput\" | \"setFocusedInput\"\n > {\n value: DateStringRange;\n onValueChange: (\n value: DateStringRange,\n options: SetDateOptions<TFormModel, TSectionKey>\n ) => void;\n}\n\nexport interface SetDateOptions<TFormModel, TSectionKey extends string> {\n dispatch: SearchFilterDispatch<TFormModel>;\n actions: SearchFilterActions<TFormModel, TSectionKey>;\n}\n\nexport const DateRangeCalendarSection = <\n TFormModel,\n TSectionKey extends string\n>({\n value,\n onValueChange,\n sectionId,\n ...dateRangeCalendarProps\n}: DateRangeCalendarSectionProps<TFormModel, TSectionKey>) => {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions<TFormModel, TSectionKey>();\n\n const options = useMemo<SetDateOptions<TFormModel, TSectionKey>>(\n () => ({ dispatch, actions }),\n [actions, dispatch]\n );\n const [focusedInput, setFocusedInput] = useState<DateRangeFocusedInput>(\n \"startDate\"\n );\n\n const dateRangeValue = useMemo(() => stringsToDateRange(value), [value]);\n\n const onValueChangeHandler = useCallback(\n (value: DateRange) => {\n onValueChange(dateRangeToStrings(value), options);\n },\n [onValueChange, options]\n );\n\n return (\n <SearchFilterSection sectionId={sectionId}>\n <Box flex={1} alignItems={\"center\"}>\n <Box background={\"white\"} indent>\n <DateRangeCalendar\n setFocusedInput={setFocusedInput}\n focusedInput={focusedInput}\n value={dateRangeValue}\n onValueChange={onValueChangeHandler}\n {...dateRangeCalendarProps}\n />\n </Box>\n </Box>\n </SearchFilterSection>\n );\n};\n"],"names":["React","Row","Icon","faSlidersH","cssColor","Indent","Heading","FlatButton","faTimes","createContext","useContext","useCallback","Drawer","Column","SecondaryButton","Collapsible","CollapsibleContent","Spinner","Banner","upperFirst","lowerCase","combineReducers","reducerIdGate","createValueByIdReducer","createEntityReducer","reducerIdGateAction","createEntityActions","createValueByIdActions","useState","useReducer","styled","Chip","truthyKeysAsList","CollapsibleClickableContent","Checkbox","Text","useMemo","ChipMultiSelect","stringsToDateRange","dateRangeToStrings","Box","DateRangeCalendar"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAWa,uBAAuB,GAA2C,UAAC,EAE/E;QADC,cAAc,oBAAA;IAEd,QACEA,+BAACC,QAAG,IACF,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,eAAe,EAC/B,UAAU,EAAE,QAAQ,EACpB,MAAM,EAAE,CAAC;QAETD,+BAACC,QAAG,IAAC,UAAU,EAAE,QAAQ;YACvBD,+BAACE,aAAI,IACH,IAAI,EAAEC,qBAAU,EAChB,KAAK,EAAEC,cAAQ,CAAC,qBAAqB,CAAC,EACtC,IAAI,EAAE,EAAE,GACR;YACFJ,+BAACK,WAAM,OAAG;YACVL,+BAACM,YAAO,IAAC,OAAO,EAAE,IAAI,cAAmB,CACrC;QACNN,+BAACO,mBAAU,IAAC,QAAQ,EAAEC,eAAO,EAAE,OAAO,EAAE,cAAc,GAAI,CACtD,EACN;AACJ;;IC9Ba,wBAAwB,GAAGC,mBAAa,CAElD,IAA8C,EAAE;IAEtC,oBAAoB,GAAG;IAGlC,IAAM,CAAC,GAAGC,gBAAU,CAAC,wBAAwB,CAAC,CAAC;IAC/C,IAAI,CAAC,CAAC,EAAE;QACN,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;KACH;IACD,OAAO,CAAkC,CAAC;AAC5C;;ICda,2BAA2B,GAAGD,mBAAa,CAErD,IAAiD,EAAE;IAEzC,uBAAuB,GAAG;IACrC,IAAM,CAAC,GAAGC,gBAAU,CAAC,2BAA2B,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC,EAAE;QACN,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;KAC5D;IACD,OAAO,CAAC,CAAC;AACX;;ICVa,0BAA0B,GAAGD,mBAAa,CAEpD,IAAqD,EAAE;IAE7C,sBAAsB,GAAG;IAIpC,IAAM,CAAC,GAAGC,gBAAU,CAAC,0BAA0B,CAAC,CAAC;IACjD,IAAI,CAAC,CAAC,EAAE;QACN,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;KAC3D;IACD,OAAO,CAAiD,CAAC;AAC3D;;ICHa,kBAAkB,GAAsC,UAAC,EAGrE;IAFC,IAAA,QAAQ,cAAA,EACL,WAAW,cAFsD,YAGrE,CADe;IAGA,IAAA,IAAI,GACd,oBAAoB,EAAE,cADR,CACS;IAC3B,IAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,IAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IAEzC,IAAM,WAAW,GAAGC,iBAAW,CAAC;QAC9B,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;KAClC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExB,QACEX,+BAACY,YAAM,aACL,UAAU,EAAER,cAAQ,CAAC,oBAAoB,CAAC,EAC1C,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,IAAI,EACZ,cAAc,EAAE,WAAW,IACvB,WAAW;QAEfJ,+BAACa,WAAM;YACLb,+BAAC,uBAAuB,IAAC,cAAc,EAAE,WAAW,GAAI;YACvD,QAAQ,CACF,CACF,EACT;AACJ;;IC9Ba,kBAAkB,GAA6C,UAAC,EAE5E;QADC,aAAiB,EAAjB,KAAK,mBAAG,SAAS,KAAA;IAEjB,IAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,IAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IAEzC,IAAM,aAAa,GAAGW,iBAAW,CAAC;QAChC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;KACjC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExB,QACEX,+BAACc,wBAAe,IACd,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAEX,qBAAU,EACpB,OAAO,EAAE,aAAa,GACtB,EACF;AACJ;;ICPa,mBAAmB,GAAG,SAAS,mBAAmB,CAE7D,EAUyD;;QATzD,SAAS,eAAA,EACT,KAAK,WAAA,EACL,WAAW,iBAAA,EACX,YAAY,kBAAA,EACZ,OAAO,aAAA,EACP,KAAK,WAAA,EACL,OAAO,aAAA,EACP,qBAAqB,2BAAA,EACrB,QAAQ,cAAA;IAER,IAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,IAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,IAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IAEzC,IAAM,QAAQ,GAAG,MAAA,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,mCAAI,KAAK,CAAC;IAEnE,IAAM,YAAY,GAAGQ,iBAAW,CAAC;QAC/B,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC5D,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7C,IAAM,WAAW,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,+BAA+B,CAAC,SAAS,CAAC,CAAC;IAExE,QACEX,+BAACe,kBAAW,IACV,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,CAAC,QAAQ,EACpB,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,IAEzB,OAAO,IACNf,+BAACgB,yBAAkB;QACjBhB,+BAACC,QAAG,IAAC,OAAO,QAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5CD,+BAACiB,gBAAO,IAAC,IAAI,EAAE,OAAO,GAAI,CACtB,CACa,IACnB,KAAK,IACPjB,+BAACkB,eAAM,IACL,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,KAAK,EACX,YAAY,EACV,OAAO,GAAGlB,+BAACO,mBAAU,IAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAI,GAAG,IAAI,GAEnE,IACA,qBAAqB,IACvB,QAAQ,KAERP,+BAACgB,yBAAkB,QAAE,QAAQ,CAAsB,CACpD,CACW,EACd;AACJ,EAAE;IAEW,+BAA+B,GAAG,UAAC,QAAgB;IAC9D,OAAAG,iBAAU,CAACC,gBAAS,CAAC,QAAQ,CAAC,CAAC;AAA/B;;IC5EW,wBAAwB,GAAGX,mBAAa,CAAU,IAAe,EAAE;IAEnE,oBAAoB,GAAG;IAClC,IAAM,CAAC,GAAGC,gBAAU,CAAC,wBAAwB,CAAC,CAAC;IAC/C,IAAI,CAAC,CAAC,EAAE;QACN,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;KACH;IACD,OAAO,CAAe,CAAC;AACzB;;ICMa,mBAAmB,GAAG,SAAS,iBAAiB,CAG3D,EAKmE;QAJnE,KAAK,WAAA,EACL,QAAQ,cAAA,EACR,OAAO,aAAA,EACP,QAAQ,cAAA;IAER,QACEV,+BAAC,2BAA2B,CAAC,QAAQ,IACnC,KAAK,EAAE,QAAyC;QAEhDA,+BAAC,0BAA0B,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO;YACjDA,+BAAC,wBAAwB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK;gBAC7CA,+BAAC,wBAAwB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,IACtD,QAAQ,CACyB,CACF,CACA,CACD,EACvC;AACJ;;ICLa,8BAA8B,GAAG,UAC5C,gBAA4B,IACM,QAAC;IACnC,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK;KACZ;IACD,SAAS,EAAE,gBAAgB;IAC3B,gBAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;CACjC,KAAE;IAEU,yBAAyB,GAAG,UACvC,SAAiB,EACjB,YAA2C;IAE3C,OAAAqB,qBAAe,CAAC;QACd,gBAAgB,EAAEC,qBAAa,CAC7B,eAAe,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAC9CC,8BAAsB,CAAU,YAAY,CAAC,gBAAgB,CAAC,CAC/D;QACD,SAAS,EAAED,qBAAa,CACtB,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,EACvCE,2BAAmB,CAAa,YAAY,CAAC,SAAS,CAAC,CACxD;QACD,QAAQ,EAAEF,qBAAa,CACrB,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,EACtCE,2BAAmB,CAAuB,YAAY,CAAC,QAAQ,CAAC,CACjE;KACF,CAAC;AAbF,EAaG;IAkBQ,yBAAyB,GAAG,UAIvC,SAAiB,EACjB,gBAA4B,IACqB,QAAC;IAClD,WAAW,EAAE;QACX,OAAAC,2BAAmB,CACjB,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,EACtCC,2BAAmB,EAAwB,CAAC,eAAe,CAAC;YAC1D,IAAI,EAAE,IAAI;SACX,CAAC,CACH;KAAA;IACH,YAAY,EAAE;QACZ,OAAAD,2BAAmB,CACjB,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,EACtCC,2BAAmB,EAAwB,CAAC,eAAe,CAAC;YAC1D,IAAI,EAAE,KAAK;SACZ,CAAC,CACH;KAAA;IACH,kBAAkB,EAAE,UAAC,MAA2B;QAC9C,OAAAD,2BAAmB,CACjB,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,EACvCC,2BAAmB,EAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAC1D;KAAA;IACH,cAAc,EAAE;QACd,OAAAD,2BAAmB,CACjB,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,EACvCC,2BAAmB,EAAc,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAC9D;KAAA;IACH,aAAa,EAAE,UAAC,OAAoB;QAClC,OAAAD,2BAAmB,CACjB,eAAe,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAC9CE,8BAAsB,EAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAC1D;KAAA;IACH,eAAe,EAAE,UAAC,OAAoB;QACpC,OAAAF,2BAAmB,CACjB,eAAe,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAC9CE,8BAAsB,EAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAC3D;KAAA;IACH,kBAAkB,EAAE,UAAC,OAAoB,EAAE,QAAiB;QAC1D,OAAAF,2BAAmB,CACjB,eAAe,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAC9CE,8BAAsB,EAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAC9D;KAAA;IACH,qBAAqB,EAAE;QACrB,OAAAF,2BAAmB,CACjB,eAAe,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAC9CE,8BAAsB,EAAW,CAAC,cAAc,EAAE,CACnD;KAAA;CACJ,KAAE;IAEU,eAAe,GAAG,UAC7B,SAAiB,EACjB,eAAiD,IACtC,OAAG,SAAS,SAAI,eAAiB;;ICjIjC,yBAAyB,GAAG,UAIvC,YAA2C;IAEpC,IAAA,OAAO,GAAIC,cAAQ,CAAC;QACzB,OAAA,yBAAyB,CAAa,OAAO,EAAE,YAAY,CAAC;KAAA,CAC7D,GAFa,CAEZ;IAEK,IAAA,OAAO,GAAIA,cAAQ,CAAC;QACzB,OAAA,yBAAyB,CACvB,OAAO,EACP,YAAY,CAAC,SAAS,CACvB;KAAA,CACF,GALa,CAKZ;IAEI,IAAA,KAAoBC,gBAAU,CAAC,OAAO,EAAE,YAAY,CAAC,EAApD,KAAK,QAAA,EAAE,QAAQ,QAAqC,CAAC;IAE5D,OAAO;QACL,OAAO,SAAA;QACP,KAAK,OAAA;QACL,QAAQ,UAAA;KACT,CAAC;AACJ;;ICrBa,6BAA6B,GAAG,SAAS,sBAAsB,CAE1E,EAG2D;QAF3D,gBAAgB,sBAAA,EAChB,QAAQ,cAAA;IAEF,IAAA,KAA+B,yBAAyB,CAC5D,8BAA8B,CAAC,gBAAgB,CAAC,CACjD,EAFO,KAAK,WAAA,EAAE,OAAO,aAAA,EAAE,QAAQ,cAE/B,CAAC;IAEF,QACE7B,+BAAC,mBAAmB,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,IACpE,QAAQ,CACW,EACtB;AACJ;;ACvBO,IAAM,UAAU,GAAG8B,0BAAM,CAAC,GAAG,oKAAA,iGAGnC,IAAA,CAAC;;;ICOW,iBAAiB,GAAqC,UAAC,EAGnE;QAFC,QAAQ,cAAA,EACR,6BAA6B,EAA7B,qBAAqB,mBAAG,KAAK,KAAA;IAE7B,IAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,IAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IAEzC,IAAM,eAAe,GAAGnB,iBAAW,CACjC,cAAM,OAAA,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,GAAA,EACxC,CAAC,OAAO,EAAE,QAAQ,CAAC,CACpB,CAAC;IAEF,QACEX,+BAACC,QAAG,IAAC,QAAQ,EAAE,MAAM;QAClB,QAAQ;QACR,CAAC,qBAAqB,KACrBD,+BAAC,UAAU;YACTA,+BAACO,mBAAU,IACT,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,eAAe,GACxB,CACS,CACd,CACG,EACN;AACJ;;IC1Ba,SAAS,GAAG,SAAS,SAAS,CAA6B,EAG1C;QAF5B,KAAK,WAAA,EACL,SAAS,eAAA;IAET,IAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,IAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IAEzC,IAAM,YAAY,GAAGI,iBAAW,CAAC;QAC/B,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC1C,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;KACjC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAEnC,QACEX,+BAAC,UAAU;QACTA,+BAAC+B,aAAI,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAI,CACxD,EACb;AACJ;;ICfa,gBAAgB,GAAG,SAAS,gBAAgB,CAGvD,EAK+C;QAJ/C,SAAS,eAAA,EACT,KAAK,WAAA,EACL,KAAK,WAAA,EACL,aAAa,mBAAA;IAEb,IAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,IAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IAEzC,IAAM,kBAAkB,GAAGpB,iBAAW,CACpC,UAAC,MAA2B;QAC1B,OAAA,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;KAAA,EAC9C,CAAC,QAAQ,EAAE,OAAO,CAAC,CACpB,CAAC;IAEF,IAAM,oBAAoB,GAAGA,iBAAW,CAAC;QACvC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,EAAE,KAAK,OAAA,EAAE,kBAAkB,oBAAA,EAAE,CAAC,CAAC;KAChD,EAAE,CAAC,aAAa,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC;IAE/C,IAAM,YAAY,GAAGA,iBAAW,CAAC;QAC/B,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC1C,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;KACjC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;IAEnC,QACEX,+BAAC,UAAU;QACTA,+BAAC+B,aAAI,IACH,KAAK,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,SAAS,EACzB,OAAO,EAAE,YAAY,EACrB,aAAa,EAAE,aAAa,GAAG,oBAAoB,GAAG,SAAS,GAC/D,CACS,EACb;AACJ;;ICrCa,YAAY,GAAG,SAAS,YAAY,CAG/C,EAK2C;QAJ3C,SAAS,eAAA,EACT,KAAK,WAAA,EACL,cAAc,oBAAA,EACd,mBAAmB,yBAAA;IAEnB,IAAI,EAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAA,EAAE;QAClB,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,IAAI,CAAC;SACb;QACD,OAAO/B,+BAAC,SAAS,IAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,GAAI,CAAC;KACnE;IAED,QACEA,gEACG,KAAK,CAAC,GAAG,CAAC,UAAC,EAAgB;YAAd,KAAK,WAAA,EAAE,KAAK,WAAA;QAAO,QAC/BA,+BAAC,gBAAgB,IACf,GAAG,EAAE,KAAK,EACV,KAAK,EAAE,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,SAAS,EACzB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,mBAAmB,EAClC,KAAK,EAAE,KAAK,GACZ;KACH,CAAC,CACD,EACH;AACJ;;ICpCa,gCAAgC,GAAG,UAK9C,SAAqB,EACrB,SAAiB,EACjB,OAA8B,IAI3B,QAAC;IACJ,KAAK,EAAE,2BAA2B,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IACjE,mBAAmB,EAAE,yCAAyC,CAC5D,SAAS,EACT,SAAS,CACV;CACF,KAAE;IAEU,2BAA2B,GAAG,UACzC,aAA4B,EAC5B,OAA8B;IAE9B,OAAAgC,qBAAgB,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG;;QACtC,IAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,KAAK,KAAK,GAAG,GAAA,CAAC,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,mCAAI,GAAG,EAAE,CAAC;KACpD,CAAC;AAHF,EAGG;IAEQ,yCAAyC,GAAG,UAIvD,SAAqB,EACrB,SAAiB;IAEjB,OAAO,UAAC,EAA6B;;YAA3B,kBAAkB,wBAAA,EAAE,KAAK,WAAA;QACjC,IAAM,SAAS,gBAAuB,SAAS,CAAC,SAAS,CAAC,CAAE,CAAC;QAC7D,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACzB,kBAAkB,EAAE;YAClB,GAAC,SAAS,IAAG,SAAS;cACY,EAAC,CAAC;KACvC,CAAC;AACJ;;IClCa,yBAAyB,GAAG,UAA6B,EAK5B;IAJxC,IAAA,OAAO,aAAA,EACP,KAAK,WAAA,EACL,aAAa,mBAAA,EACV,YAAY,cAJqD,qCAKrE,CADgB;IACkD,QACjEhC,+BAAC,mBAAmB,aAAC,qBAAqB,UAAK,YAAY;QACzDA,+BAACa,WAAM,IAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IACnD,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,UAAC,CAAC,IAAK,QACnBb,+BAACiC,kCAA2B,IAC1B,GAAG,EAAE,CAAC,CAAC,KAAK,EACZ,OAAO,EAAE;;gBACP,IAAI,KAAK,IAAI,aAAa,EAAE;oBAC1B,IAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAC5B,aAAa,uBACR,KAAK,gBACP,CAAC,CAAC,KAAK,IAAG,GAAG,OACd,CAAC;iBACJ;aACF,EACD,WAAW,EAAEjC,+BAACkC,cAAQ,IAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,KAAK,CAAC,GAAI;YAEhElC,+BAACmC,SAAI,QAAE,CAAC,CAAC,KAAK,CAAQ,CACM,IAC/B,CAAC,CACK,CACW,EACvB;;;ICzBY,sBAAsB,GAAG,UAA6B,EAMxB;IALzC,IAAA,OAAO,aAAA,EACP,KAAK,WAAA,EACL,iBAAiB,uBAAA,EACjB,aAAa,mBAAA,EACV,YAAY,cALkD,0DAMlE,CADgB;IAET,IAAA,KAAkBP,cAAQ,CAAS,EAAE,CAAC,EAArC,IAAI,QAAA,EAAE,OAAO,QAAwB,CAAC;IAE7C,IAAM,SAAS,GAAGQ,aAAO,CACvB;QACE,OAAA,KAAK;cACDJ,qBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAuB,UAAC,GAAG;;gBACpD,IAAM,MAAM,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,KAAK,KAAK,GAAG,GAAA,CAAC,CAAC;gBACrD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,mCAAI,GAAG,EAAE,CAAC;aACpD,CAAC;cACF,EAAE;KAAA,EACR,CAAC,OAAO,EAAE,KAAK,CAAC,CACjB,CAAC;IAEF,IAAM,eAAe,GAAGI,aAAO,CAAC;QAC9B,OAAO,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CACpB,UAAC,CAAC;YACA,OAAA,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC;gBAClE,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC;SAAA,CACrE,CAAC;KACH,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAEpB,IAAM,qBAAqB,GAAGzB,iBAAW,CACvC,UAAC,KAAkC;QACjC,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;KACtD,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF,QACEX,+BAAC,mBAAmB,eAAK,YAAY;QACnCA,+BAACqC,sBAAe,IACd,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,qBAAqB,EACpC,UAAU,EAAE,IAAI,EAChB,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,OAAO,EACtB,iBAAiB,EAAE,KAAK,GACxB,CACkB,EACtB;AACJ,EAAE;AAEF,IAAM,4BAA4B,GAAG,UACnC,KAAkC;IAElC,OAAO,KAAK,CAAC,MAAM,CAAgB,UAAC,GAAG,EAAE,IAAI;QAC3C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACvB,OAAO,GAAG,CAAC;KACZ,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;;ICnEY,4BAA4B,GAAG,UAK1C,SAAqB,EACrB,kBAA0B,EAC1B,gBAAwB,IAIrB,QAAC;IACJ,KAAK,EAAE,uBAAuB,CAC5B,SAAS,CAAC,kBAAkB,CAAC,EAC7B,SAAS,CAAC,gBAAgB,CAAC,CAC5B;IACD,mBAAmB,EAAE,qCAAqC,CACxD,kBAAkB,EAClB,gBAAgB,CACjB;CACF,KAAE;IAEU,uBAAuB,GAAG,UACrC,SAA6B,EAC7B,OAA2B;IAE3B,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE;QAC1B,OAAO,EAAE,CAAC;KACX;IACD,OAAO;QACL,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,aAAM,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAE,EAAE;KACvE,CAAC;AACJ,EAAE;IAEW,qCAAqC,GAAG,UAInD,kBAA0B,EAC1B,gBAAwB;IAExB,OAAO,UAAC,EAAsB;;YAApB,kBAAkB,wBAAA;QAC1B,kBAAkB,EAAE;YAClB,GAAC,kBAAkB,IAAG,SAAS;YAC/B,GAAC,gBAAgB,IAAG,SAAS;cACK,EAAC,CAAC;KACvC,CAAC;AACJ;;ICpDa,2BAA2B,GAAG,UAKzC,SAAqB,EACrB,kBAA0B,EAC1B,gBAAwB,IAIrB,QAAC;IACJ,KAAK,EAAE;QACL,SAAS,EAAE,SAAS,CAAC,kBAAkB,CAAC;QACxC,OAAO,EAAE,SAAS,CAAC,gBAAgB,CAAC;KACrC;IACD,aAAa,EAAE,UAAC,KAAK,EAAE,EAAqB;;YAAnB,QAAQ,cAAA,EAAE,OAAO,aAAA;QACxC,IAAM,MAAM,IAAwB;YAClC,GAAC,kBAAkB,IAAG,KAAK,CAAC,SAAS;YACrC,GAAC,gBAAgB,IAAG,KAAK,CAAC,OAAO;cAC3B,CAAA,CAAC;QACT,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;KAC9C;CACF;;ICiBY,wBAAwB,GAAG,UAGtC,EAKuD;IAJvD,IAAA,KAAK,WAAA,EACL,aAAa,mBAAA,EACb,SAAS,eAAA,EACN,sBAAsB,cAJzB,uCAKD,CAD0B;IAEzB,IAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,IAAM,OAAO,GAAG,sBAAsB,EAA2B,CAAC;IAElE,IAAM,OAAO,GAAGD,aAAO,CACrB,cAAM,QAAC,EAAE,QAAQ,UAAA,EAAE,OAAO,SAAA,EAAE,IAAC,EAC7B,CAAC,OAAO,EAAE,QAAQ,CAAC,CACpB,CAAC;IACI,IAAA,KAAkCR,cAAQ,CAC9C,WAAW,CACZ,EAFM,YAAY,QAAA,EAAE,eAAe,QAEnC,CAAC;IAEF,IAAM,cAAc,GAAGQ,aAAO,CAAC,cAAM,OAAAE,2BAAkB,CAAC,KAAK,CAAC,GAAA,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzE,IAAM,oBAAoB,GAAG3B,iBAAW,CACtC,UAAC,KAAgB;QACf,aAAa,CAAC4B,2BAAkB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;KACnD,EACD,CAAC,aAAa,EAAE,OAAO,CAAC,CACzB,CAAC;IAEF,QACEvC,+BAAC,mBAAmB,IAAC,SAAS,EAAE,SAAS;QACvCA,+BAACwC,QAAG,IAAC,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ;YAChCxC,+BAACwC,QAAG,IAAC,UAAU,EAAE,OAAO,EAAE,MAAM;gBAC9BxC,+BAACyC,0BAAiB,aAChB,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,cAAc,EACrB,aAAa,EAAE,oBAAoB,IAC/B,sBAAsB,EAC1B,CACE,CACF,CACc,EACtB;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stenajs-webui/filter",
|
|
3
|
-
"version": "15.0.0-alpha.
|
|
3
|
+
"version": "15.0.0-alpha.10",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "mattias800",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,16 +27,16 @@
|
|
|
27
27
|
"deploy": "gh-pages -d example/build"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@stenajs-webui/calendar": "15.0.0-alpha.
|
|
31
|
-
"@stenajs-webui/core": "15.0.0-alpha.
|
|
32
|
-
"@stenajs-webui/elements": "15.0.0-alpha.
|
|
33
|
-
"@stenajs-webui/forms": "15.0.0-alpha.
|
|
34
|
-
"@stenajs-webui/modal": "15.0.0-alpha.
|
|
35
|
-
"@stenajs-webui/panels": "15.0.0-alpha.
|
|
36
|
-
"@stenajs-webui/redux": "15.0.0-alpha.
|
|
37
|
-
"@stenajs-webui/select": "15.0.0-alpha.
|
|
38
|
-
"@stenajs-webui/theme": "15.0.0-alpha.
|
|
39
|
-
"date-fns": "2.
|
|
30
|
+
"@stenajs-webui/calendar": "15.0.0-alpha.10",
|
|
31
|
+
"@stenajs-webui/core": "15.0.0-alpha.10",
|
|
32
|
+
"@stenajs-webui/elements": "15.0.0-alpha.10",
|
|
33
|
+
"@stenajs-webui/forms": "15.0.0-alpha.10",
|
|
34
|
+
"@stenajs-webui/modal": "15.0.0-alpha.10",
|
|
35
|
+
"@stenajs-webui/panels": "15.0.0-alpha.10",
|
|
36
|
+
"@stenajs-webui/redux": "15.0.0-alpha.10",
|
|
37
|
+
"@stenajs-webui/select": "15.0.0-alpha.10",
|
|
38
|
+
"@stenajs-webui/theme": "15.0.0-alpha.10",
|
|
39
|
+
"date-fns": "2.26.0"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@emotion/styled": ">=11.3.0",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"files": [
|
|
65
65
|
"dist"
|
|
66
66
|
],
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "8f037313b4dcab0e80a779a2122455b3235087d4"
|
|
68
68
|
}
|