@sankhyalabs/sankhyablocks 1.3.31-beta.17 → 1.3.31-beta.18

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 (98) hide show
  1. package/dist/cjs/{SnkMessageBuilder-cb132e6d.js → SnkMessageBuilder-02c2ca02.js} +7 -3
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  4. package/dist/cjs/snk-application.cjs.entry.js +376 -256
  5. package/dist/cjs/snk-crud.cjs.entry.js +2 -1
  6. package/dist/cjs/snk-data-unit.cjs.entry.js +1 -1
  7. package/dist/cjs/snk-filter-bar.cjs.entry.js +61 -13
  8. package/dist/cjs/snk-filter-detail.cjs.entry.js +6 -1
  9. package/dist/cjs/snk-filter-item.cjs.entry.js +12 -0
  10. package/dist/cjs/snk-filter-list.cjs.entry.js +2 -2
  11. package/dist/cjs/snk-filter-multi-select.cjs.entry.js +23 -0
  12. package/dist/cjs/snk-filter-number.cjs.entry.js +2 -1
  13. package/dist/cjs/snk-filter-search.cjs.entry.js +1 -1
  14. package/dist/cjs/snk-form.cjs.entry.js +19 -1
  15. package/dist/cjs/snk-grid.cjs.entry.js +15 -5
  16. package/dist/cjs/snk-taskbar.cjs.entry.js +14 -11
  17. package/dist/cjs/{taskbar-elements-efa44ff1.js → taskbar-elements-283c737e.js} +36 -17
  18. package/dist/cjs/taskbar-processor-6bd0d35c.js +47 -0
  19. package/dist/collection/collection-manifest.json +1 -0
  20. package/dist/collection/components/snk-crud/snk-crud.js +41 -3
  21. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-multi-select.js +64 -0
  22. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-number.js +2 -1
  23. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-search.js +1 -1
  24. package/dist/collection/components/snk-filter-bar/filter-item/snk-filter-detail.js +6 -1
  25. package/dist/collection/components/snk-filter-bar/filter-item/snk-filter-item.js +35 -0
  26. package/dist/collection/components/snk-filter-bar/filter-list/snk-filter-list.js +53 -2
  27. package/dist/collection/components/snk-filter-bar/snk-filter-bar.css +15 -0
  28. package/dist/collection/components/snk-filter-bar/snk-filter-bar.js +60 -12
  29. package/dist/collection/components/snk-form/snk-form.js +41 -1
  30. package/dist/collection/components/snk-grid/snk-grid.js +35 -3
  31. package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +35 -17
  32. package/dist/collection/components/snk-taskbar/processor/taskbar-processor.js +43 -0
  33. package/dist/collection/components/snk-taskbar/snk-taskbar.js +36 -11
  34. package/dist/collection/lib/http/data-fetcher/fetchers/filter-bar-config-fetcher.js +375 -255
  35. package/dist/collection/lib/message/resources/snk-filter-bar.msg.js +7 -3
  36. package/dist/components/SnkMessageBuilder.js +7 -3
  37. package/dist/components/index.d.ts +1 -0
  38. package/dist/components/index.js +1 -0
  39. package/dist/components/snk-application2.js +375 -255
  40. package/dist/components/snk-crud.js +4 -2
  41. package/dist/components/snk-filter-bar2.js +61 -13
  42. package/dist/components/snk-filter-detail2.js +6 -1
  43. package/dist/components/snk-filter-item2.js +14 -1
  44. package/dist/components/snk-filter-list2.js +5 -2
  45. package/dist/components/snk-filter-multi-select.d.ts +11 -0
  46. package/dist/components/snk-filter-multi-select.js +39 -0
  47. package/dist/components/snk-filter-number.js +2 -1
  48. package/dist/components/snk-filter-search.js +1 -1
  49. package/dist/components/snk-form2.js +20 -1
  50. package/dist/components/snk-grid2.js +15 -4
  51. package/dist/components/snk-taskbar2.js +49 -27
  52. package/dist/components/taskbar-processor.js +45 -0
  53. package/dist/{sankhyablocks/SnkMessageBuilder-cff80920.js → esm/SnkMessageBuilder-65d431bd.js} +7 -3
  54. package/dist/esm/loader.js +1 -1
  55. package/dist/esm/sankhyablocks.js +1 -1
  56. package/dist/esm/snk-application.entry.js +376 -256
  57. package/dist/esm/snk-crud.entry.js +3 -2
  58. package/dist/esm/snk-data-unit.entry.js +1 -1
  59. package/dist/esm/snk-filter-bar.entry.js +61 -13
  60. package/dist/esm/snk-filter-detail.entry.js +6 -1
  61. package/dist/esm/snk-filter-item.entry.js +12 -0
  62. package/dist/esm/snk-filter-list.entry.js +2 -2
  63. package/dist/esm/snk-filter-multi-select.entry.js +19 -0
  64. package/dist/esm/snk-filter-number.entry.js +2 -1
  65. package/dist/esm/snk-filter-search.entry.js +1 -1
  66. package/dist/esm/snk-form.entry.js +19 -1
  67. package/dist/esm/snk-grid.entry.js +15 -5
  68. package/dist/esm/snk-taskbar.entry.js +14 -11
  69. package/dist/esm/taskbar-elements-35d64ff9.js +90 -0
  70. package/dist/esm/taskbar-processor-aa6772c9.js +45 -0
  71. package/dist/{esm/SnkMessageBuilder-cff80920.js → sankhyablocks/SnkMessageBuilder-65d431bd.js} +7 -3
  72. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  73. package/dist/sankhyablocks/snk-application.entry.js +376 -256
  74. package/dist/sankhyablocks/snk-crud.entry.js +3 -2
  75. package/dist/sankhyablocks/snk-data-unit.entry.js +1 -1
  76. package/dist/sankhyablocks/snk-filter-bar.entry.js +61 -13
  77. package/dist/sankhyablocks/snk-filter-detail.entry.js +6 -1
  78. package/dist/sankhyablocks/snk-filter-item.entry.js +12 -0
  79. package/dist/sankhyablocks/snk-filter-list.entry.js +2 -2
  80. package/dist/sankhyablocks/snk-filter-multi-select.entry.js +19 -0
  81. package/dist/sankhyablocks/snk-filter-number.entry.js +2 -1
  82. package/dist/sankhyablocks/snk-filter-search.entry.js +1 -1
  83. package/dist/sankhyablocks/snk-form.entry.js +19 -1
  84. package/dist/sankhyablocks/snk-grid.entry.js +15 -5
  85. package/dist/sankhyablocks/snk-taskbar.entry.js +14 -11
  86. package/dist/sankhyablocks/taskbar-elements-35d64ff9.js +90 -0
  87. package/dist/sankhyablocks/taskbar-processor-aa6772c9.js +45 -0
  88. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-multi-select.d.ts +7 -0
  89. package/dist/types/components/snk-filter-bar/filter-item/snk-filter-detail.d.ts +1 -0
  90. package/dist/types/components/snk-filter-bar/filter-list/snk-filter-list.d.ts +3 -0
  91. package/dist/types/components/snk-filter-bar/snk-filter-bar.d.ts +5 -3
  92. package/dist/types/components/snk-taskbar/elements/taskbar-elements.d.ts +3 -2
  93. package/dist/types/components/snk-taskbar/processor/taskbar-processor.d.ts +12 -0
  94. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +17 -1
  95. package/dist/types/components.d.ts +78 -2
  96. package/package.json +1 -1
  97. package/dist/esm/taskbar-elements-c119510a.js +0 -72
  98. package/dist/sankhyablocks/taskbar-elements-c119510a.js +0 -72
