@sankhyalabs/sankhyablocks 1.3.31-beta.1 → 1.3.31-beta.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 (92) hide show
  1. package/dist/cjs/SnkMessageBuilder-13239761.js +188 -0
  2. package/dist/cjs/{index-1133bc2a.js → index-c6671817.js} +416 -9
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/sankhyablocks.cjs.js +2 -2
  5. package/dist/cjs/snk-application.cjs.entry.js +283 -108
  6. package/dist/cjs/snk-crud.cjs.entry.js +64 -0
  7. package/dist/cjs/snk-data-unit.cjs.entry.js +277 -0
  8. package/dist/cjs/snk-form_2.cjs.entry.js +177 -0
  9. package/dist/cjs/snk-pesquisa.cjs.entry.js +6 -3
  10. package/dist/cjs/snk-taskbar.cjs.entry.js +159 -0
  11. package/dist/cjs/taskbar-elements-73d524e5.js +70 -0
  12. package/dist/cjs/teste-pesquisa.cjs.entry.js +1 -1
  13. package/dist/collection/collection-manifest.json +5 -0
  14. package/dist/collection/components/snk-application/errorhandler/snk-error-handler.js +2 -2
  15. package/dist/collection/components/snk-application/snk-application.js +267 -63
  16. package/dist/collection/components/snk-crud/snk-crud.css +5 -0
  17. package/dist/collection/components/snk-crud/snk-crud.js +137 -0
  18. package/dist/collection/components/snk-data-unit/snk-data-unit.css +6 -0
  19. package/dist/collection/components/snk-data-unit/snk-data-unit.js +528 -0
  20. package/dist/collection/components/snk-form/snk-form.css +34 -0
  21. package/dist/collection/components/snk-form/snk-form.js +220 -0
  22. package/dist/collection/components/snk-grid/snk-grid.css +5 -0
  23. package/dist/collection/components/snk-grid/snk-grid.js +148 -0
  24. package/dist/collection/components/snk-pesquisa/snk-pesquisa.css +56 -13
  25. package/dist/collection/components/snk-pesquisa/snk-pesquisa.js +5 -1
  26. package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +65 -0
  27. package/dist/collection/components/snk-taskbar/snk-taskbar.css +3 -0
  28. package/dist/collection/components/snk-taskbar/snk-taskbar.js +271 -0
  29. package/dist/collection/lib/http/data-fetcher/DataFetcher.js +1 -1
  30. package/dist/collection/lib/http/data-fetcher/fetchers/dataunit-fetcher.js +52 -21
  31. package/dist/collection/lib/http/data-fetcher/fetchers/grid-config-fetcher.js +4 -3
  32. package/dist/collection/lib/http/data-fetcher/fetchers/pesquisa-fetcher.js +2 -0
  33. package/dist/collection/lib/message/SnkMessageBuilder.js +119 -0
  34. package/dist/collection/lib/message/resources/snk-data-unit.msg.js +22 -0
  35. package/dist/collection/lib/message/resources/snk-form.msg.js +10 -0
  36. package/dist/collection/lib/message/resources/snk-taskbar.msg.js +16 -0
  37. package/dist/components/SnkMessageBuilder.js +166 -0
  38. package/dist/components/snk-application2.js +284 -107
  39. package/dist/components/snk-crud.d.ts +11 -0
  40. package/dist/components/snk-crud.js +101 -0
  41. package/dist/components/snk-data-unit.d.ts +11 -0
  42. package/dist/components/snk-data-unit.js +300 -0
  43. package/dist/components/snk-form.d.ts +11 -0
  44. package/dist/components/snk-form.js +6 -0
  45. package/dist/components/snk-form2.js +140 -0
  46. package/dist/components/snk-grid.d.ts +11 -0
  47. package/dist/components/snk-grid.js +6 -0
  48. package/dist/components/snk-grid2.js +91 -0
  49. package/dist/components/snk-pesquisa2.js +5 -2
  50. package/dist/components/snk-taskbar.d.ts +11 -0
  51. package/dist/components/snk-taskbar.js +6 -0
  52. package/dist/components/snk-taskbar2.js +240 -0
  53. package/dist/esm/SnkMessageBuilder-3835f9d8.js +166 -0
  54. package/dist/esm/{index-ffda6382.js → index-6a83ac96.js} +416 -10
  55. package/dist/esm/loader.js +2 -2
  56. package/dist/esm/sankhyablocks.js +2 -2
  57. package/dist/esm/snk-application.entry.js +283 -108
  58. package/dist/esm/snk-crud.entry.js +60 -0
  59. package/dist/esm/snk-data-unit.entry.js +273 -0
  60. package/dist/esm/snk-form_2.entry.js +172 -0
  61. package/dist/esm/snk-pesquisa.entry.js +6 -3
  62. package/dist/esm/snk-taskbar.entry.js +155 -0
  63. package/dist/esm/taskbar-elements-6d01a640.js +68 -0
  64. package/dist/esm/teste-pesquisa.entry.js +1 -1
  65. package/dist/sankhyablocks/p-4c7b32d6.entry.js +1 -0
  66. package/dist/sankhyablocks/p-5e1b7e51.entry.js +1 -0
  67. package/dist/sankhyablocks/p-72bccbb6.js +1 -0
  68. package/dist/sankhyablocks/p-8c74d163.entry.js +1 -0
  69. package/dist/sankhyablocks/p-bab507ad.entry.js +1 -0
  70. package/dist/sankhyablocks/p-cd1dc099.js +2 -0
  71. package/dist/sankhyablocks/{p-2a7b4cb3.entry.js → p-d25637c9.entry.js} +1 -1
  72. package/dist/sankhyablocks/p-dd10a5e3.js +1 -0
  73. package/dist/sankhyablocks/p-e942c604.entry.js +69 -0
  74. package/dist/sankhyablocks/p-f4d0394b.entry.js +1 -0
  75. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  76. package/dist/types/components/snk-application/snk-application.d.ts +109 -15
  77. package/dist/types/components/snk-taskbar/elements/taskbar-elements.d.ts +25 -0
  78. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +53 -0
  79. package/dist/types/components.d.ts +372 -6
  80. package/dist/types/lib/http/data-fetcher/fetchers/dataunit-fetcher.d.ts +2 -0
  81. package/dist/types/lib/http/data-fetcher/fetchers/grid-config-fetcher.d.ts +3 -3
  82. package/dist/types/lib/message/SnkMessageBuilder.d.ts +42 -0
  83. package/dist/types/lib/message/resources/snk-data-unit.msg.d.ts +2 -0
  84. package/dist/types/lib/message/resources/snk-form.msg.d.ts +2 -0
  85. package/dist/types/lib/message/resources/snk-taskbar.msg.d.ts +2 -0
  86. package/package.json +5 -5
  87. package/react/components.d.ts +5 -0
  88. package/react/components.js +5 -0
  89. package/react/components.js.map +1 -1
  90. package/dist/sankhyablocks/p-d62412bb.entry.js +0 -1
  91. package/dist/sankhyablocks/p-e6e91d5f.entry.js +0 -69
  92. package/dist/sankhyablocks/p-edcb9d8e.js +0 -2
