@sankhyalabs/sankhyablocks 1.3.30 → 1.3.31-beta.10

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 (79) hide show
  1. package/dist/cjs/{index-1133bc2a.js → index-c6671817.js} +416 -9
  2. package/dist/cjs/loader.cjs.js +2 -2
  3. package/dist/cjs/sankhyablocks.cjs.js +2 -2
  4. package/dist/cjs/snk-application.cjs.entry.js +280 -107
  5. package/dist/cjs/snk-crud.cjs.entry.js +64 -0
  6. package/dist/cjs/snk-data-unit.cjs.entry.js +218 -0
  7. package/dist/cjs/snk-form_2.cjs.entry.js +170 -0
  8. package/dist/cjs/snk-pesquisa.cjs.entry.js +6 -3
  9. package/dist/cjs/snk-taskbar.cjs.entry.js +140 -0
  10. package/dist/cjs/taskbar-elements-7f99f0c9.js +70 -0
  11. package/dist/cjs/teste-pesquisa.cjs.entry.js +1 -1
  12. package/dist/collection/collection-manifest.json +5 -0
  13. package/dist/collection/components/snk-application/errorhandler/snk-error-handler.js +2 -2
  14. package/dist/collection/components/snk-application/snk-application.js +237 -62
  15. package/dist/collection/components/snk-crud/snk-crud.css +5 -0
  16. package/dist/collection/components/snk-crud/snk-crud.js +149 -0
  17. package/dist/collection/components/snk-data-unit/snk-data-unit.css +6 -0
  18. package/dist/collection/components/snk-data-unit/snk-data-unit.js +492 -0
  19. package/dist/collection/components/snk-form/snk-form.css +34 -0
  20. package/dist/collection/components/snk-form/snk-form.js +230 -0
  21. package/dist/collection/components/snk-grid/snk-grid.css +5 -0
  22. package/dist/collection/components/snk-grid/snk-grid.js +148 -0
  23. package/dist/collection/components/snk-pesquisa/snk-pesquisa.css +56 -13
  24. package/dist/collection/components/snk-pesquisa/snk-pesquisa.js +5 -1
  25. package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +65 -0
  26. package/dist/collection/components/snk-taskbar/snk-taskbar.css +3 -0
  27. package/dist/collection/components/snk-taskbar/snk-taskbar.js +252 -0
  28. package/dist/collection/lib/http/data-fetcher/fetchers/dataunit-fetcher.js +52 -21
  29. package/dist/collection/lib/http/data-fetcher/fetchers/grid-config-fetcher.js +4 -3
  30. package/dist/collection/lib/http/data-fetcher/fetchers/pesquisa-fetcher.js +2 -0
  31. package/dist/components/snk-application2.js +280 -106
  32. package/dist/components/snk-crud.d.ts +11 -0
  33. package/dist/components/snk-crud.js +102 -0
  34. package/dist/components/snk-data-unit.d.ts +11 -0
  35. package/dist/components/snk-data-unit.js +242 -0
  36. package/dist/components/snk-form.d.ts +11 -0
  37. package/dist/components/snk-form.js +6 -0
  38. package/dist/components/snk-form2.js +134 -0
  39. package/dist/components/snk-grid.d.ts +11 -0
  40. package/dist/components/snk-grid.js +6 -0
  41. package/dist/components/snk-grid2.js +91 -0
  42. package/dist/components/snk-pesquisa2.js +5 -2
  43. package/dist/components/snk-taskbar.d.ts +11 -0
  44. package/dist/components/snk-taskbar.js +6 -0
  45. package/dist/components/snk-taskbar2.js +221 -0
  46. package/dist/esm/{index-ffda6382.js → index-6a83ac96.js} +416 -10
  47. package/dist/esm/loader.js +2 -2
  48. package/dist/esm/sankhyablocks.js +2 -2
  49. package/dist/esm/snk-application.entry.js +280 -107
  50. package/dist/esm/snk-crud.entry.js +60 -0
  51. package/dist/esm/snk-data-unit.entry.js +214 -0
  52. package/dist/esm/snk-form_2.entry.js +165 -0
  53. package/dist/esm/snk-pesquisa.entry.js +6 -3
  54. package/dist/esm/snk-taskbar.entry.js +136 -0
  55. package/dist/esm/taskbar-elements-e0b8a285.js +68 -0
  56. package/dist/esm/teste-pesquisa.entry.js +1 -1
  57. package/dist/sankhyablocks/p-18fe0469.entry.js +69 -0
  58. package/dist/sankhyablocks/p-4c7b32d6.entry.js +1 -0
  59. package/dist/sankhyablocks/p-5b5afdbe.entry.js +1 -0
  60. package/dist/sankhyablocks/p-7fe9e5c2.entry.js +1 -0
  61. package/dist/sankhyablocks/p-8650ae26.entry.js +1 -0
  62. package/dist/sankhyablocks/p-a5439706.js +1 -0
  63. package/dist/sankhyablocks/p-c3d20542.entry.js +1 -0
  64. package/dist/sankhyablocks/p-cd1dc099.js +2 -0
  65. package/dist/sankhyablocks/{p-2a7b4cb3.entry.js → p-d25637c9.entry.js} +1 -1
  66. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  67. package/dist/types/components/snk-application/snk-application.d.ts +103 -15
  68. package/dist/types/components/snk-taskbar/elements/taskbar-elements.d.ts +25 -0
  69. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +45 -0
  70. package/dist/types/components.d.ts +381 -6
  71. package/dist/types/lib/http/data-fetcher/fetchers/dataunit-fetcher.d.ts +2 -0
  72. package/dist/types/lib/http/data-fetcher/fetchers/grid-config-fetcher.d.ts +3 -3
  73. package/package.json +5 -5
  74. package/react/components.d.ts +5 -0
  75. package/react/components.js +5 -0
  76. package/react/components.js.map +1 -1
  77. package/dist/sankhyablocks/p-d62412bb.entry.js +0 -1
  78. package/dist/sankhyablocks/p-e6e91d5f.entry.js +0 -69
  79. package/dist/sankhyablocks/p-edcb9d8e.js +0 -2
