@mittwald/flow-react-components 0.2.0-alpha.755 → 0.2.0-alpha.757

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.
Files changed (63) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/assets/doc-properties.json +5418 -5418
  3. package/dist/css/all.css +1 -1
  4. package/dist/js/packages/components/src/components/List/List.mjs +2 -2
  5. package/dist/js/packages/components/src/components/List/List.mjs.map +1 -1
  6. package/dist/js/packages/components/src/components/List/components/Header/components/ActiveFilters/ActiveFilters.mjs +7 -5
  7. package/dist/js/packages/components/src/components/List/components/Header/components/ActiveFilters/ActiveFilters.mjs.map +1 -1
  8. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/ViewModeAccordion.mjs +2 -2
  9. package/dist/js/packages/components/src/components/List/components/Header/components/AllFiltersModal/ViewModeAccordion.mjs.map +1 -1
  10. package/dist/js/packages/components/src/components/List/components/Header/components/ViewModeContextMenu/ViewModeContextMenu.mjs +1 -1
  11. package/dist/js/packages/components/src/components/List/components/Header/components/ViewModeContextMenu/ViewModeContextMenu.mjs.map +1 -1
  12. package/dist/js/packages/components/src/components/List/components/Header/components/ViewModeContextMenu/ViewModeMenuItem.mjs +1 -1
  13. package/dist/js/packages/components/src/components/List/components/Header/components/ViewModeContextMenu/ViewModeMenuItem.mjs.map +1 -1
  14. package/dist/js/packages/components/src/components/List/components/Items/Items.mjs +2 -2
  15. package/dist/js/packages/components/src/components/List/components/Items/Items.mjs.map +1 -1
  16. package/dist/js/packages/components/src/components/List/components/Items/components/FallbackItems/FallbackItems.mjs +1 -1
  17. package/dist/js/packages/components/src/components/List/components/Items/components/FallbackItems/FallbackItems.mjs.map +1 -1
  18. package/dist/js/packages/components/src/components/List/components/Items/components/Item/Item.mjs +9 -3
  19. package/dist/js/packages/components/src/components/List/components/Items/components/Item/Item.mjs.map +1 -1
  20. package/dist/js/packages/components/src/components/List/components/ListItemView/ListItemView.mjs +2 -2
  21. package/dist/js/packages/components/src/components/List/components/ListItemView/ListItemView.mjs.map +1 -1
  22. package/dist/js/packages/components/src/components/List/model/List.mjs +11 -98
  23. package/dist/js/packages/components/src/components/List/model/List.mjs.map +1 -1
  24. package/dist/js/packages/components/src/components/List/model/ListSettingsStore.mjs +90 -0
  25. package/dist/js/packages/components/src/components/List/model/ListSettingsStore.mjs.map +1 -0
  26. package/dist/js/packages/components/src/components/List/model/ListViewMode.mjs +38 -0
  27. package/dist/js/packages/components/src/components/List/model/ListViewMode.mjs.map +1 -0
  28. package/dist/js/packages/components/src/components/List/model/ReactTable.mjs +4 -3
  29. package/dist/js/packages/components/src/components/List/model/ReactTable.mjs.map +1 -1
  30. package/dist/js/packages/components/src/components/List/model/filter/Filter.mjs +62 -46
  31. package/dist/js/packages/components/src/components/List/model/filter/Filter.mjs.map +1 -1
  32. package/dist/js/packages/components/src/components/List/model/search/Search.mjs +16 -5
  33. package/dist/js/packages/components/src/components/List/model/search/Search.mjs.map +1 -1
  34. package/dist/js/packages/components/src/components/List/model/sorting/Sorting.mjs +35 -20
  35. package/dist/js/packages/components/src/components/List/model/sorting/Sorting.mjs.map +1 -1
  36. package/dist/js/packages/components/src/components/List/model/types.mjs.map +1 -1
  37. package/dist/types/components/List/List.d.ts.map +1 -1
  38. package/dist/types/components/List/components/Header/components/ActiveFilters/ActiveFilters.d.ts.map +1 -1
  39. package/dist/types/components/List/components/Header/components/AllFiltersModal/ViewModeAccordion.d.ts.map +1 -1
  40. package/dist/types/components/List/components/Items/components/Item/Item.d.ts.map +1 -1
  41. package/dist/types/components/List/model/List.d.ts +6 -28
  42. package/dist/types/components/List/model/List.d.ts.map +1 -1
  43. package/dist/types/components/List/model/ListSettingsStore.d.ts +63 -0
  44. package/dist/types/components/List/model/ListSettingsStore.d.ts.map +1 -0
  45. package/dist/types/components/List/model/ListViewMode.d.ts +19 -0
  46. package/dist/types/components/List/model/ListViewMode.d.ts.map +1 -0
  47. package/dist/types/components/List/model/ReactTable.d.ts.map +1 -1
  48. package/dist/types/components/List/model/filter/Filter.d.ts +9 -9
  49. package/dist/types/components/List/model/filter/Filter.d.ts.map +1 -1
  50. package/dist/types/components/List/model/filter/types.d.ts +1 -6
  51. package/dist/types/components/List/model/filter/types.d.ts.map +1 -1
  52. package/dist/types/components/List/model/search/Search.d.ts +3 -1
  53. package/dist/types/components/List/model/search/Search.d.ts.map +1 -1
  54. package/dist/types/components/List/model/search/types.d.ts +1 -0
  55. package/dist/types/components/List/model/search/types.d.ts.map +1 -1
  56. package/dist/types/components/List/model/sorting/Sorting.d.ts +3 -10
  57. package/dist/types/components/List/model/sorting/Sorting.d.ts.map +1 -1
  58. package/dist/types/components/List/model/sorting/types.d.ts +1 -0
  59. package/dist/types/components/List/model/sorting/types.d.ts.map +1 -1
  60. package/dist/types/components/List/model/types.d.ts +3 -0
  61. package/dist/types/components/List/model/types.d.ts.map +1 -1
  62. package/dist/types/components/List/stories/Default.stories.d.ts.map +1 -1
  63. package/package.json +6 -6
