@sankhyalabs/sankhyablocks 1.3.34 → 1.4.0-beta.1

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 (216) hide show
  1. package/dist/cjs/SnkMessageBuilder-7717f1e4.js +326 -0
  2. package/dist/cjs/app-globals-3a1e7e63.js +5 -0
  3. package/dist/cjs/css-shim-b8158822.js +6 -0
  4. package/dist/cjs/dom-36862b77.js +75 -0
  5. package/dist/cjs/filter-item-type.enum-e2e1bc5b.js +14 -0
  6. package/dist/cjs/index-02201bc9.js +2397 -0
  7. package/dist/cjs/index-b0b676c5.js +3298 -0
  8. package/dist/cjs/loader.cjs.js +19 -3
  9. package/dist/cjs/sankhyablocks.cjs.js +117 -5
  10. package/dist/cjs/shadow-css-346c0795.js +389 -0
  11. package/dist/cjs/snk-application.cjs.entry.js +720 -168
  12. package/dist/cjs/snk-crud.cjs.entry.js +70 -0
  13. package/dist/cjs/snk-data-unit.cjs.entry.js +280 -0
  14. package/dist/cjs/snk-filter-bar.cjs.entry.js +278 -0
  15. package/dist/cjs/snk-filter-binary-select.cjs.entry.js +47 -0
  16. package/dist/cjs/snk-filter-detail.cjs.entry.js +49 -0
  17. package/dist/cjs/snk-filter-item.cjs.entry.js +154 -0
  18. package/dist/cjs/snk-filter-list.cjs.entry.js +91 -0
  19. package/dist/cjs/snk-filter-multi-select.cjs.entry.js +23 -0
  20. package/dist/cjs/snk-filter-number.cjs.entry.js +24 -0
  21. package/dist/cjs/snk-filter-period.cjs.entry.js +37 -0
  22. package/dist/cjs/snk-filter-search.cjs.entry.js +44 -0
  23. package/dist/cjs/snk-filter-text.cjs.entry.js +22 -0
  24. package/dist/cjs/snk-form.cjs.entry.js +133 -0
  25. package/dist/cjs/snk-grid.cjs.entry.js +79 -0
  26. package/dist/cjs/snk-pesquisa.cjs.entry.js +5 -5
  27. package/dist/cjs/snk-taskbar.cjs.entry.js +160 -0
  28. package/dist/cjs/taskbar-elements-283c737e.js +93 -0
  29. package/dist/cjs/taskbar-processor-6bd0d35c.js +47 -0
  30. package/dist/cjs/teste-pesquisa.cjs.entry.js +5 -5
  31. package/dist/collection/collection-manifest.json +17 -2
  32. package/dist/collection/components/snk-application/errorhandler/snk-error-handler.js +9 -2
  33. package/dist/collection/components/snk-application/snk-application.js +1126 -621
  34. package/dist/collection/components/snk-crud/snk-crud.css +6 -0
  35. package/dist/collection/components/snk-crud/snk-crud.js +203 -0
  36. package/dist/collection/components/snk-data-unit/snk-data-unit.css +6 -0
  37. package/dist/collection/components/snk-data-unit/snk-data-unit.js +544 -0
  38. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-binary-select.js +88 -0
  39. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-multi-select.js +64 -0
  40. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-number.js +65 -0
  41. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-period.js +78 -0
  42. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-search.js +118 -0
  43. package/dist/collection/components/snk-filter-bar/filter-item/editors/snk-filter-text.js +63 -0
  44. package/dist/collection/components/snk-filter-bar/filter-item/filter-item-type.enum.js +10 -0
  45. package/dist/collection/components/snk-filter-bar/filter-item/snk-filter-detail.js +118 -0
  46. package/dist/collection/components/snk-filter-bar/filter-item/snk-filter-item.js +255 -0
  47. package/dist/collection/components/snk-filter-bar/filter-list/snk-filter-list.js +233 -0
  48. package/dist/collection/components/snk-filter-bar/snk-filter-bar.css +114 -0
  49. package/dist/collection/components/snk-filter-bar/snk-filter-bar.js +353 -0
  50. package/dist/collection/components/snk-form/snk-form.css +34 -0
  51. package/dist/collection/components/snk-form/snk-form.js +258 -0
  52. package/dist/collection/components/snk-grid/snk-grid.css +18 -0
  53. package/dist/collection/components/snk-grid/snk-grid.js +205 -0
  54. package/dist/collection/components/snk-pesquisa/snk-pesquisa.js +80 -79
  55. package/dist/collection/components/snk-taskbar/elements/taskbar-elements.js +86 -0
  56. package/dist/collection/components/snk-taskbar/processor/taskbar-processor.js +43 -0
  57. package/dist/collection/components/snk-taskbar/snk-taskbar.css +3 -0
  58. package/dist/collection/components/snk-taskbar/snk-taskbar.js +307 -0
  59. package/dist/collection/components/teste-pesquisa/teste-pesquisa.js +12 -9
  60. package/dist/collection/lib/http/data-fetcher/DataFetcher.js +37 -12
  61. package/dist/collection/lib/http/data-fetcher/fetchers/dataunit-fetcher.js +52 -21
  62. package/dist/collection/lib/http/data-fetcher/fetchers/filter-bar-config-fetcher.js +54 -0
  63. package/dist/collection/lib/http/data-fetcher/fetchers/grid-config-fetcher.js +4 -3
  64. package/dist/collection/lib/http/data-fetcher/fetchers/totals-fetcher.js +47 -0
  65. package/dist/collection/lib/index.js +1 -0
  66. package/dist/collection/lib/message/SnkMessageBuilder.js +121 -0
  67. package/dist/collection/lib/message/resources/snk-data-unit.msg.js +23 -0
  68. package/dist/collection/lib/message/resources/snk-filter-bar.msg.js +18 -0
  69. package/dist/collection/lib/message/resources/snk-form.msg.js +10 -0
  70. package/dist/collection/lib/message/resources/snk-taskbar.msg.js +17 -0
  71. package/dist/components/SnkMessageBuilder.js +303 -0
  72. package/dist/components/filter-item-type.enum.js +12 -0
  73. package/dist/components/index.d.ts +18 -5
  74. package/dist/components/index.js +22 -0
  75. package/dist/components/index2.js +2384 -0
  76. package/dist/components/snk-application2.js +700 -139
  77. package/dist/components/snk-crud.d.ts +11 -0
  78. package/dist/components/snk-crud.js +133 -0
  79. package/dist/components/snk-data-unit.d.ts +11 -0
  80. package/dist/components/snk-data-unit.js +303 -0
  81. package/dist/components/snk-filter-bar.d.ts +11 -0
  82. package/dist/components/snk-filter-bar.js +6 -0
  83. package/dist/components/snk-filter-bar2.js +310 -0
  84. package/dist/components/snk-filter-binary-select.d.ts +11 -0
  85. package/dist/components/snk-filter-binary-select.js +63 -0
  86. package/dist/components/snk-filter-detail.d.ts +11 -0
  87. package/dist/components/snk-filter-detail.js +6 -0
  88. package/dist/components/snk-filter-detail2.js +63 -0
  89. package/dist/components/snk-filter-item.d.ts +11 -0
  90. package/dist/components/snk-filter-item.js +6 -0
  91. package/dist/components/snk-filter-item2.js +175 -0
  92. package/dist/components/snk-filter-list.d.ts +11 -0
  93. package/dist/components/snk-filter-list.js +6 -0
  94. package/dist/components/snk-filter-list2.js +111 -0
  95. package/dist/components/snk-filter-multi-select.d.ts +11 -0
  96. package/dist/components/snk-filter-multi-select.js +39 -0
  97. package/dist/components/snk-filter-number.d.ts +11 -0
  98. package/dist/components/snk-filter-number.js +40 -0
  99. package/dist/components/snk-filter-period.d.ts +11 -0
  100. package/dist/components/snk-filter-period.js +53 -0
  101. package/dist/components/snk-filter-search.d.ts +11 -0
  102. package/dist/components/snk-filter-search.js +62 -0
  103. package/dist/components/snk-filter-text.d.ts +11 -0
  104. package/dist/components/snk-filter-text.js +38 -0
  105. package/dist/components/snk-form.d.ts +11 -0
  106. package/dist/components/snk-form.js +6 -0
  107. package/dist/components/snk-form2.js +159 -0
  108. package/dist/components/snk-grid.d.ts +11 -0
  109. package/dist/components/snk-grid.js +6 -0
  110. package/dist/components/snk-grid2.js +127 -0
  111. package/dist/components/snk-pesquisa2.js +1 -1
  112. package/dist/components/snk-taskbar.d.ts +11 -0
  113. package/dist/components/snk-taskbar.js +6 -0
  114. package/dist/components/snk-taskbar2.js +264 -0
  115. package/dist/components/taskbar-processor.js +45 -0
  116. package/dist/components/teste-pesquisa.js +1 -1
  117. package/dist/esm/SnkMessageBuilder-a7da466b.js +303 -0
  118. package/dist/esm/app-globals-0f993ce5.js +3 -0
  119. package/dist/esm/css-shim-b3f2ee8d.js +4 -0
  120. package/dist/esm/dom-665d6011.js +73 -0
  121. package/dist/esm/filter-item-type.enum-61fbf80a.js +12 -0
  122. package/dist/esm/index-2b4d2d14.js +3262 -0
  123. package/dist/esm/index-f1d3e4da.js +2384 -0
  124. package/dist/esm/loader.js +19 -3
  125. package/dist/esm/polyfills/css-shim.js +1 -1
  126. package/dist/esm/sankhyablocks.js +117 -5
  127. package/dist/esm/shadow-css-b18e99d7.js +387 -0
  128. package/dist/esm/snk-application.entry.js +692 -140
  129. package/dist/esm/snk-crud.entry.js +66 -0
  130. package/dist/esm/snk-data-unit.entry.js +276 -0
  131. package/dist/esm/snk-filter-bar.entry.js +274 -0
  132. package/dist/esm/snk-filter-binary-select.entry.js +43 -0
  133. package/dist/esm/snk-filter-detail.entry.js +45 -0
  134. package/dist/esm/snk-filter-item.entry.js +150 -0
  135. package/dist/esm/snk-filter-list.entry.js +87 -0
  136. package/dist/esm/snk-filter-multi-select.entry.js +19 -0
  137. package/dist/esm/snk-filter-number.entry.js +20 -0
  138. package/dist/esm/snk-filter-period.entry.js +33 -0
  139. package/dist/esm/snk-filter-search.entry.js +40 -0
  140. package/dist/esm/snk-filter-text.entry.js +18 -0
  141. package/dist/esm/snk-form.entry.js +129 -0
  142. package/dist/esm/snk-grid.entry.js +75 -0
  143. package/dist/esm/snk-pesquisa.entry.js +2 -2
  144. package/dist/esm/snk-taskbar.entry.js +156 -0
  145. package/dist/esm/taskbar-elements-35d64ff9.js +90 -0
  146. package/dist/esm/taskbar-processor-aa6772c9.js +45 -0
  147. package/dist/esm/teste-pesquisa.entry.js +2 -2
  148. package/dist/sankhyablocks/SnkMessageBuilder-a7da466b.js +303 -0
  149. package/dist/sankhyablocks/app-globals-0f993ce5.js +3 -0
  150. package/dist/sankhyablocks/css-shim-b3f2ee8d.js +4 -0
  151. package/dist/sankhyablocks/dom-665d6011.js +73 -0
  152. package/dist/sankhyablocks/filter-item-type.enum-61fbf80a.js +12 -0
  153. package/dist/sankhyablocks/index-2b4d2d14.js +3262 -0
  154. package/dist/sankhyablocks/index-f1d3e4da.js +2384 -0
  155. package/dist/sankhyablocks/index.esm.js +1 -0
  156. package/dist/sankhyablocks/sankhyablocks.esm.js +129 -1
  157. package/dist/sankhyablocks/shadow-css-b18e99d7.js +387 -0
  158. package/dist/sankhyablocks/snk-application.entry.js +8148 -0
  159. package/dist/sankhyablocks/snk-crud.entry.js +66 -0
  160. package/dist/sankhyablocks/snk-data-unit.entry.js +276 -0
  161. package/dist/sankhyablocks/snk-filter-bar.entry.js +274 -0
  162. package/dist/sankhyablocks/snk-filter-binary-select.entry.js +43 -0
  163. package/dist/sankhyablocks/snk-filter-detail.entry.js +45 -0
  164. package/dist/sankhyablocks/snk-filter-item.entry.js +150 -0
  165. package/dist/sankhyablocks/snk-filter-list.entry.js +87 -0
  166. package/dist/sankhyablocks/snk-filter-multi-select.entry.js +19 -0
  167. package/dist/sankhyablocks/snk-filter-number.entry.js +20 -0
  168. package/dist/sankhyablocks/snk-filter-period.entry.js +33 -0
  169. package/dist/sankhyablocks/snk-filter-search.entry.js +40 -0
  170. package/dist/sankhyablocks/snk-filter-text.entry.js +18 -0
  171. package/dist/sankhyablocks/snk-form.entry.js +129 -0
  172. package/dist/sankhyablocks/snk-grid.entry.js +75 -0
  173. package/dist/sankhyablocks/snk-pesquisa.entry.js +311 -0
  174. package/dist/sankhyablocks/snk-taskbar.entry.js +156 -0
  175. package/dist/sankhyablocks/taskbar-elements-35d64ff9.js +90 -0
  176. package/dist/sankhyablocks/taskbar-processor-aa6772c9.js +45 -0
  177. package/dist/sankhyablocks/teste-pesquisa.entry.js +33 -0
  178. package/dist/types/components/snk-application/errorhandler/snk-error-handler.d.ts +1 -0
  179. package/dist/types/components/snk-application/snk-application.d.ts +145 -15
  180. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-binary-select.d.ts +12 -0
  181. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-multi-select.d.ts +7 -0
  182. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-number.d.ts +7 -0
  183. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-period.d.ts +14 -0
  184. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-search.d.ts +12 -0
  185. package/dist/types/components/snk-filter-bar/filter-item/editors/snk-filter-text.d.ts +7 -0
  186. package/dist/types/components/snk-filter-bar/filter-item/filter-item-type.enum.d.ts +9 -0
  187. package/dist/types/components/snk-filter-bar/filter-item/snk-filter-detail.d.ts +14 -0
  188. package/dist/types/components/snk-filter-bar/filter-list/snk-filter-list.d.ts +40 -0
  189. package/dist/types/components/snk-filter-bar/snk-filter-bar.d.ts +51 -0
  190. package/dist/types/components/snk-taskbar/elements/taskbar-elements.d.ts +29 -0
  191. package/dist/types/components/snk-taskbar/processor/taskbar-processor.d.ts +12 -0
  192. package/dist/types/components/snk-taskbar/snk-taskbar.d.ts +84 -0
  193. package/dist/types/components.d.ts +696 -8
  194. package/dist/types/lib/http/data-fetcher/DataFetcher.d.ts +7 -6
  195. package/dist/types/lib/http/data-fetcher/fetchers/dataunit-fetcher.d.ts +2 -0
  196. package/dist/types/lib/http/data-fetcher/fetchers/filter-bar-config-fetcher.d.ts +6 -0
  197. package/dist/types/lib/http/data-fetcher/fetchers/grid-config-fetcher.d.ts +1 -1
  198. package/dist/types/lib/http/data-fetcher/fetchers/totals-fetcher.d.ts +8 -0
  199. package/dist/types/lib/index.d.ts +1 -0
  200. package/dist/types/lib/message/SnkMessageBuilder.d.ts +42 -0
  201. package/dist/types/lib/message/resources/snk-data-unit.msg.d.ts +2 -0
  202. package/dist/types/lib/message/resources/snk-filter-bar.msg.d.ts +2 -0
  203. package/dist/types/lib/message/resources/snk-form.msg.d.ts +2 -0
  204. package/dist/types/lib/message/resources/snk-taskbar.msg.d.ts +2 -0
  205. package/dist/types/stencil-public-runtime.d.ts +15 -4
  206. package/loader/package.json +1 -0
  207. package/package.json +5 -5
  208. package/react/components.d.ts +0 -2
  209. package/react/components.js +0 -2
  210. package/react/components.js.map +1 -1
  211. package/dist/cjs/index-1133bc2a.js +0 -1235
  212. package/dist/esm/index-ffda6382.js +0 -1208
  213. package/dist/sankhyablocks/p-2a7b4cb3.entry.js +0 -1
  214. package/dist/sankhyablocks/p-9520d78a.entry.js +0 -1
  215. package/dist/sankhyablocks/p-98e8490d.entry.js +0 -69
  216. package/dist/sankhyablocks/p-edcb9d8e.js +0 -2