@@ -0,0 +1,252 @@
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
+ getTitle(element) {
28
+ const pt_br = {
29
+ [TaskbarElement.UPDATE]: "Editar",
30
+ [TaskbarElement.PREVIOUS]: "Anterior",
31
+ [TaskbarElement.NEXT]: "Próximo",
32
+ [TaskbarElement.REFRESH]: "Atualizar",
33
+ [TaskbarElement.CLONE]: "Duplicar",
34
+ [TaskbarElement.REMOVE]: "Excluir",
35
+ [TaskbarElement.MORE_OPTIONS]: "Mais Opções",
36
+ [TaskbarElement.INSERT]: "Cadastrar",
37
+ [TaskbarElement.CANCEL]: "Cancelar",
38
+ [TaskbarElement.SAVE]: "Salvar",
39
+ [TaskbarElement.GRID_MODE]: "Modo Grade",
40
+ [TaskbarElement.CONFIG_GRID]: "Configuração da grade",
41
+ [TaskbarElement.FORM_MODE]: "Modo Formulário"
42
+ };
43
+ return pt_br[element] ? pt_br[element] : "";
44
+ }
45
+ elementClick(elem) {
46
+ if (this.dataUnit) {
47
+ switch (elem) {
48
+ case TaskbarElement.PREVIOUS:
49
+ this.dataUnit.previousRecord();
50
+ break;
51
+ case TaskbarElement.NEXT:
52
+ this.dataUnit.nextRecord();
53
+ break;
54
+ case TaskbarElement.REFRESH:
55
+ this.dataUnit.loadData();
56
+ break;
57
+ case TaskbarElement.CLONE:
58
+ this.dataUnit.copySelected();
59
+ break;
60
+ case TaskbarElement.REMOVE:
61
+ this.dataUnit.removeSelectedRecords();
62
+ break;
63
+ case TaskbarElement.INSERT:
64
+ this.dataUnit.addRecord();
65
+ break;
66
+ case TaskbarElement.CANCEL:
67
+ this.dataUnit.cancelEdition();
68
+ break;
69
+ case TaskbarElement.SAVE:
70
+ this.dataUnit.saveData();
71
+ break;
72
+ }
73
+ }
74
+ this.actionClick.emit(elem);
75
+ }
76
+ isEnabled(elem) {
77
+ return !(this.disabledButtons && this.disabledButtons.includes(elem));
78
+ }
79
+ getElement(index, def) {
80
+ let element;
81
+ let className = def === this.primaryButton ? "ez-button--primary " : "";
82
+ if (index > 1) {
83
+ className += "ez-padding-left--medium";
84
+ }
85
+ element = buildElem(def, className, elem => this.getTitle(elem), elem => this.elementClick(elem), elem => this.isEnabled(elem), this.actionsList);
86
+ return element;
87
+ }
88
+ // Lifecycle
89
+ componentWillLoad() {
90
+ const snkApplication = ApplicationContext.getContextValue("__SNK__APPLICATION__");
91
+ if (snkApplication) {
92
+ snkApplication.getAllAccess().then(access => this._permissions = access);
93
+ }
94
+ else {
95
+ this._permissions = {};
96
+ }
97
+ }
98
+ componentWillRender() {
99
+ if (this._definitions == undefined && this._permissions) {
100
+ this._definitions = this.elementsFromString(this.buttons);
101
+ }
102
+ }
103
+ render() {
104
+ if (this._definitions === undefined) {
105
+ return undefined;
106
+ }
107
+ let index = 0;
108
+ return (h(Host, null, this._definitions.map((btn) => {
109
+ if (btn === TaskbarElement.DIVIDER) {
110
+ index = 0;
111
+ }
112
+ else {
113
+ index++;
114
+ }
115
+ if (TaskbarElement[btn]) {
116
+ return this.getElement(index, TaskbarElement[btn]);
117
+ }
118
+ else {
119
+ index;
120
+ return h("slot", { name: btn });
121
+ }
122
+ })));
123
+ }
124
+ static get is() { return "snk-taskbar"; }
125
+ static get encapsulation() { return "scoped"; }
126
+ static get originalStyleUrls() { return {
127
+ "$": ["snk-taskbar.css"]
128
+ }; }
129
+ static get styleUrls() { return {
130
+ "$": ["snk-taskbar.css"]
131
+ }; }
132
+ static get properties() { return {
133
+ "buttons": {
134
+ "type": "string",
135
+ "mutable": false,
136
+ "complexType": {
137
+ "original": "string",
138
+ "resolved": "string",
139
+ "references": {}
140
+ },
141
+ "required": false,
142
+ "optional": false,
143
+ "docs": {
144
+ "tags": [],
145
+ "text": "Lista separada por virgula, contendo todos os elementos a serem criados"
146
+ },
147
+ "attribute": "buttons",
148
+ "reflect": false
149
+ },
150
+ "actionsList": {
151
+ "type": "unknown",
152
+ "mutable": false,
153
+ "complexType": {
154
+ "original": "Array<Action>",
155
+ "resolved": "Action[]",
156
+ "references": {
157
+ "Array": {
158
+ "location": "global"
159
+ },
160
+ "Action": {
161
+ "location": "local"
162
+ }
163
+ }
164
+ },
165
+ "required": false,
166
+ "optional": false,
167
+ "docs": {
168
+ "tags": [],
169
+ "text": "Lista de a\u00E7\u00F5es que devem ser usadas no bot\u00E3o \"Mais op\u00E7\u00F5es\""
170
+ }
171
+ },
172
+ "primaryButton": {
173
+ "type": "string",
174
+ "mutable": false,
175
+ "complexType": {
176
+ "original": "string",
177
+ "resolved": "string",
178
+ "references": {}
179
+ },
180
+ "required": false,
181
+ "optional": false,
182
+ "docs": {
183
+ "tags": [],
184
+ "text": "Qual bot\u00E3o deve ter apar\u00EAncia prim\u00E1ria"
185
+ },
186
+ "attribute": "primary-button",
187
+ "reflect": false
188
+ },
189
+ "disabledButtons": {
190
+ "type": "unknown",
191
+ "mutable": false,
192
+ "complexType": {
193
+ "original": "Array<string>",
194
+ "resolved": "string[]",
195
+ "references": {
196
+ "Array": {
197
+ "location": "global"
198
+ }
199
+ }
200
+ },
201
+ "required": false,
202
+ "optional": false,
203
+ "docs": {
204
+ "tags": [],
205
+ "text": "Array contendo todos os bot\u00F5es a serem desabilitados"
206
+ }
207
+ },
208
+ "dataUnit": {
209
+ "type": "unknown",
210
+ "mutable": false,
211
+ "complexType": {
212
+ "original": "DataUnit",
213
+ "resolved": "DataUnit",
214
+ "references": {
215
+ "DataUnit": {
216
+ "location": "import",
217
+ "path": "@sankhyalabs/core"
218
+ }
219
+ }
220
+ },
221
+ "required": false,
222
+ "optional": false,
223
+ "docs": {
224
+ "tags": [],
225
+ "text": "Inst\u00E2ncia do DataUnit"
226
+ }
227
+ }
228
+ }; }
229
+ static get states() { return {
230
+ "_permissions": {}
231
+ }; }
232
+ static get events() { return [{
233
+ "method": "actionClick",
234
+ "name": "actionClick",
235
+ "bubbles": true,
236
+ "cancelable": true,
237
+ "composed": true,
238
+ "docs": {
239
+ "tags": [],
240
+ "text": "Emitido sempre que houver click de bot\u00E3o ou a\u00E7\u00E3o"
241
+ },
242
+ "complexType": {
243
+ "original": "string",
244
+ "resolved": "string",
245
+ "references": {}
246
+ }
247
+ }]; }
248
+ static get watchers() { return [{
249
+ "propName": "buttons",
250
+ "methodName": "observeButtons"
251
+ }]; }
252
+ }
@@ -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({