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

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 (152) 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 +53 -217
  5. package/dist/cjs/snk-crud.cjs.entry.js +9 -3
  6. package/dist/cjs/snk-data-unit.cjs.entry.js +23 -23
  7. package/dist/cjs/snk-filter-bar_5.cjs.entry.js +883 -0
  8. package/dist/cjs/snk-filter-binary-select.cjs.entry.js +1 -1
  9. package/dist/cjs/snk-filter-detail.cjs.entry.js +32 -21
  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 -31
  14. package/dist/cjs/snk-filter-search.cjs.entry.js +3 -12
  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/collection/components/snk-crud/snk-crud.js +29 -0
  21. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-personalized.js +0 -39
  22. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-search.js +0 -39
  23. package/dist/collection/components/snk-filter-bar/filter-item/snk-filter-detail.js +30 -36
  24. package/dist/collection/components/snk-filter-bar/filter-item/snk-filter-item.js +3 -14
  25. package/dist/collection/components/snk-filter-bar/filter-list/snk-filter-list.js +4 -12
  26. package/dist/collection/lib/http/data-fetcher/DataFetcher.js +3 -3
  27. package/dist/components/index.js +0 -4
  28. package/dist/components/snk-application2.js +13 -177
  29. package/dist/components/snk-crud.js +9 -2
  30. package/dist/components/snk-data-unit.js +2 -2
  31. package/dist/components/snk-filter-bar2.js +4 -2
  32. package/dist/components/snk-filter-detail2.js +31 -21
  33. package/dist/components/snk-filter-item2.js +4 -15
  34. package/dist/components/snk-filter-list2.js +5 -13
  35. package/dist/components/snk-filter-modal2.js +4 -19
  36. package/dist/components/snk-filter-personalized.js +3 -13
  37. package/dist/components/snk-filter-search.js +2 -13
  38. package/dist/components/snk-form2.js +1 -1
  39. package/dist/components/snk-grid2.js +1 -1
  40. package/dist/components/snk-pesquisa2.js +1 -1
  41. package/dist/components/snk-taskbar2.js +1 -1
  42. package/dist/components/teste-pesquisa.js +1 -1
  43. package/dist/{sankhyablocks/index-2b4d2d14.js → esm/index-81dda3cf.js} +160 -1508
  44. package/dist/esm/loader.js +2 -18
  45. package/dist/esm/sankhyablocks.js +4 -116
  46. package/dist/esm/snk-application.entry.js +14 -178
  47. package/dist/esm/snk-crud.entry.js +8 -2
  48. package/dist/esm/snk-data-unit.entry.js +3 -3
  49. package/dist/esm/{snk-filter-bar.entry.js → snk-filter-bar_5.entry.js} +417 -4
  50. package/dist/esm/snk-filter-binary-select.entry.js +1 -1
  51. package/dist/esm/snk-filter-detail.entry.js +32 -21
  52. package/dist/esm/snk-filter-multi-select.entry.js +1 -1
  53. package/dist/esm/snk-filter-number.entry.js +1 -1
  54. package/dist/esm/snk-filter-period.entry.js +1 -1
  55. package/dist/esm/snk-filter-personalized.entry.js +3 -11
  56. package/dist/esm/snk-filter-search.entry.js +2 -11
  57. package/dist/esm/snk-filter-text.entry.js +1 -1
  58. package/dist/{sankhyablocks/snk-form.entry.js → esm/snk-form_2.entry.js} +117 -4
  59. package/dist/esm/snk-pesquisa.entry.js +2 -2
  60. package/dist/esm/{taskbar-elements-35d64ff9.js → taskbar-elements-38eb5d51.js} +1 -1
  61. package/dist/esm/teste-pesquisa.entry.js +2 -2
  62. package/dist/sankhyablocks/index.esm.js +0 -1
  63. package/dist/sankhyablocks/p-01823784.entry.js +1 -0
  64. package/dist/sankhyablocks/p-0352c0e2.entry.js +1 -0
  65. package/dist/sankhyablocks/p-07ebda01.entry.js +1 -0
  66. package/dist/sankhyablocks/p-46caa101.entry.js +1 -0
  67. package/dist/sankhyablocks/p-586e2522.js +1 -0
  68. package/dist/sankhyablocks/p-6f8303f3.entry.js +1 -0
  69. package/dist/sankhyablocks/p-746fc78b.entry.js +1 -0
  70. package/dist/sankhyablocks/p-77216252.entry.js +1 -0
  71. package/dist/sankhyablocks/p-86f15ffe.js +1 -0
  72. package/dist/sankhyablocks/p-8bbc0cbb.entry.js +74 -0
  73. package/dist/sankhyablocks/p-8f3c5709.entry.js +1 -0
  74. package/dist/sankhyablocks/p-97009a2c.entry.js +1 -0
  75. package/dist/sankhyablocks/p-9dd2b8cb.js +1 -0
  76. package/dist/sankhyablocks/p-aecf3e0a.entry.js +1 -0
  77. package/dist/sankhyablocks/p-c1c3b5d8.entry.js +1 -0
  78. package/dist/sankhyablocks/p-c9eec639.entry.js +1 -0
  79. package/dist/sankhyablocks/p-eea6444c.entry.js +1 -0
  80. package/dist/sankhyablocks/p-fac2b6a9.js +2 -0
  81. package/dist/sankhyablocks/p-fb705f81.entry.js +1 -0
  82. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -129
  83. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-personalized.d.ts +0 -2
  84. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-search.d.ts +0 -2
  85. package/dist/types/components/snk-filter-bar/filter-item/snk-filter-detail.d.ts +1 -1
  86. package/dist/types/components/snk-filter-bar/filter-list/snk-filter-list.d.ts +1 -1
  87. package/dist/types/components.d.ts +4 -10
  88. package/package.json +1 -1
  89. package/react/components.d.ts +19 -0
  90. package/react/components.js +19 -0
  91. package/react/components.js.map +1 -1
  92. package/dist/cjs/app-globals-3a1e7e63.js +0 -5
  93. package/dist/cjs/css-shim-b8158822.js +0 -6
  94. package/dist/cjs/dom-36862b77.js +0 -75
  95. package/dist/cjs/index-84fe3b86.js +0 -20
  96. package/dist/cjs/index-93965c41.js +0 -141
  97. package/dist/cjs/index-e90ae303.js +0 -2408
  98. package/dist/cjs/shadow-css-346c0795.js +0 -389
  99. package/dist/cjs/snk-filter-bar.cjs.entry.js +0 -466
  100. package/dist/cjs/snk-filter-item.cjs.entry.js +0 -177
  101. package/dist/cjs/snk-filter-list.cjs.entry.js +0 -91
  102. package/dist/cjs/snk-filter-modal.cjs.entry.js +0 -37
  103. package/dist/cjs/snk-grid.cjs.entry.js +0 -79
  104. package/dist/cjs/snk-taskbar.cjs.entry.js +0 -160
  105. package/dist/cjs/taskbar-processor-6bd0d35c.js +0 -47
  106. package/dist/components/index2.js +0 -2394
  107. package/dist/components/index3.js +0 -139
  108. package/dist/esm/app-globals-0f993ce5.js +0 -3
  109. package/dist/esm/css-shim-b3f2ee8d.js +0 -4
  110. package/dist/esm/dom-665d6011.js +0 -73
  111. package/dist/esm/index-2b4d2d14.js +0 -3262
  112. package/dist/esm/index-5992b7e6.js +0 -139
  113. package/dist/esm/index-c683b2b0.js +0 -2394
  114. package/dist/esm/index-c71285cb.js +0 -17
  115. package/dist/esm/shadow-css-b18e99d7.js +0 -387
  116. package/dist/esm/snk-filter-item.entry.js +0 -173
  117. package/dist/esm/snk-filter-list.entry.js +0 -87
  118. package/dist/esm/snk-filter-modal.entry.js +0 -33
  119. package/dist/esm/snk-form.entry.js +0 -129
  120. package/dist/esm/snk-grid.entry.js +0 -75
  121. package/dist/esm/snk-taskbar.entry.js +0 -156
  122. package/dist/esm/taskbar-processor-aa6772c9.js +0 -45
  123. package/dist/sankhyablocks/SnkMessageBuilder-35a20271.js +0 -199
  124. package/dist/sankhyablocks/app-globals-0f993ce5.js +0 -3
  125. package/dist/sankhyablocks/css-shim-b3f2ee8d.js +0 -4
  126. package/dist/sankhyablocks/dom-665d6011.js +0 -73
  127. package/dist/sankhyablocks/filter-item-type.enum-a79b2fa8.js +0 -14
  128. package/dist/sankhyablocks/index-5992b7e6.js +0 -139
  129. package/dist/sankhyablocks/index-c683b2b0.js +0 -2394
  130. package/dist/sankhyablocks/index-c71285cb.js +0 -17
  131. package/dist/sankhyablocks/shadow-css-b18e99d7.js +0 -387
  132. package/dist/sankhyablocks/snk-application.entry.js +0 -8166
  133. package/dist/sankhyablocks/snk-crud.entry.js +0 -66
  134. package/dist/sankhyablocks/snk-data-unit.entry.js +0 -268
  135. package/dist/sankhyablocks/snk-filter-bar.entry.js +0 -462
  136. package/dist/sankhyablocks/snk-filter-binary-select.entry.js +0 -43
  137. package/dist/sankhyablocks/snk-filter-detail.entry.js +0 -80
  138. package/dist/sankhyablocks/snk-filter-item.entry.js +0 -173
  139. package/dist/sankhyablocks/snk-filter-list.entry.js +0 -87
  140. package/dist/sankhyablocks/snk-filter-modal.entry.js +0 -33
  141. package/dist/sankhyablocks/snk-filter-multi-select.entry.js +0 -19
  142. package/dist/sankhyablocks/snk-filter-number.entry.js +0 -20
  143. package/dist/sankhyablocks/snk-filter-period.entry.js +0 -33
  144. package/dist/sankhyablocks/snk-filter-personalized.entry.js +0 -85
  145. package/dist/sankhyablocks/snk-filter-search.entry.js +0 -40
  146. package/dist/sankhyablocks/snk-filter-text.entry.js +0 -18
  147. package/dist/sankhyablocks/snk-grid.entry.js +0 -75
  148. package/dist/sankhyablocks/snk-pesquisa.entry.js +0 -311
  149. package/dist/sankhyablocks/snk-taskbar.entry.js +0 -156
  150. package/dist/sankhyablocks/taskbar-elements-35d64ff9.js +0 -90
  151. package/dist/sankhyablocks/taskbar-processor-aa6772c9.js +0 -45
  152. package/dist/sankhyablocks/teste-pesquisa.entry.js +0 -33
