@sankhyalabs/sankhyablocks 6.10.0 → 7.0.1

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 (156) hide show
  1. package/dist/cjs/{ConfigStorage-da2bf3bf.js → ConfigStorage-97468a0f.js} +28 -22
  2. package/dist/cjs/{PersonalizedFilterUtils-cfcd9af2.js → PersonalizedFilterUtils-9848e09b.js} +18 -64
  3. package/dist/cjs/{SnkFormConfigManager-d7cc9118.js → SnkFormConfigManager-bef6e022.js} +1 -1
  4. package/dist/cjs/{SnkMessageBuilder-a5a9b437.js → SnkMessageBuilder-f40df6d4.js} +18 -2
  5. package/dist/cjs/{filter-bar-config-fetcher-58cfc12e.js → filter-bar-config-fetcher-a7747f69.js} +22 -5
  6. package/dist/cjs/index-8d94b7e0.js +7 -0
  7. package/dist/cjs/index-c5771aba.js +44 -0
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  10. package/dist/cjs/snk-application.cjs.entry.js +3 -3
  11. package/dist/cjs/snk-data-exporter.cjs.entry.js +2 -2
  12. package/dist/cjs/{snk-data-unit-9d03800c.js → snk-data-unit-b14563fc.js} +4 -2
  13. package/dist/cjs/snk-data-unit.cjs.entry.js +2 -2
  14. package/dist/cjs/snk-detail-view.cjs.entry.js +5 -5
  15. package/dist/cjs/snk-expression-group_2.cjs.entry.js +542 -0
  16. package/dist/cjs/snk-filter-advanced-mode_2.cjs.entry.js +66 -0
  17. package/dist/cjs/snk-filter-bar.cjs.entry.js +14 -14
  18. package/dist/cjs/snk-filter-detail.cjs.entry.js +3 -3
  19. package/dist/cjs/{snk-expression-item_3.cjs.entry.js → snk-filter-field-search_2.cjs.entry.js} +23 -315
  20. package/dist/cjs/snk-filter-modal-item.cjs.entry.js +2 -2
  21. package/dist/cjs/snk-filter-modal.cjs.entry.js +2 -2
  22. package/dist/cjs/snk-form.cjs.entry.js +3 -3
  23. package/dist/cjs/snk-grid-config.cjs.entry.js +2 -2
  24. package/dist/cjs/snk-grid.cjs.entry.js +8 -2
  25. package/dist/cjs/{snk-guides-viewer-36766466.js → snk-guides-viewer-897368ea.js} +1 -1
  26. package/dist/cjs/snk-guides-viewer.cjs.entry.js +4 -4
  27. package/dist/cjs/snk-personalized-filter.cjs.entry.js +122 -31
  28. package/dist/cjs/snk-simple-crud.cjs.entry.js +12 -2
  29. package/dist/collection/collection-manifest.json +2 -0
  30. package/dist/collection/components/snk-data-unit/snk-data-unit.js +3 -1
  31. package/dist/collection/components/snk-filter-bar/snk-filter-bar.js +1 -1
  32. package/dist/collection/components/snk-grid/snk-grid.js +6 -0
  33. package/dist/collection/components/snk-personalized-filter/snk-personalized-filter.css +5 -1
  34. package/dist/collection/components/snk-personalized-filter/snk-personalized-filter.js +114 -23
  35. package/dist/collection/components/snk-personalized-filter/subcomponents/snk-expression-group/snk-expression-group.js +4 -6
  36. package/dist/collection/components/snk-personalized-filter/subcomponents/snk-expression-item/snk-expression-item.js +2 -1
  37. package/dist/collection/components/snk-personalized-filter/subcomponents/snk-filter-advanced-mode/snk-filter-advanced-mode.css +10 -0
  38. package/dist/collection/components/snk-personalized-filter/subcomponents/snk-filter-advanced-mode/snk-filter-advanced-mode.js +95 -0
  39. package/dist/collection/components/snk-personalized-filter/subcomponents/snk-filter-assistent-mode/snk-filter-assistent-mode.css +66 -0
  40. package/dist/collection/components/snk-personalized-filter/subcomponents/snk-filter-assistent-mode/snk-filter-assistent-mode.js +158 -0
  41. package/dist/collection/components/snk-personalized-filter/subcomponents/snk-filter-param-config/snk-filter-param-config.js +8 -2
  42. package/dist/collection/components/snk-personalized-filter/subcomponents/snk-filter-param-config/utils/PersonalizedFilterUtils.js +14 -23
  43. package/dist/collection/components/snk-simple-crud/snk-simple-crud.js +14 -4
  44. package/dist/collection/lib/configs/ConfigStorage.js +5 -3
  45. package/dist/collection/lib/http/data-fetcher/fetchers/filter-bar-config-fetcher.js +22 -5
  46. package/dist/collection/lib/http/data-fetcher/fetchers/personalized-filter-fetcher.js +22 -18
  47. package/dist/collection/lib/message/resources/snk-personalized-filter.msg.js +18 -2
  48. package/dist/components/ConfigStorage.js +27 -21
  49. package/dist/components/PersonalizedFilterUtils.js +14 -23
  50. package/dist/components/SnkMessageBuilder.js +18 -2
  51. package/dist/components/filter-bar-config-fetcher.js +22 -5
  52. package/dist/components/index.d.ts +2 -0
  53. package/dist/components/index.js +2 -0
  54. package/dist/components/snk-crud.js +34 -22
  55. package/dist/components/snk-data-unit2.js +3 -1
  56. package/dist/components/snk-detail-view2.js +49 -27
  57. package/dist/components/snk-expression-group2.js +4 -6
  58. package/dist/components/snk-expression-item2.js +2 -1
  59. package/dist/components/snk-filter-advanced-mode.d.ts +11 -0
  60. package/dist/components/snk-filter-advanced-mode.js +6 -0
  61. package/dist/components/snk-filter-advanced-mode2.js +46 -0
  62. package/dist/components/snk-filter-assistent-mode.d.ts +11 -0
  63. package/dist/components/snk-filter-assistent-mode.js +6 -0
  64. package/dist/components/snk-filter-assistent-mode2.js +77 -0
  65. package/dist/components/snk-filter-bar2.js +17 -5
  66. package/dist/components/snk-filter-param-config2.js +6 -0
  67. package/dist/components/snk-grid2.js +28 -10
  68. package/dist/components/snk-personalized-filter2.js +131 -28
  69. package/dist/components/snk-simple-crud2.js +12 -2
  70. package/dist/esm/{ConfigStorage-f1e805a0.js → ConfigStorage-02f17a26.js} +28 -22
  71. package/dist/esm/{PersonalizedFilterUtils-1a167d89.js → PersonalizedFilterUtils-731cae01.js} +16 -62
  72. package/dist/esm/{SnkFormConfigManager-324f6dc7.js → SnkFormConfigManager-cd9e6cab.js} +1 -1
  73. package/dist/esm/{SnkMessageBuilder-76f62087.js → SnkMessageBuilder-5be56185.js} +18 -2
  74. package/dist/esm/{filter-bar-config-fetcher-a358b8e0.js → filter-bar-config-fetcher-790283d8.js} +22 -5
  75. package/dist/esm/index-620ac460.js +7 -0
  76. package/dist/esm/index-ae591a44.js +44 -0
  77. package/dist/esm/loader.js +1 -1
  78. package/dist/esm/sankhyablocks.js +1 -1
  79. package/dist/esm/snk-application.entry.js +3 -3
  80. package/dist/esm/snk-data-exporter.entry.js +2 -2
  81. package/dist/esm/{snk-data-unit-0ff2d644.js → snk-data-unit-d44b6bc0.js} +4 -2
  82. package/dist/esm/snk-data-unit.entry.js +2 -2
  83. package/dist/esm/snk-detail-view.entry.js +5 -5
  84. package/dist/esm/snk-expression-group_2.entry.js +537 -0
  85. package/dist/esm/snk-filter-advanced-mode_2.entry.js +61 -0
  86. package/dist/esm/snk-filter-bar.entry.js +5 -5
  87. package/dist/esm/snk-filter-detail.entry.js +3 -3
  88. package/dist/esm/{snk-expression-item_3.entry.js → snk-filter-field-search_2.entry.js} +12 -303
  89. package/dist/esm/snk-filter-modal-item.entry.js +2 -2
  90. package/dist/esm/snk-filter-modal.entry.js +2 -2
  91. package/dist/esm/snk-form.entry.js +3 -3
  92. package/dist/esm/snk-grid-config.entry.js +2 -2
  93. package/dist/esm/snk-grid.entry.js +8 -2
  94. package/dist/esm/{snk-guides-viewer-e7209909.js → snk-guides-viewer-579c70cc.js} +1 -1
  95. package/dist/esm/snk-guides-viewer.entry.js +4 -4
  96. package/dist/esm/snk-personalized-filter.entry.js +119 -28
  97. package/dist/esm/snk-simple-crud.entry.js +12 -2
  98. package/dist/sankhyablocks/{p-522172e1.entry.js → p-1005cf8e.entry.js} +1 -1
  99. package/dist/sankhyablocks/{p-8f6575c8.entry.js → p-19fdcf88.entry.js} +1 -1
  100. package/dist/sankhyablocks/{p-18b74675.entry.js → p-1fe2976e.entry.js} +1 -1
  101. package/dist/sankhyablocks/p-2227bb94.js +1 -0
  102. package/dist/sankhyablocks/p-386102a7.entry.js +1 -0
  103. package/dist/sankhyablocks/{p-7a075ae6.js → p-3b059f4e.js} +1 -1
  104. package/dist/sankhyablocks/p-48156672.entry.js +1 -0
  105. package/dist/sankhyablocks/p-4af6cbef.entry.js +1 -0
  106. package/dist/sankhyablocks/p-4bbc7aac.entry.js +1 -0
  107. package/dist/sankhyablocks/{p-3251999f.entry.js → p-4f687570.entry.js} +1 -1
  108. package/dist/sankhyablocks/p-5098f618.js +1 -0
  109. package/dist/sankhyablocks/{p-652b9081.js → p-7e486ac9.js} +1 -1
  110. package/dist/sankhyablocks/p-7e636457.entry.js +1 -0
  111. package/dist/sankhyablocks/p-7f1c4687.js +56 -0
  112. package/dist/sankhyablocks/{p-ed9e1e52.entry.js → p-88f4ef73.entry.js} +1 -1
  113. package/dist/sankhyablocks/{p-4f3df9b6.js → p-90a926c7.js} +1 -1
  114. package/dist/sankhyablocks/{p-eef26a01.entry.js → p-90e7c3a2.entry.js} +1 -1
  115. package/dist/sankhyablocks/p-933c0c0b.js +1 -0
  116. package/dist/sankhyablocks/p-97720467.entry.js +1 -0
  117. package/dist/sankhyablocks/{p-bd840081.entry.js → p-9fa9331b.entry.js} +1 -1
  118. package/dist/sankhyablocks/{p-40a5d35e.entry.js → p-ad6673fb.entry.js} +1 -1
  119. package/dist/sankhyablocks/p-bd86c9d3.entry.js +1 -0
  120. package/dist/sankhyablocks/{p-8d583a79.entry.js → p-c39b27a3.entry.js} +1 -1
  121. package/dist/sankhyablocks/p-f4184ce7.js +1 -0
  122. package/dist/sankhyablocks/{p-56378a3b.js → p-fb1e5b6d.js} +1 -1
  123. package/dist/sankhyablocks/p-fcc487ea.entry.js +1 -0
  124. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  125. package/dist/types/components/snk-data-unit/snk-data-unit.d.ts +1 -0
  126. package/dist/types/components/snk-personalized-filter/interfaces/IPersonalizedFilter.d.ts +4 -0
  127. package/dist/types/components/snk-personalized-filter/snk-personalized-filter.d.ts +17 -6
  128. package/dist/types/components/snk-personalized-filter/subcomponents/snk-expression-group/snk-expression-group.d.ts +2 -2
  129. package/dist/types/components/snk-personalized-filter/subcomponents/snk-filter-advanced-mode/snk-filter-advanced-mode.d.ts +20 -0
  130. package/dist/types/components/snk-personalized-filter/subcomponents/snk-filter-assistent-mode/snk-filter-assistent-mode.d.ts +31 -0
  131. package/dist/types/components/snk-personalized-filter/subcomponents/snk-filter-param-config/snk-filter-param-config.d.ts +6 -0
  132. package/dist/types/components/snk-personalized-filter/subcomponents/snk-filter-param-config/utils/PersonalizedFilterUtils.d.ts +2 -2
  133. package/dist/types/components/snk-simple-crud/snk-simple-crud.d.ts +2 -1
  134. package/dist/types/components.d.ts +103 -2
  135. package/dist/types/lib/configs/ConfigStorage.d.ts +3 -2
  136. package/dist/types/lib/http/data-fetcher/fetchers/filter-bar-config-fetcher.d.ts +2 -1
  137. package/dist/types/lib/http/data-fetcher/fetchers/personalized-filter-fetcher.d.ts +2 -1
  138. package/package.json +1 -1
  139. package/react/components.d.ts +2 -0
  140. package/react/components.js +2 -0
  141. package/react/components.js.map +1 -1
  142. package/dist/cjs/IExpressionItem-0e32ebb7.js +0 -7
  143. package/dist/cjs/snk-expression-group.cjs.entry.js +0 -250
  144. package/dist/esm/IExpressionItem-21f225bf.js +0 -7
  145. package/dist/esm/snk-expression-group.entry.js +0 -246
  146. package/dist/sankhyablocks/p-432a73a8.js +0 -1
  147. package/dist/sankhyablocks/p-63bff2a8.js +0 -1
  148. package/dist/sankhyablocks/p-6490021d.entry.js +0 -1
  149. package/dist/sankhyablocks/p-7d68a43a.js +0 -1
  150. package/dist/sankhyablocks/p-7fd8a0ab.entry.js +0 -1
  151. package/dist/sankhyablocks/p-9f34a127.entry.js +0 -1
  152. package/dist/sankhyablocks/p-a357d13c.entry.js +0 -1
  153. package/dist/sankhyablocks/p-d4adf773.js +0 -68
  154. package/dist/sankhyablocks/p-d9586ead.entry.js +0 -1
  155. package/dist/sankhyablocks/p-eb30a52a.entry.js +0 -1
  156. package/dist/sankhyablocks/p-f8ce17d3.entry.js +0 -1
