@stenajs-webui/filter 19.0.0-next.11 → 19.0.0-next.12

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/index.es.js CHANGED
@@ -1,10 +1,10 @@
1
1
  (function(){"use strict";try{var e=document.createElement("style");e.appendChild(document.createTextNode("")),document.head.appendChild(e)}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
+ import { jsx as o, jsxs as g, Fragment as z } from "react/jsx-runtime";
2
3
  import { createContext as L, useContext as E, useCallback as u, useState as M, useReducer as J, useMemo as b } from "react";
3
4
  import { Drawer as Q } from "@stenajs-webui/modal";
4
5
  import { cssColor as U } from "@stenajs-webui/theme";
5
- import { Spacing as X, Row as g, Space as O, Heading as Z, Column as P, Box as A, truthyKeysAsList as z } from "@stenajs-webui/core";
6
- import { FlatButton as H, stenaTimes as _, SecondaryButton as N, stenaSlidersMini as ee, MenuButton as te, Spinner as ne, Banner as re, Chip as D } from "@stenajs-webui/elements";
7
- import { jsx as o, jsxs as w, Fragment as q } from "react/jsx-runtime";
6
+ import { Spacing as X, Row as w, Space as O, Heading as Z, Column as P, Box as A, truthyKeysAsList as D } from "@stenajs-webui/core";
7
+ import { FlatButton as H, stenaTimes as _, SecondaryButton as N, stenaSlidersMini as ee, MenuButton as te, Spinner as ne, Banner as re, Chip as q } from "@stenajs-webui/elements";
8
8
  import { upperFirst as ce, lowerCase as oe } from "lodash";
9
9
  import { combineReducers as se } from "redux";
10
10
  import { reducerIdGate as B, createValueByIdReducer as ie, createEntityReducer as $, reducerIdGateAction as C, createEntityActions as v, createValueByIdActions as R } from "@stenajs-webui/redux";
@@ -12,34 +12,32 @@ import ae from "@emotion/styled";
12
12
  import { CheckboxWithLabel as le } from "@stenajs-webui/forms";
13
13
  import { ChipMultiSelect as de } from "@stenajs-webui/select";
14
14
  import { stringsToDateRange as ue, dateRangeToStrings as he, DateRangeCalendar as pe } from "@stenajs-webui/calendar";
15
- const Se = ({
16
- onRequestClose: e,
17
- header: t = "Filter",
18
- contentRight: n
19
- }) => /* @__PURE__ */ o(X, {
20
- children: /* @__PURE__ */ w(g, {
15
+ const Se = ({ onRequestClose: e, header: t = "Filter", contentRight: n }) => /* @__PURE__ */ o(X, { children: /* @__PURE__ */ g(
16
+ w,
17
+ {
21
18
  justifyContent: "space-between",
22
19
  alignItems: "center",
23
20
  height: "48px",
24
- children: [/* @__PURE__ */ w(g, {
25
- children: [/* @__PURE__ */ o(O, {
26
- num: 3
27
- }), /* @__PURE__ */ o(Z, {
28
- variant: "h4",
29
- children: t
30
- })]
31
- }), /* @__PURE__ */ w(g, {
32
- gap: 1,
33
- children: [n, /* @__PURE__ */ o(H, {
34
- leftIcon: _,
35
- onClick: e,
36
- variant: "danger"
37
- }), /* @__PURE__ */ o(O, {
38
- num: 0.5
39
- })]
40
- })]
41
- })
42
- }), G = L(null), W = () => {
21
+ children: [
22
+ /* @__PURE__ */ g(w, { children: [
23
+ /* @__PURE__ */ o(O, { num: 3 }),
24
+ /* @__PURE__ */ o(Z, { variant: "h4", children: t })
25
+ ] }),
26
+ /* @__PURE__ */ g(w, { gap: 1, children: [
27
+ n,
28
+ /* @__PURE__ */ o(
29
+ H,
30
+ {
31
+ leftIcon: _,
32
+ onClick: e,
33
+ variant: "danger"
34
+ }
35
+ ),
36
+ /* @__PURE__ */ o(O, { num: 0.5 })
37
+ ] })
38
+ ]
39
+ }
40
+ ) }), G = L(null), W = () => {
43
41
  const e = E(G);
44
42
  if (!e)
45
43
  throw new Error(
@@ -63,32 +61,29 @@ const Se = ({
63
61
  ...r
64
62
  }) => {
65
63
  const {
66
- settings: {
67
- open: c
68
- }
64
+ settings: { open: c }
69
65
  } = W(), s = F(), i = x(), l = u(() => {
70
66
  s(i.closeFilters());
71
67
  }, [i, s]);
72
- return /* @__PURE__ */ o(Q, {
73
- isOpen: c,
74
- onRequestClose: l,
75
- ...r,
76
- children: /* @__PURE__ */ w(P, {
68
+ return /* @__PURE__ */ o(Q, { isOpen: c, onRequestClose: l, ...r, children: /* @__PURE__ */ g(
69
+ P,
70
+ {
77
71
  height: "100%",
78
72
  borderRadius: "var(--swui-border-radius)",
79
73
  background: U("--lhds-color-ui-50"),
80
- children: [/* @__PURE__ */ o(Se, {
81
- onRequestClose: l,
82
- header: t,
83
- contentRight: n
84
- }), /* @__PURE__ */ o(A, {
85
- spacing: 1,
86
- indent: 1,
87
- gap: 1,
88
- children: e
89
- })]
90
- })
91
- });
74
+ children: [
75
+ /* @__PURE__ */ o(
76
+ Se,
77
+ {
78
+ onRequestClose: l,
79
+ header: t,
80
+ contentRight: n
81
+ }
82
+ ),
83
+ /* @__PURE__ */ o(A, { spacing: 1, indent: 1, gap: 1, children: e })
84
+ ]
85
+ }
86
+ ) });
92
87
  }, Ge = ({
93
88
  label: e = "Filters",
94
89
  leftIcon: t = ee
@@ -96,11 +91,14 @@ const Se = ({
96
91
  const n = F(), r = x(), c = u(() => {
97
92
  n(r.openFilters());
98
93
  }, [r, n]);
99
- return /* @__PURE__ */ o(N, {
100
- label: e,
101
- leftIcon: t,
102
- onClick: c
103
- });
94
+ return /* @__PURE__ */ o(
95
+ N,
96
+ {
97
+ label: e,
98
+ leftIcon: t,
99
+ onClick: c
100
+ }
101
+ );
104
102
  }, T = function({
105
103
  sectionId: t,
106
104
  label: n,
@@ -116,47 +114,45 @@ const Se = ({
116
114
  const a = W(), m = F(), f = x(), h = (j = a.expandedSections.values[t]) != null ? j : !1, k = u(() => {
117
115
  m(f.setSectionExpanded(t, !h));
118
116
  }, [f, m, h, t]), y = n != null ? n : me(t);
119
- return /* @__PURE__ */ w(q, {
120
- children: [/* @__PURE__ */ o(te, {
121
- label: y,
122
- leftIcon: p,
123
- expandable: !0,
124
- expanded: h,
125
- selected: h,
126
- onClick: k,
127
- right: S,
128
- children: r ? /* @__PURE__ */ o(g, {
129
- spacing: !0,
130
- justifyContent: "center",
131
- flex: 1,
132
- children: /* @__PURE__ */ o(ne, {
133
- size: "small"
134
- })
135
- }) : c ? /* @__PURE__ */ o(re, {
136
- variant: "error",
137
- text: c,
138
- contentRight: s ? /* @__PURE__ */ o(H, {
139
- label: "Retry",
140
- onClick: s
141
- }) : null
142
- }) : l
143
- }), h && /* @__PURE__ */ o(O, {})]
144
- });
117
+ return /* @__PURE__ */ g(z, { children: [
118
+ /* @__PURE__ */ o(
119
+ te,
120
+ {
121
+ label: y,
122
+ leftIcon: p,
123
+ expandable: !0,
124
+ expanded: h,
125
+ selected: h,
126
+ onClick: k,
127
+ right: S,
128
+ children: r ? /* @__PURE__ */ o(w, { spacing: !0, justifyContent: "center", flex: 1, children: /* @__PURE__ */ o(ne, { size: "small" }) }) : c ? /* @__PURE__ */ o(
129
+ re,
130
+ {
131
+ variant: "error",
132
+ text: c,
133
+ contentRight: s ? /* @__PURE__ */ o(H, { label: "Retry", onClick: s }) : null
134
+ }
135
+ ) : l
136
+ }
137
+ ),
138
+ h && /* @__PURE__ */ o(O, {})
139
+ ] });
145
140
  }, me = (e) => ce(oe(e)), We = ({
146
141
  children: e,
147
142
  ...t
148
- }) => /* @__PURE__ */ o(P, {
149
- style: {
150
- marginTop: "auto"
151
- },
152
- justifyContent: "center",
153
- spacing: 2,
154
- indent: !0,
155
- shadow: "popover",
156
- zIndex: 1,
157
- ...t,
158
- children: e
159
- }), I = L(null), Ke = () => {
143
+ }) => /* @__PURE__ */ o(
144
+ P,
145
+ {
146
+ style: { marginTop: "auto" },
147
+ justifyContent: "center",
148
+ spacing: 2,
149
+ indent: !0,
150
+ shadow: "popover",
151
+ zIndex: 1,
152
+ ...t,
153
+ children: e
154
+ }
155
+ ), I = L(null), Ke = () => {
160
156
  const e = E(I);
161
157
  if (!e)
162
158
  throw new Error(
@@ -169,19 +165,13 @@ const Se = ({
169
165
  actions: r,
170
166
  children: c
171
167
  }) {
172
- return /* @__PURE__ */ o(K.Provider, {
173
- value: n,
174
- children: /* @__PURE__ */ o(Y.Provider, {
175
- value: r,
176
- children: /* @__PURE__ */ o(G.Provider, {
177
- value: t,
178
- children: /* @__PURE__ */ o(I.Provider, {
179
- value: t.formModel,
180
- children: c
181
- })
182
- })
183
- })
184
- });
168
+ return /* @__PURE__ */ o(
169
+ K.Provider,
170
+ {
171
+ value: n,
172
+ children: /* @__PURE__ */ o(Y.Provider, { value: r, children: /* @__PURE__ */ o(G.Provider, { value: t, children: /* @__PURE__ */ o(I.Provider, { value: t.formModel, children: c }) }) })
173
+ }
174
+ );
185
175
  }, fe = (e) => ({
186
176
  settings: {
187
177
  open: !1
@@ -256,17 +246,10 @@ const Se = ({
256
246
  initialFormModel: t,
257
247
  children: n
258
248
  }) {
259
- const {
260
- state: r,
261
- actions: c,
262
- dispatch: s
263
- } = ge(fe(t));
264
- return /* @__PURE__ */ o(Ce, {
265
- state: r,
266
- actions: c,
267
- dispatch: s,
268
- children: n
269
- });
249
+ const { state: r, actions: c, dispatch: s } = ge(
250
+ fe(t)
251
+ );
252
+ return /* @__PURE__ */ o(Ce, { state: r, actions: c, dispatch: s, children: n });
270
253
  }, V = ae.div`
271
254
  padding: calc(var(--swui-metrics-spacing) / 2)
272
255
  calc(var(--swui-metrics-indent) / 2);
@@ -274,17 +257,21 @@ const Se = ({
274
257
  children: e,
275
258
  disableClearAllButton: t = !1
276
259
  }) => {
277
- const n = F(), r = x(), c = u(() => n(r.clearFormModel()), [r, n]);
278
- return /* @__PURE__ */ w(g, {
279
- flexWrap: "wrap",
280
- children: [e, !t && /* @__PURE__ */ o(V, {
281
- children: /* @__PURE__ */ o(H, {
260
+ const n = F(), r = x(), c = u(
261
+ () => n(r.clearFormModel()),
262
+ [r, n]
263
+ );
264
+ return /* @__PURE__ */ g(w, { flexWrap: "wrap", children: [
265
+ e,
266
+ !t && /* @__PURE__ */ o(V, { children: /* @__PURE__ */ o(
267
+ H,
268
+ {
282
269
  size: "small",
283
270
  label: "Clear all",
284
271
  onClick: c
285
- })
286
- })]
287
- });
272
+ }
273
+ ) })
274
+ ] });
288
275
  }, we = function({
289
276
  label: t,
290
277
  sectionId: n
@@ -292,54 +279,45 @@ const Se = ({
292
279
  const r = F(), c = x(), s = u(() => {
293
280
  r(c.clearExpandedSections()), r(c.expandSection(n)), r(c.openFilters());
294
281
  }, [c, r, n]);
295
- return /* @__PURE__ */ o(V, {
296
- children: /* @__PURE__ */ o(D, {
297
- label: t,
298
- variant: "secondary",
299
- onClick: s
300
- })
301
- });
282
+ return /* @__PURE__ */ o(V, { children: /* @__PURE__ */ o(q, { label: t, variant: "secondary", onClick: s }) });
302
283
  }, ve = function({
303
284
  sectionId: t,
304
285
  label: n,
305
286
  value: r,
306
287
  onClickRemove: c
307
288
  }) {
308
- const s = F(), i = x(), l = u((a) => s(i.setFormModelFields(a)), [s, i]), p = u(() => {
309
- c == null || c({
310
- value: r,
311
- setFormModelFields: l
312
- });
289
+ const s = F(), i = x(), l = u(
290
+ (a) => s(i.setFormModelFields(a)),
291
+ [s, i]
292
+ ), p = u(() => {
293
+ c == null || c({ value: r, setFormModelFields: l });
313
294
  }, [c, l, r]), S = u(() => {
314
295
  s(i.clearExpandedSections()), s(i.expandSection(t)), s(i.openFilters());
315
296
  }, [i, s, t]);
316
- return /* @__PURE__ */ o(V, {
317
- children: /* @__PURE__ */ o(D, {
297
+ return /* @__PURE__ */ o(V, { children: /* @__PURE__ */ o(
298
+ q,
299
+ {
318
300
  label: n != null ? n : t,
319
301
  onClick: S,
320
302
  onClickRemove: c ? p : void 0
321
- })
322
- });
303
+ }
304
+ ) });
323
305
  }, Je = function({
324
306
  sectionId: t,
325
307
  chips: n,
326
308
  emptyChipLabel: r,
327
309
  onClickRemoveOnChip: c
328
310
  }) {
329
- return n != null && n.length ? /* @__PURE__ */ o(q, {
330
- children: n.map(({
331
- label: s,
332
- value: i
333
- }) => /* @__PURE__ */ o(ve, {
311
+ return n != null && n.length ? /* @__PURE__ */ o(z, { children: n.map(({ label: s, value: i }) => /* @__PURE__ */ o(
312
+ ve,
313
+ {
334
314
  label: s != null ? s : t,
335
315
  sectionId: t,
336
316
  onClickRemove: c,
337
317
  value: i
338
- }, i))
339
- }) : r ? /* @__PURE__ */ o(we, {
340
- sectionId: t,
341
- label: r
342
- }) : null;
318
+ },
319
+ i
320
+ )) }) : r ? /* @__PURE__ */ o(we, { sectionId: t, label: r }) : null;
343
321
  }, Qe = (e, t, n) => ({
344
322
  chips: Re(
345
323
  e[t],
@@ -349,7 +327,7 @@ const Se = ({
349
327
  e,
350
328
  t
351
329
  )
352
- }), Re = (e, t) => z(e).map((n) => {
330
+ }), Re = (e, t) => D(e).map((n) => {
353
331
  var c;
354
332
  const r = t == null ? void 0 : t.find((s) => s.value === n);
355
333
  return { value: n, label: (c = r == null ? void 0 : r.label) != null ? c : n };
@@ -363,48 +341,42 @@ const Se = ({
363
341
  value: t,
364
342
  onValueChange: n,
365
343
  ...r
366
- }) => /* @__PURE__ */ o(T, {
367
- disableContentPadding: !0,
368
- ...r,
369
- children: /* @__PURE__ */ o(P, {
370
- maxHeight: "400px",
371
- overflowY: "auto",
372
- flex: 1,
373
- gap: 1,
374
- spacing: 1,
375
- children: e == null ? void 0 : e.map((c) => /* @__PURE__ */ o(g, {
376
- alignItems: "center",
377
- children: /* @__PURE__ */ o(le, {
378
- tabIndex: -1,
379
- value: t == null ? void 0 : t[c.value],
380
- label: c.label,
381
- onValueChange: (s) => n == null ? void 0 : n({
382
- ...t,
383
- [c.value]: s
384
- })
385
- })
386
- }, c.value))
387
- })
388
- }), Xe = ({
344
+ }) => /* @__PURE__ */ o(T, { disableContentPadding: !0, ...r, children: /* @__PURE__ */ o(P, { maxHeight: "400px", overflowY: "auto", flex: 1, gap: 1, spacing: 1, children: e == null ? void 0 : e.map((c) => /* @__PURE__ */ o(w, { alignItems: "center", children: /* @__PURE__ */ o(
345
+ le,
346
+ {
347
+ tabIndex: -1,
348
+ value: t == null ? void 0 : t[c.value],
349
+ label: c.label,
350
+ onValueChange: (s) => n == null ? void 0 : n({
351
+ ...t,
352
+ [c.value]: s
353
+ })
354
+ }
355
+ ) }, c.value)) }) }), Xe = ({
389
356
  options: e,
390
357
  value: t,
391
358
  noneSelectedLabel: n,
392
359
  onValueChange: r,
393
360
  ...c
394
361
  }) => {
395
- const [s, i] = M(""), l = b(() => t ? z(t).map((a) => {
396
- var f;
397
- const m = e == null ? void 0 : e.find((h) => h.value === a);
398
- return {
399
- value: a,
400
- label: (f = m == null ? void 0 : m.label) != null ? f : a
401
- };
402
- }) : [], [e, t]), p = b(() => e == null ? void 0 : e.filter((a) => a.value.toLocaleLowerCase().indexOf(s.toLocaleLowerCase()) > -1 || a.label.toLocaleLowerCase().indexOf(s.toLocaleLowerCase()) > -1), [e, s]), S = u((a) => {
403
- r == null || r(be(a));
404
- }, [r]);
405
- return /* @__PURE__ */ o(T, {
406
- ...c,
407
- children: /* @__PURE__ */ o(de, {
362
+ const [s, i] = M(""), l = b(
363
+ () => t ? D(t).map((a) => {
364
+ var f;
365
+ const m = e == null ? void 0 : e.find((h) => h.value === a);
366
+ return { value: a, label: (f = m == null ? void 0 : m.label) != null ? f : a };
367
+ }) : [],
368
+ [e, t]
369
+ ), p = b(() => e == null ? void 0 : e.filter(
370
+ (a) => a.value.toLocaleLowerCase().indexOf(s.toLocaleLowerCase()) > -1 || a.label.toLocaleLowerCase().indexOf(s.toLocaleLowerCase()) > -1
371
+ ), [e, s]), S = u(
372
+ (a) => {
373
+ r == null || r(be(a));
374
+ },
375
+ [r]
376
+ );
377
+ return /* @__PURE__ */ o(T, { ...c, children: /* @__PURE__ */ o(
378
+ de,
379
+ {
408
380
  options: p,
409
381
  value: l,
410
382
  onValueChange: S,
@@ -412,8 +384,8 @@ const Se = ({
412
384
  noneSelectedLabel: n,
413
385
  onInputChange: i,
414
386
  closeMenuOnSelect: !1
415
- })
416
- });
387
+ }
388
+ ) });
417
389
  }, be = (e) => e.reduce((t, n) => (t[n.value] = !0, t), {}), Ze = (e, t, n) => ({
418
390
  chips: Le(
419
391
  e[t],
@@ -452,34 +424,35 @@ const Se = ({
452
424
  leftIcon: i,
453
425
  ...l
454
426
  }) => {
455
- const p = F(), S = x(), a = b(() => ({
456
- dispatch: p,
457
- actions: S
458
- }), [S, p]), [m, f] = M("startDate"), h = b(() => ue(e), [e]), k = u((y) => {
459
- t(he(y), a);
460
- }, [t, a]);
461
- return /* @__PURE__ */ o(T, {
462
- label: s,
463
- leftIcon: i,
464
- sectionId: n,
465
- contentRight: r,
466
- disableContentPadding: c,
467
- children: /* @__PURE__ */ o(A, {
468
- flex: 1,
469
- alignItems: "center",
470
- children: /* @__PURE__ */ o(A, {
471
- background: "white",
472
- indent: !0,
473
- children: /* @__PURE__ */ o(pe, {
427
+ const p = F(), S = x(), a = b(
428
+ () => ({ dispatch: p, actions: S }),
429
+ [S, p]
430
+ ), [m, f] = M("startDate"), h = b(() => ue(e), [e]), k = u(
431
+ (y) => {
432
+ t(he(y), a);
433
+ },
434
+ [t, a]
435
+ );
436
+ return /* @__PURE__ */ o(
437
+ T,
438
+ {
439
+ label: s,
440
+ leftIcon: i,
441
+ sectionId: n,
442
+ contentRight: r,
443
+ disableContentPadding: c,
444
+ children: /* @__PURE__ */ o(A, { flex: 1, alignItems: "center", children: /* @__PURE__ */ o(A, { background: "white", indent: !0, children: /* @__PURE__ */ o(
445
+ pe,
446
+ {
474
447
  setFocusedInput: f,
475
448
  focusedInput: m,
476
449
  value: h,
477
450
  onValueChange: k,
478
451
  ...l
479
- })
480
- })
481
- })
482
- });
452
+ }
453
+ ) }) })
454
+ }
455
+ );
483
456
  };
484
457
  export {
485
458
  Xe as ChipMultiSelectSection,
@@ -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/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/EmptyChip.tsx","../src/features/search-filter/features/chips/SearchFilterChip.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport { FlatButton, stenaTimes } from \"@stenajs-webui/elements\";\nimport { Heading, Row, Space, Spacing } from \"@stenajs-webui/core\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ onRequestClose, header = \"Filter\", contentRight }) => {\n return (\n <Spacing>\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n height={\"48px\"}\n >\n <Row>\n <Space num={3} />\n <Heading variant={\"h4\"}>{header}</Heading>\n </Row>\n <Row gap={1}>\n {contentRight}\n <FlatButton\n leftIcon={stenaTimes}\n onClick={onRequestClose}\n variant={\"danger\"}\n />\n <Space num={0.5} />\n </Row>\n </Row>\n </Spacing>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>(null as unknown as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>(null as unknown as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>(null as unknown as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { 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 isOpen={open} onRequestClose={closeDrawer} {...drawerProps}>\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\";\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 styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n 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\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface EmptyChipProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label: string;\n}\n\nexport const EmptyChip = function EmptyChip<TSectionKey extends string>({\n label,\n sectionId,\n}: EmptyChipProps<TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterSectionOnClickRemoveOnChip } from \"../../config/SearchFilterConfig\";\n\ninterface SearchFilterChipProps<TFormModel, TSectionKey> {\n sectionId: TSectionKey;\n label: string;\n value: string;\n onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SearchFilterChip = function SearchFilterChip<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n label,\n value,\n onClickRemove,\n}: SearchFilterChipProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemoveHandler = useCallback(() => {\n onClickRemove?.({ value, setFormModelFields });\n }, [onClickRemove, setFormModelFields, value]);\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { EmptyChip } from \"./EmptyChip\";\nimport { SearchFilterChip } from \"./SearchFilterChip\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return <EmptyChip sectionId={sectionId} label={emptyChipLabel} />;\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <SearchFilterChip\n key={value}\n label={label ?? sectionId}\n sectionId={sectionId}\n onClickRemove={onClickRemoveOnChip}\n value={value}\n />\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(\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 { Column, Row } from \"@stenajs-webui/core\";\nimport {\n CheckboxWithLabel,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface SimpleCheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n value,\n onValueChange,\n ...sectionProps\n}: SimpleCheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection disableContentPadding {...sectionProps}>\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1} gap={1} spacing={1}>\n {options?.map((d) => (\n <Row key={d.value} alignItems={\"center\"}>\n <CheckboxWithLabel\n tabIndex={-1}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n </Row>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n noneSelectedLabel?: string;\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n value,\n noneSelectedLabel,\n onValueChange,\n ...sectionProps\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection {...sectionProps}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n noneSelectedLabel={noneSelectedLabel}\n onInputChange={setText}\n closeMenuOnSelect={false}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import {\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","onRequestClose","header","contentRight","Spacing","Row","_jsxs","_jsx","Space","Heading","FlatButton","stenaTimes","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","settings","open","dispatch","actions","closeDrawer","useCallback","closeFilters","Drawer","Column","cssColor","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","openFilters","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","state","expanded","expandedSections","values","onClickLabel","setSectionExpanded","activeLabel","formatColumnIdToHeaderCellLabel","_Fragment","MenuButton","Spinner","Banner","columnId","upperFirst","lowerCase","StickyFooter","boxProps","marginTop","SearchFilterModelContext","useSearchFilterModel","SearchFilterContext","formModel","createSearchFilterInitialState","initialFormModel","createSearchFilterReducer","reducerId","initialState","combineReducers","reducerIdGate","getReducerIdFor","createValueByIdReducer","createEntityReducer","createSearchFilterActions","reducerIdGateAction","createEntityActions","fields","section","createValueByIdActions","reducerIdSuffix","useLocalSearchFilterState","reducer","useState","useReducer","SearchFilterLocalStateContext","ChipSpacer","styled","div","SearchFilterChips","disableClearAllButton","onClickClearAll","clearFormModel","EmptyChip","clearExpandedSections","expandSection","Chip","SearchFilterChip","value","onClickRemove","setFormModelFields","onClickRemoveHandler","undefined","SectionChips","chips","emptyChipLabel","onClickRemoveOnChip","length","map","createChipsPropsForBooleanRecord","fieldName","options","createChipsForBooleanRecord","createOnClickRemoveOnChipForBooleanRecord","booleanRecord","truthyKeysAsList","key","option","o","_a","newRecord","SimpleCheckboxListSection","onValueChange","sectionProps","d","CheckboxWithLabel","v","ChipMultiSelectSection","noneSelectedLabel","text","setText","listValue","useMemo","find","filteredOptions","filter","p","toLocaleLowerCase","indexOf","onValueChangeInternal","createBooleanRecordFromValue","ChipMultiSelect","reduce","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/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/EmptyChip.tsx","../src/features/search-filter/features/chips/SearchFilterChip.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport { FlatButton, stenaTimes } from \"@stenajs-webui/elements\";\nimport { Heading, Row, Space, Spacing } from \"@stenajs-webui/core\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ onRequestClose, header = \"Filter\", contentRight }) => {\n return (\n <Spacing>\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n height={\"48px\"}\n >\n <Row>\n <Space num={3} />\n <Heading variant={\"h4\"}>{header}</Heading>\n </Row>\n <Row gap={1}>\n {contentRight}\n <FlatButton\n leftIcon={stenaTimes}\n onClick={onRequestClose}\n variant={\"danger\"}\n />\n <Space num={0.5} />\n </Row>\n </Row>\n </Spacing>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>(null as unknown as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>(null as unknown as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>(null as unknown as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { 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 isOpen={open} onRequestClose={closeDrawer} {...drawerProps}>\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\";\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 styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n 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\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface EmptyChipProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label: string;\n}\n\nexport const EmptyChip = function EmptyChip<TSectionKey extends string>({\n label,\n sectionId,\n}: EmptyChipProps<TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterSectionOnClickRemoveOnChip } from \"../../config/SearchFilterConfig\";\n\ninterface SearchFilterChipProps<TFormModel, TSectionKey> {\n sectionId: TSectionKey;\n label: string;\n value: string;\n onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SearchFilterChip = function SearchFilterChip<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n label,\n value,\n onClickRemove,\n}: SearchFilterChipProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemoveHandler = useCallback(() => {\n onClickRemove?.({ value, setFormModelFields });\n }, [onClickRemove, setFormModelFields, value]);\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { EmptyChip } from \"./EmptyChip\";\nimport { SearchFilterChip } from \"./SearchFilterChip\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return <EmptyChip sectionId={sectionId} label={emptyChipLabel} />;\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <SearchFilterChip\n key={value}\n label={label ?? sectionId}\n sectionId={sectionId}\n onClickRemove={onClickRemoveOnChip}\n value={value}\n />\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(\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 { Column, Row } from \"@stenajs-webui/core\";\nimport {\n CheckboxWithLabel,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface SimpleCheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n value,\n onValueChange,\n ...sectionProps\n}: SimpleCheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection disableContentPadding {...sectionProps}>\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1} gap={1} spacing={1}>\n {options?.map((d) => (\n <Row key={d.value} alignItems={\"center\"}>\n <CheckboxWithLabel\n tabIndex={-1}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n </Row>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n noneSelectedLabel?: string;\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n value,\n noneSelectedLabel,\n onValueChange,\n ...sectionProps\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection {...sectionProps}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n noneSelectedLabel={noneSelectedLabel}\n onInputChange={setText}\n closeMenuOnSelect={false}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import {\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","onRequestClose","header","contentRight","Spacing","jsxs","Row","jsx","Space","Heading","FlatButton","stenaTimes","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","open","dispatch","actions","closeDrawer","useCallback","Drawer","Column","cssColor","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","state","expanded","_a","onClickLabel","activeLabel","formatColumnIdToHeaderCellLabel","Fragment","MenuButton","Spinner","Banner","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","ChipSpacer","styled","SearchFilterChips","disableClearAllButton","onClickClearAll","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","CheckboxWithLabel","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/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  (function(){"use strict";try{var e=document.createElement("style");e.appendChild(document.createTextNode("")),document.head.appendChild(e)}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("react"),Y=require("@stenajs-webui/modal"),J=require("@stenajs-webui/theme"),u=require("@stenajs-webui/core"),S=require("@stenajs-webui/elements"),r=require("react/jsx-runtime"),O=require("lodash"),Q=require("redux"),i=require("@stenajs-webui/redux"),U=require("@emotion/styled"),X=require("@stenajs-webui/forms"),Z=require("@stenajs-webui/select"),v=require("@stenajs-webui/calendar"),N=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},ee=N(U),q=({onRequestClose:e,header:t="Filter",contentRight:n})=>r.jsx(u.Spacing,{children:r.jsxs(u.Row,{justifyContent:"space-between",alignItems:"center",height:"48px",children:[r.jsxs(u.Row,{children:[r.jsx(u.Space,{num:3}),r.jsx(u.Heading,{variant:"h4",children:t})]}),r.jsxs(u.Row,{gap:1,children:[n,r.jsx(S.FlatButton,{leftIcon:S.stenaTimes,onClick:e,variant:"danger"}),r.jsx(u.Space,{num:.5})]})]})}),y=a.createContext(null),M=()=>{const e=a.useContext(y);if(!e)throw new Error("Missing search filter context, wrap components with SearchFilterContext component.");return e},k=a.createContext(null),g=()=>{const e=a.useContext(k);if(!e)throw new Error("Missing search filter dispatch context.");return e},A=a.createContext(null),m=()=>{const e=a.useContext(A);if(!e)throw new Error("Missing search filter actions context.");return e},te=({children:e,header:t,headerContentRight:n,...c})=>{const{settings:{open:s}}=M(),o=g(),l=m(),h=a.useCallback(()=>{o(l.closeFilters())},[l,o]);return r.jsx(Y.Drawer,{isOpen:s,onRequestClose:h,...c,children:r.jsxs(u.Column,{height:"100%",borderRadius:"var(--swui-border-radius)",background:J.cssColor("--lhds-color-ui-50"),children:[r.jsx(q,{onRequestClose:h,header:t,contentRight:n}),r.jsx(u.Box,{spacing:1,indent:1,gap:1,children:e})]})})},ne=({label:e="Filters",leftIcon:t=S.stenaSlidersMini})=>{const n=g(),c=m(),s=a.useCallback(()=>{n(c.openFilters())},[c,n]);return r.jsx(S.SecondaryButton,{label:e,leftIcon:t,onClick:s})},R=function({sectionId:t,label:n,loading:c,error:s,onRetry:o,disableContentPadding:l,children:h,leftIcon:C,contentRight:F}){var E;const d=M(),j=g(),f=m(),p=(E=d.expandedSections.values[t])!=null?E:!1,w=a.useCallback(()=>{j(f.setSectionExpanded(t,!p))},[f,j,p,t]),b=n!=null?n:I(t);return r.jsxs(r.Fragment,{children:[r.jsx(S.MenuButton,{label:b,leftIcon:C,expandable:!0,expanded:p,selected:p,onClick:w,right:F,children:c?r.jsx(u.Row,{spacing:!0,justifyContent:"center",flex:1,children:r.jsx(S.Spinner,{size:"small"})}):s?r.jsx(S.Banner,{variant:"error",text:s,contentRight:o?r.jsx(S.FlatButton,{label:"Retry",onClick:o}):null}):h}),p&&r.jsx(u.Space,{})]})},I=e=>O.upperFirst(O.lowerCase(e)),re=({children:e,...t})=>r.jsx(u.Column,{style:{marginTop:"auto"},justifyContent:"center",spacing:2,indent:!0,shadow:"popover",zIndex:1,...t,children:e}),B=a.createContext(null),ce=()=>{const e=a.useContext(B);if(!e)throw new Error("Missing search filter context, wrap components with SearchFilterContext component.");return e},P=function({state:t,dispatch:n,actions:c,children:s}){return r.jsx(k.Provider,{value:n,children:r.jsx(A.Provider,{value:c,children:r.jsx(y.Provider,{value:t,children:r.jsx(B.Provider,{value:t.formModel,children:s})})})})},D=e=>({settings:{open:!1},formModel:e,expandedSections:{values:{}}}),G=(e,t)=>Q.combineReducers({expandedSections:i.reducerIdGate(x(e,"expandedSections"),i.createValueByIdReducer(t.expandedSections)),formModel:i.reducerIdGate(x(e,"formModel"),i.createEntityReducer(t.formModel)),settings:i.reducerIdGate(x(e,"settings"),i.createEntityReducer(t.settings))}),V=(e,t)=>({openFilters:()=>i.reducerIdGateAction(x(e,"settings"),i.createEntityActions().setEntityFields({open:!0})),closeFilters:()=>i.reducerIdGateAction(x(e,"settings"),i.createEntityActions().setEntityFields({open:!1})),setFormModelFields:n=>i.reducerIdGateAction(x(e,"formModel"),i.createEntityActions().setEntityFields(n)),clearFormModel:()=>i.reducerIdGateAction(x(e,"formModel"),i.createEntityActions().setEntity(t)),expandSection:n=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,!0)),collapseSection:n=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,!1)),setSectionExpanded:(n,c)=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,c)),clearExpandedSections:()=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().clearAllValues())}),x=(e,t)=>`${e}.${t}`,H=e=>{const[t]=a.useState(()=>G("local",e)),[n]=a.useState(()=>V("local",e.formModel)),[c,s]=a.useReducer(t,e);return{actions:n,state:c,dispatch:s}},se=function({initialFormModel:t,children:n}){const{state:c,actions:s,dispatch:o}=H(D(t));return r.jsx(P,{state:c,actions:s,dispatch:o,children:n})},L=ee.default.div`
2
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),a=require("react"),Y=require("@stenajs-webui/modal"),J=require("@stenajs-webui/theme"),u=require("@stenajs-webui/core"),S=require("@stenajs-webui/elements"),O=require("lodash"),Q=require("redux"),i=require("@stenajs-webui/redux"),U=require("@emotion/styled"),X=require("@stenajs-webui/forms"),Z=require("@stenajs-webui/select"),v=require("@stenajs-webui/calendar"),N=e=>e&&typeof e=="object"&&"default"in e?e:{default:e},ee=N(U),q=({onRequestClose:e,header:t="Filter",contentRight:n})=>r.jsx(u.Spacing,{children:r.jsxs(u.Row,{justifyContent:"space-between",alignItems:"center",height:"48px",children:[r.jsxs(u.Row,{children:[r.jsx(u.Space,{num:3}),r.jsx(u.Heading,{variant:"h4",children:t})]}),r.jsxs(u.Row,{gap:1,children:[n,r.jsx(S.FlatButton,{leftIcon:S.stenaTimes,onClick:e,variant:"danger"}),r.jsx(u.Space,{num:.5})]})]})}),y=a.createContext(null),M=()=>{const e=a.useContext(y);if(!e)throw new Error("Missing search filter context, wrap components with SearchFilterContext component.");return e},k=a.createContext(null),g=()=>{const e=a.useContext(k);if(!e)throw new Error("Missing search filter dispatch context.");return e},A=a.createContext(null),m=()=>{const e=a.useContext(A);if(!e)throw new Error("Missing search filter actions context.");return e},te=({children:e,header:t,headerContentRight:n,...c})=>{const{settings:{open:s}}=M(),o=g(),l=m(),h=a.useCallback(()=>{o(l.closeFilters())},[l,o]);return r.jsx(Y.Drawer,{isOpen:s,onRequestClose:h,...c,children:r.jsxs(u.Column,{height:"100%",borderRadius:"var(--swui-border-radius)",background:J.cssColor("--lhds-color-ui-50"),children:[r.jsx(q,{onRequestClose:h,header:t,contentRight:n}),r.jsx(u.Box,{spacing:1,indent:1,gap:1,children:e})]})})},ne=({label:e="Filters",leftIcon:t=S.stenaSlidersMini})=>{const n=g(),c=m(),s=a.useCallback(()=>{n(c.openFilters())},[c,n]);return r.jsx(S.SecondaryButton,{label:e,leftIcon:t,onClick:s})},R=function({sectionId:t,label:n,loading:c,error:s,onRetry:o,disableContentPadding:l,children:h,leftIcon:C,contentRight:F}){var E;const d=M(),j=g(),f=m(),p=(E=d.expandedSections.values[t])!=null?E:!1,w=a.useCallback(()=>{j(f.setSectionExpanded(t,!p))},[f,j,p,t]),b=n!=null?n:I(t);return r.jsxs(r.Fragment,{children:[r.jsx(S.MenuButton,{label:b,leftIcon:C,expandable:!0,expanded:p,selected:p,onClick:w,right:F,children:c?r.jsx(u.Row,{spacing:!0,justifyContent:"center",flex:1,children:r.jsx(S.Spinner,{size:"small"})}):s?r.jsx(S.Banner,{variant:"error",text:s,contentRight:o?r.jsx(S.FlatButton,{label:"Retry",onClick:o}):null}):h}),p&&r.jsx(u.Space,{})]})},I=e=>O.upperFirst(O.lowerCase(e)),re=({children:e,...t})=>r.jsx(u.Column,{style:{marginTop:"auto"},justifyContent:"center",spacing:2,indent:!0,shadow:"popover",zIndex:1,...t,children:e}),B=a.createContext(null),ce=()=>{const e=a.useContext(B);if(!e)throw new Error("Missing search filter context, wrap components with SearchFilterContext component.");return e},P=function({state:t,dispatch:n,actions:c,children:s}){return r.jsx(k.Provider,{value:n,children:r.jsx(A.Provider,{value:c,children:r.jsx(y.Provider,{value:t,children:r.jsx(B.Provider,{value:t.formModel,children:s})})})})},D=e=>({settings:{open:!1},formModel:e,expandedSections:{values:{}}}),G=(e,t)=>Q.combineReducers({expandedSections:i.reducerIdGate(x(e,"expandedSections"),i.createValueByIdReducer(t.expandedSections)),formModel:i.reducerIdGate(x(e,"formModel"),i.createEntityReducer(t.formModel)),settings:i.reducerIdGate(x(e,"settings"),i.createEntityReducer(t.settings))}),V=(e,t)=>({openFilters:()=>i.reducerIdGateAction(x(e,"settings"),i.createEntityActions().setEntityFields({open:!0})),closeFilters:()=>i.reducerIdGateAction(x(e,"settings"),i.createEntityActions().setEntityFields({open:!1})),setFormModelFields:n=>i.reducerIdGateAction(x(e,"formModel"),i.createEntityActions().setEntityFields(n)),clearFormModel:()=>i.reducerIdGateAction(x(e,"formModel"),i.createEntityActions().setEntity(t)),expandSection:n=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,!0)),collapseSection:n=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,!1)),setSectionExpanded:(n,c)=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().setValue(n,c)),clearExpandedSections:()=>i.reducerIdGateAction(x(e,"expandedSections"),i.createValueByIdActions().clearAllValues())}),x=(e,t)=>`${e}.${t}`,H=e=>{const[t]=a.useState(()=>G("local",e)),[n]=a.useState(()=>V("local",e.formModel)),[c,s]=a.useReducer(t,e);return{actions:n,state:c,dispatch:s}},se=function({initialFormModel:t,children:n}){const{state:c,actions:s,dispatch:o}=H(D(t));return r.jsx(P,{state:c,actions:s,dispatch:o,children:n})},L=ee.default.div`
3
3
  padding: calc(var(--swui-metrics-spacing) / 2)
4
4
  calc(var(--swui-metrics-indent) / 2);
5
5
  `,oe=({children:e,disableClearAllButton:t=!1})=>{const n=g(),c=m(),s=a.useCallback(()=>n(c.clearFormModel()),[c,n]);return r.jsxs(u.Row,{flexWrap:"wrap",children:[e,!t&&r.jsx(L,{children:r.jsx(S.FlatButton,{size:"small",label:"Clear all",onClick:s})})]})},T=function({label:t,sectionId:n}){const c=g(),s=m(),o=a.useCallback(()=>{c(s.clearExpandedSections()),c(s.expandSection(n)),c(s.openFilters())},[s,c,n]);return r.jsx(L,{children:r.jsx(S.Chip,{label:t,variant:"secondary",onClick:o})})},_=function({sectionId:t,label:n,value:c,onClickRemove:s}){const o=g(),l=m(),h=a.useCallback(d=>o(l.setFormModelFields(d)),[o,l]),C=a.useCallback(()=>{s==null||s({value:c,setFormModelFields:h})},[s,h,c]),F=a.useCallback(()=>{o(l.clearExpandedSections()),o(l.expandSection(t)),o(l.openFilters())},[l,o,t]);return r.jsx(L,{children:r.jsx(S.Chip,{label:n!=null?n:t,onClick:F,onClickRemove:s?C:void 0})})},ae=function({sectionId:t,chips:n,emptyChipLabel:c,onClickRemoveOnChip:s}){return n!=null&&n.length?r.jsx(r.Fragment,{children:n.map(({label:o,value:l})=>r.jsx(_,{label:o!=null?o:t,sectionId:t,onClickRemove:s,value:l},l))}):c?r.jsx(T,{sectionId:t,label:c}):null},ie=(e,t,n)=>({chips:$(e[t],n),onClickRemoveOnChip:z(e,t)}),$=(e,t)=>u.truthyKeysAsList(e).map(n=>{var s;const c=t==null?void 0:t.find(o=>o.value===n);return{value:n,label:(s=c==null?void 0:c.label)!=null?s:n}}),z=(e,t)=>({setFormModelFields:n,value:c})=>{const s={...e[t]};s[c]=!1,n({[t]:s})},le=({options:e,value:t,onValueChange:n,...c})=>r.jsx(R,{disableContentPadding:!0,...c,children:r.jsx(u.Column,{maxHeight:"400px",overflowY:"auto",flex:1,gap:1,spacing:1,children:e==null?void 0:e.map(s=>r.jsx(u.Row,{alignItems:"center",children:r.jsx(X.CheckboxWithLabel,{tabIndex:-1,value:t==null?void 0:t[s.value],label:s.label,onValueChange:o=>n==null?void 0:n({...t,[s.value]:o})})},s.value))})}),ue=({options:e,value:t,noneSelectedLabel:n,onValueChange:c,...s})=>{const[o,l]=a.useState(""),h=a.useMemo(()=>t?u.truthyKeysAsList(t).map(d=>{var f;const j=e==null?void 0:e.find(p=>p.value===d);return{value:d,label:(f=j==null?void 0:j.label)!=null?f:d}}):[],[e,t]),C=a.useMemo(()=>e==null?void 0:e.filter(d=>d.value.toLocaleLowerCase().indexOf(o.toLocaleLowerCase())>-1||d.label.toLocaleLowerCase().indexOf(o.toLocaleLowerCase())>-1),[e,o]),F=a.useCallback(d=>{c==null||c(de(d))},[c]);return r.jsx(R,{...s,children:r.jsx(Z.ChipMultiSelect,{options:C,value:h,onValueChange:F,inputValue:o,noneSelectedLabel:n,onInputChange:l,closeMenuOnSelect:!1})})},de=e=>e.reduce((t,n)=>(t[n.value]=!0,t),{}),he=(e,t,n)=>({chips:K(e[t],e[n]),onClickRemoveOnChip:W(t,n)}),K=(e,t)=>!e&&!t?[]:[{value:"dateRange",label:`${e!=null?e:""} - ${t!=null?t:""}`}],W=(e,t)=>({setFormModelFields:n})=>{n({[e]:void 0,[t]:void 0})},xe=(e,t,n)=>({value:{startDate:e[t],endDate:e[n]},onValueChange:(c,{dispatch:s,actions:o})=>{const l={[t]:c.startDate,[n]:c.endDate};s(o.setFormModelFields(l))}}),Se=({value:e,onValueChange:t,sectionId:n,contentRight:c,disableContentPadding:s,label:o,leftIcon:l,...h})=>{const C=g(),F=m(),d=a.useMemo(()=>({dispatch:C,actions:F}),[F,C]),[j,f]=a.useState("startDate"),p=a.useMemo(()=>v.stringsToDateRange(e),[e]),w=a.useCallback(b=>{t(v.dateRangeToStrings(b),d)},[t,d]);return r.jsx(R,{label:o,leftIcon:l,sectionId:n,contentRight:c,disableContentPadding:s,children:r.jsx(u.Box,{flex:1,alignItems:"center",children:r.jsx(u.Box,{background:"white",indent:!0,children:r.jsx(v.DateRangeCalendar,{setFocusedInput:f,focusedInput:j,value:p,onValueChange:w,...h})})})})};exports.ChipMultiSelectSection=ue;exports.DateRangeCalendarSection=Se;exports.EmptyChip=T;exports.SearchFilterActionsContext=A;exports.SearchFilterButton=ne;exports.SearchFilterChip=_;exports.SearchFilterChips=oe;exports.SearchFilterContext=P;exports.SearchFilterDispatchContext=k;exports.SearchFilterDrawer=te;exports.SearchFilterLocalStateContext=se;exports.SearchFilterModelContext=B;exports.SearchFilterPanelHeader=q;exports.SearchFilterSection=R;exports.SearchFilterStateContext=y;exports.SectionChips=ae;exports.SimpleCheckboxListSection=le;exports.StickyFooter=re;exports.createChipsForBooleanRecord=$;exports.createChipsForDateRange=K;exports.createChipsPropsForBooleanRecord=ie;exports.createChipsPropsForDateRange=he;exports.createDateRangeSectionProps=xe;exports.createOnClickRemoveOnChipForBooleanRecord=z;exports.createOnClickRemoveOnChipForDateRange=W;exports.createSearchFilterActions=V;exports.createSearchFilterInitialState=D;exports.createSearchFilterReducer=G;exports.formatColumnIdToHeaderCellLabel=I;exports.getReducerIdFor=x;exports.useLocalSearchFilterState=H;exports.useSearchFilterActions=m;exports.useSearchFilterDispatch=g;exports.useSearchFilterModel=ce;exports.useSearchFilterState=M;
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/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/EmptyChip.tsx","../src/features/search-filter/features/chips/SearchFilterChip.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport { FlatButton, stenaTimes } from \"@stenajs-webui/elements\";\nimport { Heading, Row, Space, Spacing } from \"@stenajs-webui/core\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ onRequestClose, header = \"Filter\", contentRight }) => {\n return (\n <Spacing>\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n height={\"48px\"}\n >\n <Row>\n <Space num={3} />\n <Heading variant={\"h4\"}>{header}</Heading>\n </Row>\n <Row gap={1}>\n {contentRight}\n <FlatButton\n leftIcon={stenaTimes}\n onClick={onRequestClose}\n variant={\"danger\"}\n />\n <Space num={0.5} />\n </Row>\n </Row>\n </Spacing>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>(null as unknown as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>(null as unknown as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>(null as unknown as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { 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 isOpen={open} onRequestClose={closeDrawer} {...drawerProps}>\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\";\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 styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n 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\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface EmptyChipProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label: string;\n}\n\nexport const EmptyChip = function EmptyChip<TSectionKey extends string>({\n label,\n sectionId,\n}: EmptyChipProps<TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterSectionOnClickRemoveOnChip } from \"../../config/SearchFilterConfig\";\n\ninterface SearchFilterChipProps<TFormModel, TSectionKey> {\n sectionId: TSectionKey;\n label: string;\n value: string;\n onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SearchFilterChip = function SearchFilterChip<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n label,\n value,\n onClickRemove,\n}: SearchFilterChipProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemoveHandler = useCallback(() => {\n onClickRemove?.({ value, setFormModelFields });\n }, [onClickRemove, setFormModelFields, value]);\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { EmptyChip } from \"./EmptyChip\";\nimport { SearchFilterChip } from \"./SearchFilterChip\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return <EmptyChip sectionId={sectionId} label={emptyChipLabel} />;\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <SearchFilterChip\n key={value}\n label={label ?? sectionId}\n sectionId={sectionId}\n onClickRemove={onClickRemoveOnChip}\n value={value}\n />\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(\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 { Column, Row } from \"@stenajs-webui/core\";\nimport {\n CheckboxWithLabel,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface SimpleCheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n value,\n onValueChange,\n ...sectionProps\n}: SimpleCheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection disableContentPadding {...sectionProps}>\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1} gap={1} spacing={1}>\n {options?.map((d) => (\n <Row key={d.value} alignItems={\"center\"}>\n <CheckboxWithLabel\n tabIndex={-1}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n </Row>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n noneSelectedLabel?: string;\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n value,\n noneSelectedLabel,\n onValueChange,\n ...sectionProps\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection {...sectionProps}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n noneSelectedLabel={noneSelectedLabel}\n onInputChange={setText}\n closeMenuOnSelect={false}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import {\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","onRequestClose","header","contentRight","Spacing","Row","_jsxs","_jsx","Space","Heading","FlatButton","stenaTimes","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","settings","open","dispatch","actions","closeDrawer","useCallback","closeFilters","Drawer","Column","cssColor","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","openFilters","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","state","expanded","expandedSections","values","onClickLabel","setSectionExpanded","activeLabel","formatColumnIdToHeaderCellLabel","_Fragment","MenuButton","Spinner","Banner","columnId","upperFirst","lowerCase","StickyFooter","boxProps","marginTop","SearchFilterModelContext","useSearchFilterModel","SearchFilterContext","formModel","createSearchFilterInitialState","initialFormModel","createSearchFilterReducer","reducerId","initialState","combineReducers","reducerIdGate","getReducerIdFor","createValueByIdReducer","createEntityReducer","createSearchFilterActions","reducerIdGateAction","createEntityActions","fields","section","createValueByIdActions","reducerIdSuffix","useLocalSearchFilterState","reducer","useState","useReducer","SearchFilterLocalStateContext","ChipSpacer","styled","div","SearchFilterChips","disableClearAllButton","onClickClearAll","clearFormModel","EmptyChip","clearExpandedSections","expandSection","Chip","SearchFilterChip","value","onClickRemove","setFormModelFields","onClickRemoveHandler","undefined","SectionChips","chips","emptyChipLabel","onClickRemoveOnChip","length","map","createChipsPropsForBooleanRecord","fieldName","options","createChipsForBooleanRecord","createOnClickRemoveOnChipForBooleanRecord","booleanRecord","truthyKeysAsList","key","option","_a","newRecord","SimpleCheckboxListSection","onValueChange","sectionProps","d","CheckboxWithLabel","v","ChipMultiSelectSection","noneSelectedLabel","text","setText","listValue","useMemo","find","o","filteredOptions","filter","p","toLocaleLowerCase","indexOf","onValueChangeInternal","createBooleanRecordFromValue","ChipMultiSelect","reduce","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/chips/ChipSpacer.tsx","../src/features/search-filter/features/chips/SearchFilterChips.tsx","../src/features/search-filter/features/chips/EmptyChip.tsx","../src/features/search-filter/features/chips/SearchFilterChip.tsx","../src/features/search-filter/features/chips/SectionChips.tsx","../src/features/search-filter/section-factories/boolean-record/BooleanRecordChips.ts","../src/features/search-filter/section-factories/boolean-record/components/SimpleCheckboxListSection.tsx","../src/features/search-filter/section-factories/boolean-record/components/ChipMultiSelectSection.tsx","../src/features/search-filter/section-factories/date-range/DateRangeChips.ts","../src/features/search-filter/section-factories/date-range/DateRangePropsFactory.ts","../src/features/search-filter/section-factories/date-range/components/DateRangeCalendarSection.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport { FlatButton, stenaTimes } from \"@stenajs-webui/elements\";\nimport { Heading, Row, Space, Spacing } from \"@stenajs-webui/core\";\n\ninterface SearchFilterPanelHeaderProps {\n onRequestClose: () => void;\n header?: string;\n contentRight?: ReactNode;\n}\n\nexport const SearchFilterPanelHeader: React.FC<\n SearchFilterPanelHeaderProps\n> = ({ onRequestClose, header = \"Filter\", contentRight }) => {\n return (\n <Spacing>\n <Row\n justifyContent={\"space-between\"}\n alignItems={\"center\"}\n height={\"48px\"}\n >\n <Row>\n <Space num={3} />\n <Heading variant={\"h4\"}>{header}</Heading>\n </Row>\n <Row gap={1}>\n {contentRight}\n <FlatButton\n leftIcon={stenaTimes}\n onClick={onRequestClose}\n variant={\"danger\"}\n />\n <Space num={0.5} />\n </Row>\n </Row>\n </Spacing>\n );\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterState } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterStateContext = createContext<\n SearchFilterState<unknown>\n>(null as unknown as SearchFilterState<unknown>);\n\nexport const useSearchFilterState = <\n TFormModel\n>(): SearchFilterState<TFormModel> => {\n const c = useContext(SearchFilterStateContext);\n if (!c) {\n throw new Error(\n \"Missing search filter context, wrap components with SearchFilterContext component.\"\n );\n }\n return c as SearchFilterState<TFormModel>;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterDispatch } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterDispatchContext = createContext<\n SearchFilterDispatch<unknown>\n>(null as unknown as SearchFilterDispatch<unknown>);\n\nexport const useSearchFilterDispatch = () => {\n const c = useContext(SearchFilterDispatchContext);\n if (!c) {\n throw new Error(\"Missing search filter dispatch context.\");\n }\n return c;\n};\n","import { createContext, useContext } from \"react\";\nimport { SearchFilterActions } from \"../redux/SearchFilterRedux\";\n\nexport const SearchFilterActionsContext = createContext<\n SearchFilterActions<unknown, any>\n>(null as unknown as SearchFilterActions<unknown, any>);\n\nexport const useSearchFilterActions = <\n TFormModel,\n TSectionKey extends string\n>() => {\n const c = useContext(SearchFilterActionsContext);\n if (!c) {\n throw new Error(\"Missing search filter actions context.\");\n }\n return c as SearchFilterActions<TFormModel, TSectionKey>;\n};\n","import * as React from \"react\";\nimport { 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 isOpen={open} onRequestClose={closeDrawer} {...drawerProps}>\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\";\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 styled from \"@emotion/styled\";\n\nexport const ChipSpacer = styled.div`\n padding: calc(var(--swui-metrics-spacing) / 2)\n calc(var(--swui-metrics-indent) / 2);\n`;\n","import * as React from \"react\";\nimport { ReactNode, useCallback } from \"react\";\nimport { Row } from \"@stenajs-webui/core\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { FlatButton } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface SearchFilterChipsProps {\n disableClearAllButton?: boolean;\n 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\"}>\n {children}\n {!disableClearAllButton && (\n <ChipSpacer>\n <FlatButton\n size={\"small\"}\n label={\"Clear all\"}\n onClick={onClickClearAll}\n />\n </ChipSpacer>\n )}\n </Row>\n );\n};\n","import * as React from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useCallback } from \"react\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\n\ninterface EmptyChipProps<TSectionKey extends string> {\n sectionId: TSectionKey;\n label: string;\n}\n\nexport const EmptyChip = function EmptyChip<TSectionKey extends string>({\n label,\n sectionId,\n}: EmptyChipProps<TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip label={label} variant={\"secondary\"} onClick={onClickLabel} />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport { useCallback } from \"react\";\nimport { ChipSpacer } from \"./ChipSpacer\";\nimport { Chip } from \"@stenajs-webui/elements\";\nimport { useSearchFilterDispatch } from \"../../context/SearchFilterDispatchContext\";\nimport { useSearchFilterActions } from \"../../context/SearchFilterActionsContext\";\nimport { SearchFilterSectionOnClickRemoveOnChip } from \"../../config/SearchFilterConfig\";\n\ninterface SearchFilterChipProps<TFormModel, TSectionKey> {\n sectionId: TSectionKey;\n label: string;\n value: string;\n onClickRemove?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SearchFilterChip = function SearchFilterChip<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n label,\n value,\n onClickRemove,\n}: SearchFilterChipProps<TFormModel, TSectionKey>) {\n const dispatch = useSearchFilterDispatch();\n const actions = useSearchFilterActions();\n\n const setFormModelFields = useCallback(\n (fields: Partial<TFormModel>) =>\n dispatch(actions.setFormModelFields(fields)),\n [dispatch, actions]\n );\n\n const onClickRemoveHandler = useCallback(() => {\n onClickRemove?.({ value, setFormModelFields });\n }, [onClickRemove, setFormModelFields, value]);\n\n const onClickLabel = useCallback(() => {\n dispatch(actions.clearExpandedSections());\n dispatch(actions.expandSection(sectionId));\n dispatch(actions.openFilters());\n }, [actions, dispatch, sectionId]);\n\n return (\n <ChipSpacer>\n <Chip\n label={label ?? sectionId}\n onClick={onClickLabel}\n onClickRemove={onClickRemove ? onClickRemoveHandler : undefined}\n />\n </ChipSpacer>\n );\n};\n","import * as React from \"react\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { EmptyChip } from \"./EmptyChip\";\nimport { SearchFilterChip } from \"./SearchFilterChip\";\n\nexport interface SectionChipsProps<TFormModel, TSectionKey extends string> {\n sectionId: TSectionKey;\n chips?: Array<SearchFilterSectionChipModel>;\n emptyChipLabel?: string;\n onClickRemoveOnChip?: SearchFilterSectionOnClickRemoveOnChip<TFormModel>;\n}\n\nexport const SectionChips = function SectionChips<\n TFormModel,\n TSectionKey extends string\n>({\n sectionId,\n chips,\n emptyChipLabel,\n onClickRemoveOnChip,\n}: SectionChipsProps<TFormModel, TSectionKey>) {\n if (!chips?.length) {\n if (!emptyChipLabel) {\n return null;\n }\n return <EmptyChip sectionId={sectionId} label={emptyChipLabel} />;\n }\n\n return (\n <>\n {chips.map(({ label, value }) => (\n <SearchFilterChip\n key={value}\n label={label ?? sectionId}\n sectionId={sectionId}\n onClickRemove={onClickRemoveOnChip}\n value={value}\n />\n ))}\n </>\n );\n};\n","import { BooleanRecord, BooleanRecordOptions } from \"./BooleanRecordTypes\";\nimport {\n SearchFilterSectionChipModel,\n SearchFilterSectionOnClickRemoveOnChip,\n} from \"../../config/SearchFilterConfig\";\nimport { PickByValue, truthyKeysAsList } from \"@stenajs-webui/core\";\nimport { SectionChipsProps } from \"../../features/chips/SectionChips\";\n\nexport const createChipsPropsForBooleanRecord = <\n TFormModel,\n TSectionKey extends string,\n TField extends keyof PickByValue<TFormModel, BooleanRecord>\n>(\n formModel: TFormModel,\n fieldName: TField,\n options?: BooleanRecordOptions\n): Pick<\n SectionChipsProps<TFormModel, TSectionKey>,\n \"chips\" | \"onClickRemoveOnChip\"\n> => ({\n chips: createChipsForBooleanRecord(\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 { Column, Row } from \"@stenajs-webui/core\";\nimport {\n CheckboxWithLabel,\n ValueAndOnValueChangeProps,\n} from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\n\nexport interface SimpleCheckboxSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n options?: BooleanRecordOptions;\n}\n\nexport const SimpleCheckboxListSection = <TSectionKey extends string>({\n options,\n value,\n onValueChange,\n ...sectionProps\n}: SimpleCheckboxSectionProps<TSectionKey>): React.ReactElement => (\n <SearchFilterSection disableContentPadding {...sectionProps}>\n <Column maxHeight={\"400px\"} overflowY={\"auto\"} flex={1} gap={1} spacing={1}>\n {options?.map((d) => (\n <Row key={d.value} alignItems={\"center\"}>\n <CheckboxWithLabel\n tabIndex={-1}\n value={value?.[d.value]}\n label={d.label}\n onValueChange={(v) =>\n onValueChange?.({\n ...value,\n [d.value]: v,\n })\n }\n />\n </Row>\n ))}\n </Column>\n </SearchFilterSection>\n);\n","import * as React from \"react\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n SearchFilterSection,\n SearchFilterSectionProps,\n} from \"../../../components/SearchFilterSection\";\nimport { ValueAndOnValueChangeProps } from \"@stenajs-webui/forms\";\nimport { BooleanRecord, BooleanRecordOptions } from \"../BooleanRecordTypes\";\nimport { ChipMultiSelect, ChipMultiSelectValue } from \"@stenajs-webui/select\";\nimport { truthyKeysAsList } from \"@stenajs-webui/core\";\n\ninterface ChipMultiSelectSectionProps<TSectionKey extends string>\n extends SearchFilterSectionProps<TSectionKey>,\n ValueAndOnValueChangeProps<BooleanRecord> {\n noneSelectedLabel?: string;\n options?: BooleanRecordOptions;\n}\n\nexport const ChipMultiSelectSection = <TSectionKey extends string>({\n options,\n value,\n noneSelectedLabel,\n onValueChange,\n ...sectionProps\n}: ChipMultiSelectSectionProps<TSectionKey>): React.ReactElement => {\n const [text, setText] = useState<string>(\"\");\n\n const listValue = useMemo<Array<ChipMultiSelectValue>>(\n () =>\n value\n ? truthyKeysAsList(value).map<ChipMultiSelectValue>((key) => {\n const option = options?.find((o) => o.value === key);\n return { value: key, label: option?.label ?? key };\n })\n : [],\n [options, value]\n );\n\n const filteredOptions = useMemo(() => {\n return options?.filter(\n (p) =>\n p.value.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1 ||\n p.label.toLocaleLowerCase().indexOf(text.toLocaleLowerCase()) > -1\n );\n }, [options, text]);\n\n const onValueChangeInternal = useCallback(\n (value: Array<ChipMultiSelectValue>) => {\n onValueChange?.(createBooleanRecordFromValue(value));\n },\n [onValueChange]\n );\n\n return (\n <SearchFilterSection {...sectionProps}>\n <ChipMultiSelect\n options={filteredOptions}\n value={listValue}\n onValueChange={onValueChangeInternal}\n inputValue={text}\n noneSelectedLabel={noneSelectedLabel}\n onInputChange={setText}\n closeMenuOnSelect={false}\n />\n </SearchFilterSection>\n );\n};\n\nconst createBooleanRecordFromValue = (\n value: Array<ChipMultiSelectValue>\n): BooleanRecord => {\n return value.reduce<BooleanRecord>((sum, item) => {\n sum[item.value] = true;\n return sum;\n }, {});\n};\n","import {\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","onRequestClose","header","contentRight","Spacing","jsxs","Row","jsx","Space","Heading","FlatButton","stenaTimes","SearchFilterStateContext","createContext","useSearchFilterState","c","useContext","SearchFilterDispatchContext","useSearchFilterDispatch","SearchFilterActionsContext","useSearchFilterActions","SearchFilterDrawer","children","headerContentRight","drawerProps","open","dispatch","actions","closeDrawer","useCallback","Drawer","Column","cssColor","Box","SearchFilterButton","label","leftIcon","stenaSlidersMini","onClickButton","SecondaryButton","SearchFilterSection","sectionId","loading","error","onRetry","disableContentPadding","state","expanded","_a","onClickLabel","activeLabel","formatColumnIdToHeaderCellLabel","Fragment","MenuButton","Spinner","Banner","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","ChipSpacer","styled","SearchFilterChips","disableClearAllButton","onClickClearAll","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","CheckboxWithLabel","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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stenajs-webui/filter",
3
- "version": "19.0.0-next.11",
3
+ "version": "19.0.0-next.12",
4
4
  "description": "",
5
5
  "author": "mattias800",
6
6
  "license": "MIT",
@@ -26,15 +26,15 @@
26
26
  "deploy": "gh-pages -d example/build"
27
27
  },
28
28
  "dependencies": {
29
- "@stenajs-webui/calendar": "19.0.0-next.11",
30
- "@stenajs-webui/core": "19.0.0-next.11",
31
- "@stenajs-webui/elements": "19.0.0-next.11",
32
- "@stenajs-webui/forms": "19.0.0-next.11",
33
- "@stenajs-webui/modal": "19.0.0-next.11",
34
- "@stenajs-webui/panels": "19.0.0-next.11",
35
- "@stenajs-webui/redux": "19.0.0-next.11",
36
- "@stenajs-webui/select": "19.0.0-next.11",
37
- "@stenajs-webui/theme": "19.0.0-next.11",
29
+ "@stenajs-webui/calendar": "19.0.0-next.12",
30
+ "@stenajs-webui/core": "19.0.0-next.12",
31
+ "@stenajs-webui/elements": "19.0.0-next.12",
32
+ "@stenajs-webui/forms": "19.0.0-next.12",
33
+ "@stenajs-webui/modal": "19.0.0-next.12",
34
+ "@stenajs-webui/panels": "19.0.0-next.12",
35
+ "@stenajs-webui/redux": "19.0.0-next.12",
36
+ "@stenajs-webui/select": "19.0.0-next.12",
37
+ "@stenajs-webui/theme": "19.0.0-next.12",
38
38
  "date-fns": "2.26.0"
39
39
  },
40
40
  "peerDependencies": {
@@ -65,5 +65,5 @@
65
65
  "files": [
66
66
  "dist"
67
67
  ],
68
- "gitHead": "6ae8f099492aed7fad3120099a43c6cdbb3f2de1"
68
+ "gitHead": "5f3bcbfadc816d5ac26b94b556c64ccea4b185ee"
69
69
  }