@sankhyalabs/sankhyablocks 1.3.33 → 1.4.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/dist/cjs/SnkMessageBuilder-7717f1e4.js +326 -0
  2. package/dist/cjs/app-globals-3a1e7e63.js +5 -0
  3. package/dist/cjs/css-shim-b8158822.js +6 -0
  4. package/dist/cjs/dom-36862b77.js +75 -0
  5. package/dist/cjs/filter-item-type.enum-e2e1bc5b.js +14 -0
  6. package/dist/cjs/index-02201bc9.js +2397 -0
  7. package/dist/cjs/index-b0b676c5.js +3298 -0
  8. package/dist/cjs/loader.cjs.js +19 -3
  9. package/dist/cjs/sankhyablocks.cjs.js +117 -5
  10. package/dist/cjs/shadow-css-346c0795.js +389 -0
  11. package/dist/cjs/snk-application.cjs.entry.js +721 -169
  12. package/dist/cjs/snk-crud.cjs.entry.js +70 -0
  13. package/dist/cjs/snk-data-unit.cjs.entry.js +280 -0
  14. package/dist/cjs/snk-filter-bar.cjs.entry.js +278 -0
  15. package/dist/cjs/snk-filter-binary-select.cjs.entry.js +47 -0
  16. package/dist/cjs/snk-filter-detail.cjs.entry.js +49 -0
  17. package/dist/cjs/snk-filter-item.cjs.entry.js +154 -0
  18. package/dist/cjs/snk-filter-list.cjs.entry.js +91 -0
  19. package/dist/cjs/snk-filter-multi-select.cjs.entry.js +23 -0
  20. package/dist/cjs/snk-filter-number.cjs.entry.js +24 -0
  21. package/dist/cjs/snk-filter-period.cjs.entry.js +37 -0
  22. package/dist/cjs/snk-filter-search.cjs.entry.js +44 -0
  23. package/dist/cjs/snk-filter-text.cjs.entry.js +22 -0
  24. package/dist/cjs/snk-form.cjs.entry.js +133 -0
  25. package/dist/cjs/snk-grid.cjs.entry.js +79 -0
  26. package/dist/cjs/snk-pesquisa.cjs.entry.js +5 -5
  27. package/dist/cjs/snk-taskbar.cjs.entry.js +160 -0
  28. package/dist/cjs/taskbar-elements-283c737e.js +93 -0
  29. package/dist/cjs/taskbar-processor-6bd0d35c.js +47 -0
  30. package/dist/cjs/teste-pesquisa.cjs.entry.js +5 -5
  31. package/dist/collection/collection-manifest.json +17 -2
  32. package/dist/collection/components/snk-application/errorhandler/snk-error-handler.js +9 -2
  33. package/dist/collection/components/snk-application/snk-application.js +1126 -621
  34. package/dist/collection/components/snk-crud/snk-crud.css +6 -0
  35. package/dist/collection/components/snk-crud/snk-crud.js +203 -0
  36. package/dist/collection/components/snk-data-unit/snk-data-unit.css +6 -0
  37. package/dist/collection/components/snk-data-unit/snk-data-unit.js +544 -0
  38. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-binary-select.js +88 -0
  39. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-multi-select.js +64 -0
  40. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-number.js +65 -0
  41. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-period.js +78 -0
  42. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-search.js +118 -0
  43. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-text.js +63 -0
  44. package/dist/collection/components/snk-filter-bar/filter-item/filter-item-type.enum.js +10 -0
  45. package/dist/collection/components/snk-filter-bar/filter-item/snk-filter-detail.js +118 -0
  46. package/dist/collection/components/snk-filter-bar/filter-item/snk-filter-item.js +255 -0
  47. package/dist/collection/components/snk-filter-bar/filter-list/snk-filter-list.js +233 -0
  48. package/dist/collection/components/snk-filter-bar/snk-filter-bar.css +114 -0
  49. package/dist/collection/components/snk-filter-bar/snk-filter-bar.js +353 -0
  50. package/dist/collection/components/snk-form/snk-form.css +34 -0
  51. package/dist/collection/components/snk-form/snk-form.js +258 -0
  52. package/dist/collection/components/snk-grid/snk-grid.css +18 -0
  53. package/dist/collection/components/snk-grid/snk-grid.js +205 -0
  54. package/dist/collection/components/snk-pesquisa/snk-pesquisa.js +80 -79
  55. package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +86 -0
  56. package/dist/collection/components/snk-taskbar/processor/taskbar-processor.js +43 -0
  57. package/dist/collection/components/snk-taskbar/snk-taskbar.css +3 -0
  58. package/dist/collection/components/snk-taskbar/snk-taskbar.js +307 -0
  59. package/dist/collection/components/teste-pesquisa/teste-pesquisa.js +12 -9
  60. package/dist/collection/lib/http/data-fetcher/DataFetcher.js +38 -13
  61. package/dist/collection/lib/http/data-fetcher/fetchers/dataunit-fetcher.js +52 -21
  62. package/dist/collection/lib/http/data-fetcher/fetchers/filter-bar-config-fetcher.js +54 -0
  63. package/dist/collection/lib/http/data-fetcher/fetchers/grid-config-fetcher.js +4 -3
  64. package/dist/collection/lib/http/data-fetcher/fetchers/totals-fetcher.js +47 -0
  65. package/dist/collection/lib/index.js +1 -0
  66. package/dist/collection/lib/message/SnkMessageBuilder.js +121 -0
  67. package/dist/collection/lib/message/resources/snk-data-unit.msg.js +23 -0
  68. package/dist/collection/lib/message/resources/snk-filter-bar.msg.js +18 -0
  69. package/dist/collection/lib/message/resources/snk-form.msg.js +10 -0
  70. package/dist/collection/lib/message/resources/snk-taskbar.msg.js +17 -0
  71. package/dist/components/SnkMessageBuilder.js +303 -0
  72. package/dist/components/filter-item-type.enum.js +12 -0
  73. package/dist/components/index.d.ts +18 -5
  74. package/dist/components/index.js +22 -0
  75. package/dist/components/index2.js +2384 -0
  76. package/dist/components/snk-application2.js +701 -140
  77. package/dist/components/snk-crud.d.ts +11 -0
  78. package/dist/components/snk-crud.js +133 -0
  79. package/dist/components/snk-data-unit.d.ts +11 -0
  80. package/dist/components/snk-data-unit.js +303 -0
  81. package/dist/components/snk-filter-bar.d.ts +11 -0
  82. package/dist/components/snk-filter-bar.js +6 -0
  83. package/dist/components/snk-filter-bar2.js +310 -0
  84. package/dist/components/snk-filter-binary-select.d.ts +11 -0
  85. package/dist/components/snk-filter-binary-select.js +63 -0
  86. package/dist/components/snk-filter-detail.d.ts +11 -0
  87. package/dist/components/snk-filter-detail.js +6 -0
  88. package/dist/components/snk-filter-detail2.js +63 -0
  89. package/dist/components/snk-filter-item.d.ts +11 -0
  90. package/dist/components/snk-filter-item.js +6 -0
  91. package/dist/components/snk-filter-item2.js +175 -0
  92. package/dist/components/snk-filter-list.d.ts +11 -0
  93. package/dist/components/snk-filter-list.js +6 -0
  94. package/dist/components/snk-filter-list2.js +111 -0
  95. package/dist/components/snk-filter-multi-select.d.ts +11 -0
  96. package/dist/components/snk-filter-multi-select.js +39 -0
  97. package/dist/components/snk-filter-number.d.ts +11 -0
  98. package/dist/components/snk-filter-number.js +40 -0
  99. package/dist/components/snk-filter-period.d.ts +11 -0
  100. package/dist/components/snk-filter-period.js +53 -0
  101. package/dist/components/snk-filter-search.d.ts +11 -0
  102. package/dist/components/snk-filter-search.js +62 -0
  103. package/dist/components/snk-filter-text.d.ts +11 -0
  104. package/dist/components/snk-filter-text.js +38 -0
  105. package/dist/components/snk-form.d.ts +11 -0
  106. package/dist/components/snk-form.js +6 -0
  107. package/dist/components/snk-form2.js +159 -0
  108. package/dist/components/snk-grid.d.ts +11 -0
  109. package/dist/components/snk-grid.js +6 -0
  110. package/dist/components/snk-grid2.js +127 -0
  111. package/dist/components/snk-pesquisa2.js +1 -1
  112. package/dist/components/snk-taskbar.d.ts +11 -0
  113. package/dist/components/snk-taskbar.js +6 -0
  114. package/dist/components/snk-taskbar2.js +264 -0
  115. package/dist/components/taskbar-processor.js +45 -0
  116. package/dist/components/teste-pesquisa.js +1 -1
  117. package/dist/esm/SnkMessageBuilder-a7da466b.js +303 -0
  118. package/dist/esm/app-globals-0f993ce5.js +3 -0
  119. package/dist/esm/css-shim-b3f2ee8d.js +4 -0
  120. package/dist/esm/dom-665d6011.js +73 -0
  121. package/dist/esm/filter-item-type.enum-61fbf80a.js +12 -0
  122. package/dist/esm/index-2b4d2d14.js +3262 -0
  123. package/dist/esm/index-f1d3e4da.js +2384 -0
  124. package/dist/esm/loader.js +19 -3
  125. package/dist/esm/polyfills/css-shim.js +1 -1
  126. package/dist/esm/sankhyablocks.js +117 -5
  127. package/dist/esm/shadow-css-b18e99d7.js +387 -0
  128. package/dist/esm/snk-application.entry.js +693 -141
  129. package/dist/esm/snk-crud.entry.js +66 -0
  130. package/dist/esm/snk-data-unit.entry.js +276 -0
  131. package/dist/esm/snk-filter-bar.entry.js +274 -0
  132. package/dist/esm/snk-filter-binary-select.entry.js +43 -0
  133. package/dist/esm/snk-filter-detail.entry.js +45 -0
  134. package/dist/esm/snk-filter-item.entry.js +150 -0
  135. package/dist/esm/snk-filter-list.entry.js +87 -0
  136. package/dist/esm/snk-filter-multi-select.entry.js +19 -0
  137. package/dist/esm/snk-filter-number.entry.js +20 -0
  138. package/dist/esm/snk-filter-period.entry.js +33 -0
  139. package/dist/esm/snk-filter-search.entry.js +40 -0
  140. package/dist/esm/snk-filter-text.entry.js +18 -0
  141. package/dist/esm/snk-form.entry.js +129 -0
  142. package/dist/esm/snk-grid.entry.js +75 -0
  143. package/dist/esm/snk-pesquisa.entry.js +2 -2
  144. package/dist/esm/snk-taskbar.entry.js +156 -0
  145. package/dist/esm/taskbar-elements-35d64ff9.js +90 -0
  146. package/dist/esm/taskbar-processor-aa6772c9.js +45 -0
  147. package/dist/esm/teste-pesquisa.entry.js +2 -2
  148. package/dist/sankhyablocks/SnkMessageBuilder-a7da466b.js +303 -0
  149. package/dist/sankhyablocks/app-globals-0f993ce5.js +3 -0
  150. package/dist/sankhyablocks/css-shim-b3f2ee8d.js +4 -0
  151. package/dist/sankhyablocks/dom-665d6011.js +73 -0
  152. package/dist/sankhyablocks/filter-item-type.enum-61fbf80a.js +12 -0
  153. package/dist/sankhyablocks/index-2b4d2d14.js +3262 -0
  154. package/dist/sankhyablocks/index-f1d3e4da.js +2384 -0
  155. package/dist/sankhyablocks/index.esm.js +1 -0
  156. package/dist/sankhyablocks/sankhyablocks.esm.js +129 -1
  157. package/dist/sankhyablocks/shadow-css-b18e99d7.js +387 -0
  158. package/dist/sankhyablocks/snk-application.entry.js +8148 -0
  159. package/dist/sankhyablocks/snk-crud.entry.js +66 -0
  160. package/dist/sankhyablocks/snk-data-unit.entry.js +276 -0
  161. package/dist/sankhyablocks/snk-filter-bar.entry.js +274 -0
  162. package/dist/sankhyablocks/snk-filter-binary-select.entry.js +43 -0
  163. package/dist/sankhyablocks/snk-filter-detail.entry.js +45 -0
  164. package/dist/sankhyablocks/snk-filter-item.entry.js +150 -0
  165. package/dist/sankhyablocks/snk-filter-list.entry.js +87 -0
  166. package/dist/sankhyablocks/snk-filter-multi-select.entry.js +19 -0
  167. package/dist/sankhyablocks/snk-filter-number.entry.js +20 -0
  168. package/dist/sankhyablocks/snk-filter-period.entry.js +33 -0
  169. package/dist/sankhyablocks/snk-filter-search.entry.js +40 -0
  170. package/dist/sankhyablocks/snk-filter-text.entry.js +18 -0
  171. package/dist/sankhyablocks/snk-form.entry.js +129 -0
  172. package/dist/sankhyablocks/snk-grid.entry.js +75 -0
  173. package/dist/sankhyablocks/snk-pesquisa.entry.js +311 -0
  174. package/dist/sankhyablocks/snk-taskbar.entry.js +156 -0
  175. package/dist/sankhyablocks/taskbar-elements-35d64ff9.js +90 -0
  176. package/dist/sankhyablocks/taskbar-processor-aa6772c9.js +45 -0
  177. package/dist/sankhyablocks/teste-pesquisa.entry.js +33 -0
  178. package/dist/types/components/snk-application/errorhandler/snk-error-handler.d.ts +1 -0
  179. package/dist/types/components/snk-application/snk-application.d.ts +145 -15
  180. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-binary-select.d.ts +12 -0
  181. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-multi-select.d.ts +7 -0
  182. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-number.d.ts +7 -0
  183. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-period.d.ts +14 -0
  184. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-search.d.ts +12 -0
  185. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-text.d.ts +7 -0
  186. package/dist/types/components/snk-filter-bar/filter-item/filter-item-type.enum.d.ts +9 -0
  187. package/dist/types/components/snk-filter-bar/filter-item/snk-filter-detail.d.ts +14 -0
  188. package/dist/types/components/snk-filter-bar/filter-list/snk-filter-list.d.ts +40 -0
  189. package/dist/types/components/snk-filter-bar/snk-filter-bar.d.ts +51 -0
  190. package/dist/types/components/snk-taskbar/elements/taskbar-elements.d.ts +29 -0
  191. package/dist/types/components/snk-taskbar/processor/taskbar-processor.d.ts +12 -0
  192. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +84 -0
  193. package/dist/types/components.d.ts +696 -8
  194. package/dist/types/lib/http/data-fetcher/DataFetcher.d.ts +7 -6
  195. package/dist/types/lib/http/data-fetcher/fetchers/dataunit-fetcher.d.ts +2 -0
  196. package/dist/types/lib/http/data-fetcher/fetchers/filter-bar-config-fetcher.d.ts +6 -0
  197. package/dist/types/lib/http/data-fetcher/fetchers/grid-config-fetcher.d.ts +1 -1
  198. package/dist/types/lib/http/data-fetcher/fetchers/totals-fetcher.d.ts +8 -0
  199. package/dist/types/lib/index.d.ts +1 -0
  200. package/dist/types/lib/message/SnkMessageBuilder.d.ts +42 -0
  201. package/dist/types/lib/message/resources/snk-data-unit.msg.d.ts +2 -0
  202. package/dist/types/lib/message/resources/snk-filter-bar.msg.d.ts +2 -0
  203. package/dist/types/lib/message/resources/snk-form.msg.d.ts +2 -0
  204. package/dist/types/lib/message/resources/snk-taskbar.msg.d.ts +2 -0
  205. package/dist/types/stencil-public-runtime.d.ts +15 -4
  206. package/loader/package.json +1 -0
  207. package/package.json +5 -5
  208. package/react/components.d.ts +0 -2
  209. package/react/components.js +0 -2
  210. package/react/components.js.map +1 -1
  211. package/dist/cjs/index-1133bc2a.js +0 -1235
  212. package/dist/esm/index-ffda6382.js +0 -1208
  213. package/dist/sankhyablocks/p-2a7b4cb3.entry.js +0 -1
  214. package/dist/sankhyablocks/p-9520d78a.entry.js +0 -1
  215. package/dist/sankhyablocks/p-bd1b31db.entry.js +0 -69
  216. package/dist/sankhyablocks/p-edcb9d8e.js +0 -2