@@ -0,0 +1,90 @@
1
+ "use client"
2
+ /* */
3
+ import z from 'zod';
4
+
5
+ const supportedSettings = {
6
+ activeFilters: {
7
+ supports: {
8
+ autosave: true,
9
+ manualSave: true
10
+ },
11
+ schema: z.record(z.string().or(z.symbol()), z.array(z.string())).optional()
12
+ },
13
+ viewMode: {
14
+ supports: {
15
+ autosave: true,
16
+ manualSave: false
17
+ },
18
+ schema: z.enum(["list", "table", "tiles"]).optional()
19
+ },
20
+ sorting: {
21
+ supports: {
22
+ autosave: true,
23
+ manualSave: false
24
+ },
25
+ schema: z.object({
26
+ direction: z.enum(["asc", "desc"]),
27
+ property: z.string().or(z.number())
28
+ }).optional()
29
+ },
30
+ search: {
31
+ supports: {
32
+ autosave: true,
33
+ manualSave: false
34
+ },
35
+ schema: z.object({
36
+ value: z.string().optional()
37
+ }).optional()
38
+ }
39
+ };
40
+ class ListSettingsStore {
41
+ list;
42
+ storageKey;
43
+ settingsStore;
44
+ constructor(list, store, shape) {
45
+ this.list = list;
46
+ this.settingsStore = store;
47
+ this.storageKey = shape.storageKey;
48
+ }
49
+ getStorageKey(key, autosave = false) {
50
+ const autosaveSuffix = autosave ? ".autosave" : "";
51
+ return `${this.storageKey}.${key}${autosaveSuffix}`;
52
+ }
53
+ store(key, value, options) {
54
+ const settings = supportedSettings[key];
55
+ if (settings.supports.manualSave && options.manualSave) {
56
+ this.settingsStore.set(
57
+ "List",
58
+ this.getStorageKey(key, false),
59
+ settings.schema,
60
+ value
61
+ );
62
+ }
63
+ if (settings.supports.autosave && options.autosave) {
64
+ this.settingsStore.set(
65
+ "List",
66
+ this.getStorageKey(key, true),
67
+ settings.schema,
68
+ value
69
+ );
70
+ }
71
+ }
72
+ get(key, options) {
73
+ const settings = supportedSettings[key];
74
+ const { autosave, manualSave = !autosave } = options;
75
+ const getAutosavedValue = () => this.settingsStore.get(
76
+ "List",
77
+ this.getStorageKey(key, options.autosave),
78
+ settings.schema
79
+ );
80
+ const getManuallySavedValue = () => this.settingsStore.get(
81
+ "List",
82
+ this.getStorageKey(key, false),
83
+ settings.schema
84
+ );
85
+ return (settings.supports.autosave && autosave ? getAutosavedValue() : void 0) ?? (settings.supports.manualSave && manualSave ? getManuallySavedValue() : void 0);
86
+ }
87
+ }
88
+
89
+ export { ListSettingsStore };
90
+ //# sourceMappingURL=ListSettingsStore.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListSettingsStore.mjs","sources":["../../../../../../../../src/components/List/model/ListSettingsStore.ts"],"sourcesContent":["import type { SettingsStore } from \"@/components/SettingsProvider/models/SettingsStore\";\nimport type { ListSettingsStorageShape } from \"./types\";\nimport type List from \"./List\";\nimport z from \"zod\";\n\nexport interface ListSettingsStoreOperationOptions {\n autosave?: boolean;\n manualSave?: boolean;\n}\n\nconst supportedSettings = {\n activeFilters: {\n supports: {\n autosave: true,\n manualSave: true,\n },\n schema: z.record(z.string().or(z.symbol()), z.array(z.string())).optional(),\n },\n viewMode: {\n supports: {\n autosave: true,\n manualSave: false,\n },\n schema: z.enum([\"list\", \"table\", \"tiles\"]).optional(),\n },\n sorting: {\n supports: {\n autosave: true,\n manualSave: false,\n },\n schema: z\n .object({\n direction: z.enum([\"asc\", \"desc\"]),\n property: z.string().or(z.number()),\n })\n .optional(),\n },\n search: {\n supports: {\n autosave: true,\n manualSave: false,\n },\n schema: z\n .object({\n value: z.string().optional(),\n })\n .optional(),\n },\n} as const;\n\ntype SupportedSettings = keyof typeof supportedSettings;\n\ntype SchemaOf<T extends SupportedSettings> =\n (typeof supportedSettings)[T][\"schema\"];\n\nexport class ListSettingsStore<T> {\n public readonly list: List<T>;\n public readonly storageKey: string;\n private readonly settingsStore: SettingsStore;\n\n public constructor(\n list: List<T>,\n store: SettingsStore,\n shape: ListSettingsStorageShape,\n ) {\n this.list = list;\n this.settingsStore = store;\n this.storageKey = shape.storageKey;\n }\n\n private getStorageKey(key: string, autosave = false) {\n const autosaveSuffix = autosave ? \".autosave\" : \"\";\n return `${this.storageKey}.${key}${autosaveSuffix}`;\n }\n\n public store<T extends SupportedSettings>(\n key: T,\n value: z.infer<(typeof supportedSettings)[T][\"schema\"]>,\n options: ListSettingsStoreOperationOptions,\n ) {\n const settings = supportedSettings[key];\n\n if (settings.supports.manualSave && options.manualSave) {\n this.settingsStore.set(\n \"List\",\n this.getStorageKey(key, false),\n settings.schema,\n value as never,\n );\n }\n if (settings.supports.autosave && options.autosave) {\n this.settingsStore.set(\n \"List\",\n this.getStorageKey(key, true),\n settings.schema,\n value as never,\n );\n }\n }\n\n public get<T extends SupportedSettings>(\n key: T,\n options: ListSettingsStoreOperationOptions,\n ): z.infer<SchemaOf<T>> | undefined {\n const settings = supportedSettings[key];\n const { autosave, manualSave = !autosave } = options; // to ensure settings is used and avoid unused variable error\n\n const getAutosavedValue = () =>\n this.settingsStore.get(\n \"List\",\n this.getStorageKey(key, options.autosave),\n settings.schema,\n ) as z.infer<SchemaOf<T>> | undefined;\n\n const getManuallySavedValue = () =>\n this.settingsStore.get(\n \"List\",\n this.getStorageKey(key, false),\n settings.schema,\n ) as z.infer<SchemaOf<T>> | undefined;\n\n return (\n (settings.supports.autosave && autosave\n ? getAutosavedValue()\n : undefined) ??\n (settings.supports.manualSave && manualSave\n ? getManuallySavedValue()\n : undefined)\n );\n }\n}\n"],"names":[],"mappings":";;AAUA,MAAM,iBAAA,GAAoB;AAAA,EACxB,aAAA,EAAe;AAAA,IACb,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,QAAQ,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAO,CAAE,GAAG,CAAA,CAAE,MAAA,EAAQ,CAAA,EAAG,EAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAC,EAAE,QAAA;AAAS,GAC5E;AAAA,EACA,QAAA,EAAU;AAAA,IACR,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,MAAA,EAAQ,EAAE,IAAA,CAAK,CAAC,QAAQ,OAAA,EAAS,OAAO,CAAC,CAAA,CAAE,QAAA;AAAS,GACtD;AAAA,EACA,OAAA,EAAS;AAAA,IACP,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,MAAA,EAAQ,EACL,MAAA,CAAO;AAAA,MACN,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,KAAA,EAAO,MAAM,CAAC,CAAA;AAAA,MACjC,UAAU,CAAA,CAAE,MAAA,GAAS,EAAA,CAAG,CAAA,CAAE,QAAQ;AAAA,KACnC,EACA,QAAA;AAAS,GACd;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,QAAA,EAAU;AAAA,MACR,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,MAAA,EAAQ,EACL,MAAA,CAAO;AAAA,MACN,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,KAC5B,EACA,QAAA;AAAS;AAEhB,CAAA;AAOO,MAAM,iBAAA,CAAqB;AAAA,EAChB,IAAA;AAAA,EACA,UAAA;AAAA,EACC,aAAA;AAAA,EAEV,WAAA,CACL,IAAA,EACA,KAAA,EACA,KAAA,EACA;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,IAAA,CAAK,aAAa,KAAA,CAAM,UAAA;AAAA,EAC1B;AAAA,EAEQ,aAAA,CAAc,GAAA,EAAa,QAAA,GAAW,KAAA,EAAO;AACnD,IAAA,MAAM,cAAA,GAAiB,WAAW,WAAA,GAAc,EAAA;AAChD,IAAA,OAAO,GAAG,IAAA,CAAK,UAAU,CAAA,CAAA,EAAI,GAAG,GAAG,cAAc,CAAA,CAAA;AAAA,EACnD;AAAA,EAEO,KAAA,CACL,GAAA,EACA,KAAA,EACA,OAAA,EACA;AACA,IAAA,MAAM,QAAA,GAAW,kBAAkB,GAAG,CAAA;AAEtC,IAAA,IAAI,QAAA,CAAS,QAAA,CAAS,UAAA,IAAc,OAAA,CAAQ,UAAA,EAAY;AACtD,MAAA,IAAA,CAAK,aAAA,CAAc,GAAA;AAAA,QACjB,MAAA;AAAA,QACA,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,KAAK,CAAA;AAAA,QAC7B,QAAA,CAAS,MAAA;AAAA,QACT;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,QAAA,CAAS,QAAA,CAAS,QAAA,IAAY,OAAA,CAAQ,QAAA,EAAU;AAClD,MAAA,IAAA,CAAK,aAAA,CAAc,GAAA;AAAA,QACjB,MAAA;AAAA,QACA,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,IAAI,CAAA;AAAA,QAC5B,QAAA,CAAS,MAAA;AAAA,QACT;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA,EAEO,GAAA,CACL,KACA,OAAA,EACkC;AAClC,IAAA,MAAM,QAAA,GAAW,kBAAkB,GAAG,CAAA;AACtC,IAAA,MAAM,EAAE,QAAA,EAAU,UAAA,GAAa,CAAC,UAAS,GAAI,OAAA;AAE7C,IAAA,MAAM,iBAAA,GAAoB,MACxB,IAAA,CAAK,aAAA,CAAc,GAAA;AAAA,MACjB,MAAA;AAAA,MACA,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,OAAA,CAAQ,QAAQ,CAAA;AAAA,MACxC,QAAA,CAAS;AAAA,KACX;AAEF,IAAA,MAAM,qBAAA,GAAwB,MAC5B,IAAA,CAAK,aAAA,CAAc,GAAA;AAAA,MACjB,MAAA;AAAA,MACA,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,KAAK,CAAA;AAAA,MAC7B,QAAA,CAAS;AAAA,KACX;AAEF,IAAA,OAAA,CACG,QAAA,CAAS,QAAA,CAAS,QAAA,IAAY,QAAA,GAC3B,iBAAA,EAAkB,GAClB,MAAA,MACH,QAAA,CAAS,QAAA,CAAS,UAAA,IAAc,UAAA,GAC7B,qBAAA,EAAsB,GACtB,MAAA,CAAA;AAAA,EAER;AACF;;;;"}
@@ -0,0 +1,38 @@
1
+ "use client"
2
+ /* */
3
+ import { useState } from 'react';
4
+
5
+ class ListViewMode {
6
+ list;
7
+ autosave;
8
+ state;
9
+ constructor(list, options = {}) {
10
+ const { defaultViewMode, autosave = true } = options;
11
+ this.list = list;
12
+ this.autosave = autosave;
13
+ this.state = useState(
14
+ this.list.settingsStorage?.get("viewMode", { autosave: this.autosave }) ?? defaultViewMode ?? "list"
15
+ );
16
+ }
17
+ get value() {
18
+ return this.state[0];
19
+ }
20
+ get isTiles() {
21
+ return this.value === "tiles";
22
+ }
23
+ get isTable() {
24
+ return this.value === "table";
25
+ }
26
+ get isList() {
27
+ return this.value === "list";
28
+ }
29
+ set(viewMode) {
30
+ this.state[1](viewMode);
31
+ this.list.settingsStorage?.store("viewMode", viewMode, {
32
+ autosave: this.autosave
33
+ });
34
+ }
35
+ }
36
+
37
+ export { ListViewMode };
38
+ //# sourceMappingURL=ListViewMode.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListViewMode.mjs","sources":["../../../../../../../../src/components/List/model/ListViewMode.ts"],"sourcesContent":["import { useState } from \"react\";\nimport type { ListViewMode as RawListViewMode } from \"./types\";\nimport type { List } from \"./List\";\n\ninterface Options {\n defaultViewMode?: RawListViewMode;\n autosave?: boolean;\n}\n\nexport class ListViewMode<T = unknown> {\n public readonly list: List<T>;\n public readonly autosave: boolean;\n private readonly state: [\n RawListViewMode,\n React.Dispatch<React.SetStateAction<RawListViewMode>>,\n ];\n\n public constructor(list: List<T>, options: Options = {}) {\n const { defaultViewMode, autosave = true } = options;\n\n this.list = list;\n this.autosave = autosave;\n this.state = useState(\n this.list.settingsStorage?.get(\"viewMode\", { autosave: this.autosave }) ??\n defaultViewMode ??\n \"list\",\n );\n }\n\n public get value() {\n return this.state[0];\n }\n\n public get isTiles() {\n return this.value === \"tiles\";\n }\n\n public get isTable() {\n return this.value === \"table\";\n }\n\n public get isList() {\n return this.value === \"list\";\n }\n\n public set(viewMode: RawListViewMode): void {\n this.state[1](viewMode);\n this.list.settingsStorage?.store(\"viewMode\", viewMode, {\n autosave: this.autosave,\n });\n }\n}\n"],"names":[],"mappings":";;AASO,MAAM,YAAA,CAA0B;AAAA,EACrB,IAAA;AAAA,EACA,QAAA;AAAA,EACC,KAAA;AAAA,EAKV,WAAA,CAAY,IAAA,EAAe,OAAA,GAAmB,EAAC,EAAG;AACvD,IAAA,MAAM,EAAE,eAAA,EAAiB,QAAA,GAAW,IAAA,EAAK,GAAI,OAAA;AAE7C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AAAA,MACX,IAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,GAAA,CAAI,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,CAAA,IACpE,eAAA,IACA;AAAA,KACJ;AAAA,EACF;AAAA,EAEA,IAAW,KAAA,GAAQ;AACjB,IAAA,OAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,EACrB;AAAA,EAEA,IAAW,OAAA,GAAU;AACnB,IAAA,OAAO,KAAK,KAAA,KAAU,OAAA;AAAA,EACxB;AAAA,EAEA,IAAW,OAAA,GAAU;AACnB,IAAA,OAAO,KAAK,KAAA,KAAU,OAAA;AAAA,EACxB;AAAA,EAEA,IAAW,MAAA,GAAS;AAClB,IAAA,OAAO,KAAK,KAAA,KAAU,MAAA;AAAA,EACxB;AAAA,EAEO,IAAI,QAAA,EAAiC;AAC1C,IAAA,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,QAAQ,CAAA;AACtB,IAAA,IAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,KAAA,CAAM,UAAA,EAAY,QAAA,EAAU;AAAA,MACrD,UAAU,IAAA,CAAK;AAAA,KAChB,CAAA;AAAA,EACH;AACF;;;;"}
@@ -3,6 +3,7 @@
3
3
  import { useReactTable, getFacetedUniqueValues, getPaginationRowModel, getFilteredRowModel, getSortedRowModel, getCoreRowModel } from '@tanstack/react-table';