@@ -0,0 +1,64 @@
1
+ import { h } from '@stencil/core';
2
+ import FilterItemType from '../filter-item-type.enum';
3
+ export class SnkFilterMultiSelect {
4
+ ezChangeListener(evt) {
5
+ this.value = evt.detail.value;
6
+ }
7
+ render() {
8
+ if (!this.config || this.config.type !== FilterItemType.MULTI_SELECT) {
9
+ return undefined;
10
+ }
11
+ return (h("ez-combo-box", { label: this.config.label, value: this.config.value, options: this.config.props.options }));
12
+ }
13
+ static get is() { return "snk-filter-multi-select"; }
14
+ static get properties() {
15
+ return {
16
+ "value": {
17
+ "type": "any",
18
+ "mutable": true,
19
+ "complexType": {
20
+ "original": "any",
21
+ "resolved": "any",
22
+ "references": {}
23
+ },
24
+ "required": false,
25
+ "optional": false,
26
+ "docs": {
27
+ "tags": [],
28
+ "text": ""
29
+ },
30
+ "attribute": "value",
31
+ "reflect": true
32
+ },
33
+ "config": {
34
+ "type": "unknown",
35
+ "mutable": false,
36
+ "complexType": {
37
+ "original": "SnkFilterItemConfig",
38
+ "resolved": "SnkFilterItemConfig",
39
+ "references": {
40
+ "SnkFilterItemConfig": {
41
+ "location": "import",
42
+ "path": "../snk-filter-item"
43
+ }
44
+ }
45
+ },
46
+ "required": false,
47
+ "optional": false,
48
+ "docs": {
49
+ "tags": [],
50
+ "text": ""
51
+ }
52
+ }
53
+ };
54
+ }
55
+ static get listeners() {
56
+ return [{
57
+ "name": "ezChange",
58
+ "method": "ezChangeListener",
59
+ "target": undefined,
60
+ "capture": false,
61
+ "passive": false
62
+ }];
63
+ }
64
+ }
@@ -5,10 +5,11 @@ export class SnkFilterPeriod {
5
5
  this.value = evt.detail;
6
6
  }
7
7
  render() {
8
+ var _a;
8
9
  if (!this.config || this.config.type !== FilterItemType.NUMBER) {
9
10
  return undefined;
10
11
  }
11
- return (h("ez-number-input", { label: this.config.label, value: this.config.value }));
12
+ return (h("ez-number-input", { label: this.config.label, value: this.config.value, precision: (_a = this.config.props) === null || _a === void 0 ? void 0 : _a.precision }));
12
13
  }
13
14
  static get is() { return "snk-filter-number"; }