@@ -0,0 +1,271 @@
1
+ import { ApplicationContext } from '@sankhyalabs/core';
2
+ import { Component, Event, h, Host, Prop, State, Watch } from '@stencil/core';
3
+ import { TaskbarElement, buildElem, AuthorizationElements } from './elements/taskbar-elements';
4
+ export class SnkTaskbar {
5
+ observeButtons() {
6
+ this._definitions = undefined;
7
+ }
8
+ // Internal methods
9
+ elementsFromString(strButtons) {
10
+ const elements = [];
11
+ if (strButtons) {
12
+ strButtons.split(",").forEach(buttonName => {
13
+ buttonName = buttonName.trim();
14
+ if (this.isAllowed(buttonName)) {
15
+ elements.push(buttonName.trim());
16
+ }
17
+ });
18
+ }
19
+ return elements;
20
+ }
21
+ isAllowed(buttonName) {
22
+ if (AuthorizationElements[buttonName]) {
23
+ return this._permissions ? this._permissions.isSup || this._permissions[buttonName] : false;
24
+ }
25
+ return true;
26
+ }
27
+ /**
28
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
29
+ * através de um pequeno modulo na estrutura da aplicação:
30
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
31
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-taskbar.msg.ts"
32
+ */
33
+ getTitle(element) {
34
+ switch (element) {
35
+ case TaskbarElement.UPDATE:
36
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleUpdate", {});
37
+ case TaskbarElement.PREVIOUS:
38
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titlePrevious", {});
39
+ case TaskbarElement.NEXT:
40
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleNext", {});
41
+ case TaskbarElement.REFRESH:
42
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleRefresh", {});
43
+ case TaskbarElement.CLONE:
44
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleClone", {});
45
+ case TaskbarElement.REMOVE:
46
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleRemove", {});
47
+ case TaskbarElement.MORE_OPTIONS:
48
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleMoreOptions", {});
49
+ case TaskbarElement.INSERT:
50
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleInsert", {});
51
+ case TaskbarElement.CANCEL:
52
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleCancel", {});
53
+ case TaskbarElement.SAVE:
54
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleSave", {});
55
+ case TaskbarElement.GRID_MODE:
56
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleGridMode", {});
57
+ case TaskbarElement.CONFIG_GRID:
58
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleConfigGrid", {});
59
+ case TaskbarElement.FORM_MODE:
60
+ return this._application.messagesBuilder.getMessage("snkTaskbar.titleFormMode", {});
61
+ }
62
+ return "";
63
+ }
64
+ elementClick(elem) {
65
+ if (this.dataUnit) {
66
+ switch (elem) {
67
+ case TaskbarElement.PREVIOUS:
68
+ this.dataUnit.previousRecord();
69
+ break;
70
+ case TaskbarElement.NEXT:
71
+ this.dataUnit.nextRecord();
72
+ break;
73
+ case TaskbarElement.REFRESH:
74
+ this.dataUnit.loadData();
75
+ break;
76
+ case TaskbarElement.CLONE:
77
+ this.dataUnit.copySelected();
78
+ break;
79
+ case TaskbarElement.REMOVE:
80
+ this.dataUnit.removeSelectedRecords();
81
+ break;
82
+ case TaskbarElement.INSERT:
83
+ this.dataUnit.addRecord();
84
+ break;
85
+ case TaskbarElement.CANCEL:
86
+ this.dataUnit.cancelEdition();
87
+ break;
88
+ case TaskbarElement.SAVE:
89
+ this.dataUnit.saveData();
90
+ break;
91
+ }
92
+ }
93
+ this.actionClick.emit(elem);
94
+ }
95
+ isEnabled(elem) {
96
+ return !(this.disabledButtons && this.disabledButtons.includes(elem));
97
+ }
98
+ getElement(index, def) {
99
+ let element;
100
+ let className = def === this.primaryButton ? "ez-button--primary " : "";
101
+ if (index > 1) {
102
+ className += "ez-padding-left--medium";
103
+ }
104
+ element = buildElem(def, className, elem => this.getTitle(elem), elem => this.elementClick(elem), elem => this.isEnabled(elem), this.actionsList);
105
+ return element;
106
+ }
107
+ // Lifecycle
108
+ componentWillLoad() {
109
+ this._application = ApplicationContext.getContextValue("__SNK__APPLICATION__");
110
+ if (this._application) {
111
+ this._application.getAllAccess().then(access => this._permissions = access);
112
+ }
113
+ else {
114
+ this._permissions = {};
115
+ }
116
+ }
117
+ componentWillRender() {
118
+ if (this._definitions == undefined && this._permissions) {
119
+ this._definitions = this.elementsFromString(this.buttons);
120
+ }
121
+ }
122
+ render() {
123
+ if (this._definitions === undefined) {
124
+ return undefined;
125
+ }
126
+ let index = 0;
127
+ return (h(Host, null, this._definitions.map((btn) => {
128
+ if (btn === TaskbarElement.DIVIDER) {
129
+ index = 0;
130
+ }
131
+ else {
132
+ index++;
133
+ }
134
+ if (TaskbarElement[btn]) {
135
+ return this.getElement(index, TaskbarElement[btn]);
136
+ }
137
+ else {
138
+ index;
139
+ return h("slot", { name: btn });
140
+ }
141
+ })));
142
+ }
143
+ static get is() { return "snk-taskbar"; }
144
+ static get encapsulation() { return "scoped"; }
145
+ static get originalStyleUrls() { return {
146
+ "$": ["snk-taskbar.css"]
147
+ }; }
148
+ static get styleUrls() { return {
149
+ "$": ["snk-taskbar.css"]
150
+ }; }
151
+ static get properties() { return {
152
+ "buttons": {
153
+ "type": "string",
154
+ "mutable": false,
155
+ "complexType": {
156
+ "original": "string",
157
+ "resolved": "string",
158
+ "references": {}
159
+ },
160
+ "required": false,
161
+ "optional": false,
162
+ "docs": {
163
+ "tags": [],
164
+ "text": "Lista separada por virgula, contendo todos os elementos a serem criados"
165
+ },
166
+ "attribute": "buttons",
167
+ "reflect": false
168
+ },
169
+ "actionsList": {
170
+ "type": "unknown",
171
+ "mutable": false,
172
+ "complexType": {
173
+ "original": "Array<Action>",
174
+ "resolved": "Action[]",
175
+ "references": {
176
+ "Array": {
177
+ "location": "global"
178
+ },
179
+ "Action": {
180
+ "location": "local"
181
+ }
182
+ }
183
+ },
184
+ "required": false,
185
+ "optional": false,
186
+ "docs": {
187
+ "tags": [],
188
+ "text": "Lista de a\u00E7\u00F5es que devem ser usadas no bot\u00E3o \"Mais op\u00E7\u00F5es\""
189
+ }
190
+ },
191
+ "primaryButton": {
192
+ "type": "string",
193
+ "mutable": false,
194
+ "complexType": {
195
+ "original": "string",
196
+ "resolved": "string",
197
+ "references": {}
198
+ },
199
+ "required": false,
200
+ "optional": false,
201
+ "docs": {
202
+ "tags": [],
203
+ "text": "Qual bot\u00E3o deve ter apar\u00EAncia prim\u00E1ria"
204
+ },
205
+ "attribute": "primary-button",
206
+ "reflect": false
207
+ },
208
+ "disabledButtons": {
209
+ "type": "unknown",
210
+ "mutable": false,
211
+ "complexType": {
212
+ "original": "Array<string>",
213
+ "resolved": "string[]",
214
+ "references": {
215
+ "Array": {
216
+ "location": "global"
217
+ }
218
+ }
219
+ },
220
+ "required": false,
221
+ "optional": false,
222
+ "docs": {
223
+ "tags": [],
224
+ "text": "Array contendo todos os bot\u00F5es a serem desabilitados"
225
+ }
226
+ },
227
+ "dataUnit": {
228
+ "type": "unknown",
229
+ "mutable": false,
230
+ "complexType": {
231
+ "original": "DataUnit",
232
+ "resolved": "DataUnit",
233
+ "references": {
234
+ "DataUnit": {
235
+ "location": "import",
236
+ "path": "@sankhyalabs/core"
237
+ }
238
+ }
239
+ },
240
+ "required": false,
241
+ "optional": false,
242
+ "docs": {
243
+ "tags": [],
244
+ "text": "Inst\u00E2ncia do DataUnit"
245
+ }
246
+ }
247
+ }; }
248
+ static get states() { return {
249
+ "_permissions": {}
250
+ }; }
251
+ static get events() { return [{
252
+ "method": "actionClick",
253
+ "name": "actionClick",
254
+ "bubbles": true,
255
+ "cancelable": true,
256
+ "composed": true,
257
+ "docs": {
258
+ "tags": [],
259
+ "text": "Emitido sempre que houver click de bot\u00E3o ou a\u00E7\u00E3o"
260
+ },
261
+ "complexType": {
262
+ "original": "string",
263
+ "resolved": "string",
264
+ "references": {}
265
+ }
266
+ }]; }
267
+ static get watchers() { return [{
268
+ "propName": "buttons",
269
+ "methodName": "observeButtons"
270
+ }]; }
271
+ }
@@ -4,7 +4,7 @@ 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() {
@@ -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 = 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);
@@ -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
  });