@@ -0,0 +1,307 @@
1
+ import { ApplicationContext } from '@sankhyalabs/core';
2
+ import { h, Host } from '@stencil/core';
3
+ import { TaskbarElement, buildElem, AuthorizationElements, buildCustomButton, VisibleWhenForbidden } from './elements/taskbar-elements';
4
+ export class SnkTaskbar {
5
+ constructor() {
6
+ this._titleKeyByElement = {
7
+ [TaskbarElement.UPDATE]: "snkTaskbar.titleUpdate",
8
+ [TaskbarElement.PREVIOUS]: "snkTaskbar.titlePrevious",
9
+ [TaskbarElement.NEXT]: "snkTaskbar.titleNext",
10
+ [TaskbarElement.REFRESH]: "snkTaskbar.titleRefresh",
11
+ [TaskbarElement.CLONE]: "snkTaskbar.titleClone",
12
+ [TaskbarElement.REMOVE]: "snkTaskbar.titleRemove",
13
+ [TaskbarElement.MORE_OPTIONS]: "snkTaskbar.titleMoreOptions",
14
+ [TaskbarElement.INSERT]: "snkTaskbar.titleInsert",
15
+ [TaskbarElement.CANCEL]: "snkTaskbar.titleCancel",
16
+ [TaskbarElement.SAVE]: "snkTaskbar.titleSave",
17
+ [TaskbarElement.GRID_MODE]: "snkTaskbar.titleGridMode",
18
+ [TaskbarElement.CONFIG_GRID]: "snkTaskbar.titleConfigGrid",
19
+ [TaskbarElement.FORM_MODE]: "snkTaskbar.titleFormMode"
20
+ };
21
+ }
22
+ observeButtons() {
23
+ this._definitions = undefined;
24
+ }
25
+ // Internal methods
26
+ elementsFromString(strButtons) {
27
+ const elements = [];
28
+ if (strButtons) {
29
+ strButtons.split(",").forEach(buttonName => {
30
+ buttonName = buttonName.trim();
31
+ if (VisibleWhenForbidden[buttonName] || this.isAllowed(buttonName)) {
32
+ elements.push(buttonName.trim());
33
+ }
34
+ });
35
+ }
36
+ return elements;
37
+ }
38
+ isAllowed(buttonName) {
39
+ if (AuthorizationElements[buttonName]) {
40
+ return this._permissions ? this._permissions.isSup || this._permissions[buttonName] : false;
41
+ }
42
+ return true;
43
+ }
44
+ /**
45
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
46
+ * através de um pequeno modulo na estrutura da aplicação:
47
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
48
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-taskbar.msg.ts"
49
+ */
50
+ getTitle(element) {
51
+ let key;
52
+ if (this.isAllowed(element)) {
53
+ key = this._titleKeyByElement[element];
54
+ }
55
+ else {
56
+ key = "snkTaskbar.forbidden";
57
+ }
58
+ return key ? this._application.messagesBuilder.getMessage(key, {}) : "";
59
+ }
60
+ elementClick(elem) {
61
+ if (this.dataUnit) {
62
+ switch (elem) {
63
+ case TaskbarElement.PREVIOUS:
64
+ this.dataUnit.previousRecord();
65
+ break;
66
+ case TaskbarElement.NEXT:
67
+ this.dataUnit.nextRecord();
68
+ break;
69
+ case TaskbarElement.REFRESH:
70
+ this.dataUnit.loadData();
71
+ break;
72
+ case TaskbarElement.CLONE:
73
+ this.dataUnit.copySelected();
74
+ break;
75
+ case TaskbarElement.REMOVE:
76
+ this.dataUnit.removeSelectedRecords();
77
+ break;
78
+ case TaskbarElement.INSERT:
79
+ this.dataUnit.addRecord();
80
+ break;
81
+ case TaskbarElement.CANCEL:
82
+ this.dataUnit.cancelEdition();
83
+ break;
84
+ case TaskbarElement.SAVE:
85
+ this.dataUnit.saveData();
86
+ break;
87
+ }
88
+ }
89
+ this.actionClick.emit(elem);
90
+ }
91
+ isEnabled(elem) {
92
+ if (!this.isAllowed(elem)) {
93
+ return false;
94
+ }
95
+ return !(this.disabledButtons && this.disabledButtons.includes(elem));
96
+ }
97
+ getElement(index, def) {
98
+ let className = def === this.primaryButton ? "ez-button--primary " : "";
99
+ if (index > 1) {
100
+ className += "ez-padding-left--medium";
101
+ }
102
+ if (TaskbarElement[def.toString()]) {
103
+ return buildElem(def, className, elem => this.getTitle(elem), elem => this.elementClick(elem), elem => this.isEnabled(elem), this.actionsList);
104
+ }
105
+ else {
106
+ return buildCustomButton(def, className, elem => this.elementClick(elem), elem => this.isEnabled(elem));
107
+ }
108
+ }
109
+ // Lifecycle
110
+ componentWillLoad() {
111
+ this._application = ApplicationContext.getContextValue("__SNK__APPLICATION__");
112
+ if (this._application) {
113
+ this._application.getAllAccess().then(access => this._permissions = access);
114
+ }
115
+ else {
116
+ this._permissions = {};
117
+ }
118
+ }
119
+ componentWillRender() {
120
+ if (this._definitions == undefined && this._permissions) {
121
+ this._definitions = this.elementsFromString(this.buttons);
122
+ }
123
+ }
124
+ render() {
125
+ if (this._definitions === undefined) {
126
+ return undefined;
127
+ }
128
+ let index = 0;
129
+ return (h(Host, null, this._definitions.map((elem) => {
130
+ if (elem === TaskbarElement.DIVIDER) {
131
+ index = 0;
132
+ }
133
+ else {
134
+ index++;
135
+ }
136
+ if (TaskbarElement[elem]) {
137
+ return this.getElement(index, TaskbarElement[elem]);
138
+ }
139
+ if (this.customButtons.has(elem)) {
140
+ return this.getElement(index, this.customButtons.get(elem));
141
+ }
142
+ return h("slot", { name: elem });
143
+ })));
144
+ }
145
+ static get is() { return "snk-taskbar"; }
146
+ static get encapsulation() { return "scoped"; }
147
+ static get originalStyleUrls() {
148
+ return {
149
+ "$": ["snk-taskbar.css"]
150
+ };
151
+ }
152
+ static get styleUrls() {
153
+ return {
154
+ "$": ["snk-taskbar.css"]
155
+ };
156
+ }
157
+ static get properties() {
158
+ return {
159
+ "buttons": {
160
+ "type": "string",
161
+ "mutable": false,
162
+ "complexType": {
163
+ "original": "string",
164
+ "resolved": "string",
165
+ "references": {}
166
+ },
167
+ "required": false,
168
+ "optional": false,
169
+ "docs": {
170
+ "tags": [],
171
+ "text": "Lista separada por virgula, contendo todos os elementos a serem criados"
172
+ },
173
+ "attribute": "buttons",
174
+ "reflect": false
175
+ },
176
+ "customButtons": {
177
+ "type": "unknown",
178
+ "mutable": false,
179
+ "complexType": {
180
+ "original": "Map<string, CustomButton>",
181
+ "resolved": "Map<string, CustomButton>",
182
+ "references": {
183
+ "Map": {
184
+ "location": "global"
185
+ },
186
+ "CustomButton": {
187
+ "location": "local"
188
+ }
189
+ }
190
+ },
191
+ "required": false,
192
+ "optional": false,
193
+ "docs": {
194
+ "tags": [],
195
+ "text": "Mapa com defini\u00E7\u00E3o de bot\u00F5es personalizados. A chave do mapa deve ser \npassada na lista \"buttons\" no lugar onde o bot\u00E3o ir\u00E1 aparecer."
196
+ }
197
+ },
198
+ "actionsList": {
199
+ "type": "unknown",
200
+ "mutable": false,
201
+ "complexType": {
202
+ "original": "Array<Action>",
203
+ "resolved": "Action[]",
204
+ "references": {
205
+ "Array": {
206
+ "location": "global"
207
+ },
208
+ "Action": {
209
+ "location": "local"
210
+ }
211
+ }
212
+ },
213
+ "required": false,
214
+ "optional": false,
215
+ "docs": {
216
+ "tags": [],
217
+ "text": "Lista de a\u00E7\u00F5es que devem ser usadas no bot\u00E3o \"Mais op\u00E7\u00F5es\""
218
+ }
219
+ },
220
+ "primaryButton": {
221
+ "type": "string",
222
+ "mutable": false,
223
+ "complexType": {
224
+ "original": "string",
225
+ "resolved": "string",
226
+ "references": {}
227
+ },
228
+ "required": false,
229
+ "optional": false,
230
+ "docs": {
231
+ "tags": [],
232
+ "text": "Qual bot\u00E3o deve ter apar\u00EAncia prim\u00E1ria"
233
+ },
234
+ "attribute": "primary-button",
235
+ "reflect": false
236
+ },
237
+ "disabledButtons": {
238
+ "type": "unknown",
239
+ "mutable": false,
240
+ "complexType": {
241
+ "original": "Array<string>",
242
+ "resolved": "string[]",
243
+ "references": {
244
+ "Array": {
245
+ "location": "global"
246
+ }
247
+ }
248
+ },
249
+ "required": false,
250
+ "optional": false,
251
+ "docs": {
252
+ "tags": [],
253
+ "text": "Array contendo todos os bot\u00F5es a serem desabilitados"
254
+ }
255
+ },
256
+ "dataUnit": {
257
+ "type": "unknown",
258
+ "mutable": false,
259
+ "complexType": {
260
+ "original": "DataUnit",
261
+ "resolved": "DataUnit",
262
+ "references": {
263
+ "DataUnit": {
264
+ "location": "import",
265
+ "path": "@sankhyalabs/core"
266
+ }
267
+ }
268
+ },
269
+ "required": false,
270
+ "optional": false,
271
+ "docs": {
272
+ "tags": [],
273
+ "text": "Inst\u00E2ncia do DataUnit"
274
+ }
275
+ }
276
+ };
277
+ }
278
+ static get states() {
279
+ return {
280
+ "_permissions": {}
281
+ };
282
+ }
283
+ static get events() {
284
+ return [{
285
+ "method": "actionClick",
286
+ "name": "actionClick",
287
+ "bubbles": true,
288
+ "cancelable": true,
289
+ "composed": true,
290
+ "docs": {
291
+ "tags": [],
292
+ "text": "Emitido sempre que houver click de bot\u00E3o ou a\u00E7\u00E3o"
293
+ },
294
+ "complexType": {
295
+ "original": "string",
296
+ "resolved": "string",
297
+ "references": {}
298
+ }
299
+ }];
300
+ }
301
+ static get watchers() {
302
+ return [{
303
+ "propName": "buttons",
304
+ "methodName": "observeButtons"
305
+ }];
306
+ }
307
+ }
@@ -1,5 +1,5 @@
1
1
  import { DataType, DataUnit, UserInterface } from '@sankhyalabs/core';