@@ -6,7 +6,7 @@ const index = require('./index-f9e81701.js');
6
6
  const core = require('@sankhyalabs/core');
7
7
  const UnitMetadata = require('@sankhyalabs/core/dist/dataunit/metadata/UnitMetadata');
8
8
  const taskbarElements = require('./taskbar-elements-b98dd6e9.js');
9
- const ConfigStorage = require('./ConfigStorage-da2bf3bf.js');
9
+ const ConfigStorage = require('./ConfigStorage-97468a0f.js');
10
10
  const index$1 = require('./index-0e663819.js');
11
11
  const taskbarProcessor = require('./taskbar-processor-bce3f499.js');
12
12
  const index$2 = require('./index-102ba62d.js');
@@ -16,7 +16,7 @@ require('./form-config-fetcher-56442594.js');
16
16
  require('./DataFetcher-04c70ba9.js');
17
17
  require('./_commonjsHelpers-537d719a.js');
18
18
  require('./resource-fetcher-260e98a4.js');
19
- require('./filter-bar-config-fetcher-58cfc12e.js');
19
+ require('./filter-bar-config-fetcher-a7747f69.js');
20
20
  require('./filter-item-type.enum-aa823a00.js');
21
21
 
22
22
  const snkGridCss = ".snk-grid__container.sc-snk-grid{display:flex;height:100%;width:100%}.snk-grid__header.sc-snk-grid{display:flex;flex-wrap:nowrap;width:100%}.snk-grid__filter-bar.sc-snk-grid{width:100%}.snk-grid__header-divider.sc-snk-grid{margin-bottom:var(--space--medium)}.snk-grid__table.sc-snk-grid{min-height:300px}.snk-grid-container__without-shadow.sc-snk-grid{--ezgrid__container--shadow:unset}";
