@sankhyalabs/sankhyablocks 1.4.0-beta.2 → 1.4.0-beta.3

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 (140) hide show
  1. package/dist/cjs/{index-b0b676c5.js → index-6fcf07f3.js} +159 -1515
  2. package/dist/cjs/loader.cjs.js +2 -18
  3. package/dist/cjs/sankhyablocks.cjs.js +4 -116
  4. package/dist/cjs/snk-application.cjs.entry.js +50 -214
  5. package/dist/cjs/snk-crud.cjs.entry.js +3 -3
  6. package/dist/cjs/snk-data-unit.cjs.entry.js +23 -23
  7. package/dist/cjs/snk-filter-bar_5.cjs.entry.js +902 -0
  8. package/dist/cjs/snk-filter-binary-select.cjs.entry.js +1 -1
  9. package/dist/cjs/snk-filter-detail.cjs.entry.js +3 -3
  10. package/dist/cjs/snk-filter-multi-select.cjs.entry.js +1 -1
  11. package/dist/cjs/snk-filter-number.cjs.entry.js +1 -1
  12. package/dist/cjs/snk-filter-period.cjs.entry.js +1 -1
  13. package/dist/cjs/snk-filter-personalized.cjs.entry.js +23 -22
  14. package/dist/cjs/snk-filter-search.cjs.entry.js +3 -3
  15. package/dist/cjs/snk-filter-text.cjs.entry.js +1 -1
  16. package/dist/cjs/{snk-form.cjs.entry.js → snk-form_2.cjs.entry.js} +119 -5
  17. package/dist/cjs/snk-pesquisa.cjs.entry.js +5 -5
  18. package/dist/cjs/{taskbar-elements-283c737e.js → taskbar-elements-aedfeae6.js} +1 -1
  19. package/dist/cjs/teste-pesquisa.cjs.entry.js +5 -5
  20. package/dist/components/index.js +0 -4
  21. package/dist/components/snk-application2.js +10 -174
  22. package/dist/components/snk-crud.js +1 -1
  23. package/dist/components/snk-data-unit.js +2 -2
  24. package/dist/components/snk-filter-bar2.js +4 -2
  25. package/dist/components/snk-filter-detail2.js +1 -1
  26. package/dist/components/snk-filter-item2.js +1 -1
  27. package/dist/components/snk-filter-list2.js +1 -1
  28. package/dist/components/snk-filter-modal2.js +4 -19
  29. package/dist/components/snk-filter-personalized.js +2 -1
  30. package/dist/components/snk-filter-search.js +1 -1
  31. package/dist/components/snk-form2.js +1 -1
  32. package/dist/components/snk-grid2.js +1 -1
  33. package/dist/components/snk-pesquisa2.js +1 -1
  34. package/dist/components/snk-taskbar2.js +1 -1
  35. package/dist/components/teste-pesquisa.js +1 -1
  36. package/dist/{sankhyablocks/index-2b4d2d14.js → esm/index-81dda3cf.js} +160 -1508
  37. package/dist/esm/loader.js +2 -18
  38. package/dist/esm/sankhyablocks.js +4 -116
  39. package/dist/esm/snk-application.entry.js +11 -175
  40. package/dist/esm/snk-crud.entry.js +2 -2
  41. package/dist/esm/snk-data-unit.entry.js +3 -3
  42. package/dist/esm/{snk-filter-bar.entry.js → snk-filter-bar_5.entry.js} +436 -4
  43. package/dist/esm/snk-filter-binary-select.entry.js +1 -1
  44. package/dist/esm/snk-filter-detail.entry.js +2 -2
  45. package/dist/esm/snk-filter-multi-select.entry.js +1 -1
  46. package/dist/esm/snk-filter-number.entry.js +1 -1
  47. package/dist/esm/snk-filter-period.entry.js +1 -1
  48. package/dist/esm/snk-filter-personalized.entry.js +3 -2
  49. package/dist/esm/snk-filter-search.entry.js +2 -2
  50. package/dist/esm/snk-filter-text.entry.js +1 -1
  51. package/dist/{sankhyablocks/snk-form.entry.js → esm/snk-form_2.entry.js} +117 -4
  52. package/dist/esm/snk-pesquisa.entry.js +2 -2
  53. package/dist/esm/{taskbar-elements-35d64ff9.js → taskbar-elements-38eb5d51.js} +1 -1
  54. package/dist/esm/teste-pesquisa.entry.js +2 -2
  55. package/dist/sankhyablocks/index.esm.js +0 -1
  56. package/dist/sankhyablocks/p-0352c0e2.entry.js +1 -0
  57. package/dist/sankhyablocks/p-07ebda01.entry.js +1 -0
  58. package/dist/sankhyablocks/p-322c0df2.entry.js +1 -0
  59. package/dist/sankhyablocks/p-46caa101.entry.js +1 -0
  60. package/dist/sankhyablocks/p-473cedf9.entry.js +1 -0
  61. package/dist/sankhyablocks/p-586e2522.js +1 -0
  62. package/dist/sankhyablocks/p-86f15ffe.js +1 -0
  63. package/dist/sankhyablocks/p-8f3c5709.entry.js +1 -0
  64. package/dist/sankhyablocks/p-97009a2c.entry.js +1 -0
  65. package/dist/sankhyablocks/p-9be74b46.entry.js +74 -0
  66. package/dist/sankhyablocks/p-9dd2b8cb.js +1 -0
  67. package/dist/sankhyablocks/p-a8b59c61.entry.js +1 -0
  68. package/dist/sankhyablocks/p-aecf3e0a.entry.js +1 -0
  69. package/dist/sankhyablocks/p-c1c3b5d8.entry.js +1 -0
  70. package/dist/sankhyablocks/p-c78cb79a.entry.js +1 -0
  71. package/dist/sankhyablocks/p-c9eec639.entry.js +1 -0
  72. package/dist/sankhyablocks/p-dc482a42.entry.js +1 -0
  73. package/dist/sankhyablocks/p-fac2b6a9.js +2 -0
  74. package/dist/sankhyablocks/p-fb705f81.entry.js +1 -0
  75. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -129
  76. package/package.json +1 -1
  77. package/react/components.d.ts +19 -0
  78. package/react/components.js +19 -0
  79. package/react/components.js.map +1 -1
  80. package/dist/cjs/app-globals-3a1e7e63.js +0 -5
  81. package/dist/cjs/css-shim-b8158822.js +0 -6
  82. package/dist/cjs/dom-36862b77.js +0 -75
  83. package/dist/cjs/index-84fe3b86.js +0 -20
  84. package/dist/cjs/index-93965c41.js +0 -141
  85. package/dist/cjs/index-e90ae303.js +0 -2408
  86. package/dist/cjs/shadow-css-346c0795.js +0 -389
  87. package/dist/cjs/snk-filter-bar.cjs.entry.js +0 -466
  88. package/dist/cjs/snk-filter-item.cjs.entry.js +0 -177
  89. package/dist/cjs/snk-filter-list.cjs.entry.js +0 -91
  90. package/dist/cjs/snk-filter-modal.cjs.entry.js +0 -37
  91. package/dist/cjs/snk-grid.cjs.entry.js +0 -79
  92. package/dist/cjs/snk-taskbar.cjs.entry.js +0 -160
  93. package/dist/cjs/taskbar-processor-6bd0d35c.js +0 -47
  94. package/dist/components/index2.js +0 -2394
  95. package/dist/components/index3.js +0 -139
  96. package/dist/esm/app-globals-0f993ce5.js +0 -3
  97. package/dist/esm/css-shim-b3f2ee8d.js +0 -4
  98. package/dist/esm/dom-665d6011.js +0 -73
  99. package/dist/esm/index-2b4d2d14.js +0 -3262
  100. package/dist/esm/index-5992b7e6.js +0 -139
  101. package/dist/esm/index-c683b2b0.js +0 -2394
  102. package/dist/esm/index-c71285cb.js +0 -17
  103. package/dist/esm/shadow-css-b18e99d7.js +0 -387
  104. package/dist/esm/snk-filter-item.entry.js +0 -173
  105. package/dist/esm/snk-filter-list.entry.js +0 -87
  106. package/dist/esm/snk-filter-modal.entry.js +0 -33
  107. package/dist/esm/snk-form.entry.js +0 -129
  108. package/dist/esm/snk-grid.entry.js +0 -75
  109. package/dist/esm/snk-taskbar.entry.js +0 -156
  110. package/dist/esm/taskbar-processor-aa6772c9.js +0 -45
  111. package/dist/sankhyablocks/SnkMessageBuilder-35a20271.js +0 -199
  112. package/dist/sankhyablocks/app-globals-0f993ce5.js +0 -3
  113. package/dist/sankhyablocks/css-shim-b3f2ee8d.js +0 -4
  114. package/dist/sankhyablocks/dom-665d6011.js +0 -73
  115. package/dist/sankhyablocks/filter-item-type.enum-a79b2fa8.js +0 -14
  116. package/dist/sankhyablocks/index-5992b7e6.js +0 -139
  117. package/dist/sankhyablocks/index-c683b2b0.js +0 -2394
  118. package/dist/sankhyablocks/index-c71285cb.js +0 -17
  119. package/dist/sankhyablocks/shadow-css-b18e99d7.js +0 -387
  120. package/dist/sankhyablocks/snk-application.entry.js +0 -8166
  121. package/dist/sankhyablocks/snk-crud.entry.js +0 -66
  122. package/dist/sankhyablocks/snk-data-unit.entry.js +0 -268
  123. package/dist/sankhyablocks/snk-filter-bar.entry.js +0 -462
  124. package/dist/sankhyablocks/snk-filter-binary-select.entry.js +0 -43
  125. package/dist/sankhyablocks/snk-filter-detail.entry.js +0 -80
  126. package/dist/sankhyablocks/snk-filter-item.entry.js +0 -173
  127. package/dist/sankhyablocks/snk-filter-list.entry.js +0 -87
  128. package/dist/sankhyablocks/snk-filter-modal.entry.js +0 -33
  129. package/dist/sankhyablocks/snk-filter-multi-select.entry.js +0 -19
  130. package/dist/sankhyablocks/snk-filter-number.entry.js +0 -20
  131. package/dist/sankhyablocks/snk-filter-period.entry.js +0 -33
  132. package/dist/sankhyablocks/snk-filter-personalized.entry.js +0 -85
  133. package/dist/sankhyablocks/snk-filter-search.entry.js +0 -40
  134. package/dist/sankhyablocks/snk-filter-text.entry.js +0 -18
  135. package/dist/sankhyablocks/snk-grid.entry.js +0 -75
  136. package/dist/sankhyablocks/snk-pesquisa.entry.js +0 -311
  137. package/dist/sankhyablocks/snk-taskbar.entry.js +0 -156
  138. package/dist/sankhyablocks/taskbar-elements-35d64ff9.js +0 -90
  139. package/dist/sankhyablocks/taskbar-processor-aa6772c9.js +0 -45
  140. package/dist/sankhyablocks/teste-pesquisa.entry.js +0 -33