14
15
  static get properties() {
@@ -29,7 +29,7 @@ export class SnkFilterSearch {
29
29
  if (!this.config || this.config.type !== FilterItemType.SEARCH) {
30
30
  return undefined;
31
31
  }
32
- return (h("ez-search", { value: this.config.value, label: this.config.label, ref: ref => this._searchInput = ref, optionLoader: ({ mode, argument }) => this.doSearch(mode, argument) }));
32
+ return (h("ez-search", { suppressEmptyOption: true, value: this.config.value, label: this.config.label, ref: ref => this._searchInput = ref, optionLoader: ({ mode, argument }) => this.doSearch(mode, argument) }));
33
33
  }
34
34
  static get is() { return "snk-filter-search"; }
35
35
  static get properties() {
@@ -8,6 +8,8 @@ export class SnkFilterDetail {
8
8
  switch (this.config.type) {
9
9
  case FilterItemType.BINARY_SELECT:
10
10
  return "snk-filter-binary-select";
11
+ case FilterItemType.MULTI_SELECT:
12
+ return "snk-filter-multi-select";
11
13
  case FilterItemType.PERIOD:
12
14
  return "snk-filter-period";
13
15
  case FilterItemType.SEARCH:
@@ -17,12 +19,15 @@ export class SnkFilterDetail {
17
19
  }
18
20
  return "snk-filter-text";
19
21
  }
22
+ removeItem() {
23
+ this.changeConfig(Object.assign(Object.assign({}, this.config), { visible: false, fixed: false, value: undefined }));
24
+ }
20
25
  getPopUpHeaderButtons() {
21
26
  if (this.config.hardFixed) {
22
27
  return undefined;
23
28
  }
24
29
  return ([
25
- h("ez-icon", { title: this.getMessage("snkFilterBar.removeFilter"), class: "sc-snk-filter-bar snk-filter-item__editor-header-button", iconName: "delete", onClick: () => this.changeConfig(Object.assign(Object.assign({}, this.config), { visible: false })) }),
30
+ h("ez-icon", { title: this.getMessage("snkFilterBar.removeFilter"), class: "sc-snk-filter-bar snk-filter-item__editor-header-button", iconName: "delete", onClick: () => this.removeItem() }),
26
31
  h("ez-icon", { title: this.getMessage(this.config.fixed ? "snkFilterBar.unpinFilter" : "snkFilterBar.pinFilter"), class: "ez-margin-left--small sc-snk-filter-bar snk-filter-item__editor-header-button", iconName: this.config.fixed ? "un-pin" : "push-pin", onClick: () => this.changeConfig(Object.assign(Object.assign({}, this.config), { fixed: !this.config.fixed })) })
27
32
  ]);
28
33
  }
@@ -22,6 +22,14 @@ export class SnkFilterItem {
22
22
  return false;
23
23
  };
24
24
  }
25
+ async showUp(open = false) {
26
+ this._filterItemElement.scrollIntoView({ behavior: "auto", block: "nearest", inline: "nearest" });
27
+ if (open) {
28
+ window.requestAnimationFrame(() => {
29
+ this.showDetail();
30
+ });
31
+ }
32
+ }
25
33
  showDetail() {
26
34
  this._floatingID = FloatingManager.float(this._popover, this._popoverContainer, { autoClose: true, innerClickTest: this.innerClickCheck, left: this.getScrollOffset() });
27
35
  this.detailIsVisible = true;
@@ -76,6 +84,10 @@ export class SnkFilterItem {
76
84
  return optTwo.label;
77
85
  }
78
86
  }
87
+ if (type === FilterItemType.MULTI_SELECT) {
88
+ const opt = props.options.find(opt => opt.value === value);
89
+ return `${label}: ${opt.label}`;
90
+ }
79
91
  if (type === FilterItemType.PERIOD) {
80
92
  const period = value;
81
93
  const dateFormater = new Intl.DateTimeFormat("pt-BR");
@@ -184,6 +196,29 @@ export class SnkFilterItem {
184
196
  }
185
197
  }];
186
198
  }
199
+ static get methods() {
200
+ return {
201
+ "showUp": {
202
+ "complexType": {
203
+ "signature": "(open?: boolean) => Promise<void>",
204
+ "parameters": [{
205
+ "tags": [],
206
+ "text": ""
207
+ }],
208
+ "references": {
209
+ "Promise": {
210
+ "location": "global"
211
+ }
212
+ },
213
+ "return": "Promise<void>"
214
+ },
215
+ "docs": {
216
+ "text": "",
217
+ "tags": []
218
+ }
219
+ }
220
+ };
221
+ }
187
222
  static get elementRef() { return "_filterItemElement"; }