@@ -16,6 +16,8 @@ export class PesquisaFetcher {
16
16
  }`);
17
17
  }
18
18
  loadSearchOptions(entityName, argument, criteria, options) {
19
+ const cleanText = (argument === null || argument === void 0 ? void 0 : argument.trim()) || undefined;
20
+ argument = isNaN(Number(cleanText)) && cleanText ? `%${cleanText}` : cleanText;
19
21
  return new Promise((resolve, reject) => {
20
22
  DataFetcher.get()
21
23
  .callGraphQL({
@@ -0,0 +1,119 @@
1
+ import snkDataUnitMessages from "./resources/snk-data-unit.msg.js";
2
+ import snkFormMessages from "./resources/snk-form.msg.js";
3
+ import snkTaskbarMessages from "./resources/snk-taskbar.msg.js";
4
+ export class SnkMessageBuilder {
5
+ constructor() {
6
+ this._defaults = {
7
+ snkDataUnit: snkDataUnitMessages,
8
+ snkForm: snkFormMessages,
9
+ snkTaskbar: snkTaskbarMessages
10
+ };
11
+ this._currentOperation = OperationMap.CLEAN;
12
+ this.loadAppMessages().then((msgs) => {
13
+ this._appMessages = msgs;
14
+ }, error => {
15
+ console.info('O arquivo de mensagens personalizadas não foi encontrado no caminho /messages/appmessages.js', error);
16
+ });
17
+ }
18
+ /**
19
+ * Existem mensagens sensíveis a operação. Por exemplo, a mensagem
20
+ * de inclusão pode ser diferente da mensagem de alteração do mesmo
21
+ * recurso. Para isso "currentOperation" pode variar de acordo com
22
+ * OperationMap.
23
+ */
24
+ set currentOperation(op) {
25
+ this._currentOperation = op;
26
+ }
27
+ /**
28
+ * Método usado para se obter mensagens, respeitando o padrão do sistema
29
+ * ou as mensagens específicas de cada tela
30
+ *
31
+ * @param key Chave usada para obter mensagens. Deve-se usar o separador "."
32
+ * alcançar diversos níveis.
33
+ * @param params Quando a mensagem possui o padrão {{NOME}} as ocorrências
34
+ * serão substituidas pelo respectivo valor do param.
35
+ * @returns A mensagem formatada.
36
+ */
37
+ getMessage(key, params) {
38
+ if (key == undefined) {
39
+ return undefined;
40
+ }
41
+ var parts = key.split(".");
42
+ let msg = this.resolveMessage(parts, this._appMessages);
43
+ if (msg == undefined) {
44
+ msg = this.resolveMessage(parts, this._defaults);
45
+ }
46
+ if (this.customMessageBuilder) {
47
+ const result = this.customMessageBuilder(key, msg, params);
48
+ msg = result.message;
49
+ params = result.params;
50
+ }
51
+ return this.postProcess(msg, params);
52
+ }
53
+ resolveMessage(keys, object) {
54
+ if (object == undefined) {
55
+ return undefined;
56
+ }
57
+ const key = keys[0];
58
+ const result = object[key];
59
+ if (result) {
60
+ if (this.isOperationSensitive(result)) {
61
+ return result[this._currentOperation];
62
+ }
63
+ else {
64
+ const isLeaf = keys.length === 1 ||
65
+ result == undefined ||
66
+ typeof result === "string";
67
+ return isLeaf ? result : this.resolveMessage(keys.slice(1), result);
68
+ }
69
+ }
70
+ }
71
+ isOperationSensitive(value) {
72
+ return value[OperationMap.CLONE] != undefined ||
73
+ value[OperationMap.INSERT] != undefined ||
74
+ value[OperationMap.UPDATE] != undefined ||
75
+ value[OperationMap.CLEAN] != undefined;
76
+ }
77
+ postProcess(message, params) {
78
+ if (message) {
79
+ const propPattern = /(.*?)\{\{(.+?)\}\}/g;
80
+ let processed = "";
81
+ let tail = message;
82
+ let result;
83
+ while ((result = propPattern.exec(message)) !== null) {
84
+ const [match, head, attribute] = result;
85
+ const tailIndex = result.index + match.length;
86
+ tail = tailIndex < message.length ? message.substring(tailIndex) : "";
87
+ let replacement = params ? params[attribute] : undefined;
88
+ if (replacement == undefined) {
89
+ replacement = "";
90
+ }
91
+ processed += head + replacement;
92
+ }
93
+ return processed + tail;
94
+ }
95
+ else {
96
+ return message;
97
+ }
98
+ }
99
+ loadAppMessages() {
100
+ return new Promise((accept, reject) => {
101
+ const messagesUrl = window['applicationenv'] !== "dev" ? `/${window["MGE_MODULE_NAME"]}/labsApps/${window["APPLICATION_NAME"]}/messages/appmessages.js`
102
+ : '/messages/appmessages.js';
103
+ import(/* webpackIgnore: true */ messagesUrl)
104
+ .then(module => {
105
+ accept(module.default);
106
+ })
107
+ .catch(reason => {
108
+ reject(reason);
109
+ });
110
+ });
111
+ }
112
+ }
113
+ export var OperationMap;
114
+ (function (OperationMap) {
115
+ OperationMap["CLONE"] = "clone";
116
+ OperationMap["INSERT"] = "insert";
117
+ OperationMap["UPDATE"] = "update";
118
+ OperationMap["CLEAN"] = "clean";
119
+ })(OperationMap || (OperationMap = {}));
@@ -0,0 +1,22 @@
1
+ const snkDataUnitMessages = {
2
+ saveInfo: {
3
+ clone: "Duplicação realizada!",
4
+ insert: "Inclusão realizada!",
5
+ update: "Aleração realizada!"
6
+ },
7
+ cancelInfo: {
8
+ clone: "Duplicação descartada!",
9
+ insert: "A inclusão descartada!",
10
+ update: "A edição foi descartada!"
11
+ },
12
+ removeInfo: "Registro removido com sucesso!",
13
+ cancelConfirmationTitle: "Aviso",
14
+ cancelConfirmation: "As alterações realizadas serão descartadas<br/><br/><b>Você realmente gostaria de cancelar?",
15
+ removeConfirmationTitle: "Excluir",
16
+ removeConfirmation: "Deseja realmente excluir o registro atual?",
17
+ forbiddenUpdate: "Não é possível fazer alterações. Verifique as permissões de acesso.",
18
+ forbiddenInsert: "Não é possível incluir. Verifique as permissões de acesso.",
19
+ forbiddenClone: "Não é possível duplicar. Verifique as permissões de acesso.",
20
+ forbiddenRemove: "Não é possível remover. Verifique as permissões de acesso."
21
+ };
22
+ export default snkDataUnitMessages;
@@ -0,0 +1,10 @@
1
+ const snkFormMessages = {
2
+ title: {
3
+ clone: "Duplicar registro",
4
+ insert: "Cadastrar registro",
5
+ update: "Alterar registro",
6
+ clean: "{{ENTITY_NAME}}"
7
+ },
8
+ goBackTitle: "Voltar"
9
+ };
10
+ export default snkFormMessages;
@@ -0,0 +1,16 @@
1
+ const snkTaskbarMessages = {
2
+ titleUpdate: "Editar",
3
+ titlePrevious: "Anterior",
4
+ titleNext: "Próximo",
5
+ titleRefresh: "Atualizar",
6
+ titleClone: "Duplicar",
7
+ titleRemove: "Excluir",
8
+ titleMoreOptions: "Mais Opções",
9
+ titleInsert: "Cadastrar",
10
+ titleCancel: "Cancelar",
11
+ titleSave: "Salvar",
12
+ titleGridMode: "Modo Grade",
13
+ titleConfigGrid: "Configuração da grade",
14
+ titleFormMode: "Modo Formulário"
15
+ };
16
+ export default snkTaskbarMessages;