@@ -251,6 +251,12 @@ const SnkGrid = class {
251
251
  this._snkDataUnit.addEventListener("dataStateChange", (evt) => {
252
252
  this._dataState = evt.detail;
253
253
  });
254
+ this._snkDataUnit.addEventListener("cancelEdition", () => {
255
+ var _a;
256
+ if ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.recordsIsEmpty) {
257
+ this._dataUnit.clearSelection();
258
+ }
259
+ });
254
260
  break;
255
261
  }
256
262
  parent = parent.parentElement;
@@ -2,7 +2,7 @@
2
2
 
3
3
  const index = require('./index-f9e81701.js');
4
4
  const core = require('@sankhyalabs/core');
5
- const SnkFormConfigManager = require('./SnkFormConfigManager-d7cc9118.js');
5
+ const SnkFormConfigManager = require('./SnkFormConfigManager-bef6e022.js');
6
6
  const form = require('@sankhyalabs/ezui/dist/collection/utils/form');
7
7
  const taskbarProcessor = require('./taskbar-processor-bce3f499.js');
8
8
  const taskbarElements = require('./taskbar-elements-b98dd6e9.js');
@@ -2,16 +2,16 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const snkGuidesViewer = require('./snk-guides-viewer-36766466.js');
5
+ const snkGuidesViewer = require('./snk-guides-viewer-897368ea.js');
6
6
  require('./index-f9e81701.js');
7
7
  require('@sankhyalabs/core');
8
- require('./SnkFormConfigManager-d7cc9118.js');
9
- require('./ConfigStorage-da2bf3bf.js');
8
+ require('./SnkFormConfigManager-bef6e022.js');
9
+ require('./ConfigStorage-97468a0f.js');
10
10
  require('./form-config-fetcher-56442594.js');
11
11
  require('./DataFetcher-04c70ba9.js');
12
12
  require('./_commonjsHelpers-537d719a.js');
13
13
  require('./resource-fetcher-260e98a4.js');
14
- require('./filter-bar-config-fetcher-58cfc12e.js');
14
+ require('./filter-bar-config-fetcher-a7747f69.js');
15
15
  require('./filter-item-type.enum-aa823a00.js');
16
16
  require('@sankhyalabs/ezui/dist/collection/utils/form');
17
17
  require('./taskbar-processor-bce3f499.js');
@@ -4,19 +4,19 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-f9e81701.js');
6
6
  const core = require('@sankhyalabs/core');
7
- const PersonalizedFilterUtils = require('./PersonalizedFilterUtils-cfcd9af2.js');
8
- const ConfigStorage = require('./ConfigStorage-da2bf3bf.js');
7
+ const PersonalizedFilterUtils = require('./PersonalizedFilterUtils-9848e09b.js');
8
+ const ConfigStorage = require('./ConfigStorage-97468a0f.js');
9
9
  const utils = require('@sankhyalabs/ezui/dist/collection/utils');
10
- const IExpressionItem = require('./IExpressionItem-0e32ebb7.js');
11
- const index$1 = require('./index-102ba62d.js');
10
+ const index$1 = require('./index-c5771aba.js');
11
+ const index$2 = require('./index-102ba62d.js');
12
12
  require('./filter-item-type.enum-aa823a00.js');
13
13
  require('./form-config-fetcher-56442594.js');
14
14
  require('./DataFetcher-04c70ba9.js');
15
15
  require('./_commonjsHelpers-537d719a.js');
16
16
  require('./resource-fetcher-260e98a4.js');
17
- require('./filter-bar-config-fetcher-58cfc12e.js');
17
+ require('./filter-bar-config-fetcher-a7747f69.js');
18
18
 
19
- const snkPersonalizedFilterCss = ".sc-snk-personalized-filter-h{display:flex;height:100%;padding:var(--space--large, 24px);--snk-personalized-filter--width:100%;--snk-personalized-filter--height:100%;--snk-personalized-filter--background-color-line:var(--color--disable-secondary);--snk-personalized-filter--margin-line:var(--border--radius-medium, 12px)}.snk-personalized-filter.sc-snk-personalized-filter{height:var(--snk-personalized-filter--width);width:var(--snk-personalized-filter--height)}.snk-personalized-filter__header-actions.sc-snk-personalized-filter{display:flex;gap:var(--space--medium)}.snk-personalized-filter__group.sc-snk-personalized-filter{flex:1}.snk-personalized-filter__expression-input--line.sc-snk-personalized-filter{width:100%;height:2px;background-color:var(--snk-personalized-filter--background-color-line);margin-top:var(--snk-personalized-filter--margin-line);margin-bottom:var(--snk-personalized-filter--margin-line)}.ez-box__main.sc-snk-personalized-filter{height:90%}";
19
+ const snkPersonalizedFilterCss = ".sc-snk-personalized-filter-h{display:flex;height:100%;padding:var(--space--large, 24px);--snk-personalized-filter--width:100%;--snk-personalized-filter--height:100%;--snk-personalized-filter--background-color-line:var(--color--disable-secondary);--snk-personalized-filter--margin-line:var(--border--radius-medium, 12px)}.snk-personalized-filter.sc-snk-personalized-filter{height:var(--snk-personalized-filter--width);width:var(--snk-personalized-filter--height)}.snk-personalized-filter__header-actions.sc-snk-personalized-filter{display:flex;gap:var(--space--medium)}.snk-personalized-filter__group.sc-snk-personalized-filter{flex:1}.snk-personalized-filter__expression-input--line.sc-snk-personalized-filter{width:100%;height:2px;background-color:var(--snk-personalized-filter--background-color-line);margin-top:var(--snk-personalized-filter--margin-line);margin-bottom:var(--snk-personalized-filter--margin-line)}.ez-box__main.sc-snk-personalized-filter{height:90%}.snk-personalized-filter__button-mode.sc-snk-personalized-filter{height:35px}";
20
20
 
21
21
  const SnkPersonalizedFilter = class {
22
22
  constructor(hostRef) {
@@ -73,7 +73,7 @@ const SnkPersonalizedFilter = class {
73
73
  }
74
74
  ],
75
75
  childrenGroups: [],
76
- operand: IExpressionItem.FilterGroupCondition.AND
76
+ operand: index$1.FilterGroupCondition.AND
77
77
  }
78
78
  };
79
79
  this._originalFilterAssistent = core.ObjectUtils.copy(newPersonalizedFilter);
@@ -95,8 +95,8 @@ const SnkPersonalizedFilter = class {
95
95
  }
