@sankhyalabs/sankhyablocks 8.16.0-dev.3 → 8.16.0-dev.31

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 (210) hide show
  1. package/dist/cjs/{ConfigStorage-942ce74b.js → ConfigStorage-ecc0ed20.js} +3 -2
  2. package/dist/cjs/{IExporterProvider-597949f9.js → ContinuousInsertUtils-807730a8.js} +39 -6
  3. package/dist/cjs/{DataFetcher-313debd8.js → DataFetcher-cadeef8e.js} +21 -15
  4. package/dist/cjs/{RecordIDUtils-3735135c.js → GetSelectedRecordsIDsInfo-bd50caf1.js} +10 -10
  5. package/dist/cjs/{SnkFormConfigManager-1b13bacd.js → SnkFormConfigManager-f1c92f79.js} +74 -20
  6. package/dist/cjs/{SnkMessageBuilder-722b104e.js → SnkMessageBuilder-bae64d0d.js} +7 -3
  7. package/dist/cjs/{auth-fetcher-54f5ff9d.js → auth-fetcher-d68841bc.js} +1 -1
  8. package/dist/cjs/{dataunit-fetcher-688d3f05.js → dataunit-fetcher-f89461c1.js} +46 -18
  9. package/dist/cjs/{field-search-f56aa7d6.js → field-search-68e34bf4.js} +5 -1
  10. package/dist/cjs/{form-config-fetcher-2dd00e5b.js → form-config-fetcher-ed497282.js} +5 -2
  11. package/dist/cjs/loader.cjs.js +1 -1
  12. package/dist/cjs/{pesquisa-fetcher-680e198f.js → pesquisa-fetcher-ca89181c.js} +1 -1
  13. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  14. package/dist/cjs/snk-actions-button_4.cjs.entry.js +17 -14
  15. package/dist/cjs/snk-application.cjs.entry.js +7 -7
  16. package/dist/cjs/snk-attach.cjs.entry.js +37 -28
  17. package/dist/cjs/snk-crud.cjs.entry.js +14 -6
  18. package/dist/cjs/snk-data-exporter.cjs.entry.js +19 -18
  19. package/dist/cjs/{snk-data-unit-685272e7.js → snk-data-unit-668dc5e8.js} +42 -22
  20. package/dist/cjs/snk-data-unit.cjs.entry.js +5 -5
  21. package/dist/cjs/snk-detail-view.cjs.entry.js +12 -13
  22. package/dist/cjs/snk-exporter-email-sender.cjs.entry.js +1 -1
  23. package/dist/cjs/snk-filter-bar.cjs.entry.js +37 -25
  24. package/dist/cjs/snk-filter-checkbox-list.cjs.entry.js +1 -1
  25. package/dist/cjs/snk-filter-modal-item.cjs.entry.js +3 -3
  26. package/dist/cjs/snk-form-config.cjs.entry.js +17 -6
  27. package/dist/cjs/snk-form.cjs.entry.js +7 -6
  28. package/dist/cjs/snk-grid.cjs.entry.js +61 -21
  29. package/dist/cjs/{snk-guides-viewer-67605336.js → snk-guides-viewer-68777d37.js} +24 -12
  30. package/dist/cjs/snk-guides-viewer.cjs.entry.js +9 -9
  31. package/dist/cjs/snk-personalized-filter.cjs.entry.js +3 -3
  32. package/dist/cjs/snk-simple-bar.cjs.entry.js +1 -1
  33. package/dist/cjs/snk-simple-crud.cjs.entry.js +64 -26
  34. package/dist/cjs/snk-taskbar.cjs.entry.js +23 -1
  35. package/dist/collection/components/snk-actions-button/actions/index.js +12 -9
  36. package/dist/collection/components/snk-attach/snk-attach.js +24 -15
  37. package/dist/collection/components/snk-attach/structure/fetcher/factory/attach-fetcher-data-unit.factory.js +2 -4
  38. package/dist/collection/components/snk-crud/snk-crud.js +78 -1
  39. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.js +3 -4
  40. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +51 -6
  41. package/dist/collection/components/snk-data-exporter/exporter-email-sender/options-step.js +1 -1
  42. package/dist/collection/components/snk-data-exporter/exporter-strategy/ClientSideExporterStrategy.js +4 -4
  43. package/dist/collection/components/snk-data-exporter/exporter-strategy/ServerSideExporterStrategy.js +5 -5
  44. package/dist/collection/components/snk-data-exporter/providers/ClientSideExporterProvider.js +1 -1
  45. package/dist/collection/components/snk-data-exporter/providers/ServerSideExporterProvider.js +1 -1
  46. package/dist/collection/components/snk-data-exporter/snk-data-exporter.js +2 -2
  47. package/dist/collection/components/snk-data-exporter/structure/ItemBuilder.js +2 -2
  48. package/dist/collection/components/snk-data-exporter/test/resources/ClientSideExporterStrategyResources.js +4 -4
  49. package/dist/collection/components/snk-data-unit/snk-data-unit.js +57 -20
  50. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-checkbox-list.js +1 -1
  51. package/dist/collection/components/snk-filter-bar/snk-filter-bar.css +1 -1
  52. package/dist/collection/components/snk-filter-bar/snk-filter-bar.js +59 -21
  53. package/dist/collection/components/snk-form/snk-form.js +2 -2
  54. package/dist/collection/components/snk-form-config/SnkFormConfigManager.js +72 -18
  55. package/dist/collection/components/snk-form-config/snk-form-config.css +8 -3
  56. package/dist/collection/components/snk-form-config/snk-form-config.js +14 -3
  57. package/dist/collection/components/snk-grid/snk-grid.css +2 -0
  58. package/dist/collection/components/snk-grid/snk-grid.js +68 -8
  59. package/dist/collection/components/snk-simple-bar/snk-simple-bar.js +1 -1
  60. package/dist/collection/components/snk-simple-crud/snk-simple-crud.css +0 -1
  61. package/dist/collection/components/snk-simple-crud/snk-simple-crud.js +89 -15
  62. package/dist/collection/components/snk-taskbar/processor/taskbar-processor.js +5 -1
  63. package/dist/collection/components/snk-taskbar/snk-taskbar.js +64 -0
  64. package/dist/collection/lib/DefaultCustomFormatters/RmPrecisionCustomValueFormatter.js +3 -3
  65. package/dist/collection/lib/configs/ConfigStorage.js +1 -0
  66. package/dist/collection/lib/dataUnit/InMemoryLoader.js +2 -4
  67. package/dist/collection/lib/dataUnit/dataUnitInMemoryUtils.js +34 -9
  68. package/dist/collection/lib/http/data-fetcher/DataFetcher.js +22 -16
  69. package/dist/collection/lib/http/data-fetcher/fetchers/AttachFetcher/anexo-sistema-fetcher.js +7 -5
  70. package/dist/collection/lib/http/data-fetcher/fetchers/data-unit/loadstrategy/DatasetStrategy.js +9 -2
  71. package/dist/collection/lib/http/data-fetcher/fetchers/form-config-fetcher.js +4 -1
  72. package/dist/collection/lib/message/resources/snk-data-unit.msg.js +1 -1
  73. package/dist/collection/lib/message/resources/snk-exporter.msg.js +1 -1
  74. package/dist/collection/lib/message/resources/snk-grid.msg.js +5 -1
  75. package/dist/collection/lib/utils/ContinuousInsertUtils.js +31 -0
  76. package/dist/collection/{components/snk-data-exporter/utils/RecordIDUtils.js → lib/utils/GetSelectedRecordsIDsInfo.js} +9 -9
  77. package/dist/components/ConfigStorage.js +1 -0
  78. package/dist/components/{IExporterProvider.js → ContinuousInsertUtils.js} +40 -5
  79. package/dist/components/DataFetcher.js +22 -16
  80. package/dist/{esm/RecordIDUtils-87d02110.js → components/GetSelectedRecordsIDsInfo.js} +10 -10
  81. package/dist/components/SnkFormConfigManager.js +72 -18
  82. package/dist/components/SnkMessageBuilder.js +7 -3
  83. package/dist/components/dataunit-fetcher.js +45 -15
  84. package/dist/components/form-config-fetcher.js +4 -1
  85. package/dist/components/snk-actions-button2.js +12 -9
  86. package/dist/components/snk-attach2.js +33 -24
  87. package/dist/components/snk-crud.js +12 -1
  88. package/dist/components/snk-data-exporter2.js +12 -11
  89. package/dist/components/snk-data-unit2.js +44 -60
  90. package/dist/components/snk-detail-view2.js +24 -11
  91. package/dist/components/snk-exporter-email-sender2.js +1 -1
  92. package/dist/components/snk-filter-bar2.js +35 -22
  93. package/dist/components/snk-filter-checkbox-list.js +1 -1
  94. package/dist/components/snk-form-config2.js +15 -4
  95. package/dist/components/snk-form.js +2 -2
  96. package/dist/components/snk-grid2.js +53 -11
  97. package/dist/components/snk-simple-bar2.js +1 -1
  98. package/dist/components/snk-simple-crud2.js +57 -15
  99. package/dist/components/snk-taskbar2.js +24 -2
  100. package/dist/esm/{ConfigStorage-86187da3.js → ConfigStorage-7b36d041.js} +3 -2
  101. package/dist/esm/{IExporterProvider-63a188b6.js → ContinuousInsertUtils-1a82a768.js} +40 -8
  102. package/dist/esm/{DataFetcher-c1baf61d.js → DataFetcher-a9c598f2.js} +22 -16
  103. package/dist/esm/GetSelectedRecordsIDsInfo-9fa41508.js +41 -0
  104. package/dist/esm/{SnkFormConfigManager-d4554df9.js → SnkFormConfigManager-139f09fa.js} +74 -20
  105. package/dist/esm/{SnkMessageBuilder-89925609.js → SnkMessageBuilder-6fff4a4c.js} +7 -3
  106. package/dist/esm/{auth-fetcher-039abba3.js → auth-fetcher-749d880f.js} +1 -1
  107. package/dist/esm/{dataunit-fetcher-264191b2.js → dataunit-fetcher-c24c76c6.js} +46 -16
  108. package/dist/esm/{field-search-efbe307f.js → field-search-f8b1d91e.js} +5 -1
  109. package/dist/esm/{form-config-fetcher-30fb808f.js → form-config-fetcher-adbe5d34.js} +5 -2
  110. package/dist/esm/loader.js +1 -1
  111. package/dist/esm/{pesquisa-fetcher-03c8f919.js → pesquisa-fetcher-8edaa8cd.js} +1 -1
  112. package/dist/esm/sankhyablocks.js +1 -1
  113. package/dist/esm/snk-actions-button_4.entry.js +17 -14
  114. package/dist/esm/snk-application.entry.js +7 -7
  115. package/dist/esm/snk-attach.entry.js +37 -28
  116. package/dist/esm/snk-crud.entry.js +14 -6
  117. package/dist/esm/snk-data-exporter.entry.js +19 -18
  118. package/dist/esm/{snk-data-unit-63f83504.js → snk-data-unit-0fdfb6c2.js} +42 -22
  119. package/dist/esm/snk-data-unit.entry.js +5 -5
  120. package/dist/esm/snk-detail-view.entry.js +12 -13
  121. package/dist/esm/snk-exporter-email-sender.entry.js +1 -1
  122. package/dist/esm/snk-filter-bar.entry.js +37 -25
  123. package/dist/esm/snk-filter-checkbox-list.entry.js +1 -1
  124. package/dist/esm/snk-filter-modal-item.entry.js +3 -3
  125. package/dist/esm/snk-form-config.entry.js +17 -6
  126. package/dist/esm/snk-form.entry.js +7 -6
  127. package/dist/esm/snk-grid.entry.js +56 -16
  128. package/dist/esm/{snk-guides-viewer-151f6091.js → snk-guides-viewer-b5dd30e6.js} +24 -12
  129. package/dist/esm/snk-guides-viewer.entry.js +9 -9
  130. package/dist/esm/snk-personalized-filter.entry.js +3 -3
  131. package/dist/esm/snk-simple-bar.entry.js +1 -1
  132. package/dist/esm/snk-simple-crud.entry.js +60 -22
  133. package/dist/esm/snk-taskbar.entry.js +23 -1
  134. package/dist/sankhyablocks/p-0035ad6e.entry.js +1 -0
  135. package/dist/sankhyablocks/{p-df5451c7.js → p-06421fdb.js} +2 -2
  136. package/dist/sankhyablocks/p-16a1dd18.entry.js +1 -0
  137. package/dist/sankhyablocks/p-17425c72.js +1 -0
  138. package/dist/sankhyablocks/p-18ed15f4.entry.js +1 -0
  139. package/dist/sankhyablocks/{p-af8efd95.js → p-1bf06cd3.js} +2 -2
  140. package/dist/sankhyablocks/{p-a1d72395.entry.js → p-212213d9.entry.js} +1 -1
  141. package/dist/sankhyablocks/p-23736d75.js +1 -0
  142. package/dist/sankhyablocks/p-3ae9d08a.js +1 -0
  143. package/dist/sankhyablocks/p-3e3cc017.js +1 -0
  144. package/dist/sankhyablocks/p-430e4d3c.entry.js +1 -0
  145. package/dist/sankhyablocks/{p-aff76a53.js → p-4d9549cf.js} +2 -2
  146. package/dist/sankhyablocks/p-50779ad3.entry.js +1 -0
  147. package/dist/sankhyablocks/p-5dd8cf4f.js +1 -0
  148. package/dist/sankhyablocks/{p-aaa3ee68.entry.js → p-5f157b09.entry.js} +1 -1
  149. package/dist/sankhyablocks/p-60b29483.entry.js +1 -0
  150. package/dist/sankhyablocks/p-694e1c4a.entry.js +1 -0
  151. package/dist/sankhyablocks/p-7ac7932c.js +60 -0
  152. package/dist/sankhyablocks/p-7dd49d15.js +1 -0
  153. package/dist/sankhyablocks/p-7eef0898.entry.js +1 -0
  154. package/dist/sankhyablocks/{p-82a0bfb0.entry.js → p-a42e7a1e.entry.js} +2 -2
  155. package/dist/sankhyablocks/p-afbb070d.js +1 -0
  156. package/dist/sankhyablocks/p-b9679243.entry.js +1 -0
  157. package/dist/sankhyablocks/p-b9c67e45.entry.js +1 -0
  158. package/dist/sankhyablocks/p-c2e468c9.entry.js +1 -0
  159. package/dist/sankhyablocks/{p-913a9979.js → p-ca5ec380.js} +1 -1
  160. package/dist/sankhyablocks/p-d80a84fd.entry.js +1 -0
  161. package/dist/sankhyablocks/p-d836f72b.entry.js +1 -0
  162. package/dist/sankhyablocks/p-e16e87fc.entry.js +1 -0
  163. package/dist/sankhyablocks/p-eb9f0407.entry.js +1 -0
  164. package/dist/sankhyablocks/p-f3434fc4.js +1 -0
  165. package/dist/sankhyablocks/{p-eae7a817.entry.js → p-fb34e0cf.entry.js} +1 -1
  166. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  167. package/dist/types/components/snk-actions-button/actions/index.d.ts +1 -0
  168. package/dist/types/components/snk-attach/snk-attach.d.ts +1 -0
  169. package/dist/types/components/snk-crud/snk-crud.d.ts +13 -0
  170. package/dist/types/components/snk-crud/subcomponents/snk-guides-viewer.d.ts +11 -0
  171. package/dist/types/components/snk-data-exporter/test/resources/ClientSideExporterStrategyResources.d.ts +3 -3
  172. package/dist/types/components/snk-data-unit/snk-data-unit.d.ts +7 -0
  173. package/dist/types/components/snk-filter-bar/snk-filter-bar.d.ts +5 -0
  174. package/dist/types/components/snk-form-config/SnkFormConfigManager.d.ts +9 -4
  175. package/dist/types/components/snk-grid/snk-grid.d.ts +12 -0
  176. package/dist/types/components/snk-simple-crud/snk-simple-crud.d.ts +14 -0
  177. package/dist/types/components/snk-taskbar/processor/taskbar-processor.d.ts +1 -0
  178. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +11 -0
  179. package/dist/types/components.d.ts +89 -0
  180. package/dist/types/lib/dataUnit/dataUnitInMemoryUtils.d.ts +12 -2
  181. package/dist/types/lib/http/data-fetcher/fetchers/AttachFetcher/anexo-sistema-fetcher.d.ts +3 -2
  182. package/dist/types/lib/http/data-fetcher/fetchers/fetchDataExporter/interfaces/IFetchDataExporterParams.d.ts +1 -1
  183. package/dist/types/lib/utils/ContinuousInsertUtils.d.ts +10 -0
  184. package/dist/types/lib/utils/GetSelectedRecordsIDsInfo.d.ts +3 -0
  185. package/package.json +2 -2
  186. package/dist/sankhyablocks/p-14a08904.entry.js +0 -1
  187. package/dist/sankhyablocks/p-14b9f964.entry.js +0 -1
  188. package/dist/sankhyablocks/p-219f888d.entry.js +0 -1
  189. package/dist/sankhyablocks/p-3a212712.js +0 -1
  190. package/dist/sankhyablocks/p-3a216b81.entry.js +0 -1
  191. package/dist/sankhyablocks/p-47b60deb.entry.js +0 -1
  192. package/dist/sankhyablocks/p-7505da04.entry.js +0 -1
  193. package/dist/sankhyablocks/p-75f83d1d.entry.js +0 -1
  194. package/dist/sankhyablocks/p-7a337364.js +0 -1
  195. package/dist/sankhyablocks/p-829d4045.js +0 -1
  196. package/dist/sankhyablocks/p-88aa931b.entry.js +0 -1
  197. package/dist/sankhyablocks/p-8fc470e5.entry.js +0 -1
  198. package/dist/sankhyablocks/p-941bf3ef.entry.js +0 -1
  199. package/dist/sankhyablocks/p-9863d682.js +0 -1
  200. package/dist/sankhyablocks/p-b4b21558.entry.js +0 -1
  201. package/dist/sankhyablocks/p-bad55caa.entry.js +0 -1
  202. package/dist/sankhyablocks/p-c053256c.entry.js +0 -1
  203. package/dist/sankhyablocks/p-c2495304.js +0 -1
  204. package/dist/sankhyablocks/p-c5268346.entry.js +0 -1
  205. package/dist/sankhyablocks/p-cefba299.js +0 -1
  206. package/dist/sankhyablocks/p-dc7c9047.js +0 -1
  207. package/dist/sankhyablocks/p-f2809746.entry.js +0 -1
  208. package/dist/sankhyablocks/p-fcac4dfc.js +0 -1
  209. package/dist/sankhyablocks/p-fe79f83a.js +0 -60
  210. package/dist/types/components/snk-data-exporter/utils/RecordIDUtils.d.ts +0 -3
