@sankhyalabs/sankhyablocks 8.15.0-rc.1 → 8.15.0-rc.11

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 (216) hide show
  1. package/dist/cjs/{ConfigStorage-302bbbd4.js → ConfigStorage-34be11ce.js} +70 -7
  2. package/dist/cjs/{DataFetcher-ba94ed5b.js → DataFetcher-99f0f6ed.js} +5 -3
  3. package/dist/cjs/{SnkFormConfigManager-71c4768e.js → SnkFormConfigManager-531a191c.js} +21 -13
  4. package/dist/cjs/{SnkMessageBuilder-e7dcf408.js → SnkMessageBuilder-141aa18d.js} +2 -1
  5. package/dist/cjs/SnkMultiSelectionListDataSource-5213120b.js +140 -0
  6. package/dist/cjs/{auth-fetcher-c8467c07.js → auth-fetcher-5161d082.js} +1 -1
  7. package/dist/cjs/{form-config-fetcher-df043d3d.js → form-config-fetcher-9f1a13ca.js} +1 -1
  8. package/dist/cjs/index-f9e81701.js +2 -10
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/{pesquisa-fetcher-e4a7c4c3.js → pesquisa-fetcher-94f6b316.js} +235 -24
  11. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  12. package/dist/cjs/{snk-actions-button_2.cjs.entry.js → snk-actions-button_4.cjs.entry.js} +520 -5
  13. package/dist/cjs/snk-application.cjs.entry.js +34 -8
  14. package/dist/cjs/snk-attach.cjs.entry.js +7 -8
  15. package/dist/cjs/snk-crud.cjs.entry.js +16 -10
  16. package/dist/cjs/snk-data-exporter.cjs.entry.js +8 -4
  17. package/dist/cjs/{snk-data-unit-82c08a8c.js → snk-data-unit-6026a9f7.js} +1 -1
  18. package/dist/cjs/snk-data-unit.cjs.entry.js +2 -2
  19. package/dist/cjs/snk-detail-view.cjs.entry.js +9 -10
  20. package/dist/cjs/snk-entity-list.cjs.entry.js +5 -3
  21. package/dist/cjs/snk-filter-bar.cjs.entry.js +36 -7
  22. package/dist/cjs/snk-filter-modal-item.cjs.entry.js +3 -3
  23. package/dist/cjs/snk-form-config.cjs.entry.js +47 -27
  24. package/dist/cjs/snk-form.cjs.entry.js +11 -4
  25. package/dist/cjs/snk-grid.cjs.entry.js +40 -22
  26. package/dist/cjs/{snk-guides-viewer-d32c096f.js → snk-guides-viewer-76b4c346.js} +15 -9
  27. package/dist/cjs/snk-guides-viewer.cjs.entry.js +7 -8
  28. package/dist/cjs/snk-personalized-filter-editor.cjs.entry.js +3 -1
  29. package/dist/cjs/snk-personalized-filter.cjs.entry.js +3 -3
  30. package/dist/cjs/snk-simple-crud.cjs.entry.js +215 -23
  31. package/dist/cjs/snk-taskbar.cjs.entry.js +100 -14
  32. package/dist/cjs/{taskbar-elements-01b85b99.js → taskbar-elements-3ecd1278.js} +9 -9
  33. package/dist/collection/collection-manifest.json +6 -6
  34. package/dist/collection/components/snk-application/__mocks__/snk-application.js +7 -0
  35. package/dist/collection/components/snk-application/snk-application.js +51 -11
  36. package/dist/collection/components/snk-crud/snk-crud.js +95 -3
  37. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.js +2 -2
  38. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.css +11 -2
  39. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +27 -3
  40. package/dist/collection/components/snk-data-exporter/snk-data-exporter.js +5 -1
  41. package/dist/collection/components/snk-entity-list/snk-entity-list.js +5 -3
  42. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-personalized-filter-editor/snk-personalized-filter-editor.js +3 -1
  43. package/dist/collection/components/snk-filter-bar/snk-filter-bar.css +23 -1
  44. package/dist/collection/components/snk-filter-bar/snk-filter-bar.js +116 -4
  45. package/dist/collection/components/snk-form/snk-form.js +25 -1
  46. package/dist/collection/components/{snk-form → snk-form-config}/SnkFormConfigManager.js +20 -12
  47. package/dist/collection/components/{snk-form/subcomponents/snk-form-config → snk-form-config}/snk-form-config.js +50 -30
  48. package/dist/collection/components/snk-grid/snk-grid.js +103 -16
  49. package/dist/collection/components/{snk-grid/subcomponents/snk-grid-config → snk-grid-config}/snk-grid-config.js +130 -123
  50. package/dist/collection/components/{snk-grid/subcomponents → snk-grid-config}/snk-select-box/snk-select-box.js +1 -1
  51. package/dist/collection/components/snk-simple-crud/regular-buttons.js +3 -0
  52. package/dist/collection/components/snk-simple-crud/snk-simple-crud.css +5 -0
  53. package/dist/collection/components/snk-simple-crud/snk-simple-crud.js +344 -17
  54. package/dist/collection/components/snk-taskbar/elements/taskbar-actions-button/taskbar-actions-button.js +1 -1
  55. package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +9 -9
  56. package/dist/collection/components/snk-taskbar/snk-taskbar.css +17 -0
  57. package/dist/collection/components/snk-taskbar/snk-taskbar.js +139 -13
  58. package/dist/collection/lib/configs/ConfigStorage.js +63 -3
  59. package/dist/collection/lib/http/data-fetcher/DataFetcher.js +5 -3
  60. package/dist/collection/lib/http/data-fetcher/fetchers/parameters-fecher.js +21 -0
  61. package/dist/collection/lib/http/data-fetcher/fetchers/personalized-filter-fetcher.js +6 -3
  62. package/dist/collection/lib/http/data-fetcher/fetchers/pesquisa-fetcher.js +4 -11
  63. package/dist/collection/lib/message/resources/snk-data-exporter.msg.js +2 -1
  64. package/dist/collection/lib/utils/CrudUtils.js +13 -1
  65. package/dist/components/ConfigStorage.js +68 -5
  66. package/dist/components/DataFetcher.js +5 -3
  67. package/dist/components/SnkFormConfigManager.js +19 -11
  68. package/dist/components/SnkMessageBuilder.js +2 -1
  69. package/dist/components/dataunit-fetcher.js +4 -11
  70. package/dist/components/field-search.js +93 -3
  71. package/dist/components/index.d.ts +6 -6
  72. package/dist/components/snk-application2.js +30 -1
  73. package/dist/components/snk-attach2.js +54 -12
  74. package/dist/components/snk-crud.js +15 -3
  75. package/dist/components/snk-data-exporter2.js +5 -1
  76. package/dist/components/snk-detail-view2.js +40 -7
  77. package/dist/components/snk-entity-list.js +5 -3
  78. package/dist/components/snk-filter-bar2.js +38 -5
  79. package/dist/components/snk-form-config2.js +46 -26
  80. package/dist/components/snk-form.js +8 -0
  81. package/dist/components/snk-grid-config2.js +128 -102
  82. package/dist/components/snk-grid2.js +41 -17
  83. package/dist/components/snk-personalized-filter-editor.js +3 -1
  84. package/dist/components/snk-simple-crud2.js +272 -28
  85. package/dist/components/snk-taskbar2.js +114 -24
  86. package/dist/components/taskbar-actions-button2.js +1 -1
  87. package/dist/esm/{ConfigStorage-4151acc8.js → ConfigStorage-101a2b4c.js} +70 -7
  88. package/dist/esm/{DataFetcher-aa159c5a.js → DataFetcher-a650ae58.js} +5 -3
  89. package/dist/esm/{SnkFormConfigManager-5c7d3771.js → SnkFormConfigManager-02ecf57f.js} +21 -13
  90. package/dist/esm/{SnkMessageBuilder-0fb796b9.js → SnkMessageBuilder-9747ddd2.js} +2 -1
  91. package/dist/esm/SnkMultiSelectionListDataSource-7e7eada5.js +133 -0
  92. package/dist/esm/{auth-fetcher-c05dc474.js → auth-fetcher-17dc5b5e.js} +1 -1
  93. package/dist/esm/{form-config-fetcher-36219cd3.js → form-config-fetcher-f121f880.js} +1 -1
  94. package/dist/esm/index-a7d3d3f1.js +2 -10
  95. package/dist/esm/loader.js +1 -1
  96. package/dist/esm/{pesquisa-fetcher-fa0c2540.js → pesquisa-fetcher-f05a12ca.js} +226 -16
  97. package/dist/esm/sankhyablocks.js +1 -1
  98. package/dist/esm/{snk-actions-button_2.entry.js → snk-actions-button_4.entry.js} +519 -6
  99. package/dist/esm/snk-application.entry.js +34 -8
  100. package/dist/esm/snk-attach.entry.js +6 -7
  101. package/dist/esm/snk-crud.entry.js +16 -10
  102. package/dist/esm/snk-data-exporter.entry.js +8 -4
  103. package/dist/esm/{snk-data-unit-5d201fb3.js → snk-data-unit-4c343635.js} +1 -1
  104. package/dist/esm/snk-data-unit.entry.js +2 -2
  105. package/dist/esm/snk-detail-view.entry.js +9 -10
  106. package/dist/esm/snk-entity-list.entry.js +5 -3
  107. package/dist/esm/snk-filter-bar.entry.js +36 -7
  108. package/dist/esm/snk-filter-modal-item.entry.js +3 -3
  109. package/dist/esm/snk-form-config.entry.js +48 -28
  110. package/dist/esm/snk-form.entry.js +11 -4
  111. package/dist/esm/snk-grid.entry.js +41 -23
  112. package/dist/esm/{snk-guides-viewer-f49613c6.js → snk-guides-viewer-90ca9105.js} +15 -9
  113. package/dist/esm/snk-guides-viewer.entry.js +7 -8
  114. package/dist/esm/snk-personalized-filter-editor.entry.js +3 -1
  115. package/dist/esm/snk-personalized-filter.entry.js +3 -3
  116. package/dist/esm/snk-simple-crud.entry.js +216 -24
  117. package/dist/esm/snk-taskbar.entry.js +101 -15
  118. package/dist/esm/{taskbar-elements-d4d0b424.js → taskbar-elements-2473c8ac.js} +9 -9
  119. package/dist/sankhyablocks/p-1f3174cb.entry.js +1 -0
  120. package/dist/sankhyablocks/p-1fa5a18c.entry.js +11 -0
  121. package/dist/sankhyablocks/p-20b46647.entry.js +1 -0
  122. package/dist/sankhyablocks/p-2897fb8c.js +1 -0
  123. package/dist/sankhyablocks/{p-05243555.js → p-2936303b.js} +1 -1
  124. package/dist/sankhyablocks/p-2cfe0c2c.entry.js +1 -0
  125. package/dist/sankhyablocks/p-33718dfc.entry.js +1 -0
  126. package/dist/sankhyablocks/p-384fd6ae.js +1 -0
  127. package/dist/sankhyablocks/p-50783a8b.js +1 -0
  128. package/dist/sankhyablocks/p-5c0b53ce.js +56 -0
  129. package/dist/sankhyablocks/p-663ff67b.entry.js +1 -0
  130. package/dist/sankhyablocks/{p-7f3c7b09.entry.js → p-6b28cc74.entry.js} +1 -1
  131. package/dist/sankhyablocks/{p-e0fd9555.entry.js → p-7ddd95b6.entry.js} +1 -1
  132. package/dist/sankhyablocks/p-7e05bd83.entry.js +1 -0
  133. package/dist/sankhyablocks/p-7f97fee2.entry.js +1 -0
  134. package/dist/sankhyablocks/p-8111f63f.entry.js +1 -0
  135. package/dist/sankhyablocks/{p-f3d1c48e.js → p-9a5d1b39.js} +1 -1
  136. package/dist/sankhyablocks/{p-0d7863ed.js → p-a13ccb86.js} +1 -1
  137. package/dist/sankhyablocks/p-a83487a0.entry.js +1 -0
  138. package/dist/sankhyablocks/p-ae4fc9a9.js +1 -0
  139. package/dist/sankhyablocks/p-b11aa1e0.entry.js +1 -0
  140. package/dist/sankhyablocks/p-b41a622a.entry.js +1 -0
  141. package/dist/sankhyablocks/p-ba4871b5.entry.js +1 -0
  142. package/dist/sankhyablocks/{p-9695f78b.js → p-be75153c.js} +1 -1
  143. package/dist/sankhyablocks/p-d01ceda6.entry.js +1 -0
  144. package/dist/sankhyablocks/p-d304659d.entry.js +1 -0
  145. package/dist/sankhyablocks/p-d78d4062.js +65 -0
  146. package/dist/sankhyablocks/p-e7dbe53a.entry.js +1 -0
  147. package/dist/sankhyablocks/p-fad4c2fe.js +1 -0
  148. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  149. package/dist/types/components/snk-actions-button/subcomponents/snk-actions-form.d.ts +1 -1
  150. package/dist/types/components/snk-application/__mocks__/snk-application.d.ts +3 -0
  151. package/dist/types/components/snk-application/snk-application.d.ts +8 -0
  152. package/dist/types/components/snk-crud/snk-crud.d.ts +21 -0
  153. package/dist/types/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.d.ts +1 -1
  154. package/dist/types/components/snk-crud/subcomponents/snk-guides-viewer.d.ts +6 -1
  155. package/dist/types/components/snk-filter-bar/snk-filter-bar.d.ts +19 -1
  156. package/dist/types/components/snk-form/snk-form.d.ts +6 -1
  157. package/dist/types/components/{snk-form → snk-form-config}/SnkFormConfigManager.d.ts +2 -1
  158. package/dist/types/components/{snk-form/subcomponents/snk-form-config → snk-form-config}/snk-form-config.d.ts +5 -3
  159. package/dist/types/components/snk-grid/snk-grid.d.ts +20 -1
  160. package/dist/types/components/{snk-grid/subcomponents/snk-grid-config → snk-grid-config}/snk-grid-config.d.ts +11 -6
  161. package/dist/types/components/{snk-grid/subcomponents → snk-grid-config}/snk-select-box/snk-select-box.d.ts +1 -1
  162. package/dist/types/components/snk-simple-crud/regular-buttons.d.ts +3 -0
  163. package/dist/types/components/snk-simple-crud/snk-simple-crud.d.ts +65 -3
  164. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +28 -1
  165. package/dist/types/components.d.ts +201 -12
  166. package/dist/types/lib/configs/ConfigStorage.d.ts +21 -1
  167. package/dist/types/lib/http/data-fetcher/fetchers/parameters-fecher.d.ts +1 -0
  168. package/dist/types/lib/http/data-fetcher/fetchers/personalized-filter-fetcher.d.ts +2 -1
  169. package/dist/types/lib/utils/CrudUtils.d.ts +3 -0
  170. package/package.json +9 -2
  171. package/dist/cjs/PreloadManager-84466da6.js +0 -224
  172. package/dist/cjs/SnkMultiSelectionListDataSource-ba5838c2.js +0 -49
  173. package/dist/cjs/snk-grid-config.cjs.entry.js +0 -483
  174. package/dist/cjs/snk-select-box.cjs.entry.js +0 -25
  175. package/dist/esm/PreloadManager-c1c2f2b4.js +0 -222
  176. package/dist/esm/SnkMultiSelectionListDataSource-44494b0e.js +0 -43
  177. package/dist/esm/snk-grid-config.entry.js +0 -479
  178. package/dist/esm/snk-select-box.entry.js +0 -21
  179. package/dist/sankhyablocks/p-02e3a45b.entry.js +0 -1
  180. package/dist/sankhyablocks/p-094c30cb.js +0 -1
  181. package/dist/sankhyablocks/p-0ec5b2e5.js +0 -1
  182. package/dist/sankhyablocks/p-1d75d9f9.entry.js +0 -1
  183. package/dist/sankhyablocks/p-2582537c.entry.js +0 -1
  184. package/dist/sankhyablocks/p-282789a6.entry.js +0 -1
  185. package/dist/sankhyablocks/p-374d03f6.js +0 -1
  186. package/dist/sankhyablocks/p-3b0e4e08.js +0 -65
  187. package/dist/sankhyablocks/p-40915359.entry.js +0 -1
  188. package/dist/sankhyablocks/p-573a07c5.js +0 -1
  189. package/dist/sankhyablocks/p-62896624.entry.js +0 -1
  190. package/dist/sankhyablocks/p-69efa80d.entry.js +0 -1
  191. package/dist/sankhyablocks/p-761ed32f.entry.js +0 -1
  192. package/dist/sankhyablocks/p-98674137.entry.js +0 -1
  193. package/dist/sankhyablocks/p-9b5944a4.entry.js +0 -1
  194. package/dist/sankhyablocks/p-9bdbc7d8.entry.js +0 -1
  195. package/dist/sankhyablocks/p-aa95fb2c.js +0 -56
  196. package/dist/sankhyablocks/p-ac384baf.entry.js +0 -1
  197. package/dist/sankhyablocks/p-b05ab13d.entry.js +0 -1
  198. package/dist/sankhyablocks/p-c22c1d8e.js +0 -1
  199. package/dist/sankhyablocks/p-c4874327.entry.js +0 -1
  200. package/dist/sankhyablocks/p-c758265f.entry.js +0 -1
  201. package/dist/sankhyablocks/p-cb7419e0.entry.js +0 -1
  202. package/dist/sankhyablocks/p-d4f9ee17.entry.js +0 -1
  203. package/dist/sankhyablocks/p-e6380c60.js +0 -1
  204. package/dist/sankhyablocks/p-e817f254.entry.js +0 -11
  205. /package/dist/collection/components/{snk-form/subcomponents/snk-form-config → snk-form-config}/snk-form-config.css +0 -0
  206. /package/dist/collection/components/{snk-form → snk-form-config}/subcomponents/snk-config-options/snk-config-options.css +0 -0
  207. /package/dist/collection/components/{snk-form → snk-form-config}/subcomponents/snk-config-options/snk-config-options.js +0 -0
  208. /package/dist/collection/components/{snk-form → snk-form-config}/subcomponents/snk-field-config/snk-field-config.css +0 -0
  209. /package/dist/collection/components/{snk-form → snk-form-config}/subcomponents/snk-field-config/snk-field-config.js +0 -0
  210. /package/dist/collection/components/{snk-form → snk-form-config}/subcomponents/snk-tab-config/snk-tab-config.css +0 -0
  211. /package/dist/collection/components/{snk-form → snk-form-config}/subcomponents/snk-tab-config/snk-tab-config.js +0 -0
  212. /package/dist/collection/components/{snk-grid/subcomponents/snk-grid-config → snk-grid-config}/snk-grid-config.css +0 -0
  213. /package/dist/collection/components/{snk-grid/subcomponents → snk-grid-config}/snk-select-box/snk-select-box.css +0 -0
  214. /package/dist/types/components/{snk-form → snk-form-config}/subcomponents/snk-config-options/snk-config-options.d.ts +0 -0
  215. /package/dist/types/components/{snk-form → snk-form-config}/subcomponents/snk-field-config/snk-field-config.d.ts +0 -0
  216. /package/dist/types/components/{snk-form → snk-form-config}/subcomponents/snk-tab-config/snk-tab-config.d.ts +0 -0