2
- import { Component, h } from '@stencil/core';
2
+ import { h } from '@stencil/core';
3
3
  export class TestePesquisa {
4
4
  componentWillLoad() {
5
5
  this.dataUnit = new DataUnit("testes_com_formulario");
@@ -19,15 +19,18 @@ export class TestePesquisa {
19
19
  };
20
20
  }
21
21
  render() {
22
- return (h("snk-application", null,
23
- h("ez-form", { dataUnit: this.dataUnit })));
22
+ return (h("snk-application", null, h("ez-form", { dataUnit: this.dataUnit })));
24
23
  }
25
24
  static get is() { return "teste-pesquisa"; }
26
25
  static get encapsulation() { return "shadow"; }
27
- static get originalStyleUrls() { return {
28
- "$": ["teste-pesquisa.css"]
29
- }; }
30
- static get styleUrls() { return {
31
- "$": ["teste-pesquisa.css"]
32
- }; }
26
+ static get originalStyleUrls() {
27
+ return {
28
+ "$": ["teste-pesquisa.css"]
29
+ };
30
+ }
31
+ static get styleUrls() {
32
+ return {
33
+ "$": ["teste-pesquisa.css"]
34
+ };
35
+ }
33
36
  }
@@ -1,10 +1,10 @@
1
- import { ErrorException } from '@sankhyalabs/core';
1
+ import { ErrorException, WarningException } from '@sankhyalabs/core';
2
2
  import { batchRequests } from 'graphql-request';