188
223
  static get listeners() {
189
224
  return [{
@@ -63,7 +63,7 @@ export class SnkFilterList {
63
63
  getFilterItems() {
64
64
  const items = this.items ? ArrayUtils.applyStringFilter(this._filterArgument, this.items.filter(item => item.kind === "FILTER")) : [];
65
65
  if (items.length === 0) {
66
- return h("div", { class: "ez-text ez-text--medium ez-text--primary ez-padding--extra-small sc-snk-filter-bar snk-filter-bar__filter-list-items-container--empty" }, this.getMessage("snkFilterBar.emptyFilterList"));
66
+ return h("div", { class: "ez-text ez-text--medium ez-text--primary ez-padding--extra-small sc-snk-filter-bar snk-filter-bar__filter-list-items-container--empty" }, this.emptyText);
67
67
  }
68
68
  const hideItems = !this._filterArgument && !this._showAll && (items.length > MAX_FILTERS + 1);
69
69
  if (hideItems) {
@@ -76,7 +76,7 @@ export class SnkFilterList {
76
76
  return this.items.filter(item => item.kind === "FOOTER");
77
77
  }
78
78
  render() {
79
- return (h(Host, { class: "ez-flex ez-flex--column" }, h("ez-button", { label: this.label, onClick: () => this.buttonClick(), mode: this.iconName ? "icon" : undefined, iconName: this.iconName, size: "small" }, h("slot", { name: "leftIcon" })), h("section", { class: "ez-margin-top--small sc-snk-filter-bar snk-filter__popover-container", ref: elem => this._popoverContainer = elem }, h("div", { class: "sc-snk-filter-bar snk-filter__popover ez-padding--small", ref: elem => this._popover = elem }, h("ez-filter-input", { ref: ref => this._filterInput = ref, mode: "slim", label: this.getMessage("snkFilterBar.findFilter"), value: this._filterArgument, onEzChange: (evt) => this._filterArgument = evt.detail }), this.getFilterItems(), h("hr", { class: "sc-snk-filter-bar snk-filter__popover-rule" }), this.items ? this.getFooterItems().map(item => this.buildItemElement(item)) : undefined))));
79
+ return (h(Host, { class: "ez-flex ez-flex--column" }, h("ez-button", { class: this.buttonClass, label: this.label, onClick: () => this.buttonClick(), mode: this.iconName ? "icon" : undefined, iconName: this.iconName, size: "small" }, h("slot", { name: "leftIcon" })), h("section", { class: "ez-margin-top--small sc-snk-filter-bar snk-filter__popover-container", ref: elem => this._popoverContainer = elem }, h("div", { class: "sc-snk-filter-bar snk-filter__popover ez-padding--small", ref: elem => this._popover = elem }, h("ez-filter-input", { ref: ref => this._filterInput = ref, mode: "slim", label: this.findFilterText, value: this._filterArgument, onEzChange: (evt) => this._filterArgument = evt.detail }), this.getFilterItems(), h("hr", { class: "sc-snk-filter-bar snk-filter__popover-rule" }), this.items ? this.getFooterItems().map(item => this.buildItemElement(item)) : undefined))));
80
80
  }
81
81
  static get is() { return "snk-filter-list"; }
82
82
  static get properties() {
@@ -151,6 +151,57 @@ export class SnkFilterList {
151
151
  "tags": [],
152
152
  "text": ""
153
153
  }
154
+ },
155
+ "emptyText": {
156
+ "type": "string",
157
+ "mutable": false,
158
+ "complexType": {
159
+ "original": "string",
160
+ "resolved": "string",
161
+ "references": {}
162
+ },
163
+ "required": false,
164
+ "optional": false,
165
+ "docs": {
166
+ "tags": [],
167
+ "text": ""
168
+ },
169
+ "attribute": "empty-text",
170
+ "reflect": false
171
+ },
172
+ "findFilterText": {
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": ""
185
+ },
186
+ "attribute": "find-filter-text",
187
+ "reflect": false
188
+ },
189
+ "buttonClass": {
190
+ "type": "string",
191
+ "mutable": false,
192
+ "complexType": {
193
+ "original": "string",
194
+ "resolved": "string",
195
+ "references": {}
196
+ },
197
+ "required": false,
198
+ "optional": false,
199
+ "docs": {
200
+ "tags": [],
201
+ "text": ""
202
+ },
203
+ "attribute": "button-class",
204
+ "reflect": false
154
205
  }
155
206
  };
156
207
  }
@@ -96,4 +96,19 @@
96
96
  justify-content: center;
97
97
  align-self: center;
98
98
  align-items: center;
99
+ }
100
+
101
+ .snk-filter-bar__filter-list-items-button--active{
102
+ position: relative;
103
+ }
104
+ .snk-filter-bar__filter-list-items-button--active::after{
105
+ display: flex;
106
+ position: absolute;
107
+ content: "";
108
+ width: 8px;
109
+ height: 8px;
110
+ top: 7px;
111
+ left: 17px;
112
+ background-color: var(--icon--alert--color, #008561);
113
+ border-radius: 50%;
99
114
  }
@@ -4,6 +4,7 @@ import FilterItemType from './filter-item/filter-item-type.enum';
4
4
  import { toString } from '@sankhyalabs/core/dist/dataunit/metadata/DataType';
5
5
  const PERSONALIZED_FILTER = "PERSONALIZED_FILTER";
6
6
  const DEFAULT_FILTER = "DEFAULT_FILTER";
7
+ const CLEAR_ALL_FILTERS = "CLEAR_ALL_FILTERS";
7
8
  export class SnkFilterBar {
8
9
  constructor() {
9
10
  this._updateSequence = [];
@@ -49,6 +50,9 @@ export class SnkFilterBar {
49
50
  //FIXME: ajustar o backend para não exigir parametros
50
51
  return { name: id, expression: selectedOption.expression, params: [] };
51
52
  }
53
+ if (type === FilterItemType.MULTI_SELECT) {
54
+ return { name: id, expression: props.expression, params: [{ name: id, dataType: DataType.TEXT, value }] };
55
+ }
52
56
  if (type === FilterItemType.PERIOD) {
53
57
  const { end, start } = value;
54
58
  const params = [];
@@ -120,11 +124,11 @@ export class SnkFilterBar {
120
124
  getFilterItems() {
121
125
  const pinnedItems = [];
122
126
  const unpinnedItems = [];
123
- this._items = this.filterConfig
127
+ this.filterConfig
124
128
  .filter(item => item.visible)
125
129
  .sort((a, b) => this._filtersComparator(a, b))
126
- .map((item, index) => {
127
- const filterItem = (h("snk-filter-item", { config: item, class: index > 0 ? "ez-padding-left--medium" : "", getMessage: (key, props) => this.getMessage(key, props), key: item.id }));
130
+ .forEach((item, index) => {
131
+ const filterItem = (h("snk-filter-item", { id: `filter-${item.id}`, config: item, class: index > 0 ? "ez-padding-left--medium" : "", getMessage: (key, props) => this.getMessage(key, props), key: item.id }));
128
132
  if (item.fixed || item.hardFixed) {
129
133
  pinnedItems.push(filterItem);
130
134
  }
@@ -142,25 +146,36 @@ export class SnkFilterBar {
142
146
  return elements;
143
147
  }
144
148
  calculateUpdateSequence(item) {
145
- this._updateSequence = this._updateSequence.filter(itemId => item.id !== itemId);
146
- this._updateSequence.push(item.id);
149
+ if (item) {
150
+ this._updateSequence = this._updateSequence.filter(itemId => item.id !== itemId);
151
+ this._updateSequence.push(item.id);
152
+ }
147
153
  }
148
154
  filterChangeListener(evt) {
149
155
  this.updateFilter(evt.detail);
150
156
  }
151
- updateFilter(newItem) {
157
+ updateFilter(newItem, clear = false) {
152
158
  this.calculateUpdateSequence(newItem);
153
- let needRefresh = false;
159
+ let upToDate = false;
154
160
  this.filterConfig = this.filterConfig.map(item => {
155
- if (item.id === newItem.id) {
156
- needRefresh = ObjectUtils.objectToString(item.value) !== ObjectUtils.objectToString(newItem.value);
157
- return newItem;
161
+ if (clear) {
162
+ if (item.value != undefined) {
163
+ upToDate = true;
164
+ }
165
+ return Object.assign(Object.assign({}, item), { value: undefined });
166
+ }
167
+ else {
168
+ if (item.id === newItem.id) {
169
+ upToDate = ObjectUtils.objectToString(item.value) !== ObjectUtils.objectToString(newItem.value);
170
+ return newItem;
171
+ }
158
172
  }
159
173
  return item;
160
174
  });
161
- if (needRefresh) {
175
+ if (upToDate) {
162
176
  this.dataUnit.loadData();
163
177
  }
178
+ return upToDate;
164
179
  }
165
180
  getAddListItems() {
166
181
  const hiddenItems = this.filterConfig
@@ -173,17 +188,50 @@ export class SnkFilterBar {
173
188
  { name: DEFAULT_FILTER, label: this.getMessage("snkFilterBar.defaultFilter"), iconName: "configuration", kind: "FOOTER" }
174
189
  ]);
175
190
  }
191
+ getActiveClass() {
192
+ const filterApplied = this.filterConfig.filter(item => item.value != undefined).length > 0;
193
+ return filterApplied ? "sc-snk-filter-bar snk-filter-bar__filter-list-items-button--active" : "";
194
+ }
195
+ getAppliedListItems() {
196
+ const appliedItems = this.filterConfig
197
+ .filter(item => item.value != undefined)
198
+ .sort(this._filtersComparator);
199
+ return appliedItems.map(filter => {
200
+ return { name: filter.id, label: filter.label, kind: "FILTER", iconName: null };
201
+ }).concat([
202
+ { name: CLEAR_ALL_FILTERS, label: this.getMessage("snkFilterBar.clearAllFilters"), iconName: "cleaning", kind: "FOOTER" }
203
+ ]);
204
+ }
176
205
  addFilterHandler(itemName) {
177
206
  const filterItem = this.filterConfig.find(currentFilter => currentFilter.id === itemName);
178
207
  if (filterItem) {
179
208
  this.updateFilter(Object.assign(Object.assign({}, filterItem), { visible: true }));
209
+ window.requestAnimationFrame(() => {
210
+ const itemElement = this._element.querySelector("#filter-" + itemName);
211
+ if (itemElement) {
212
+ itemElement.showUp();
213
+ }
214
+ });
215
+ }
216
+ }
217
+ appliedFilterHandler(itemName) {
218
+ if (itemName === CLEAR_ALL_FILTERS) {
219
+ if (this.updateFilter(null, true)) {
220
+ this._application.info(this.getMessage("snkFilterBar.successfullyCleaned"), { iconName: "check" });
221
+ }
222
+ }
223
+ else {
224
+ const itemElement = this._element.querySelector("#filter-" + itemName);
225
+ if (itemElement) {
226
+ itemElement.showUp(true);
227
+ }
180
228
  }
181
229
  }
182
230
  render() {
183
231
  if (!this.dataUnit || !this.filterConfig || this.filterConfig.length === 0) {
184
232
  return undefined;
185
233
  }
186
- return (h(Host, null, h("ez-scroller", { direction: "horizontal" }, this.getFilterItems()), h("ez-button", { mode: "icon", size: "small", iconName: "filter", class: "ez-padding-left--medium" }), h("snk-filter-list", { items: this.getAddListItems(), label: this.getMessage("snkFilterBar.addFilter"), getMessage: (key, params) => this.getMessage(key, params), class: "ez-padding-left--medium", onSnkItemSelected: evt => this.addFilterHandler(evt.detail) }, h("ez-icon", { slot: "leftIcon", class: "ez-padding-right--small", iconName: "plus" }))));
234
+ return (h(Host, null, h("ez-scroller", { direction: "horizontal" }, this.getFilterItems()), h("snk-filter-list", { items: this.getAppliedListItems(), getMessage: (key, params) => this.getMessage(key, params), emptyText: this.getMessage("snkFilterBar.emptyAppliedFiltersList"), findFilterText: this.getMessage("snkFilterBar.findFilter"), iconName: "filter", class: "ez-padding-left--medium", buttonClass: this.getActiveClass(), onSnkItemSelected: evt => this.appliedFilterHandler(evt.detail) }), h("snk-filter-list", { items: this.getAddListItems(), label: this.getMessage("snkFilterBar.addFilter"), getMessage: (key, params) => this.getMessage(key, params), emptyText: this.getMessage("snkFilterBar.emptyFiltersList"), findFilterText: this.getMessage("snkFilterBar.findField"), class: "ez-padding-left--medium", onSnkItemSelected: evt => this.addFilterHandler(evt.detail) }, h("ez-icon", { slot: "leftIcon", class: "ez-padding-right--small", iconName: "plus" }))));
187
235
  }
188
236
  static get is() { return "snk-filter-bar"; }
189
237
  static get encapsulation() { return "scoped"; }
@@ -1,6 +1,13 @@
1
1
  import { ApplicationContext } from '@sankhyalabs/core';
2
2
  import { h } from '@stencil/core';
3
+ import TaskbarProcessor from '../snk-taskbar/processor/taskbar-processor';
3
4
  export class SnkForm {
5
+ constructor() {
6
+ this._taskbarProcessor = new TaskbarProcessor({
7
+ "snkForm.regular": ["PREVIOUS", "NEXT", "DIVIDER", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "GRID_MODE", "INSERT"],
8
+ "snkForm.finish_edition": ["CANCEL", "SAVE"]
9
+ });
10
+ }
4
11
  getFormConfig() {
5
12
  return (this._dataState && this._dataState.insertionMode ? this._insertionFormConfig : this._editionFormConfig);
6
13
  }
@@ -90,11 +97,24 @@ export class SnkForm {
90
97
  parent = parent.parentElement;
91
98
  }
92
99
  }
100
+ componentWillRender() {
101
+ var _a;
102
+ const taskbarId = ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "snkForm.finish_edition" : "snkForm.regular";
103
+ const disabledButtons = [];
104
+ if (!this._dataState || !this._dataState.hasPrevious) {
105
+ disabledButtons.push("PREVIOUS");
106
+ }
107
+ if (!this._dataState || !this._dataState.hasNext) {
108
+ disabledButtons.push("NEXT");
109
+ }
110
+ this._taskbarProcessor.process(taskbarId, this.taskbarManager, this._dataState, disabledButtons);
111
+ }
93
112
  render() {
113
+ var _a;
94
114
  if (!this._configLoaded || !this._dataUnit || !this._dataState) {
95
115
  return undefined;
96
116
  }
97
- return (h("section", { class: "snk-form" }, h("div", { class: "snk-form__header snk-form__header--fixed ez-row" }, h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6", key: "formHeader" }, h("ez-button", { title: this.getMessage("snkForm.goBackTitle"), mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small", onClick: () => this.exitForm() }), h("h1", { class: "ez-title ez-title--primary ez-title--xlarge ez-align--middle" }, this.getMessage("snkForm.title"))), h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6 ez-align--right" }, h("snk-taskbar", { key: "formTaskbar", buttons: this._dataState.isDirty ? "CANCEL,SAVE" : "PREVIOUS,NEXT,DIVIDER,CLONE,REMOVE,MORE_OPTIONS,DIVIDER,GRID_MODE,INSERT", primaryButton: this._dataState.isDirty ? "SAVE" : "INSERT", disabledButtons: this.getDisabledButtons(), actionsList: this.actionsList, dataUnit: this._dataUnit }))), h("section", null, h("div", { class: "ez-row" }, h("div", { class: "ez-col ez-col--sd-12" }, h("ez-form", { key: "ezForm" + this._snkDataUnit.entityName, dataUnit: this._dataUnit, config: this.getFormConfig(), recordsValidator: this.recordsValidator }))))));
117
+ return (h("section", { class: "snk-form" }, h("div", { class: "snk-form__header snk-form__header--fixed ez-row" }, h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6", key: "formHeader" }, h("ez-button", { title: this.getMessage("snkForm.goBackTitle"), mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small", onClick: () => this.exitForm() }), h("h1", { class: "ez-title ez-title--primary ez-title--xlarge ez-align--middle" }, this.getMessage("snkForm.title"))), h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6 ez-align--right" }, h("snk-taskbar", { key: "formTaskbar", buttons: this._taskbarProcessor.buttons, disabledButtons: this._taskbarProcessor.disabledButtons, customButtons: this._taskbarProcessor.customButtons, actionsList: this.actionsList, primaryButton: ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "SAVE" : "INSERT", dataUnit: this._dataUnit }))), h("section", null, h("div", { class: "ez-row" }, h("div", { class: "ez-col ez-col--sd-12" }, h("ez-form", { key: "ezForm" + this._snkDataUnit.entityName, dataUnit: this._dataUnit, config: this.getFormConfig(), recordsValidator: this.recordsValidator }))))));
98
118
  }
99
119
  static get is() { return "snk-form"; }
100
120
  static get encapsulation() { return "scoped"; }
@@ -169,6 +189,26 @@ export class SnkForm {
169
189
  "tags": [],
170
190
  "text": "Lista de a\u00E7\u00F5es que devem ser usadas no bot\u00E3o \"Mais op\u00E7\u00F5es\""
171
191
  }
192
+ },
193
+ "taskbarManager": {
194
+ "type": "unknown",
195
+ "mutable": false,
196
+ "complexType": {
197
+ "original": "TaskbarManager",
198
+ "resolved": "TaskbarManager",
199
+ "references": {
200
+ "TaskbarManager": {
201
+ "location": "import",
202
+ "path": "../snk-taskbar/snk-taskbar"
203
+ }
204
+ }
205
+ },
206
+ "required": false,
207
+ "optional": false,
208
+ "docs": {
209
+ "tags": [],
210
+ "text": "Gerenciador das barras de tarefas. \u00C9 poss\u00EDvel determinar bot\u00F5es espec\u00EDficos\nou mesmo gerenciar o estado dos bot\u00F5es."
211
+ }
172
212
  }
173
213
  };
174
214
  }
@@ -1,9 +1,16 @@
1
1
  import { ApplicationContext } from '@sankhyalabs/core';
2
2
  import { h } from '@stencil/core';
3
3
  import { TaskbarElement } from '../snk-taskbar/elements/taskbar-elements';
4
+ import TaskbarProcessor from '../snk-taskbar/processor/taskbar-processor';
4
5
  export class SnkGrid {
5
- getHeaderButtons() {
6
- return this._dataState && this._dataState.selectedRecords.length > 0 ? "UPDATE,CLONE,REMOVE,MORE_OPTIONS,DIVIDER,REFRESH" : "REFRESH";
6
+ constructor() {
7
+ this._topTaskbarProcessor = new TaskbarProcessor({
8
+ "snkGridTopTaskbar": ["FORM_MODE", "CONFIG_GRID", "INSERT"]
9
+ });
10
+ this._headerTaskbarProcessor = new TaskbarProcessor({
11
+ "snkGridHeaderTaskbar.unselected": ["REFRESH"],
12
+ "snkGridHeaderTaskbar.selected": ["UPDATE", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "REFRESH"]
13
+ });
7
14
  }
8
15
  actionClickHandler(evt) {
9
16
  if (evt.detail === TaskbarElement.CONFIG_GRID && this._grid) {
@@ -44,11 +51,16 @@ export class SnkGrid {
44
51
  parent = parent.parentElement;
45
52
  }
46
53
  }
54
+ componentWillRender() {
55
+ const headerTaskbarId = this._dataState && this._dataState.selectedRecords.length > 0 ? "snkGridHeaderTaskbar.selected" : "snkGridHeaderTaskbar.unselected";
56
+ this._headerTaskbarProcessor.process(headerTaskbarId, this.taskbarManager, this._dataState);
57
+ this._topTaskbarProcessor.process("snkGridTopTaskbar", this.taskbarManager, this._dataState);
58
+ }
47
59
  render() {
48
60
  if (!this._configLoaded || !this._dataUnit) {
49
61
  return undefined;
50
62
  }
51
- return (h("div", { class: "snk-grid__container ez-flex ez-flex--column ez-flex-item--auto ez-padding--large" }, h("div", { class: "snk-grid__header ez-padding-bottom--medium ez-margin-bottom--medium" }, h("snk-filter-bar", { class: "snk-grid__filter-bar ez-align--top" }), h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-left--medium snk-grid__header-divider" }), h("snk-taskbar", { class: "ez-padding-left--medium", onActionClick: evt => this.actionClickHandler(evt), key: "topTaskbar", dataUnit: this._dataUnit, buttons: "FORM_MODE,CONFIG_GRID,INSERT", primaryButton: "INSERT" })), h("ez-grid", { ref: ref => this._grid = ref, dataUnit: this._dataUnit, key: "grid-" + this._snkDataUnit.entityName, config: this._gridConfig, onConfigChange: evt => { this.saveConfig(evt.detail); }, onEzDoubleClick: () => this.gridDoubleClick.emit() }, h("snk-taskbar", { dataUnit: this._dataUnit, buttons: this.getHeaderButtons(), slot: "leftButtons", actionsList: this.actionsList })), h("div", { class: "ez-col ez-col--sd-12" }, h("slot", { name: "SnkGridFooter" }))));
63
+ return (h("div", { class: "snk-grid__container ez-flex ez-flex--column ez-flex-item--auto ez-padding--large" }, h("div", { class: "snk-grid__header ez-padding-bottom--medium ez-margin-bottom--medium" }, h("snk-filter-bar", { class: "snk-grid__filter-bar ez-align--top" }), h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-left--medium snk-grid__header-divider" }), h("snk-taskbar", { class: "ez-padding-left--medium", onActionClick: evt => this.actionClickHandler(evt), key: "topTaskbar", dataUnit: this._dataUnit, buttons: this._topTaskbarProcessor.buttons, disabledButtons: this._topTaskbarProcessor.disabledButtons, customButtons: this._topTaskbarProcessor.customButtons, primaryButton: "INSERT" })), h("ez-grid", { ref: ref => this._grid = ref, dataUnit: this._dataUnit, key: "grid-" + this._snkDataUnit.entityName, config: this._gridConfig, onConfigChange: evt => { this.saveConfig(evt.detail); }, onEzDoubleClick: () => this.gridDoubleClick.emit() }, h("snk-taskbar", { dataUnit: this._dataUnit, buttons: this._headerTaskbarProcessor.buttons, disabledButtons: this._headerTaskbarProcessor.disabledButtons, customButtons: this._headerTaskbarProcessor.customButtons, slot: "leftButtons", actionsList: this.actionsList })), h("div", { class: "ez-col ez-col--sd-12" }, h("slot", { name: "SnkGridFooter" }))));
52
64
  }
53
65
  static get is() { return "snk-grid"; }
54
66
  static get encapsulation() { return "scoped"; }
@@ -103,6 +115,26 @@ export class SnkGrid {
103
115
  "tags": [],
104
116
  "text": "Lista de a\u00E7\u00F5es que devem ser usadas no bot\u00E3o \"Mais op\u00E7\u00F5es\""
105
117
  }
118
+ },
119
+ "taskbarManager": {
120
+ "type": "unknown",
121
+ "mutable": false,
122
+ "complexType": {
123
+ "original": "TaskbarManager",
124
+ "resolved": "TaskbarManager",
125
+ "references": {
126
+ "TaskbarManager": {
127
+ "location": "import",
128
+ "path": "../snk-taskbar/snk-taskbar"
129
+ }
130
+ }
131
+ },
132
+ "required": false,
133
+ "optional": false,
134
+ "docs": {
135
+ "tags": [],
136
+ "text": "Gerenciador das barras de tarefas. \u00C9 poss\u00EDvel determinar bot\u00F5es espec\u00EDficos\nou mesmo gerenciar o estado dos bot\u00F5es."
137
+ }
106
138
  }
107
139
  };
108
140
  }
@@ -28,41 +28,59 @@ export var VisibleWhenForbidden;
28
28
  (function (VisibleWhenForbidden) {
29
29
  VisibleWhenForbidden["CONFIG_GRID"] = "CONFIG_GRID";
30
30
  })(VisibleWhenForbidden || (VisibleWhenForbidden = {}));
31
+ export const buildCustomButton = (def, className, action, isEnabled) => {
32
+ const { hint, text, iconName } = def;
33
+ if (iconName) {
34
+ if (text) {
35
+ return iconTextButton(iconName, def.name, className, hint, text, action, isEnabled);
36
+ }
37
+ else {
38
+ return iconButton(iconName, def.name, className, hint, action, isEnabled);
39
+ }
40
+ }
41
+ else {
42
+ return textButton(def.name, className, text, hint, action, isEnabled);
43
+ }
44
+ };
31
45
  export const buildElem = (element, className, getTitle, action, isEnabled, actions) => {
46
+ const title = getTitle(element);
32
47
  switch (element) {
33
48
  case TaskbarElement.PREVIOUS:
34
- return iconButton("chevron-left", element, className, getTitle, action, isEnabled);
49
+ return iconButton("chevron-left", element, className, title, action, isEnabled);
35
50
  case TaskbarElement.NEXT:
36
- return iconButton("chevron-right", element, className, getTitle, action, isEnabled);
51
+ return iconButton("chevron-right", element, className, title, action, isEnabled);
37
52
  case TaskbarElement.REFRESH:
38
- return iconButton("sync", element, className, getTitle, action, isEnabled);
53
+ return iconButton("sync", element, className, title, action, isEnabled);
39
54
  case TaskbarElement.UPDATE:
40
- return iconButton("edit", element, className, getTitle, action, isEnabled);
55
+ return iconButton("edit", element, className, title, action, isEnabled);
41
56
  case TaskbarElement.CLONE:
42
- return iconButton("copy", element, className, getTitle, action, isEnabled);
57
+ return iconButton("copy", element, className, title, action, isEnabled);
43
58
  case TaskbarElement.REMOVE:
44
- return iconButton("delete", element, className, getTitle, action, isEnabled);
59
+ return iconButton("delete", element, className, title, action, isEnabled);
45
60
  case TaskbarElement.INSERT:
46
- return iconTextButton("plus", element, className, getTitle, action, isEnabled);
61
+ return iconTextButton("plus", element, className, title, title, action, isEnabled);
47
62
  case TaskbarElement.CANCEL:
48
- return h("ez-button", { title: getTitle(element), label: getTitle(element), size: "small", enabled: isEnabled(element), onClick: () => action(element) });
63
+ return textButton(element, className, title, title, action, isEnabled);
49
64
  case TaskbarElement.SAVE:
50
- return iconTextButton("save", element, className, getTitle, action, isEnabled);
65
+ return iconTextButton("save", element, className, title, title, action, isEnabled);
51
66
  case TaskbarElement.GRID_MODE:
52
- return iconButton("table", element, className, getTitle, action, isEnabled);
67
+ return iconButton("table", element, className, title, action, isEnabled);
53
68
  case TaskbarElement.FORM_MODE:
54
- return iconButton("list", element, className, getTitle, action, isEnabled);
69
+ return iconButton("list", element, className, title, action, isEnabled);
55
70
  case TaskbarElement.CONFIG_GRID:
56
- return iconButton("settings-inverted", element, className, getTitle, action, isEnabled);
71
+ return iconButton("settings-inverted", element, className, title, action, isEnabled);
57
72
  case TaskbarElement.MORE_OPTIONS:
58
- return actions && actions.length > 0 ? h("ez-actions-button", { title: getTitle(element), size: "small", class: className, enabled: isEnabled(element), onEzAction: (evt) => action(evt.detail.value), actions: actions }) : undefined;
73
+ return actions && actions.length > 0 ? h("ez-actions-button", { title: title, size: "small", class: className, enabled: isEnabled(element), onEzAction: (evt) => action(evt.detail.value), actions: actions }) : undefined;
59
74
  case TaskbarElement.DIVIDER:
60
75
  return h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-horizontal--medium" });
61
76
  }
62
77
  };
63
- function iconButton(iconName, element, className, getTitle, action, isEnabled) {
64
- return h("ez-button", { key: iconName, title: getTitle(element), mode: "icon", size: "small", class: className, iconName: iconName, enabled: isEnabled(element), onClick: () => action(element) });
78
+ function textButton(name, className, text, title, action, isEnabled) {
79
+ return h("ez-button", { title: title, label: text, size: "small", class: className, enabled: isEnabled(name), onClick: () => action(name) });
80
+ }
81
+ function iconButton(iconName, name, className, title, action, isEnabled) {
82
+ return h("ez-button", { name: iconName, title: title, mode: "icon", size: "small", class: className, iconName: iconName, enabled: isEnabled(name), onClick: () => action(name) });
65
83
  }
66
- function iconTextButton(iconName, element, className, getTitle, action, isEnabled) {
67
- return h("ez-button", { key: iconName, title: getTitle(element), label: getTitle(element), size: "small", class: className, enabled: isEnabled(element), onClick: () => action(element) }, h("ez-icon", { class: "ez-padding-right--small", slot: "leftIcon", iconName: iconName }));
84
+ function iconTextButton(iconName, name, className, text, title, action, isEnabled) {
85
+ return h("ez-button", { name: iconName, title: title, label: text, size: "small", class: className, enabled: isEnabled(name), onClick: () => action(name) }, h("ez-icon", { class: "ez-padding-right--small", slot: "leftIcon", iconName: iconName }));
68
86
  }