@stenajs-webui/filter 20.6.10 → 20.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/features/search-filter/components/SearchFilterSection.d.ts +1 -1
- package/dist/features/search-filter/components/context/SearchFilterContext.d.ts +1 -2
- package/dist/features/search-filter/components/context/SearchFilterLocalStateContext.d.ts +1 -2
- package/dist/features/search-filter/config/SearchFilterConfig.d.ts +2 -2
- package/dist/features/search-filter/redux/SearchFilterRedux.d.ts +2 -2
- package/dist/features/search-filter/section-factories/boolean-record/BooleanRecordTypes.d.ts +2 -2
- package/dist/index.es.js +7 -7
- package/dist/index.es.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
|
@@ -11,5 +11,5 @@ export interface SearchFilterSectionProps<TSectionKey extends string> {
|
|
|
11
11
|
error?: string;
|
|
12
12
|
onRetry?: () => void;
|
|
13
13
|
}
|
|
14
|
-
export declare const SearchFilterSection: <TSectionKey extends string>({ sectionId, label, loading, error, onRetry, disableContentPadding, children, leftIcon, contentRight, }:
|
|
14
|
+
export declare const SearchFilterSection: <TSectionKey extends string>({ sectionId, label, loading, error, onRetry, disableContentPadding, children, leftIcon, contentRight, }: PropsWithChildren<SearchFilterSectionProps<TSectionKey>>) => JSX.Element;
|
|
15
15
|
export declare const formatColumnIdToHeaderCellLabel: (columnId: string) => string;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
1
|
import { PropsWithChildren } from "react";
|
|
3
2
|
import { SearchFilterActions, SearchFilterDispatch, SearchFilterState } from "../../redux/SearchFilterRedux";
|
|
4
3
|
interface SearchFilterScopeProps<TFormModel, TSectionKey extends string> {
|
|
@@ -6,5 +5,5 @@ interface SearchFilterScopeProps<TFormModel, TSectionKey extends string> {
|
|
|
6
5
|
dispatch: SearchFilterDispatch<TFormModel>;
|
|
7
6
|
actions: SearchFilterActions<TFormModel, TSectionKey>;
|
|
8
7
|
}
|
|
9
|
-
export declare const SearchFilterContext: <TFormModel, TSectionKey extends string>({ state, dispatch, actions, children, }:
|
|
8
|
+
export declare const SearchFilterContext: <TFormModel, TSectionKey extends string>({ state, dispatch, actions, children, }: PropsWithChildren<SearchFilterScopeProps<TFormModel, TSectionKey>>) => JSX.Element;
|
|
10
9
|
export {};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
1
|
import { PropsWithChildren } from "react";
|
|
3
2
|
interface SearchFilterLocalScopeProps<TFormModel> {
|
|
4
3
|
initialFormModel: TFormModel;
|
|
5
4
|
}
|
|
6
|
-
export declare const SearchFilterLocalStateContext: <TFormModel>({ initialFormModel, children, }:
|
|
5
|
+
export declare const SearchFilterLocalStateContext: <TFormModel>({ initialFormModel, children, }: PropsWithChildren<SearchFilterLocalScopeProps<TFormModel>>) => JSX.Element;
|
|
7
6
|
export {};
|
|
@@ -2,11 +2,11 @@ export interface SearchFilterSectionChipModel {
|
|
|
2
2
|
value: string;
|
|
3
3
|
label: string;
|
|
4
4
|
}
|
|
5
|
-
export
|
|
5
|
+
export type SearchFilterSectionOnClickRemoveOnChip<TFormModel> = (arg: OnClickRemoveOnChipArg<TFormModel>) => void;
|
|
6
6
|
export interface ChipsArg<TSearchFilterModel> {
|
|
7
7
|
formModel: TSearchFilterModel;
|
|
8
8
|
}
|
|
9
|
-
export
|
|
9
|
+
export type FormFieldsSetter<TFormModel> = (fields: Partial<TFormModel>) => void;
|
|
10
10
|
export interface OnClickRemoveOnChipArg<TFormModel> {
|
|
11
11
|
value: string;
|
|
12
12
|
setFormModelFields: FormFieldsSetter<TFormModel>;
|
|
@@ -3,13 +3,13 @@ import { Dispatch } from "react";
|
|
|
3
3
|
export interface SearchFilterSettings {
|
|
4
4
|
open: boolean;
|
|
5
5
|
}
|
|
6
|
-
export
|
|
6
|
+
export type SearchFilterDispatch<TFormModel> = Dispatch<SearchFilterAction<TFormModel>>;
|
|
7
7
|
export interface SearchFilterState<TFormModel> {
|
|
8
8
|
expandedSections: ValueByIdState<boolean>;
|
|
9
9
|
formModel: EntityState<TFormModel>;
|
|
10
10
|
settings: EntityState<SearchFilterSettings>;
|
|
11
11
|
}
|
|
12
|
-
export
|
|
12
|
+
export type SearchFilterAction<TFormModel> = ReducerIdGateAction<ValueByIdAction<boolean>> | ReducerIdGateAction<EntityAction<TFormModel>> | ReducerIdGateAction<EntityAction<SearchFilterSettings>>;
|
|
13
13
|
export declare const createSearchFilterInitialState: <TFormModel>(initialFormModel: TFormModel) => SearchFilterState<TFormModel>;
|
|
14
14
|
export declare const createSearchFilterReducer: <TFormModel>(reducerId: string, initialState: SearchFilterState<TFormModel>) => import("redux").Reducer<import("redux").CombinedState<{
|
|
15
15
|
expandedSections: ValueByIdState<boolean>;
|
package/dist/features/search-filter/section-factories/boolean-record/BooleanRecordTypes.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type BooleanRecord = Record<string, boolean>;
|
|
2
2
|
export interface BooleanRecordOption {
|
|
3
3
|
value: string;
|
|
4
4
|
label: string;
|
|
5
5
|
}
|
|
6
|
-
export
|
|
6
|
+
export type BooleanRecordOptions = Array<BooleanRecordOption>;
|
package/dist/index.es.js
CHANGED
|
@@ -2,11 +2,11 @@ import { jsx as c, jsxs as v, Fragment as T } from "react/jsx-runtime";
|
|
|
2
2
|
import { createContext as M, useContext as L, useCallback as u, useState as w, useReducer as W, useMemo as R } from "react";
|
|
3
3
|
import { DrawerHeader as Y, Drawer as J } from "@stenajs-webui/modal";
|
|
4
4
|
import { cssColor as Q } from "@stenajs-webui/theme";
|
|
5
|
-
import { Column as D, Box as
|
|
5
|
+
import { Column as D, Box as y, Row as O, Space as U, Text as X, truthyKeysAsList as V } from "@stenajs-webui/core";
|
|
6
6
|
import { SecondaryButton as Z, stenaSlidersMini as _, MenuButton as I, Spinner as N, Banner as ee, FlatButton as j, ContentMenuButton as te, stenaClean as ne, Chip as H } from "@stenajs-webui/elements";
|
|
7
7
|
import { upperFirst as re, lowerCase as oe } from "lodash-es";
|
|
8
8
|
import { combineReducers as ce } from "redux";
|
|
9
|
-
import { reducerIdGate as
|
|
9
|
+
import { reducerIdGate as B, createValueByIdReducer as se, createEntityReducer as P, reducerIdGateAction as C, createEntityActions as g, createValueByIdActions as b } from "@stenajs-webui/redux";
|
|
10
10
|
import { Checkbox as ae } from "@stenajs-webui/forms";
|
|
11
11
|
import { ChipMultiSelect as le } from "@stenajs-webui/select";
|
|
12
12
|
import { stringsToDateRange as ie, dateRangeToStrings as de, DateRangeCalendar as ue } from "@stenajs-webui/calendar";
|
|
@@ -60,7 +60,7 @@ const he = ({ header: e = "Filter", ...t }) => /* @__PURE__ */ c(Y, { ...t, head
|
|
|
60
60
|
contentRight: n
|
|
61
61
|
}
|
|
62
62
|
),
|
|
63
|
-
/* @__PURE__ */ c(
|
|
63
|
+
/* @__PURE__ */ c(y, { spacing: 1, indent: 1, gap: 1, children: e })
|
|
64
64
|
]
|
|
65
65
|
}
|
|
66
66
|
)
|
|
@@ -160,15 +160,15 @@ const he = ({ header: e = "Filter", ...t }) => /* @__PURE__ */ c(Y, { ...t, head
|
|
|
160
160
|
formModel: e,
|
|
161
161
|
expandedSections: { values: {} }
|
|
162
162
|
}), fe = (e, t) => ce({
|
|
163
|
-
expandedSections:
|
|
163
|
+
expandedSections: B(
|
|
164
164
|
d(e, "expandedSections"),
|
|
165
165
|
se(t.expandedSections)
|
|
166
166
|
),
|
|
167
|
-
formModel:
|
|
167
|
+
formModel: B(
|
|
168
168
|
d(e, "formModel"),
|
|
169
169
|
P(t.formModel)
|
|
170
170
|
),
|
|
171
|
-
settings:
|
|
171
|
+
settings: B(
|
|
172
172
|
d(e, "settings"),
|
|
173
173
|
P(t.settings)
|
|
174
174
|
)
|
|
@@ -435,7 +435,7 @@ const he = ({ header: e = "Filter", ...t }) => /* @__PURE__ */ c(Y, { ...t, head
|
|
|
435
435
|
sectionId: n,
|
|
436
436
|
contentRight: r,
|
|
437
437
|
disableContentPadding: o,
|
|
438
|
-
children: /* @__PURE__ */ c(
|
|
438
|
+
children: /* @__PURE__ */ c(y, { flex: 1, alignItems: "center", children: /* @__PURE__ */ c(y, { background: "white", indent: !0, children: /* @__PURE__ */ c(
|
|
439
439
|
ue,
|
|
440
440
|
{
|
|
441
441
|
setFocusedInput: m,
|
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/components/StickyFooter.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/filter-checkbox/FilterCheckbox.tsx","../src/features/search-filter/features/filter-checkbox/FilterCheckboxList.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 { ReactNode } from \"react\";\nimport { DrawerHeader } from \"@stenajs-webui/modal\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ header = \"Filter\", ...props }) => {\n return <DrawerHeader {...props} header={header} />;\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 { ReactNode, useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Box, 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 header?: string;\n headerContentRight?: ReactNode;\n}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n header,\n headerContentRight,\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 floating\n isOpen={open}\n onRequestClose={closeDrawer}\n {...drawerProps}\n >\n <Column\n height={\"100%\"}\n borderRadius={\"var(--swui-border-radius)\"}\n background={cssColor(\"--lhds-color-ui-50\")}\n >\n <SearchFilterPanelHeader\n onRequestClose={closeDrawer}\n header={header}\n contentRight={headerContentRight}\n />\n <Box spacing={1} indent={1} gap={1}>\n {children}\n </Box>\n </Column>\n </Drawer>\n );\n};\n","import { SecondaryButton, stenaSlidersMini } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n leftIcon?: IconDefinition;\n}\n\nexport const SearchFilterButton: React.FC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n leftIcon = stenaSlidersMini,\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={leftIcon}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row, Space } from \"@stenajs-webui/core\";\nimport { lowerCase, upperFirst } from \"lodash-es\";\nimport {\n Banner,\n FlatButton,\n MenuButton,\n Spinner,\n} from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label?: string;\n leftIcon?: IconDefinition;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n leftIcon,\n contentRight,\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 <>\n <MenuButton\n label={activeLabel}\n leftIcon={leftIcon}\n expandable\n expanded={expanded}\n selected={expanded}\n onClick={onClickLabel}\n right={contentRight}\n >\n {loading ? (\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\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 children\n )}\n </MenuButton>\n {expanded && <Space />}\n </>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { BoxProps, Column } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\n\nexport interface StickySearchButtonProps extends Pick<BoxProps, \"gap\"> {\n children?: ReactNode;\n}\n\nexport const StickyFooter: React.FC<StickySearchButtonProps> = ({\n children,\n ...boxProps\n}) => {\n return (\n <Column\n style={{ marginTop: \"auto\" }}\n justifyContent={\"center\"}\n spacing={2}\n indent\n shadow={\"popover\"}\n zIndex={1}\n {...boxProps}\n >\n {children}\n </Column>\n );\n};\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 * as React from \"react\";\nimport { Row, Text } from \"@stenajs-webui/core\";\nimport { ContentMenuButton } from \"@stenajs-webui/elements\";\nimport { Checkbox, CheckboxProps } from \"@stenajs-webui/forms\";\n\nexport interface FilterCheckboxProps extends CheckboxProps {\n label: string;\n}\n\nexport const FilterCheckbox: React.FC<FilterCheckboxProps> = ({\n label,\n ...checkboxProps\n}) => {\n return (\n <ContentMenuButton>\n <Row gap={2} alignItems={\"center\"} justifyContent={\"flex-start\"}>\n <Checkbox {...checkboxProps} />\n <Text>{label}</Text>\n </Row>\n </ContentMenuButton>\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { Column } from \"@stenajs-webui/core\";\n\nexport interface FilterCheckboxListProps extends PropsWithChildren {\n maxHeight?: string;\n}\n\nexport const FilterCheckboxList: React.FC<FilterCheckboxListProps> = ({\n children,\n maxHeight,\n}) => {\n return (\n <Column\n maxHeight={maxHeight}\n overflowY={maxHeight ? \"auto\" : undefined}\n spacing={1}\n >\n {children}\n </Column>\n );\n};\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { FlatButton, stenaClean } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n children?: ReactNode;\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\"} alignItems={\"center\"} gap>\n {children}\n {!disableClearAllButton && (\n <FlatButton\n size={\"small\"}\n leftIcon={stenaClean}\n label={\"Clear\"}\n onClick={onClickClearAll}\n />\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\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 <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />;\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\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 <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\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(\n formModel[fieldName] as unknown as BooleanRecord,\n options\n ),\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 = { ...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 { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { FilterCheckbox } from \"../../../features/filter-checkbox/FilterCheckbox\";\nimport { FilterCheckboxList } from \"../../../features/filter-checkbox/FilterCheckboxList\";\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 <FilterCheckboxList maxHeight={\"400px\"}>\n {options?.map((d) => (\n <FilterCheckbox\n key={d.value}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n ))}\n </FilterCheckboxList>\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 {\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] as unknown as string | undefined,\n formModel[endDateFieldName] as unknown as string | undefined\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, string | undefined>\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] as unknown as string | undefined,\n endDate: formModel[endDateFieldName] as unknown as string | undefined,\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 Omit<\n SearchFilterSectionProps<TSectionKey>,\n \"label\" | \"onRetry\" | \"error\" | \"loading\"\n >,\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 label?: string;\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 contentRight,\n disableContentPadding,\n label,\n leftIcon,\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] =\n useState<DateRangeFocusedInput>(\"startDate\");\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\n label={label}\n leftIcon={leftIcon}\n sectionId={sectionId}\n contentRight={contentRight}\n disableContentPadding={disableContentPadding}\n >\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":["SearchFilterPanelHeader","header","props","jsx","DrawerHeader","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","open","dispatch","actions","closeDrawer","useCallback","Drawer","jsxs","Column","cssColor","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","contentRight","state","expanded","onClickLabel","activeLabel","formatColumnIdToHeaderCellLabel","Fragment","MenuButton","Row","Spinner","Banner","FlatButton","Space","columnId","upperFirst","lowerCase","StickyFooter","boxProps","SearchFilterModelContext","useSearchFilterModel","SearchFilterContext","createSearchFilterInitialState","initialFormModel","createSearchFilterReducer","reducerId","initialState","combineReducers","reducerIdGate","getReducerIdFor","createValueByIdReducer","createEntityReducer","createSearchFilterActions","reducerIdGateAction","createEntityActions","fields","section","createValueByIdActions","reducerIdSuffix","useLocalSearchFilterState","reducer","useState","useReducer","SearchFilterLocalStateContext","FilterCheckbox","checkboxProps","ContentMenuButton","Checkbox","Text","FilterCheckboxList","maxHeight","SearchFilterChips","disableClearAllButton","onClickClearAll","stenaClean","EmptyChip","Chip","SearchFilterChip","value","onClickRemove","setFormModelFields","onClickRemoveHandler","SectionChips","chips","emptyChipLabel","onClickRemoveOnChip","createChipsPropsForBooleanRecord","formModel","fieldName","options","createChipsForBooleanRecord","createOnClickRemoveOnChipForBooleanRecord","booleanRecord","truthyKeysAsList","key","option","newRecord","SimpleCheckboxListSection","onValueChange","sectionProps","d","v","ChipMultiSelectSection","noneSelectedLabel","text","setText","listValue","useMemo","o","filteredOptions","p","onValueChangeInternal","createBooleanRecordFromValue","ChipMultiSelect","sum","item","createChipsPropsForDateRange","startDateFieldName","endDateFieldName","createChipsForDateRange","createOnClickRemoveOnChipForDateRange","startDate","endDate","createDateRangeSectionProps","DateRangeCalendarSection","dateRangeCalendarProps","focusedInput","setFocusedInput","dateRangeValue","stringsToDateRange","onValueChangeHandler","dateRangeToStrings","DateRangeCalendar"],"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/components/StickyFooter.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/filter-checkbox/FilterCheckbox.tsx","../src/features/search-filter/features/filter-checkbox/FilterCheckboxList.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 { ReactNode } from \"react\";\nimport { DrawerHeader } from \"@stenajs-webui/modal\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ header = \"Filter\", ...props }) => {\n return <DrawerHeader {...props} header={header} />;\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 { ReactNode, useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Box, 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 header?: string;\n headerContentRight?: ReactNode;\n}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n header,\n headerContentRight,\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 floating\n isOpen={open}\n onRequestClose={closeDrawer}\n {...drawerProps}\n >\n <Column\n height={\"100%\"}\n borderRadius={\"var(--swui-border-radius)\"}\n background={cssColor(\"--lhds-color-ui-50\")}\n >\n <SearchFilterPanelHeader\n onRequestClose={closeDrawer}\n header={header}\n contentRight={headerContentRight}\n />\n <Box spacing={1} indent={1} gap={1}>\n {children}\n </Box>\n </Column>\n </Drawer>\n );\n};\n","import { SecondaryButton, stenaSlidersMini } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n leftIcon?: IconDefinition;\n}\n\nexport const SearchFilterButton: React.FC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n leftIcon = stenaSlidersMini,\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={leftIcon}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row, Space } from \"@stenajs-webui/core\";\nimport { lowerCase, upperFirst } from \"lodash-es\";\nimport {\n Banner,\n FlatButton,\n MenuButton,\n Spinner,\n} from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label?: string;\n leftIcon?: IconDefinition;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n leftIcon,\n contentRight,\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 <>\n <MenuButton\n label={activeLabel}\n leftIcon={leftIcon}\n expandable\n expanded={expanded}\n selected={expanded}\n onClick={onClickLabel}\n right={contentRight}\n >\n {loading ? (\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\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 children\n )}\n </MenuButton>\n {expanded && <Space />}\n </>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { BoxProps, Column } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\n\nexport interface StickySearchButtonProps extends Pick<BoxProps, \"gap\"> {\n children?: ReactNode;\n}\n\nexport const StickyFooter: React.FC<StickySearchButtonProps> = ({\n children,\n ...boxProps\n}) => {\n return (\n <Column\n style={{ marginTop: \"auto\" }}\n justifyContent={\"center\"}\n spacing={2}\n indent\n shadow={\"popover\"}\n zIndex={1}\n {...boxProps}\n >\n {children}\n </Column>\n );\n};\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 * as React from \"react\";\nimport { Row, Text } from \"@stenajs-webui/core\";\nimport { ContentMenuButton } from \"@stenajs-webui/elements\";\nimport { Checkbox, CheckboxProps } from \"@stenajs-webui/forms\";\n\nexport interface FilterCheckboxProps extends CheckboxProps {\n label: string;\n}\n\nexport const FilterCheckbox: React.FC<FilterCheckboxProps> = ({\n label,\n ...checkboxProps\n}) => {\n return (\n <ContentMenuButton>\n <Row gap={2} alignItems={\"center\"} justifyContent={\"flex-start\"}>\n <Checkbox {...checkboxProps} />\n <Text>{label}</Text>\n </Row>\n </ContentMenuButton>\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { Column } from \"@stenajs-webui/core\";\n\nexport interface FilterCheckboxListProps extends PropsWithChildren {\n maxHeight?: string;\n}\n\nexport const FilterCheckboxList: React.FC<FilterCheckboxListProps> = ({\n children,\n maxHeight,\n}) => {\n return (\n <Column\n maxHeight={maxHeight}\n overflowY={maxHeight ? \"auto\" : undefined}\n spacing={1}\n >\n {children}\n </Column>\n );\n};\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { FlatButton, stenaClean } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n children?: ReactNode;\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\"} alignItems={\"center\"} gap>\n {children}\n {!disableClearAllButton && (\n <FlatButton\n size={\"small\"}\n leftIcon={stenaClean}\n label={\"Clear\"}\n onClick={onClickClearAll}\n />\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\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 <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />;\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\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 <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\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(\n formModel[fieldName] as unknown as BooleanRecord,\n options\n ),\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 newBooleanRecord = { ...formModel[fieldName] } as BooleanRecord;\n newBooleanRecord[value] = false;\n setFormModelFields({\n [fieldName]: newBooleanRecord,\n } as unknown as Partial<TFormModel>);\n };\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { FilterCheckbox } from \"../../../features/filter-checkbox/FilterCheckbox\";\nimport { FilterCheckboxList } from \"../../../features/filter-checkbox/FilterCheckboxList\";\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 <FilterCheckboxList maxHeight={\"400px\"}>\n {options?.map((d) => (\n <FilterCheckbox\n key={d.value}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n ))}\n </FilterCheckboxList>\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 {\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] as unknown as string | undefined,\n formModel[endDateFieldName] as unknown as string | undefined\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, string | undefined>\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] as unknown as string | undefined,\n endDate: formModel[endDateFieldName] as unknown as string | undefined,\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 Omit<\n SearchFilterSectionProps<TSectionKey>,\n \"label\" | \"onRetry\" | \"error\" | \"loading\"\n >,\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 label?: string;\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 contentRight,\n disableContentPadding,\n label,\n leftIcon,\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] =\n useState<DateRangeFocusedInput>(\"startDate\");\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\n label={label}\n leftIcon={leftIcon}\n sectionId={sectionId}\n contentRight={contentRight}\n disableContentPadding={disableContentPadding}\n >\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":["SearchFilterPanelHeader","header","props","jsx","DrawerHeader","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","open","dispatch","actions","closeDrawer","useCallback","Drawer","jsxs","Column","cssColor","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","contentRight","state","expanded","onClickLabel","activeLabel","formatColumnIdToHeaderCellLabel","Fragment","MenuButton","Row","Spinner","Banner","FlatButton","Space","columnId","upperFirst","lowerCase","StickyFooter","boxProps","SearchFilterModelContext","useSearchFilterModel","SearchFilterContext","createSearchFilterInitialState","initialFormModel","createSearchFilterReducer","reducerId","initialState","combineReducers","reducerIdGate","getReducerIdFor","createValueByIdReducer","createEntityReducer","createSearchFilterActions","reducerIdGateAction","createEntityActions","fields","section","createValueByIdActions","reducerIdSuffix","useLocalSearchFilterState","reducer","useState","useReducer","SearchFilterLocalStateContext","FilterCheckbox","checkboxProps","ContentMenuButton","Checkbox","Text","FilterCheckboxList","maxHeight","SearchFilterChips","disableClearAllButton","onClickClearAll","stenaClean","EmptyChip","Chip","SearchFilterChip","value","onClickRemove","setFormModelFields","onClickRemoveHandler","SectionChips","chips","emptyChipLabel","onClickRemoveOnChip","createChipsPropsForBooleanRecord","formModel","fieldName","options","createChipsForBooleanRecord","createOnClickRemoveOnChipForBooleanRecord","booleanRecord","truthyKeysAsList","key","option","newBooleanRecord","SimpleCheckboxListSection","onValueChange","sectionProps","d","v","ChipMultiSelectSection","noneSelectedLabel","text","setText","listValue","useMemo","o","filteredOptions","p","onValueChangeInternal","createBooleanRecordFromValue","ChipMultiSelect","sum","item","createChipsPropsForDateRange","startDateFieldName","endDateFieldName","createChipsForDateRange","createOnClickRemoveOnChipForDateRange","startDate","endDate","createDateRangeSectionProps","DateRangeCalendarSection","dateRangeCalendarProps","focusedInput","setFocusedInput","dateRangeValue","stringsToDateRange","onValueChangeHandler","dateRangeToStrings","DateRangeCalendar"],"mappings":";;;;;;;;;;;;AAUO,MAAMA,KAET,CAAC,EAAE,QAAAC,IAAS,UAAU,GAAGC,QACnB,gBAAAC,EAAAC,GAAA,EAAc,GAAGF,GAAO,QAAAD,EAAgB,CAAA,GCVrCI,IAA2BC,EAEtC,IAA6C,GAElCC,IAAuB,MAEE;AAC9B,QAAAC,IAAIC,EAAWJ,CAAwB;AAC7C,MAAI,CAACG;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGG,SAAAA;AACT,GCdaE,IAA8BJ,EAEzC,IAAgD,GAErCK,IAA0B,MAAM;AACrC,QAAAH,IAAIC,EAAWC,CAA2B;AAChD,MAAI,CAACF;AACG,UAAA,IAAI,MAAM,yCAAyC;AAEpD,SAAAA;AACT,GCVaI,IAA6BN,EAExC,IAAoD,GAEzCO,IAAyB,MAG/B;AACC,QAAAL,IAAIC,EAAWG,CAA0B;AAC/C,MAAI,CAACJ;AACG,UAAA,IAAI,MAAM,wCAAwC;AAEnD,SAAAA;AACT,GCAaM,KAAwD,CAAC;AAAA,EACpE,UAAAC;AAAA,EACA,QAAAd;AAAA,EACA,oBAAAe;AAAA,EACA,GAAGC;AACL,MAAM;AACE,QAAA;AAAA,IACJ,UAAU,EAAE,MAAAC,EAAK;AAAA,MACfX,EAAqB,GACnBY,IAAWR,KACXS,IAAUP,KAEVQ,IAAcC,EAAY,MAAM;AAC3B,IAAAH,EAAAC,EAAQ,cAAc;AAAA,EAAA,GAC9B,CAACA,GAASD,CAAQ,CAAC;AAGpB,SAAA,gBAAAhB;AAAA,IAACoB;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,QAAQL;AAAA,MACR,gBAAgBG;AAAA,MACf,GAAGJ;AAAA,MAEJ,UAAA,gBAAAO;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,YAAYC,EAAS,oBAAoB;AAAA,UAEzC,UAAA;AAAA,YAAA,gBAAAvB;AAAA,cAACH;AAAA,cAAA;AAAA,gBACC,gBAAgBqB;AAAA,gBAChB,QAAApB;AAAA,gBACA,cAAce;AAAA,cAAA;AAAA,YAChB;AAAA,YACA,gBAAAb,EAACwB,KAAI,SAAS,GAAG,QAAQ,GAAG,KAAK,GAC9B,UAAAZ,GACH;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN,GC3Caa,KAA8D,CAAC;AAAA,EAC1E,OAAAC,IAAQ;AAAA,EACR,UAAAC,IAAWC;AACb,MAAM;AACJ,QAAMZ,IAAWR,KACXS,IAAUP,KAEVmB,IAAgBV,EAAY,MAAM;AAC7B,IAAAH,EAAAC,EAAQ,aAAa;AAAA,EAAA,GAC7B,CAACA,GAASD,CAAQ,CAAC;AAGpB,SAAA,gBAAAhB;AAAA,IAAC8B;AAAA,IAAA;AAAA,MACC,OAAAJ;AAAA,MACA,UAAAC;AAAA,MACA,SAASE;AAAA,IAAA;AAAA,EAAA;AAGf,GCJaE,IAAsB,SAEjC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAN;AAAA,EACA,SAAAO;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,UAAAxB;AAAA,EACA,UAAAe;AAAA,EACA,cAAAU;AACF,GAA6D;AAC3D,QAAMC,IAAQlC,KACRY,IAAWR,KACXS,IAAUP,KAEV6B,IAAWD,EAAM,iBAAiB,OAAON,CAAS,KAAK,IAEvDQ,IAAerB,EAAY,MAAM;AACrC,IAAAH,EAASC,EAAQ,mBAAmBe,GAAW,CAACO,CAAQ,CAAC;AAAA,KACxD,CAACtB,GAASD,GAAUuB,GAAUP,CAAS,CAAC,GAErCS,IAAcf,KAASgB,GAAgCV,CAAS;AAEtE,SAEI,gBAAAX,EAAAsB,GAAA,EAAA,UAAA;AAAA,IAAA,gBAAA3C;AAAA,MAAC4C;AAAA,MAAA;AAAA,QACC,OAAOH;AAAA,QACP,UAAAd;AAAA,QACA,YAAU;AAAA,QACV,UAAAY;AAAA,QACA,UAAUA;AAAA,QACV,SAASC;AAAA,QACT,OAAOH;AAAA,QAEN,UACCJ,IAAA,gBAAAjC,EAAC6C,GAAI,EAAA,SAAO,IAAC,gBAAgB,UAAU,MAAM,GAC3C,4BAACC,GAAQ,EAAA,MAAM,SAAS,EAAA,CAC1B,IACEZ,IACF,gBAAAlC;AAAA,UAAC+C;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,MAAMb;AAAA,YACN,cACEC,IAAW,gBAAAnC,EAAAgD,GAAA,EAAW,OAAO,SAAS,SAASb,EAAS,CAAA,IAAK;AAAA,UAAA;AAAA,QAAA,IAIjEvB;AAAA,MAEA;AAAA,IAEJ;AAAA,IACC2B,uBAAaU,GAAM,EAAA;AAAA,EACtB,EAAA,CAAA;AAEJ,GAEaP,KAAkC,CAACQ,MAC9CC,GAAWC,GAAUF,CAAQ,CAAC,GC9EnBG,KAAkD,CAAC;AAAA,EAC9D,UAAAzC;AAAA,EACA,GAAG0C;AACL,MAEI,gBAAAtD;AAAA,EAACsB;AAAA,EAAA;AAAA,IACC,OAAO,EAAE,WAAW,OAAO;AAAA,IAC3B,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,QAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,IACP,GAAGgC;AAAA,IAEH,UAAA1C;AAAA,EAAA;AAAA,GCpBM2C,IAA2BpD,EAAuB,IAAe,GAEjEqD,KAAuB,MAA8B;AAC1D,QAAAnD,IAAIC,EAAWiD,CAAwB;AAC7C,MAAI,CAAClD;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAGG,SAAAA;AACT,GCMaoD,KAAsB,SAGjC;AAAA,EACA,OAAAnB;AAAA,EACA,UAAAtB;AAAA,EACA,SAAAC;AAAA,EACA,UAAAL;AACF,GAAuE;AAEnE,SAAA,gBAAAZ;AAAA,IAACO,EAA4B;AAAA,IAA5B;AAAA,MACC,OAAOS;AAAA,MAEP,UAAA,gBAAAhB,EAACS,EAA2B,UAA3B,EAAoC,OAAOQ,GAC1C,UAAA,gBAAAjB,EAACE,EAAyB,UAAzB,EAAkC,OAAOoC,GACxC,UAAA,gBAAAtC,EAACuD,EAAyB,UAAzB,EAAkC,OAAOjB,EAAM,WAC7C,UAAA1B,GACH,EAAA,CACF,EACF,CAAA;AAAA,IAAA;AAAA,EAAA;AAGN,GCLa8C,KAAiC,CAC5CC,OACmC;AAAA,EACnC,UAAU;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,WAAWA;AAAA,EACX,kBAAkB,EAAE,QAAQ,GAAG;AACjC,IAEaC,KAA4B,CACvCC,GACAC,MAEAC,GAAgB;AAAA,EACd,kBAAkBC;AAAA,IAChBC,EAAgBJ,GAAW,kBAAkB;AAAA,IAC7CK,GAAgCJ,EAAa,gBAAgB;AAAA,EAC/D;AAAA,EACA,WAAWE;AAAA,IACTC,EAAgBJ,GAAW,WAAW;AAAA,IACtCM,EAAgCL,EAAa,SAAS;AAAA,EACxD;AAAA,EACA,UAAUE;AAAA,IACRC,EAAgBJ,GAAW,UAAU;AAAA,IACrCM,EAA0CL,EAAa,QAAQ;AAAA,EACjE;AACF,CAAC,GAkBUM,KAA4B,CAIvCP,GACAF,OACkD;AAAA,EAClD,aAAa,MACXU;AAAA,IACEJ,EAAgBJ,GAAW,UAAU;AAAA,IACrCS,EAAA,EAA4C,gBAAgB;AAAA,MAC1D,MAAM;AAAA,IAAA,CACP;AAAA,EACH;AAAA,EACF,cAAc,MACZD;AAAA,IACEJ,EAAgBJ,GAAW,UAAU;AAAA,IACrCS,EAAA,EAA4C,gBAAgB;AAAA,MAC1D,MAAM;AAAA,IAAA,CACP;AAAA,EACH;AAAA,EACF,oBAAoB,CAACC,MACnBF;AAAA,IACEJ,EAAgBJ,GAAW,WAAW;AAAA,IACtCS,EAAkC,EAAA,gBAAgBC,CAAM;AAAA,EAC1D;AAAA,EACF,gBAAgB,MACdF;AAAA,IACEJ,EAAgBJ,GAAW,WAAW;AAAA,IACtCS,EAAkC,EAAA,UAAUX,CAAgB;AAAA,EAC9D;AAAA,EACF,eAAe,CAACa,MACdH;AAAA,IACEJ,EAAgBJ,GAAW,kBAAkB;AAAA,IAC7CY,IAAkC,SAASD,GAAS,EAAI;AAAA,EAC1D;AAAA,EACF,iBAAiB,CAACA,MAChBH;AAAA,IACEJ,EAAgBJ,GAAW,kBAAkB;AAAA,IAC7CY,IAAkC,SAASD,GAAS,EAAK;AAAA,EAC3D;AAAA,EACF,oBAAoB,CAACA,GAAsBjC,MACzC8B;AAAA,IACEJ,EAAgBJ,GAAW,kBAAkB;AAAA,IAC7CY,IAAkC,SAASD,GAASjC,CAAQ;AAAA,EAC9D;AAAA,EACF,uBAAuB,MACrB8B;AAAA,IACEJ,EAAgBJ,GAAW,kBAAkB;AAAA,IAC7CY,EAAA,EAAkC,eAAe;AAAA,EACnD;AACJ,IAEaR,IAAkB,CAC7BJ,GACAa,MACW,GAAGb,CAAS,IAAIa,CAAe,ICjI/BC,KAA4B,CAIvCb,MACG;AACG,QAAA,CAACc,CAAO,IAAIC;AAAA,IAAS,MACzBjB,GAAsC,SAASE,CAAY;AAAA,EAAA,GAGvD,CAAC7C,CAAO,IAAI4D;AAAA,IAAS,MACzBT;AAAA,MACE;AAAA,MACAN,EAAa;AAAA,IACf;AAAA,EAAA,GAGI,CAACxB,GAAOtB,CAAQ,IAAI8D,EAAWF,GAASd,CAAY;AAEnD,SAAA;AAAA,IACL,SAAA7C;AAAA,IACA,OAAAqB;AAAA,IACA,UAAAtB;AAAA,EAAA;AAEJ,GCrBa+D,KAAgC,SAE3C;AAAA,EACA,kBAAApB;AAAA,EACA,UAAA/C;AACF,GAA+D;AAC7D,QAAM,EAAE,OAAA0B,GAAO,SAAArB,GAAS,UAAAD,EAAa,IAAA2D;AAAA,IACnCjB,GAA+BC,CAAgB;AAAA,EAAA;AAGjD,SACG,gBAAA3D,EAAAyD,IAAA,EAAoB,OAAAnB,GAAc,SAAArB,GAAkB,UAAAD,GAClD,UAAAJ,EACH,CAAA;AAEJ,GChBaoE,KAAgD,CAAC;AAAA,EAC5D,OAAAtD;AAAA,EACA,GAAGuD;AACL,MAEI,gBAAAjF,EAACkF,MACC,UAAC,gBAAA7D,EAAAwB,GAAA,EAAI,KAAK,GAAG,YAAY,UAAU,gBAAgB,cACjD,UAAA;AAAA,EAAC,gBAAA7C,EAAAmF,IAAA,EAAU,GAAGF,GAAe;AAAA,EAC7B,gBAAAjF,EAACoF,KAAM,UAAM1D,EAAA,CAAA;AAAA,EACf,CAAA,EACF,CAAA,GCXS2D,KAAwD,CAAC;AAAA,EACpE,UAAAzE;AAAA,EACA,WAAA0E;AACF,MAEI,gBAAAtF;AAAA,EAACsB;AAAA,EAAA;AAAA,IACC,WAAAgE;AAAA,IACA,WAAWA,IAAY,SAAS;AAAA,IAChC,SAAS;AAAA,IAER,UAAA1E;AAAA,EAAA;AAAA,GCNM2E,KAAsD,CAAC;AAAA,EAClE,UAAA3E;AAAA,EACA,uBAAA4E,IAAwB;AAC1B,MAAM;AACJ,QAAMxE,IAAWR,KACXS,IAAUP,KAEV+E,IAAkBtE;AAAA,IACtB,MAAMH,EAASC,EAAQ,gBAAgB;AAAA,IACvC,CAACA,GAASD,CAAQ;AAAA,EAAA;AAGpB,2BACG6B,GAAI,EAAA,UAAU,QAAQ,YAAY,UAAU,KAAG,IAC7C,UAAA;AAAA,IAAAjC;AAAA,IACA,CAAC4E,KACA,gBAAAxF;AAAA,MAACgD;AAAA,MAAA;AAAA,QACC,MAAM;AAAA,QACN,UAAU0C;AAAA,QACV,OAAO;AAAA,QACP,SAASD;AAAA,MAAA;AAAA,IACX;AAAA,EAEJ,EAAA,CAAA;AAEJ,GC1BaE,KAAY,SAA+C;AAAA,EACtE,OAAAjE;AAAA,EACA,WAAAM;AACF,GAAgC;AAC9B,QAAMhB,IAAWR,KACXS,IAAUP,KAEV8B,IAAerB,EAAY,MAAM;AAC5B,IAAAH,EAAAC,EAAQ,uBAAuB,GAC/BD,EAAAC,EAAQ,cAAce,CAAS,CAAC,GAChChB,EAAAC,EAAQ,aAAa;AAAA,EAC7B,GAAA,CAACA,GAASD,GAAUgB,CAAS,CAAC;AAEjC,2BAAQ4D,GAAK,EAAA,OAAAlE,GAAc,SAAS,aAAa,SAASc,EAAc,CAAA;AAC1E,GCXaqD,KAAmB,SAG9B;AAAA,EACA,WAAA7D;AAAA,EACA,OAAAN;AAAA,EACA,OAAAoE;AAAA,EACA,eAAAC;AACF,GAAmD;AACjD,QAAM/E,IAAWR,KACXS,IAAUP,KAEVsF,IAAqB7E;AAAA,IACzB,CAACoD,MACCvD,EAASC,EAAQ,mBAAmBsD,CAAM,CAAC;AAAA,IAC7C,CAACvD,GAAUC,CAAO;AAAA,EAAA,GAGdgF,IAAuB9E,EAAY,MAAM;AAC7B,IAAA4E,KAAA,QAAAA,EAAA,EAAE,OAAAD,GAAO,oBAAAE,EAAA;AAAA,EACxB,GAAA,CAACD,GAAeC,GAAoBF,CAAK,CAAC,GAEvCtD,IAAerB,EAAY,MAAM;AAC5B,IAAAH,EAAAC,EAAQ,uBAAuB,GAC/BD,EAAAC,EAAQ,cAAce,CAAS,CAAC,GAChChB,EAAAC,EAAQ,aAAa;AAAA,EAC7B,GAAA,CAACA,GAASD,GAAUgB,CAAS,CAAC;AAG/B,SAAA,gBAAAhC;AAAA,IAAC4F;AAAA,IAAA;AAAA,MACC,OAAOlE,KAASM;AAAA,MAChB,SAASQ;AAAA,MACT,eAAeuD,IAAgBE,IAAuB;AAAA,IAAA;AAAA,EAAA;AAG5D,GClCaC,KAAe,SAG1B;AAAA,EACA,WAAAlE;AAAA,EACA,OAAAmE;AAAA,EACA,gBAAAC;AAAA,EACA,qBAAAC;AACF,GAA+C;AACzC,SAACF,KAAA,QAAAA,EAAO,gCASP,UAAMA,EAAA,IAAI,CAAC,EAAE,OAAAzE,GAAO,OAAAoE,QACnB,gBAAA9F;AAAA,IAAC6F;AAAA,IAAA;AAAA,MAEC,OAAOnE,KAASM;AAAA,MAChB,WAAAA;AAAA,MACA,eAAeqE;AAAA,MACf,OAAAP;AAAA,IAAA;AAAA,IAJKA;AAAA,EAMR,CAAA,EACH,CAAA,IAjBKM,IAGG,gBAAApG,EAAA2F,IAAA,EAAU,WAAA3D,GAAsB,OAAOoE,EAAgB,CAAA,IAFtD;AAkBb,GCpCaE,KAAmC,CAK9CC,GACAC,GACAC,OAII;AAAA,EACJ,OAAOC;AAAA,IACLH,EAAUC,CAAS;AAAA,IACnBC;AAAA,EACF;AAAA,EACA,qBAAqBE;AAAA,IACnBJ;AAAA,IACAC;AAAA,EACF;AACF,IAEaE,KAA8B,CACzCE,GACAH,MAEAI,EAAiBD,CAAa,EAAE,IAAI,CAACE,MAAQ;AAC3C,QAAMC,IAASN,KAAA,gBAAAA,EAAS,KAAK,CAAC,MAAM,EAAE,UAAUK;AAChD,SAAO,EAAE,OAAOA,GAAK,QAAOC,KAAA,gBAAAA,EAAQ,UAASD;AAC/C,CAAC,GAEUH,KAA4C,CAIvDJ,GACAC,MAEO,CAAC,EAAE,oBAAAR,GAAoB,OAAAF,QAAY;AACxC,QAAMkB,IAAmB,EAAE,GAAGT,EAAUC,CAAS,EAAE;AACnD,EAAAQ,EAAiBlB,CAAK,IAAI,IACPE,EAAA;AAAA,IACjB,CAACQ,CAAS,GAAGQ;AAAA,EAAA,CACoB;AAAA,GCnC1BC,KAA4B,CAA6B;AAAA,EACpE,SAAAR;AAAA,EACA,OAAAX;AAAA,EACA,eAAAoB;AAAA,EACA,GAAGC;AACL,MACG,gBAAAnH,EAAA+B,GAAA,EAAoB,uBAAqB,IAAE,GAAGoF,GAC7C,UAAC,gBAAAnH,EAAAqF,IAAA,EAAmB,WAAW,SAC5B,UAASoB,KAAA,gBAAAA,EAAA,IAAI,CAACW,MACb,gBAAApH;AAAA,EAACgF;AAAA,EAAA;AAAA,IAEC,OAAOc,KAAA,gBAAAA,EAAQsB,EAAE;AAAA,IACjB,OAAOA,EAAE;AAAA,IACT,eAAe,CAACC,MACdH,KAAA,gBAAAA,EAAgB;AAAA,MACd,GAAGpB;AAAA,MACH,CAACsB,EAAE,KAAK,GAAGC;AAAA,IAAA;AAAA,EACZ;AAAA,EAPED,EAAE;AAST,GAEJ,CAAA,EACF,CAAA,GCpBWE,KAAyB,CAA6B;AAAA,EACjE,SAAAb;AAAA,EACA,OAAAX;AAAA,EACA,mBAAAyB;AAAA,EACA,eAAAL;AAAA,EACA,GAAGC;AACL,MAAoE;AAClE,QAAM,CAACK,GAAMC,CAAO,IAAI5C,EAAiB,EAAE,GAErC6C,IAAYC;AAAA,IAChB,MACE7B,IACIe,EAAiBf,CAAK,EAAE,IAA0B,CAACgB,MAAQ;AACzD,YAAMC,IAASN,KAAA,gBAAAA,EAAS,KAAK,CAACmB,MAAMA,EAAE,UAAUd;AAChD,aAAO,EAAE,OAAOA,GAAK,QAAOC,KAAA,gBAAAA,EAAQ,UAASD;IAC9C,CAAA,IACD,CAAC;AAAA,IACP,CAACL,GAASX,CAAK;AAAA,EAAA,GAGX+B,IAAkBF,EAAQ,MACvBlB,KAAA,gBAAAA,EAAS;AAAA,IACd,CAACqB,MACCA,EAAE,MAAM,kBAAoB,EAAA,QAAQN,EAAK,mBAAmB,IAAI,MAChEM,EAAE,MAAM,kBAAkB,EAAE,QAAQN,EAAK,mBAAmB,IAAI;AAAA,KAEnE,CAACf,GAASe,CAAI,CAAC,GAEZO,IAAwB5G;AAAA,IAC5B,CAAC2E,MAAuC;AACtB,MAAAoB,KAAA,QAAAA,EAAAc,GAA6BlC,CAAK;AAAA,IACpD;AAAA,IACA,CAACoB,CAAa;AAAA,EAAA;AAId,SAAA,gBAAAlH,EAAC+B,GAAqB,EAAA,GAAGoF,GACvB,UAAA,gBAAAnH;AAAA,IAACiI;AAAA,IAAA;AAAA,MACC,SAASJ;AAAA,MACT,OAAOH;AAAA,MACP,eAAeK;AAAA,MACf,YAAYP;AAAA,MACZ,mBAAAD;AAAA,MACA,eAAeE;AAAA,MACf,mBAAmB;AAAA,IAAA;AAAA,EAEvB,EAAA,CAAA;AAEJ,GAEMO,KAA+B,CACnClC,MAEOA,EAAM,OAAsB,CAACoC,GAAKC,OACnCD,EAAAC,EAAK,KAAK,IAAI,IACXD,IACN,CAAE,CAAA,GCnEME,KAA+B,CAK1C7B,GACA8B,GACAC,OAII;AAAA,EACJ,OAAOC;AAAA,IACLhC,EAAU8B,CAAkB;AAAA,IAC5B9B,EAAU+B,CAAgB;AAAA,EAC5B;AAAA,EACA,qBAAqBE;AAAA,IACnBH;AAAA,IACAC;AAAA,EACF;AACF,IAEaC,KAA0B,CACrCE,GACAC,MAEI,CAACD,KAAa,CAACC,IACV,KAEF;AAAA,EACL,EAAE,OAAO,aAAa,OAAO,GAAGD,KAAa,EAAE,MAAMC,KAAW,EAAE,GAAG;AAAA,GAI5DF,KAAwC,CAInDH,GACAC,MAEO,CAAC,EAAE,oBAAAtC,QAAyB;AACd,EAAAA,EAAA;AAAA,IACjB,CAACqC,CAAkB,GAAG;AAAA,IACtB,CAACC,CAAgB,GAAG;AAAA,EAAA,CACa;AAAA,GCjD1BK,KAA8B,CAKzCpC,GACA8B,GACAC,OAII;AAAA,EACJ,OAAO;AAAA,IACL,WAAW/B,EAAU8B,CAAkB;AAAA,IACvC,SAAS9B,EAAU+B,CAAgB;AAAA,EACrC;AAAA,EACA,eAAe,CAACxC,GAAO,EAAE,UAAA9E,GAAU,SAAAC,QAAc;AAC/C,UAAMsD,IAA8B;AAAA,MAClC,CAAC8D,CAAkB,GAAGvC,EAAM;AAAA,MAC5B,CAACwC,CAAgB,GAAGxC,EAAM;AAAA,IAAA;AAEnB,IAAA9E,EAAAC,EAAQ,mBAAmBsD,CAAM,CAAC;AAAA,EAC7C;AACF,ICqBaqE,KAA2B,CAGtC;AAAA,EACA,OAAA9C;AAAA,EACA,eAAAoB;AAAA,EACA,WAAAlF;AAAA,EACA,cAAAK;AAAA,EACA,uBAAAD;AAAA,EACA,OAAAV;AAAA,EACA,UAAAC;AAAA,EACA,GAAGkH;AACL,MAA8D;AAC5D,QAAM7H,IAAWR,KACXS,IAAUP,KAEV+F,IAAUkB;AAAA,IACd,OAAO,EAAE,UAAA3G,GAAU,SAAAC;IACnB,CAACA,GAASD,CAAQ;AAAA,EAAA,GAEd,CAAC8H,GAAcC,CAAe,IAClClE,EAAgC,WAAW,GAEvCmE,IAAiBrB,EAAQ,MAAMsB,GAAmBnD,CAAK,GAAG,CAACA,CAAK,CAAC,GAEjEoD,IAAuB/H;AAAA,IAC3B,CAAC2E,MAAqB;AACN,MAAAoB,EAAAiC,GAAmBrD,CAAK,GAAGW,CAAO;AAAA,IAClD;AAAA,IACA,CAACS,GAAeT,CAAO;AAAA,EAAA;AAIvB,SAAA,gBAAAzG;AAAA,IAAC+B;AAAA,IAAA;AAAA,MACC,OAAAL;AAAA,MACA,UAAAC;AAAA,MACA,WAAAK;AAAA,MACA,cAAAK;AAAA,MACA,uBAAAD;AAAA,MAEA,UAAA,gBAAApC,EAACwB,GAAI,EAAA,MAAM,GAAG,YAAY,UACxB,UAAA,gBAAAxB,EAACwB,GAAI,EAAA,YAAY,SAAS,QAAM,IAC9B,UAAA,gBAAAxB;AAAA,QAACoJ;AAAA,QAAA;AAAA,UACC,iBAAAL;AAAA,UACA,cAAAD;AAAA,UACA,OAAOE;AAAA,UACP,eAAeE;AAAA,UACd,GAAGL;AAAA,QAAA;AAAA,SAER,EACF,CAAA;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
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/components/StickyFooter.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/filter-checkbox/FilterCheckbox.tsx","../src/features/search-filter/features/filter-checkbox/FilterCheckboxList.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 { ReactNode } from \"react\";\nimport { DrawerHeader } from \"@stenajs-webui/modal\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ header = \"Filter\", ...props }) => {\n return <DrawerHeader {...props} header={header} />;\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 { ReactNode, useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Box, 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 header?: string;\n headerContentRight?: ReactNode;\n}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n header,\n headerContentRight,\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 floating\n isOpen={open}\n onRequestClose={closeDrawer}\n {...drawerProps}\n >\n <Column\n height={\"100%\"}\n borderRadius={\"var(--swui-border-radius)\"}\n background={cssColor(\"--lhds-color-ui-50\")}\n >\n <SearchFilterPanelHeader\n onRequestClose={closeDrawer}\n header={header}\n contentRight={headerContentRight}\n />\n <Box spacing={1} indent={1} gap={1}>\n {children}\n </Box>\n </Column>\n </Drawer>\n );\n};\n","import { SecondaryButton, stenaSlidersMini } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n leftIcon?: IconDefinition;\n}\n\nexport const SearchFilterButton: React.FC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n leftIcon = stenaSlidersMini,\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={leftIcon}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row, Space } from \"@stenajs-webui/core\";\nimport { lowerCase, upperFirst } from \"lodash-es\";\nimport {\n Banner,\n FlatButton,\n MenuButton,\n Spinner,\n} from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label?: string;\n leftIcon?: IconDefinition;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n leftIcon,\n contentRight,\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 <>\n <MenuButton\n label={activeLabel}\n leftIcon={leftIcon}\n expandable\n expanded={expanded}\n selected={expanded}\n onClick={onClickLabel}\n right={contentRight}\n >\n {loading ? (\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\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 children\n )}\n </MenuButton>\n {expanded && <Space />}\n </>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { BoxProps, Column } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\n\nexport interface StickySearchButtonProps extends Pick<BoxProps, \"gap\"> {\n children?: ReactNode;\n}\n\nexport const StickyFooter: React.FC<StickySearchButtonProps> = ({\n children,\n ...boxProps\n}) => {\n return (\n <Column\n style={{ marginTop: \"auto\" }}\n justifyContent={\"center\"}\n spacing={2}\n indent\n shadow={\"popover\"}\n zIndex={1}\n {...boxProps}\n >\n {children}\n </Column>\n );\n};\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 * as React from \"react\";\nimport { Row, Text } from \"@stenajs-webui/core\";\nimport { ContentMenuButton } from \"@stenajs-webui/elements\";\nimport { Checkbox, CheckboxProps } from \"@stenajs-webui/forms\";\n\nexport interface FilterCheckboxProps extends CheckboxProps {\n label: string;\n}\n\nexport const FilterCheckbox: React.FC<FilterCheckboxProps> = ({\n label,\n ...checkboxProps\n}) => {\n return (\n <ContentMenuButton>\n <Row gap={2} alignItems={\"center\"} justifyContent={\"flex-start\"}>\n <Checkbox {...checkboxProps} />\n <Text>{label}</Text>\n </Row>\n </ContentMenuButton>\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { Column } from \"@stenajs-webui/core\";\n\nexport interface FilterCheckboxListProps extends PropsWithChildren {\n maxHeight?: string;\n}\n\nexport const FilterCheckboxList: React.FC<FilterCheckboxListProps> = ({\n children,\n maxHeight,\n}) => {\n return (\n <Column\n maxHeight={maxHeight}\n overflowY={maxHeight ? \"auto\" : undefined}\n spacing={1}\n >\n {children}\n </Column>\n );\n};\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { FlatButton, stenaClean } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n children?: ReactNode;\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\"} alignItems={\"center\"} gap>\n {children}\n {!disableClearAllButton && (\n <FlatButton\n size={\"small\"}\n leftIcon={stenaClean}\n label={\"Clear\"}\n onClick={onClickClearAll}\n />\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\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 <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />;\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\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 <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\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(\n formModel[fieldName] as unknown as BooleanRecord,\n options\n ),\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 = { ...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 { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { FilterCheckbox } from \"../../../features/filter-checkbox/FilterCheckbox\";\nimport { FilterCheckboxList } from \"../../../features/filter-checkbox/FilterCheckboxList\";\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 <FilterCheckboxList maxHeight={\"400px\"}>\n {options?.map((d) => (\n <FilterCheckbox\n key={d.value}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n ))}\n </FilterCheckboxList>\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 {\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] as unknown as string | undefined,\n formModel[endDateFieldName] as unknown as string | undefined\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, string | undefined>\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] as unknown as string | undefined,\n endDate: formModel[endDateFieldName] as unknown as string | undefined,\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 Omit<\n SearchFilterSectionProps<TSectionKey>,\n \"label\" | \"onRetry\" | \"error\" | \"loading\"\n >,\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 label?: string;\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 contentRight,\n disableContentPadding,\n label,\n leftIcon,\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] =\n useState<DateRangeFocusedInput>(\"startDate\");\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\n label={label}\n leftIcon={leftIcon}\n sectionId={sectionId}\n contentRight={contentRight}\n disableContentPadding={disableContentPadding}\n >\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":["SearchFilterPanelHeader","header","props","jsx","DrawerHeader","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","open","dispatch","actions","closeDrawer","useCallback","Drawer","jsxs","Column","cssColor","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","contentRight","state","expanded","onClickLabel","activeLabel","formatColumnIdToHeaderCellLabel","Fragment","MenuButton","Row","Spinner","Banner","FlatButton","Space","columnId","upperFirst","lowerCase","StickyFooter","boxProps","SearchFilterModelContext","useSearchFilterModel","SearchFilterContext","createSearchFilterInitialState","initialFormModel","createSearchFilterReducer","reducerId","initialState","combineReducers","reducerIdGate","getReducerIdFor","createValueByIdReducer","createEntityReducer","createSearchFilterActions","reducerIdGateAction","createEntityActions","fields","section","createValueByIdActions","reducerIdSuffix","useLocalSearchFilterState","reducer","useState","useReducer","SearchFilterLocalStateContext","FilterCheckbox","checkboxProps","ContentMenuButton","Checkbox","Text","FilterCheckboxList","maxHeight","SearchFilterChips","disableClearAllButton","onClickClearAll","stenaClean","EmptyChip","Chip","SearchFilterChip","value","onClickRemove","setFormModelFields","onClickRemoveHandler","SectionChips","chips","emptyChipLabel","onClickRemoveOnChip","createChipsPropsForBooleanRecord","formModel","fieldName","options","createChipsForBooleanRecord","createOnClickRemoveOnChipForBooleanRecord","booleanRecord","truthyKeysAsList","key","option","o","newRecord","SimpleCheckboxListSection","onValueChange","sectionProps","d","v","ChipMultiSelectSection","noneSelectedLabel","text","setText","listValue","useMemo","filteredOptions","p","onValueChangeInternal","createBooleanRecordFromValue","ChipMultiSelect","sum","item","createChipsPropsForDateRange","startDateFieldName","endDateFieldName","createChipsForDateRange","createOnClickRemoveOnChipForDateRange","startDate","endDate","createDateRangeSectionProps","DateRangeCalendarSection","dateRangeCalendarProps","focusedInput","setFocusedInput","dateRangeValue","stringsToDateRange","onValueChangeHandler","dateRangeToStrings","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/components/StickyFooter.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/filter-checkbox/FilterCheckbox.tsx","../src/features/search-filter/features/filter-checkbox/FilterCheckboxList.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 { ReactNode } from \"react\";\nimport { DrawerHeader } from \"@stenajs-webui/modal\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ header = \"Filter\", ...props }) => {\n return <DrawerHeader {...props} header={header} />;\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 { ReactNode, useCallback } from \"react\";\nimport { Drawer, DrawerProps } from \"@stenajs-webui/modal\";\nimport { cssColor } from \"@stenajs-webui/theme\";\nimport { Box, 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 header?: string;\n headerContentRight?: ReactNode;\n}\n\nexport const SearchFilterDrawer: React.FC<SearchFilterDrawerProps> = ({\n children,\n header,\n headerContentRight,\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 floating\n isOpen={open}\n onRequestClose={closeDrawer}\n {...drawerProps}\n >\n <Column\n height={\"100%\"}\n borderRadius={\"var(--swui-border-radius)\"}\n background={cssColor(\"--lhds-color-ui-50\")}\n >\n <SearchFilterPanelHeader\n onRequestClose={closeDrawer}\n header={header}\n contentRight={headerContentRight}\n />\n <Box spacing={1} indent={1} gap={1}>\n {children}\n </Box>\n </Column>\n </Drawer>\n );\n};\n","import { SecondaryButton, stenaSlidersMini } from \"@stenajs-webui/elements\";\nimport * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\ninterface SearchFilterDrawerButtonProps {\n label?: string;\n leftIcon?: IconDefinition;\n}\n\nexport const SearchFilterButton: React.FC<SearchFilterDrawerButtonProps> = ({\n label = \"Filters\",\n leftIcon = stenaSlidersMini,\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={leftIcon}\n onClick={onClickButton}\n />\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren, useCallback } from \"react\";\nimport { Row, Space } from \"@stenajs-webui/core\";\nimport { lowerCase, upperFirst } from \"lodash-es\";\nimport {\n Banner,\n FlatButton,\n MenuButton,\n Spinner,\n} from \"@stenajs-webui/elements\";\nimport { useSearchFilterState } from \"../context/SearchFilterStateContext\";\nimport { useSearchFilterDispatch } from \"../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../context/SearchFilterActionsContext\";\nimport { IconDefinition } from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface SearchFilterSectionProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label?: string;\n leftIcon?: IconDefinition;\n contentRight?: React.ReactNode;\n disableContentPadding?: boolean;\n loading?: boolean;\n error?: string;\n onRetry?: () => void;\n}\n\nexport const SearchFilterSection = function SearchFilterSection<\n TSectionKey extends string\n>({\n sectionId,\n label,\n loading,\n error,\n onRetry,\n disableContentPadding,\n children,\n leftIcon,\n contentRight,\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 <>\n <MenuButton\n label={activeLabel}\n leftIcon={leftIcon}\n expandable\n expanded={expanded}\n selected={expanded}\n onClick={onClickLabel}\n right={contentRight}\n >\n {loading ? (\n <Row spacing justifyContent={\"center\"} flex={1}>\n <Spinner size={\"small\"} />\n </Row>\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 children\n )}\n </MenuButton>\n {expanded && <Space />}\n </>\n );\n};\n\nexport const formatColumnIdToHeaderCellLabel = (columnId: string): string =>\n upperFirst(lowerCase(columnId));\n","import { BoxProps, Column } from \"@stenajs-webui/core\";\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\n\nexport interface StickySearchButtonProps extends Pick<BoxProps, \"gap\"> {\n children?: ReactNode;\n}\n\nexport const StickyFooter: React.FC<StickySearchButtonProps> = ({\n children,\n ...boxProps\n}) => {\n return (\n <Column\n style={{ marginTop: \"auto\" }}\n justifyContent={\"center\"}\n spacing={2}\n indent\n shadow={\"popover\"}\n zIndex={1}\n {...boxProps}\n >\n {children}\n </Column>\n );\n};\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 * as React from \"react\";\nimport { Row, Text } from \"@stenajs-webui/core\";\nimport { ContentMenuButton } from \"@stenajs-webui/elements\";\nimport { Checkbox, CheckboxProps } from \"@stenajs-webui/forms\";\n\nexport interface FilterCheckboxProps extends CheckboxProps {\n label: string;\n}\n\nexport const FilterCheckbox: React.FC<FilterCheckboxProps> = ({\n label,\n ...checkboxProps\n}) => {\n return (\n <ContentMenuButton>\n <Row gap={2} alignItems={\"center\"} justifyContent={\"flex-start\"}>\n <Checkbox {...checkboxProps} />\n <Text>{label}</Text>\n </Row>\n </ContentMenuButton>\n );\n};\n","import * as React from \"react\";\nimport { PropsWithChildren } from \"react\";\nimport { Column } from \"@stenajs-webui/core\";\n\nexport interface FilterCheckboxListProps extends PropsWithChildren {\n maxHeight?: string;\n}\n\nexport const FilterCheckboxList: React.FC<FilterCheckboxListProps> = ({\n children,\n maxHeight,\n}) => {\n return (\n <Column\n maxHeight={maxHeight}\n overflowY={maxHeight ? \"auto\" : undefined}\n spacing={1}\n >\n {children}\n </Column>\n );\n};\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { FlatButton, stenaClean } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n children?: ReactNode;\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\"} alignItems={\"center\"} gap>\n {children}\n {!disableClearAllButton && (\n <FlatButton\n size={\"small\"}\n leftIcon={stenaClean}\n label={\"Clear\"}\n onClick={onClickClearAll}\n />\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\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 <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />;\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\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 <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\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(\n formModel[fieldName] as unknown as BooleanRecord,\n options\n ),\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 newBooleanRecord = { ...formModel[fieldName] } as BooleanRecord;\n newBooleanRecord[value] = false;\n setFormModelFields({\n [fieldName]: newBooleanRecord,\n } as unknown as Partial<TFormModel>);\n };\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { FilterCheckbox } from \"../../../features/filter-checkbox/FilterCheckbox\";\nimport { FilterCheckboxList } from \"../../../features/filter-checkbox/FilterCheckboxList\";\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 <FilterCheckboxList maxHeight={\"400px\"}>\n {options?.map((d) => (\n <FilterCheckbox\n key={d.value}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n ))}\n </FilterCheckboxList>\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 {\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] as unknown as string | undefined,\n formModel[endDateFieldName] as unknown as string | undefined\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, string | undefined>\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] as unknown as string | undefined,\n endDate: formModel[endDateFieldName] as unknown as string | undefined,\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 Omit<\n SearchFilterSectionProps<TSectionKey>,\n \"label\" | \"onRetry\" | \"error\" | \"loading\"\n >,\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 label?: string;\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 contentRight,\n disableContentPadding,\n label,\n leftIcon,\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] =\n useState<DateRangeFocusedInput>(\"startDate\");\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\n label={label}\n leftIcon={leftIcon}\n sectionId={sectionId}\n contentRight={contentRight}\n disableContentPadding={disableContentPadding}\n >\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":["SearchFilterPanelHeader","header","props","jsx","DrawerHeader","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","open","dispatch","actions","closeDrawer","useCallback","Drawer","jsxs","Column","cssColor","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","contentRight","state","expanded","onClickLabel","activeLabel","formatColumnIdToHeaderCellLabel","Fragment","MenuButton","Row","Spinner","Banner","FlatButton","Space","columnId","upperFirst","lowerCase","StickyFooter","boxProps","SearchFilterModelContext","useSearchFilterModel","SearchFilterContext","createSearchFilterInitialState","initialFormModel","createSearchFilterReducer","reducerId","initialState","combineReducers","reducerIdGate","getReducerIdFor","createValueByIdReducer","createEntityReducer","createSearchFilterActions","reducerIdGateAction","createEntityActions","fields","section","createValueByIdActions","reducerIdSuffix","useLocalSearchFilterState","reducer","useState","useReducer","SearchFilterLocalStateContext","FilterCheckbox","checkboxProps","ContentMenuButton","Checkbox","Text","FilterCheckboxList","maxHeight","SearchFilterChips","disableClearAllButton","onClickClearAll","stenaClean","EmptyChip","Chip","SearchFilterChip","value","onClickRemove","setFormModelFields","onClickRemoveHandler","SectionChips","chips","emptyChipLabel","onClickRemoveOnChip","createChipsPropsForBooleanRecord","formModel","fieldName","options","createChipsForBooleanRecord","createOnClickRemoveOnChipForBooleanRecord","booleanRecord","truthyKeysAsList","key","option","o","newBooleanRecord","SimpleCheckboxListSection","onValueChange","sectionProps","d","v","ChipMultiSelectSection","noneSelectedLabel","text","setText","listValue","useMemo","filteredOptions","p","onValueChangeInternal","createBooleanRecordFromValue","ChipMultiSelect","sum","item","createChipsPropsForDateRange","startDateFieldName","endDateFieldName","createChipsForDateRange","createOnClickRemoveOnChipForDateRange","startDate","endDate","createDateRangeSectionProps","DateRangeCalendarSection","dateRangeCalendarProps","focusedInput","setFocusedInput","dateRangeValue","stringsToDateRange","onValueChangeHandler","dateRangeToStrings","DateRangeCalendar"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stenajs-webui/filter",
|
|
3
|
-
"version": "20.
|
|
3
|
+
"version": "20.7.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "",
|
|
6
6
|
"author": "mattias800",
|
|
@@ -33,15 +33,15 @@
|
|
|
33
33
|
"deploy": "gh-pages -d example/build"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@stenajs-webui/calendar": "20.
|
|
37
|
-
"@stenajs-webui/core": "20.
|
|
38
|
-
"@stenajs-webui/elements": "20.
|
|
39
|
-
"@stenajs-webui/forms": "20.
|
|
40
|
-
"@stenajs-webui/modal": "20.
|
|
41
|
-
"@stenajs-webui/panels": "20.
|
|
42
|
-
"@stenajs-webui/redux": "20.
|
|
43
|
-
"@stenajs-webui/select": "20.
|
|
44
|
-
"@stenajs-webui/theme": "20.
|
|
36
|
+
"@stenajs-webui/calendar": "20.7.0",
|
|
37
|
+
"@stenajs-webui/core": "20.7.0",
|
|
38
|
+
"@stenajs-webui/elements": "20.7.0",
|
|
39
|
+
"@stenajs-webui/forms": "20.7.0",
|
|
40
|
+
"@stenajs-webui/modal": "20.7.0",
|
|
41
|
+
"@stenajs-webui/panels": "20.7.0",
|
|
42
|
+
"@stenajs-webui/redux": "20.7.0",
|
|
43
|
+
"@stenajs-webui/select": "20.7.0",
|
|
44
|
+
"@stenajs-webui/theme": "20.7.0",
|
|
45
45
|
"date-fns": "2.26.0",
|
|
46
46
|
"lodash-es": "^4.17.21"
|
|
47
47
|
},
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"files": [
|
|
72
72
|
"dist"
|
|
73
73
|
],
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "8dc9fe226a0ae212caa675f867b9d9bce3bbb7e6"
|
|
75
75
|
}
|