@revolist/revogrid 4.9.13 → 4.9.17

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 (196) hide show
  1. package/dist/cjs/{column.drag.plugin-e636b5af.js → column.drag.plugin-9841e68f.js} +108 -188
  2. package/dist/cjs/column.drag.plugin-9841e68f.js.map +1 -0
  3. package/dist/cjs/{column.service-15c8352d.js → column.service-2471e4f3.js} +159 -25
  4. package/dist/cjs/column.service-2471e4f3.js.map +1 -0
  5. package/dist/cjs/{edit.utils-1172677c.js → edit.utils-eef92df0.js} +2 -2
  6. package/dist/cjs/{edit.utils-1172677c.js.map → edit.utils-eef92df0.js.map} +1 -1
  7. package/dist/cjs/{header-cell-renderer-375a879f.js → header-cell-renderer-751067c0.js} +14 -14
  8. package/dist/cjs/header-cell-renderer-751067c0.js.map +1 -0
  9. package/dist/cjs/{index-28b6fdfb.js → index-8bceed03.js} +1 -2
  10. package/dist/cjs/index-8bceed03.js.map +1 -0
  11. package/dist/cjs/index.cjs.js +19 -17
  12. package/dist/cjs/index.cjs.js.map +1 -1
  13. package/dist/cjs/{key.utils-c62ab1e1.js → key.utils-f548f37c.js} +2 -2
  14. package/dist/cjs/{key.utils-c62ab1e1.js.map → key.utils-f548f37c.js.map} +1 -1
  15. package/dist/cjs/loader.cjs.js +1 -1
  16. package/dist/cjs/revo-grid.cjs.entry.js +33 -94
  17. package/dist/cjs/revo-grid.cjs.entry.js.map +1 -1
  18. package/dist/cjs/revo-grid.cjs.js +1 -1
  19. package/dist/cjs/revogr-attribution_6.cjs.entry.js +6 -6
  20. package/dist/cjs/revogr-clipboard_3.cjs.entry.js +4 -4
  21. package/dist/cjs/revogr-data_4.cjs.entry.js +16 -15
  22. package/dist/cjs/revogr-data_4.cjs.entry.js.map +1 -1
  23. package/dist/cjs/revogr-filter-panel.cjs.entry.js +17 -10
  24. package/dist/cjs/revogr-filter-panel.cjs.entry.js.map +1 -1
  25. package/dist/cjs/{row-header-utils-22ffee54.js → row-header-utils-5d0d3fab.js} +2 -2
  26. package/dist/cjs/{row-header-utils-22ffee54.js.map → row-header-utils-5d0d3fab.js.map} +1 -1
  27. package/dist/cjs/{text-editor-91a9f5b5.js → text-editor-f066d388.js} +3 -3
  28. package/dist/cjs/{text-editor-91a9f5b5.js.map → text-editor-f066d388.js.map} +1 -1
  29. package/dist/cjs/{throttle-5da5df51.js → throttle-216690f1.js} +2 -2
  30. package/dist/cjs/{throttle-5da5df51.js.map → throttle-216690f1.js.map} +1 -1
  31. package/dist/collection/collection-manifest.json +2 -2
  32. package/dist/collection/components/data/cell-renderer.js +2 -2
  33. package/dist/collection/components/data/cell-renderer.js.map +1 -1
  34. package/dist/collection/components/data/column.service.js +22 -24
  35. package/dist/collection/components/data/column.service.js.map +1 -1
  36. package/dist/collection/components/data/revogr-data.js +7 -6
  37. package/dist/collection/components/data/revogr-data.js.map +1 -1
  38. package/dist/collection/components/header/header-cell-renderer.js +5 -4
  39. package/dist/collection/components/header/header-cell-renderer.js.map +1 -1
  40. package/dist/collection/components/header/header-renderer.js +2 -2
  41. package/dist/collection/components/header/header-renderer.js.map +1 -1
  42. package/dist/collection/components/header/resizable.directive.js.map +1 -1
  43. package/dist/collection/components/header/resizable.element.js +9 -10
  44. package/dist/collection/components/header/resizable.element.js.map +1 -1
  45. package/dist/collection/components/header/revogr-header.js +3 -3
  46. package/dist/collection/components/header/revogr-header.js.map +1 -1
  47. package/dist/collection/components/revoGrid/revo-grid.js +6 -6
  48. package/dist/collection/components/revoGrid/revo-grid.js.map +1 -1
  49. package/dist/collection/global/global.js +2 -2
  50. package/dist/collection/global/global.js.map +1 -1
  51. package/dist/collection/plugins/filter/{filter.service.js → filter.indexed.js} +18 -18
  52. package/dist/collection/plugins/filter/filter.indexed.js.map +1 -0
  53. package/dist/collection/plugins/filter/filter.panel.js +32 -46
  54. package/dist/collection/plugins/filter/filter.panel.js.map +1 -1
  55. package/dist/collection/plugins/filter/filter.plugin.js +86 -40
  56. package/dist/collection/plugins/filter/filter.plugin.js.map +1 -1
  57. package/dist/collection/plugins/filter/filter.types.js.map +1 -1
  58. package/dist/collection/plugins/wcag/index.js +7 -1
  59. package/dist/collection/plugins/wcag/index.js.map +1 -1
  60. package/dist/collection/serve/controller.js +1 -1
  61. package/dist/collection/serve/data.js +8 -0
  62. package/dist/collection/services/column.data.provider.js +6 -5
  63. package/dist/collection/services/column.data.provider.js.map +1 -1
  64. package/dist/collection/themeManager/theme.compact.js +1 -1
  65. package/dist/collection/themeManager/theme.compact.js.map +1 -1
  66. package/dist/collection/themeManager/theme.default.js +1 -1
  67. package/dist/collection/themeManager/theme.default.js.map +1 -1
  68. package/dist/collection/themeManager/theme.material.js +1 -1
  69. package/dist/collection/themeManager/theme.material.js.map +1 -1
  70. package/dist/collection/themeManager/theme.service.js +9 -9
  71. package/dist/collection/themeManager/theme.service.js.map +1 -1
  72. package/dist/collection/types/interfaces.js.map +1 -1
  73. package/dist/collection/utils/column.utils.js +10 -0
  74. package/dist/collection/utils/column.utils.js.map +1 -1
  75. package/dist/esm/{column.drag.plugin-30dc4e24.js → column.drag.plugin-c9787a50.js} +107 -181
  76. package/dist/esm/column.drag.plugin-c9787a50.js.map +1 -0
  77. package/dist/esm/{column.service-414e9cba.js → column.service-a6682d9d.js} +153 -26
  78. package/dist/esm/column.service-a6682d9d.js.map +1 -0
  79. package/dist/esm/{edit.utils-0666e5bd.js → edit.utils-c358c970.js} +2 -2
  80. package/dist/esm/{edit.utils-0666e5bd.js.map → edit.utils-c358c970.js.map} +1 -1
  81. package/dist/esm/{header-cell-renderer-ca570fcf.js → header-cell-renderer-52d9d6ba.js} +14 -14
  82. package/dist/esm/header-cell-renderer-52d9d6ba.js.map +1 -0
  83. package/dist/esm/{index-74b9801b.js → index-6c437a0d.js} +2 -2
  84. package/dist/esm/index-6c437a0d.js.map +1 -0
  85. package/dist/esm/index.js +7 -7
  86. package/dist/esm/{key.utils-d3df5db8.js → key.utils-5a827d12.js} +2 -2
  87. package/dist/esm/{key.utils-d3df5db8.js.map → key.utils-5a827d12.js.map} +1 -1
  88. package/dist/esm/loader.js +1 -1
  89. package/dist/esm/revo-grid.entry.js +26 -87
  90. package/dist/esm/revo-grid.entry.js.map +1 -1
  91. package/dist/esm/revo-grid.js +1 -1
  92. package/dist/esm/revogr-attribution_6.entry.js +6 -6
  93. package/dist/esm/revogr-clipboard_3.entry.js +4 -4
  94. package/dist/esm/revogr-data_4.entry.js +16 -15
  95. package/dist/esm/revogr-data_4.entry.js.map +1 -1
  96. package/dist/esm/revogr-filter-panel.entry.js +17 -10
  97. package/dist/esm/revogr-filter-panel.entry.js.map +1 -1
  98. package/dist/esm/{row-header-utils-c7e3e2d5.js → row-header-utils-f5b04d1a.js} +2 -2
  99. package/dist/esm/{row-header-utils-c7e3e2d5.js.map → row-header-utils-f5b04d1a.js.map} +1 -1
  100. package/dist/esm/{text-editor-96d69516.js → text-editor-79a617b5.js} +3 -3
  101. package/dist/esm/{text-editor-96d69516.js.map → text-editor-79a617b5.js.map} +1 -1
  102. package/dist/esm/{throttle-262c3ed2.js → throttle-b94844de.js} +2 -2
  103. package/dist/esm/{throttle-262c3ed2.js.map → throttle-b94844de.js.map} +1 -1
  104. package/dist/revo-grid/column.drag.plugin-c9787a50.js +5 -0
  105. package/dist/revo-grid/column.drag.plugin-c9787a50.js.map +1 -0
  106. package/dist/revo-grid/column.service-a6682d9d.js +5 -0
  107. package/dist/revo-grid/column.service-a6682d9d.js.map +1 -0
  108. package/dist/revo-grid/{edit.utils-0666e5bd.js → edit.utils-c358c970.js} +2 -2
  109. package/dist/revo-grid/{header-cell-renderer-ca570fcf.js → header-cell-renderer-52d9d6ba.js} +2 -2
  110. package/dist/revo-grid/header-cell-renderer-52d9d6ba.js.map +1 -0
  111. package/dist/revo-grid/{index-74b9801b.js → index-6c437a0d.js} +2 -2
  112. package/dist/revo-grid/index.esm.js +1 -1
  113. package/dist/revo-grid/{key.utils-d3df5db8.js → key.utils-5a827d12.js} +2 -2
  114. package/dist/revo-grid/revo-grid.entry.js +1 -1
  115. package/dist/revo-grid/revo-grid.entry.js.map +1 -1
  116. package/dist/revo-grid/revo-grid.esm.js +1 -1
  117. package/dist/revo-grid/revo-grid.esm.js.map +1 -1
  118. package/dist/revo-grid/revogr-attribution_6.entry.js +1 -1
  119. package/dist/revo-grid/revogr-clipboard_3.entry.js +1 -1
  120. package/dist/revo-grid/revogr-data_4.entry.js +1 -1
  121. package/dist/revo-grid/revogr-data_4.entry.js.map +1 -1
  122. package/dist/revo-grid/revogr-filter-panel.entry.js +1 -1
  123. package/dist/revo-grid/revogr-filter-panel.entry.js.map +1 -1
  124. package/dist/revo-grid/{row-header-utils-c7e3e2d5.js → row-header-utils-f5b04d1a.js} +2 -2
  125. package/dist/revo-grid/{text-editor-96d69516.js → text-editor-79a617b5.js} +2 -2
  126. package/dist/revo-grid/{throttle-262c3ed2.js → throttle-b94844de.js} +2 -2
  127. package/dist/types/components/data/column.service.d.ts +1 -2
  128. package/dist/types/components/header/header-cell-renderer.d.ts +7 -9
  129. package/dist/types/components/header/header-renderer.d.ts +2 -3
  130. package/dist/types/components/header/resizable.directive.d.ts +0 -1
  131. package/dist/types/components/header/resizable.element.d.ts +3 -2
  132. package/dist/types/components/revoGrid/revo-grid.d.ts +1 -1
  133. package/dist/types/components.d.ts +2 -8
  134. package/dist/types/plugins/filter/{filter.service.d.ts → filter.indexed.d.ts} +2 -2
  135. package/dist/types/plugins/filter/filter.panel.d.ts +3 -27
  136. package/dist/types/plugins/filter/filter.plugin.d.ts +14 -47
  137. package/dist/types/plugins/filter/filter.types.d.ts +86 -1
  138. package/dist/types/services/column.data.provider.d.ts +2 -1
  139. package/dist/types/themeManager/theme.compact.d.ts +1 -1
  140. package/dist/types/themeManager/theme.default.d.ts +1 -1
  141. package/dist/types/themeManager/theme.material.d.ts +1 -1
  142. package/dist/types/themeManager/theme.service.d.ts +2 -2
  143. package/dist/types/types/interfaces.d.ts +10 -12
  144. package/dist/types/utils/column.utils.d.ts +3 -1
  145. package/hydrate/index.js +786 -787
  146. package/hydrate/index.mjs +786 -787
  147. package/package.json +1 -1
  148. package/standalone/column.service.js +153 -25
  149. package/standalone/column.service.js.map +1 -1
  150. package/standalone/dimension.helpers.js +2 -216
  151. package/standalone/dimension.helpers.js.map +1 -1
  152. package/standalone/index.js +7 -6
  153. package/standalone/index.js.map +1 -1
  154. package/standalone/index2.js +2 -84
  155. package/standalone/index2.js.map +1 -1
  156. package/standalone/platform.js +89 -0
  157. package/standalone/platform.js.map +1 -0
  158. package/standalone/{data.store.js → reduce.js} +252 -38
  159. package/standalone/reduce.js.map +1 -0
  160. package/standalone/revo-grid.js +127 -261
  161. package/standalone/revo-grid.js.map +1 -1
  162. package/standalone/revogr-data2.js +10 -8
  163. package/standalone/revogr-data2.js.map +1 -1
  164. package/standalone/revogr-edit2.js +2 -1
  165. package/standalone/revogr-edit2.js.map +1 -1
  166. package/standalone/revogr-filter-panel.js +17 -11
  167. package/standalone/revogr-filter-panel.js.map +1 -1
  168. package/standalone/revogr-focus2.js +1 -1
  169. package/standalone/revogr-header2.js +20 -20
  170. package/standalone/revogr-header2.js.map +1 -1
  171. package/standalone/revogr-order-editor2.js +1 -1
  172. package/standalone/revogr-overlay-selection2.js +3 -2
  173. package/standalone/revogr-overlay-selection2.js.map +1 -1
  174. package/standalone/revogr-row-headers2.js +1 -1
  175. package/standalone/selection.utils.js +1 -1
  176. package/dist/cjs/column.drag.plugin-e636b5af.js.map +0 -1
  177. package/dist/cjs/column.service-15c8352d.js.map +0 -1
  178. package/dist/cjs/header-cell-renderer-375a879f.js.map +0 -1
  179. package/dist/cjs/index-28b6fdfb.js.map +0 -1
  180. package/dist/collection/plugins/filter/filter.service.js.map +0 -1
  181. package/dist/esm/column.drag.plugin-30dc4e24.js.map +0 -1
  182. package/dist/esm/column.service-414e9cba.js.map +0 -1
  183. package/dist/esm/header-cell-renderer-ca570fcf.js.map +0 -1
  184. package/dist/esm/index-74b9801b.js.map +0 -1
  185. package/dist/revo-grid/column.drag.plugin-30dc4e24.js +0 -5
  186. package/dist/revo-grid/column.drag.plugin-30dc4e24.js.map +0 -1
  187. package/dist/revo-grid/column.service-414e9cba.js +0 -5
  188. package/dist/revo-grid/column.service-414e9cba.js.map +0 -1
  189. package/dist/revo-grid/header-cell-renderer-ca570fcf.js.map +0 -1
  190. package/standalone/data.store.js.map +0 -1
  191. /package/dist/revo-grid/{edit.utils-0666e5bd.js.map → edit.utils-c358c970.js.map} +0 -0
  192. /package/dist/revo-grid/{index-74b9801b.js.map → index-6c437a0d.js.map} +0 -0
  193. /package/dist/revo-grid/{key.utils-d3df5db8.js.map → key.utils-5a827d12.js.map} +0 -0
  194. /package/dist/revo-grid/{row-header-utils-c7e3e2d5.js.map → row-header-utils-f5b04d1a.js.map} +0 -0
  195. /package/dist/revo-grid/{text-editor-96d69516.js.map → text-editor-79a617b5.js.map} +0 -0
  196. /package/dist/revo-grid/{throttle-262c3ed2.js.map → throttle-b94844de.js.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  /*!
2
2
  * Built by Revolist OU ❤️
3
3
  */
4
- import { h, Host } from "@stencil/core";
4
+ import { h, Host, } from "@stencil/core";
5
+ import debounce from "lodash/debounce";
5
6
  import { AndOrButton, isFilterBtn, TrashButton } from "./filter.button";
6
7
  import "../../utils/closest.polifill";
7
- import debounce from "lodash/debounce";
8
8
  const defaultType = 'none';
9
9
  const FILTER_LIST_CLASS = 'multi-filter-list';
10
10
  const FILTER_LIST_CLASS_ACTION = 'multi-filter-list-action';
@@ -37,7 +37,6 @@ export class FilterPanel {
37
37
  this.currentFilterType = defaultType;
38
38
  this.changes = undefined;
39
39
  this.filterItems = {};
40
- this.filterTypes = {};
41
40
  this.filterNames = {};
42
41
  this.filterEntities = {};
43
42
  this.filterCaptions = undefined;
@@ -63,7 +62,9 @@ export class FilterPanel {
63
62
  }
64
63
  this.currentFilterId = -1;
65
64
  const isOutside = !path.includes(this.element);
66
- if (e.target instanceof HTMLElement && isOutside && !isFilterBtn(e.target)) {
65
+ if (e.target instanceof HTMLElement &&
66
+ isOutside &&
67
+ !isFilterBtn(e.target)) {
67
68
  this.changes = undefined;
68
69
  }
69
70
  }
@@ -87,15 +88,19 @@ export class FilterPanel {
87
88
  }
88
89
  }
89
90
  renderSelectOptions(type, isDefaultTypeRemoved = false) {
90
- var _a;
91
+ if (!this.changes) {
92
+ return;
93
+ }
91
94
  const options = [];
92
- const prop = (_a = this.changes) === null || _a === void 0 ? void 0 : _a.prop;
95
+ const prop = this.changes.prop;
93
96
  if (!isDefaultTypeRemoved) {
94
97
  const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
95
- options.push(h("option", { selected: this.currentFilterType === defaultType, value: defaultType }, prop && this.filterItems[prop] && this.filterItems[prop].length > 0 ? capts.add : this.filterNames[defaultType]));
98
+ options.push(h("option", { selected: this.currentFilterType === defaultType, value: defaultType }, prop && this.filterItems[prop] && this.filterItems[prop].length > 0
99
+ ? capts.add
100
+ : this.filterNames[defaultType]));
96
101
  }
97
- for (let gIndex in this.filterTypes) {
98
- options.push(...this.filterTypes[gIndex].map(k => (h("option", { value: k, selected: type === k }, this.filterNames[k]))));
102
+ for (let gIndex in this.changes.filterTypes) {
103
+ options.push(...this.changes.filterTypes[gIndex].map(k => (h("option", { value: k, selected: type === k }, this.filterNames[k]))));
99
104
  options.push(h("option", { disabled: true }));
100
105
  }
101
106
  return options;
@@ -146,8 +151,10 @@ export class FilterPanel {
146
151
  top: `${this.changes.y}px`,
147
152
  };
148
153
  const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);
149
- return (h(Host, { style: style, ref: (el) => { var _a; ((_a = this.changes) === null || _a === void 0 ? void 0 : _a.autoCorrect) && this.autoCorrect(el); } }, h("label", null, capts.title), h("div", { class: "filter-holder" }, this.getFilterItemsList()), h("div", { class: "add-filter" }, h("select", { id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType))), h("div", { class: "filter-actions" }, this.disableDynamicFiltering &&
150
- h("button", { id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save), h("button", { id: "revo-button-reset", "aria-label": "reset", class: "revo-button light", onClick: () => this.onReset() }, capts.reset), h("button", { id: "revo-button-cancel", "aria-label": "cancel", class: "revo-button light", onClick: () => this.onCancel() }, capts.cancel))));
154
+ return (h(Host, { style: style, ref: el => {
155
+ var _a;
156
+ ((_a = this.changes) === null || _a === void 0 ? void 0 : _a.autoCorrect) && this.autoCorrect(el);
157
+ } }, h("label", null, capts.title), h("div", { class: "filter-holder" }, this.getFilterItemsList()), h("div", { class: "add-filter" }, h("select", { id: FILTER_ID, class: "select-css", onChange: e => this.onAddNewFilter(e) }, this.renderSelectOptions(this.currentFilterType))), h("div", { class: "filter-actions" }, this.disableDynamicFiltering && (h("button", { id: "revo-button-save", "aria-label": "save", class: "revo-button green", onClick: () => this.onSave() }, capts.save)), h("button", { id: "revo-button-reset", "aria-label": "reset", class: "revo-button light", onClick: () => this.onReset() }, capts.reset), h("button", { id: "revo-button-cancel", "aria-label": "cancel", class: "revo-button light", onClick: () => this.onCancel() }, capts.cancel))));
151
158
  }
152
159
  onFilterTypeChange(e, prop, index) {
153
160
  if (!(e.target instanceof HTMLSelectElement)) {
@@ -299,30 +306,9 @@ export class FilterPanel {
299
306
  "resolved": "{ [prop: string]: FilterData[]; }",
300
307
  "references": {
301
308
  "MultiFilterItem": {
302
- "location": "local",
303
- "path": "/home/runner/work/revogrid/revogrid/src/plugins/filter/filter.panel.tsx",
304
- "id": "src/plugins/filter/filter.panel.tsx::MultiFilterItem"
305
- }
306
- }
307
- },
308
- "required": false,
309
- "optional": false,
310
- "docs": {
311
- "tags": [],
312
- "text": ""
313
- },
314
- "defaultValue": "{}"
315
- },
316
- "filterTypes": {
317
- "type": "unknown",
318
- "mutable": false,
319
- "complexType": {
320
- "original": "Record<string, string[]>",
321
- "resolved": "{ [x: string]: string[]; }",
322
- "references": {
323
- "Record": {
324
- "location": "global",
325
- "id": "global::Record"
309
+ "location": "import",
310
+ "path": "./filter.types",
311
+ "id": "src/plugins/filter/filter.types.ts::MultiFilterItem"
326
312
  }
327
313
  }
328
314
  },
@@ -390,8 +376,8 @@ export class FilterPanel {
390
376
  "references": {
391
377
  "FilterCaptions": {
392
378
  "location": "import",
393
- "path": "./filter.plugin",
394
- "id": "src/plugins/filter/filter.plugin.tsx::FilterCaptions"
379
+ "path": "./filter.types",
380
+ "id": "src/plugins/filter/filter.types.ts::FilterCaptions"
395
381
  }
396
382
  }
397
383
  },
@@ -447,9 +433,9 @@ export class FilterPanel {
447
433
  "resolved": "{ [prop: string]: FilterData[]; }",
448
434
  "references": {
449
435
  "MultiFilterItem": {
450
- "location": "local",
451
- "path": "/home/runner/work/revogrid/revogrid/src/plugins/filter/filter.panel.tsx",
452
- "id": "src/plugins/filter/filter.panel.tsx::MultiFilterItem"
436
+ "location": "import",
437
+ "path": "./filter.types",
438
+ "id": "src/plugins/filter/filter.types.ts::MultiFilterItem"
453
439
  }
454
440
  }
455
441
  }
@@ -471,9 +457,9 @@ export class FilterPanel {
471
457
  "id": "global::Promise"
472
458
  },
473
459
  "ShowData": {
474
- "location": "local",
475
- "path": "/home/runner/work/revogrid/revogrid/src/plugins/filter/filter.panel.tsx",
476
- "id": "src/plugins/filter/filter.panel.tsx::ShowData"
460
+ "location": "import",
461
+ "path": "./filter.types",
462
+ "id": "src/plugins/filter/filter.types.ts::ShowData"
477
463
  }
478
464
  },
479
465
  "return": "Promise<void>"
@@ -493,9 +479,9 @@ export class FilterPanel {
493
479
  "id": "global::Promise"
494
480
  },
495
481
  "ShowData": {
496
- "location": "local",
497
- "path": "/home/runner/work/revogrid/revogrid/src/plugins/filter/filter.panel.tsx",
498
- "id": "src/plugins/filter/filter.panel.tsx::ShowData"
482
+ "location": "import",
483
+ "path": "./filter.types",
484
+ "id": "src/plugins/filter/filter.types.ts::ShowData"
499
485
  }
500
486
  },
501
487
  "return": "Promise<ShowData | undefined>"
@@ -1 +1 @@
1
- {"version":3,"file":"filter.panel.js","sourceRoot":"","sources":["../../../src/plugins/filter/filter.panel.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Event, EventEmitter, h, Host, Listen, Method, Prop, State, VNode, Element } from '@stencil/core';\nimport { FilterType } from './filter.service';\nimport { AndOrButton, isFilterBtn, TrashButton } from './filter.button';\nimport '../../utils/closest.polifill';\nimport { LogicFunction } from './filter.types';\nimport { FilterCaptions } from './filter.plugin';\nimport debounce from 'lodash/debounce';\nimport { ColumnProp } from '@type';\n\nexport type FilterItem = {\n // column id\n prop?: ColumnProp;\n // filter type definition\n type?: FilterType;\n // value for additional filtering, text value or some id\n value?: any;\n};\n\nexport type FilterData = {\n id: number;\n type: FilterType;\n value?: any;\n relation: 'and' | 'or';\n};\n\nexport type MultiFilterItem = {\n [prop: string]: FilterData[];\n};\n\nexport type ShowData = {\n x: number;\n y: number;\n /**\n * Auto correct position if it is out of document bounds\n */\n autoCorrect?: boolean;\n} & FilterItem;\n\nconst defaultType: FilterType = 'none';\n\nconst FILTER_LIST_CLASS = 'multi-filter-list';\nconst FILTER_LIST_CLASS_ACTION = 'multi-filter-list-action';\nconst FILTER_ID = 'add-filter';\n\n/**\n * Filter panel for editing filters\n */\n/**\n * @internal\n */\n@Component({\n tag: 'revogr-filter-panel',\n styleUrl: 'filter.style.scss',\n})\nexport class FilterPanel {\n private filterCaptionsInternal: FilterCaptions = {\n title: 'Filter by',\n save: 'Save',\n // drops the filter\n reset: 'Clear changes',\n cancel: 'Close',\n add: 'Add more condition...',\n placeholder: 'Enter value...',\n and: 'and',\n or: 'or',\n };\n\n @Element() element!: HTMLElement;\n @State() isFilterIdSet = false;\n @State() filterId = 0;\n @State() currentFilterId = -1;\n @State() currentFilterType: FilterType = defaultType;\n @State() changes: ShowData | undefined;\n @Prop() filterItems: MultiFilterItem = {};\n @Prop() filterTypes: Record<string, string[]> = {};\n @Prop() filterNames: Record<string, string> = {};\n @Prop() filterEntities: Record<string, LogicFunction> = {};\n @Prop() filterCaptions: FilterCaptions | undefined;\n @Prop() disableDynamicFiltering = false;\n @Event() filterChange: EventEmitter<MultiFilterItem>;\n @Listen('mousedown', { target: 'document' }) onMouseDown(e: MouseEvent) {\n // click on anything then select drops values to default\n if (!this.changes || e.defaultPrevented) {\n return;\n }\n const path = e.composedPath();\n const select = document.getElementById(FILTER_ID);\n if (select instanceof HTMLSelectElement) {\n // click on select should be skipped\n if (path.includes(select)) {\n return;\n }\n select.value = defaultType;\n }\n this.currentFilterType = defaultType;\n if (this.changes) {\n this.changes.type = defaultType;\n }\n this.currentFilterId = -1;\n\n const isOutside = !path.includes(this.element);\n\n if (e.target instanceof HTMLElement && isOutside && !isFilterBtn(e.target)) {\n this.changes = undefined;\n }\n }\n\n @Method() async show(newEntity?: ShowData) {\n this.changes = newEntity;\n if (this.changes) {\n this.changes.type = this.changes.type || defaultType;\n }\n }\n\n @Method() async getChanges() {\n return this.changes;\n }\n\n componentWillRender() {\n if (!this.isFilterIdSet) {\n this.isFilterIdSet = true;\n const filterItems = Object.keys(this.filterItems);\n for (const prop of filterItems) {\n // we set the proper filterId so there won't be any conflict when removing filters\n this.filterId += this.filterItems[prop].length;\n }\n }\n }\n\n renderSelectOptions(type: FilterType, isDefaultTypeRemoved = false) {\n const options: VNode[] = [];\n const prop = this.changes?.prop;\n\n if (!isDefaultTypeRemoved) {\n const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);\n\n options.push(\n <option selected={this.currentFilterType === defaultType} value={defaultType}>\n {prop && this.filterItems[prop] && this.filterItems[prop].length > 0 ? capts.add : this.filterNames[defaultType]}\n </option>,\n );\n }\n\n for (let gIndex in this.filterTypes) {\n options.push(\n ...this.filterTypes[gIndex].map(k => (\n <option value={k} selected={type === k}>\n {this.filterNames[k]}\n </option>\n )),\n );\n options.push(<option disabled></option>);\n }\n return options;\n }\n\n renderExtra(prop: ColumnProp, index: number) {\n const currentFilter = this.filterItems[prop];\n\n if (!currentFilter) return '';\n\n if (this.filterEntities[currentFilter[index].type].extra !== 'input') return '';\n\n const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);\n\n return (\n <input\n id={`filter-input-${currentFilter[index].id}`}\n placeholder={capts.placeholder}\n type=\"text\"\n value={currentFilter[index].value}\n onInput={this.onUserInput.bind(this, index, prop)}\n onKeyDown={e => this.onKeyDown(e)}\n />\n );\n }\n\n getFilterItemsList() {\n const prop = this.changes?.prop;\n if (!(prop || prop === 0)) return '';\n\n const propFilters = this.filterItems[prop] || [];\n const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);\n return (\n <div key={this.filterId}>\n {propFilters.map((d, index) => {\n let andOrButton;\n\n // hide toggle button if there is only one filter and the last one\n if (index !== this.filterItems[prop].length - 1) {\n andOrButton = (\n <div onClick={() => this.toggleFilterAndOr(d.id)}>\n <AndOrButton text={d.relation === 'and' ? capts.and : capts.or} />\n </div>\n );\n }\n\n return (\n <div key={d.id} class={FILTER_LIST_CLASS}>\n <div class={{ 'select-input': true }}>\n <select class=\"select-css select-filter\" onChange={e => this.onFilterTypeChange(e, prop, index)}>\n {this.renderSelectOptions(this.filterItems[prop][index].type, true)}\n </select>\n <div class={FILTER_LIST_CLASS_ACTION}>{andOrButton}</div>\n <div onClick={() => this.onRemoveFilter(d.id)}>\n <TrashButton />\n </div>\n </div>\n <div>{this.renderExtra(prop, index)}</div>\n </div>\n );\n })}\n\n {propFilters.length > 0 ? <div class=\"add-filter-divider\"/> : ''}\n </div>\n );\n }\n\n private autoCorrect(el?: HTMLElement | null) {\n if (!el) {\n return;\n }\n const pos = el.getBoundingClientRect();\n const maxLeft = window.innerWidth - pos.width;\n\n if (pos.left > maxLeft && el.offsetLeft) {\n el.style.left = `${maxLeft - (el.parentElement?.getBoundingClientRect().left ?? 0)}px`;\n }\n }\n \n render() {\n if (!this.changes) {\n return <Host style={{ display: 'none' }}></Host>;\n }\n const style = {\n display: 'block',\n left: `${this.changes.x}px`,\n top: `${this.changes.y}px`,\n };\n\n const capts = Object.assign(this.filterCaptionsInternal, this.filterCaptions);\n\n return (\n <Host style={style} ref={(el) => { this.changes?.autoCorrect && this.autoCorrect(el) }}>\n <label>{capts.title}</label>\n <div class=\"filter-holder\">{this.getFilterItemsList()}</div>\n\n <div class=\"add-filter\">\n <select id={FILTER_ID} class=\"select-css\" onChange={e => this.onAddNewFilter(e)}>\n {this.renderSelectOptions(this.currentFilterType)}\n </select>\n </div>\n <div class=\"filter-actions\">\n {this.disableDynamicFiltering &&\n <button id=\"revo-button-save\" aria-label=\"save\" class=\"revo-button green\" onClick={() => this.onSave()}>\n {capts.save}\n </button>\n }\n <button id=\"revo-button-reset\" aria-label=\"reset\" class=\"revo-button light\" onClick={() => this.onReset()}>\n {capts.reset}\n </button>\n <button id=\"revo-button-cancel\" aria-label=\"cancel\" class=\"revo-button light\" onClick={() => this.onCancel()}>\n {capts.cancel}\n </button>\n </div>\n </Host>\n );\n }\n\n private onFilterTypeChange(e: Event, prop: ColumnProp, index: number) {\n if (!(e.target instanceof HTMLSelectElement)) {\n return;\n }\n this.filterItems[prop][index].type = e.target.value as FilterType;\n\n // this re-renders the input to know if we need extra input\n this.filterId++;\n\n // adding setTimeout will wait for the next tick DOM update then focus on input\n setTimeout(() => {\n const input = document.getElementById('filter-input-' + this.filterItems[prop][index].id);\n if (input instanceof HTMLInputElement) {\n input.focus();\n }\n }, 0);\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private debouncedApplyFilter = debounce(() => {\n this.filterChange.emit(this.filterItems);\n }, 400);\n\n private onAddNewFilter(e: Event) {\n const el = e.target as HTMLSelectElement;\n this.currentFilterType = el.value as FilterType;\n this.addNewFilterToProp();\n\n // reset value after adding new filter\n const select = document.getElementById('add-filter') as HTMLSelectElement;\n if (select) {\n select.value = defaultType;\n this.currentFilterType = defaultType;\n }\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private addNewFilterToProp() {\n const prop = this.changes?.prop;\n if (!(prop || prop === 0)) return;\n\n if (!this.filterItems[prop]) {\n this.filterItems[prop] = [];\n }\n\n if (this.currentFilterType === 'none') return;\n\n this.filterId++;\n this.currentFilterId = this.filterId;\n\n this.filterItems[prop].push({\n id: this.currentFilterId,\n type: this.currentFilterType,\n value: '',\n relation: 'and',\n });\n\n // adding setTimeout will wait for the next tick DOM update then focus on input\n setTimeout(() => {\n const input = document.getElementById('filter-input-' + this.currentFilterId) as HTMLInputElement;\n if (input) input.focus();\n }, 0);\n }\n\n private onUserInput(index: number, prop: ColumnProp, event: Event) {\n // update the value of the filter item\n this.filterItems[prop][index].value = (event.target as HTMLInputElement).value;\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private onKeyDown(e: KeyboardEvent) {\n if (e.key.toLowerCase() === 'enter') {\n const select = document.getElementById('add-filter') as HTMLSelectElement;\n if (select) {\n select.value = defaultType;\n this.currentFilterType = defaultType;\n this.addNewFilterToProp();\n select.focus();\n }\n return;\n }\n // keep event local, don't escalate farther to dom\n e.stopPropagation();\n }\n\n private onSave() {\n this.filterChange.emit(this.filterItems);\n }\n\n private onCancel() {\n this.changes = undefined;\n }\n\n private onReset() {\n this.assertChanges();\n\n delete this.filterItems[this.changes?.prop ?? ''];\n\n // this updates the DOM which is used by getFilterItemsList() key\n this.filterId++;\n\n this.filterChange.emit(this.filterItems);\n }\n\n private onRemoveFilter(id: number) {\n this.assertChanges();\n\n // this is for reactivity issues for getFilterItemsList()\n this.filterId++;\n\n const prop = this.changes?.prop;\n\n const items = this.filterItems[prop ?? ''];\n if (!items) return;\n\n const index = items.findIndex(d => d.id === id);\n if (index === -1) return;\n items.splice(index, 1);\n\n // let's remove the prop if no more filters so the filter icon will be removed\n if (items.length === 0) delete this.filterItems[prop ?? ''];\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private toggleFilterAndOr(id: number) {\n this.assertChanges();\n\n // this is for reactivity issues for getFilterItemsList()\n this.filterId++;\n\n const prop = this.changes?.prop;\n\n const items = this.filterItems[prop ?? ''];\n if (!items) return;\n\n const index = items.findIndex(d => d.id === id);\n if (index === -1) return;\n\n items[index].relation = items[index].relation === 'and' ? 'or' : 'and';\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private assertChanges() {\n if (!this.changes) {\n throw new Error('Changes required per edit');\n }\n }\n}\n"]}
1
+ {"version":3,"file":"filter.panel.js","sourceRoot":"","sources":["../../../src/plugins/filter/filter.panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,CAAC,EACD,SAAS,EACT,KAAK,EAEL,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EAEL,OAAO,GACR,MAAM,eAAe,CAAC;AACvB,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,8BAA8B,CAAC;AAMtC,MAAM,WAAW,GAAe,MAAM,CAAC;AAEvC,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAC9C,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAC5D,MAAM,SAAS,GAAG,YAAY,CAAC;AAE/B;;GAEG;AACH;;GAEG;AAKH,MAAM,OAAO,WAAW;;QACd,2BAAsB,GAAmB;YAC/C,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,MAAM;YACZ,mBAAmB;YACnB,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,OAAO;YACf,GAAG,EAAE,uBAAuB;YAC5B,WAAW,EAAE,gBAAgB;YAC7B,GAAG,EAAE,KAAK;YACV,EAAE,EAAE,IAAI;SACT,CAAC;QA0RM,yBAAoB,GAAG,QAAQ,CAAC,GAAG,EAAE;YAC3C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC,EAAE,GAAG,CAAC,CAAC;6BAzRiB,KAAK;wBACV,CAAC;+BACM,CAAC,CAAC;iCACY,WAAW;;2BAEb,EAAE;2BACK,EAAE;8BACQ,EAAE;;uCAExB,KAAK;;IAEM,WAAW,CAAC,CAAa;QACpE,wDAAwD;QACxD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACxC,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,MAAM,YAAY,iBAAiB,EAAE,CAAC;YACxC,oCAAoC;YACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;QACrC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAE1B,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/C,IACE,CAAC,CAAC,MAAM,YAAY,WAAW;YAC/B,SAAS;YACT,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,EACtB,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC3B,CAAC;IACH,CAAC;IAES,KAAK,CAAC,IAAI,CAAC,SAAoB;QACvC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QACvD,CAAC;IACH,CAAC;IAES,KAAK,CAAC,UAAU;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,kFAAkF;gBAClF,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB,CAAC,IAAgB,EAAE,oBAAoB,GAAG,KAAK;QAChE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAY,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAE/B,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACzB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,cAAc,CACpB,CAAC;YAEF,OAAO,CAAC,IAAI,CACV,cACE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,KAAK,WAAW,EAChD,KAAK,EAAE,WAAW,IAEjB,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;gBAClE,CAAC,CAAC,KAAK,CAAC,GAAG;gBACX,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAC1B,CACV,CAAC;QACJ,CAAC;QAED,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CACV,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3C,cAAQ,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,KAAK,CAAC,IACnC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CACb,CACV,CAAC,CACH,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,cAAQ,QAAQ,SAAU,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,IAAgB,EAAE,KAAa;QACzC,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,aAAa;YAAE,OAAO,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;YAClE,OAAO,EAAE,CAAC;QAEZ,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACzB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,cAAc,CACpB,CAAC;QAEF,OAAO,CACL,aACE,EAAE,EAAE,gBAAgB,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAC7C,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,KAAK,EACjC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EACjD,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GACjC,CACH,CAAC;IACJ,CAAC;IAED,kBAAkB;;QAChB,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAErC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACzB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,cAAc,CACpB,CAAC;QACF,OAAO,CACL,WAAK,GAAG,EAAE,IAAI,CAAC,QAAQ;YACpB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBAC5B,IAAI,WAAW,CAAC;gBAEhB,kEAAkE;gBAClE,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChD,WAAW,GAAG,CACZ,WAAK,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9C,EAAC,WAAW,IACV,IAAI,EAAE,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GACjD,CACE,CACP,CAAC;gBACJ,CAAC;gBAED,OAAO,CACL,WAAK,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,iBAAiB;oBACtC,WAAK,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE;wBAClC,cACE,KAAK,EAAC,0BAA0B,EAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAErD,IAAI,CAAC,mBAAmB,CACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAClC,IAAI,CACL,CACM;wBACT,WAAK,KAAK,EAAE,wBAAwB,IAAG,WAAW,CAAO;wBACzD,WAAK,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC3C,EAAC,WAAW,OAAG,CACX,CACF;oBACN,eAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAO,CACtC,CACP,CAAC;YACJ,CAAC,CAAC;YAED,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAK,KAAK,EAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,EAAE,CAC7D,CACP,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,EAAuB;;QACzC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO;QACT,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC;QAE9C,IAAI,GAAG,CAAC,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YACxC,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,GAAG,CAAC,MAAA,MAAA,EAAE,CAAC,aAAa,0CAAE,qBAAqB,GAAG,IAAI,mCAAI,CAAC,CAAC,IAAI,CAAC;QACzF,CAAC;IACH,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,EAAC,IAAI,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAS,CAAC;QACnD,CAAC;QACD,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI;YAC3B,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI;SAC3B,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CACzB,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,cAAc,CACpB,CAAC;QAEF,OAAO,CACL,EAAC,IAAI,IACH,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,EAAE,CAAC,EAAE;;gBACR,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,WAAW,KAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;YAED,iBAAQ,KAAK,CAAC,KAAK,CAAS;YAC5B,WAAK,KAAK,EAAC,eAAe,IAAE,IAAI,CAAC,kBAAkB,EAAE,CAAO;YAE5D,WAAK,KAAK,EAAC,YAAY;gBACrB,cACE,EAAE,EAAE,SAAS,EACb,KAAK,EAAC,YAAY,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAEpC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAC1C,CACL;YACN,WAAK,KAAK,EAAC,gBAAgB;gBACxB,IAAI,CAAC,uBAAuB,IAAI,CAC/B,cACE,EAAE,EAAC,kBAAkB,gBACV,MAAM,EACjB,KAAK,EAAC,mBAAmB,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAE3B,KAAK,CAAC,IAAI,CACJ,CACV;gBACD,cACE,EAAE,EAAC,mBAAmB,gBACX,OAAO,EAClB,KAAK,EAAC,mBAAmB,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAE5B,KAAK,CAAC,KAAK,CACL;gBACT,cACE,EAAE,EAAC,oBAAoB,gBACZ,QAAQ,EACnB,KAAK,EAAC,mBAAmB,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,IAE7B,KAAK,CAAC,MAAM,CACN,CACL,CACD,CACR,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,CAAQ,EAAE,IAAgB,EAAE,KAAa;QAClE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,YAAY,iBAAiB,CAAC,EAAE,CAAC;YAC7C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAmB,CAAC;QAElE,2DAA2D;QAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,+EAA+E;QAC/E,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CACnC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CACnD,CAAC;YACF,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACtC,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;QACH,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,IAAI,CAAC,IAAI,CAAC,uBAAuB;YAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACjE,CAAC;IAMO,cAAc,CAAC,CAAQ;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,MAA2B,CAAC;QACzC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,KAAmB,CAAC;QAChD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,sCAAsC;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAsB,CAAC;QAC1E,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,uBAAuB;YAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACjE,CAAC;IAEO,kBAAkB;;QACxB,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC;YAAE,OAAO;QAElC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,KAAK,MAAM;YAAE,OAAO;QAE9C,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;QAErC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAC1B,EAAE,EAAE,IAAI,CAAC,eAAe;YACxB,IAAI,EAAE,IAAI,CAAC,iBAAiB;YAC5B,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,+EAA+E;QAC/E,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CACnC,eAAe,GAAG,IAAI,CAAC,eAAe,CACnB,CAAC;YACtB,IAAI,KAAK;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,CAAC;IAEO,WAAW,CAAC,KAAa,EAAE,IAAgB,EAAE,KAAY;QAC/D,sCAAsC;QACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GACjC,KAAK,CAAC,MACP,CAAC,KAAK,CAAC;QAER,IAAI,CAAC,IAAI,CAAC,uBAAuB;YAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACjE,CAAC;IAEO,SAAS,CAAC,CAAgB;QAChC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAsB,CAAC;YAC1E,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;gBACrC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YACD,OAAO;QACT,CAAC;QACD,kDAAkD;QAClD,CAAC,CAAC,eAAe,EAAE,CAAC;IACtB,CAAC;IAEO,MAAM;QACZ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,CAAC;IAEO,OAAO;;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,mCAAI,EAAE,CAAC,CAAC;QAElD,iEAAiE;QACjE,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAEO,cAAc,CAAC,EAAU;;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,yDAAyD;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC;QAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO;QACzB,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEvB,8EAA8E;QAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,IAAI,CAAC,uBAAuB;YAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACjE,CAAC;IAEO,iBAAiB,CAAC,EAAU;;QAClC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,yDAAyD;QACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC;QAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO;QAEzB,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,IAAI,CAAC,IAAI,CAAC,uBAAuB;YAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACjE,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n h,\n Component,\n Event,\n EventEmitter,\n Host,\n Listen,\n Method,\n Prop,\n State,\n VNode,\n Element,\n} from '@stencil/core';\nimport debounce from 'lodash/debounce';\n\nimport { AndOrButton, isFilterBtn, TrashButton } from './filter.button';\nimport '../../utils/closest.polifill';\nimport { FilterCaptions, LogicFunction, MultiFilterItem, ShowData } from './filter.types';\nimport { ColumnProp } from '@type';\nimport { FilterType } from './filter.indexed';\n\n\nconst defaultType: FilterType = 'none';\n\nconst FILTER_LIST_CLASS = 'multi-filter-list';\nconst FILTER_LIST_CLASS_ACTION = 'multi-filter-list-action';\nconst FILTER_ID = 'add-filter';\n\n/**\n * Filter panel for editing filters\n */\n/**\n * @internal\n */\n@Component({\n tag: 'revogr-filter-panel',\n styleUrl: 'filter.style.scss',\n})\nexport class FilterPanel {\n private filterCaptionsInternal: FilterCaptions = {\n title: 'Filter by',\n save: 'Save',\n // drops the filter\n reset: 'Clear changes',\n cancel: 'Close',\n add: 'Add more condition...',\n placeholder: 'Enter value...',\n and: 'and',\n or: 'or',\n };\n\n @Element() element!: HTMLElement;\n @State() isFilterIdSet = false;\n @State() filterId = 0;\n @State() currentFilterId = -1;\n @State() currentFilterType: FilterType = defaultType;\n @State() changes: ShowData | undefined;\n @Prop() filterItems: MultiFilterItem = {};\n @Prop() filterNames: Record<string, string> = {};\n @Prop() filterEntities: Record<string, LogicFunction> = {};\n @Prop() filterCaptions: FilterCaptions | undefined;\n @Prop() disableDynamicFiltering = false;\n @Event() filterChange: EventEmitter<MultiFilterItem>;\n @Listen('mousedown', { target: 'document' }) onMouseDown(e: MouseEvent) {\n // click on anything then select drops values to default\n if (!this.changes || e.defaultPrevented) {\n return;\n }\n const path = e.composedPath();\n const select = document.getElementById(FILTER_ID);\n if (select instanceof HTMLSelectElement) {\n // click on select should be skipped\n if (path.includes(select)) {\n return;\n }\n select.value = defaultType;\n }\n this.currentFilterType = defaultType;\n if (this.changes) {\n this.changes.type = defaultType;\n }\n this.currentFilterId = -1;\n\n const isOutside = !path.includes(this.element);\n\n if (\n e.target instanceof HTMLElement &&\n isOutside &&\n !isFilterBtn(e.target)\n ) {\n this.changes = undefined;\n }\n }\n\n @Method() async show(newEntity?: ShowData) {\n this.changes = newEntity;\n if (this.changes) {\n this.changes.type = this.changes.type || defaultType;\n }\n }\n\n @Method() async getChanges() {\n return this.changes;\n }\n\n componentWillRender() {\n if (!this.isFilterIdSet) {\n this.isFilterIdSet = true;\n const filterItems = Object.keys(this.filterItems);\n for (const prop of filterItems) {\n // we set the proper filterId so there won't be any conflict when removing filters\n this.filterId += this.filterItems[prop].length;\n }\n }\n }\n\n renderSelectOptions(type: FilterType, isDefaultTypeRemoved = false) {\n if (!this.changes) {\n return;\n }\n const options: VNode[] = [];\n const prop = this.changes.prop;\n\n if (!isDefaultTypeRemoved) {\n const capts = Object.assign(\n this.filterCaptionsInternal,\n this.filterCaptions,\n );\n\n options.push(\n <option\n selected={this.currentFilterType === defaultType}\n value={defaultType}\n >\n {prop && this.filterItems[prop] && this.filterItems[prop].length > 0\n ? capts.add\n : this.filterNames[defaultType]}\n </option>,\n );\n }\n\n for (let gIndex in this.changes.filterTypes) {\n options.push(\n ...this.changes.filterTypes[gIndex].map(k => (\n <option value={k} selected={type === k}>\n {this.filterNames[k]}\n </option>\n )),\n );\n options.push(<option disabled></option>);\n }\n return options;\n }\n\n renderExtra(prop: ColumnProp, index: number) {\n const currentFilter = this.filterItems[prop];\n\n if (!currentFilter) return '';\n\n if (this.filterEntities[currentFilter[index].type].extra !== 'input')\n return '';\n\n const capts = Object.assign(\n this.filterCaptionsInternal,\n this.filterCaptions,\n );\n\n return (\n <input\n id={`filter-input-${currentFilter[index].id}`}\n placeholder={capts.placeholder}\n type=\"text\"\n value={currentFilter[index].value}\n onInput={this.onUserInput.bind(this, index, prop)}\n onKeyDown={e => this.onKeyDown(e)}\n />\n );\n }\n\n getFilterItemsList() {\n const prop = this.changes?.prop;\n if (!(prop || prop === 0)) return '';\n\n const propFilters = this.filterItems[prop] || [];\n const capts = Object.assign(\n this.filterCaptionsInternal,\n this.filterCaptions,\n );\n return (\n <div key={this.filterId}>\n {propFilters.map((d, index) => {\n let andOrButton;\n\n // hide toggle button if there is only one filter and the last one\n if (index !== this.filterItems[prop].length - 1) {\n andOrButton = (\n <div onClick={() => this.toggleFilterAndOr(d.id)}>\n <AndOrButton\n text={d.relation === 'and' ? capts.and : capts.or}\n />\n </div>\n );\n }\n\n return (\n <div key={d.id} class={FILTER_LIST_CLASS}>\n <div class={{ 'select-input': true }}>\n <select\n class=\"select-css select-filter\"\n onChange={e => this.onFilterTypeChange(e, prop, index)}\n >\n {this.renderSelectOptions(\n this.filterItems[prop][index].type,\n true,\n )}\n </select>\n <div class={FILTER_LIST_CLASS_ACTION}>{andOrButton}</div>\n <div onClick={() => this.onRemoveFilter(d.id)}>\n <TrashButton />\n </div>\n </div>\n <div>{this.renderExtra(prop, index)}</div>\n </div>\n );\n })}\n\n {propFilters.length > 0 ? <div class=\"add-filter-divider\" /> : ''}\n </div>\n );\n }\n\n private autoCorrect(el?: HTMLElement | null) {\n if (!el) {\n return;\n }\n const pos = el.getBoundingClientRect();\n const maxLeft = window.innerWidth - pos.width;\n\n if (pos.left > maxLeft && el.offsetLeft) {\n el.style.left = `${maxLeft - (el.parentElement?.getBoundingClientRect().left ?? 0)}px`;\n }\n }\n\n render() {\n if (!this.changes) {\n return <Host style={{ display: 'none' }}></Host>;\n }\n const style = {\n display: 'block',\n left: `${this.changes.x}px`,\n top: `${this.changes.y}px`,\n };\n\n const capts = Object.assign(\n this.filterCaptionsInternal,\n this.filterCaptions,\n );\n\n return (\n <Host\n style={style}\n ref={el => {\n this.changes?.autoCorrect && this.autoCorrect(el);\n }}\n >\n <label>{capts.title}</label>\n <div class=\"filter-holder\">{this.getFilterItemsList()}</div>\n\n <div class=\"add-filter\">\n <select\n id={FILTER_ID}\n class=\"select-css\"\n onChange={e => this.onAddNewFilter(e)}\n >\n {this.renderSelectOptions(this.currentFilterType)}\n </select>\n </div>\n <div class=\"filter-actions\">\n {this.disableDynamicFiltering && (\n <button\n id=\"revo-button-save\"\n aria-label=\"save\"\n class=\"revo-button green\"\n onClick={() => this.onSave()}\n >\n {capts.save}\n </button>\n )}\n <button\n id=\"revo-button-reset\"\n aria-label=\"reset\"\n class=\"revo-button light\"\n onClick={() => this.onReset()}\n >\n {capts.reset}\n </button>\n <button\n id=\"revo-button-cancel\"\n aria-label=\"cancel\"\n class=\"revo-button light\"\n onClick={() => this.onCancel()}\n >\n {capts.cancel}\n </button>\n </div>\n </Host>\n );\n }\n\n private onFilterTypeChange(e: Event, prop: ColumnProp, index: number) {\n if (!(e.target instanceof HTMLSelectElement)) {\n return;\n }\n this.filterItems[prop][index].type = e.target.value as FilterType;\n\n // this re-renders the input to know if we need extra input\n this.filterId++;\n\n // adding setTimeout will wait for the next tick DOM update then focus on input\n setTimeout(() => {\n const input = document.getElementById(\n 'filter-input-' + this.filterItems[prop][index].id,\n );\n if (input instanceof HTMLInputElement) {\n input.focus();\n }\n }, 0);\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private debouncedApplyFilter = debounce(() => {\n this.filterChange.emit(this.filterItems);\n }, 400);\n\n private onAddNewFilter(e: Event) {\n const el = e.target as HTMLSelectElement;\n this.currentFilterType = el.value as FilterType;\n this.addNewFilterToProp();\n\n // reset value after adding new filter\n const select = document.getElementById('add-filter') as HTMLSelectElement;\n if (select) {\n select.value = defaultType;\n this.currentFilterType = defaultType;\n }\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private addNewFilterToProp() {\n const prop = this.changes?.prop;\n if (!(prop || prop === 0)) return;\n\n if (!this.filterItems[prop]) {\n this.filterItems[prop] = [];\n }\n\n if (this.currentFilterType === 'none') return;\n\n this.filterId++;\n this.currentFilterId = this.filterId;\n\n this.filterItems[prop].push({\n id: this.currentFilterId,\n type: this.currentFilterType,\n value: '',\n relation: 'and',\n });\n\n // adding setTimeout will wait for the next tick DOM update then focus on input\n setTimeout(() => {\n const input = document.getElementById(\n 'filter-input-' + this.currentFilterId,\n ) as HTMLInputElement;\n if (input) input.focus();\n }, 0);\n }\n\n private onUserInput(index: number, prop: ColumnProp, event: Event) {\n // update the value of the filter item\n this.filterItems[prop][index].value = (\n event.target as HTMLInputElement\n ).value;\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private onKeyDown(e: KeyboardEvent) {\n if (e.key.toLowerCase() === 'enter') {\n const select = document.getElementById('add-filter') as HTMLSelectElement;\n if (select) {\n select.value = defaultType;\n this.currentFilterType = defaultType;\n this.addNewFilterToProp();\n select.focus();\n }\n return;\n }\n // keep event local, don't escalate farther to dom\n e.stopPropagation();\n }\n\n private onSave() {\n this.filterChange.emit(this.filterItems);\n }\n\n private onCancel() {\n this.changes = undefined;\n }\n\n private onReset() {\n this.assertChanges();\n\n delete this.filterItems[this.changes?.prop ?? ''];\n\n // this updates the DOM which is used by getFilterItemsList() key\n this.filterId++;\n\n this.filterChange.emit(this.filterItems);\n }\n\n private onRemoveFilter(id: number) {\n this.assertChanges();\n\n // this is for reactivity issues for getFilterItemsList()\n this.filterId++;\n\n const prop = this.changes?.prop;\n\n const items = this.filterItems[prop ?? ''];\n if (!items) return;\n\n const index = items.findIndex(d => d.id === id);\n if (index === -1) return;\n items.splice(index, 1);\n\n // let's remove the prop if no more filters so the filter icon will be removed\n if (items.length === 0) delete this.filterItems[prop ?? ''];\n\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private toggleFilterAndOr(id: number) {\n this.assertChanges();\n\n // this is for reactivity issues for getFilterItemsList()\n this.filterId++;\n\n const prop = this.changes?.prop;\n\n const items = this.filterItems[prop ?? ''];\n if (!items) return;\n\n const index = items.findIndex(d => d.id === id);\n if (index === -1) return;\n\n items[index].relation = items[index].relation === 'and' ? 'or' : 'and';\n if (!this.disableDynamicFiltering) this.debouncedApplyFilter();\n }\n\n private assertChanges() {\n if (!this.changes) {\n throw new Error('Changes required per edit');\n }\n }\n}\n"]}
@@ -5,7 +5,22 @@ import { h } from "@stencil/core";
5
5
  import reduce from "lodash/reduce";
6
6
  import { BasePlugin } from "../base.plugin";
7
7
  import { FILTER_PROP, isFilterBtn } from "./filter.button";
8
- import { filterEntities, filterNames, filterTypes, } from "./filter.service";
8
+ import { filterCoreFunctionsIndexedByType, filterNames, filterTypes, } from "./filter.indexed";
9
+ import { getCellDataParsed } from "../../utils/index";
10
+ /**
11
+ * @typedef ColumnFilterConfig
12
+ * @type {object}
13
+ * @property {FilterCollection|undefined} collection - preserved filter data
14
+ * @property {string[]|undefined} include - filters to be included, if defined everything else out of scope will be ignored
15
+ * @property {Record<string, CustomFilter>|undefined} customFilters - hash map of {FilterType:CustomFilter}.
16
+ * @property {FilterLocalization|undefined} localization - translation for filter popup captions.
17
+ * @property {MultiFilterItem|undefined} multiFilterItems - data for multi filtering.
18
+ * @property {boolean|undefined} disableDynamicFiltering - disables dynamic filtering.
19
+ * A way to define your own filter types per column
20
+ */
21
+ /**
22
+ * @internal
23
+ */
9
24
  export const FILTER_TRIMMED_TYPE = 'filter';
10
25
  export const FILTER_CONFIG_CHANGED_EVENT = 'filterconfigchanged';
11
26
  export class FilterPlugin extends BasePlugin {
@@ -15,14 +30,13 @@ export class FilterPlugin extends BasePlugin {
15
30
  this.revogrid = revogrid;
16
31
  this.filterCollection = {};
17
32
  this.multiFilterItems = {};
18
- this.possibleFilters = Object.assign({}, filterTypes);
19
- this.possibleFilterNames = Object.assign({}, filterNames);
20
- this.possibleFilterEntities = Object.assign({}, filterEntities);
33
+ this.filterByType = Object.assign({}, filterTypes);
34
+ this.filterNameIndexByType = Object.assign({}, filterNames);
35
+ this.filterFunctionsIndexedByType = Object.assign({}, filterCoreFunctionsIndexedByType);
21
36
  this.filterProp = FILTER_PROP;
22
37
  if (config) {
23
38
  this.initConfig(config);
24
39
  }
25
- const headerclick = (e) => this.headerclick(e);
26
40
  const aftersourceset = async () => {
27
41
  const filterCollectionProps = Object.keys(this.filterCollection);
28
42
  if (filterCollectionProps.length > 0) {
@@ -42,7 +56,7 @@ export class FilterPlugin extends BasePlugin {
42
56
  }
43
57
  await this.runFiltering();
44
58
  };
45
- this.addEventListener('headerclick', headerclick);
59
+ this.addEventListener('headerclick', (e) => this.headerclick(e));
46
60
  this.addEventListener(FILTER_CONFIG_CHANGED_EVENT, ({ detail }) => {
47
61
  if (!detail) {
48
62
  this.clearFiltering();
@@ -55,27 +69,29 @@ export class FilterPlugin extends BasePlugin {
55
69
  });
56
70
  this.addEventListener('aftersourceset', aftersourceset);
57
71
  this.addEventListener('filter', ({ detail }) => this.onFilterChange(detail));
58
- const existingNodes = this.revogrid.registerVNode.filter((n) => n.$tag$ !== 'revogr-filter-panel');
72
+ const existingNodes = this.revogrid.registerVNode.filter(n => n.$tag$ !== 'revogr-filter-panel');
59
73
  this.revogrid.registerVNode = [
60
74
  ...existingNodes,
61
- h("revogr-filter-panel", { filterItems: this.multiFilterItems, filterNames: this.possibleFilterNames, filterEntities: this.possibleFilterEntities, filterCaptions: (_a = config === null || config === void 0 ? void 0 : config.localization) === null || _a === void 0 ? void 0 : _a.captions, onFilterChange: e => this.onFilterChange(e.detail), disableDynamicFiltering: config === null || config === void 0 ? void 0 : config.disableDynamicFiltering, ref: e => (this.pop = e) }),
75
+ h("revogr-filter-panel", { filterItems: this.multiFilterItems, filterNames: this.filterNameIndexByType, filterEntities: this.filterFunctionsIndexedByType, filterCaptions: (_a = config === null || config === void 0 ? void 0 : config.localization) === null || _a === void 0 ? void 0 : _a.captions, onFilterChange: e => this.onFilterChange(e.detail), disableDynamicFiltering: config === null || config === void 0 ? void 0 : config.disableDynamicFiltering, ref: e => (this.pop = e) }),
62
76
  ];
63
77
  }
64
78
  initConfig(config) {
65
79
  if (config.multiFilterItems) {
66
80
  this.multiFilterItems = Object.assign({}, config.multiFilterItems);
67
81
  }
82
+ // Add custom filters
68
83
  if (config.customFilters) {
69
- for (let cType in config.customFilters) {
70
- const cFilter = config.customFilters[cType];
71
- if (!this.possibleFilters[cFilter.columnFilterType]) {
72
- this.possibleFilters[cFilter.columnFilterType] = [];
84
+ for (let customFilterType in config.customFilters) {
85
+ const cFilter = config.customFilters[customFilterType];
86
+ if (!this.filterByType[cFilter.columnFilterType]) {
87
+ this.filterByType[cFilter.columnFilterType] = [];
73
88
  }
74
- this.possibleFilters[cFilter.columnFilterType].push(cType);
75
- this.possibleFilterEntities[cType] = cFilter.func;
76
- this.possibleFilterNames[cType] = cFilter.name;
89
+ this.filterByType[cFilter.columnFilterType].push(customFilterType);
90
+ this.filterFunctionsIndexedByType[customFilterType] = cFilter.func;
91
+ this.filterNameIndexByType[customFilterType] = cFilter.name;
77
92
  }
78
93
  }
94
+ // Add filterProp if provided in config
79
95
  if (config.filterProp) {
80
96
  this.filterProp = config.filterProp;
81
97
  }
@@ -86,21 +102,21 @@ export class FilterPlugin extends BasePlugin {
86
102
  const cfgInlcude = config.include;
87
103
  if (cfgInlcude) {
88
104
  const filters = {};
89
- for (let t in this.possibleFilters) {
105
+ for (let t in this.filterByType) {
90
106
  // validate filters, if appropriate function present
91
- const newTypes = this.possibleFilters[t].filter(f => cfgInlcude.indexOf(f) > -1);
107
+ const newTypes = this.filterByType[t].filter(f => cfgInlcude.indexOf(f) > -1);
92
108
  if (newTypes.length) {
93
109
  filters[t] = newTypes;
94
110
  }
95
111
  }
96
112
  // if any valid filters provided show them
97
113
  if (Object.keys(filters).length > 0) {
98
- this.possibleFilters = filters;
114
+ this.filterByType = filters;
99
115
  }
100
116
  }
101
117
  if (config.collection) {
102
118
  this.filterCollection = reduce(config.collection, (result, item, prop) => {
103
- if (this.possibleFilterEntities[item.type]) {
119
+ if (this.filterFunctionsIndexedByType[item.type]) {
104
120
  result[prop] = item;
105
121
  }
106
122
  else {
@@ -112,8 +128,8 @@ export class FilterPlugin extends BasePlugin {
112
128
  if (config.localization) {
113
129
  if (config.localization.filterNames) {
114
130
  Object.entries(config.localization.filterNames).forEach(([k, v]) => {
115
- if (this.possibleFilterNames[k] != void 0) {
116
- this.possibleFilterNames[k] = v;
131
+ if (this.filterNameIndexByType[k] != void 0) {
132
+ this.filterNameIndexByType[k] = v;
117
133
  }
118
134
  });
119
135
  }
@@ -139,13 +155,12 @@ export class FilterPlugin extends BasePlugin {
139
155
  const gridPos = this.revogrid.getBoundingClientRect();
140
156
  const buttonPos = el.getBoundingClientRect();
141
157
  const prop = e.detail.prop;
142
- this.pop.filterTypes = this.getColumnFilter(e.detail.filter);
143
- this.pop.show(Object.assign(Object.assign({}, this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, prop }));
158
+ this.pop.show(Object.assign(Object.assign({}, this.filterCollection[prop]), { x: buttonPos.x - gridPos.x, y: buttonPos.y - gridPos.y + buttonPos.height, autoCorrect: true, prop, filterTypes: this.getColumnFilter(e.detail.filter) }));
144
159
  }
145
160
  getColumnFilter(type) {
146
161
  let filterType = 'string';
147
162
  if (!type) {
148
- return { [filterType]: this.possibleFilters[filterType] };
163
+ return { [filterType]: this.filterByType[filterType] };
149
164
  }
150
165
  // if custom column filter
151
166
  if (this.isValidType(type)) {
@@ -155,44 +170,59 @@ export class FilterPlugin extends BasePlugin {
155
170
  else if (typeof type === 'object' && type.length) {
156
171
  return type.reduce((r, multiType) => {
157
172
  if (this.isValidType(multiType)) {
158
- r[multiType] = this.possibleFilters[multiType];
173
+ r[multiType] = this.filterByType[multiType];
159
174
  }
160
175
  return r;
161
176
  }, {});
162
177
  }
163
- return { [filterType]: this.possibleFilters[filterType] };
178
+ return { [filterType]: this.filterByType[filterType] };
164
179
  }
165
180
  isValidType(type) {
166
- return !!(typeof type === 'string' && this.possibleFilters[type]);
181
+ return !!(typeof type === 'string' && this.filterByType[type]);
167
182
  }
168
- // called on internal component change
183
+ /**
184
+ * Called on internal component change
185
+ */
169
186
  async onFilterChange(filterItems) {
187
+ // store the filter items
170
188
  this.multiFilterItems = filterItems;
189
+ // run the filtering when the items change
171
190
  this.runFiltering();
172
191
  }
173
192
  /**
174
193
  * Triggers grid filtering
175
194
  */
176
- async doFiltering(collection, items, columns, filterItems) {
195
+ async doFiltering(collection, source, columns, filterItems) {
177
196
  const columnsToUpdate = [];
197
+ /**
198
+ * Loop through the columns and update the columns that need to be updated with the `hasFilter` property.
199
+ */
200
+ const columnByProp = {};
178
201
  columns.forEach(rgCol => {
179
202
  const column = Object.assign({}, rgCol);
180
203
  const hasFilter = filterItems[column.prop];
204
+ columnByProp[column.prop] = column;
205
+ /**
206
+ * If the column has a filter and it's not already marked as filtered, update the column.
207
+ */
181
208
  if (column[this.filterProp] && !hasFilter) {
182
209
  delete column[this.filterProp];
183
210
  columnsToUpdate.push(column);
184
211
  }
212
+ /**
213
+ * If the column does not have a filter and it's marked as filtered, update the column.
214
+ */
185
215
  if (!column[this.filterProp] && hasFilter) {
186
216
  columnsToUpdate.push(column);
187
217
  column[this.filterProp] = true;
188
218
  }
189
219
  });
190
- const itemsToFilter = this.getRowFilter(items, filterItems);
220
+ const itemsToTrim = this.getRowFilter(source, filterItems, columnByProp);
191
221
  // check is filter event prevented
192
222
  const { defaultPrevented, detail } = this.emit('beforefiltertrimmed', {
193
223
  collection,
194
- itemsToFilter,
195
- source: items,
224
+ itemsToFilter: itemsToTrim,
225
+ source,
196
226
  filterItems,
197
227
  });
198
228
  if (defaultPrevented) {
@@ -204,7 +234,7 @@ export class FilterPlugin extends BasePlugin {
204
234
  return;
205
235
  }
206
236
  // applies the hasFilter to the columns to show filter icon
207
- await this.revogrid.updateColumns(columnsToUpdate);
237
+ this.providers.column.updateColumns(columnsToUpdate);
208
238
  this.emit('afterfilterapply');
209
239
  }
210
240
  async clearFiltering() {
@@ -220,7 +250,7 @@ export class FilterPlugin extends BasePlugin {
220
250
  if (this.multiFilterItems[prop].length > 0) {
221
251
  const firstFilterItem = this.multiFilterItems[prop][0];
222
252
  collection[prop] = {
223
- filter: filterEntities[firstFilterItem.type],
253
+ filter: this.filterFunctionsIndexedByType[firstFilterItem.type],
224
254
  type: firstFilterItem.type,
225
255
  value: firstFilterItem.value,
226
256
  };
@@ -245,52 +275,68 @@ export class FilterPlugin extends BasePlugin {
245
275
  columns: await this.revogrid.getColumns(),
246
276
  };
247
277
  }
248
- getRowFilter(rows, filterItems) {
278
+ /**
279
+ * Get trimmed rows based on filter
280
+ */
281
+ getRowFilter(rows, filterItems, columnByProp) {
249
282
  const propKeys = Object.keys(filterItems);
250
283
  const trimmed = {};
251
284
  let propFilterSatisfiedCount = 0;
252
285
  let lastFilterResults = [];
253
286
  // each rows
254
287
  rows.forEach((model, rowIndex) => {
255
- // working on all props
288
+ // check filter by column properties
256
289
  for (const prop of propKeys) {
257
290
  const propFilters = filterItems[prop];
291
+ // reset the count of satisfied filters
258
292
  propFilterSatisfiedCount = 0;
293
+ // reset the array of last filter results
259
294
  lastFilterResults = [];
260
295
  // testing each filter for a prop
261
296
  for (const [filterIndex, filterData] of propFilters.entries()) {
262
297
  // the filter LogicFunction based on the type
263
- const filter = this.possibleFilterEntities[filterData.type];
298
+ const filterFunc = this.filterFunctionsIndexedByType[filterData.type];
264
299
  // THE MAGIC OF FILTERING IS HERE
300
+ const column = columnByProp[prop];
301
+ // If there is no column but user wants to filter by a property
302
+ const value = column ? getCellDataParsed(model, columnByProp[prop]) : model[prop];
303
+ // OR relation
265
304
  if (filterData.relation === 'or') {
305
+ // reset the array of last filter results
266
306
  lastFilterResults = [];
267
- if (filter(model[prop], filterData.value)) {
307
+ // if the filter is satisfied, continue to the next filter
308
+ if (filterFunc(value, filterData.value)) {
268
309
  continue;
269
310
  }
311
+ // if the filter is not satisfied, count it
270
312
  propFilterSatisfiedCount++;
313
+ // AND relation
271
314
  }
272
315
  else {
273
316
  // 'and' relation will need to know the next filter
274
317
  // so we save this current filter to include it in the next filter
275
- lastFilterResults.push(!filter(model[prop], filterData.value));
318
+ lastFilterResults.push(!filterFunc(value, filterData.value));
276
319
  // check first if we have a filter on the next index to pair it with this current filter
277
320
  const nextFilterData = propFilters[filterIndex + 1];
278
321
  // stop the sequence if there is no next filter or if the next filter is not an 'and' relation
279
322
  if (!nextFilterData || nextFilterData.relation !== 'and') {
280
323
  // let's just continue since for sure propFilterSatisfiedCount cannot be satisfied
281
324
  if (lastFilterResults.indexOf(true) === -1) {
325
+ // reset the array of last filter results
282
326
  lastFilterResults = [];
283
327
  continue;
284
328
  }
285
329
  // we need to add all of the lastFilterResults since we need to satisfy all
286
330
  propFilterSatisfiedCount += lastFilterResults.length;
331
+ // reset the array of last filter results
287
332
  lastFilterResults = [];
288
333
  }
289
334
  }
290
335
  } // end of propFilters forEach
291
336
  // add to the list of removed/trimmed rows of filter condition is satisfied
292
- if (propFilterSatisfiedCount === propFilters.length)
337
+ if (propFilterSatisfiedCount === propFilters.length) {
293
338
  trimmed[rowIndex] = true;
339
+ }
294
340
  } // end of for-of propKeys
295
341
  });
296
342
  return trimmed;