3
3
  import UrlUtils from "../../../lib/utils/urlutils";
4
4
  import { StringUtils } from '@sankhyalabs/core';
5
5
  export class DataFetcher {
6
6
  constructor() {
7
- this.GRAPHQL_PATH = window['applicationenv'] === "sankhyaom" ? "/mge/graphql" : "";
7
+ this.GRAPHQL_PATH = "/mge/graphql";
8
8
  this.watingRequestsById = new Map();
9
9
  }
10
10
  static get() {
@@ -33,6 +33,27 @@ export class DataFetcher {
33
33
  DataFetcher.requestListener.splice(index, 1);
34
34
  }
35
35
  }
36
+ processErrorInfo(errors) {
37
+ var _a, _b;
38
+ const POSITION_ERROR_INFO = 0;
39
+ const errorTitle = "Falha detectada";
40
+ const error = errors[POSITION_ERROR_INFO];
41
+ if (error.length > 0) { //As informações do erro vem no primeiro indice de um array
42
+ const errorInfo = error[POSITION_ERROR_INFO];
43
+ const errorMessage = (errorInfo === null || errorInfo === void 0 ? void 0 : errorInfo.message) ? errorInfo === null || errorInfo === void 0 ? void 0 : errorInfo.message : "Não há mensagem de erro";
44
+ const errorLevel = ((_a = errorInfo === null || errorInfo === void 0 ? void 0 : errorInfo.extensions) === null || _a === void 0 ? void 0 : _a.level) ? errorInfo.extensions.level : "ERROR";
45
+ const errorCode = ((_b = errorInfo === null || errorInfo === void 0 ? void 0 : errorInfo.extensions) === null || _b === void 0 ? void 0 : _b.code) ? errorInfo.extensions.code : "";
46
+ switch (errorLevel) {
47
+ case "WARNING":
48
+ return new WarningException(errorTitle, errorMessage, errorCode);
49
+ default:
50
+ return new ErrorException(errorTitle, errorMessage, errorCode);
51
+ }
52
+ }
53
+ else {
54
+ return new ErrorException(errorTitle, "Não há informações sobre o erro");
55
+ }
56
+ }
36
57
  async callGraphQL(req) {
37
58
  var _a;
38
59
  const reqKey = this.getReqKey(req);
@@ -43,7 +64,8 @@ export class DataFetcher {
43
64
  let query = this.getQueryTemplate(req);
44
65
  const res = await this.fecthGrapql([{ document: query, variables: req.values }]);
45
66
  if (res.errors.length > 0) {
46
- reject(new ErrorException("Falha detectada", res.errors[0][0].message));
67
+ const error = this.processErrorInfo(res.errors);
68
+ reject(error);
47
69
  }
48
70
  else {
49
71
  resolve(res.data[0][reqKey]);
@@ -60,23 +82,26 @@ export class DataFetcher {
60
82
  resolveURL() {
61
83
  return UrlUtils.getUrlBase();
62
84
  }
63
- getContext() {
85
+ getContext(module) {
64
86
  const urlParams = UrlUtils.getQueryParams(location.search);
65
87
  return {
66
- baseUrl: `${this.resolveURL()}/mge/service.sbr`,
88
+ baseUrl: `${this.resolveURL()}/${module}/service.sbr`,
67
89
  appName: "SankhyaBlocks",
68
90
  mgeSession: `${window['skw_session'] || urlParams.mgeSession}`,
69
91
  globalID: "85C0093DFA240EAB699B4E47A10215BD",
92
+ //FIXME: Precisamos ajustar para buscar o resourceId pela aplicação
70
93
  resourceID: "br.com.sankhya.mov.bancaria"
71
94
  };
72
95
  }
73
96
  async callServiceBroker(serviceName, payload) {
74
97
  return new Promise((accept, reject) => {
75
- const ctx = this.getContext();
76
- const url = `${ctx.baseUrl}?serviceName=${serviceName}&counter=21&application=${ctx.appName}&outputType=json&preventTransform=false&mgeSession=${ctx.mgeSession}&resourceID=${ctx.resourceID}&globalID=${ctx.globalID}&allowConcurrentCalls=true`;
98
+ const parts = serviceName.split("@");
99
+ const [module, name] = parts.length === 2 ? parts : ['mge', serviceName];
100
+ const ctx = this.getContext(module);
101
+ const url = `${ctx.baseUrl}?serviceName=${name}&counter=21&application=${ctx.appName}&outputType=json&preventTransform=false&mgeSession=${ctx.mgeSession}&resourceID=${ctx.resourceID}&globalID=${ctx.globalID}&allowConcurrentCalls=true`;
77
102
  document.cookie = `JSESSIONID=${ctx.mgeSession};`;
78
103
  const http = new XMLHttpRequest();
79
- DataFetcher.requestListener.forEach(listener => listener.onRequestStart({ url }));
104
+ DataFetcher.requestListener.forEach(listener => listener.onRequestStart({ url: url, requestBody: payload }));
80
105
  http.open("POST", url, true);
81
106
  http.withCredentials = true;
82
107
  http.send(payload);
@@ -95,11 +120,11 @@ export class DataFetcher {
95
120
  console.warn(`callServiceBroker error to parser response to JSON ${e}`);
96
121
  reject(this.responseText);
97
122
  }
98
- DataFetcher.requestListener.forEach(listener => listener.onRequestEnd({ url }));
123
+ DataFetcher.requestListener.forEach(listener => listener.onRequestEnd({ url: url, requestBody: payload }));
99
124
  }
100
125
  else if (this.readyState == 4 && this.status != 200) {
101
126
  reject(this.responseText);
102
- DataFetcher.requestListener.forEach(listener => listener.onRequestEnd({ url }));
127
+ DataFetcher.requestListener.forEach(listener => listener.onRequestEnd({ url: url, requestBody: payload }));
103
128
  }
104
129
  };
105
130
  });
@@ -155,7 +180,7 @@ export class DataFetcher {
155
180
  if (window['skw_session']) {
156
181
  url += `?mgeSession=${window['skw_session']}`;
157
182
  }
158
- DataFetcher.requestListener.forEach(listener => listener.onRequestStart({ url }));
183
+ DataFetcher.requestListener.forEach(listener => listener.onRequestStart({ url: url, requestBody: request }));
159
184
  try {
160
185
  res = await batchRequests(url, request, { 'Content-Type': `application/json; charset=${window['SERVER_ENCODING'] || 'UTF-8'}` });
161
186
  res.forEach((resItem, index) => {
@@ -186,11 +211,11 @@ export class DataFetcher {
186
211
  });
187
212
  }
188
213
  else {
189
- DataFetcher.requestListener.forEach(listener => listener.onRequestEnd({ url }));
214
+ DataFetcher.requestListener.forEach(listener => listener.onRequestEnd({ url: url, requestBody: request }));
190
215
  throw new ErrorException("Falha de comunicação", err.message);
191
216
  }
192
217
  }
193
- DataFetcher.requestListener.forEach(listener => listener.onRequestEnd({ url }));
218
+ DataFetcher.requestListener.forEach(listener => listener.onRequestEnd({ url: url, requestBody: request }));
194
219
  return { data: dataResponse, errors: errorsResponse };
195
220
  }
196
221
  isHttpError(err) {
@@ -1,9 +1,10 @@
1
- import { DataUnit, ChangeOperation, StringUtils, DataType, } from "@sankhyalabs/core";
2
- import { DataFetcher } from "../DataFetcher";
1
+ import { ChangeOperation, DataType, DataUnit, StringUtils } from "@sankhyalabs/core";
3
2
  import { gql } from "graphql-request";
3
+ import { DataFetcher } from "../DataFetcher";
4
4
  export default class DataUnitFetcher {
5
5
  constructor() {
6
6
  this.templateByQuery = new Map();
7
+ this._loadDataTimeout = {};
7
8
  this.buldTemplates();
8
9
  }
9
10
  buldTemplates() {
@@ -32,9 +33,9 @@ export default class DataUnitFetcher {
32
33
  }
33
34
  }
34
35
  }`);
35
- this.templateByQuery.set("fetchData", gql `query($dataunit: String! $limit: Int $offset:Int $filter: [InputFilter!] $sort: [InputSort!]) {
36
+ this.templateByQuery.set("fetchData", gql `query($dataunit: String! $limit: Int $offset:Int $filters: [InputFilter!] $sort: [InputSort!]) {
36
37
  $queryAlias$: fetchDataUnit(name: $dataunit){
37
- data(limit: $limit offset: $offset filters: $filter sort: $sort){
38
+ data(limit: $limit offset: $offset filters: $filters sort: $sort){
38
39
  limit
39
40
  offset
40
41
  total
@@ -63,7 +64,7 @@ export default class DataUnitFetcher {
63
64
  getDataUnit(entityName, resourceID) {
64
65
  const dataUnit = new DataUnit(`dd://${entityName}/${resourceID}`);
65
66
  dataUnit.metadataLoader = (dataUnit) => this.loadMetadata(dataUnit);
66
- dataUnit.dataLoader = (dataUnit, page, sort, filters) => this.loadData(dataUnit, page, sort, filters);
67
+ dataUnit.dataLoader = (dataUnit, request) => this.loadData(dataUnit, request);
67
68
  dataUnit.saveLoader = (dataUnit, changes) => this.saveData(dataUnit, changes);
68
69
  dataUnit.removeLoader = (dataUnit, recordIds) => this.removeRecords(dataUnit, recordIds);
69
70
  return dataUnit;
@@ -100,25 +101,39 @@ export default class DataUnitFetcher {
100
101
  });
101
102
  });
102
103
  }
103
- loadData(dataUnit, page, sort, filter) {
104
+ loadData(dataUnit, request) {
105
+ const duName = dataUnit.name;
106
+ if (this._loadDataTimeout[duName]) {
107
+ clearTimeout(this._loadDataTimeout[duName]);
108
+ delete this._loadDataTimeout[duName];
109
+ }
104
110
  return new Promise((resolve, reject) => {
105
- var _a, _b, _c;
106
- const variables = { dataunit: dataUnit.name, sort, filter };
107
- if (page) {
108
- variables.limit = page.limit;
109
- variables.offset = page.offset;
110
- }
111
- if (!StringUtils.isEmpty((_a = page === null || page === void 0 ? void 0 : page.quickFilter) === null || _a === void 0 ? void 0 : _a.term)) {
111
+ this._loadDataTimeout[duName] = setTimeout(() => {
112
+ delete this._loadDataTimeout[duName];
113
+ this.doLoadData(dataUnit, request)
114
+ .then(result => resolve(result))
115
+ .catch(reason => reject(reason));
116
+ }, 200);
117
+ });
118
+ }
119
+ doLoadData(dataUnit, request) {
120
+ return new Promise((resolve, reject) => {
121
+ var _a;
122
+ const { sort, filters, limit, offset, quickFilter } = request;
123
+ const variables = { dataunit: dataUnit.name, sort, filters };
124
+ variables.limit = limit;
125
+ variables.offset = offset;
126
+ if (!StringUtils.isEmpty(quickFilter === null || quickFilter === void 0 ? void 0 : quickFilter.term)) {
112
127
  if (variables.filter === undefined) {
113
128
  variables.filter = [];
114
129
  }
115
130
  const quickFilterCriteria = {
116
131
  name: "__QUICK_FILTER__",
117
132
  expression: "__QUICK_FILTER__",
118
- params: [{ name: "term", dataType: DataType.TEXT, value: page.quickFilter.term }]
133
+ params: [{ name: "term", dataType: DataType.TEXT, value: quickFilter.term }]
119
134
  };
120
- if (((_c = (_b = page.quickFilter) === null || _b === void 0 ? void 0 : _b.fields) === null || _c === void 0 ? void 0 : _c.length) > 0) {
121
- quickFilterCriteria.params.push({ name: "fields", dataType: DataType.OBJECT, value: page.quickFilter.fields });
135
+ if (((_a = quickFilter === null || quickFilter === void 0 ? void 0 : quickFilter.fields) === null || _a === void 0 ? void 0 : _a.length) > 0) {
136
+ quickFilterCriteria.params.push({ name: "fields", dataType: DataType.OBJECT, value: quickFilter.fields });
122
137
  }
123
138
  variables.filter.push(quickFilterCriteria);
124
139
  }
@@ -128,16 +143,32 @@ export default class DataUnitFetcher {
128
143
  query: this.templateByQuery.get("fetchData"),
129
144
  })
130
145
  .then((resp) => {
131
- const pageResult = resp.data;
132
- const records = [];
133
- pageResult.records.forEach((responseRecord) => {
146
+ const { limit, offset, total, hasMore, records } = resp.data;
147
+ let paginationInfo;
148
+ if (limit) {
149
+ const firstRecord = total == 0 ? 0 : offset + 1;
150
+ const lastRecord = offset + Math.min(records.length, limit);
151
+ const currentPage = offset / limit;
152
+ paginationInfo = {
153
+ firstRecord,
154
+ lastRecord,
155
+ total,
156
+ currentPage,
157
+ hasMore
158
+ };
159
+ }
160
+ const processedRecords = [];
161
+ records.forEach((responseRecord) => {
134
162
  const duRecord = { __record__id__: responseRecord.id };
135
163
  responseRecord.fields.forEach(({ name, value }) => {
136
164
  duRecord[name] = dataUnit.valueFromString(name, value);
137
165
  });
138
- records.push(duRecord);
166
+ processedRecords.push(duRecord);
167
+ });
168
+ resolve({
169
+ paginationInfo,
170
+ records: processedRecords
139
171
  });
140
- resolve(Object.assign(Object.assign({}, pageResult), { records }));
141
172
  })
142
173
  .catch((error) => {
143
174
  reject(error);
@@ -0,0 +1,54 @@
1
+ import { ResourceFetcher } from "./resource-fetcher";
2
+ function normalizeValue(value) {
3
+ if (value instanceof Date) {
4
+ return value.toISOString();
5
+ }
6
+ if (typeof value === "object") {
7
+ const normalized = Object.assign({}, value);
8
+ Object.keys(value).forEach(prop => {
9
+ if (value[prop]) {
10
+ normalized[prop] = normalizeValue(value[prop]);
11
+ }
12
+ else {
13
+ delete normalized[prop];
14
+ }
15
+ });
16
+ return normalized;
17
+ }
18
+ return value;
19
+ }
20
+ export default class FilterBarConfigFetcher extends ResourceFetcher {
21
+ saveConfig(items, resourceID, configName) {
22
+ const state = items.map(item => {
23
+ const { id, value, fixed, visible } = item;
24
+ const stateItem = { id };
25
+ if (value) {
26
+ stateItem["value"] = normalizeValue(value);
27
+ }
28
+ if (fixed) {
29
+ stateItem["fixed"] = fixed;
30
+ }
31
+ if (visible) {
32
+ stateItem["visible"] = true;
33
+ }
34
+ return stateItem;
35
+ });
36
+ return this.saveResource(state, `cfg://filter/FilterBarState:${resourceID}/${configName}`);
37
+ }
38
+ getConfig(resourceID, configName) {
39
+ return new Promise((accept, reject) => {
40
+ this.loadResource(`cfg://filter/FilterBarState:${resourceID}/${configName}`)
41
+ .then((configAsString) => {
42
+ let fieldsList;
43
+ if (configAsString) {
44
+ const filterBarConfig = JSON.parse(configAsString);
45
+ fieldsList = filterBarConfig.items;
46
+ }
47
+ accept(fieldsList || []);
48
+ })
49
+ .catch((error) => {
50
+ reject(error);
51
+ });
52
+ });
53
+ }
54
+ }
@@ -4,15 +4,16 @@ export default class GridConfigFetcher extends ResourceFetcher {
4
4
  super(...arguments);
5
5
  this.GRID_CONFIG_VERSION = "V3:";
6
6
  }
7
- getConfig(resourceID) {
7
+ getConfig(_gridName, resourceID) {
8
8
  const completePath = `cfg://grid/${this.GRID_CONFIG_VERSION}${resourceID}`;
9
9
  return new Promise((resolve, reject) => {
10
10
  this.loadResource(completePath)
11
11
  .then(loadedResource => {
12
+ let config = undefined;
12
13
  if (loadedResource) {
13
- let config = JSON.parse(loadedResource);
14
- resolve(config);
14
+ config = JSON.parse(loadedResource);
15
15
  }
16
+ resolve(config);
16
17
  }).catch((error) => {
17
18
  reject(error);
18
19
  });