@@ -0,0 +1,883 @@
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 (node.id != core.FloatingManager.MODAL_ELEMENT_ID) {
474
+ return true;
475
+ }
476
+ this.detailIsVisible = false;
477
+ this.executeCloseCallback();
478
+ return false;
479
+ };
480
+ }
481
+ async showUp(open = false) {
482
+ return new Promise(resolve => {
483
+ this._filterItemElement.scrollIntoView({ behavior: "auto", block: "nearest", inline: "nearest" });
484
+ if (open) {
485
+ window.requestAnimationFrame(() => {
486
+ this._closeCallback = resolve;
487
+ this.showDetail();
488
+ });
489
+ }
490
+ });
491
+ }
492
+ showDetail() {
493
+ this._floatingID = core.FloatingManager.float(this._popover, this._popoverContainer, { autoClose: true, innerClickTest: this.innerClickCheck, left: this.getScrollOffset(), useOverlay: true });
494
+ this.detailIsVisible = true;
495
+ }
496
+ getScrollOffset() {
497
+ return `${this._filterItemElement.getBoundingClientRect().left + 12}px`;
498
+ }
499
+ hideDetail() {
500
+ if (this._floatingID != undefined) {
501
+ core.FloatingManager.close(this._floatingID);
502
+ }
503
+ this._floatingID = undefined;
504
+ this.detailIsVisible = false;
505
+ this.executeCloseCallback();
506
+ }
507
+ executeCloseCallback() {
508
+ if (this._closeCallback) {
509
+ this._closeCallback();
510
+ this._closeCallback = undefined;
511
+ }
512
+ }
513
+ //---------------------------------------------
514
+ // Event handlers
515
+ //---------------------------------------------
516
+ clickListener(evt) {
517
+ if ([this._chipElement, this._leftIconElement, this._rightIconElement].includes(evt.target)) {
518
+ if (evt.target === this._rightIconElement && this.config.value != undefined) {
519
+ this.filterChange.emit(Object.assign(Object.assign({}, this.config), { value: undefined }));
520
+ }
521
+ else {
522
+ if (this.detailIsVisible) {
523
+ this.hideDetail();
524
+ }
525
+ else {
526
+ this.showDetail();
527
+ }
528
+ }
529
+ evt.preventDefault();
530
+ evt.stopImmediatePropagation();
531
+ evt.stopPropagation();
532
+ }
533
+ }
534
+ mouseDownListener(evt) {
535
+ if (this.detailIsVisible && [this._chipElement, this._leftIconElement, this._rightIconElement].includes(evt.target)) {
536
+ evt.preventDefault();
537
+ evt.stopImmediatePropagation();
538
+ evt.stopPropagation();
539
+ }
540
+ }
541
+ getLabel() {
542
+ const { type, value, label, props } = this.config;
543
+ if (value) {
544
+ if (type === filterItemType_enum.FilterItemType.BINARY_SELECT) {
545
+ const [optOne, optTwo] = props.options;
546
+ if (optOne.name === value) {
547
+ return optOne.label;
548
+ }
549
+ if (optTwo.name === value) {
550
+ return optTwo.label;
551
+ }
552
+ }
553
+ if (type === filterItemType_enum.FilterItemType.MULTI_SELECT) {
554
+ const opt = props.options.find(opt => opt.value === value);
555
+ return `${label}: ${opt.label}`;
556
+ }
557
+ if (type === filterItemType_enum.FilterItemType.PERIOD) {
558
+ let { end, start } = value;
559
+ if (typeof end === "string") {
560
+ end = new Date(end);
561
+ end.setMinutes(end.getMinutes() + end.getTimezoneOffset());
562
+ }
563
+ if (typeof start === "string") {
564
+ start = new Date(start);
565
+ start.setMinutes(start.getMinutes() + start.getTimezoneOffset());
566
+ }
567
+ const dateFormater = new Intl.DateTimeFormat("pt-BR");
568
+ if (end && start) {
569
+ return `${label}: ${dateFormater.format(start)} a ${dateFormater.format(end)}`;
570
+ }
571
+ else {
572
+ if (start) {
573
+ return `${label}: A partir de ${dateFormater.format(start)}`;
574
+ }
575
+ else if (end) {
576
+ return `${label}: Até ${dateFormater.format(end)}`;
577
+ }
578
+ else {
579
+ return label;
580
+ }
581
+ }
582
+ }
583
+ if (type === filterItemType_enum.FilterItemType.SEARCH) {
584
+ return `${label}: ${value.value} - ${value.label}`;
585
+ }
586
+ if (type === filterItemType_enum.FilterItemType.PERSONALIZED) {
587
+ return label;
588
+ }
589
+ return `${label}: ${value}`;
590
+ }
591
+ return label;
592
+ }
593
+ componentDidRender() {
594
+ if (this._floatingID == undefined) {
595
+ if (this._popover) {
596
+ this._popover.remove();
597
+ }
598
+ }
599
+ }
600
+ filterChangeListener() {
601
+ this.hideDetail();
602
+ }
603
+ getRightIconName() {
604
+ if (this.config.value != undefined) {
605
+ return "close";
606
+ }
607
+ return this.detailIsVisible ? "chevron-up" : "chevron-down";
608
+ }
609
+ getLeftIconName() {
610
+ switch (this.config.type) {
611
+ case filterItemType_enum.FilterItemType.PERIOD:
612
+ return "calendar";
613
+ case filterItemType_enum.FilterItemType.PERSONALIZED:
614
+ return "tune";
615
+ }
616
+ return undefined;
617
+ }
618
+ render() {
619
+ const leftIcon = this.getLeftIconName();
620
+ 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 }))));
621
+ }
622
+ get _filterItemElement() { return index.getElement(this); }
623
+ };
624
+
625
+ const SHOW_MORE_ITEM_NAME = "__SHOWMORE__";
626
+ const MAX_FILTERS = 5;
627
+ const SnkFilterList = class {
628
+ constructor(hostRef) {
629
+ index.registerInstance(this, hostRef);
630
+ this.snkItemSelected = index.createEvent(this, "snkItemSelected", 7);
631
+ this.innerClickCheck = (_floatingContainer, node) => {
632
+ if (node.id != core.FloatingManager.MODAL_ELEMENT_ID) {
633
+ return true;
634
+ }
635
+ this._detailIsVisible = false;
636
+ return false;
637
+ };
638
+ }
639
+ showList() {
640
+ this._floatingID = core.FloatingManager.float(this._popover, this._popoverContainer, { autoClose: true, innerClickTest: this.innerClickCheck, useOverlay: true });
641
+ this._detailIsVisible = true;
642
+ this._showAll = false;
643
+ this._filterArgument = "";
644
+ }
645
+ hideList() {
646
+ if (this._floatingID != undefined) {
647
+ core.FloatingManager.close(this._floatingID);
648
+ }
649
+ this._floatingID = undefined;
650
+ this._detailIsVisible = false;
651
+ }
652
+ buttonClick() {
653
+ if (this._detailIsVisible) {
654
+ this.hideList();
655
+ }
656
+ else {
657
+ this.showList();
658
+ }
659
+ }
660
+ componentDidRender() {
661
+ if (this._floatingID == undefined) {
662
+ if (this._popover) {
663
+ this._popover.remove();
664
+ }
665
+ }
666
+ }
667
+ buildItemElement(item) {
668
+ 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)));
669
+ }
670
+ itemSelected(itemName) {
671
+ if (itemName === SHOW_MORE_ITEM_NAME) {
672
+ this._showAll = true;
673
+ }
674
+ else {
675
+ this.hideList();
676
+ this.snkItemSelected.emit(itemName);
677
+ }
678
+ }
679
+ getFilterItems() {
680
+ const items = this.items ? core.ArrayUtils.applyStringFilter(this._filterArgument, this.items.filter(item => item.kind === "FILTER")) : [];
681
+ if (items.length === 0) {
682
+ 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);
683
+ }
684
+ const hideItems = !this._filterArgument && !this._showAll && (items.length > MAX_FILTERS + 1);
685
+ if (hideItems) {
686
+ items.splice(MAX_FILTERS);
687
+ 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" });
688
+ }
689
+ return index.h("div", { class: "sc-snk-filter-bar snk-filter-bar__filter-list-items-container" }, items.map(item => this.buildItemElement(item)));
690
+ }
691
+ getFooterItems() {
692
+ return this.items.filter(item => item.kind === "FOOTER");
693
+ }
694
+ render() {
695
+ 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))));
696
+ }
697
+ get _element() { return index.getElement(this); }
698
+ };
699
+
700
+ const SnkFilterModal = class {
701
+ constructor(hostRef) {
702
+ index.registerInstance(this, hostRef);
703
+ }
704
+ updateValue(id, value) {
705
+ this.items = this.items.map(item => {
706
+ if (item.id === id) {
707
+ return Object.assign(Object.assign({}, item), { active: value });
708
+ }
709
+ return item;
710
+ });
711
+ }
712
+ getActiveFiltersMsg() {
713
+ const activeFilters = this.items.filter(item => item.active).length;
714
+ if (activeFilters === 0) {
715
+ return this.getMessage("snkFilterBar.noActiveFilters");
716
+ }
717
+ return this.getMessage(activeFilters > 1 ? "snkFilterBar.activeFilters" : "snkFilterBar.activeFilter", { ACTIVE_FILTERS: activeFilters });
718
+ }
719
+ getFilteredItems() {
720
+ return this.items ? core.ArrayUtils.applyStringFilter(this._filterArgument, this.items) : [];
721
+ }
722
+ render() {
723
+ const allowCancel = this.items.filter(item => item.active).length > 0;
724
+ 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))));
725
+ }
726
+ };
727
+
728
+ const snkTaskbarCss = ".sc-snk-taskbar-h{display:flex}";
729
+
730
+ const SnkTaskbar = class {
731
+ constructor(hostRef) {
732
+ index.registerInstance(this, hostRef);
733
+ this.actionClick = index.createEvent(this, "actionClick", 7);
734
+ this._titleKeyByElement = {
735
+ [taskbarElements.TaskbarElement.UPDATE]: "snkTaskbar.titleUpdate",
736
+ [taskbarElements.TaskbarElement.PREVIOUS]: "snkTaskbar.titlePrevious",
737
+ [taskbarElements.TaskbarElement.NEXT]: "snkTaskbar.titleNext",
738
+ [taskbarElements.TaskbarElement.REFRESH]: "snkTaskbar.titleRefresh",
739
+ [taskbarElements.TaskbarElement.CLONE]: "snkTaskbar.titleClone",
740
+ [taskbarElements.TaskbarElement.REMOVE]: "snkTaskbar.titleRemove",
741
+ [taskbarElements.TaskbarElement.MORE_OPTIONS]: "snkTaskbar.titleMoreOptions",
742
+ [taskbarElements.TaskbarElement.INSERT]: "snkTaskbar.titleInsert",
743
+ [taskbarElements.TaskbarElement.CANCEL]: "snkTaskbar.titleCancel",
744
+ [taskbarElements.TaskbarElement.SAVE]: "snkTaskbar.titleSave",
745
+ [taskbarElements.TaskbarElement.GRID_MODE]: "snkTaskbar.titleGridMode",
746
+ [taskbarElements.TaskbarElement.CONFIG_GRID]: "snkTaskbar.titleConfigGrid",
747
+ [taskbarElements.TaskbarElement.FORM_MODE]: "snkTaskbar.titleFormMode"
748
+ };
749
+ }
750
+ observeButtons() {
751
+ this._definitions = undefined;
752
+ }
753
+ // Internal methods
754
+ elementsFromString(strButtons) {
755
+ const elements = [];
756
+ if (strButtons) {
757
+ strButtons.split(",").forEach(buttonName => {
758
+ buttonName = buttonName.trim();
759
+ if (taskbarElements.VisibleWhenForbidden[buttonName] || this.isAllowed(buttonName)) {
760
+ elements.push(buttonName.trim());
761
+ }
762
+ });
763
+ }
764
+ return elements;
765
+ }
766
+ isAllowed(buttonName) {
767
+ if (taskbarElements.AuthorizationElements[buttonName]) {
768
+ return this._permissions ? this._permissions.isSup || this._permissions[buttonName] : false;
769
+ }
770
+ return true;
771
+ }
772
+ /**
773
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
774
+ * através de um pequeno modulo na estrutura da aplicação:
775
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
776
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-taskbar.msg.ts"
777
+ */
778
+ getTitle(element) {
779
+ let key;
780
+ if (this.isAllowed(element)) {
781
+ key = this._titleKeyByElement[element];
782
+ }
783
+ else {
784
+ key = "snkTaskbar.forbidden";
785
+ }
786
+ return key ? this._application.messagesBuilder.getMessage(key, {}) : "";
787
+ }
788
+ elementClick(elem) {
789
+ if (this.dataUnit) {
790
+ switch (elem) {
791
+ case taskbarElements.TaskbarElement.PREVIOUS:
792
+ this.dataUnit.previousRecord();
793
+ break;
794
+ case taskbarElements.TaskbarElement.NEXT:
795
+ this.dataUnit.nextRecord();
796
+ break;
797
+ case taskbarElements.TaskbarElement.REFRESH:
798
+ this.dataUnit.loadData();
799
+ break;
800
+ case taskbarElements.TaskbarElement.CLONE:
801
+ this.dataUnit.copySelected();
802
+ break;
803
+ case taskbarElements.TaskbarElement.REMOVE:
804
+ this.dataUnit.removeSelectedRecords();
805
+ break;
806
+ case taskbarElements.TaskbarElement.INSERT:
807
+ this.dataUnit.addRecord();
808
+ break;
809
+ case taskbarElements.TaskbarElement.CANCEL:
810
+ this.dataUnit.cancelEdition();
811
+ break;
812
+ case taskbarElements.TaskbarElement.SAVE:
813
+ this.dataUnit.saveData();
814
+ break;
815
+ }
816
+ }
817
+ this.actionClick.emit(elem);
818
+ }
819
+ isEnabled(elem) {
820
+ if (!this.isAllowed(elem)) {
821
+ return false;
822
+ }
823
+ return !(this.disabledButtons && this.disabledButtons.includes(elem));
824
+ }
825
+ getElement(index, def) {
826
+ let className = def === this.primaryButton ? "ez-button--primary " : "";
827
+ if (index > 1) {
828
+ className += "ez-padding-left--medium";
829
+ }
830
+ if (taskbarElements.TaskbarElement[def.toString()]) {
831
+ return taskbarElements.buildElem(def, className, elem => this.getTitle(elem), elem => this.elementClick(elem), elem => this.isEnabled(elem), this.actionsList);
832
+ }
833
+ else {
834
+ return taskbarElements.buildCustomButton(def, className, elem => this.elementClick(elem), elem => this.isEnabled(elem));
835
+ }
836
+ }
837
+ // Lifecycle
838
+ componentWillLoad() {
839
+ this._application = core.ApplicationContext.getContextValue("__SNK__APPLICATION__");
840
+ if (this._application) {
841
+ this._application.getAllAccess().then(access => this._permissions = access);
842
+ }
843
+ else {
844
+ this._permissions = {};
845
+ }
846
+ }
847
+ componentWillRender() {
848
+ if (this._definitions == undefined && this._permissions) {
849
+ this._definitions = this.elementsFromString(this.buttons);
850
+ }
851
+ }
852
+ render() {
853
+ if (this._definitions === undefined) {
854
+ return undefined;
855
+ }
856
+ let index$1 = 0;
857
+ return (index.h(index.Host, null, this._definitions.map((elem) => {
858
+ if (elem === taskbarElements.TaskbarElement.DIVIDER) {
859
+ index$1 = 0;
860
+ }
861
+ else {
862
+ index$1++;
863
+ }
864
+ if (taskbarElements.TaskbarElement[elem]) {
865
+ return this.getElement(index$1, taskbarElements.TaskbarElement[elem]);
866
+ }
867
+ if (this.customButtons.has(elem)) {
868
+ return this.getElement(index$1, this.customButtons.get(elem));
869
+ }
870
+ return index.h("slot", { name: elem });
871
+ })));
872
+ }
873
+ static get watchers() { return {
874
+ "buttons": ["observeButtons"]
875
+ }; }
876
+ };
877
+ SnkTaskbar.style = snkTaskbarCss;
878
+
879
+ exports.snk_filter_bar = SnkFilterBar;
880
+ exports.snk_filter_item = SnkFilterItem;
881
+ exports.snk_filter_list = SnkFilterList;
882
+ exports.snk_filter_modal = SnkFilterModal;
883
+ exports.snk_taskbar = SnkTaskbar;