@@ -0,0 +1,902 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const index = require('./index-6fcf07f3.js');
6
+ const core = require('@sankhyalabs/core');
7
+ const filterItemType_enum = require('./filter-item-type.enum-3daf58d3.js');
8
+ const ezModalContainer = require('@sankhyalabs/ezui/dist/collection/components/ez-modal-container');
9
+ const DataType = require('@sankhyalabs/core/dist/dataunit/metadata/DataType');
10
+ const taskbarElements = require('./taskbar-elements-aedfeae6.js');
11
+
12
+ const buildFilter = (item) => {
13
+ switch (item.type) {
14
+ case filterItemType_enum.FilterItemType.DEFAULT_FILTER:
15
+ return buildDefault(item);
16
+ case filterItemType_enum.FilterItemType.BINARY_SELECT:
17
+ return buildBinary(item);
18
+ case filterItemType_enum.FilterItemType.MULTI_SELECT:
19
+ return buildMultSelect(item);
20
+ case filterItemType_enum.FilterItemType.PERIOD:
21
+ return buildPeriod(item);
22
+ case filterItemType_enum.FilterItemType.SEARCH:
23
+ return buildSearch(item);
24
+ case filterItemType_enum.FilterItemType.TEXT:
25
+ return buildText(item);
26
+ case filterItemType_enum.FilterItemType.NUMBER:
27
+ return buildNumber(item);
28
+ case filterItemType_enum.FilterItemType.PERSONALIZED:
29
+ return buildPersonalized(item);
30
+ default:
31
+ return undefined;
32
+ }
33
+ };
34
+ function buildDefault(item) {
35
+ return { name: item.id, expression: item.props.expression, params: [] };
36
+ }
37
+ function buildBinary(item) {
38
+ const { id, value, props } = item;
39
+ const options = props.options;
40
+ const selectedOption = options.find(opt => opt.name === value);
41
+ return { name: id, expression: selectedOption.expression, params: [] };
42
+ }
43
+ function buildMultSelect(item) {
44
+ const { id, value, props } = item;
45
+ return { name: id, expression: props.expression, params: [{ name: id, dataType: core.DataType.TEXT, value }] };
46
+ }
47
+ function buildPeriod(item) {
48
+ const { id, value, props } = item;
49
+ let { end, start } = value;
50
+ if (typeof end === "string") {
51
+ end = new Date(end);
52
+ }
53
+ if (typeof start === "string") {
54
+ start = new Date(start);
55
+ }
56
+ const params = [];
57
+ let expression;
58
+ if (end && start) {
59
+ expression = props.expression.fullfill;
60
+ params.push({ name: `${id}.START`, dataType: core.DataType.DATE, value: DataType.toString(core.DataType.DATE, start) }, { name: `${id}.END`, dataType: core.DataType.DATE, value: DataType.toString(core.DataType.DATE, end) });
61
+ }
62
+ else {
63
+ if (start) {
64
+ expression = props.expression.onlystart;
65
+ params.push({ name: id, dataType: core.DataType.DATE, value: DataType.toString(core.DataType.DATE, start) });
66
+ }
67
+ else {
68
+ expression = props.expression.onlyend;
69
+ params.push({ name: id, dataType: core.DataType.DATE, value: DataType.toString(core.DataType.DATE, end) });
70
+ }
71
+ }
72
+ return { name: id, expression, params };
73
+ }
74
+ function buildSearch(item) {
75
+ const { id, value, props } = item;
76
+ const expression = props.expression;
77
+ return { name: id, expression, params: [{ name: id, dataType: core.DataType.TEXT, value: DataType.toString(core.DataType.TEXT, value.value) }] };
78
+ }
79
+ function buildText(item) {
80
+ const { id, value, props } = item;
81
+ const expression = props.expression;
82
+ return { name: id, expression, params: [{ name: id, dataType: core.DataType.TEXT, value: DataType.toString(core.DataType.TEXT, value) }] };
83
+ }
84
+ function buildNumber(item) {
85
+ const { id, value, props } = item;
86
+ const expression = props.expression;
87
+ return { name: id, expression, params: [{ name: id, dataType: core.DataType.NUMBER, value: DataType.toString(core.DataType.NUMBER, value) }] };
88
+ }
89
+ function buildPersonalized(item) {
90
+ var _a;
91
+ const { id, value, props } = item;
92
+ const expression = props.expression;
93
+ return {
94
+ name: id, expression, params: (((_a = props.personalizedFilter) === null || _a === void 0 ? void 0 : _a.parameters) || []).map((param, index) => {
95
+ const valuesArray = Array.from(value);
96
+ const dataType = param.dataType;
97
+ let paramValue = (index >= 0 && index < valuesArray.length ? valuesArray[index] : null);
98
+ if (paramValue != undefined && typeof paramValue === "object" && "value" in paramValue) {
99
+ paramValue = paramValue["value"];
100
+ }
101
+ if (paramValue == undefined && dataType === core.DataType.BOOLEAN) {
102
+ paramValue = false;
103
+ }
104
+ return { name: param.name, dataType, value: typeof paramValue === "string" ? paramValue : DataType.toString(dataType, paramValue) };
105
+ })
106
+ };
107
+ }
108
+
109
+ const snkFilterBarCss = ".sc-snk-filter-bar-h{display:grid;grid-template-columns:minmax(100px, 100%) 1fr 1fr}.snk-filter__popover-container.sc-snk-filter-bar{display:flex;cursor:auto}.snk-filter__popover.sc-snk-filter-bar{display:flex;flex-direction:column;position:absolute;width:fit-content;height:fit-content;min-width:265px;z-index:var(--more-visible, 1);background-color:var(--background--xlight, #fff);border-radius:var(--border--radius-medium, 12px);box-shadow:var(--shadow, 0px 0px 16px 0px #000)}.snk-filter-item__editor-header.sc-snk-filter-bar{flex-grow:1;font-weight:var(--text-weight--medium, 400);color:var(--color--title-primary, #2B3A54)}.snk-filter__popover-rule.sc-snk-filter-bar{border-style:solid;border-color:var(--color--disable-secondary, #F2F5F8);border-radius:1px;border-width:1px;width:100%}.editor__ez-check.sc-snk-filter-bar{--ez-check__label--padding-left:0}.snk-filter-item__editor-header-button.sc-snk-filter-bar{cursor:pointer;flex-grow:0}.snk-filter-bar__divider.sc-snk-filter-bar{margin-bottom:var(--space--small)}.snk-filter-bar__filter-list-items-container.sc-snk-filter-bar{overflow-y:auto;max-height:360px;margin-top:var(--space--small, 6px)}.snk-filter-bar__filter-list-item.sc-snk-filter-bar{cursor:pointer;border-radius:var(--border--radius-small, 6px)}.snk-filter-bar__filter-list-item__label.sc-snk-filter-bar{color:var(--title--primary)}.snk-filter-bar__filter-list-item__label--secondary.sc-snk-filter-bar{color:var(--text--primary)}.snk-filter-bar__filter-list-item__icon.sc-snk-filter-bar{--ez-icon--color:var(--title--primary)}.snk-filter-bar__filter-list-item__icon--secondary.sc-snk-filter-bar{--ez-icon--color:var(--text--secondary)}.snk-filter-bar__filter-list-item.preselected.sc-snk-filter-bar{background-color:var(--background--medium)}.snk-filter-bar__filter-list-item.sc-snk-filter-bar:hover{background-color:var(--background--medium)}.snk-filter-bar__filter-list-items-container--empty.sc-snk-filter-bar{width:100%;height:100px;display:flex;justify-content:center;align-self:center;align-items:center}.snk-filter-bar__filter-list-items-button--active.sc-snk-filter-bar{position:relative}.snk-filter-bar__filter-list-items-button--active.sc-snk-filter-bar::after{display:flex;position:absolute;content:\"\";width:8px;height:8px;top:7px;left:17px;background-color:var(--icon--alert--color, #008561);border-radius:50%}.snk-filter-bar__filter-modal-item.sc-snk-filter-bar{display:flex;flex-direction:row;border-radius:var(--border--radius-medium, 12px);background-color:var(--background--medium, #f0f3f7)}.snk-filter-bar__filter-modal-item__check.sc-snk-filter-bar{width:auto}.snk-filter-bar__filter-modal-item__label.sc-snk-filter-bar{font-weight:var(--text-weight--medium);width:100%}.snk-filter-bar__filter-modal-content.sc-snk-filter-bar{display:grid;grid-template-rows:auto auto 1fr auto;width:100%;height:100%}";
110
+
111
+ const PERSONALIZED_FILTER = "PERSONALIZED_FILTER";
112
+ const DEFAULT_FILTER = "DEFAULT_FILTER";
113
+ const CLEAR_ALL_FILTERS = "CLEAR_ALL_FILTERS";
114
+ const SnkFilterBar = class {
115
+ constructor(hostRef) {
116
+ index.registerInstance(this, hostRef);
117
+ this._updateSequence = [];
118
+ this._loadingPending = false;
119
+ this._configUpdated = false;
120
+ this._pendingFilters = [];
121
+ this._calculateSortIndex = (item) => {
122
+ let index = item.hardFixed ? 1000000 : 0;
123
+ //campos Hard Fixed não variam a ordem
124
+ if (!item.hardFixed) {
125
+ index += item.fixed ? 100000 : 0;
126
+ index += item.value == undefined ? 0 : 10000;
127
+ index += this._updateSequence.lastIndexOf(item.id) + 1;
128
+ }
129
+ return index;
130
+ };
131
+ this._filtersComparator = (a, b) => {
132
+ return this._calculateSortIndex(b) - this._calculateSortIndex(a);
133
+ };
134
+ }
135
+ observeFilterConfig(newValue, oldValue) {
136
+ if (oldValue != undefined && newValue == undefined) {
137
+ this._loadingPending = true;
138
+ this._configUpdated = true;
139
+ }
140
+ else {
141
+ const oldItems = new Map(oldValue ? oldValue.map(item => [item.id, item]) : undefined);
142
+ newValue.forEach(newItem => {
143
+ const oldItem = oldItems.get(newItem.id);
144
+ if (oldItem != undefined) {
145
+ this._configUpdated = this._configUpdated || core.ObjectUtils.objectToString(oldItem) != core.ObjectUtils.objectToString(newItem);
146
+ this._loadingPending = this._loadingPending || core.ObjectUtils.objectToString(oldItem.value) !== core.ObjectUtils.objectToString(newItem.value);
147
+ }
148
+ else {
149
+ this._configUpdated = true;
150
+ this._loadingPending = this._loadingPending || newItem.value != undefined;
151
+ }
152
+ });
153
+ }
154
+ this.processAfterUpdateConfig();
155
+ }
156
+ processPendingFilter() {
157
+ if (this._pendingFilters.length > 0 && this._currentPendingFilter == undefined) {
158
+ this._currentPendingFilter = this._element.querySelector("#filter-" + this._pendingFilters.pop());
159
+ if (this._currentPendingFilter) {
160
+ this._currentPendingFilter.showUp(true).then(() => {
161
+ this._currentPendingFilter = undefined;
162
+ this.processPendingFilter();
163
+ });
164
+ }
165
+ }
166
+ if (this._currentPendingFilter == undefined) {
167
+ this.processAfterUpdateConfig();
168
+ }
169
+ }
170
+ processAfterUpdateConfig() {
171
+ if (this._pendingFilters.length > 0) {
172
+ return;
173
+ }
174
+ if (this._loadingPending) {
175
+ this._loadingPending = false;
176
+ this.dataUnit.loadData();
177
+ }
178
+ if (this._configUpdated) {
179
+ this._configUpdated = false;
180
+ this._application.saveFilterBarConfig(this.filterConfig, this.configName);
181
+ }
182
+ }
183
+ /**
184
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
185
+ * através de um pequeno modulo na estrutura da aplicação:
186
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
187
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-filter-bar.msg.ts"
188
+ */
189
+ getMessage(key, params) {
190
+ return this._application.messagesBuilder.getMessage(key, params);
191
+ }
192
+ getFilter(_dataUnit) {
193
+ var _a;
194
+ const filters = [];
195
+ (_a = this.filterConfig) === null || _a === void 0 ? void 0 : _a.filter(item => this.isActiveFilter(item)).forEach(item => {
196
+ const filter = buildFilter(item);
197
+ if (filter) {
198
+ filters.push(filter);
199
+ }
200
+ });
201
+ return filters;
202
+ }
203
+ isActiveFilter(item) {
204
+ return (item.visible && item.value != undefined) || item.type === filterItemType_enum.FilterItemType.DEFAULT_FILTER;
205
+ }
206
+ registryFilterProvider() {
207
+ this.dataUnit.addFilterProvider(this);
208
+ if (this.filterConfig) {
209
+ this.dataUnit.loadData();
210
+ }
211
+ }
212
+ getFilterItems() {
213
+ const pinnedItems = [];
214
+ const unpinnedItems = [];
215
+ this.filterConfig
216
+ .filter(item => item.visible)
217
+ .forEach((item, index$1) => {
218
+ const filterItem = (index.h("snk-filter-item", { id: `filter-${item.id}`, config: item, class: index$1 > 0 ? "ez-padding-left--medium" : "", getMessage: (key, props) => this.getMessage(key, props), key: item.id }));
219
+ if (item.fixed || item.hardFixed) {
220
+ pinnedItems.push(filterItem);
221
+ }
222
+ else {
223
+ unpinnedItems.push(filterItem);
224
+ }
225
+ return filterItem;
226
+ });
227
+ const elements = [];
228
+ elements.push(...pinnedItems);
229
+ if (pinnedItems.length > 0 && unpinnedItems.length > 0) {
230
+ elements.push(index.h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-left--medium snk-filter-bar__divider" }));
231
+ }
232
+ elements.push(...unpinnedItems);
233
+ return elements;
234
+ }
235
+ calculateUpdateSequence(item) {
236
+ if (item) {
237
+ this._updateSequence = this._updateSequence.filter(itemId => item.id !== itemId);
238
+ this._updateSequence.push(item.id);
239
+ }
240
+ }
241
+ normalizeItem(item) {
242
+ const normalized = Object.assign({}, item);
243
+ const optionals = ["props", "value", "hardFixed", "fixed"];
244
+ optionals.forEach(prop => {
245
+ if (normalized[prop] == undefined) {
246
+ delete normalized[prop];
247
+ }
248
+ });
249
+ if (item.value === "") {
250
+ delete item.value;
251
+ }
252
+ return normalized;
253
+ }
254
+ updateFilter(newItem) {
255
+ this.filterConfig = this.filterConfig.map(item => {
256
+ newItem = this.normalizeItem(newItem);
257
+ if (item.id === newItem.id) {
258
+ if (core.ObjectUtils.objectToString(item) != core.ObjectUtils.objectToString(newItem)) {
259
+ this.calculateUpdateSequence(newItem);
260
+ }
261
+ return newItem;
262
+ }
263
+ return item;
264
+ }).sort((a, b) => this._filtersComparator(a, b));
265
+ }
266
+ getAddListItems() {
267
+ const hiddenItems = this.filterConfig
268
+ .filter(item => !item.visible && this.isListable(item));
269
+ const footerItems = [{ name: PERSONALIZED_FILTER, label: this.getMessage("snkFilterBar.customFilter"), iconName: "tune", kind: "FOOTER" }];
270
+ if (this.allowDefault) {
271
+ footerItems.push({ name: DEFAULT_FILTER, label: this.getMessage("snkFilterBar.defaultFilter"), iconName: "configuration", kind: "FOOTER" });
272
+ }
273
+ return hiddenItems.map(filter => { return { name: filter.id, label: filter.label, kind: "FILTER", iconName: null }; })
274
+ .concat(footerItems);
275
+ }
276
+ getActiveClass() {
277
+ const filterApplied = this.filterConfig.filter(item => item.value != undefined).length > 0;
278
+ return filterApplied ? "sc-snk-filter-bar snk-filter-bar__filter-list-items-button--active" : "";
279
+ }
280
+ isListable(item, allowPersonalized = false) {
281
+ return item.type !== filterItemType_enum.FilterItemType.DEFAULT_FILTER && (allowPersonalized || item.type !== filterItemType_enum.FilterItemType.PERSONALIZED);
282
+ }
283
+ getAppliedListItems() {
284
+ const appliedItems = this.filterConfig
285
+ .filter(item => this.isActiveFilter(item) && this.isListable(item, true));
286
+ return appliedItems.map(filter => {
287
+ return { name: filter.id, label: filter.label, kind: "FILTER", iconName: null };
288
+ }).concat([
289
+ { name: CLEAR_ALL_FILTERS, label: this.getMessage("snkFilterBar.clearAllFilters"), iconName: "cleaning", kind: "FOOTER" }
290
+ ]);
291
+ }
292
+ addPersonalizedFilters(personalizedItems) {
293
+ const activeFilters = {};
294
+ personalizedItems.forEach(item => {
295
+ if (item.active) {
296
+ activeFilters[item.id] = true;
297
+ }
298
+ });
299
+ this.filterConfig = this.filterConfig.map(item => {
300
+ var _a, _b;
301
+ if (item.type === filterItemType_enum.FilterItemType.PERSONALIZED) {
302
+ const visible = activeFilters[item.id];
303
+ if (!item.visible && visible) {
304
+ this.calculateUpdateSequence(item);
305
+ if (((_b = (_a = item.props) === null || _a === void 0 ? void 0 : _a.personalizedFilter) === null || _b === void 0 ? void 0 : _b.parameters) != undefined) {
306
+ this._pendingFilters.push(item.id);
307
+ }
308
+ }
309
+ return this.normalizeItem(visible ? Object.assign(Object.assign({}, item), { visible }) : Object.assign(Object.assign({}, item), { visible, value: undefined, fixed: undefined }));
310
+ }
311
+ return item;
312
+ }).sort((a, b) => this._filtersComparator(a, b));
313
+ }
314
+ openDefaultFilterModal() {
315
+ const filterModal = document.createElement("snk-filter-modal");
316
+ const defaultFilter = this.filterConfig.filter(item => item.type === filterItemType_enum.FilterItemType.DEFAULT_FILTER);
317
+ filterModal.getMessage = (key, props) => this.getMessage(key, props);
318
+ filterModal.modalTitle = this.getMessage("snkFilterBar.modalDefaultFilterTitle");
319
+ filterModal.infoText = this.getMessage(defaultFilter.length == 0 ? "snkFilterBar.modalInfoTextCreateDefault" : "snkFilterBar.modalInfoTextEditDefault");
320
+ filterModal.items = defaultFilter.map(item => {
321
+ return { id: item.id, active: true, enabled: false, label: item.label };
322
+ });
323
+ filterModal.processModalAction = (_action) => {
324
+ this._application.closeModal();
325
+ };
326
+ this._application.showModal(filterModal);
327
+ }
328
+ openPersonalizedModal() {
329
+ const filterModal = document.createElement("snk-filter-modal");
330
+ const personalizedFilter = this.filterConfig
331
+ .filter(item => item.type === filterItemType_enum.FilterItemType.PERSONALIZED)
332
+ .sort((itemA, itemB) => core.StringUtils.compare(itemA.label, itemB.label));
333
+ filterModal.getMessage = (key, props) => this.getMessage(key, props);
334
+ filterModal.modalTitle = this.getMessage("snkFilterBar.modalPersonalizedFilterTitle");
335
+ filterModal.modalSubTitle = this.getMessage("snkFilterBar.modalPersonalizedFilterSubTitle");
336
+ filterModal.okButtonLabel = this.getMessage("snkFilterBar.modalOkButtonLabel");
337
+ filterModal.cancelButtonLabel = this.getMessage("snkFilterBar.modalCancelButtonLabel");
338
+ filterModal.infoText = this.getMessage("snkFilterBar.modalInfoTextCreateEditPersonalized");
339
+ filterModal.useSearch = true;
340
+ filterModal.items = personalizedFilter.map(item => {
341
+ return { id: item.id, active: item.visible, enabled: true, label: item.label };
342
+ });
343
+ filterModal.processModalAction = (action) => {
344
+ if (action === ezModalContainer.ModalAction.CANCEL) {
345
+ // O Botão de cancelar, tem efeito específico:
346
+ // - Desmarcar todos os filtros personalizados.
347
+ filterModal.items = filterModal.items.map(item => {
348
+ return Object.assign(Object.assign({}, item), { active: false });
349
+ });
350
+ }
351
+ else {
352
+ if (action === ezModalContainer.ModalAction.OK) {
353
+ this.addPersonalizedFilters(filterModal.items);
354
+ }
355
+ this._application.closeModal();
356
+ }
357
+ };
358
+ this._application.showModal(filterModal);
359
+ }
360
+ clearFilters() {
361
+ let changed = false;
362
+ this.filterConfig = this.filterConfig.map(item => {
363
+ if (item.value != undefined) {
364
+ changed = true;
365
+ }
366
+ return Object.assign(Object.assign({}, item), { value: undefined });
367
+ }).sort((a, b) => this._filtersComparator(a, b));
368
+ return changed;
369
+ }
370
+ loadPermitions() {
371
+ this._application.isUserSup().then(value => this.allowDefault = value);
372
+ }
373
+ loadConfigFromApplication() {
374
+ this._application.getFilterBarConfig(this.configName)
375
+ .then((filters) => {
376
+ this.filterConfig = filters.map(item => this.normalizeItem(item));
377
+ if (this.dataUnit) {
378
+ this.dataUnit.loadData();
379
+ }
380
+ })
381
+ .catch(reason => {
382
+ throw new core.ErrorException(this.getMessage("snkFilterBar.failToLoadConfig"), reason);
383
+ });
384
+ }
385
+ attachDataUnit() {
386
+ if (this.dataUnit == undefined) {
387
+ let parent = this._element.parentElement;
388
+ while (parent) {
389
+ if (parent.tagName.toUpperCase() === "SNK-DATA-UNIT") {
390
+ const snkDataUnit = parent;
391
+ this.dataUnit = snkDataUnit.dataUnit;
392
+ if (this.dataUnit) {
393
+ this.registryFilterProvider();
394
+ }
395
+ else {
396
+ snkDataUnit.addEventListener("dataUnitReady", (evt) => {
397
+ this.dataUnit = evt.detail;
398
+ this.registryFilterProvider();
399
+ });
400
+ }
401
+ break;
402
+ }
403
+ }
404
+ parent = parent.parentElement;
405
+ }
406
+ else {
407
+ this.registryFilterProvider();
408
+ }
409
+ }
410
+ filterChangeListener(evt) {
411
+ this.updateFilter(evt.detail);
412
+ }
413
+ addFilterHandler(itemName) {
414
+ const filterItem = this.filterConfig.find(currentFilter => currentFilter.id === itemName);
415
+ if (itemName === PERSONALIZED_FILTER) {
416
+ this.openPersonalizedModal();
417
+ }
418
+ else if (itemName === DEFAULT_FILTER) {
419
+ this.openDefaultFilterModal();
420
+ }
421
+ else if (filterItem) {
422
+ this.updateFilter(Object.assign(Object.assign({}, filterItem), { visible: true }));
423
+ window.requestAnimationFrame(() => {
424
+ const filterItemElement = this._element.querySelector("#filter-" + itemName);
425
+ if (filterItemElement) {
426
+ filterItemElement.showUp();
427
+ }
428
+ });
429
+ }
430
+ }
431
+ appliedFilterHandler(itemName) {
432
+ if (itemName === CLEAR_ALL_FILTERS) {
433
+ if (this.clearFilters()) {
434
+ this._application.info(this.getMessage("snkFilterBar.successfullyCleaned"), { iconName: "check" });
435
+ }
436
+ }
437
+ else {
438
+ const filterItemElement = this._element.querySelector("#filter-" + itemName);
439
+ if (filterItemElement) {
440
+ filterItemElement.showUp(true);
441
+ }
442
+ }
443
+ }
444
+ componentWillLoad() {
445
+ this._application = core.ApplicationContext.getContextValue("__SNK__APPLICATION__");
446
+ if (this._application) {
447
+ this.loadPermitions();
448
+ this.loadConfigFromApplication();
449
+ }
450
+ this.attachDataUnit();
451
+ }
452
+ componentDidRender() {
453
+ this.processPendingFilter();
454
+ }
455
+ render() {
456
+ if (!this.dataUnit || !this.filterConfig || this.filterConfig.length === 0) {
457
+ return undefined;
458
+ }
459
+ return (index.h(index.Host, null, index.h("ez-scroller", { direction: "horizontal" }, this.getFilterItems()), index.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) }), index.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) }, index.h("ez-icon", { slot: "leftIcon", class: "ez-padding-right--small", iconName: "plus" }))));
460
+ }
461
+ get _element() { return index.getElement(this); }
462
+ static get watchers() { return {
463
+ "filterConfig": ["observeFilterConfig"]
464
+ }; }
465
+ };
466
+ SnkFilterBar.style = snkFilterBarCss;
467
+
468
+ const SnkFilterItem = class {
469
+ constructor(hostRef) {
470
+ index.registerInstance(this, hostRef);
471
+ this.filterChange = index.createEvent(this, "filterChange", 7);
472
+ this.innerClickCheck = (floatingContainer, node) => {
473
+ if (this._popover.keepOpened) {
474
+ return true;
475
+ }
476
+ if (node && floatingContainer) {
477
+ if (!node.offsetParent) {
478
+ return true;
479
+ }
480
+ let current = node;
481
+ do {
482
+ if (current === floatingContainer) {
483
+ return true;
484
+ }
485
+ } while ((current = current.offsetParent) != null);
486
+ }
487
+ this.detailIsVisible = false;
488
+ this.executeCloseCallback();
489
+ return false;
490
+ };
491
+ }
492
+ async showUp(open = false) {
493
+ return new Promise(resolve => {
494
+ this._filterItemElement.scrollIntoView({ behavior: "auto", block: "nearest", inline: "nearest" });
495
+ if (open) {
496
+ window.requestAnimationFrame(() => {
497
+ this._closeCallback = resolve;
498
+ this.showDetail();
499
+ });
500
+ }
501
+ });
502
+ }
503
+ showDetail() {
504
+ this._floatingID = core.FloatingManager.float(this._popover, this._popoverContainer, { autoClose: true, innerClickTest: this.innerClickCheck, left: this.getScrollOffset() });
505
+ this.detailIsVisible = true;
506
+ }
507
+ getScrollOffset() {
508
+ return `${this._filterItemElement.getBoundingClientRect().left + 12}px`;
509
+ }
510
+ hideDetail() {
511
+ if (this._floatingID != undefined) {
512
+ core.FloatingManager.close(this._floatingID);
513
+ }
514
+ this._floatingID = undefined;
515
+ this.detailIsVisible = false;
516
+ this.executeCloseCallback();
517
+ }
518
+ executeCloseCallback() {
519
+ if (this._closeCallback) {
520
+ this._closeCallback();
521
+ this._closeCallback = undefined;
522
+ }
523
+ }
524
+ //---------------------------------------------
525
+ // Event handlers
526
+ //---------------------------------------------
527
+ clickListener(evt) {
528
+ if ([this._chipElement, this._leftIconElement, this._rightIconElement].includes(evt.target)) {
529
+ if (evt.target === this._rightIconElement && this.config.value != undefined) {
530
+ this.filterChange.emit(Object.assign(Object.assign({}, this.config), { value: undefined }));
531
+ }
532
+ else {
533
+ if (this.detailIsVisible) {
534
+ this.hideDetail();
535
+ }
536
+ else {
537
+ this.showDetail();
538
+ }
539
+ }
540
+ evt.preventDefault();
541
+ evt.stopImmediatePropagation();
542
+ evt.stopPropagation();
543
+ }
544
+ }
545
+ mouseDownListener(evt) {
546
+ if (this.detailIsVisible && [this._chipElement, this._leftIconElement, this._rightIconElement].includes(evt.target)) {
547
+ evt.preventDefault();
548
+ evt.stopImmediatePropagation();
549
+ evt.stopPropagation();
550
+ }
551
+ }
552
+ getLabel() {
553
+ const { type, value, label, props } = this.config;
554
+ if (value) {
555
+ if (type === filterItemType_enum.FilterItemType.BINARY_SELECT) {
556
+ const [optOne, optTwo] = props.options;
557
+ if (optOne.name === value) {
558
+ return optOne.label;
559
+ }
560
+ if (optTwo.name === value) {
561
+ return optTwo.label;
562
+ }
563
+ }
564
+ if (type === filterItemType_enum.FilterItemType.MULTI_SELECT) {
565
+ const opt = props.options.find(opt => opt.value === value);
566
+ return `${label}: ${opt.label}`;
567
+ }
568
+ if (type === filterItemType_enum.FilterItemType.PERIOD) {
569
+ let { end, start } = value;
570
+ if (typeof end === "string") {
571
+ end = new Date(end);
572
+ end.setMinutes(end.getMinutes() + end.getTimezoneOffset());
573
+ }
574
+ if (typeof start === "string") {
575
+ start = new Date(start);
576
+ start.setMinutes(start.getMinutes() + start.getTimezoneOffset());
577
+ }
578
+ const dateFormater = new Intl.DateTimeFormat("pt-BR");
579
+ if (end && start) {
580
+ return `${label}: ${dateFormater.format(start)} a ${dateFormater.format(end)}`;
581
+ }
582
+ else {
583
+ if (start) {
584
+ return `${label}: A partir de ${dateFormater.format(start)}`;
585
+ }
586
+ else if (end) {
587
+ return `${label}: Até ${dateFormater.format(end)}`;
588
+ }
589
+ else {
590
+ return label;
591
+ }
592
+ }
593
+ }
594
+ if (type === filterItemType_enum.FilterItemType.SEARCH) {
595
+ return `${label}: ${value.value} - ${value.label}`;
596
+ }
597
+ if (type === filterItemType_enum.FilterItemType.PERSONALIZED) {
598
+ return label;
599
+ }
600
+ return `${label}: ${value}`;
601
+ }
602
+ return label;
603
+ }
604
+ componentDidRender() {
605
+ if (this._floatingID == undefined) {
606
+ if (this._popover) {
607
+ this._popover.remove();
608
+ }
609
+ }
610
+ }
611
+ filterChangeListener() {
612
+ this.hideDetail();
613
+ }
614
+ getRightIconName() {
615
+ if (this.config.value != undefined) {
616
+ return "close";
617
+ }
618
+ return this.detailIsVisible ? "chevron-up" : "chevron-down";
619
+ }
620
+ getLeftIconName() {
621
+ switch (this.config.type) {
622
+ case filterItemType_enum.FilterItemType.PERIOD:
623
+ return "calendar";
624
+ case filterItemType_enum.FilterItemType.PERSONALIZED:
625
+ return "tune";
626
+ }
627
+ return undefined;
628
+ }
629
+ render() {
630
+ const leftIcon = this.getLeftIconName();
631
+ return (index.h(index.Host, null, index.h("ez-chip", { ref: ref => this._chipElement = ref, label: this.getLabel(), value: this.config.value != undefined }, leftIcon ? index.h("ez-icon", { ref: ref => this._leftIconElement = ref, iconName: leftIcon, class: "ez-padding-right--small", slot: "leftIcon" }) : undefined, index.h("ez-icon", { ref: ref => this._rightIconElement = ref, iconName: this.getRightIconName(), class: "ez-padding-left--small", slot: "rightIcon" })), index.h("section", { class: "ez-margin-top--small sc-snk-filter-bar snk-filter__popover-container", ref: elem => this._popoverContainer = elem }, index.h("snk-filter-detail", { config: this.config, getMessage: this.getMessage, class: "sc-snk-filter-bar snk-filter__popover ez-padding--small", ref: elem => this._popover = elem, key: this.config.id }))));
632
+ }
633
+ get _filterItemElement() { return index.getElement(this); }
634
+ };
635
+
636
+ const SHOW_MORE_ITEM_NAME = "__SHOWMORE__";
637
+ const MAX_FILTERS = 5;
638
+ const SnkFilterList = class {
639
+ constructor(hostRef) {
640
+ index.registerInstance(this, hostRef);
641
+ this.snkItemSelected = index.createEvent(this, "snkItemSelected", 7);
642
+ this.innerClickCheck = (floatingContainer, node) => {
643
+ if (node && floatingContainer) {
644
+ if (!node.offsetParent) {
645
+ return true;
646
+ }
647
+ let current = node;
648
+ do {
649
+ if (current === floatingContainer || current === this._element) {
650
+ return true;
651
+ }
652
+ } while ((current = current.offsetParent) != null);
653
+ }
654
+ this._detailIsVisible = false;
655
+ return false;
656
+ };
657
+ }
658
+ showList() {
659
+ this._floatingID = core.FloatingManager.float(this._popover, this._popoverContainer, { autoClose: true, innerClickTest: this.innerClickCheck });
660
+ this._detailIsVisible = true;
661
+ this._showAll = false;
662
+ this._filterArgument = "";
663
+ }
664
+ hideList() {
665
+ if (this._floatingID != undefined) {
666
+ core.FloatingManager.close(this._floatingID);
667
+ }
668
+ this._floatingID = undefined;
669
+ this._detailIsVisible = false;
670
+ }
671
+ buttonClick() {
672
+ if (this._detailIsVisible) {
673
+ this.hideList();
674
+ }
675
+ else {
676
+ this.showList();
677
+ }
678
+ }
679
+ componentDidRender() {
680
+ if (this._floatingID == undefined) {
681
+ if (this._popover) {
682
+ this._popover.remove();
683
+ }
684
+ }
685
+ }
686
+ buildItemElement(item) {
687
+ return (index.h("div", { class: "ez-col ez-col--sd-12 ez-align--middle ez-padding--small sc-snk-filter-bar snk-filter-bar__filter-list-item", onClick: () => this.itemSelected(item.name) }, item.iconName ? index.h("ez-icon", { iconName: item.iconName, size: "small", class: `ez-padding-right--extra-small sc-snk-filter-bar snk-filter-bar__filter-list-item__icon ${item.iconClass || ""}` }) : undefined, index.h("div", { class: `ez-text ez-text--medium ez-text--primary ez-padding--extra-small sc-snk-filter-bar snk-filter-bar__filter-list-item__label ${item.labelClass || ""}` }, item.label)));
688
+ }
689
+ itemSelected(itemName) {
690
+ if (itemName === SHOW_MORE_ITEM_NAME) {
691
+ this._showAll = true;
692
+ }
693
+ else {
694
+ this.hideList();
695
+ this.snkItemSelected.emit(itemName);
696
+ }
697
+ }
698
+ getFilterItems() {
699
+ const items = this.items ? core.ArrayUtils.applyStringFilter(this._filterArgument, this.items.filter(item => item.kind === "FILTER")) : [];
700
+ if (items.length === 0) {
701
+ return index.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);
702
+ }
703
+ const hideItems = !this._filterArgument && !this._showAll && (items.length > MAX_FILTERS + 1);
704
+ if (hideItems) {
705
+ items.splice(MAX_FILTERS);
706
+ items.push({ kind: "INTERNAL", label: "Mostrar mais", iconName: "dots-horizontal", name: SHOW_MORE_ITEM_NAME, iconClass: "snk-filter-bar__filter-list-item__icon--secondary", labelClass: "snk-filter-bar__filter-list-item__label--secondary" });
707
+ }
708
+ return index.h("div", { class: "sc-snk-filter-bar snk-filter-bar__filter-list-items-container" }, items.map(item => this.buildItemElement(item)));
709
+ }
710
+ getFooterItems() {
711
+ return this.items.filter(item => item.kind === "FOOTER");
712
+ }
713
+ render() {
714
+ return (index.h(index.Host, { class: "ez-flex ez-flex--column" }, index.h("ez-button", { class: this.buttonClass, label: this.label, onClick: () => this.buttonClick(), mode: this.iconName ? "icon" : undefined, iconName: this.iconName, size: "small" }, index.h("slot", { name: "leftIcon" })), index.h("section", { class: "ez-margin-top--small sc-snk-filter-bar snk-filter__popover-container", ref: elem => this._popoverContainer = elem }, index.h("div", { class: "sc-snk-filter-bar snk-filter__popover ez-padding--small", ref: elem => this._popover = elem }, index.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(), index.h("hr", { class: "sc-snk-filter-bar snk-filter__popover-rule" }), this.items ? this.getFooterItems().map(item => this.buildItemElement(item)) : undefined))));
715
+ }
716
+ get _element() { return index.getElement(this); }
717
+ };
718
+
719
+ const SnkFilterModal = class {
720
+ constructor(hostRef) {
721
+ index.registerInstance(this, hostRef);
722
+ }
723
+ updateValue(id, value) {
724
+ this.items = this.items.map(item => {
725
+ if (item.id === id) {
726
+ return Object.assign(Object.assign({}, item), { active: value });
727
+ }
728
+ return item;
729
+ });
730
+ }
731
+ getActiveFiltersMsg() {
732
+ const activeFilters = this.items.filter(item => item.active).length;
733
+ if (activeFilters === 0) {
734
+ return this.getMessage("snkFilterBar.noActiveFilters");
735
+ }
736
+ return this.getMessage(activeFilters > 1 ? "snkFilterBar.activeFilters" : "snkFilterBar.activeFilter", { ACTIVE_FILTERS: activeFilters });
737
+ }
738
+ getFilteredItems() {
739
+ return this.items ? core.ArrayUtils.applyStringFilter(this._filterArgument, this.items) : [];
740
+ }
741
+ render() {
742
+ const allowCancel = this.items.filter(item => item.active).length > 0;
743
+ return (index.h("ez-modal-container", { modalTitle: this.modalTitle, modalSubTitle: this.modalSubTitle, cancelButtonLabel: this.cancelButtonLabel, okButtonLabel: this.okButtonLabel, onEzModalAction: evt => this.processModalAction(evt.detail), cancelButtonStatus: allowCancel ? ezModalContainer.ModalButtonStatus.ENABLED : ezModalContainer.ModalButtonStatus.DISABLED }, index.h("div", { class: "sc-snk-filter-bar snk-filter-bar__filter-modal-content" }, index.h("div", null, this.useSearch ? index.h("ez-filter-input", { label: this.getMessage("snkFilterBar.modalFindFilter"), onEzChange: (evt) => this._filterArgument = evt.detail }) : undefined), this.getFilteredItems().length > 0 ? index.h("div", { class: "ez-text ez-text--medium ez-text--primary ez-padding-bottom--small" }, this.getActiveFiltersMsg()) : undefined, index.h("div", null, this.getFilteredItems().map(item => index.h("div", { class: "ez-padding--medium sc-snk-filter-bar snk-filter-bar__filter-modal-item ez-align--middle ez-margin-bottom--small" }, index.h("ez-check", { class: "sc-snk-filter-bar snk-filter-bar__filter-modal-item__check", onEzChange: evt => this.updateValue(item.id, evt.detail), enabled: item.enabled, value: item.active, mode: "switch" }), index.h("div", { class: "ez-text ez-title--primary ez-text--medium ez-margin-left--medium sc-snk-filter-bar snk-filter-bar__filter-modal-item__label" }, item.label)))), index.h("div", { class: "ez-text ez-text--large ez-align--middle ez-text--secondary ez-text--center ez-padding-bottom--large" }, this.infoText))));
744
+ }
745
+ };
746
+
747
+ const snkTaskbarCss = ".sc-snk-taskbar-h{display:flex}";
748
+
749
+ const SnkTaskbar = class {
750
+ constructor(hostRef) {
751
+ index.registerInstance(this, hostRef);
752
+ this.actionClick = index.createEvent(this, "actionClick", 7);
753
+ this._titleKeyByElement = {
754
+ [taskbarElements.TaskbarElement.UPDATE]: "snkTaskbar.titleUpdate",
755
+ [taskbarElements.TaskbarElement.PREVIOUS]: "snkTaskbar.titlePrevious",
756
+ [taskbarElements.TaskbarElement.NEXT]: "snkTaskbar.titleNext",
757
+ [taskbarElements.TaskbarElement.REFRESH]: "snkTaskbar.titleRefresh",
758
+ [taskbarElements.TaskbarElement.CLONE]: "snkTaskbar.titleClone",
759
+ [taskbarElements.TaskbarElement.REMOVE]: "snkTaskbar.titleRemove",
760
+ [taskbarElements.TaskbarElement.MORE_OPTIONS]: "snkTaskbar.titleMoreOptions",
761
+ [taskbarElements.TaskbarElement.INSERT]: "snkTaskbar.titleInsert",
762
+ [taskbarElements.TaskbarElement.CANCEL]: "snkTaskbar.titleCancel",
763
+ [taskbarElements.TaskbarElement.SAVE]: "snkTaskbar.titleSave",
764
+ [taskbarElements.TaskbarElement.GRID_MODE]: "snkTaskbar.titleGridMode",
765
+ [taskbarElements.TaskbarElement.CONFIG_GRID]: "snkTaskbar.titleConfigGrid",
766
+ [taskbarElements.TaskbarElement.FORM_MODE]: "snkTaskbar.titleFormMode"
767
+ };
768
+ }
769
+ observeButtons() {
770
+ this._definitions = undefined;
771
+ }
772
+ // Internal methods
773
+ elementsFromString(strButtons) {
774
+ const elements = [];
775
+ if (strButtons) {
776
+ strButtons.split(",").forEach(buttonName => {
777
+ buttonName = buttonName.trim();
778
+ if (taskbarElements.VisibleWhenForbidden[buttonName] || this.isAllowed(buttonName)) {
779
+ elements.push(buttonName.trim());
780
+ }
781
+ });
782
+ }
783
+ return elements;
784
+ }
785
+ isAllowed(buttonName) {
786
+ if (taskbarElements.AuthorizationElements[buttonName]) {
787
+ return this._permissions ? this._permissions.isSup || this._permissions[buttonName] : false;
788
+ }
789
+ return true;
790
+ }
791
+ /**
792
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
793
+ * através de um pequeno modulo na estrutura da aplicação:
794
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
795
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-taskbar.msg.ts"
796
+ */
797
+ getTitle(element) {
798
+ let key;
799
+ if (this.isAllowed(element)) {
800
+ key = this._titleKeyByElement[element];
801
+ }
802
+ else {
803
+ key = "snkTaskbar.forbidden";
804
+ }
805
+ return key ? this._application.messagesBuilder.getMessage(key, {}) : "";
806
+ }
807
+ elementClick(elem) {
808
+ if (this.dataUnit) {
809
+ switch (elem) {
810
+ case taskbarElements.TaskbarElement.PREVIOUS:
811
+ this.dataUnit.previousRecord();
812
+ break;
813
+ case taskbarElements.TaskbarElement.NEXT:
814
+ this.dataUnit.nextRecord();
815
+ break;
816
+ case taskbarElements.TaskbarElement.REFRESH:
817
+ this.dataUnit.loadData();
818
+ break;
819
+ case taskbarElements.TaskbarElement.CLONE:
820
+ this.dataUnit.copySelected();
821
+ break;
822
+ case taskbarElements.TaskbarElement.REMOVE:
823
+ this.dataUnit.removeSelectedRecords();
824
+ break;
825
+ case taskbarElements.TaskbarElement.INSERT:
826
+ this.dataUnit.addRecord();
827
+ break;
828
+ case taskbarElements.TaskbarElement.CANCEL:
829
+ this.dataUnit.cancelEdition();
830
+ break;
831
+ case taskbarElements.TaskbarElement.SAVE:
832
+ this.dataUnit.saveData();
833
+ break;
834
+ }
835
+ }
836
+ this.actionClick.emit(elem);
837
+ }
838
+ isEnabled(elem) {
839
+ if (!this.isAllowed(elem)) {
840
+ return false;
841
+ }
842
+ return !(this.disabledButtons && this.disabledButtons.includes(elem));
843
+ }
844
+ getElement(index, def) {
845
+ let className = def === this.primaryButton ? "ez-button--primary " : "";
846
+ if (index > 1) {
847
+ className += "ez-padding-left--medium";
848
+ }
849
+ if (taskbarElements.TaskbarElement[def.toString()]) {
850
+ return taskbarElements.buildElem(def, className, elem => this.getTitle(elem), elem => this.elementClick(elem), elem => this.isEnabled(elem), this.actionsList);
851
+ }
852
+ else {
853
+ return taskbarElements.buildCustomButton(def, className, elem => this.elementClick(elem), elem => this.isEnabled(elem));
854
+ }
855
+ }
856
+ // Lifecycle
857
+ componentWillLoad() {
858
+ this._application = core.ApplicationContext.getContextValue("__SNK__APPLICATION__");
859
+ if (this._application) {
860
+ this._application.getAllAccess().then(access => this._permissions = access);
861
+ }
862
+ else {
863
+ this._permissions = {};
864
+ }
865
+ }
866
+ componentWillRender() {
867
+ if (this._definitions == undefined && this._permissions) {
868
+ this._definitions = this.elementsFromString(this.buttons);
869
+ }
870
+ }
871
+ render() {
872
+ if (this._definitions === undefined) {
873
+ return undefined;
874
+ }
875
+ let index$1 = 0;
876
+ return (index.h(index.Host, null, this._definitions.map((elem) => {
877
+ if (elem === taskbarElements.TaskbarElement.DIVIDER) {
878
+ index$1 = 0;
879
+ }
880
+ else {
881
+ index$1++;
882
+ }
883
+ if (taskbarElements.TaskbarElement[elem]) {
884
+ return this.getElement(index$1, taskbarElements.TaskbarElement[elem]);
885
+ }
886
+ if (this.customButtons.has(elem)) {
887
+ return this.getElement(index$1, this.customButtons.get(elem));
888
+ }
889
+ return index.h("slot", { name: elem });
890
+ })));
891
+ }
892
+ static get watchers() { return {
893
+ "buttons": ["observeButtons"]
894
+ }; }
895
+ };
896
+ SnkTaskbar.style = snkTaskbarCss;
897
+
898
+ exports.snk_filter_bar = SnkFilterBar;
899
+ exports.snk_filter_item = SnkFilterItem;
900
+ exports.snk_filter_list = SnkFilterList;
901
+ exports.snk_filter_modal = SnkFilterModal;
902
+ exports.snk_taskbar = SnkTaskbar;