@@ -0,0 +1,353 @@
1
+ import { h, Host } from '@stencil/core';
2
+ import { ApplicationContext, DataType, ErrorException, ObjectUtils } from '@sankhyalabs/core';
3
+ import FilterItemType from './filter-item/filter-item-type.enum';
4
+ import { toString } from '@sankhyalabs/core/dist/dataunit/metadata/DataType';
5
+ const PERSONALIZED_FILTER = "PERSONALIZED_FILTER";
6
+ const DEFAULT_FILTER = "DEFAULT_FILTER";
7
+ const CLEAR_ALL_FILTERS = "CLEAR_ALL_FILTERS";
8
+ export class SnkFilterBar {
9
+ constructor() {
10
+ this._updateSequence = [];
11
+ this._calculateSortIndex = (item) => {
12
+ let index = item.hardFixed ? 1000000 : 0;
13
+ //campos Hard Fixed não variam a ordem
14
+ if (!item.hardFixed) {
15
+ index += item.fixed ? 100000 : 0;
16
+ index += item.value == undefined ? 0 : 10000;
17
+ index += this._updateSequence.lastIndexOf(item.id) + 1;
18
+ }
19
+ return index;
20
+ };
21
+ this._filtersComparator = (a, b) => {
22
+ return this._calculateSortIndex(b) - this._calculateSortIndex(a);
23
+ };
24
+ }
25
+ /**
26
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
27
+ * através de um pequeno modulo na estrutura da aplicação:
28
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
29
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-filter-bar.msg.ts"
30
+ */
31
+ getMessage(key, params) {
32
+ return this._application.messagesBuilder.getMessage(key, params);
33
+ }
34
+ getFilter(_dataUnit) {
35
+ var _a;
36
+ const filters = [];
37
+ (_a = this.filterConfig) === null || _a === void 0 ? void 0 : _a.filter(item => item.value).forEach(item => {
38
+ const filter = this.buildDUFilter(item);
39
+ if (filter) {
40
+ filters.push(filter);
41
+ }
42
+ });
43
+ return filters;
44
+ }
45
+ buildDUFilter(item) {
46
+ const { id, value, type, props, visible } = item;
47
+ if (value && visible) {
48
+ if (type === FilterItemType.BINARY_SELECT) {
49
+ const options = props.options;
50
+ const selectedOption = options.find(opt => opt.name === value);
51
+ //FIXME: ajustar o backend para não exigir parametros
52
+ return { name: id, expression: selectedOption.expression, params: [] };
53
+ }
54
+ if (type === FilterItemType.MULTI_SELECT) {
55
+ return { name: id, expression: props.expression, params: [{ name: id, dataType: DataType.TEXT, value }] };
56
+ }
57
+ if (type === FilterItemType.PERIOD) {
58
+ let { end, start } = value;
59
+ if (typeof end === "string") {
60
+ end = new Date(end);
61
+ }
62
+ if (typeof start === "string") {
63
+ start = new Date(start);
64
+ }
65
+ const params = [];
66
+ let expression;
67
+ if (end && start) {
68
+ expression = props.expression.fullfill;
69
+ params.push({ name: `${id}.START`, dataType: DataType.DATE, value: toString(DataType.DATE, start) }, { name: `${id}.END`, dataType: DataType.DATE, value: toString(DataType.DATE, end) });
70
+ }
71
+ else {
72
+ if (start) {
73
+ expression = props.expression.onlystart;
74
+ params.push({ name: id, dataType: DataType.DATE, value: toString(DataType.DATE, start) });
75
+ }
76
+ else {
77
+ expression = props.expression.onlyend;
78
+ params.push({ name: id, dataType: DataType.DATE, value: toString(DataType.DATE, end) });
79
+ }
80
+ }
81
+ return { name: id, expression, params };
82
+ }
83
+ if (type === FilterItemType.SEARCH) {
84
+ const expression = props.expression;
85
+ return { name: id, expression, params: [{ name: id, dataType: DataType.TEXT, value: toString(DataType.TEXT, value.value) }] };
86
+ }
87
+ if (type === FilterItemType.TEXT) {
88
+ const expression = props.expression;
89
+ return { name: id, expression, params: [{ name: id, dataType: DataType.TEXT, value: toString(DataType.TEXT, value) }] };
90
+ }
91
+ if (type === FilterItemType.NUMBER) {
92
+ const expression = props.expression;
93
+ return { name: id, expression, params: [{ name: id, dataType: DataType.NUMBER, value: toString(DataType.NUMBER, value) }] };
94
+ }
95
+ //No mapeamento dos outros tipos precisamos saber o tipo de dado.
96
+ }
97
+ return undefined;
98
+ }
99
+ componentWillLoad() {
100
+ this._application = ApplicationContext.getContextValue("__SNK__APPLICATION__");
101
+ if (this._application) {
102
+ this._application.getFilterBarConfig(this.configName)
103
+ .then((filters) => {
104
+ this.filterConfig = filters;
105
+ })
106
+ .catch(reason => {
107
+ throw new ErrorException(this.getMessage("snkFilterBar.failToLoadConfig"), reason);
108
+ });
109
+ }
110
+ if (this.dataUnit == undefined) {
111
+ let parent = this._element.parentElement;
112
+ while (parent) {
113
+ if (parent.tagName.toUpperCase() === "SNK-DATA-UNIT") {
114
+ const snkDataUnit = parent;
115
+ this.dataUnit = snkDataUnit.dataUnit;
116
+ if (this.dataUnit) {
117
+ this.dataUnit.addFilterProvider(this);
118
+ }
119
+ else {
120
+ snkDataUnit.addEventListener("dataUnitReady", (evt) => {
121
+ this.dataUnit = evt.detail;
122
+ this.dataUnit.addFilterProvider(this);
123
+ });
124
+ }
125
+ break;
126
+ }
127
+ }
128
+ parent = parent.parentElement;
129
+ }
130
+ else {
131
+ this.dataUnit.addFilterProvider(this);
132
+ }
133
+ }
134
+ getFilterItems() {
135
+ const pinnedItems = [];
136
+ const unpinnedItems = [];
137
+ this.filterConfig
138
+ .filter(item => item.visible)
139
+ .sort((a, b) => this._filtersComparator(a, b))
140
+ .forEach((item, index) => {
141
+ const filterItem = (h("snk-filter-item", { id: `filter-${item.id}`, config: this.normalizeItem(item), class: index > 0 ? "ez-padding-left--medium" : "", getMessage: (key, props) => this.getMessage(key, props), key: item.id }));
142
+ if (item.fixed || item.hardFixed) {
143
+ pinnedItems.push(filterItem);
144
+ }
145
+ else {
146
+ unpinnedItems.push(filterItem);
147
+ }
148
+ return filterItem;
149
+ });
150
+ const elements = [];
151
+ elements.push(...pinnedItems);
152
+ if (pinnedItems.length > 0 && unpinnedItems.length > 0) {
153
+ elements.push(h("hr", { class: "ez-divider-vertical ez-divider--dark ez-margin-left--medium snk-filter-bar__divider" }));
154
+ }
155
+ elements.push(...unpinnedItems);
156
+ return elements;
157
+ }
158
+ calculateUpdateSequence(item) {
159
+ if (item) {
160
+ this._updateSequence = this._updateSequence.filter(itemId => item.id !== itemId);
161
+ this._updateSequence.push(item.id);
162
+ }
163
+ }
164
+ filterChangeListener(evt) {
165
+ this.updateFilter(evt.detail);
166
+ }
167
+ normalizeItem(item) {
168
+ const normalized = Object.assign({}, item);
169
+ const optionals = ["props", "value", "hardFixed", "fixed"];
170
+ optionals.forEach(prop => {
171
+ if (normalized[prop] == undefined) {
172
+ delete normalized[prop];
173
+ }
174
+ });
175
+ if (item.value === "") {
176
+ delete item.value;
177
+ }
178
+ return normalized;
179
+ }
180
+ updateFilter(newItem, clear = false) {
181
+ let needLoad = false;
182
+ let updated = false;
183
+ this.filterConfig = this.filterConfig.map(item => {
184
+ if (clear) {
185
+ if (item.value != undefined) {
186
+ updated = true;
187
+ needLoad = true;
188
+ }
189
+ return Object.assign(Object.assign({}, item), { value: undefined });
190
+ }
191
+ else {
192
+ if (item.id === newItem.id) {
193
+ const normalizedOne = this.normalizeItem(item);
194
+ const normalizedTwo = this.normalizeItem(newItem);
195
+ updated = ObjectUtils.objectToString(normalizedOne) != ObjectUtils.objectToString(normalizedTwo);
196
+ needLoad = ObjectUtils.objectToString(normalizedOne.value) !== ObjectUtils.objectToString(normalizedTwo.value);
197
+ return newItem;
198
+ }
199
+ }
200
+ return item;
201
+ });
202
+ if (needLoad) {
203
+ this.dataUnit.loadData();
204
+ }
205
+ if (updated) {
206
+ this.calculateUpdateSequence(newItem);
207
+ this._application.saveFilterBarConfig(this.filterConfig, this.configName);
208
+ }
209
+ return needLoad;
210
+ }
211
+ getAddListItems() {
212
+ const hiddenItems = this.filterConfig
213
+ .filter(item => !item.visible)
214
+ .sort(this._filtersComparator);
215
+ return hiddenItems.map(filter => {
216
+ return { name: filter.id, label: filter.label, kind: "FILTER", iconName: null };
217
+ }).concat([
218
+ { name: PERSONALIZED_FILTER, label: this.getMessage("snkFilterBar.customFilter"), iconName: "tune", kind: "FOOTER" },
219
+ { name: DEFAULT_FILTER, label: this.getMessage("snkFilterBar.defaultFilter"), iconName: "configuration", kind: "FOOTER" }
220
+ ]);
221
+ }
222
+ getActiveClass() {
223
+ const filterApplied = this.filterConfig.filter(item => item.value != undefined).length > 0;
224
+ return filterApplied ? "sc-snk-filter-bar snk-filter-bar__filter-list-items-button--active" : "";
225
+ }
226
+ getAppliedListItems() {
227
+ const appliedItems = this.filterConfig
228
+ .filter(item => item.value != undefined)
229
+ .sort(this._filtersComparator);
230
+ return appliedItems.map(filter => {
231
+ return { name: filter.id, label: filter.label, kind: "FILTER", iconName: null };
232
+ }).concat([
233
+ { name: CLEAR_ALL_FILTERS, label: this.getMessage("snkFilterBar.clearAllFilters"), iconName: "cleaning", kind: "FOOTER" }
234
+ ]);
235
+ }
236
+ addFilterHandler(itemName) {
237
+ const filterItem = this.filterConfig.find(currentFilter => currentFilter.id === itemName);
238
+ if (filterItem) {
239
+ this.updateFilter(Object.assign(Object.assign({}, filterItem), { visible: true }));
240
+ window.requestAnimationFrame(() => {
241
+ const itemElement = this._element.querySelector("#filter-" + itemName);
242
+ if (itemElement) {
243
+ itemElement.showUp();
244
+ }
245
+ });
246
+ }
247
+ }
248
+ appliedFilterHandler(itemName) {
249
+ if (itemName === CLEAR_ALL_FILTERS) {
250
+ if (this.updateFilter(null, true)) {
251
+ this._application.info(this.getMessage("snkFilterBar.successfullyCleaned"), { iconName: "check" });
252
+ }
253
+ }
254
+ else {
255
+ const itemElement = this._element.querySelector("#filter-" + itemName);
256
+ if (itemElement) {
257
+ itemElement.showUp(true);
258
+ }
259
+ }
260
+ }
261
+ render() {
262
+ if (!this.dataUnit || !this.filterConfig || this.filterConfig.length === 0) {
263
+ return undefined;
264
+ }
265
+ return (h(Host, null, h("ez-scroller", { direction: "horizontal" }, this.getFilterItems()), h("snk-filter-list", { items: this.getAppliedListItems(), getMessage: (key, params) => this.getMessage(key, params), emptyText: this.getMessage("snkFilterBar.emptyAppliedFiltersList"), findFilterText: this.getMessage("snkFilterBar.findFilter"), iconName: "filter", class: "ez-padding-left--medium", buttonClass: this.getActiveClass(), onSnkItemSelected: evt => this.appliedFilterHandler(evt.detail) }), h("snk-filter-list", { items: this.getAddListItems(), label: this.getMessage("snkFilterBar.addFilter"), getMessage: (key, params) => this.getMessage(key, params), emptyText: this.getMessage("snkFilterBar.emptyFiltersList"), findFilterText: this.getMessage("snkFilterBar.findField"), class: "ez-padding-left--medium", onSnkItemSelected: evt => this.addFilterHandler(evt.detail) }, h("ez-icon", { slot: "leftIcon", class: "ez-padding-right--small", iconName: "plus" }))));
266
+ }
267
+ static get is() { return "snk-filter-bar"; }
268
+ static get encapsulation() { return "scoped"; }
269
+ static get originalStyleUrls() {
270
+ return {
271
+ "$": ["snk-filter-bar.css"]
272
+ };
273
+ }
274
+ static get styleUrls() {
275
+ return {
276
+ "$": ["snk-filter-bar.css"]
277
+ };
278
+ }
279
+ static get properties() {
280
+ return {
281
+ "dataUnit": {
282
+ "type": "unknown",
283
+ "mutable": true,
284
+ "complexType": {
285
+ "original": "DataUnit",
286
+ "resolved": "DataUnit",
287
+ "references": {
288
+ "DataUnit": {
289
+ "location": "import",
290
+ "path": "@sankhyalabs/core"
291
+ }
292
+ }
293
+ },
294
+ "required": false,
295
+ "optional": false,
296
+ "docs": {
297
+ "tags": [],
298
+ "text": "Recebe o DataUnit do ambiente. Se n\u00E3o for informado, procura pela refer\u00EAncia\ndo SnkDataUnit. Necess\u00E1rio para se registrar como provedor de filtros."
299
+ }
300
+ },
301
+ "configName": {
302
+ "type": "string",
303
+ "mutable": false,
304
+ "complexType": {
305
+ "original": "string",
306
+ "resolved": "string",
307
+ "references": {}
308
+ },
309
+ "required": false,
310
+ "optional": false,
311
+ "docs": {
312
+ "tags": [],
313
+ "text": "Eventualmente poderemos ter mais de uma barra de filtros. Essa propriedade\nserve para separar a configura\u00E7\u00E3o de cada uma."
314
+ },
315
+ "attribute": "config-name",
316
+ "reflect": false
317
+ },
318
+ "filterConfig": {
319
+ "type": "unknown",
320
+ "mutable": true,
321
+ "complexType": {
322
+ "original": "Array<SnkFilterItemConfig>",
323
+ "resolved": "SnkFilterItemConfig[]",
324
+ "references": {
325
+ "Array": {
326
+ "location": "global"
327
+ },
328
+ "SnkFilterItemConfig": {
329
+ "location": "import",
330
+ "path": "./filter-item/snk-filter-item"
331
+ }
332
+ }
333
+ },
334
+ "required": false,
335
+ "optional": false,
336
+ "docs": {
337
+ "tags": [],
338
+ "text": "Lista de todos os filtros dispon\u00EDveis ao usu\u00E1rio."
339
+ }
340
+ }
341
+ };
342
+ }
343
+ static get elementRef() { return "_element"; }
344
+ static get listeners() {
345
+ return [{
346
+ "name": "filterChange",
347
+ "method": "filterChangeListener",
348
+ "target": undefined,
349
+ "capture": false,
350
+ "passive": false
351
+ }];
352
+ }
353
+ }
@@ -0,0 +1,34 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ .snk-form {
6
+ position: relative;
7
+
8
+ /*public*/
9
+ padding: var(--space--large);
10
+ padding-top: var(--space--medium);
11
+ }
12
+
13
+ .snk-form__header {
14
+ position: relative;
15
+
16
+ /*public*/
17
+ padding-top: var(--space--medium);
18
+ padding-bottom: var(--space--medium);
19
+ margin-bottom: var(--space--medium);
20
+ }
21
+
22
+ .snk-form__header--fixed {
23
+ position: sticky;
24
+ top: 0;
25
+
26
+ /*public*/
27
+ background: var(--background--body);
28
+ z-index: var(--more-visible, 2);
29
+ padding-left: var(--space--large);
30
+ padding-right: var(--space--large);
31
+ margin-left: calc(var(--space--large) * -1);
32
+ margin-right: calc(var(--space--large) * -1);
33
+ width: calc(100% + (var(--space--large) * 2));
34
+ }
@@ -0,0 +1,258 @@
1
+ import { ApplicationContext } from '@sankhyalabs/core';
2
+ import { h } from '@stencil/core';
3
+ import TaskbarProcessor from '../snk-taskbar/processor/taskbar-processor';
4
+ export class SnkForm {
5
+ constructor() {
6
+ this._taskbarProcessor = new TaskbarProcessor({
7
+ "snkForm.regular": ["PREVIOUS", "NEXT", "DIVIDER", "CLONE", "REMOVE", "MORE_OPTIONS", "DIVIDER", "GRID_MODE", "INSERT"],
8
+ "snkForm.finish_edition": ["CANCEL", "SAVE"]
9
+ });
10
+ }
11
+ getFormConfig() {
12
+ return (this._dataState && this._dataState.insertionMode ? this._insertionFormConfig : this._editionFormConfig);
13
+ }
14
+ getInsertionHiddenFields(formConfig) {
15
+ const hiddenFields = [];
16
+ formConfig === null || formConfig === void 0 ? void 0 : formConfig.forEach(cfg => {
17
+ const def = this._dataUnit.getField(cfg.name);
18
+ if (def === null || def === void 0 ? void 0 : def.readOnly) {
19
+ hiddenFields.push(cfg.name);
20
+ }
21
+ });
22
+ return hiddenFields;
23
+ }
24
+ exitForm() {
25
+ if (this._dataUnit.isDirty()) {
26
+ this._dataUnit.cancelEdition({ after: () => this.exit.emit() });
27
+ }
28
+ else {
29
+ this.exit.emit();
30
+ }
31
+ }
32
+ getDisabledButtons() {
33
+ const disabled = [];
34
+ if (!this._dataState.hasPrevious) {
35
+ disabled.push("PREVIOUS");
36
+ }
37
+ if (!this._dataState.hasNext) {
38
+ disabled.push("NEXT");
39
+ }
40
+ return disabled;
41
+ }
42
+ loadInsertionConfig() {
43
+ if (this._dataUnit && this._configLoaded) {
44
+ this._insertionFormConfig = this._editionFormConfig.filter(fieldCfg => {
45
+ const def = this._dataUnit.getField(fieldCfg.name);
46
+ if (def === null || def === void 0 ? void 0 : def.readOnly) {
47
+ return false;
48
+ }
49
+ return true;
50
+ });
51
+ }
52
+ }
53
+ /**
54
+ * Conforme mecanismo de mensagens, é possível customizar as mensagens dos blocos de construção
55
+ * através de um pequeno modulo na estrutura da aplicação:
56
+ * - Criar um arquivo no seguinte caminho: /messages/appmessages.msg.js.
57
+ * Para conhecer os detalhes do módulo, vide o arquivo neste projeto "/src/lib/message/resources/snk-form.msg.ts"
58
+ */
59
+ getMessage(key) {
60
+ return this._application.messagesBuilder.getMessage(key, this.getMessageParams());
61
+ }
62
+ getMessageParams() {
63
+ var _a;
64
+ return ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.selectedRecords) ? this._dataState.selectedRecords[0] : undefined;
65
+ }
66
+ componentWillLoad() {
67
+ this._application = ApplicationContext.getContextValue("__SNK__APPLICATION__");
68
+ if (this._application) {
69
+ this._application.loadFormConfig(this.configName).then(cfg => {
70
+ this._configLoaded = true;
71
+ this._editionFormConfig = cfg;
72
+ this.loadInsertionConfig();
73
+ });
74
+ //Forçamos a carga dos acessos pra aproveitar a request inicial.
75
+ this._application.getAllAccess();
76
+ }
77
+ let parent = this._element.parentElement;
78
+ while (parent) {
79
+ if (parent.tagName.toUpperCase() === "SNK-DATA-UNIT") {
80
+ this._snkDataUnit = parent;
81
+ this._dataUnit = this._snkDataUnit.dataUnit;
82
+ this._dataState = this._snkDataUnit.dataState;
83
+ if (this._dataUnit) {
84
+ this.loadInsertionConfig();
85
+ }
86
+ else {
87
+ this._snkDataUnit.addEventListener("dataUnitReady", (evt) => {
88
+ this._dataUnit = evt.detail;
89
+ this.loadInsertionConfig();
90
+ });
91
+ }
92
+ this._snkDataUnit.addEventListener("dataStateChange", (evt) => {
93
+ this._dataState = evt.detail;
94
+ });
95
+ break;
96
+ }
97
+ parent = parent.parentElement;
98
+ }
99
+ }
100
+ componentWillRender() {
101
+ var _a;
102
+ const taskbarId = ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "snkForm.finish_edition" : "snkForm.regular";
103
+ const disabledButtons = [];
104
+ if (!this._dataState || !this._dataState.hasPrevious) {
105
+ disabledButtons.push("PREVIOUS");
106
+ }
107
+ if (!this._dataState || !this._dataState.hasNext) {
108
+ disabledButtons.push("NEXT");
109
+ }
110
+ this._taskbarProcessor.process(taskbarId, this.taskbarManager, this._dataState, disabledButtons);
111
+ }
112
+ render() {
113
+ var _a;
114
+ if (!this._configLoaded || !this._dataUnit || !this._dataState) {
115
+ return undefined;
116
+ }
117
+ return (h("section", { class: "snk-form" }, h("div", { class: "snk-form__header snk-form__header--fixed ez-row" }, h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6", key: "formHeader" }, h("ez-button", { title: this.getMessage("snkForm.goBackTitle"), mode: "icon", iconName: "arrow_back", class: "ez-padding-right--medium", size: "small", onClick: () => this.exitForm() }), h("h1", { class: "ez-title ez-title--primary ez-title--xlarge ez-align--middle" }, this.getMessage("snkForm.title"))), h("div", { class: "ez-col ez-col--sd-6 ez-col--tb-6 ez-align--right" }, h("snk-taskbar", { key: "formTaskbar", buttons: this._taskbarProcessor.buttons, disabledButtons: this._taskbarProcessor.disabledButtons, customButtons: this._taskbarProcessor.customButtons, actionsList: this.actionsList, primaryButton: ((_a = this._dataState) === null || _a === void 0 ? void 0 : _a.isDirty) ? "SAVE" : "INSERT", dataUnit: this._dataUnit }))), h("section", null, h("div", { class: "ez-row" }, h("div", { class: "ez-col ez-col--sd-12" }, h("ez-form", { key: "ezForm" + this._snkDataUnit.entityName, dataUnit: this._dataUnit, config: this.getFormConfig(), recordsValidator: this.recordsValidator }))))));
118
+ }
119
+ static get is() { return "snk-form"; }
120
+ static get encapsulation() { return "scoped"; }
121
+ static get originalStyleUrls() {
122
+ return {
123
+ "$": ["snk-form.css"]
124
+ };
125
+ }
126
+ static get styleUrls() {
127
+ return {
128
+ "$": ["snk-form.css"]
129
+ };
130
+ }
131
+ static get properties() {
132
+ return {
133
+ "configName": {
134
+ "type": "string",
135
+ "mutable": false,
136
+ "complexType": {
137
+ "original": "string",
138
+ "resolved": "string",
139
+ "references": {}
140
+ },
141
+ "required": false,
142
+ "optional": false,
143
+ "docs": {
144
+ "tags": [],
145
+ "text": "Nome usado para guardar/recuperar as configura\u00E7\u00F5es do formul\u00E1rio"
146
+ },
147
+ "attribute": "config-name",
148
+ "reflect": false
149
+ },
150
+ "recordsValidator": {
151
+ "type": "unknown",
152
+ "mutable": false,
153
+ "complexType": {
154
+ "original": "RecordValidator",
155
+ "resolved": "RecordValidator",
156
+ "references": {
157
+ "RecordValidator": {
158
+ "location": "import",
159
+ "path": "@sankhyalabs/ezui/dist/types/components/ez-form/ez-form"
160
+ }
161
+ }
162
+ },
163
+ "required": false,
164
+ "optional": false,
165
+ "docs": {
166
+ "tags": [],
167
+ "text": "Validador respons\u00E1vel por checar a integridade das informa\u00E7\u00F5es do registro"
168
+ }
169
+ },
170
+ "actionsList": {
171
+ "type": "unknown",
172
+ "mutable": false,
173
+ "complexType": {
174
+ "original": "Array<Action>",
175
+ "resolved": "Action[]",
176
+ "references": {
177
+ "Array": {
178
+ "location": "global"
179
+ },
180
+ "Action": {
181
+ "location": "import",
182
+ "path": "../snk-taskbar/snk-taskbar"
183
+ }
184
+ }
185
+ },
186
+ "required": false,
187
+ "optional": false,
188
+ "docs": {
189
+ "tags": [],
190
+ "text": "Lista de a\u00E7\u00F5es que devem ser usadas no bot\u00E3o \"Mais op\u00E7\u00F5es\""
191
+ }
192
+ },
193
+ "taskbarManager": {
194
+ "type": "unknown",
195
+ "mutable": false,
196
+ "complexType": {
197
+ "original": "TaskbarManager",
198
+ "resolved": "TaskbarManager",
199
+ "references": {
200
+ "TaskbarManager": {
201
+ "location": "import",
202
+ "path": "../snk-taskbar/snk-taskbar"
203
+ }
204
+ }
205
+ },
206
+ "required": false,
207
+ "optional": false,
208
+ "docs": {
209
+ "tags": [],
210
+ "text": "Gerenciador das barras de tarefas. \u00C9 poss\u00EDvel determinar bot\u00F5es espec\u00EDficos\nou mesmo gerenciar o estado dos bot\u00F5es."
211
+ }
212
+ }
213
+ };
214
+ }
215
+ static get states() {
216
+ return {
217
+ "_dataUnit": {},
218
+ "_configLoaded": {},
219
+ "_dataState": {},
220
+ "_editionFormConfig": {},
221
+ "_insertionFormConfig": {}
222
+ };
223
+ }
224
+ static get events() {
225
+ return [{
226
+ "method": "exit",
227
+ "name": "exit",
228
+ "bubbles": true,
229
+ "cancelable": true,
230
+ "composed": true,
231
+ "docs": {
232
+ "tags": [],
233
+ "text": "Emitido quando o bot\u00E3o de voltar \u00E9 acionado"
234
+ },
235
+ "complexType": {
236
+ "original": "void",
237
+ "resolved": "void",
238
+ "references": {}
239
+ }
240
+ }, {
241
+ "method": "actionClick",
242
+ "name": "actionClick",
243
+ "bubbles": true,
244
+ "cancelable": true,
245
+ "composed": true,
246
+ "docs": {
247
+ "tags": [],
248
+ "text": "Emitido sempre que houver click de bot\u00E3o ou a\u00E7\u00E3o"
249
+ },
250
+ "complexType": {
251
+ "original": "string",
252
+ "resolved": "string",
253
+ "references": {}
254
+ }
255
+ }];
256
+ }
257
+ static get elementRef() { return "_element"; }
258
+ }
@@ -0,0 +1,18 @@
1
+ .snk-grid__container{
2
+ display: flex;
3
+ height: 100%;
4
+ width: 100%;
5
+ }
6
+
7
+ .snk-grid__header{
8
+ display: flex;
9
+ flex-wrap: nowrap;
10
+ width: 100%;
11
+ }
12
+
13
+ .snk-grid__filter-bar{
14
+ width: 100%;
15
+ }
16
+ .snk-grid__header-divider{
17
+ margin-bottom: var(--space--small);
18
+ }