@@ -1,4 +1,4 @@
1
- import { ApplicationContext, ElementIDUtils, StringUtils } from '@sankhyalabs/core';
1
+ import { ApplicationContext, ElementIDUtils, OverflowDirection, OverflowWatcher, StringUtils, OVERFLOWED_CLASS_NAME } from '@sankhyalabs/core';
2
2
  import { h, Host } from '@stencil/core';
3
3
  import { AuthorizationConfig } from '../snk-configurator/AuthorizationConfig';
4
4
  import { AuthorizationElements, buildCustomButton, buildElem, TaskbarElement, VisibleWhenForbidden, } from './elements/taskbar-elements';
@@ -6,6 +6,9 @@ import { PresentationMode } from '../../lib/@types';
6
6
  export class SnkTaskbar {
7
7
  constructor() {
8
8
  this.TASKBAR_ITEM_ID_PREFIX = 'TASKBAR_ITEM_';
9
+ this.TASKBAR_CUSTOM_ELEMENTS_CONTAINER_CLASS_NAME = 'taskbar-custom-elements-container';
10
+ this.ACTIONS_BUTTON_TAG = 'TASKBAR-ACTIONS-BUTTON';
11
+ this.NOT_OVERFLOW_ELEMENTS = ["moreOptions", "dataExporter_snkDataExporter", "actionsButton_snkActionsButton"];
9
12
  this._titleKeyByElement = {
10
13
  [TaskbarElement.UPDATE]: "snkTaskbar.titleUpdate",
11
14
  [TaskbarElement.PREVIOUS]: "snkTaskbar.titlePrevious",
@@ -23,11 +26,15 @@ export class SnkTaskbar {
23
26
  [TaskbarElement.ATTACH]: "snkTaskbar.titleAttach",
24
27
  };
25
28
  this._permissions = undefined;
29
+ this._overFlowedElements = [];
26
30
  this._customElements = undefined;
27
31
  this._customElementsId = undefined;
28
32
  this._slotContainer = undefined;
33
+ this._hiddenActionsList = [];
34
+ this.alignRigth = false;
29
35
  this.customSlotId = "TASKBAR_CUSTOM_ELEMENTS";
30
36
  this.customContainerId = undefined;
37
+ this.overflowStrategy = 'hiddenItems';
31
38
  this.configName = undefined;
32
39
  this.resourceID = undefined;
33
40
  this.buttons = undefined;
@@ -41,6 +48,13 @@ export class SnkTaskbar {
41
48
  }
42
49
  observeButtons() {
43
50
  this._definitions = undefined;
51
+ requestAnimationFrame(() => {
52
+ requestAnimationFrame(() => { var _a; return (_a = this._overFlowWatcher) === null || _a === void 0 ? void 0 : _a.forceUpdate(); });
53
+ });
54
+ }
55
+ observeDisabledButtons() {
56
+ var _a;
57
+ (_a = this._overFlowWatcher) === null || _a === void 0 ? void 0 : _a.forceUpdate();
44
58
  }
45
59
  // Internal methods
46
60
  elementsFromString(strButtons) {
@@ -136,12 +150,19 @@ export class SnkTaskbar {
136
150
  }
137
151
  const taskbarElement = TaskbarElement[def.toString()];
138
152
  if (taskbarElement) {
139
- return buildElem(def, className, this.getIdElemBtnNative(def), elem => this.getTitle(elem), elem => this.elementClick(elem), elem => this.isEnabled(elem), this.actionsList, this.configName, this.presentationMode);
153
+ return buildElem(def, className, this.getIdElemBtnNative(def), elem => this.getTitle(elem), elem => this.elementClick(elem), elem => this.isEnabled(elem), this.buildDynamicActionsList(), this.configName, this.presentationMode);
140
154
  }
141
155
  else {
142
156
  return buildCustomButton(def, className, this.getIdElemBtnCustom(def), elem => this.elementClick(elem), elem => this.isEnabled(elem));
143
157
  }
144
158
  }
159
+ buildDynamicActionsList() {
160
+ var _a;
161
+ if (this._hiddenActionsList.length) {
162
+ return [...((_a = this.actionsList) !== null && _a !== void 0 ? _a : []), { type: 'divider', label: "", value: "" }, ...this._hiddenActionsList];
163
+ }
164
+ return this.actionsList;
165
+ }
145
166
  getIdElemBtnNative(taskbarElem) {
146
167
  return StringUtils.toCamelCase(taskbarElem);
147
168
  }
@@ -182,11 +203,13 @@ export class SnkTaskbar {
182
203
  });
183
204
  }
184
205
  addCustomElementContainer(elem) {
206
+ var _a;
185
207
  const elementId = `${this.TASKBAR_ITEM_ID_PREFIX}${elem}`;
186
208
  if (!this._customElementsId.includes(elementId)) {
187
209
  this._customElementsId.push(elementId);
210
+ (_a = this._overFlowWatcher) === null || _a === void 0 ? void 0 : _a.addNotOverFlowElement(elementId);
188
211
  }
189
- return h("span", { key: elementId, id: elementId });
212
+ return h("span", { class: "ez-padding-left--medium", key: elementId, id: elementId });
190
213
  }
191
214
  getCustomElements() {
192
215
  var _a, _b;
@@ -221,15 +244,76 @@ export class SnkTaskbar {
221
244
  }
222
245
  this.validatePresentationMode();
223
246
  }
247
+ handleOverFlow(overFlowingElements) {
248
+ const elementsToHandle = overFlowingElements.filter(element => !this.hasToIgnoreOverFlow(element));
249
+ this.resetOverFlowedElements();
250
+ this.doOverFlowElements(elementsToHandle);
251
+ }
252
+ resetOverFlowedElements() {
253
+ this._overFlowedElements.forEach(element => {
254
+ element.classList.remove(OVERFLOWED_CLASS_NAME);
255
+ });
256
+ this._hiddenActionsList = [];
257
+ this._overFlowedElements = [];
258
+ }
259
+ doOverFlowElements(overFlowedElements) {
260
+ overFlowedElements.forEach(element => {
261
+ element.classList.add(OVERFLOWED_CLASS_NAME);
262
+ this._overFlowedElements.push(element);
263
+ this.addItemToActionList(element);
264
+ });
265
+ }
266
+ addItemToActionList(element) {
267
+ const taskbarElement = this.getTaskbarElementName(element);
268
+ if (taskbarElement && this.isEnabled(taskbarElement) && this.isAllowed(taskbarElement)) {
269
+ const optionItem = {
270
+ value: taskbarElement,
271
+ label: this.getTaskbarElementLabel(element),
272
+ iconName: this.getTaskbarElementIcon(element)
273
+ };
274
+ this._hiddenActionsList.push(optionItem);
275
+ }
276
+ }
277
+ getTaskbarElementName(element) {
278
+ var _a;
279
+ return (_a = element.getAttribute('data-taskbar-element')) !== null && _a !== void 0 ? _a : "";
280
+ }
281
+ getTaskbarElementIcon(element) {
282
+ var _a;
283
+ return (_a = element.getAttribute('data-taskbar-icon')) !== null && _a !== void 0 ? _a : "";
284
+ }
285
+ getTaskbarElementLabel(element) {
286
+ var _a;
287
+ return (_a = element.getAttribute('data-taskbar-label')) !== null && _a !== void 0 ? _a : "";
288
+ }
289
+ hasToIgnoreOverFlow(element) {
290
+ return element.classList.contains(this.TASKBAR_CUSTOM_ELEMENTS_CONTAINER_CLASS_NAME);
291
+ }
292
+ handleOverFlowStrategy() {
293
+ if (this.overflowStrategy === 'hiddenItems') {
294
+ this._overFlowWatcher = new OverflowWatcher(this.buildOverFlowWatcherParams());
295
+ }
296
+ }
297
+ buildOverFlowWatcherParams() {
298
+ return {
299
+ element: this._element,
300
+ callback: this.handleOverFlow.bind(this),
301
+ overFlowDirection: OverflowDirection.HORIZONTAL,
302
+ notOverFlow: this.NOT_OVERFLOW_ELEMENTS
303
+ };
304
+ }
224
305
  componentDidLoad() {
225
306
  const dataInfo = { dataUnit: this.dataUnit };
226
307
  ElementIDUtils.addIDInfo(this._element, null, dataInfo);
308
+ this.handleOverFlowStrategy();
227
309
  }
228
310
  componentDidRender() {
229
311
  this.appendCustomElementsInTaskbar();
230
312
  }
231
313
  disconnectedCallback() {
314
+ var _a;
232
315
  this.unlinkAllCustomElements();
316
+ (_a = this._overFlowWatcher) === null || _a === void 0 ? void 0 : _a.destroy();
233
317
  }
234
318
  unlinkAllCustomElements() {
235
319
  var _a;
@@ -247,14 +331,9 @@ export class SnkTaskbar {
247
331
  return undefined;
248
332
  }
249
333
  let index = 0;
250
- return (h(Host, null, this.removeEmpty(this._definitions.map((elem) => {
251
- var _a;
252
- if (elem === TaskbarElement.DIVIDER) {
253
- index = 0;
254
- }
255
- else {
256
- index++;
257
- }
334
+ return (h(Host, { class: this.getHostClasses() }, this.removeEmpty(this._definitions.map((elem) => {
335
+ var _a, _b;
336
+ index++;
258
337
  if (TaskbarElement[elem]) {
259
338
  return this.getElement(index, TaskbarElement[elem]);
260
339
  }
@@ -264,8 +343,14 @@ export class SnkTaskbar {
264
343
  if (this._customElements.has(elem)) {
265
344
  return this.addCustomElementContainer(elem);
266
345
  }
346
+ (_b = this._overFlowWatcher) === null || _b === void 0 ? void 0 : _b.addNotOverFlowElement(elem);
267
347
  return h("slot", { name: elem });
268
- })), h("div", { class: "taskbar-custom-elements-container" }, h("slot", { name: this.customSlotId }))));
348
+ })), h("div", { class: this.TASKBAR_CUSTOM_ELEMENTS_CONTAINER_CLASS_NAME }, h("slot", { name: this.customSlotId }))));
349
+ }
350
+ getHostClasses() {
351
+ if (this.overflowStrategy !== 'hiddenItems')
352
+ return 'no-wrap';
353
+ return `full-width ${this.alignRigth ? 'align-right' : ""}`;
269
354
  }
270
355
  static get is() { return "snk-taskbar"; }
271
356
  static get encapsulation() { return "scoped"; }
@@ -281,6 +366,24 @@ export class SnkTaskbar {
281
366
  }
282
367
  static get properties() {
283
368
  return {
369
+ "alignRigth": {
370
+ "type": "boolean",
371
+ "mutable": false,
372
+ "complexType": {
373
+ "original": "boolean",
374
+ "resolved": "boolean",
375
+ "references": {}
376
+ },
377
+ "required": false,
378
+ "optional": false,
379
+ "docs": {
380
+ "tags": [],
381
+ "text": "Usado para determinar O alinhamento dos items na taskbar."
382
+ },
383
+ "attribute": "align-rigth",
384
+ "reflect": false,
385
+ "defaultValue": "false"
386
+ },
284
387
  "customSlotId": {
285
388
  "type": "string",
286
389
  "mutable": false,
@@ -316,6 +419,24 @@ export class SnkTaskbar {
316
419
  "attribute": "custom-container-id",
317
420
  "reflect": false
318
421
  },
422
+ "overflowStrategy": {
423
+ "type": "string",
424
+ "mutable": false,
425
+ "complexType": {
426
+ "original": "'hiddenItems' | 'none'",
427
+ "resolved": "\"hiddenItems\" | \"none\"",
428
+ "references": {}
429
+ },
430
+ "required": false,
431
+ "optional": false,
432
+ "docs": {
433
+ "tags": [],
434
+ "text": "Define como ser\u00E1 o comportamento da taskbar quando ocorrer overflow"
435
+ },
436
+ "attribute": "overflow-strategy",
437
+ "reflect": false,
438
+ "defaultValue": "'hiddenItems'"
439
+ },
319
440
  "configName": {
320
441
  "type": "string",
321
442
  "mutable": false,
@@ -515,9 +636,11 @@ export class SnkTaskbar {
515
636
  static get states() {
516
637
  return {
517
638
  "_permissions": {},
639
+ "_overFlowedElements": {},
518
640
  "_customElements": {},
519
641
  "_customElementsId": {},
520
- "_slotContainer": {}
642
+ "_slotContainer": {},
643
+ "_hiddenActionsList": {}
521
644
  };
522
645
  }
523
646
  static get events() {
@@ -543,6 +666,9 @@ export class SnkTaskbar {
543
666
  return [{
544
667
  "propName": "buttons",
545
668
  "methodName": "observeButtons"
669
+ }, {
670
+ "propName": "disabledButtons",
671
+ "methodName": "observeDisabledButtons"
546
672
  }];
547
673
  }
548
674
  }
@@ -2,18 +2,37 @@ import { FormConfigFetcher } from "../http/data-fetcher/fetchers/form-config-fet
2
2
  import GridConfigFetcher from "../http/data-fetcher/fetchers/grid-config-fetcher";
3
3
  import FilterBarConfigFetcher from "../http/data-fetcher/fetchers/filter-bar-config-fetcher";
4
4
  import PersonalizedFilterFetcher from "../http/data-fetcher/fetchers/personalized-filter-fetcher";
5
- var CONFIG_SOURCE;
5
+ export var CONFIG_SOURCE;
6
6
  (function (CONFIG_SOURCE) {
7
7
  CONFIG_SOURCE["form"] = "form";
8
8
  CONFIG_SOURCE["grid"] = "grid";
9
9
  CONFIG_SOURCE["filterBar"] = "filterBar";
10
10
  })(CONFIG_SOURCE || (CONFIG_SOURCE = {}));
11
11
  export class ConfigStorage {
12
- static preload(resourceID, configName) {
12
+ static addFilterBarLegacyConfig(configName, legacyConfigName) {
13
+ this.validateConfigName(configName, legacyConfigName);
14
+ this.filterBarLegacyConfig.set(configName, legacyConfigName);
15
+ }
16
+ static addFormLegacyConfig(configName, legacyConfigName) {
17
+ this.validateConfigName(configName, legacyConfigName);
18
+ this.formLegacyConfig.set(configName, legacyConfigName);
19
+ }
20
+ static addGridLegacyConfig(configName, legacyConfigName) {
21
+ this.validateConfigName(configName, legacyConfigName);
22
+ this.gridLegacyConfig.set(configName, legacyConfigName);
23
+ }
24
+ static preload(resourceID, configName, legacyConfigs) {
25
+ if (configName && (legacyConfigs === null || legacyConfigs === void 0 ? void 0 : legacyConfigs.gridLegacyConfig)) {
26
+ ConfigStorage.addGridLegacyConfig(configName, legacyConfigs.gridLegacyConfig);
27
+ }
28
+ if (configName && (legacyConfigs === null || legacyConfigs === void 0 ? void 0 : legacyConfigs.formLegacyConfig)) {
29
+ ConfigStorage.addFormLegacyConfig(configName, legacyConfigs.formLegacyConfig);
30
+ }
13
31
  ConfigStorage.loadFormConfig(configName, resourceID);
14
32
  ConfigStorage.loadGridConfig(configName, resourceID);
15
33
  }
16
34
  static async loadFilterBarConfig(name, resourceID, urlParams) {
35
+ urlParams = this.handleLegacyConfig(name, CONFIG_SOURCE.filterBar, urlParams);
17
36
  const cacheID = ConfigStorage.buildCacheID(name, CONFIG_SOURCE.filterBar, resourceID);
18
37
  if (!ConfigStorage.configById.has(cacheID)) {
19
38
  ConfigStorage.configById.set(cacheID, ConfigStorage.filterBarConfigFetcher.getConfig(resourceID, name, urlParams));
@@ -21,6 +40,7 @@ export class ConfigStorage {
21
40
  return ConfigStorage.configById.get(cacheID);
22
41
  }
23
42
  static async loadFormConfig(name, resourceID) {
43
+ name = this.handleLegacyConfigAsString(name, CONFIG_SOURCE.form);
24
44
  const cacheID = ConfigStorage.buildCacheID(name, CONFIG_SOURCE.form, resourceID);
25
45
  if (!ConfigStorage.configById.has(cacheID)) {
26
46
  ConfigStorage.configById.set(cacheID, ConfigStorage.formConfigFetcher.loadFormConfig(name, resourceID));
@@ -28,6 +48,7 @@ export class ConfigStorage {
28
48
  return ConfigStorage.configById.get(cacheID);
29
49
  }
30
50
  static async loadGridConfig(name, resourceID) {
51
+ name = this.handleLegacyConfigAsString(name, CONFIG_SOURCE.grid);
31
52
  const cacheID = ConfigStorage.buildCacheID(name, CONFIG_SOURCE.grid, resourceID);
32
53
  if (!ConfigStorage.configById.has(cacheID)) {
33
54
  ConfigStorage.configById.set(cacheID, ConfigStorage.gridConfigFetcher.getConfig(name, resourceID));
@@ -39,6 +60,7 @@ export class ConfigStorage {
39
60
  return this.filterBarConfigFetcher.saveConfig(config, resourceID, name);
40
61
  }
41
62
  static async saveFormConfig(config, name, resourceID) {
63
+ name = this.handleLegacyConfigAsString(name, CONFIG_SOURCE.form);
42
64
  await this.deleteFormConfigCache(name, resourceID);
43
65
  return this.formConfigFetcher.saveConfig(config, name, resourceID);
44
66
  }
@@ -53,7 +75,8 @@ export class ConfigStorage {
53
75
  return this.gridConfigFetcher.saveConfig(config, name, resourceID);
54
76
  }
55
77
  static async loadPersonalizedFilter(filterId, resourceID, configName) {
56
- return this.personalizedFilterFetcher.loadPersonalizedFilter(resourceID, filterId, configName);
78
+ const legacyConfigName = this.filterBarLegacyConfig.get(configName);
79
+ return this.personalizedFilterFetcher.loadPersonalizedFilter(resourceID, filterId, configName, legacyConfigName);
57
80
  }
58
81
  static async savePersonalizedFilter(personalizedFilter, resourceID, configName) {
59
82
  //Ao criar ou alterar um filtro personalizado,
@@ -76,6 +99,38 @@ export class ConfigStorage {
76
99
  static async deleteFilterBarConfigCache(name, resourceID) {
77
100
  await this.deleteConfigCache(name, resourceID, CONFIG_SOURCE.filterBar);
78
101
  }
102
+ static validateConfigName(configName, legacyConfigName) {
103
+ if (!configName)
104
+ throw Error(this.CONFIG_NAME_ERROR_MESSAGE);
105
+ if (!legacyConfigName)
106
+ throw Error(this.LEGACY_CONFIG_NAME_ERROR_MESSAGE);
107
+ }
108
+ static handleLegacyConfig(configName, configSource, urlParams) {
109
+ let legacyConfigName;
110
+ switch (configSource) {
111
+ case CONFIG_SOURCE.filterBar:
112
+ legacyConfigName = this.filterBarLegacyConfig.get(configName);
113
+ break;
114
+ case CONFIG_SOURCE.grid:
115
+ legacyConfigName = this.gridLegacyConfig.get(configName);
116
+ break;
117
+ case CONFIG_SOURCE.form:
118
+ legacyConfigName = this.formLegacyConfig.get(configName);
119
+ }
120
+ const params = urlParams ? Object.assign({}, urlParams) : {};
121
+ if (legacyConfigName) {
122
+ params['legacyResourceID'] = legacyConfigName;
123
+ }
124
+ return params;
125
+ }
126
+ static handleLegacyConfigAsString(name, source) {
127
+ const params = this.handleLegacyConfig(name, source);
128
+ const legacyResourceID = params['legacyResourceID'];
129
+ if (legacyResourceID) {
130
+ name = name + `?legacyResourceID=${legacyResourceID}`;
131
+ }
132
+ return name;
133
+ }
79
134
  static async deleteConfigCache(name, resourceID, source) {
80
135
  const cacheID = ConfigStorage.buildCacheID(name, source, resourceID);
81
136
  this.configById.delete(cacheID);
@@ -87,6 +142,11 @@ export class ConfigStorage {
87
142
  return `req_${source}_${name}_${resourceID}`;
88
143
  }
89
144
  }
145
+ ConfigStorage.CONFIG_NAME_ERROR_MESSAGE = "ConfigName precisa ser informado.";
146
+ ConfigStorage.LEGACY_CONFIG_NAME_ERROR_MESSAGE = "LegacyConfigName precisa ser informado.";
147
+ ConfigStorage.filterBarLegacyConfig = new Map();
148
+ ConfigStorage.formLegacyConfig = new Map();
149
+ ConfigStorage.gridLegacyConfig = new Map();
90
150
  ConfigStorage.configById = new Map();
91
151
  ConfigStorage.filterBarConfigFetcher = new FilterBarConfigFetcher();
92
152
  ConfigStorage.formConfigFetcher = new FormConfigFetcher();
@@ -275,7 +275,6 @@ export class DataFetcher {
275
275
  if (http.readyState == 4 && http.status == 200) {
276
276
  try {
277
277
  const jsonResp = JSON.parse(http.responseText);
278
- await this.processServiceBrokerClientEvents({ clientEvents: jsonResp === null || jsonResp === void 0 ? void 0 : jsonResp.clientEvents, serviceName, payloadJson, accept, reject });
279
278
  /**
280
279
  * Este trecho difere do projeto HTML5 devido à decisão de adotar uma abordagem síncrona para esta chamada. Isso é justificado pelo fato de que, no cenário em questão, a abordagem assíncrona teria impactos negativos.
281
280
  *
@@ -286,8 +285,10 @@ export class DataFetcher {
286
285
  if (this.isServiceBrokerError(jsonResp)) {
287
286
  reject(this.processServiceBrokerErrorInfo(jsonResp));
288
287
  }
289
- else if (jsonResp.status == DataFetcher.SERVICE_BROKER_STATUS.SERVICE_CANCELED && jsonResp.statusMessage) {
290
- console.debug(`[DataFetcher] ${jsonResp.statusMessage}`);
288
+ else if (jsonResp.status == DataFetcher.SERVICE_BROKER_STATUS.SERVICE_CANCELED) {
289
+ if (jsonResp.statusMessage) {
290
+ console.debug(`[DataFetcher] ${jsonResp.statusMessage}`);
291
+ }
291
292
  }
292
293
  else {
293
294
  accept(jsonResp.responseBody);
@@ -295,6 +296,7 @@ export class DataFetcher {
295
296
  (_a = this.application) === null || _a === void 0 ? void 0 : _a.info(jsonResp.statusMessage);
296
297
  }
297
298
  }
299
+ this.processServiceBrokerClientEvents({ clientEvents: jsonResp === null || jsonResp === void 0 ? void 0 : jsonResp.clientEvents, serviceName, payloadJson, accept, reject });
298
300
  }
299
301
  catch (err) {
300
302
  console.warn(`Erro ao executar serviço: ${err}`);
@@ -3,7 +3,22 @@ import { DateUtils, StringUtils, ObjectUtils } from "@sankhyalabs/core";
3
3
  import { DataFetcher } from "../DataFetcher";
4
4
  export default class ParametersFetcher {
5
5
  constructor() {
6
+ this._embeddedParams = new Map();
6
7
  this.templateByQuery = new Map();
8
+ try {
9
+ if (window["MGE_PARAMS"] != undefined) {
10
+ const source = atob(window['MGE_PARAMS']);
11
+ const params = source.split('__;__');
12
+ params.forEach(param => {
13
+ const [key, value] = param.split("__=__");
14
+ this._embeddedParams.set(key, value);
15
+ });
16
+ }
17
+ }
18
+ catch (error) {
19
+ console.error("Problemas ao obter parâmetros embarcados");
20
+ console.error(error);
21
+ }
7
22
  this.buldTemplates();
8
23
  }
9
24
  buldTemplates() {
@@ -15,6 +30,9 @@ export default class ParametersFetcher {
15
30
  }`);
16
31
  }
17
32
  async getParam(name) {
33
+ if (this._embeddedParams.has(name)) {
34
+ return Promise.resolve(this._embeddedParams.get(name));
35
+ }
18
36
  const completPath = `param://application?params=${name}`;
19
37
  return DataFetcher.get().callGraphQL({
20
38
  values: { name: completPath },
@@ -52,6 +70,9 @@ export default class ParametersFetcher {
52
70
  if (Array.isArray(obj) && obj.length > 0) {
53
71
  obj = obj[0];
54
72
  }
73
+ if (typeof obj === "string") {
74
+ return obj;
75
+ }
55
76
  if (StringUtils.isEmpty(obj.resource))
56
77
  return "";
57
78
  try {
@@ -52,7 +52,7 @@ export default class PersonalizedFilterFetcher {
52
52
  assistent
53
53
  }
54
54
  }`);
55
- this.templateByQuery.set("savePersonalizedFilter", gql `
55
+ this.templateByQuery.set("savePersonalizedFilter", gql `
56
56
  mutation($name: String!, $filterAssistent: InputFilterAssistent!) {
57
57
  $queryAlias$: savePersonalizedFilter(name: $name, filterAssistent: $filterAssistent) {
58
58
  id
@@ -74,11 +74,11 @@ export default class PersonalizedFilterFetcher {
74
74
  }
75
75
  }`);
76
76
  }
77
- async loadPersonalizedFilter(resourceID, filterID, configName) {
77
+ async loadPersonalizedFilter(resourceID, filterID, configName, legacyConfigName) {
78
78
  return new Promise((resolve, reject) => {
79
79
  DataFetcher.get()
80
80
  .callGraphQL({
81
- values: { name: this.resolveURI(resourceID, configName) + "/" + filterID },
81
+ values: { name: this.resolveURI(resourceID, configName) + "/" + filterID + this.resolveLegacyConfigName(legacyConfigName) },
82
82
  query: this.templateByQuery.get("fetchFilterAssistent"),
83
83
  })
84
84
  .then((resp) => {
@@ -90,6 +90,9 @@ export default class PersonalizedFilterFetcher {
90
90
  });
91
91
  });
92
92
  }
93
+ resolveLegacyConfigName(legacyConfigName) {
94
+ return legacyConfigName ? `?legacyResourceID=${legacyConfigName}` : '';
95
+ }
93
96
  async savePersonalizedFilter(personalizedFilter, resourceID, configName) {
94
97
  if (!personalizedFilter || Object.keys(personalizedFilter).length == 0) {
95
98
  return Promise.reject(new Error("personalizedFilter não pode ser vazio"));
@@ -50,7 +50,7 @@ export class PesquisaFetcher {
50
50
  });
51
51
  }
52
52
  loadAdvancedSearch(entityName, argument, criteria, searchOptions) {
53
- var _a, _b, _c;
53
+ var _a, _b, _c, _d;
54
54
  const listenerResult = this.applySearchListener(SearchListenerType.beforeSearch, entityName, argument, criteria, searchOptions);
55
55
  const values = {
56
56
  argument: (listenerResult === null || listenerResult === void 0 ? void 0 : listenerResult.argument) || argument,
@@ -63,7 +63,7 @@ export class PesquisaFetcher {
63
63
  $: (_a = values.criteria) === null || _a === void 0 ? void 0 : _a.expression
64
64
  }
65
65
  };
66
- if (((_b = values.criteria) === null || _b === void 0 ? void 0 : _b.params.length) > 0) {
66
+ if (((_c = (_b = values.criteria) === null || _b === void 0 ? void 0 : _b.params) === null || _c === void 0 ? void 0 : _c.length) > 0) {
67
67
  externalCriteria.params = {
68
68
  param: values.criteria.params.map(param => {
69
69
  let value = param.value;
@@ -86,18 +86,11 @@ export class PesquisaFetcher {
86
86
  };
87
87
  }
88
88
  const options = searchOptions != undefined
89
- ? {
90
- "pkFieldName": searchOptions.codeFieldName,
91
- "label": searchOptions.descriptionFieldName,
92
- "fieldName": searchOptions.codeFieldName,
93
- "useDescriptionOptions": false,
94
- "enableRowsCounter": true
95
- }
96
- : undefined;
89
+ ? Object.assign(Object.assign({}, searchOptions), { "pkFieldName": searchOptions.codeFieldName, "label": searchOptions.descriptionFieldName, "fieldName": searchOptions.codeFieldName, "useDescriptionOptions": false, "enableRowsCounter": true }) : undefined;
97
90
  const reqBody = {
98
91
  "serviceName": serviceName,
99
92
  "requestBody": {
100
- "criteria": Object.assign({ "entityName": entityName, "compacted": false, "ignoreEntityCriteria": false, "limit": this._defaultPageSize, "query": { "$": values.argument }, "orderByDesc": false, "externalCriteria": externalCriteria, "localEntityName": (_c = values.searchOptions) === null || _c === void 0 ? void 0 : _c.rootEntity }, { options }),
93
+ "criteria": Object.assign({ "entityName": entityName, "compacted": false, "ignoreEntityCriteria": false, "limit": this._defaultPageSize, "query": { "$": values.argument }, "orderByDesc": false, "externalCriteria": externalCriteria, "localEntityName": (_d = values.searchOptions) === null || _d === void 0 ? void 0 : _d.rootEntity }, { options }),
101
94
  "clientEventList": {
102
95
  "clientEvent": []
103
96
  }
@@ -16,7 +16,8 @@ export const snkDataExporterMessages = {
16
16
  },
17
17
  message: {
18
18
  emailSuccess: "E-mail enviado com sucesso",
19
- exportError: "Usuário sem permissão",
19
+ exportError: "Falha ao exportar dados",
20
+ unknownFailure: "O motivo da falha não pode ser identificado.",
20
21
  exportPermission: "O usuário não possui permissão para exportar o arquivo.",
21
22
  },
22
23
  title: {
@@ -1,6 +1,18 @@
1
1
  import { DataFetcher } from '../';
2
- import { ApplicationContext } from '@sankhyalabs/core';
2
+ import { ApplicationContext, SortMode } from '@sankhyalabs/core';
3
3
  export class CrudUtils {
4
+ static assertDefaultSorting(gridConfig, dataUnit) {
5
+ if (gridConfig && dataUnit) {
6
+ dataUnit.defaultSorting = gridConfig
7
+ .columns
8
+ .filter(col => col.ascending != undefined)
9
+ .sort((colA, colB) => colA.orderIndex - colB.orderIndex)
10
+ .map(({ name: field, ascending }) => {
11
+ const { dataType } = dataUnit.getField(field);
12
+ return { field, dataType, mode: ascending ? SortMode.ASC : SortMode.DESC };
13
+ });
14
+ }
15
+ }
4
16
  static find(entityName, fields, criteria, onlyFirst = true, criteriaExpression, orderBy) {
5
17
  const SERVICE_CRUD_FIND = "mge@crud.find";
6
18
  let parsedFields = [];