@@ -1,5 +1,5 @@
1
1
  import { ApplicationContext, DataType, ElementIDUtils, FloatingManager, JSUtils, ObjectUtils, StringUtils, UserInterface, } from '@sankhyalabs/core';
2
- import { CSSVarsUtils } from "@sankhyalabs/ezui/dist/collection/utils";
2
+ import { CSSVarsUtils } from '@sankhyalabs/ezui/dist/collection/utils';
3
3
  import { h } from '@stencil/core';
4
4
  import { SIMPLE_CRUD_MODE, VIEW_MODE } from '../../lib/utils/constants';
5
5
  import { TaskbarElement } from '../snk-taskbar/elements/taskbar-elements';
@@ -13,7 +13,8 @@ import { SnkFormConfigManager } from '../snk-form-config/SnkFormConfigManager';
13
13
  import { REGULAR_DEFAULT_BTNS, REGULAR_SELECTED_BTNS } from './regular-buttons';
14
14
  import RmPrecisionCustomValueFormatter from '../../lib/DefaultCustomFormatters/RmPrecisionCustomValueFormatter';
15
15
  import ClientSideExporterProvider from '../snk-data-exporter/providers/ClientSideExporterProvider';
16
- import store from "../../lib/store";
16
+ import store from '../../lib/store';
17
+ import { ContinuousInsertUtils } from '../../lib/utils/ContinuousInsertUtils';
17
18
  export class SnkSimpleCrud {
18
19
  constructor() {
19
20
  this._multiSelectionListDataSource = new SnkMultiSelectionListDataSource();
@@ -22,11 +23,11 @@ export class SnkSimpleCrud {
22
23
  this._customEditors = new Map();
23
24
  this._customRenders = new Map();
24
25
  this._taskbarProcessor = new TaskbarProcessor({
25
- "snkSimpleCrudTaskbar.form_regular": this.getButtons(false, [TaskbarElement.GRID_MODE]),
26
+ "snkSimpleCrudTaskbar.form_regular": this.getButtons(false, [TaskbarElement.GRID_MODE], true),
26
27
  "snkSimpleCrudTaskbar.grid_regular": this.getButtons(false, [TaskbarElement.DATA_EXPORTER, TaskbarElement.FORM_MODE]),
27
- "snkSimpleCrudTaskbar.form_selected": this.getButtons(true, [TaskbarElement.GRID_MODE]),
28
+ "snkSimpleCrudTaskbar.form_selected": this.getButtons(true, [TaskbarElement.GRID_MODE], true),
28
29
  "snkSimpleCrudTaskbar.grid_selected": this.getButtons(true, [TaskbarElement.DATA_EXPORTER, TaskbarElement.FORM_MODE]),
29
- "snkSimpleCrudTaskbar.finish_edition": ["CANCEL", "SAVE"]
30
+ "snkSimpleCrudTaskbar.finish_edition": this.getFinishEditionButtonsCallback.bind(this)
30
31
  });
31
32
  this._showPopUpGridConfig = false;
32
33
  this._showFormConfig = false;
@@ -42,10 +43,12 @@ export class SnkSimpleCrud {
42
43
  this.formConfig = undefined;
43
44
  this._formFields = [];
44
45
  this._fieldsProps = new Map();
46
+ this._enableContinuousInsert = true;
45
47
  this.multipleSelection = undefined;
46
48
  this.useCancelConfirm = true;
47
49
  this.pageSize = 150;
48
50
  this.resourceID = undefined;
51
+ this.enableGridInsert = false;
49
52
  this.taskbarManager = undefined;
50
53
  this.messagesBuilder = undefined;
51
54
  this.useEnterLikeTab = false;
@@ -56,6 +59,7 @@ export class SnkSimpleCrud {
56
59
  this.formLegacyConfigName = undefined;
57
60
  this.ignoreReadOnlyFormFields = false;
58
61
  this.autoFocus = true;
62
+ this.domainMessagesBuilder = undefined;
59
63
  this.autoLoad = undefined;
60
64
  }
61
65
  /**
@@ -114,8 +118,19 @@ export class SnkSimpleCrud {
114
118
  newCustomFieldProps.set(fieldName, Object.assign(Object.assign({}, currentProps), { [propName]: value }));
115
119
  this._fieldsProps = newCustomFieldProps;
116
120
  }
117
- getButtons(selected, extraButtons) {
118
- return this.addConfigButton(this.resolveInMemoryBtns(selected ? REGULAR_SELECTED_BTNS : REGULAR_DEFAULT_BTNS)
121
+ getFinishEditionButtonsCallback() {
122
+ const btns = ["CANCEL", "SAVE"];
123
+ if (this.enableGridInsert && this._currentViewMode !== VIEW_MODE.ATTACHMENT) {
124
+ btns.push(this._currentViewMode === VIEW_MODE.GRID ? TaskbarElement.FORM_MODE : TaskbarElement.GRID_MODE);
125
+ }
126
+ return btns;
127
+ }
128
+ getButtons(selected, extraButtons, removeRefresh) {
129
+ let btnList = selected ? REGULAR_SELECTED_BTNS : REGULAR_DEFAULT_BTNS;
130
+ if (removeRefresh) {
131
+ btnList = btnList.filter(item => item !== TaskbarElement.REFRESH);
132
+ }
133
+ return this.addConfigButton(this.resolveInMemoryBtns(btnList)
119
134
  .concat(extraButtons));
120
135
  }
121
136
  addConfigButton(buttons) {
@@ -196,7 +211,6 @@ export class SnkSimpleCrud {
196
211
  await this.setFieldProp(field, 'precision', rmPrecision);
197
212
  await this.setFieldProp(field, 'prettyPrecision', rmPrecision);
198
213
  }
199
- ;
200
214
  this._rmPrecisionCustomValueFormatter.setDataState(this.dataState);
201
215
  }
202
216
  async handleUpdateGridLegacyConfig(newValue, oldValue) {
@@ -278,7 +292,7 @@ export class SnkSimpleCrud {
278
292
  return;
279
293
  }
280
294
  if (this._formConfigManager == undefined) {
281
- this._formConfigManager = new SnkFormConfigManager(this.configName, this.resolveResourceID());
295
+ this._formConfigManager = new SnkFormConfigManager(this.configName, this.resolveResourceID(), undefined, this.dataUnit);
282
296
  this._formConfigManager.setConfig(this.formConfig);
283
297
  }
284
298
  if (this.formConfigIsLoaded() && !forceLoad) {
@@ -319,6 +333,10 @@ export class SnkSimpleCrud {
319
333
  this.onModeChange();
320
334
  this.configDatasource();
321
335
  this._rmPrecisionCustomValueFormatter = new RmPrecisionCustomValueFormatter();
336
+ this._continuousInsertUtils = new ContinuousInsertUtils(this.application, this.resolveResourceID(), this.configName);
337
+ if (this.enableGridInsert) {
338
+ this._continuousInsertUtils.getConfig().then(value => this._enableContinuousInsert = value);
339
+ }
322
340
  }
323
341
  componentDidLoad() {
324
342
  CSSVarsUtils.applyVarsGrid(this._element, this._grid);
@@ -553,6 +571,9 @@ export class SnkSimpleCrud {
553
571
  const options = filteredFields.map(field => ({ value: field.name, label: field.label }));
554
572
  return Promise.resolve(options);
555
573
  }
574
+ isGridInsertActive() {
575
+ return this.enableGridInsert && this.dataUnit.hasNewRecord();
576
+ }
556
577
  getActionsList() {
557
578
  var _a, _b;
558
579
  const hardList = [{
@@ -564,11 +585,22 @@ export class SnkSimpleCrud {
564
585
  ? this.getColumnSearch(actionButton, item)
565
586
  : this.getFieldSearch(actionButton, item)
566
587
  }];
588
+ if (this.enableGridInsert) {
589
+ hardList.push(this._continuousInsertUtils.actionContinuousInsert(this._enableContinuousInsert, this.handleEnableContinuousInsert));
590
+ }
591
+ if (this.isGridInsertActive())
592
+ return hardList;
567
593
  if (this.taskbarManager != undefined && this.taskbarManager.getMoreOptions != undefined) {
568
594
  const taskbarID = this.getTopTaskBarId();
569
595
  return hardList.concat(this.taskbarManager.getMoreOptions(taskbarID, this.configName, this.dataState, this.actionsList));
570
596
  }
571
- return hardList.concat(this.actionsList);
597
+ if (this.actionsList)
598
+ return hardList.concat(this.actionsList);
599
+ return hardList;
600
+ }
601
+ handleEnableContinuousInsert() {
602
+ this._enableContinuousInsert = !this._enableContinuousInsert;
603
+ this._continuousInsertUtils.handleSaveConfig(this._enableContinuousInsert);
572
604
  }
573
605
  getTopTaskBarId() {
574
606
  var _a;
@@ -672,8 +704,8 @@ export class SnkSimpleCrud {
672
704
  return StringUtils.isEmpty(this.resourceID) ? this._resourceID : this.resourceID;
673
705
  }
674
706
  getFormConfig() {
675
- var _a, _b;
676
- const configFromManager = (_a = this._formConfigManager) === null || _a === void 0 ? void 0 : _a.getConfig((_b = this.dataState) === null || _b === void 0 ? void 0 : _b.insertionMode, this.dataUnit, this.ignoreReadOnlyFormFields);
707
+ var _a;
708
+ const configFromManager = (_a = this._formConfigManager) === null || _a === void 0 ? void 0 : _a.getConfig(this.dataUnit, this.ignoreReadOnlyFormFields);
677
709
  if (!this.configName && !configFromManager) {
678
710
  return this.formConfig;
679
711
  }
@@ -687,15 +719,21 @@ export class SnkSimpleCrud {
687
719
  }
688
720
  this._formConfigManager.setConfig(this.formConfig);
689
721
  }
722
+ handleDataUnitOnInsertionMode() {
723
+ if (this.enableGridInsert)
724
+ return;
725
+ this.goToView(VIEW_MODE.FORM);
726
+ }
690
727
  /* istanbul ignore next */
691
728
  render() {
692
729
  var _a;
693
730
  if (this.dataUnit == undefined) {
694
731
  return;
695
732
  }
696
- return (h("snk-data-unit", { ref: ref => this._snkDataUnit = ref, class: "simple-crud__container", dataUnit: this.dataUnit, useCancelConfirm: this.useCancelConfirm, onDataStateChange: evt => this.onDataStateChange(evt), onCancelEdition: this.handleCancelEdit.bind(this), pageSize: this.getPageSize(), onInsertionMode: () => this.goToView(VIEW_MODE.FORM), onDataUnitReady: (evt) => this.dataUnitReady.emit(evt.detail), ignoreSaveMessage: this._currentViewMode === VIEW_MODE.GRID, onMessagesBuilderUpdated: evt => this.messagesBuilder = evt.detail, onDataUnitFieldsHidded: this.updateFormConfig.bind(this) }, h("header", null, h("slot", { name: "snkSimpleCrudHeader" })), h("section", { class: "ez-box ez-box--shadow simple-crud__container-section" }, h("snk-taskbar", { class: "ez-box ez-box--shadow ez-padding--medium", 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, actionsList: this.getActionsList(), disabledButtons: this._taskbarProcessor.disabledButtons, customButtons: this._taskbarProcessor.customButtons, "data-exporter-store-key": this.getDataExporterStoreKey(), slot: "leftButtons", presentationMode: PresentationMode.SECONDARY }, h("slot", { name: "TASKBAR_CUSTOM_ELEMENTS" })), h("ez-view-stack", { ref: (ref) => this._viewStack = ref, "data-element-id": "simple-crud" }, h("stack-item", null, h("ez-grid", { class: "ez-margin-bottom--large", ref: ref => this._grid = ref, dataUnit: this.dataUnit, config: this.gridConfig, "no-header": true, multipleSelection: this.multipleSelection, onEzDoubleClick: () => this.goToView(VIEW_MODE.FORM), onConfigChange: evt => this.gridConfigChangeHandler(evt), columnfilterDataSource: this.dataUnit.name && this.dataUnit.name.includes(InMemoryLoader.IN_MEMORY_DATA_UNIT_NAME)
733
+ const taskbarContent = (h("snk-taskbar", { class: this._currentViewMode === VIEW_MODE.FORM && "ez-box ez-box--shadow ez-padding--small", 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, actionsList: this.getActionsList(), disabledButtons: this._taskbarProcessor.disabledButtons, customButtons: this._taskbarProcessor.customButtons, "data-exporter-store-key": this.getDataExporterStoreKey(), slot: "leftButtons", presentationMode: PresentationMode.SECONDARY }, h("slot", { name: "TASKBAR_CUSTOM_ELEMENTS" })));
734
+ return (h("snk-data-unit", { ref: ref => this._snkDataUnit = ref, class: "simple-crud__container", dataUnit: this.dataUnit, useCancelConfirm: this.useCancelConfirm, onDataStateChange: evt => this.onDataStateChange(evt), onCancelEdition: this.handleCancelEdit.bind(this), pageSize: this.getPageSize(), onInsertionMode: this.handleDataUnitOnInsertionMode.bind(this), onDataUnitReady: (evt) => this.dataUnitReady.emit(evt.detail), ignoreSaveMessage: this._currentViewMode === VIEW_MODE.GRID, onMessagesBuilderUpdated: evt => this.messagesBuilder = evt.detail, onDataUnitFieldsHidded: this.updateFormConfig.bind(this), domainMessagesBuilder: this.domainMessagesBuilder }, h("header", null, h("slot", { name: "snkSimpleCrudHeader" })), h("section", { class: "ez-box ez-box--shadow simple-crud__container-section" }, this._currentViewMode === VIEW_MODE.FORM && taskbarContent, h("ez-view-stack", { ref: (ref) => this._viewStack = ref, "data-element-id": "simple-crud" }, h("stack-item", null, h("ez-grid", { class: "ez-margin-bottom--large", ref: ref => this._grid = ref, dataUnit: this.dataUnit, config: this.gridConfig, "no-header": true, multipleSelection: this.multipleSelection, onEzDoubleClick: () => this.goToView(VIEW_MODE.FORM), onConfigChange: evt => this.gridConfigChangeHandler(evt), columnfilterDataSource: this.dataUnit.name && this.dataUnit.name.includes(InMemoryLoader.IN_MEMORY_DATA_UNIT_NAME)
697
735
  ? undefined
698
- : this._multiSelectionListDataSource, useEnterLikeTab: this.useEnterLikeTab, autoFocus: this.autoFocus }, h("div", { slot: "footer" }, h("slot", { name: "snkSimpleCrudFooter" })))), h("stack-item", null, h("ez-form", { ref: (ref) => this._form = ref, class: `ez-margin-top--large ${this.handleShowFormConfig() ? "simple-crud__form--hidden" : ""}`, dataUnit: this.dataUnit, config: this.getFormConfig(), fieldToFocus: this._fieldToGetFocus, onEzFormSetFields: (evt) => this.handleFormSetFields(evt.detail), onEzFormRequestClearFieldToFocus: this.clearFieldToFocusHandler.bind(this) }), this.handleShowFormConfig() && h("snk-form-config", { messagesBuilder: this.messagesBuilder, dataUnit: this.dataUnit, configManager: this._formConfigManager, onConfigClose: () => this.closeFormConfig() })), this.messagesBuilder && h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this._currentViewMode, messagesBuilder: this.messagesBuilder, onConfigSelected: (evt) => this.goToView(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail), showActionButtons: this.showConfiguratorButtons, onSave: evt => this.handleConfiguratorEvent(evt, 'SAVE'), onCancel: evt => this.handleConfiguratorEvent(evt, 'CANCEL'), resourceID: this.resolveResourceID(), customContainerId: this._customContainerId })), h("div", { id: `${this._customContainerId}` }, h("slot", { name: "SnkConfigContainerSlot" }))), h("ez-modal", { modalSize: "small", closeEsc: false, closeOutsideClick: false, opened: this._showPopUpGridConfig, onEzCloseModal: () => this.closeGridConfig() }, h("snk-grid-config", { ref: ref => this._snkGridConfig = ref, config: this.gridConfig, "data-element-id": this._element.getAttribute(ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME), selectedIndex: 0, configName: this.configName, onConfigChange: (evt) => this.modalConfigChangeHandler(evt), onConfigCancel: () => this.closeGridConfig(), resourceID: this.resolveResourceID() }))));
736
+ : this._multiSelectionListDataSource, useEnterLikeTab: this.useEnterLikeTab, autoFocus: this.autoFocus, enableGridInsert: this.enableGridInsert, enableContinuousInsert: this._enableContinuousInsert }, this._currentViewMode === VIEW_MODE.GRID && taskbarContent, h("div", { slot: "footer" }, h("slot", { name: "snkSimpleCrudFooter" })))), h("stack-item", null, h("ez-form", { ref: (ref) => this._form = ref, class: `ez-margin-top--large ${this.handleShowFormConfig() ? "simple-crud__form--hidden" : ""}`, dataUnit: this.dataUnit, config: this.getFormConfig(), fieldToFocus: this._fieldToGetFocus, onEzFormSetFields: (evt) => this.handleFormSetFields(evt.detail), onEzFormRequestClearFieldToFocus: this.clearFieldToFocusHandler.bind(this) }), this.handleShowFormConfig() && h("snk-form-config", { messagesBuilder: this.messagesBuilder, dataUnit: this.dataUnit, configManager: this._formConfigManager, onConfigClose: () => this.closeFormConfig() })), this.messagesBuilder && h("snk-configurator", { ref: (ref) => this._snkConfigurator = ref, viewMode: this._currentViewMode, messagesBuilder: this.messagesBuilder, onConfigSelected: (evt) => this.goToView(evt.detail), onOpenConfig: (evt) => this.openConfig(evt.detail), showActionButtons: this.showConfiguratorButtons, onSave: evt => this.handleConfiguratorEvent(evt, 'SAVE'), onCancel: evt => this.handleConfiguratorEvent(evt, 'CANCEL'), resourceID: this.resolveResourceID(), customContainerId: this._customContainerId })), h("div", { id: `${this._customContainerId}` }, h("slot", { name: "SnkConfigContainerSlot" }))), h("ez-modal", { modalSize: "small", closeEsc: false, closeOutsideClick: false, opened: this._showPopUpGridConfig, onEzCloseModal: () => this.closeGridConfig() }, h("snk-grid-config", { ref: ref => this._snkGridConfig = ref, config: this.gridConfig, "data-element-id": this._element.getAttribute(ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME), selectedIndex: 0, configName: this.configName, onConfigChange: (evt) => this.modalConfigChangeHandler(evt), onConfigCancel: () => this.closeGridConfig(), resourceID: this.resolveResourceID() }))));
699
737
  }
700
738
  static get is() { return "snk-simple-crud"; }
701
739
  static get encapsulation() { return "scoped"; }
@@ -901,6 +939,24 @@ export class SnkSimpleCrud {
901
939
  "attribute": "resource-i-d",
902
940
  "reflect": false
903
941
  },
942
+ "enableGridInsert": {
943
+ "type": "boolean",
944
+ "mutable": false,
945
+ "complexType": {
946
+ "original": "boolean",
947
+ "resolved": "boolean",
948
+ "references": {}
949
+ },
950
+ "required": false,
951
+ "optional": true,
952
+ "docs": {
953
+ "tags": [],
954
+ "text": "Ativa inser\u00E7\u00E3o de registros no modo grade."
955
+ },
956
+ "attribute": "enable-grid-insert",
957
+ "reflect": false,
958
+ "defaultValue": "false"
959
+ },
904
960
  "taskbarManager": {
905
961
  "type": "unknown",
906
962
  "mutable": false,
@@ -1086,6 +1142,23 @@ export class SnkSimpleCrud {
1086
1142
  "reflect": false,
1087
1143
  "defaultValue": "true"
1088
1144
  },
1145
+ "domainMessagesBuilder": {
1146
+ "type": "string",
1147
+ "mutable": false,
1148
+ "complexType": {
1149
+ "original": "string",
1150
+ "resolved": "string",
1151
+ "references": {}
1152
+ },
1153
+ "required": false,
1154
+ "optional": false,
1155
+ "docs": {
1156
+ "tags": [],
1157
+ "text": "Define a chave customizada para sobrescrever as mensagens (N\u00E3o pegando pela entidade)"
1158
+ },
1159
+ "attribute": "domain-messages-builder",
1160
+ "reflect": false
1161
+ },
1089
1162
  "autoLoad": {
1090
1163
  "type": "boolean",
1091
1164
  "mutable": false,
@@ -1114,7 +1187,8 @@ export class SnkSimpleCrud {
1114
1187
  "_fieldToGetFocus": {},
1115
1188
  "_customContainerId": {},
1116
1189
  "_formFields": {},
1117
- "_fieldsProps": {}
1190
+ "_fieldsProps": {},
1191
+ "_enableContinuousInsert": {}
1118
1192
  };
1119
1193
  }
1120
1194
  static get events() {
@@ -29,12 +29,16 @@ export default class TaskbarProcessor {
29
29
  });
30
30
  }
31
31
  getButtonsArray(taskbarId, taskbarManager, dataState) {
32
- const defaults = this._defaultButtons[taskbarId];
32
+ const defaults = this.getButtonsFromKey(taskbarId);
33
33
  if (taskbarManager) {
34
34
  return taskbarManager.getButtons(taskbarId, dataState, [...defaults]);
35
35
  }
36
36
  return defaults;
37
37
  }
38
+ getButtonsFromKey(taskbarId) {
39
+ const btnsValue = this._defaultButtons[taskbarId];
40
+ return typeof btnsValue === 'function' ? btnsValue() : btnsValue;
41
+ }
38
42
  isEnabled(taskbarId, taskbarManager, buttonName, dataState, disabled) {
39
43
  const originalValue = disabled.includes(buttonName) ? false : true;
40
44
  if (taskbarManager && taskbarManager.isEnabled) {
@@ -29,6 +29,7 @@ export class SnkTaskbar {
29
29
  this.onSaveEvent = (action) => {
30
30
  switch (action.type) {
31
31
  case DUAction.FIELD_INVALIDATED:
32
+ case DUAction.INVALIDATE_CLEAN:
32
33
  case DUAction.DATA_SAVED:
33
34
  case DUAction.SAVING_ERROR:
34
35
  this._isWaitingForSave = false;
@@ -67,6 +68,16 @@ export class SnkTaskbar {
67
68
  this.getCustomElements(true);
68
69
  }
69
70
  }
71
+ handleTaskbarSaveLocker() {
72
+ if (this._isWaitingForSave !== true) {
73
+ this._isWaitingForSave = true;
74
+ }
75
+ }
76
+ handleTaskbarSaveUnlocker() {
77
+ if (this._isWaitingForSave === true) {
78
+ this._isWaitingForSave = false;
79
+ }
80
+ }
70
81
  hasToSearchCustomElements(event) {
71
82
  return this.customSlotId === event.detail && !this._slotContainer;
72
83
  }
@@ -85,6 +96,14 @@ export class SnkTaskbar {
85
96
  this._hasToUpdateOverFlow = true;
86
97
  }
87
98
  }
99
+ observeIsWaitingForSave(newValue, oldValue) {
100
+ if (newValue == true && oldValue == false) {
101
+ this.taskbarSaveLocker.emit();
102
+ }
103
+ if (newValue == false && oldValue == true) {
104
+ this.taskbarSaveUnlocker.emit();
105
+ }
106
+ }
88
107
  // Internal methods
89
108
  elementsFromString(strButtons) {
90
109
  const elements = [];
@@ -719,6 +738,36 @@ export class SnkTaskbar {
719
738
  "resolved": "string",
720
739
  "references": {}
721
740
  }
741
+ }, {
742
+ "method": "taskbarSaveLocker",
743
+ "name": "taskbarSaveLocker",
744
+ "bubbles": true,
745
+ "cancelable": true,
746
+ "composed": true,
747
+ "docs": {
748
+ "tags": [],
749
+ "text": "Emitido sempre que um save \u00E9 iniciado pela taskbar."
750
+ },
751
+ "complexType": {
752
+ "original": "void",
753
+ "resolved": "void",
754
+ "references": {}
755
+ }
756
+ }, {
757
+ "method": "taskbarSaveUnlocker",
758
+ "name": "taskbarSaveUnlocker",
759
+ "bubbles": true,
760
+ "cancelable": true,
761
+ "composed": true,
762
+ "docs": {
763
+ "tags": [],
764
+ "text": "Emitido sempre que o ocorre alguma action que libera o save."
765
+ },
766
+ "complexType": {
767
+ "original": "void",
768
+ "resolved": "void",
769
+ "references": {}
770
+ }
722
771
  }];
723
772
  }
724
773
  static get elementRef() { return "_element"; }
@@ -732,6 +781,9 @@ export class SnkTaskbar {
732
781
  }, {
733
782
  "propName": "_lastWidth",
734
783
  "methodName": "observeLastWidth"
784
+ }, {
785
+ "propName": "_isWaitingForSave",
786
+ "methodName": "observeIsWaitingForSave"
735
787
  }];
736
788
  }
737
789
  static get listeners() {
@@ -741,6 +793,18 @@ export class SnkTaskbar {
741
793
  "target": "window",
742
794
  "capture": false,
743
795
  "passive": false
796
+ }, {
797
+ "name": "taskbarSaveLocker",
798
+ "method": "handleTaskbarSaveLocker",
799
+ "target": "window",
800
+ "capture": false,
801
+ "passive": false
802
+ }, {
803
+ "name": "taskbarSaveUnlocker",
804
+ "method": "handleTaskbarSaveUnlocker",
805
+ "target": "window",
806
+ "capture": false,
807
+ "passive": false
744
808
  }];
745
809
  }