4
4
  import invariant from 'invariant';
5
5
  import { useState, useEffect } from 'react';
6
+ import { Filter } from './filter/Filter.mjs';
6
7
 
7
8
  class ReactTable {
8
9
  list;
@@ -12,7 +13,7 @@ class ReactTable {
12
13
  constructor(list, onChange, tableOptions = {}) {
13
14
  this.list = list;
14
15
  const defaultSorting = this.list.sorting.filter(
15
- (s) => s.defaultEnabled !== false
16
+ (s) => s.initialEnabled !== false
16
17
  );
17
18
  const [sortingState, updateSortingState] = useState(
18
19
  defaultSorting.map((s) => s.getReactTableColumnSort())
@@ -67,14 +68,14 @@ class ReactTable {
67
68
  if (onChange) {
68
69
  onChange(this.list);
69
70
  }
70
- this.list.autosaveFilterSettings();
71
+ Filter.storeFilters(this.list, { autosave: true });
71
72
  }, [this.list, onChange, table]);
72
73
  return table;
73
74
  }
74
75
  handleSortingStateUpdate(updater) {
75
76
  const newSortingState = typeof updater === "function" ? updater(this.sortingState) : updater;
76
77
  const additionalHiddenSorting = this.list.sorting.filter(
77
- (s) => s.defaultEnabled === "hidden" && !newSortingState.some((existing) => existing.id === s.property)
78
+ (s) => s.initialEnabled === "hidden" && !newSortingState.some((existing) => existing.id === s.property)
78
79
  ).map((s) => s.getReactTableColumnSort());
79
80
  this.updateSortingState([...additionalHiddenSorting, ...newSortingState]);
80
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ReactTable.mjs","sources":["../../../../../../../../src/components/List/model/ReactTable.ts"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n ColumnSort,\n InitialTableState,\n Table,\n TableOptions,\n Updater,\n} from \"@tanstack/react-table\";\nimport {\n getCoreRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport type List from \"@/components/List/model/List\";\nimport invariant from \"invariant\";\nimport type {\n OnListChanged,\n PropertyName,\n} from \"@/components/List/model/types\";\nimport type { SearchValue } from \"@/components/List/model/search/types\";\nimport type { Dispatch, SetStateAction } from \"react\";\nimport { useEffect, useState } from \"react\";\n\nexport class ReactTable<T, TMeta = unknown> {\n public readonly list: List<T, TMeta>;\n public readonly table: Table<T>;\n public readonly sortingState: ColumnSort[];\n public readonly updateSortingState: Dispatch<SetStateAction<ColumnSort[]>>;\n\n private constructor(\n list: List<T, TMeta>,\n onChange?: OnListChanged<T, TMeta>,\n tableOptions: Partial<TableOptions<T>> = {},\n ) {\n this.list = list;\n\n const defaultSorting = this.list.sorting.filter(\n (s) => s.defaultEnabled !== false,\n );\n\n const [sortingState, updateSortingState] = useState<ColumnSort[]>(\n defaultSorting.map((s) => s.getReactTableColumnSort()),\n );\n this.sortingState = sortingState;\n this.updateSortingState = updateSortingState;\n this.table = this.useReactTable(onChange, tableOptions);\n }\n\n public get searchString(): SearchValue {\n return this.table.getState().globalFilter;\n }\n\n public static useNew<T, TMeta = unknown>(\n list: List<T, TMeta>,\n onChange?: OnListChanged<T, TMeta>,\n tableOptions: Partial<TableOptions<T>> = {},\n ): ReactTable<T, TMeta> {\n return new ReactTable<T, TMeta>(list, onChange, tableOptions);\n }\n\n public getTableColumn(property: PropertyName<T>): Column<T> {\n const column = this.table.getColumn(property as string);\n invariant(!!column, `Column #${property} is not defined`);\n return column;\n }\n\n private useReactTable(\n onChange?: OnListChanged<T, TMeta>,\n tableOptions: Partial<TableOptions<T>> = {},\n ): Table<T> {\n const data = this.list.loader.useData();\n\n const initialState: InitialTableState = {\n pagination: {\n pageSize: this.list.batches.batchSize,\n },\n columnFilters: [],\n };\n\n for (const filter of this.list.filters) {\n filter.updateInitialState(initialState);\n }\n\n this.list.search?.updateInitialState(initialState);\n\n const table = useReactTable({\n data,\n state: {\n sorting: this.sortingState,\n },\n getRowId: this.list.getItemId,\n initialState,\n columns: this.getTableColumnDefs(),\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n onSortingChange: (updater) => {\n this.handleSortingStateUpdate(updater);\n },\n globalFilterFn: \"auto\",\n ...tableOptions,\n });\n\n useEffect(() => {\n if (onChange) {\n onChange(this.list);\n }\n this.list.autosaveFilterSettings();\n }, [this.list, onChange, table]);\n\n return table;\n }\n\n private handleSortingStateUpdate(updater: Updater<ColumnSort[]>) {\n const newSortingState =\n typeof updater === \"function\" ? updater(this.sortingState) : updater;\n\n const additionalHiddenSorting = this.list.sorting\n .filter(\n (s) =>\n s.defaultEnabled === \"hidden\" &&\n !newSortingState.some((existing) => existing.id === s.property),\n )\n .map((s) => s.getReactTableColumnSort());\n\n this.updateSortingState([...additionalHiddenSorting, ...newSortingState]);\n }\n\n private getTableColumnDefs(): ColumnDef<T>[] {\n const columnDefsMap = new Map<PropertyName<T>, ColumnDef<T>>();\n\n const getOrCreateColumnDef = (p: PropertyName<T>): ColumnDef<T> => {\n const existing = columnDefsMap.get(p);\n if (existing) {\n return existing;\n }\n const newDef: ColumnDef<T> = {\n id: p as string,\n accessorKey: p as string,\n enableSorting: false,\n enableColumnFilter: false,\n sortingFn: \"alphanumeric\",\n };\n\n columnDefsMap.set(p, newDef);\n return newDef;\n };\n\n this.list.filters.forEach((f) =>\n f.updateTableColumnDef(getOrCreateColumnDef(f.property)),\n );\n\n this.list.sorting.forEach((s) =>\n s.updateTableColumnDef(getOrCreateColumnDef(s.property)),\n );\n\n this.list.loader.staticDataProperties.forEach((property) => {\n getOrCreateColumnDef(property);\n });\n\n return Array.from(columnDefsMap.values());\n }\n}\n\nexport default ReactTable;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReactTable.mjs","sources":["../../../../../../../../src/components/List/model/ReactTable.ts"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n ColumnSort,\n InitialTableState,\n Table,\n TableOptions,\n Updater,\n} from \"@tanstack/react-table\";\nimport {\n getCoreRowModel,\n getFacetedUniqueValues,\n getFilteredRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport type List from \"@/components/List/model/List\";\nimport invariant from \"invariant\";\nimport type {\n OnListChanged,\n PropertyName,\n} from \"@/components/List/model/types\";\nimport type { SearchValue } from \"@/components/List/model/search/types\";\nimport type { Dispatch, SetStateAction } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { Filter } from \"./filter/Filter\";\n\nexport class ReactTable<T, TMeta = unknown> {\n public readonly list: List<T, TMeta>;\n public readonly table: Table<T>;\n public readonly sortingState: ColumnSort[];\n public readonly updateSortingState: Dispatch<SetStateAction<ColumnSort[]>>;\n\n private constructor(\n list: List<T, TMeta>,\n onChange?: OnListChanged<T, TMeta>,\n tableOptions: Partial<TableOptions<T>> = {},\n ) {\n this.list = list;\n\n const defaultSorting = this.list.sorting.filter(\n (s) => s.initialEnabled !== false,\n );\n\n const [sortingState, updateSortingState] = useState<ColumnSort[]>(\n defaultSorting.map((s) => s.getReactTableColumnSort()),\n );\n this.sortingState = sortingState;\n this.updateSortingState = updateSortingState;\n this.table = this.useReactTable(onChange, tableOptions);\n }\n\n public get searchString(): SearchValue {\n return this.table.getState().globalFilter;\n }\n\n public static useNew<T, TMeta = unknown>(\n list: List<T, TMeta>,\n onChange?: OnListChanged<T, TMeta>,\n tableOptions: Partial<TableOptions<T>> = {},\n ): ReactTable<T, TMeta> {\n return new ReactTable<T, TMeta>(list, onChange, tableOptions);\n }\n\n public getTableColumn(property: PropertyName<T>): Column<T> {\n const column = this.table.getColumn(property as string);\n invariant(!!column, `Column #${property} is not defined`);\n return column;\n }\n\n private useReactTable(\n onChange?: OnListChanged<T, TMeta>,\n tableOptions: Partial<TableOptions<T>> = {},\n ): Table<T> {\n const data = this.list.loader.useData();\n\n const initialState: InitialTableState = {\n pagination: {\n pageSize: this.list.batches.batchSize,\n },\n columnFilters: [],\n };\n\n for (const filter of this.list.filters) {\n filter.updateInitialState(initialState);\n }\n\n this.list.search?.updateInitialState(initialState);\n\n const table = useReactTable({\n data,\n state: {\n sorting: this.sortingState,\n },\n getRowId: this.list.getItemId,\n initialState,\n columns: this.getTableColumnDefs(),\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getPaginationRowModel: getPaginationRowModel(),\n getFacetedUniqueValues: getFacetedUniqueValues(),\n onSortingChange: (updater) => {\n this.handleSortingStateUpdate(updater);\n },\n globalFilterFn: \"auto\",\n ...tableOptions,\n });\n\n useEffect(() => {\n if (onChange) {\n onChange(this.list);\n }\n Filter.storeFilters(this.list, { autosave: true });\n }, [this.list, onChange, table]);\n\n return table;\n }\n\n private handleSortingStateUpdate(updater: Updater<ColumnSort[]>) {\n const newSortingState =\n typeof updater === \"function\" ? updater(this.sortingState) : updater;\n\n const additionalHiddenSorting = this.list.sorting\n .filter(\n (s) =>\n s.initialEnabled === \"hidden\" &&\n !newSortingState.some((existing) => existing.id === s.property),\n )\n .map((s) => s.getReactTableColumnSort());\n\n this.updateSortingState([...additionalHiddenSorting, ...newSortingState]);\n }\n\n private getTableColumnDefs(): ColumnDef<T>[] {\n const columnDefsMap = new Map<PropertyName<T>, ColumnDef<T>>();\n\n const getOrCreateColumnDef = (p: PropertyName<T>): ColumnDef<T> => {\n const existing = columnDefsMap.get(p);\n if (existing) {\n return existing;\n }\n const newDef: ColumnDef<T> = {\n id: p as string,\n accessorKey: p as string,\n enableSorting: false,\n enableColumnFilter: false,\n sortingFn: \"alphanumeric\",\n };\n\n columnDefsMap.set(p, newDef);\n return newDef;\n };\n\n this.list.filters.forEach((f) =>\n f.updateTableColumnDef(getOrCreateColumnDef(f.property)),\n );\n\n this.list.sorting.forEach((s) =>\n s.updateTableColumnDef(getOrCreateColumnDef(s.property)),\n );\n\n this.list.loader.staticDataProperties.forEach((property) => {\n getOrCreateColumnDef(property);\n });\n\n return Array.from(columnDefsMap.values());\n }\n}\n\nexport default ReactTable;\n"],"names":[],"mappings":"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"}
@@ -4,13 +4,11 @@ import { getProperty } from 'dot-prop';
4
4
  import { customPropertyPrefix } from '../types.mjs';
5
5
  import { unique, difference } from 'remeda';
6
6
  import { FilterValue } from './FilterValue.mjs';
7
- import z from 'zod';
8
7
  import { toArray } from '../../../../lib/array/toArray.mjs';
9
8
 
10
9
  const equalsPropertyMatcher = (filterValue, propertyValue) => filterValue === propertyValue;
11
10
  const stringCastRenderMethod = (value) => String(value);
12
11
  class Filter {
13
- static settingsStorageSchema = z.record(z.string().or(z.symbol()), z.array(z.string())).optional();
14
12
  _values;
15
13
  _valuesFromTableState;
16
14
  list;
@@ -20,51 +18,76 @@ class Filter {
20
18
  renderItem;
21
19
  name;
22
20
  autosave;
21
+ manualSave;
23
22
  onFilterChangeCallbacks = /* @__PURE__ */ new Set();
24
23
  defaultSelectedValues;
25
- initialSelectedValues;
26
24
  priority;
27
25
  storageKey;
28
26
  constructor(list, shape) {
27
+ const {
28
+ autosave = true,
29
+ manualSave = false,
30
+ property,
31
+ mode = "some",
32
+ values,
33
+ matcher = equalsPropertyMatcher,
34
+ renderItem = stringCastRenderMethod,
35
+ priority = "primary",
36
+ name,
37
+ defaultSelected,
38
+ onChange
39
+ } = shape;
29
40
  this.list = list;
30
- this.property = shape.property;
31
- this.storageKey = String(shape.property);
32
- this.mode = shape.mode ?? "some";
33
- this._values = shape.values?.map((v) => FilterValue.create(this, v));
34
- this.matcher = shape.matcher ?? equalsPropertyMatcher;
35
- this.renderItem = shape.renderItem ?? stringCastRenderMethod;
36
- this.name = shape.name;
37
- this.priority = shape.priority ?? "primary";
38
- this.defaultSelectedValues = shape.defaultSelected;
39
- this.initialSelectedValues = shape.initialSelected;
40
- this.autosave = shape.autosave ?? false;
41
- if (shape.onChange) {
42
- this.onFilterChangeCallbacks.add(shape.onChange);
43
- }
44
- }
45
- getStoredSelectedIds() {
46
- return this.list.getStoredFilterDefaultSettings()?.[this.storageKey];
47
- }
48
- getAutosavedSelectedIds() {
49
- if (this.autosave) {
50
- return this.list.getAutosavedFilterSettings()?.[this.storageKey];
41
+ this.autosave = autosave;
42
+ this.manualSave = manualSave;
43
+ this.property = property;
44
+ this.storageKey = String(property);
45
+ this.mode = mode;
46
+ this._values = values?.map((v) => FilterValue.create(this, v));
47
+ this.matcher = matcher;
48
+ this.renderItem = renderItem;
49
+ this.name = name;
50
+ this.priority = priority;
51
+ this.defaultSelectedValues = defaultSelected?.map(
52
+ (v) => FilterValue.create(this, v)
53
+ );
54
+ if (onChange) {
55
+ this.onFilterChangeCallbacks.add(onChange);
51
56
  }
52
57
  }
53
58
  updateInitialState(initialState) {
54
- const initialValues = this.getInitialValues({
55
- includeAutosaved: true,
56
- includeInitialProp: true
57
- });
58
- if (initialValues?.length) {
59
+ const initialIds = this.getInitialSelectedIds();
60
+ if (initialIds?.length) {
59
61
  initialState.columnFilters = [
60
62
  ...initialState.columnFilters ?? [],
61
63
  {
62
64
  id: this.property,
63
- value: initialValues
65
+ value: initialIds
64
66
  }
65
67
  ];
66
68
  }
67
69
  }
70
+ getInitialSelectedIds() {
71
+ return this.getStoredSelectedIds({
72
+ autosave: this.autosave,
73
+ manualSave: this.manualSave
74
+ }) ?? this.defaultSelectedValues?.map((v) => v.id);
75
+ }
76
+ getStoredSelectedIds(options) {
77
+ return this.list.settingsStorage?.get("activeFilters", options)?.[this.storageKey];
78
+ }
79
+ getStoredSelectedValues(options) {
80
+ return this.getStoredSelectedIds(options)?.map((id) => this.values.find((v) => v.id === id)).filter((v) => v !== void 0);
81
+ }
82
+ static storeFilters(list, options) {
83
+ const data = Object.fromEntries(
84
+ list.filters.map((filter) => [
85
+ filter.storageKey,
86
+ filter.getArrayValue().map((v) => v.id)
87
+ ])
88
+ );
89
+ list.settingsStorage?.store("activeFilters", data, options);
90
+ }
68
91
  updateTableColumnDef(def) {
69
92
  def.enableColumnFilter = true;
70
93
  def.filterFn = this.getReactTableFilterFn();
@@ -155,26 +178,19 @@ class Filter {
155
178
  const values = toArray(newValue).map((v) => v?.value);
156
179
  this.onFilterChangeCallbacks.forEach((cb) => cb(values));
157
180
  }
158
- hasChanged() {
159
- const currentValues = this.getArrayValue().map((v) => v.value);
160
- const autosavedValues = this.getInitialFilterValues()?.map((v) => v.value) ?? [];
161
- return currentValues.length !== autosavedValues.length || difference(currentValues, autosavedValues).length > 0;
162
- }
163
- getInitialValues(options = {}) {
164
- const { includeAutosaved = false, includeInitialProp = false } = options;
165
- return (includeInitialProp ? this.initialSelectedValues : void 0) ?? (includeAutosaved ? this.getAutosavedSelectedIds() : void 0) ?? this.getStoredSelectedIds() ?? this.defaultSelectedValues;
181
+ hasChanges() {
182
+ const currentIds = this.getArrayValue().map((v) => v.id);
183
+ const defaultIds = this.getStoredSelectedIds({ autosave: false }) ?? this.defaultSelectedValues?.map((v) => v.id) ?? [];
184
+ return currentIds.length !== defaultIds.length || difference(currentIds, defaultIds).length > 0;
166
185
  }
167
- getInitialFilterValues(options = {}) {
168
- return this.getInitialValues(options)?.map((v) => FilterValue.create(this, v)) ?? [];
186
+ isStoringAvailable() {
187
+ return !!this.list.settingsStorage && this.manualSave;
169
188
  }
170
189
  resetValues() {
171
190
  let resetTo;
172
- const initialValues = this.getInitialValues({
173
- includeAutosaved: false,
174
- includeInitialProp: false
175
- });
176
- if (initialValues) {
177
- resetTo = initialValues.map((v) => FilterValue.create(this, v));
191
+ const storedValues = this.getStoredSelectedValues({ autosave: false }) ?? this.defaultSelectedValues;
192
+ if (storedValues) {
193
+ resetTo = storedValues;
178
194
  } else {
179
195
  if (this.mode === "all" || this.mode === "some") {
180
196
  resetTo = [];
@@ -1 +1 @@
1
- {"version":3,"file":"Filter.mjs","sources":["../../../../../../../../../src/components/List/model/filter/Filter.ts"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n ColumnFilter,\n InitialTableState,\n} from \"@tanstack/react-table\";\nimport type List from \"@/components/List/model/List\";\nimport { getProperty } from \"dot-prop\";\nimport type {\n FilterMatcher,\n FilterMode,\n FilterShape,\n FilterUpdatedCallback,\n} from \"@/components/List/model/filter/types\";\nimport type {\n PropertyName,\n PropertyValueRenderMethod,\n} from \"@/components/List/model/types\";\nimport { customPropertyPrefix } from \"@/components/List/model/types\";\nimport { difference, unique } from \"remeda\";\nimport { FilterValue } from \"@/components/List/model/filter/FilterValue\";\nimport z from \"zod\";\nimport { toArray } from \"@/lib/array/toArray\";\n\nconst equalsPropertyMatcher: FilterMatcher<unknown, never, never> = (\n filterValue,\n propertyValue,\n) => filterValue === propertyValue;\n\nconst stringCastRenderMethod: PropertyValueRenderMethod<unknown> = (value) =>\n String(value);\n\ninterface InitialValuesOptions {\n includeAutosaved?: boolean;\n includeInitialProp?: boolean;\n}\n\nexport class Filter<T, TProp extends PropertyName<T>, TMatchValue> {\n public static readonly settingsStorageSchema = z\n .record(z.string().or(z.symbol()), z.array(z.string()))\n .optional();\n\n private _values?: FilterValue[] | undefined;\n private _valuesFromTableState?: FilterValue[];\n public readonly list: List<T>;\n public readonly property: TProp;\n public readonly mode: FilterMode;\n public readonly matcher: FilterMatcher<T, never, never>;\n public readonly renderItem: PropertyValueRenderMethod<TMatchValue>;\n public readonly name?: string;\n public readonly autosave: boolean;\n private onFilterChangeCallbacks = new Set<FilterUpdatedCallback>();\n private readonly defaultSelectedValues?: readonly NonNullable<TMatchValue>[];\n private readonly initialSelectedValues?: readonly NonNullable<TMatchValue>[];\n public readonly priority: \"primary\" | \"secondary\";\n private storageKey: string;\n\n public constructor(list: List<T>, shape: FilterShape<T, TProp, TMatchValue>) {\n this.list = list;\n this.property = shape.property;\n this.storageKey = String(shape.property);\n this.mode = shape.mode ?? \"some\";\n this._values = shape.values?.map((v) => FilterValue.create(this, v));\n this.matcher = shape.matcher ?? equalsPropertyMatcher;\n this.renderItem = shape.renderItem ?? stringCastRenderMethod;\n this.name = shape.name;\n this.priority = shape.priority ?? \"primary\";\n this.defaultSelectedValues = shape.defaultSelected;\n this.initialSelectedValues = shape.initialSelected;\n this.autosave = shape.autosave ?? false;\n if (shape.onChange) {\n this.onFilterChangeCallbacks.add(shape.onChange);\n }\n }\n\n private getStoredSelectedIds() {\n return this.list.getStoredFilterDefaultSettings()?.[this.storageKey];\n }\n\n private getAutosavedSelectedIds() {\n if (this.autosave) {\n return this.list.getAutosavedFilterSettings()?.[this.storageKey];\n }\n }\n\n public updateInitialState(initialState: InitialTableState) {\n const initialValues = this.getInitialValues({\n includeAutosaved: true,\n includeInitialProp: true,\n });\n\n if (initialValues?.length) {\n initialState.columnFilters = [\n ...(initialState.columnFilters ?? []),\n {\n id: this.property as string,\n value: initialValues,\n },\n ];\n }\n }\n\n public updateTableColumnDef(def: ColumnDef<T>): void {\n def.enableColumnFilter = true;\n def.filterFn = this.getReactTableFilterFn();\n }\n\n private getReactTableFilterFn(): ColumnDef<T>[\"filterFn\"] {\n return (row, _, filterValue) => {\n const propertyAsString = this.property as string;\n\n const filterBy = propertyAsString.startsWith(customPropertyPrefix)\n ? row.original\n : getProperty(row.original, propertyAsString);\n\n return this.checkFilterMatches(filterBy, filterValue);\n };\n }\n\n private checkFilterMatches(\n property: unknown,\n filterValueInput: unknown,\n ): boolean {\n if (filterValueInput === null) {\n return true;\n }\n\n const predicate = (filterValue: FilterValue) =>\n this.matcher(filterValue.value as never, property as never);\n\n const toFilterValue = (something: unknown) =>\n FilterValue.create(this, something);\n\n if (this.mode === \"all\") {\n return toArray(filterValueInput).map(toFilterValue).every(predicate);\n } else if (this.mode === \"some\") {\n const filterArr = toArray(filterValueInput);\n return (\n filterArr.length === 0 || filterArr.map(toFilterValue).some(predicate)\n );\n } else if (this.mode === \"one\") {\n const oneValue = Array.isArray(filterValueInput)\n ? filterValueInput[0]\n : filterValueInput;\n return predicate(toFilterValue(oneValue));\n }\n\n throw new Error(`Unknown filter mode '${this.mode}'`);\n }\n\n protected getTableColumnFilter(): ColumnFilter | undefined {\n return this.list.reactTable.table\n .getState()\n .columnFilters.find((f) => f.id === this.property);\n }\n\n private getTableColumn(): Column<T> {\n return this.list.reactTable.getTableColumn(this.property);\n }\n\n public getValue(): unknown {\n return this.getTableColumnFilter()?.value ?? null;\n }\n\n private getValuesFromTableState() {\n return unique(\n Array.from(this.getTableColumn().getFacetedUniqueValues().keys())\n .flatMap((v) => v)\n .filter((v) => v !== undefined && v !== null),\n ).map((v) => FilterValue.create(this, v));\n }\n\n private checkIfValueIsUnknown(value: FilterValue) {\n const isKnown = this.values.some((v) => v.id === value.id);\n return !isKnown;\n }\n\n public deleteUnknownFilterValues() {\n if (this.values === this.valuesFromTableState) {\n return;\n }\n\n for (const currentValues of this.getArrayValue()) {\n if (this.checkIfValueIsUnknown(currentValues)) {\n this.deactivateValue(currentValues);\n }\n }\n }\n\n public get values(): FilterValue[] {\n return this._values ?? this.valuesFromTableState;\n }\n\n private get valuesFromTableState(): FilterValue[] {\n if (!this._valuesFromTableState) {\n this._valuesFromTableState = this.getValuesFromTableState();\n }\n return this._valuesFromTableState;\n }\n\n public getArrayValue(): FilterValue[] {\n const value = this.getValue();\n return value === null\n ? []\n : toArray(value).map((v) => FilterValue.create(this, v));\n }\n\n public isValueActive(value: FilterValue): boolean {\n return this.getArrayValue().some((v) => v.equals(value));\n }\n\n public isActive(): boolean {\n return this.getArrayValue().length > 0;\n }\n\n public deactivateValue(value: FilterValue): void {\n const currentValueAsArray = this.getArrayValue();\n\n let updatedValue: FilterValue[] | FilterValue | null;\n\n if (this.mode === \"all\" || this.mode === \"some\") {\n updatedValue = currentValueAsArray.filter((v) => !v.equals(value));\n } else {\n updatedValue = null;\n }\n\n this.list.reactTable\n .getTableColumn(this.property)\n .setFilterValue(updatedValue);\n\n this.callOnChangedHandlers(updatedValue);\n }\n\n private callOnChangedHandlers(\n newValue: FilterValue[] | FilterValue | null,\n ): void {\n const values = toArray(newValue).map((v) => v?.value);\n this.onFilterChangeCallbacks.forEach((cb) => cb(values));\n }\n\n public hasChanged(): boolean {\n const currentValues = this.getArrayValue().map((v) => v.value);\n const autosavedValues =\n this.getInitialFilterValues()?.map((v) => v.value) ?? [];\n\n return (\n currentValues.length !== autosavedValues.length ||\n difference(currentValues, autosavedValues).length > 0\n );\n }\n\n private getInitialValues(options: InitialValuesOptions = {}) {\n const { includeAutosaved = false, includeInitialProp = false } = options;\n return (\n (includeInitialProp ? this.initialSelectedValues : undefined) ??\n (includeAutosaved ? this.getAutosavedSelectedIds() : undefined) ??\n this.getStoredSelectedIds() ??\n this.defaultSelectedValues\n );\n }\n\n private getInitialFilterValues(\n options: InitialValuesOptions = {},\n ): FilterValue[] {\n return (\n this.getInitialValues(options)?.map((v) => FilterValue.create(this, v)) ??\n []\n );\n }\n\n public resetValues(): void {\n let resetTo: FilterValue[] | FilterValue | null;\n\n const initialValues = this.getInitialValues({\n includeAutosaved: false,\n includeInitialProp: false,\n });\n\n if (initialValues) {\n resetTo = initialValues.map((v) => FilterValue.create(this, v));\n } else {\n if (this.mode === \"all\" || this.mode === \"some\") {\n resetTo = [];\n } else {\n resetTo = null;\n }\n }\n\n this.list.reactTable.getTableColumn(this.property).setFilterValue(resetTo);\n this.callOnChangedHandlers(resetTo);\n }\n\n public clear(): void {\n this.list.reactTable.getTableColumn(this.property).setFilterValue(null);\n this.callOnChangedHandlers(null);\n }\n\n public toggleValue(newValue: FilterValue): void {\n const currentValueAsArray = this.getArrayValue();\n\n let updatedValue: FilterValue[] | FilterValue | null;\n\n if (this.mode === \"all\" || this.mode === \"some\") {\n if (newValue.isActive) {\n updatedValue = currentValueAsArray.filter((v) => !v.equals(newValue));\n } else {\n updatedValue = [...currentValueAsArray, newValue];\n }\n } else {\n updatedValue = newValue.isActive ? null : newValue;\n }\n\n this.list.reactTable\n .getTableColumn(this.property)\n .setFilterValue(updatedValue);\n this.callOnChangedHandlers(updatedValue);\n }\n\n public onFilterUpdated(cb: () => unknown): void {\n this.onFilterChangeCallbacks.add(cb);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Filter.mjs","sources":["../../../../../../../../../src/components/List/model/filter/Filter.ts"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n ColumnFilter,\n InitialTableState,\n} from \"@tanstack/react-table\";\nimport type List from \"@/components/List/model/List\";\nimport { getProperty } from \"dot-prop\";\nimport type {\n FilterMatcher,\n FilterMode,\n FilterShape,\n FilterUpdatedCallback,\n} from \"@/components/List/model/filter/types\";\nimport type {\n PropertyName,\n PropertyValueRenderMethod,\n} from \"@/components/List/model/types\";\nimport { customPropertyPrefix } from \"@/components/List/model/types\";\nimport { difference, unique } from \"remeda\";\nimport { FilterValue } from \"@/components/List/model/filter/FilterValue\";\nimport { toArray } from \"@/lib/array/toArray\";\nimport type { ListSettingsStoreOperationOptions } from \"../ListSettingsStore\";\n\nconst equalsPropertyMatcher: FilterMatcher<unknown, never, never> = (\n filterValue,\n propertyValue,\n) => filterValue === propertyValue;\n\nconst stringCastRenderMethod: PropertyValueRenderMethod<unknown> = (value) =>\n String(value);\n\nexport class Filter<T, TProp extends PropertyName<T>, TMatchValue> {\n private _values?: FilterValue[] | undefined;\n private _valuesFromTableState?: FilterValue[];\n public readonly list: List<T>;\n public readonly property: TProp;\n public readonly mode: FilterMode;\n public readonly matcher: FilterMatcher<T, never, never>;\n public readonly renderItem: PropertyValueRenderMethod<TMatchValue>;\n public readonly name?: string;\n public readonly autosave: boolean;\n public readonly manualSave: boolean;\n private onFilterChangeCallbacks = new Set<FilterUpdatedCallback>();\n private readonly defaultSelectedValues?: FilterValue[];\n public readonly priority: \"primary\" | \"secondary\";\n public readonly storageKey: string;\n\n public constructor(list: List<T>, shape: FilterShape<T, TProp, TMatchValue>) {\n const {\n autosave = true,\n manualSave = false,\n property,\n mode = \"some\",\n values,\n matcher = equalsPropertyMatcher,\n renderItem = stringCastRenderMethod,\n priority = \"primary\",\n name,\n defaultSelected,\n onChange,\n } = shape;\n\n this.list = list;\n this.autosave = autosave;\n this.manualSave = manualSave;\n this.property = property;\n this.storageKey = String(property);\n this.mode = mode;\n this._values = values?.map((v) => FilterValue.create(this, v));\n this.matcher = matcher;\n this.renderItem = renderItem;\n this.name = name;\n this.priority = priority;\n this.defaultSelectedValues = defaultSelected?.map((v) =>\n FilterValue.create(this, v),\n );\n if (onChange) {\n this.onFilterChangeCallbacks.add(onChange);\n }\n }\n\n public updateInitialState(initialState: InitialTableState) {\n const initialIds = this.getInitialSelectedIds();\n\n if (initialIds?.length) {\n initialState.columnFilters = [\n ...(initialState.columnFilters ?? []),\n {\n id: this.property as string,\n value: initialIds,\n },\n ];\n }\n }\n\n private getInitialSelectedIds() {\n return (\n this.getStoredSelectedIds({\n autosave: this.autosave,\n manualSave: this.manualSave,\n }) ?? this.defaultSelectedValues?.map((v) => v.id)\n );\n }\n\n private getStoredSelectedIds(options: ListSettingsStoreOperationOptions) {\n return this.list.settingsStorage?.get(\"activeFilters\", options)?.[\n this.storageKey\n ];\n }\n\n private getStoredSelectedValues(options: ListSettingsStoreOperationOptions) {\n return this.getStoredSelectedIds(options)\n ?.map((id) => this.values.find((v) => v.id === id))\n .filter((v): v is FilterValue => v !== undefined);\n }\n\n public static storeFilters<T>(\n list: List<T>,\n options: ListSettingsStoreOperationOptions,\n ) {\n const data = Object.fromEntries(\n list.filters.map((filter) => [\n filter.storageKey,\n filter.getArrayValue().map((v) => v.id),\n ]),\n );\n\n list.settingsStorage?.store(\"activeFilters\", data, options);\n }\n\n public updateTableColumnDef(def: ColumnDef<T>): void {\n def.enableColumnFilter = true;\n def.filterFn = this.getReactTableFilterFn();\n }\n\n private getReactTableFilterFn(): ColumnDef<T>[\"filterFn\"] {\n return (row, _, filterValue) => {\n const propertyAsString = this.property as string;\n\n const filterBy = propertyAsString.startsWith(customPropertyPrefix)\n ? row.original\n : getProperty(row.original, propertyAsString);\n\n return this.checkFilterMatches(filterBy, filterValue);\n };\n }\n\n private checkFilterMatches(\n property: unknown,\n filterValueInput: unknown,\n ): boolean {\n if (filterValueInput === null) {\n return true;\n }\n\n const predicate = (filterValue: FilterValue) =>\n this.matcher(filterValue.value as never, property as never);\n\n const toFilterValue = (something: unknown) =>\n FilterValue.create(this, something);\n\n if (this.mode === \"all\") {\n return toArray(filterValueInput).map(toFilterValue).every(predicate);\n } else if (this.mode === \"some\") {\n const filterArr = toArray(filterValueInput);\n return (\n filterArr.length === 0 || filterArr.map(toFilterValue).some(predicate)\n );\n } else if (this.mode === \"one\") {\n const oneValue = Array.isArray(filterValueInput)\n ? filterValueInput[0]\n : filterValueInput;\n return predicate(toFilterValue(oneValue));\n }\n\n throw new Error(`Unknown filter mode '${this.mode}'`);\n }\n\n protected getTableColumnFilter(): ColumnFilter | undefined {\n return this.list.reactTable.table\n .getState()\n .columnFilters.find((f) => f.id === this.property);\n }\n\n private getTableColumn(): Column<T> {\n return this.list.reactTable.getTableColumn(this.property);\n }\n\n public getValue(): unknown {\n return this.getTableColumnFilter()?.value ?? null;\n }\n\n private getValuesFromTableState() {\n return unique(\n Array.from(this.getTableColumn().getFacetedUniqueValues().keys())\n .flatMap((v) => v)\n .filter((v) => v !== undefined && v !== null),\n ).map((v) => FilterValue.create(this, v));\n }\n\n private checkIfValueIsUnknown(value: FilterValue) {\n const isKnown = this.values.some((v) => v.id === value.id);\n return !isKnown;\n }\n\n public deleteUnknownFilterValues() {\n if (this.values === this.valuesFromTableState) {\n return;\n }\n\n for (const currentValues of this.getArrayValue()) {\n if (this.checkIfValueIsUnknown(currentValues)) {\n this.deactivateValue(currentValues);\n }\n }\n }\n\n public get values(): FilterValue[] {\n return this._values ?? this.valuesFromTableState;\n }\n\n private get valuesFromTableState(): FilterValue[] {\n if (!this._valuesFromTableState) {\n this._valuesFromTableState = this.getValuesFromTableState();\n }\n return this._valuesFromTableState;\n }\n\n public getArrayValue(): FilterValue[] {\n const value = this.getValue();\n return value === null\n ? []\n : toArray(value).map((v) => FilterValue.create(this, v));\n }\n\n public isValueActive(value: FilterValue): boolean {\n return this.getArrayValue().some((v) => v.equals(value));\n }\n\n public isActive(): boolean {\n return this.getArrayValue().length > 0;\n }\n\n public deactivateValue(value: FilterValue): void {\n const currentValueAsArray = this.getArrayValue();\n\n let updatedValue: FilterValue[] | FilterValue | null;\n\n if (this.mode === \"all\" || this.mode === \"some\") {\n updatedValue = currentValueAsArray.filter((v) => !v.equals(value));\n } else {\n updatedValue = null;\n }\n\n this.list.reactTable\n .getTableColumn(this.property)\n .setFilterValue(updatedValue);\n\n this.callOnChangedHandlers(updatedValue);\n }\n\n private callOnChangedHandlers(\n newValue: FilterValue[] | FilterValue | null,\n ): void {\n const values = toArray(newValue).map((v) => v?.value);\n this.onFilterChangeCallbacks.forEach((cb) => cb(values));\n }\n\n public hasChanges(): boolean {\n const currentIds = this.getArrayValue().map((v) => v.id);\n\n const defaultIds =\n this.getStoredSelectedIds({ autosave: false }) ??\n this.defaultSelectedValues?.map((v) => v.id) ??\n [];\n\n return (\n currentIds.length !== defaultIds.length ||\n difference(currentIds, defaultIds).length > 0\n );\n }\n\n public isStoringAvailable(): boolean {\n return !!this.list.settingsStorage && this.manualSave;\n }\n\n public resetValues(): void {\n let resetTo: FilterValue[] | FilterValue | null;\n\n const storedValues =\n this.getStoredSelectedValues({ autosave: false }) ??\n this.defaultSelectedValues;\n\n if (storedValues) {\n resetTo = storedValues;\n } else {\n if (this.mode === \"all\" || this.mode === \"some\") {\n resetTo = [];\n } else {\n resetTo = null;\n }\n }\n\n this.list.reactTable.getTableColumn(this.property).setFilterValue(resetTo);\n this.callOnChangedHandlers(resetTo);\n }\n\n public clear(): void {\n this.list.reactTable.getTableColumn(this.property).setFilterValue(null);\n this.callOnChangedHandlers(null);\n }\n\n public toggleValue(newValue: FilterValue): void {\n const currentValueAsArray = this.getArrayValue();\n\n let updatedValue: FilterValue[] | FilterValue | null;\n\n if (this.mode === \"all\" || this.mode === \"some\") {\n if (newValue.isActive) {\n updatedValue = currentValueAsArray.filter((v) => !v.equals(newValue));\n } else {\n updatedValue = [...currentValueAsArray, newValue];\n }\n } else {\n updatedValue = newValue.isActive ? null : newValue;\n }\n\n this.list.reactTable\n .getTableColumn(this.property)\n .setFilterValue(updatedValue);\n this.callOnChangedHandlers(updatedValue);\n }\n\n public onFilterUpdated(cb: () => unknown): void {\n this.onFilterChangeCallbacks.add(cb);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -5,12 +5,15 @@ class Search {
5
5
  render;
6
6
  textFieldProps;
7
7
  onUpdateCallbacks = /* @__PURE__ */ new Set();
8
- defaultValue;
8
+ initialValue;
9
+ autosave;
9
10
  constructor(list, searchShape) {
11
+ const { autosave = false, render, textFieldProps } = searchShape;
12
+ this.autosave = autosave;
10
13
  this.list = list;
11
- this.render = searchShape.render;
12
- this.textFieldProps = searchShape.textFieldProps;
13
- this.defaultValue = searchShape.defaultValue;
14
+ this.render = render;
15
+ this.textFieldProps = textFieldProps;
16
+ this.initialValue = this.getInitialValue(searchShape);
14
17
  }
15
18
  get value() {
16
19
  return this.list.reactTable.searchString;
@@ -21,8 +24,11 @@ class Search {
21
24
  callOnUpdateCallbacks() {
22
25
  this.onUpdateCallbacks.forEach((cb) => cb());
23
26
  }
27
+ getInitialValue(shape) {
28
+ return this.list.settingsStorage?.get("search", { autosave: shape.autosave })?.value ?? shape.defaultValue;
29
+ }
24
30
  updateInitialState(initialState) {
25
- initialState.globalFilter = this.defaultValue;
31
+ initialState.globalFilter = this.initialValue;
26
32
  }
27
33
  setValue(value) {
28
34
  if (value === void 0 || value.trim() === "") {
@@ -34,6 +40,11 @@ class Search {
34
40
  this.list.reactTable.table.setGlobalFilter(value);
35
41
  this.callOnUpdateCallbacks();
36
42
  }
43
+ this.list.settingsStorage?.store(
44
+ "search",
45
+ { value },
46
+ { autosave: this.autosave }
47
+ );
37
48
  }
38
49
  clear() {
39
50
  this.setValue(void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"Search.mjs","sources":["../../../../../../../../../src/components/List/model/search/Search.ts"],"sourcesContent":["import type List from \"@/components/List/model/List\";\nimport type {\n SearchFieldRenderComponent,\n SearchShape,\n SearchValue,\n} from \"@/components/List/model/search/types\";\nimport type { InitialTableState } from \"@tanstack/react-table\";\n\nexport class Search<T> {\n public readonly list: List<T>;\n public readonly render?: SearchFieldRenderComponent;\n public readonly textFieldProps: SearchShape<T>[\"textFieldProps\"];\n private onUpdateCallbacks = new Set<() => unknown>();\n private readonly defaultValue?: string;\n\n public constructor(list: List<T>, searchShape: SearchShape<T>) {\n this.list = list;\n this.render = searchShape.render;\n this.textFieldProps = searchShape.textFieldProps;\n this.defaultValue = searchShape.defaultValue;\n }\n\n public get value(): SearchValue {\n return this.list.reactTable.searchString;\n }\n\n public get isSet() {\n return this.value !== undefined;\n }\n\n private callOnUpdateCallbacks(): void {\n this.onUpdateCallbacks.forEach((cb) => cb());\n }\n\n public updateInitialState(initialState: InitialTableState) {\n initialState.globalFilter = this.defaultValue;\n }\n\n public setValue(value: SearchValue): void {\n if (value === undefined || value.trim() === \"\") {\n if (this.list.reactTable.table.getState().globalFilter) {\n this.list.reactTable.table.setGlobalFilter(undefined);\n this.callOnUpdateCallbacks();\n }\n } else {\n this.list.reactTable.table.setGlobalFilter(value);\n this.callOnUpdateCallbacks();\n }\n }\n\n public clear(): void {\n this.setValue(undefined);\n }\n\n public onUpdated(cb: () => unknown): void {\n this.onUpdateCallbacks.add(cb);\n }\n}\n"],"names":[],"mappings":"AAQO,MAAM,MAAA,CAAU;AAAA,EACL,IAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACR,iBAAA,uBAAwB,GAAA,EAAmB;AAAA,EAClC,YAAA;AAAA,EAEV,WAAA,CAAY,MAAe,WAAA,EAA6B;AAC7D,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,SAAS,WAAA,CAAY,MAAA;AAC1B,IAAA,IAAA,CAAK,iBAAiB,WAAA,CAAY,cAAA;AAClC,IAAA,IAAA,CAAK,eAAe,WAAA,CAAY,YAAA;AAAA,EAClC;AAAA,EAEA,IAAW,KAAA,GAAqB;AAC9B,IAAA,OAAO,IAAA,CAAK,KAAK,UAAA,CAAW,YAAA;AAAA,EAC9B;AAAA,EAEA,IAAW,KAAA,GAAQ;AACjB,IAAA,OAAO,KAAK,KAAA,KAAU,MAAA;AAAA,EACxB;AAAA,EAEQ,qBAAA,GAA8B;AACpC,IAAA,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,CAAC,EAAA,KAAO,IAAI,CAAA;AAAA,EAC7C;AAAA,EAEO,mBAAmB,YAAA,EAAiC;AACzD,IAAA,YAAA,CAAa,eAAe,IAAA,CAAK,YAAA;AAAA,EACnC;AAAA,EAEO,SAAS,KAAA,EAA0B;AACxC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AAC9C,MAAA,IAAI,KAAK,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAA,GAAW,YAAA,EAAc;AACtD,QAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,eAAA,CAAgB,MAAS,CAAA;AACpD,QAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,MAC7B;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,eAAA,CAAgB,KAAK,CAAA;AAChD,MAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,IAC7B;AAAA,EACF;AAAA,EAEO,KAAA,GAAc;AACnB,IAAA,IAAA,CAAK,SAAS,MAAS,CAAA;AAAA,EACzB;AAAA,EAEO,UAAU,EAAA,EAAyB;AACxC,IAAA,IAAA,CAAK,iBAAA,CAAkB,IAAI,EAAE,CAAA;AAAA,EAC/B;AACF;;;;"}
1
+ {"version":3,"file":"Search.mjs","sources":["../../../../../../../../../src/components/List/model/search/Search.ts"],"sourcesContent":["import type List from \"@/components/List/model/List\";\nimport type {\n SearchFieldRenderComponent,\n SearchShape,\n SearchValue,\n} from \"@/components/List/model/search/types\";\nimport type { InitialTableState } from \"@tanstack/react-table\";\n\nexport class Search<T> {\n public readonly list: List<T>;\n public readonly render?: SearchFieldRenderComponent;\n public readonly textFieldProps: SearchShape<T>[\"textFieldProps\"];\n private onUpdateCallbacks = new Set<() => unknown>();\n private readonly initialValue?: string;\n private readonly autosave: boolean;\n\n public constructor(list: List<T>, searchShape: SearchShape<T>) {\n const { autosave = false, render, textFieldProps } = searchShape;\n\n this.autosave = autosave;\n this.list = list;\n this.render = render;\n this.textFieldProps = textFieldProps;\n this.initialValue = this.getInitialValue(searchShape);\n }\n\n public get value(): SearchValue {\n return this.list.reactTable.searchString;\n }\n\n public get isSet() {\n return this.value !== undefined;\n }\n\n private callOnUpdateCallbacks(): void {\n this.onUpdateCallbacks.forEach((cb) => cb());\n }\n\n private getInitialValue(shape: SearchShape<T>) {\n return (\n this.list.settingsStorage?.get(\"search\", { autosave: shape.autosave })\n ?.value ?? shape.defaultValue\n );\n }\n\n public updateInitialState(initialState: InitialTableState) {\n initialState.globalFilter = this.initialValue;\n }\n\n public setValue(value: SearchValue): void {\n if (value === undefined || value.trim() === \"\") {\n if (this.list.reactTable.table.getState().globalFilter) {\n this.list.reactTable.table.setGlobalFilter(undefined);\n this.callOnUpdateCallbacks();\n }\n } else {\n this.list.reactTable.table.setGlobalFilter(value);\n this.callOnUpdateCallbacks();\n }\n\n this.list.settingsStorage?.store(\n \"search\",\n { value },\n { autosave: this.autosave },\n );\n }\n\n public clear(): void {\n this.setValue(undefined);\n }\n\n public onUpdated(cb: () => unknown): void {\n this.onUpdateCallbacks.add(cb);\n }\n}\n"],"names":[],"mappings":"AAQO,MAAM,MAAA,CAAU;AAAA,EACL,IAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACR,iBAAA,uBAAwB,GAAA,EAAmB;AAAA,EAClC,YAAA;AAAA,EACA,QAAA;AAAA,EAEV,WAAA,CAAY,MAAe,WAAA,EAA6B;AAC7D,IAAA,MAAM,EAAE,QAAA,GAAW,KAAA,EAAO,MAAA,EAAQ,gBAAe,GAAI,WAAA;AAErD,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAChB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,cAAA,GAAiB,cAAA;AACtB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA,CAAK,eAAA,CAAgB,WAAW,CAAA;AAAA,EACtD;AAAA,EAEA,IAAW,KAAA,GAAqB;AAC9B,IAAA,OAAO,IAAA,CAAK,KAAK,UAAA,CAAW,YAAA;AAAA,EAC9B;AAAA,EAEA,IAAW,KAAA,GAAQ;AACjB,IAAA,OAAO,KAAK,KAAA,KAAU,MAAA;AAAA,EACxB;AAAA,EAEQ,qBAAA,GAA8B;AACpC,IAAA,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,CAAC,EAAA,KAAO,IAAI,CAAA;AAAA,EAC7C;AAAA,EAEQ,gBAAgB,KAAA,EAAuB;AAC7C,IAAA,OACE,IAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,GAAA,CAAI,QAAA,EAAU,EAAE,QAAA,EAAU,KAAA,CAAM,QAAA,EAAU,CAAA,EACjE,KAAA,IAAS,KAAA,CAAM,YAAA;AAAA,EAEvB;AAAA,EAEO,mBAAmB,YAAA,EAAiC;AACzD,IAAA,YAAA,CAAa,eAAe,IAAA,CAAK,YAAA;AAAA,EACnC;AAAA,EAEO,SAAS,KAAA,EAA0B;AACxC,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,IAAA,OAAW,EAAA,EAAI;AAC9C,MAAA,IAAI,KAAK,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,QAAA,GAAW,YAAA,EAAc;AACtD,QAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,eAAA,CAAgB,MAAS,CAAA;AACpD,QAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,MAC7B;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,eAAA,CAAgB,KAAK,CAAA;AAChD,MAAA,IAAA,CAAK,qBAAA,EAAsB;AAAA,IAC7B;AAEA,IAAA,IAAA,CAAK,KAAK,eAAA,EAAiB,KAAA;AAAA,MACzB,QAAA;AAAA,MACA,EAAE,KAAA,EAAM;AAAA,MACR,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA;AAAS,KAC5B;AAAA,EACF;AAAA,EAEO,KAAA,GAAc;AACnB,IAAA,IAAA,CAAK,SAAS,MAAS,CAAA;AAAA,EACzB;AAAA,EAEO,UAAU,EAAA,EAAyB;AACxC,IAAA,IAAA,CAAK,iBAAA,CAAkB,IAAI,EAAE,CAAA;AAAA,EAC/B;AACF;;;;"}
@@ -1,35 +1,41 @@
1
1
  "use client"
2
2
  /* */
3
- import z from 'zod';
4
-
5
3
  class Sorting {
6
- static storageSchema = z.object({
7
- direction: z.enum(["asc", "desc"]),
8
- property: z.string().or(z.number())
9
- }).optional();
10
4
  list;
11
5
  property;
12
6
  name;
13
7
  directionName;
14
8
  direction;
15
- defaultEnabled;
9
+ initialEnabled;
16
10
  customSortingFn;
11
+ autosave;
17
12
  constructor(list, shape) {
13
+ const {
14
+ property,
15
+ name,
16
+ directionName,
17
+ direction = "asc",
18
+ customSortingFn,
19
+ autosave = true
20
+ } = shape;
21
+ this.autosave = autosave;
18
22
  this.list = list;
19
- this.property = shape.property;
20
- this.name = shape.name;
21
- this.directionName = shape.directionName;
22
- this.direction = shape.direction ?? "asc";
23
- const storedDefaultEnabled = this.getStoredDefaultEnabled();
24
- this.defaultEnabled = shape.defaultEnabled === "hidden" ? "hidden" : storedDefaultEnabled ?? shape.defaultEnabled ?? false;
25
- this.customSortingFn = shape.customSortingFn;
23
+ this.property = property;
24
+ this.name = name;
25
+ this.directionName = directionName;
26
+ this.direction = direction;
27
+ this.customSortingFn = customSortingFn;
28
+ this.initialEnabled = this.getInitialEnabled(shape);
26
29
  }
27
- getStoredDefaultEnabled() {
28
- const storedSorting = this.list.getStoredSortingDefaultSetting();
29
- if (!storedSorting) {
30
- return void 0;
30
+ getInitialEnabled(shape) {
31
+ if (shape.defaultEnabled === "hidden") {
32
+ return false;
31
33
  }
32
- return storedSorting.property === this.property && storedSorting.direction === this.direction;
34
+ const storedSorting = this.list.settingsStorage?.get("sorting", {
35
+ autosave: this.autosave
36
+ });
37
+ const storedEnabled = storedSorting ? storedSorting.property === this.property && storedSorting.direction === this.direction : void 0;
38
+ return storedEnabled ?? shape.defaultEnabled ?? false;
33
39
  }
34
40
  updateTableColumnDef(def) {
35
41
  def.enableSorting = true;
@@ -52,7 +58,16 @@ class Sorting {
52
58
  }
53
59
  enable() {
54
60
  this.list.reactTable.getTableColumn(this.property).toggleSorting(this.direction === "desc", false);
55
- this.list.storeSortingSettings(this);
61
+ this.list.settingsStorage?.store(
62
+ "sorting",
63
+ {
64
+ property: this.property,
65
+ direction: this.direction
66
+ },
67
+ {
68
+ autosave: this.autosave
69
+ }
70
+ );
56
71
  }
57
72
  clear() {
58
73
  this.list.reactTable.getTableColumn(this.property).clearSorting();