96
96
  componentWillLoad() {
97
97
  var _a;
98
- if (index$1.store.get(`filterFieldsDataSource.${this.entityUri}`) == undefined) {
99
- index$1.store.set(`filterFieldsDataSource.${this.entityUri}`, this._dataSourceFetcher);
98
+ if (index$2.store.get(`filterFieldsDataSource.${this.entityUri}`) == undefined) {
99
+ index$2.store.set(`filterFieldsDataSource.${this.entityUri}`, this._dataSourceFetcher);
100
100
  }
101
101
  if (!this.messagesBuilder) {
102
102
  this._application = core.ApplicationContext.getContextValue("__SNK__APPLICATION__");
@@ -104,6 +104,13 @@ const SnkPersonalizedFilter = class {
104
104
  }
105
105
  this.loadFilter(this.filterId, undefined);
106
106
  }
107
+ componentDidRender() {
108
+ var _a;
109
+ (_a = this._viewStackRef) === null || _a === void 0 ? void 0 : _a.show(this._filterAssistentMode ? 0 : 1);
110
+ if (this._elButtonMode) {
111
+ this._elButtonMode.setAttribute(core.ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME, core.ElementIDUtils.getInternalIDInfo(`${this._filterAssistentMode ? "advancedMode_ezButton" : "assistentMode_ezButton"}`));
112
+ }
113
+ }
107
114
  getMessage(key, params) {
108
115
  return this._application.messagesBuilder.getMessage(key, params);
109
116
  }
@@ -121,26 +128,55 @@ const SnkPersonalizedFilter = class {
121
128
  removeFilter() {
122
129
  ConfigStorage.ConfigStorage.removePersonalizedFilter(this._filterAssistent, this.configName);
123
130
  }
124
- async handleFilterGroupChange() {
125
- const assistent = await this._mainExpressionGroup.getExpressionGroup();
126
- this._filterAssistent = Object.assign(Object.assign({}, this._filterAssistent), { assistent });
127
- this._filterAssistent.parameters = PersonalizedFilterUtils.PersonalizedFilterUtils.buildVariableParameters(this._filterAssistent.assistent);
128
- this._elTextAreaExpression.value = PersonalizedFilterUtils.PersonalizedFilterUtils.buildGroupExpression(this._filterAssistent.assistent, true);
129
- this._elButtonSave.enabled = !this.hasChangesToSave();
130
- }
131
131
  hasChangesToSave() {
132
132
  return JSON.stringify(this._filterAssistent) === JSON.stringify(this._originalFilterAssistent);
133
133
  }
134
- handleSave() {
134
+ async handleSave() {
135
+ if (this._filterAssistentMode) {
136
+ const isValid = PersonalizedFilterUtils.PersonalizedFilterUtils.validateFields(this._filterAssistent.assistent);
137
+ if (!isValid || !this._filterAssistent.name)
138
+ return this._application.error(this.getMessage("snkPersonalizedFilter.error.title"), this.getMessage("snkPersonalizedFilter.error.description"));
139
+ this.saveAssistentMode();
140
+ }
141
+ else {
142
+ if (!this._filterAssistent.expression || !this._filterAssistent.name)
143
+ return this._application.error(this.getMessage("snkPersonalizedFilter.error.title"), this.getMessage("snkPersonalizedFilter.error.description"));
144
+ const isValidExpressionForAdvancedMode = await this.validateExpressionBeforeSaving();
145
+ if (!isValidExpressionForAdvancedMode)
146
+ return;
147
+ this.saveAdvancedMode();
148
+ }
149
+ }
150
+ saveAssistentMode() {
135
151
  const { assistent, expression } = this._filterAssistent;
136
- const isValid = PersonalizedFilterUtils.PersonalizedFilterUtils.validateFields(assistent);
137
- if (!isValid || !this._filterAssistent.name)
138
- return this._application.error(this.getMessage("snkPersonalizedFilter.error.title"), this.getMessage("snkPersonalizedFilter.error.description"));
139
152
  const expressionQuery = !!assistent ? PersonalizedFilterUtils.PersonalizedFilterUtils.buildGroupExpression(assistent) : expression;
140
153
  this._filterAssistent.expression = expressionQuery;
141
154
  this.ezSave.emit(expressionQuery);
142
155
  this.saveFilter();
143
156
  }
157
+ saveAdvancedMode() {
158
+ if (this._filterAssistent.assistent) {
159
+ utils.ApplicationUtils.confirm(this.getMessage("snkPersonalizedFilter.confirmSaveModeAdvanced.title"), this.getMessage("snkPersonalizedFilter.confirmSaveModeAdvanced.description"))
160
+ .then((confirm) => {
161
+ if (!confirm)
162
+ return;
163
+ this.saveAndTransformToAdvancedMode();
164
+ });
165
+ }
166
+ else {
167
+ this.saveAndTransformToAdvancedMode();
168
+ }
169
+ }
170
+ saveAndTransformToAdvancedMode() {
171
+ this._filterAssistent.assistent = undefined;
172
+ this.ezSave.emit(this._filterAssistent.expression);
173
+ this.saveFilter();
174
+ }
175
+ async validateExpressionBeforeSaving() {
176
+ const { valid, message } = await this._personalizedFilterFetcher.validatePersonalizedFilter(this.entityUri, this._filterAssistent.expression);
177
+ valid || this._application.error(this.getMessage("snkPersonalizedFilter.error.title"), message);
178
+ return valid;
179
+ }
144
180
  handleCancel() {
145
181
  if (this.hasChangesToSave()) {
146
182
  return this.ezCancel.emit();
@@ -174,32 +210,87 @@ const SnkPersonalizedFilter = class {
174
210
  }
175
211
  return resp;
176
212
  }
177
- handleExpressionChange(expression) {
213
+ handleExpressionChangeAdvancedMode(expression) {
178
214
  this._filterAssistent = Object.assign(Object.assign({}, this._filterAssistent), { expression });
179
215
  this._elButtonSave.enabled = !this.hasChangesToSave();
180
216
  }
181
- getWarningMessageComponent() {
182
- var _a;
183
- if (core.StringUtils.isEmpty((_a = this._filterAssistent) === null || _a === void 0 ? void 0 : _a.warningMessage)) {
184
- return undefined;
217
+ handleChangeFilterAssistentMode(filterAssistent) {
218
+ this._elButtonSave.enabled = !this.hasChangesToSave();
219
+ this._filterAssistent = Object.assign({}, filterAssistent);
220
+ }
221
+ selectField(fieldName) {
222
+ if (!('name' in fieldName))
223
+ return;
224
+ const fieldExpression = this.buildExpression(fieldName.entityName, fieldName.name, fieldName.entityPath);
225
+ const textAreaElement = this._elAdvancedMode.querySelector('ez-text-area');
226
+ textAreaElement.appendTextToSelection(fieldExpression);
227
+ }
228
+ buildExpression(entityName, fieldName, entityPath) {
229
+ if (entityPath.length > 0) {
230
+ entityPath.shift();
185
231
  }
186
- return (index.h("div", { class: "ez-flex" }, index.h("ez-alert", { alertType: "warn" }, this._filterAssistent.warningMessage)));
232
+ return entityPath.length > 0 ? `${entityPath.join("->")}->${fieldName}` : `${entityName}.${fieldName}`;
233
+ }
234
+ onAddField(target) {
235
+ const textAreaElement = this._elAdvancedMode.querySelector('ez-text-area');
236
+ const options = { horizontalGap: 0, verticalGap: 12, fromRight: true };
237
+ textAreaElement.setFocus();
238
+ target.setBlur();
239
+ if (this._elFilterFieldSearch)
240
+ this._elFilterFieldSearch.show(target, options);
241
+ }
242
+ renderButtonAddField() {
243
+ if (this._filterAssistentMode)
244
+ return;
245
+ return (index.h(index.Fragment, null, index.h("ez-button", { class: "snk-personalized-filter__button-mode", label: this.getMessage("snkPersonalizedFilter.info.addField"), enabled: true, onClick: (evt) => this.onAddField(evt.target) }, index.h("ez-icon", { class: "ez-padding-right--small", slot: "leftIcon", iconName: "plus" })), index.h("snk-filter-field-search", { class: "ez-padding-left--medium", ref: ref => this._elFilterFieldSearch = ref, onEzSelectFilterItem: (evt) => this.selectField(evt.detail), fieldsDataSource: this._dataSourceFetcher })));
187
246
  }
188
247
  buildContainerPersonalizedFilter() {
189
- var _a, _b, _c;
248
+ return (index.h("ez-view-stack", { ref: (ref) => this._viewStackRef = ref }, index.h("stack-item", null, this._filterAssistentMode &&
249
+ index.h("snk-filter-assistent-mode", { filterAssistent: this._filterAssistent, messagesBuilder: this.messagesBuilder, filterId: this.filterId, entityUri: this.entityUri, application: this._application, onEzChangeFilter: (ev) => this.handleChangeFilterAssistentMode(ev.detail) })), index.h("stack-item", null, index.h("snk-filter-advanced-mode", { ref: (ref) => this._elAdvancedMode = ref, filterAssistent: this._filterAssistent, application: this._application, onEzExpressionChange: (ev) => this.handleExpressionChangeAdvancedMode(ev.detail) }))));
250
+ }
251
+ handleModeChange() {
252
+ var _a, _b;
190
253
  if (this._filterAssistentMode) {
191
- return (index.h(index.Fragment, null, index.h("div", { class: "ez-padding-top--small snk-personalized-filter__group" }, index.h("snk-expression-group", { ref: (el) => this._mainExpressionGroup = el, group: (_a = this._filterAssistent) === null || _a === void 0 ? void 0 : _a.assistent, messagesBuilder: this.messagesBuilder, onEzFilterGroupChange: this.handleFilterGroupChange.bind(this), filterId: this.filterId, entityURI: this.entityUri })), index.h("div", null, index.h("div", { class: "snk-personalized-filter__expression-input--line" }), index.h("ez-collapsible-box", { label: this.getMessage("snkPersonalizedFilter.info.titleCollapsible"), headerSize: "medium", value: true }, index.h("div", { class: "ez-box" }, index.h("div", { class: "ez-box__container" }, index.h("ez-text-area", { ref: (el) => this._elTextAreaExpression = el, enabled: false, label: this.getMessage("snkPersonalizedFilter.info.labelExpression"), value: (_b = this._filterAssistent) === null || _b === void 0 ? void 0 : _b.expression })))))));
254
+ utils.ApplicationUtils.confirm(this.getMessage("snkPersonalizedFilter.confirmChangeModeAssistent.title"), this.getMessage("snkPersonalizedFilter.confirmChangeModeAssistent.description"))
255
+ .then((canCancel) => {
256
+ if (!canCancel)
257
+ return;
258
+ this._filterAssistentMode = !this._filterAssistentMode;
259
+ if (!this.hasChangesToSave()) {
260
+ const expression = PersonalizedFilterUtils.PersonalizedFilterUtils.buildGroupExpression(this._filterAssistent.assistent);
261
+ this._filterAssistent.expression = expression;
262
+ this._elButtonSave.enabled = !this.hasChangesToSave();
263
+ }
264
+ });
192
265
  }
193
266
  else {
194
- return (index.h(index.Fragment, null, index.h("span", { class: "ez-text ez-text--small ez-text--bold ez-padding-bottom--medium" }, this.getMessage("snkPersonalizedFilter.info.applyExpression")), index.h("ez-text-area", { label: this.getMessage("snkPersonalizedFilter.info.labelExpression"), value: (_c = this._filterAssistent) === null || _c === void 0 ? void 0 : _c.expression, onEzChange: (evt) => this.handleExpressionChange(evt.detail) }), this.getWarningMessageComponent()));
267
+ if (((_a = this._filterAssistent) === null || _a === void 0 ? void 0 : _a.expression) === ((_b = this._originalFilterAssistent) === null || _b === void 0 ? void 0 : _b.expression)) {
268
+ this._filterAssistentMode = !this._filterAssistentMode;
269
+ }
270
+ else {
271
+ const expressionBefore = this._filterAssistent.expression;
272
+ const expression = PersonalizedFilterUtils.PersonalizedFilterUtils.buildGroupExpression(this._filterAssistent.assistent);
273
+ if (expressionBefore !== expression) {
274
+ utils.ApplicationUtils.confirm(this.getMessage("snkPersonalizedFilter.confirmChangeModeAdvanced.title"), this.getMessage("snkPersonalizedFilter.confirmChangeModeAdvanced.description"))
275
+ .then((canCancel) => {
276
+ if (!canCancel)
277
+ return;
278
+ this._filterAssistent = Object.assign(Object.assign({}, this._filterAssistent), { expression });
279
+ this._filterAssistentMode = !this._filterAssistentMode;
280
+ });
281
+ }
282
+ else {
283
+ this._filterAssistentMode = !this._filterAssistentMode;
284
+ }
285
+ }
195
286
  }
196
287
  }
197
288
  render() {
198
- var _a, _b;
289
+ var _a, _b, _c, _d;
199
290
  if (!((_a = this._filterAssistent) === null || _a === void 0 ? void 0 : _a.assistent) && this._filterAssistentMode) {
200
291
  return;
201
292
  }
202
- return (index.h(index.Host, null, index.h("div", { class: "snk-personalized-filter" }, index.h("div", null, index.h("snk-simple-bar", { label: this.filterId ? this.getMessage("snkPersonalizedFilter.info.titleEdit") : this.getMessage("snkPersonalizedFilter.info.titleAdd"), onExit: () => this.handleCancel() }, index.h("div", { class: "snk-personalized-filter__header-actions", slot: "rightSlot" }, index.h("ez-button", { size: "small", label: this.getMessage("snkPersonalizedFilter.info.labelCancel"), onClick: () => this.handleCancel() }), index.h("ez-button", { size: "small", ref: (el) => this._elButtonSave = el, enabled: false, class: "ez-button--primary", label: this.getMessage("snkPersonalizedFilter.info.labelSave"), onClick: this.handleSave.bind(this) })))), index.h("div", { class: "ez-box ez-margin-bottom--medium ez-box__main" }, index.h("div", { class: "ez-box__container" }, index.h("div", { class: "ez-flex ez-flex--column ez-size-width--full" }, index.h("div", { class: "ez-flex" }, index.h("ez-text-input", { class: "ez-padding-right--medium", label: this.getMessage("snkPersonalizedFilter.info.labelNameFilter"), value: (_b = this._filterAssistent) === null || _b === void 0 ? void 0 : _b.name, onEzChange: (evt) => this.handleTitleChange(evt.detail) })), this.buildContainerPersonalizedFilter()))))));
293
+ return (index.h(index.Host, null, index.h("div", { class: "snk-personalized-filter" }, index.h("div", null, index.h("snk-simple-bar", { label: this.filterId ? this.getMessage("snkPersonalizedFilter.info.titleEdit") : this.getMessage("snkPersonalizedFilter.info.titleAdd"), onExit: () => this.handleCancel() }, index.h("div", { class: "snk-personalized-filter__header-actions", slot: "rightSlot" }, index.h("ez-button", { size: "small", label: this.getMessage("snkPersonalizedFilter.info.labelCancel"), onClick: () => this.handleCancel() }), index.h("ez-button", { size: "small", ref: (el) => this._elButtonSave = el, enabled: false, class: "ez-button--primary", label: this.getMessage("snkPersonalizedFilter.info.labelSave"), onClick: this.handleSave.bind(this) })))), index.h("div", { class: "ez-box ez-margin-bottom--medium ez-box__main" }, index.h("div", { class: "ez-box__container" }, index.h("div", { class: "ez-flex ez-flex--column ez-size-width--full" }, index.h("div", { class: "ez-flex" }, index.h("ez-text-input", { class: "ez-padding-right--medium", label: this.getMessage("snkPersonalizedFilter.info.labelNameFilter"), value: (_b = this._filterAssistent) === null || _b === void 0 ? void 0 : _b.name, onEzChange: (evt) => this.handleTitleChange(evt.detail) }), this.renderButtonAddField(), index.h("ez-button", { ref: (el) => this._elButtonMode = el, class: "snk-personalized-filter__button-mode", label: this._filterAssistentMode ? this.getMessage("snkPersonalizedFilter.info.activeModeAdvanced") : this.getMessage("snkPersonalizedFilter.info.activeModeAssistent"), onClick: () => this.handleModeChange(), "data-tooltip": !(this._filterAssistentMode || ((_c = this._filterAssistent) === null || _c === void 0 ? void 0 : _c.assistent)) ? this.getMessage("snkPersonalizedFilter.info.tooltipDisabledAssistentMode") : undefined, "data-flow": "bottom", enabled: (!this._filterAssistent.name || Boolean(this._filterAssistentMode || ((_d = this._filterAssistent) === null || _d === void 0 ? void 0 : _d.assistent))) })), this.buildContainerPersonalizedFilter()))))));
203
294
  }
204
295
  static get watchers() { return {
205
296
  "filterId": ["loadFilter"]
@@ -298,7 +298,7 @@ const SnkSimpleCrud = class {
298
298
  this.dataState = Object.assign({}, evt.detail);
299
299
  }
300
300
  getTaskBarDisabledButtons() {
301
- var _a, _b;
301
+ var _a, _b, _c, _d;
302
302
  const disabledButtons = [];
303
303
  if (!((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.hasNext)) {
304
304
  disabledButtons.push(taskbarElements.TaskbarElement.NEXT);
@@ -306,11 +306,21 @@ const SnkSimpleCrud = class {
306
306
  if (!((_b = this.dataState) === null || _b === void 0 ? void 0 : _b.hasPrevious)) {
307
307
  disabledButtons.push(taskbarElements.TaskbarElement.PREVIOUS);
308
308
  }
309
+ if ((_d = (_c = this.dataState) === null || _c === void 0 ? void 0 : _c.selectionInfo) === null || _d === void 0 ? void 0 : _d.isEmpty()) {
310
+ disabledButtons.push(taskbarElements.TaskbarElement.FORM_MODE);
311
+ }
309
312
  return disabledButtons;
310
313
  }
314
+ handleCancelEdit() {
315
+ var _a;
316
+ if ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.recordsIsEmpty) {
317
+ this.goToView(constants$1.VIEW_MODE.GRID);
318
+ this.dataUnit.clearSelection();
319
+ }
320
+ }
311
321
  render() {
312
322
  var _a;
313
- return (index.h("snk-data-unit", { class: "simple-crud__container", dataUnit: this.dataUnit, useCancelConfirm: this.useCancelConfirm, onDataStateChange: evt => this.onDataStateChange(evt), onInsertionMode: () => this.goToView(constants$1.VIEW_MODE.FORM), onDataUnitReady: (evt) => this.dataUnitReady.emit(evt.detail), onMessagesBuilderUpdated: evt => this.messagesBuilder = evt.detail }, index.h("header", null, index.h("slot", { name: "snkSimpleCrudHeader" })), index.h("section", { class: "ez-flex ez-box ez-box--shadow" }, index.h("snk-taskbar", { class: "ez-box ez-box--shadow ez-padding--medium ez-margin-bottom--large", dataUnit: this.dataUnit, primaryButton: ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "SAVE" : "INSERT", "data-element-id": "grid_left", messagesBuilder: this.messagesBuilder, buttons: this._taskbarProcessor.buttons, disabledButtons: this._taskbarProcessor.disabledButtons, customButtons: this._taskbarProcessor.customButtons, slot: "leftButtons", presentationMode: index$1.PresentationMode.SECONDARY }), index.h("ez-view-stack", { class: "ez-flex ez-flex--column", ref: (ref) => this._viewStack = ref, "data-element-id": "simple-crud" }, index.h("stack-item", null, index.h("ez-grid", { dataUnit: this.dataUnit, config: this.gridConfig, "no-header": true, multipleSelection: this.multipleSelection, onEzDoubleClick: () => this.goToView(constants$1.VIEW_MODE.FORM), columnfilterDataSource: this._multiSelectionListDataSource }, index.h("div", { slot: "footer" }, index.h("slot", { name: "snkSimpleCrudFooter" })))), index.h("stack-item", null, index.h("ez-form", { dataUnit: this.dataUnit, config: this.formConfig }))))));
323
+ return (index.h("snk-data-unit", { class: "simple-crud__container", dataUnit: this.dataUnit, useCancelConfirm: this.useCancelConfirm, onDataStateChange: evt => this.onDataStateChange(evt), onCancelEdition: this.handleCancelEdit.bind(this), onInsertionMode: () => this.goToView(constants$1.VIEW_MODE.FORM), onDataUnitReady: (evt) => this.dataUnitReady.emit(evt.detail), onMessagesBuilderUpdated: evt => this.messagesBuilder = evt.detail }, index.h("header", null, index.h("slot", { name: "snkSimpleCrudHeader" })), index.h("section", { class: "ez-flex ez-box ez-box--shadow" }, index.h("snk-taskbar", { class: "ez-box ez-box--shadow ez-padding--medium ez-margin-bottom--large", dataUnit: this.dataUnit, primaryButton: ((_a = this.dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "SAVE" : "INSERT", "data-element-id": "grid_left", messagesBuilder: this.messagesBuilder, buttons: this._taskbarProcessor.buttons, disabledButtons: this._taskbarProcessor.disabledButtons, customButtons: this._taskbarProcessor.customButtons, slot: "leftButtons", presentationMode: index$1.PresentationMode.SECONDARY }), index.h("ez-view-stack", { class: "ez-flex ez-flex--column", ref: (ref) => this._viewStack = ref, "data-element-id": "simple-crud" }, index.h("stack-item", null, index.h("ez-grid", { dataUnit: this.dataUnit, config: this.gridConfig, "no-header": true, multipleSelection: this.multipleSelection, onEzDoubleClick: () => this.goToView(constants$1.VIEW_MODE.FORM), columnfilterDataSource: this._multiSelectionListDataSource }, index.h("div", { slot: "footer" }, index.h("slot", { name: "snkSimpleCrudFooter" })))), index.h("stack-item", null, index.h("ez-form", { dataUnit: this.dataUnit, config: this.formConfig }))))));
314
324
  }
315
325
  get _element() { return index.getElement(this); }
316
326
  static get watchers() { return {
@@ -41,6 +41,8 @@
41
41
  "./components/snk-personalized-filter/snk-personalized-filter.js",
42
42
  "./components/snk-personalized-filter/subcomponents/snk-expression-group/snk-expression-group.js",
43
43
  "./components/snk-personalized-filter/subcomponents/snk-expression-item/snk-expression-item.js",
44
+ "./components/snk-personalized-filter/subcomponents/snk-filter-advanced-mode/snk-filter-advanced-mode.js",
45
+ "./components/snk-personalized-filter/subcomponents/snk-filter-assistent-mode/snk-filter-assistent-mode.js",
44
46
  "./components/snk-personalized-filter/subcomponents/snk-filter-param-config/snk-filter-param-config.js",
45
47
  "./components/snk-pesquisa/snk-pesquisa.js",
46
48
  "./components/snk-print-selector/snk-print-selector.js",
@@ -282,7 +282,8 @@ export class SnkDataUnit {
282
282
  hasDirtyRecords: this.dataUnit.hasDirtyRecords(),
283
283
  selectedRecords: undefined,
284
284
  selectionInfo,
285
- selectedRecord: this.dataUnit.getSelectedRecord()
285
+ selectedRecord: this.dataUnit.getSelectedRecord(),
286
+ recordsIsEmpty: this.dataUnit.records.length === 0
286
287
  });
287
288
  }
288
289
  /**
@@ -767,6 +768,7 @@ class DataStateImpl {
767
768
  this.hasPrevious = datastate.hasPrevious;
768
769
  this.selectionInfo = datastate.selectionInfo;
769
770
  this.selectedRecord = datastate.selectedRecord;
771
+ this.recordsIsEmpty = datastate.recordsIsEmpty;
770
772
  }
771
773
  get selectedRecords() {
772
774
  var _a;
@@ -224,7 +224,7 @@ export class SnkFilterBar {
224
224
  loadConfigFromStorage() {
225
225
  return new Promise(accept => {
226
226
  ConfigStorage.get().then(instance => {
227
- instance.loadFilterBarConfig(this.configName)
227
+ instance.loadFilterBarConfig(this.configName, { contextURI: this.dataUnit.name })
228
228
  .then((filters) => {
229
229
  accept();
230
230
  this.filterConfig = filters.map(item => this.normalizeItem(item));
@@ -235,6 +235,12 @@ export class SnkGrid {
235
235
  this._snkDataUnit.addEventListener("dataStateChange", (evt) => {
236
236
  this._dataState = evt.detail;
237
237
  });
238
+ this._snkDataUnit.addEventListener("cancelEdition", () => {
239
+ var _a;
240
+ if ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.recordsIsEmpty) {
241
+ this._dataUnit.clearSelection();
242
+ }
243
+ });
238
244
  break;
239
245
  }
240
246
  parent = parent.parentElement;
@@ -38,4 +38,8 @@
38
38
 
39
39
  .ez-box__main {
40
40
  height: 90%;
41
- }
41
+ }
42
+
43
+ .snk-personalized-filter__button-mode{
44
+ height: 35px;
45
+ }
@@ -3,7 +3,7 @@ import { ApplicationContext, StringUtils } from '@sankhyalabs/core';
3
3
  import { PersonalizedFilterUtils } from './subcomponents/snk-filter-param-config/utils/PersonalizedFilterUtils';
4
4
  import { ConfigStorage } from "../../lib/configs/ConfigStorage";
5
5
  import { ApplicationUtils } from "@sankhyalabs/ezui/dist/collection/utils";
6
- import { ObjectUtils } from "@sankhyalabs/core";
6
+ import { ObjectUtils, ElementIDUtils } from "@sankhyalabs/core";
7
7
  import { FilterGroupCondition } from './interfaces/IExpressionItem';
8
8
  import store from '../../lib/store';
9
9
  import PersonalizedFilterFetcher from "../../lib/http/data-fetcher/fetchers/personalized-filter-fetcher";
@@ -90,6 +90,13 @@ export class SnkPersonalizedFilter {
90
90
  }
91
91
  this.loadFilter(this.filterId, undefined);
92
92
  }
93
+ componentDidRender() {
94
+ var _a;
95
+ (_a = this._viewStackRef) === null || _a === void 0 ? void 0 : _a.show(this._filterAssistentMode ? 0 : 1);
96
+ if (this._elButtonMode) {
97
+ this._elButtonMode.setAttribute(ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME, ElementIDUtils.getInternalIDInfo(`${this._filterAssistentMode ? "advancedMode_ezButton" : "assistentMode_ezButton"}`));
98
+ }
99
+ }
93
100
  getMessage(key, params) {
94
101
  return this._application.messagesBuilder.getMessage(key, params);
95
102
  }
@@ -107,26 +114,55 @@ export class SnkPersonalizedFilter {
107
114
  removeFilter() {
108
115
  ConfigStorage.removePersonalizedFilter(this._filterAssistent, this.configName);
109
116
  }
110
- async handleFilterGroupChange() {
111
- const assistent = await this._mainExpressionGroup.getExpressionGroup();
112
- this._filterAssistent = Object.assign(Object.assign({}, this._filterAssistent), { assistent });
113
- this._filterAssistent.parameters = PersonalizedFilterUtils.buildVariableParameters(this._filterAssistent.assistent);
114
- this._elTextAreaExpression.value = PersonalizedFilterUtils.buildGroupExpression(this._filterAssistent.assistent, true);
115
- this._elButtonSave.enabled = !this.hasChangesToSave();
116
- }
117
117
  hasChangesToSave() {
118
118
  return JSON.stringify(this._filterAssistent) === JSON.stringify(this._originalFilterAssistent);
119
119
  }
120
- handleSave() {
120
+ async handleSave() {
121
+ if (this._filterAssistentMode) {
122
+ const isValid = PersonalizedFilterUtils.validateFields(this._filterAssistent.assistent);
123
+ if (!isValid || !this._filterAssistent.name)
124
+ return this._application.error(this.getMessage("snkPersonalizedFilter.error.title"), this.getMessage("snkPersonalizedFilter.error.description"));
125
+ this.saveAssistentMode();
126
+ }
127
+ else {
128
+ if (!this._filterAssistent.expression || !this._filterAssistent.name)
129
+ return this._application.error(this.getMessage("snkPersonalizedFilter.error.title"), this.getMessage("snkPersonalizedFilter.error.description"));
130
+ const isValidExpressionForAdvancedMode = await this.validateExpressionBeforeSaving();
131
+ if (!isValidExpressionForAdvancedMode)
132
+ return;
133
+ this.saveAdvancedMode();
134
+ }
135
+ }
136
+ saveAssistentMode() {
121
137
  const { assistent, expression } = this._filterAssistent;
122
- const isValid = PersonalizedFilterUtils.validateFields(assistent);
123
- if (!isValid || !this._filterAssistent.name)
124
- return this._application.error(this.getMessage("snkPersonalizedFilter.error.title"), this.getMessage("snkPersonalizedFilter.error.description"));
125
138
  const expressionQuery = !!assistent ? PersonalizedFilterUtils.buildGroupExpression(assistent) : expression;
126
139
  this._filterAssistent.expression = expressionQuery;
127
140
  this.ezSave.emit(expressionQuery);
128
141
  this.saveFilter();
129
142
  }
143
+ saveAdvancedMode() {
144
+ if (this._filterAssistent.assistent) {
145
+ ApplicationUtils.confirm(this.getMessage("snkPersonalizedFilter.confirmSaveModeAdvanced.title"), this.getMessage("snkPersonalizedFilter.confirmSaveModeAdvanced.description"))
146
+ .then((confirm) => {
147
+ if (!confirm)
148
+ return;
149
+ this.saveAndTransformToAdvancedMode();
150
+ });
151
+ }
152
+ else {
153
+ this.saveAndTransformToAdvancedMode();
154
+ }
155
+ }
156
+ saveAndTransformToAdvancedMode() {
157
+ this._filterAssistent.assistent = undefined;
158
+ this.ezSave.emit(this._filterAssistent.expression);
159
+ this.saveFilter();
160
+ }
161
+ async validateExpressionBeforeSaving() {
162
+ const { valid, message } = await this._personalizedFilterFetcher.validatePersonalizedFilter(this.entityUri, this._filterAssistent.expression);
163
+ valid || this._application.error(this.getMessage("snkPersonalizedFilter.error.title"), message);
164
+ return valid;
165
+ }
130
166
  handleCancel() {
131
167
  if (this.hasChangesToSave()) {
132
168
  return this.ezCancel.emit();
@@ -160,32 +196,87 @@ export class SnkPersonalizedFilter {
160
196
  }
161
197
  return resp;
162
198
  }
163
- handleExpressionChange(expression) {
199
+ handleExpressionChangeAdvancedMode(expression) {
164
200
  this._filterAssistent = Object.assign(Object.assign({}, this._filterAssistent), { expression });
165
201
  this._elButtonSave.enabled = !this.hasChangesToSave();
166
202
  }
167
- getWarningMessageComponent() {
168
- var _a;
169
- if (StringUtils.isEmpty((_a = this._filterAssistent) === null || _a === void 0 ? void 0 : _a.warningMessage)) {
170
- return undefined;
203
+ handleChangeFilterAssistentMode(filterAssistent) {
204
+ this._elButtonSave.enabled = !this.hasChangesToSave();
205
+ this._filterAssistent = Object.assign({}, filterAssistent);
206
+ }
207
+ selectField(fieldName) {
208
+ if (!('name' in fieldName))
209
+ return;
210
+ const fieldExpression = this.buildExpression(fieldName.entityName, fieldName.name, fieldName.entityPath);
211
+ const textAreaElement = this._elAdvancedMode.querySelector('ez-text-area');
212
+ textAreaElement.appendTextToSelection(fieldExpression);
213
+ }
214
+ buildExpression(entityName, fieldName, entityPath) {
215
+ if (entityPath.length > 0) {
216
+ entityPath.shift();
171
217
  }
172
- return (h("div", { class: "ez-flex" }, h("ez-alert", { alertType: "warn" }, this._filterAssistent.warningMessage)));
218
+ return entityPath.length > 0 ? `${entityPath.join("->")}->${fieldName}` : `${entityName}.${fieldName}`;
219
+ }
220
+ onAddField(target) {
221
+ const textAreaElement = this._elAdvancedMode.querySelector('ez-text-area');
222
+ const options = { horizontalGap: 0, verticalGap: 12, fromRight: true };
223
+ textAreaElement.setFocus();
224
+ target.setBlur();
225
+ if (this._elFilterFieldSearch)
226
+ this._elFilterFieldSearch.show(target, options);
227
+ }
228
+ renderButtonAddField() {
229
+ if (this._filterAssistentMode)
230
+ return;
231
+ return (h(Fragment, null, h("ez-button", { class: "snk-personalized-filter__button-mode", label: this.getMessage("snkPersonalizedFilter.info.addField"), enabled: true, onClick: (evt) => this.onAddField(evt.target) }, h("ez-icon", { class: "ez-padding-right--small", slot: "leftIcon", iconName: "plus" })), h("snk-filter-field-search", { class: "ez-padding-left--medium", ref: ref => this._elFilterFieldSearch = ref, onEzSelectFilterItem: (evt) => this.selectField(evt.detail), fieldsDataSource: this._dataSourceFetcher })));
173
232
  }
174
233
  buildContainerPersonalizedFilter() {
175
- var _a, _b, _c;
234
+ return (h("ez-view-stack", { ref: (ref) => this._viewStackRef = ref }, h("stack-item", null, this._filterAssistentMode &&
235
+ h("snk-filter-assistent-mode", { filterAssistent: this._filterAssistent, messagesBuilder: this.messagesBuilder, filterId: this.filterId, entityUri: this.entityUri, application: this._application, onEzChangeFilter: (ev) => this.handleChangeFilterAssistentMode(ev.detail) })), h("stack-item", null, h("snk-filter-advanced-mode", { ref: (ref) => this._elAdvancedMode = ref, filterAssistent: this._filterAssistent, application: this._application, onEzExpressionChange: (ev) => this.handleExpressionChangeAdvancedMode(ev.detail) }))));
236
+ }
237
+ handleModeChange() {
238
+ var _a, _b;
176
239
  if (this._filterAssistentMode) {
177
- return (h(Fragment, null, h("div", { class: "ez-padding-top--small snk-personalized-filter__group" }, h("snk-expression-group", { ref: (el) => this._mainExpressionGroup = el, group: (_a = this._filterAssistent) === null || _a === void 0 ? void 0 : _a.assistent, messagesBuilder: this.messagesBuilder, onEzFilterGroupChange: this.handleFilterGroupChange.bind(this), filterId: this.filterId, entityURI: this.entityUri })), h("div", null, h("div", { class: "snk-personalized-filter__expression-input--line" }), h("ez-collapsible-box", { label: this.getMessage("snkPersonalizedFilter.info.titleCollapsible"), headerSize: "medium", value: true }, h("div", { class: "ez-box" }, h("div", { class: "ez-box__container" }, h("ez-text-area", { ref: (el) => this._elTextAreaExpression = el, enabled: false, label: this.getMessage("snkPersonalizedFilter.info.labelExpression"), value: (_b = this._filterAssistent) === null || _b === void 0 ? void 0 : _b.expression })))))));
240
+ ApplicationUtils.confirm(this.getMessage("snkPersonalizedFilter.confirmChangeModeAssistent.title"), this.getMessage("snkPersonalizedFilter.confirmChangeModeAssistent.description"))
241
+ .then((canCancel) => {
242
+ if (!canCancel)
243
+ return;
244
+ this._filterAssistentMode = !this._filterAssistentMode;
245
+ if (!this.hasChangesToSave()) {
246
+ const expression = PersonalizedFilterUtils.buildGroupExpression(this._filterAssistent.assistent);
247
+ this._filterAssistent.expression = expression;
248
+ this._elButtonSave.enabled = !this.hasChangesToSave();
249
+ }
250
+ });
178
251
  }
179
252
  else {
180
- return (h(Fragment, null, h("span", { class: "ez-text ez-text--small ez-text--bold ez-padding-bottom--medium" }, this.getMessage("snkPersonalizedFilter.info.applyExpression")), h("ez-text-area", { label: this.getMessage("snkPersonalizedFilter.info.labelExpression"), value: (_c = this._filterAssistent) === null || _c === void 0 ? void 0 : _c.expression, onEzChange: (evt) => this.handleExpressionChange(evt.detail) }), this.getWarningMessageComponent()));
253
+ if (((_a = this._filterAssistent) === null || _a === void 0 ? void 0 : _a.expression) === ((_b = this._originalFilterAssistent) === null || _b === void 0 ? void 0 : _b.expression)) {
254
+ this._filterAssistentMode = !this._filterAssistentMode;
255
+ }
256
+ else {
257
+ const expressionBefore = this._filterAssistent.expression;
258
+ const expression = PersonalizedFilterUtils.buildGroupExpression(this._filterAssistent.assistent);
259
+ if (expressionBefore !== expression) {
260
+ ApplicationUtils.confirm(this.getMessage("snkPersonalizedFilter.confirmChangeModeAdvanced.title"), this.getMessage("snkPersonalizedFilter.confirmChangeModeAdvanced.description"))
261
+ .then((canCancel) => {
262
+ if (!canCancel)
263
+ return;
264
+ this._filterAssistent = Object.assign(Object.assign({}, this._filterAssistent), { expression });
265
+ this._filterAssistentMode = !this._filterAssistentMode;
266
+ });
267
+ }
268
+ else {
269
+ this._filterAssistentMode = !this._filterAssistentMode;
270
+ }
271
+ }
181
272
  }
182
273
  }
183
274
  render() {
184
- var _a, _b;
275
+ var _a, _b, _c, _d;
185
276
  if (!((_a = this._filterAssistent) === null || _a === void 0 ? void 0 : _a.assistent) && this._filterAssistentMode) {
186
277
  return;
187
278
  }
188
- return (h(Host, null, h("div", { class: "snk-personalized-filter" }, h("div", null, h("snk-simple-bar", { label: this.filterId ? this.getMessage("snkPersonalizedFilter.info.titleEdit") : this.getMessage("snkPersonalizedFilter.info.titleAdd"), onExit: () => this.handleCancel() }, h("div", { class: "snk-personalized-filter__header-actions", slot: "rightSlot" }, h("ez-button", { size: "small", label: this.getMessage("snkPersonalizedFilter.info.labelCancel"), onClick: () => this.handleCancel() }), h("ez-button", { size: "small", ref: (el) => this._elButtonSave = el, enabled: false, class: "ez-button--primary", label: this.getMessage("snkPersonalizedFilter.info.labelSave"), onClick: this.handleSave.bind(this) })))), h("div", { class: "ez-box ez-margin-bottom--medium ez-box__main" }, h("div", { class: "ez-box__container" }, h("div", { class: "ez-flex ez-flex--column ez-size-width--full" }, h("div", { class: "ez-flex" }, h("ez-text-input", { class: "ez-padding-right--medium", label: this.getMessage("snkPersonalizedFilter.info.labelNameFilter"), value: (_b = this._filterAssistent) === null || _b === void 0 ? void 0 : _b.name, onEzChange: (evt) => this.handleTitleChange(evt.detail) })), this.buildContainerPersonalizedFilter()))))));
279
+ return (h(Host, null, h("div", { class: "snk-personalized-filter" }, h("div", null, h("snk-simple-bar", { label: this.filterId ? this.getMessage("snkPersonalizedFilter.info.titleEdit") : this.getMessage("snkPersonalizedFilter.info.titleAdd"), onExit: () => this.handleCancel() }, h("div", { class: "snk-personalized-filter__header-actions", slot: "rightSlot" }, h("ez-button", { size: "small", label: this.getMessage("snkPersonalizedFilter.info.labelCancel"), onClick: () => this.handleCancel() }), h("ez-button", { size: "small", ref: (el) => this._elButtonSave = el, enabled: false, class: "ez-button--primary", label: this.getMessage("snkPersonalizedFilter.info.labelSave"), onClick: this.handleSave.bind(this) })))), h("div", { class: "ez-box ez-margin-bottom--medium ez-box__main" }, h("div", { class: "ez-box__container" }, h("div", { class: "ez-flex ez-flex--column ez-size-width--full" }, h("div", { class: "ez-flex" }, h("ez-text-input", { class: "ez-padding-right--medium", label: this.getMessage("snkPersonalizedFilter.info.labelNameFilter"), value: (_b = this._filterAssistent) === null || _b === void 0 ? void 0 : _b.name, onEzChange: (evt) => this.handleTitleChange(evt.detail) }), this.renderButtonAddField(), h("ez-button", { ref: (el) => this._elButtonMode = el, class: "snk-personalized-filter__button-mode", label: this._filterAssistentMode ? this.getMessage("snkPersonalizedFilter.info.activeModeAdvanced") : this.getMessage("snkPersonalizedFilter.info.activeModeAssistent"), onClick: () => this.handleModeChange(), "data-tooltip": !(this._filterAssistentMode || ((_c = this._filterAssistent) === null || _c === void 0 ? void 0 : _c.assistent)) ? this.getMessage("snkPersonalizedFilter.info.tooltipDisabledAssistentMode") : undefined, "data-flow": "bottom", enabled: (!this._filterAssistent.name || Boolean(this._filterAssistentMode || ((_d = this._filterAssistent) === null || _d === void 0 ? void 0 : _d.assistent))) })), this.buildContainerPersonalizedFilter()))))));
189
280
  }
190
281
  static get is() { return "snk-personalized-filter"; }
191
282
  static get encapsulation() { return "scoped"; }