746
810
  }
@@ -1,4 +1,4 @@
1
- import { NumberUtils, ObjectUtils } from "@sankhyalabs/core";
1
+ import { NumberUtils, ObjectUtils, StringUtils } from "@sankhyalabs/core";
2
2
  export default class RmPrecisionCustomValueFormatter {
3
3
  setGrid(grid) {
4
4
  if (this._grid) {
@@ -8,7 +8,7 @@ export default class RmPrecisionCustomValueFormatter {
8
8
  this.refreshSelectedRows();
9
9
  }
10
10
  setDataState(dataState) {
11
- if (ObjectUtils.objectToString(dataState) === ObjectUtils.objectToString(this._dataState)) {
11
+ if (this._dataState && ObjectUtils.equals(dataState === null || dataState === void 0 ? void 0 : dataState.metadataByRow, this._dataState.metadataByRow)) {
12
12
  return;
13
13
  }
14
14
  this._dataState = dataState;
@@ -16,7 +16,7 @@ export default class RmPrecisionCustomValueFormatter {
16
16
  }
17
17
  format(currentValue, column, recordId) {
18
18
  var _a;
19
- if (!currentValue) {
19
+ if (StringUtils.isEmpty(currentValue)) {
20
20
  return currentValue;
21
21
  }
22
22
  const rowMetadata = (_a = this._dataState) === null || _a === void 0 ? void 0 : _a.metadataByRow.get(recordId);
@@ -71,6 +71,7 @@ export class ConfigStorage {
71
71
  if (config == undefined) {
72
72
  return;
73
73
  }
74
+ name = this.handleLegacyConfigAsString(name, CONFIG_SOURCE.grid);
74
75
  await this.deleteGridConfigCache(name, resourceID);
75
76
  return this.gridConfigFetcher.saveConfig(config, name, resourceID);
76
77
  }
@@ -1,5 +1,5 @@
1
1
  import { ChangeOperation, DataType, DataUnit, DateUtils, StringUtils, } from '@sankhyalabs/core';
2
- import { applyFilter, applySorting, buildPaginationInfo } from './dataUnitInMemoryUtils';
2
+ import { buildLoadDataResponse } from './dataUnitInMemoryUtils';
3
3
  export default class InMemoryLoader {
4
4
  constructor(metadata, records, config) {
5
5
  this.metadata = metadata;
@@ -82,9 +82,7 @@ export default class InMemoryLoader {
82
82
  return StringUtils.generateUUID();
83
83
  }
84
84
  inMemoryLoader(dataUnit, request, recordsIn) {
85
- let records = applyFilter(recordsIn, dataUnit, request.filters);
86
- records = applySorting(records, dataUnit, request.sort);
87
- return Promise.resolve({ records, paginationInfo: buildPaginationInfo(records, request.offset, request.limit) });
85
+ return buildLoadDataResponse(recordsIn, dataUnit, request);
88
86
  }
89
87
  metadaLoader() {
90
88
  return Promise.resolve(this._metadata);
@@ -11,6 +11,21 @@ export function applyFilter(records, dataUnit, filters) {
11
11
  }
12
12
  return records.filter(filterFunction);
13
13
  }
14
+ export function buildLoadDataResponse(recordsIn, dataUnit, request) {
15
+ let records = recordsIn ? [...recordsIn] : [];
16
+ records = applyFilter(records, dataUnit, request.filters);
17
+ records = applySorting(records, dataUnit, request.sort);
18
+ const { offset, limit } = request;
19
+ const paginationInfoBuilderParams = {
20
+ recordsLength: records.length,
21
+ offset,
22
+ recordsPerPage: limit,
23
+ };
24
+ return Promise.resolve({
25
+ records: getPagesByRecords(records, offset, limit),
26
+ paginationInfo: buildPaginationInfo(paginationInfoBuilderParams),
27
+ });
28
+ }
14
29
  export function applySorting(records, dataUnit, sorting) {
15
30
  if (sorting == undefined || sorting.length == 0) {
16
31
  return records;
@@ -21,17 +36,27 @@ export function applySorting(records, dataUnit, sorting) {
21
36
  }
22
37
  return records.sort(sortingFunction);
23
38
  }
24
- export function buildPaginationInfo(records, offset = 0, limit = 0) {
25
- if (records === undefined) {
26
- return undefined;
39
+ function hasValidLimitAndOffset(offset, limit) {
40
+ return offset >= 0 && limit >= 0;
41
+ }
42
+ export function getPagesByRecords(records, offset = 0, limit = 0) {
43
+ if (!records || !records.length || !hasValidLimitAndOffset(offset, limit))
44
+ return [];
45
+ if (limit === 0 && offset === 0)
46
+ return records;
47
+ return records.slice(offset, offset + limit);
48
+ }
49
+ export function buildPaginationInfo({ recordsLength = 0, offset = 0, recordsPerPage = 0 }) {
50
+ if (!recordsLength) {
51
+ return { currentPage: 0, firstRecord: 0, lastRecord: 0, total: 0, hasMore: false };
27
52
  }
28
- const total = (records === null || records === void 0 ? void 0 : records.length) || 0;
29
- const lastRecord = Math.min(offset + limit, total);
53
+ const lastRecordIndex = offset + recordsPerPage;
54
+ const lastRecord = lastRecordIndex ? Math.min(lastRecordIndex, recordsLength) : recordsLength;
30
55
  return {
31
- currentPage: limit === 0 ? 0 : Math.ceil(offset / limit),
32
- firstRecord: offset,
56
+ currentPage: recordsPerPage === 0 ? 0 : Math.ceil(offset / recordsPerPage),
57
+ firstRecord: offset + 1,
33
58
  lastRecord: lastRecord,
34
- total: total,
35
- hasMore: !!(total - lastRecord),
59
+ total: recordsLength,
60
+ hasMore: lastRecord < recordsLength,
36
61
  };
37
62
  }
@@ -6,7 +6,7 @@ var __asyncValues = (this && this.__asyncValues) || function (o) {
6
6
  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
7
7
  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }); }, reject); }
8
8
  };
9
- import { ApplicationContext, ErrorException, ObjectUtils, StringUtils, WarningException } from '@sankhyalabs/core';
9
+ import { ApplicationContext, ErrorException, ServiceCanceledException, ObjectUtils, StringUtils, WarningException } from '@sankhyalabs/core';
10
10
  import { batchRequests } from 'graphql-request';
11
11
  import UrlUtils from "../../../lib/utils/urlutils";
12
12
  import { PrintUtils } from '../../utils/PrintUtils';
@@ -352,6 +352,7 @@ export class DataFetcher {
352
352
  }
353
353
  }
354
354
  async executePendingRequest(watingRequestsById) {
355
+ var _a, _b;
355
356
  const requestsBatch = [];
356
357
  let quietMode = true;
357
358
  watingRequestsById.forEach((waitingReq) => {
@@ -362,31 +363,36 @@ export class DataFetcher {
362
363
  const response = await this.fecthGraphQL(requestsBatch, quietMode);
363
364
  const { data: dataResponse, errors: errorsResponse, extensions } = response;
364
365
  //Reject promises with errors from query
365
- errorsResponse.forEach((errorResponse) => {
366
- Object.entries(errorResponse).forEach(async ([key, val]) => {
367
- const waitingRequest = watingRequestsById.get(val.request.variables[val.index].queryID);
366
+ for (const errorResponse of errorsResponse) {
367
+ const values = Object.values(errorResponse);
368
+ for (const value of values) {
369
+ const waitingRequest = watingRequestsById.get(value.request.variables[value.index].queryID);
368
370
  const hasClientEvent = await this.proccesGraphQLClientEvents(extensions, waitingRequest.request, waitingRequest.resolve, waitingRequest.reject);
369
- Promise.race([
371
+ const data = await Promise.race([
370
372
  waitingRequest.promise,
371
373
  new Promise((resolve) => {
372
374
  resolve(false);
373
375
  })
374
- ]).then((data) => {
375
- var _a;
376
- if (!hasClientEvent || data === false) {
377
- (((_a = watingRequestsById.get(val.request.variables[val.index].queryID)) === null || _a === void 0 ? void 0 : _a.reject) || Promise.reject)(new ErrorException("Falha detectada", val.message));
376
+ ]);
377
+ if (!hasClientEvent || data === false) {
378
+ if (Object.keys(errorResponse[0].extensions).includes("SERVICE_CANCELED") || Object.keys(extensions).includes("isServiceCancelled")) {
379
+ (((_a = watingRequestsById.get(value.request.variables[value.index].queryID)) === null || _a === void 0 ? void 0 : _a.reject) || Promise.reject)(new ServiceCanceledException("Service canceled", value.message));
378
380
  }
379
- });
380
- });
381
- });
381
+ else {
382
+ (((_b = watingRequestsById.get(value.request.variables[value.index].queryID)) === null || _b === void 0 ? void 0 : _b.reject) || Promise.reject)(new ErrorException("Falha detectada", value.message));
383
+ }
384
+ }
385
+ }
386
+ }
382
387
  //Resolve promises with data from query
383
- dataResponse.forEach((data) => {
384
- Object.entries(data).forEach(async ([key, val]) => {
388
+ for (const data of dataResponse) {
389
+ const entries = Object.entries(data);
390
+ for (const [key, val] of entries) {
385
391
  const waitingRequest = watingRequestsById.get(key);
386
392
  await this.proccesGraphQLClientEvents(extensions, waitingRequest.request, waitingRequest.resolve, waitingRequest.reject);
387
393
  ((waitingRequest === null || waitingRequest === void 0 ? void 0 : waitingRequest.resolve) || Promise.resolve)(val);
388
- });
389
- });
394
+ }
395
+ }
390
396
  }
391
397
  buildGraphQlURL(quietMode) {
392
398
  const urlParams = UrlUtils.getQueryParams(location.search);
@@ -6,21 +6,23 @@ const SERVICE = {
6
6
  download: "AnexoSistemaSP.baixar",
7
7
  };
8
8
  export class AnexoSistemaFetcher {
9
- constructor(entityName, registerKey, dataUnitName) {
9
+ constructor(entityName, dataUnitName) {
10
10
  var _a;
11
11
  this.entityName = entityName;
12
- this.registerKey = registerKey;
13
12
  this.dataUnitName = dataUnitName;
14
13
  this.validateFields = (fields) => {
15
14
  if (!!fields.LINK && !!fields.NOMEARQUIVO)
16
15
  throw new Error(SaveErrorsEnum.LINK_AND_FILE_AT_THE_SAME_TIME);
17
16
  if (!fields.LINK && !fields.NOMEARQUIVO)
18
17
  throw new Error(SaveErrorsEnum.ANY_LINK_OR_FILE_FILLED);
19
- if (!this.registerKey)
18
+ if (!this._registerKey)
20
19
  throw new Error('Register key can not be null');
21
20
  };
22
21
  this.resourceID = (window["resourceID"] || ((_a = window["workspace"]) === null || _a === void 0 ? void 0 : _a.resourceID));
23
22
  }
23
+ set registerKey(registerKey) {
24
+ this._registerKey = registerKey;
25
+ }
24
26
  async save(change) {
25
27
  var _a, _b;
26
28
  let { updatingFields: fields } = change;
@@ -39,7 +41,7 @@ export class AnexoSistemaFetcher {
39
41
  nameAttach: fileInfo === null || fileInfo === void 0 ? void 0 : fileInfo.name,
40
42
  link: fields.LINK,
41
43
  nameEntity: this.entityName,
42
- pkEntity: this.registerKey,
44
+ pkEntity: this._registerKey,
43
45
  typeAcess: fields.TIPOACESSO,
44
46
  typeApres: fields.TIPOAPRES,
45
47
  }
@@ -79,7 +81,7 @@ export class AnexoSistemaFetcher {
79
81
  nameAttach: fileInfo === null || fileInfo === void 0 ? void 0 : fileInfo.name,
80
82
  link: fields.LINK,
81
83
  nameEntity: this.entityName,
82
- pkEntity: this.registerKey,
84
+ pkEntity: this._registerKey,
83
85
  typeAcess: fields.TIPOACESSO,
84
86
  typeApres: fields.TIPOAPRES,
85
87
  }
@@ -44,12 +44,19 @@ export class DatasetStrategy {
44
44
  const records = this.processRecords(dataUnit, fields, responseRecords);
45
45
  const loadingInProgress = pagerId != undefined;
46
46
  const count = loadingInfo.count + records.length;
47
+ const isInsertingNewRecord = dataUnit.hasNewRecord();
47
48
  const needReload = !loadingInProgress && localSorting.length > 0;
49
+ /**
50
+ * Caso precise recarregar dados, porém está no meio de uma inserção, os dados não devem recarregados instantaneamente,
51
+ * Mas sim, sinalizar que o dataUnit está aguardando para der recarregado.
52
+ */
53
+ if (needReload && isInsertingNewRecord) {
54
+ dataUnit.setWaitingToReload(true);
55
+ }
48
56
  return Promise.resolve({
49
57
  records,
50
58
  loadingInfo: Object.assign(Object.assign({}, loadingInfo), { pagerId,
51
- loadingInProgress, total: loadingInProgress ? undefined : count, count,
52
- needReload })
59
+ loadingInProgress, total: loadingInProgress ? undefined : count, count, needReload: needReload && !isInsertingNewRecord })
53
60
  });
54
61
  }
55
62
  catch (error) {
@@ -155,7 +155,10 @@ export class FormConfigFetcher extends ResourceFetcher {
155
155
  query: this.queryConfig.get("fetchDefaultConfig"),
156
156
  })
157
157
  .then((result) => {
158
- resolve(ObjectUtils.stringToObject((result === null || result === void 0 ? void 0 : result.resource) || ''));
158
+ if (!(result === null || result === void 0 ? void 0 : result.resource)) {
159
+ resolve(null);
160
+ }
161
+ resolve(ObjectUtils.stringToObject(result === null || result === void 0 ? void 0 : result.resource));
159
162
  })
160
163
  .catch((error) => {
161
164
  reject(error);
@@ -6,7 +6,7 @@ const snkDataUnitMessages = {
6
6
  },
7
7
  cancelInfo: {
8
8
  clone: "Duplicação descartada!",
9
- insert: "A inclusão descartada!",
9
+ insert: "A inclusão foi descartada!",
10
10
  update: "A edição foi descartada!"
11
11
  },
12
12
  confirm: {
@@ -7,7 +7,7 @@ const snkExporterMessages = {
7
7
  emailSenderOptStep_subtitle: "Primeiro, escolha o formato do arquivo",
8
8
  emailSenderOptStep_lblFormat: "Formato:",
9
9
  emailSenderOptStep_formatPDF: "PDF (.pdf)",
10
- emailSenderOptStep_formatXLSX: "Planilha (.xlsx)",
10
+ emailSenderOptStep_formatXLS: "Planilha (.xls)",
11
11
  emailSenderOptStep_export: "Exportar:",
12
12
  emailSenderOptStep_allData: "Toda a grade",
13
13
  emailSenderOptStep_currentPage: "Somente a página atual",
@@ -1,5 +1,9 @@
1
1
  export const snkGridMessages = {
2
- findColumn: "Busca de colunas"
2
+ findColumn: "Busca de colunas",
3
+ cancelConfirmation: {
4
+ title: "Aviso",
5
+ message: "As alterações realizadas serão descartadas<br/><br/><b>Você realmente gostaria de cancelar?</b>",
6
+ }
3
7
  };
4
8
  export const snkGridConfigMessages = {
5
9
  gridConfiguration: "Configuração da Grade",