@ssplib/react-components 0.0.295 → 0.0.296

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 (139) hide show
  1. package/components/detalhes/Category.d.ts +1 -0
  2. package/components/detalhes/Category.js +14 -0
  3. package/components/detalhes/Field.d.ts +1 -0
  4. package/components/detalhes/Field.js +42 -0
  5. package/components/detalhes/FieldLabel.d.ts +1 -0
  6. package/components/detalhes/FieldLabel.js +28 -0
  7. package/components/detalhes/File.d.ts +1 -0
  8. package/components/detalhes/File.js +62 -0
  9. package/components/form/checkbox/CheckBox.js +18 -0
  10. package/components/form/checkbox/CheckBoxAdditional.d.ts +1 -0
  11. package/components/form/checkbox/CheckBoxAdditional.js +95 -0
  12. package/components/form/checkbox/CheckBoxWarning.js +43 -0
  13. package/components/form/checkbox/RequiredCheckBoxValidator.d.ts +1 -0
  14. package/components/form/checkbox/RequiredCheckBoxValidator.js +85 -0
  15. package/components/form/date/DatePicker.d.ts +1 -0
  16. package/components/form/date/DatePicker.js +105 -0
  17. package/components/form/date/GenericDatePicker.d.ts +1 -0
  18. package/components/form/date/GenericDatePicker.js +105 -0
  19. package/components/form/date/TimePicker.d.ts +1 -0
  20. package/components/form/date/TimePicker.js +82 -0
  21. package/components/form/file/DropFileUpload.d.ts +1 -0
  22. package/components/form/file/DropFileUpload.js +226 -0
  23. package/components/form/file/FileUpload.d.ts +1 -0
  24. package/components/form/file/FileUpload.js +200 -0
  25. package/components/form/input/ActiveInput.js +33 -0
  26. package/components/form/input/AutoComplete.d.ts +1 -0
  27. package/components/form/input/AutoComplete.js +69 -0
  28. package/components/form/input/FetchAutoComplete.d.ts +1 -0
  29. package/components/form/input/FetchAutoComplete.js +134 -0
  30. package/components/form/input/FixedAutoComplete.d.ts +1 -0
  31. package/components/form/input/FixedAutoComplete.js +83 -0
  32. package/components/form/input/GenericFetchAutoComplete.d.ts +1 -0
  33. package/components/form/input/GenericFetchAutoComplete.js +132 -0
  34. package/components/form/input/GenericInput.js +168 -0
  35. package/components/form/input/GenericMaskInput.js +79 -0
  36. package/components/form/input/GenericMultInput.d.ts +1 -0
  37. package/components/form/input/GenericMultInput.js +67 -0
  38. package/components/form/input/Input.js +168 -0
  39. package/components/form/input/MaskInput.js +78 -0
  40. package/components/form/input/MultInput.d.ts +1 -0
  41. package/components/form/input/MultInput.js +67 -0
  42. package/components/form/input/OtherCheckBox.d.ts +1 -0
  43. package/components/form/input/OtherCheckBox.js +56 -0
  44. package/components/form/stepper/Stepper.js +135 -0
  45. package/components/form/stepper/StepperBlock.js +97 -0
  46. package/components/form/switch/Switch.js +54 -0
  47. package/components/form/switch/ToggleVisibility.d.ts +1 -0
  48. package/components/form/switch/ToggleVisibility.js +61 -0
  49. package/components/form/table/FilterSection.d.ts +1 -0
  50. package/components/form/table/FilterSection.js +217 -0
  51. package/components/form/table/GenericTable.js +1034 -0
  52. package/components/form/table/Table.js +514 -0
  53. package/components/form/table/TableErrorState.js +27 -0
  54. package/components/form/table/TableLoadingState.d.ts +1 -0
  55. package/components/form/table/TableLoadingState.js +39 -0
  56. package/components/form/table/types.js +2 -0
  57. package/components/form/table/utils.d.ts +1 -0
  58. package/components/form/table/utils.js +361 -0
  59. package/components/icons/icons.d.ts +1 -0
  60. package/components/icons/icons.js +24 -0
  61. package/components/map/AnimatedMarker.js +65 -0
  62. package/components/map/DraggableMarker.js +66 -0
  63. package/components/map/Map.js +23 -0
  64. package/components/map/index.d.ts +1 -0
  65. package/components/map/index.js +31 -0
  66. package/components/modal/Modal.d.ts +1 -0
  67. package/components/modal/Modal.js +105 -0
  68. package/components/navbar/NavBar.d.ts +1 -0
  69. package/components/navbar/NavBar.js +171 -0
  70. package/components/navbar/TabNavBar.d.ts +1 -0
  71. package/components/navbar/TabNavBar.js +179 -0
  72. package/components/providers/FormProvider.js +54 -0
  73. package/components/providers/KeycloakAuthProvider.d.ts +1 -0
  74. package/components/providers/KeycloakAuthProvider.js +118 -0
  75. package/components/providers/OAuthProvider.d.ts +1 -0
  76. package/components/providers/OAuthProvider.js +138 -0
  77. package/components/providers/SspComponentsProvider.d.ts +1 -0
  78. package/components/providers/SspComponentsProvider.js +18 -0
  79. package/components/utils/Bt.d.ts +1 -0
  80. package/components/utils/Bt.js +35 -0
  81. package/components/utils/CustomMenu.js +39 -0
  82. package/context/auth.d.ts +1 -0
  83. package/context/auth.js +5 -0
  84. package/context/form.js +5 -0
  85. package/index.d.ts +18 -18
  86. package/index.js +94 -0
  87. package/package.json +1 -1
  88. package/types/auth.js +2 -0
  89. package/types/form.js +31 -0
  90. package/Map-31d95a26.js +0 -2
  91. package/Map-31d95a26.js.map +0 -1
  92. package/Map-644d2f90.js +0 -2
  93. package/Map-644d2f90.js.map +0 -1
  94. package/components/form/input/OptionalInput.d.ts +0 -10
  95. package/components/loading/LinearProgress.d.ts +0 -2
  96. package/components/loading/LoadingScreen.d.ts +0 -7
  97. package/components/providers/GenericFormProvider.d.ts +0 -10
  98. package/components/teste/Teste.d.ts +0 -3
  99. package/decorators/FormBaseDecorator.d.ts +0 -2
  100. package/decorators/GenericFormBaseDecorator.d.ts +0 -2
  101. package/decorators/StepperDecorator.d.ts +0 -2
  102. package/index.cjs +0 -3
  103. package/index.cjs.map +0 -1
  104. package/index.esm.js +0 -3
  105. package/index.esm.js.map +0 -1
  106. package/stories/Autocomplete.stories.d.ts +0 -6
  107. package/stories/CheckBox.stories.d.ts +0 -6
  108. package/stories/CheckBoxWarning.stories.d.ts +0 -6
  109. package/stories/DatePicker.stories.d.ts +0 -6
  110. package/stories/DetalhesCategory.stories.d.ts +0 -6
  111. package/stories/DetalhesField.stories.d.ts +0 -6
  112. package/stories/DetalhesFieldLabel.stories.d.ts +0 -6
  113. package/stories/DetalhesFile.stories.d.ts +0 -6
  114. package/stories/DropFileUpload.stories.d.ts +0 -6
  115. package/stories/ExemploAssitirValorInput.stories.d.ts +0 -7
  116. package/stories/ExemploInputs.stories.d.ts +0 -7
  117. package/stories/ExemploTable.stories.d.ts +0 -1
  118. package/stories/ExemploValoresCompartilhados.stories.d.ts +0 -7
  119. package/stories/FetchAutocomplete.stories.d.ts +0 -6
  120. package/stories/FileUpload.stories.d.ts +0 -6
  121. package/stories/FixedAutocomplete.stories.d.ts +0 -6
  122. package/stories/GenericFetchAutocomplete.stories.d.ts +0 -6
  123. package/stories/GenericInput.stories.d.ts +0 -6
  124. package/stories/GenericTable.stories.d.ts +0 -6
  125. package/stories/Input.stories.d.ts +0 -6
  126. package/stories/LinearProgress.stories.d.ts +0 -6
  127. package/stories/LoadingScreen.stories.d.ts +0 -6
  128. package/stories/Map.stories.d.ts +0 -6
  129. package/stories/MultInput.stories.d.ts +0 -6
  130. package/stories/NavBar.stories.d.ts +0 -6
  131. package/stories/OptionalInput.stories.d.ts +0 -6
  132. package/stories/OtherCheckBox.stories.d.ts +0 -6
  133. package/stories/Stepper.stories.d.ts +0 -6
  134. package/stories/StepperBlock.stories.d.ts +0 -6
  135. package/stories/Switch.stories.d.ts +0 -6
  136. package/stories/Table.stories.d.ts +0 -4
  137. package/stories/TableWithStaticData.stories.d.ts +0 -6
  138. package/stories/Teste.stories.d.ts +0 -6
  139. package/stories/TimePicker.stories.d.ts +0 -6
@@ -0,0 +1,1034 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.GenericTable = void 0;
30
+ const icons_material_1 = require("@mui/icons-material");
31
+ const Clear_1 = __importDefault(require("@mui/icons-material/Clear"));
32
+ const FileDownload_1 = __importDefault(require("@mui/icons-material/FileDownload"));
33
+ const NavigateNextRounded_1 = __importDefault(require("@mui/icons-material/NavigateNextRounded"));
34
+ const Search_1 = __importDefault(require("@mui/icons-material/Search"));
35
+ const material_1 = require("@mui/material");
36
+ const Grid_1 = __importDefault(require("@mui/material/Grid"));
37
+ const Pagination_1 = __importDefault(require("@mui/material/Pagination"));
38
+ const TextField_1 = __importDefault(require("@mui/material/TextField"));
39
+ const Typography_1 = __importDefault(require("@mui/material/Typography"));
40
+ const x_date_pickers_1 = require("@mui/x-date-pickers");
41
+ const AdapterDayjs_1 = require("@mui/x-date-pickers/AdapterDayjs");
42
+ const dayjs_1 = __importDefault(require("dayjs"));
43
+ const jszip_1 = __importDefault(require("jszip"));
44
+ const lodash_get_1 = __importDefault(require("lodash.get"));
45
+ const react_1 = __importStar(require("react"));
46
+ const auth_1 = require("../../../context/auth");
47
+ const Modal_1 = require("../../modal/Modal");
48
+ const CustomMenu_1 = __importDefault(require("../../utils/CustomMenu"));
49
+ function removePunctuationAndAccents(text) {
50
+ // Remove accents and diacritics
51
+ const normalizedText = text.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
52
+ // Remove punctuation marks
53
+ const cleanedText = normalizedText.replace(/[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]/g, '');
54
+ return cleanedText;
55
+ }
56
+ function formatarString(str) {
57
+ const value = typeof str !== 'string' ? str.toString() : str;
58
+ return value
59
+ .normalize('NFD')
60
+ .replace(/[\u0300-\u036f]/g, '')
61
+ .toLowerCase()
62
+ .trim();
63
+ }
64
+ let startData = [];
65
+ let isExpandAll = false;
66
+ let localTableName = '';
67
+ let orderAsc = false;
68
+ let filtersFuncData = {};
69
+ let localTableNameCache = '';
70
+ /**
71
+ * Tabela cujo dados devem ser passados via props
72
+ */
73
+ function GenericTable({ mediaQueryLG, columns, emptyMsg = {
74
+ user: 'Nenhum dado encontrado',
75
+ public: 'Nenhum dado encontrado',
76
+ }, dataPath = '', tableName = 'Dados', csv, columnSize, action, useKC = true, statusKeyName = '', csvExcludeKeys = [], csvExcludeKeysCSV = [], csvExcludeKeysAll = [], csvCustomKeyNames = {}, csvExcludeValidate = (key, value) => false, csvButtonTitle = 'Salvar .CSV', csvNoZipText = 'Salvar .CSV', csvAllButtonTitle = 'Salvar todos em CSV', removeQuotes = false, normalize = false, csvShowAllButton = false, csvWithoutZip = false, itemCount = 10, csvUpper = false, csvZipFileNamesKey = '', generateCsvZip = false, hideTitleCSV = false, csvExcludeUpper = [], multipleDataPath = '', expandTextMaxLength = 50, collapsedSize = 53, customMargin = 4, customMarginMobile = 0, filtersFunc, filters = [], orderBy = [], customErrorMsg = undefined, customTableStyle = {}, id, initialData = null, isLoading, }) {
77
+ var _a;
78
+ const [error, setError] = (0, react_1.useState)(null);
79
+ const [data, setData] = (0, react_1.useState)(initialData);
80
+ const { user, userLoaded } = (0, react_1.useContext)(auth_1.AuthContext);
81
+ const [list, setList] = (0, react_1.useState)([]);
82
+ const [listClone, setListClone] = (0, react_1.useState)([]);
83
+ //numero de items pra ser mostrado
84
+ const [itemsCount, setItemsCount] = (0, react_1.useState)(itemCount);
85
+ const [currentPage, setCurrentPage] = (0, react_1.useState)(0);
86
+ const [paginationCount, setPagCount] = (0, react_1.useState)(1);
87
+ const [listPage, setListPage] = (0, react_1.useState)(1);
88
+ const [oldSelectState, setOldSelectState] = (0, react_1.useState)('');
89
+ const [expandObj, setExpandObj] = (0, react_1.useState)({});
90
+ const [showExpandObj, setShowExpandObj] = (0, react_1.useState)({});
91
+ const [showExpandObjOnExited, setShowExpandObjOnExited] = (0, react_1.useState)({});
92
+ const [filterKey, setFilterKey] = (0, react_1.useState)('filterKey');
93
+ const theme = (0, material_1.useTheme)();
94
+ const isSmall = (0, material_1.useMediaQuery)(theme.breakpoints.only('xs'));
95
+ const filterContainer = (0, react_1.useRef)(null);
96
+ const lg = (0, material_1.useMediaQuery)(theme.breakpoints.up(2000));
97
+ localTableName = `tableFilter_${id}`;
98
+ localTableNameCache = `tableFilterCache_${id}`;
99
+ filtersFuncData = filtersFunc !== null && filtersFunc !== void 0 ? filtersFunc : {};
100
+ if (!localStorage.getItem(localTableNameCache))
101
+ localStorage.setItem(localTableNameCache, JSON.stringify(filters));
102
+ if (localStorage.getItem(localTableNameCache) !== JSON.stringify(filters)) {
103
+ localStorage.setItem(localTableNameCache, JSON.stringify(filters));
104
+ localStorage.removeItem(localTableName);
105
+ }
106
+ const getCount = (0, react_1.useCallback)((countData) => {
107
+ if (countData.length <= 0)
108
+ return 1;
109
+ let count = countData.length / itemsCount;
110
+ count = count < 1 ? 1 : count;
111
+ return Math.ceil(count);
112
+ }, [itemsCount]);
113
+ const getData = (0, react_1.useCallback)((dt) => {
114
+ if (Array.isArray(dt))
115
+ return dt;
116
+ if (typeof dt === 'object')
117
+ return (0, lodash_get_1.default)(dt, dataPath);
118
+ }, []);
119
+ (0, react_1.useEffect)(() => {
120
+ if (error || !getData(data))
121
+ return;
122
+ const value = getData(data);
123
+ setList(value);
124
+ setListClone(value);
125
+ setPagCount(getCount(value));
126
+ if (localStorage.getItem(localTableName)) {
127
+ filtrar(JSON.parse(localStorage.getItem(localTableName)));
128
+ }
129
+ }, [itemsCount, data, getCount, error]);
130
+ (0, react_1.useEffect)(() => {
131
+ setCurrentPage(listPage - 1);
132
+ }, [listPage]);
133
+ const onPaginationChange = (0, react_1.useCallback)((e, page) => {
134
+ setListPage(page);
135
+ }, []);
136
+ function onInputChange(e) {
137
+ console.log(listClone);
138
+ const searchValue = e.target.value;
139
+ if (searchValue === '') {
140
+ setList(listClone);
141
+ setPagCount(getCount(getData(list)));
142
+ return;
143
+ }
144
+ const listData = getData(list);
145
+ const newList = [];
146
+ listData.forEach((x) => {
147
+ const dataStr = [];
148
+ Object.keys(x).map((key) => {
149
+ var _a;
150
+ let value = (_a = (0, lodash_get_1.default)(x, key, '')) !== null && _a !== void 0 ? _a : '';
151
+ if (typeof value === 'number')
152
+ value = value.toString();
153
+ if (typeof value !== 'string')
154
+ return;
155
+ dataStr.push(value);
156
+ });
157
+ if (dataStr.length <= 0)
158
+ return;
159
+ let exists = false;
160
+ dataStr.forEach((key) => {
161
+ const status = ['P', 'C', 'A', 'R', 'L', 'PA'];
162
+ if (status.includes(key)) {
163
+ switch (key) {
164
+ case 'P':
165
+ if ('em analise'.includes(searchValue.toLowerCase())) {
166
+ exists = true;
167
+ }
168
+ return;
169
+ case 'C':
170
+ if ('cancelado'.includes(searchValue.toLowerCase())) {
171
+ exists = true;
172
+ }
173
+ return;
174
+ case 'A':
175
+ if ('cadastrado'.includes(searchValue.toLowerCase())) {
176
+ exists = true;
177
+ }
178
+ return;
179
+ case 'R':
180
+ if ('reprovado'.includes(searchValue.toLowerCase())) {
181
+ exists = true;
182
+ }
183
+ return;
184
+ case 'L':
185
+ if ('licenciado'.includes(searchValue.toLowerCase())) {
186
+ exists = true;
187
+ }
188
+ return;
189
+ case 'PA':
190
+ if ('pré aprovado'.includes(searchValue.toLowerCase()) || 'pre aprovado'.includes(searchValue.toLowerCase())) {
191
+ exists = true;
192
+ }
193
+ return;
194
+ case 'FP':
195
+ if ('fora do prazo'.includes(searchValue.toLowerCase())) {
196
+ exists = true;
197
+ }
198
+ return;
199
+ }
200
+ }
201
+ if (removePunctuationAndAccents(key.toLowerCase()).includes(removePunctuationAndAccents(searchValue.toLowerCase()))) {
202
+ exists = true;
203
+ }
204
+ });
205
+ if (!exists)
206
+ return;
207
+ newList.push(x);
208
+ });
209
+ setList(newList);
210
+ setPagCount(getCount(newList));
211
+ setCurrentPage(0);
212
+ setListPage(1);
213
+ }
214
+ const getMaxItems = (0, react_1.useCallback)(() => {
215
+ const start = currentPage * itemsCount;
216
+ return list.slice(start, start + itemsCount);
217
+ }, [list, itemsCount, currentPage]);
218
+ function defineCSVCells(key, cell) {
219
+ if (typeof cell === 'string') {
220
+ let item = csvUpper && !csvExcludeUpper.includes(key) ? cell.toUpperCase() : cell;
221
+ item = normalize ? item.normalize('NFD').replace(/[\u0300-\u036f]/g, '') : item;
222
+ return removeQuotes ? `${item}` : `"${item}"`;
223
+ }
224
+ else if (typeof cell === 'object' && !Array.isArray(cell) && cell !== null) {
225
+ let strItemAsObject = transformArrayObjectInString(cell).slice(1, -1); // key: label (Ex.: jsNaturezaEvento)
226
+ let item = csvUpper && !csvExcludeUpper.includes(key) ? strItemAsObject.toUpperCase() : strItemAsObject;
227
+ item = normalize ? item.normalize('NFD').replace(/[\u0300-\u036f]/g, '') : item;
228
+ return removeQuotes ? `${item}` : `"${item}"`;
229
+ }
230
+ return cell;
231
+ }
232
+ // download file
233
+ const downloadCSV = (0, react_1.useCallback)((e, zip = false) => {
234
+ e.preventDefault();
235
+ if (list.length <= 0)
236
+ return;
237
+ const originalKeys = Object.keys(list[0]);
238
+ if (generateCsvZip && zip) {
239
+ const keys = originalKeys.filter((k) => !csvExcludeKeys.includes(k));
240
+ const header = keys.map((k) => (csvCustomKeyNames[k] ? csvCustomKeyNames[k] : k)).join(',') + '\n';
241
+ const zip = new jszip_1.default();
242
+ const obj = {};
243
+ list.forEach((x) => {
244
+ if (!obj[x[csvZipFileNamesKey]])
245
+ obj[x[csvZipFileNamesKey]] = [];
246
+ obj[x[csvZipFileNamesKey]].push(x);
247
+ });
248
+ Object.keys(obj).forEach((objKey) => {
249
+ const values = [];
250
+ obj[objKey].forEach((x) => {
251
+ let include = true;
252
+ originalKeys.forEach((k) => {
253
+ //verificar se pode incluir
254
+ if (csvExcludeValidate(k, x[k])) {
255
+ include = false;
256
+ }
257
+ });
258
+ if (include) {
259
+ const value = keys
260
+ .map((k) => {
261
+ if (typeof x[k] === 'string') {
262
+ let item = csvUpper ? x[k].toUpperCase() : x[k];
263
+ item = normalize ? item.normalize('NFD').replace(/[\u0300-\u036f]/g, '') : item;
264
+ return removeQuotes ? `${item}` : `"${item}"`;
265
+ }
266
+ else if (typeof x[k] === 'object' && !Array.isArray(x[k]) && x[k] !== null) {
267
+ let strItemAsObject = transformArrayObjectInString(x[k]).slice(1, -1); // k: label (Ex.: jsNaturezaEvento)
268
+ let item = csvUpper && !csvExcludeUpper.includes(k) ? strItemAsObject.toUpperCase() : strItemAsObject;
269
+ item = normalize ? item.normalize('NFD').replace(/[\u0300-\u036f]/g, '') : item;
270
+ return removeQuotes ? `${item}` : `"${item}"`;
271
+ }
272
+ return x[k];
273
+ })
274
+ .join(',');
275
+ values.push(value);
276
+ }
277
+ });
278
+ const csvData = hideTitleCSV ? values.join('\n') : '\uFEFF' + header + values.join('\n');
279
+ if (values.length > 0)
280
+ zip.file(`${objKey.normalize('NFD').replace(/[\u0300-\u036f]/g, '')}.csv`, csvData);
281
+ });
282
+ // // download
283
+ var link = window.document.createElement('a');
284
+ zip.generateAsync({ type: 'base64' }).then((base) => {
285
+ link.setAttribute('href', 'data:application/zip;base64,' + base);
286
+ link.setAttribute('download', `${csv === null || csv === void 0 ? void 0 : csv.fileName}.zip`);
287
+ link.click();
288
+ });
289
+ }
290
+ else {
291
+ let keys = originalKeys
292
+ .filter((k) => !csvExcludeKeysCSV.includes(k))
293
+ .map((k) => {
294
+ if (k === multipleDataPath) {
295
+ return 'hrTermino';
296
+ }
297
+ return k;
298
+ });
299
+ if (multipleDataPath !== '') {
300
+ keys = ['dtInicio', 'hrInicio', ...keys];
301
+ }
302
+ const header = keys.map((k) => (csvCustomKeyNames[k] ? csvCustomKeyNames[k] : k)).join(',') + '\n';
303
+ const values = [];
304
+ list.forEach((x) => {
305
+ let include = true;
306
+ originalKeys.forEach((k) => {
307
+ //verificar se pode incluir
308
+ if (csvExcludeValidate(k, x[k])) {
309
+ include = false;
310
+ }
311
+ });
312
+ if (include) {
313
+ const value = keys
314
+ .map((k) => {
315
+ if (k === 'dtInicio')
316
+ return '{dtInicio}';
317
+ else if (k === 'hrInicio')
318
+ return '{hrInicio}';
319
+ else if (k === 'hrTermino')
320
+ return '{hrTermino}';
321
+ else {
322
+ if (typeof x[k] === 'string') {
323
+ let item = csvUpper && !csvExcludeUpper.includes(k) ? x[k].toUpperCase() : x[k];
324
+ item = normalize ? item.normalize('NFD').replace(/[\u0300-\u036f]/g, '') : item;
325
+ return removeQuotes ? `${item}` : `"${item}"`;
326
+ }
327
+ else if (typeof x[k] === 'object' && !Array.isArray(x[k]) && x[k] !== null) {
328
+ let strItemAsObject = transformArrayObjectInString(x[k]).slice(1, -1); // k: label (Ex.: jsNaturezaEvento)
329
+ let item = csvUpper && !csvExcludeUpper.includes(k) ? strItemAsObject.toUpperCase() : strItemAsObject;
330
+ item = normalize ? item.normalize('NFD').replace(/[\u0300-\u036f]/g, '') : item;
331
+ return removeQuotes ? `${item}` : `"${item}"`;
332
+ }
333
+ return x[k];
334
+ }
335
+ })
336
+ .join(',');
337
+ if (multipleDataPath !== '') {
338
+ const dates = x[multipleDataPath];
339
+ if (dates) {
340
+ ;
341
+ dates.forEach((d) => {
342
+ values.push(value.replace('{dtInicio}', d.dtInicio).replace('{hrInicio}', d.hrInicio).replace('{hrTermino}', d.hrTermino));
343
+ });
344
+ }
345
+ }
346
+ else {
347
+ values.push(value);
348
+ }
349
+ }
350
+ });
351
+ const csvData = header + values.join('\n');
352
+ // download
353
+ var link = window.document.createElement('a');
354
+ link.setAttribute('href', 'data:text/csv;charset=utf-8,%EF%BB%BF' + encodeURI(csvData));
355
+ link.setAttribute('download', `${csv === null || csv === void 0 ? void 0 : csv.fileName}.csv`);
356
+ link.click();
357
+ }
358
+ }, [list]);
359
+ function transformArrayObjectInString(o) {
360
+ let arrString = [];
361
+ if (typeof o === 'object' && !Array.isArray(o) && o !== null) {
362
+ for (let [key, value] of Object.entries(o)) {
363
+ if (typeof value === 'object' && !Array.isArray(value) && value !== null) {
364
+ arrString.push(key + ': ' + transformArrayObjectInString(value));
365
+ }
366
+ else {
367
+ if (value) {
368
+ // Is true
369
+ arrString.push(key);
370
+ }
371
+ }
372
+ }
373
+ }
374
+ return '[' + arrString.join(' - ') + ']';
375
+ }
376
+ const downloadCSVAll = (0, react_1.useCallback)((e) => {
377
+ e.preventDefault();
378
+ if (list.length <= 0)
379
+ return;
380
+ const keys = Object.keys(list[0]).filter((k) => !csvExcludeKeysAll.includes(k));
381
+ const header = keys.join(',') + '\n';
382
+ const values = list
383
+ .map((x) => {
384
+ return keys
385
+ .map((k) => {
386
+ if (k === 'tbRa')
387
+ return x[k]['NO_CIDADE'];
388
+ if (k === 'rlEventoData')
389
+ return `${x[k][0]['DT_INICIO']} - ${x[k][0]['HR_INICIO']}`;
390
+ if (typeof x[k] === 'string') {
391
+ let item = csvUpper && !csvExcludeUpper.includes(k) ? x[k].toUpperCase() : x[k];
392
+ item = normalize ? item.normalize('NFD').replace(/[\u0300-\u036f]/g, '') : item;
393
+ return removeQuotes ? `${item}` : `"${item}"`;
394
+ }
395
+ else if (typeof x[k] === 'object' && !Array.isArray(x[k]) && x[k] !== null) {
396
+ let strItemAsObject = transformArrayObjectInString(x[k]).slice(1, -1); // k: label (Ex.: jsNaturezaEvento)
397
+ let item = csvUpper && !csvExcludeUpper.includes(k) ? strItemAsObject.toUpperCase() : strItemAsObject;
398
+ item = normalize ? item.normalize('NFD').replace(/[\u0300-\u036f]/g, '') : item;
399
+ return removeQuotes ? `${item}` : `"${item}"`;
400
+ }
401
+ return x[k];
402
+ })
403
+ .join(',');
404
+ })
405
+ .join('\n');
406
+ const csvData = header + values;
407
+ // download
408
+ var link = window.document.createElement('a');
409
+ link.setAttribute('href', 'data:text/csv;charset=utf-8,%EF%BB%BF' + encodeURI(csvData));
410
+ link.setAttribute('download', `${csv === null || csv === void 0 ? void 0 : csv.fileName}.csv`);
411
+ link.click();
412
+ }, [list]);
413
+ function expandAll() {
414
+ let obj = {};
415
+ for (let i = 0; i < itemCount; i++) {
416
+ obj[i] = !isExpandAll;
417
+ }
418
+ setShowExpandObjOnExited(obj);
419
+ setExpandObj(obj);
420
+ isExpandAll = !isExpandAll;
421
+ }
422
+ function reset() {
423
+ setList(startData);
424
+ setListClone(startData);
425
+ setPagCount(getCount(startData));
426
+ setCurrentPage(0);
427
+ setListPage(1);
428
+ localStorage.removeItem(localTableName);
429
+ setFilterKey(new Date().getTime().toString());
430
+ }
431
+ function filtrar(filterData) {
432
+ if (!startData)
433
+ return;
434
+ let currentData = JSON.parse(JSON.stringify(startData));
435
+ filterData
436
+ .filter((dt) => dt.value || (dt.operator === 'entre' && (dt.value || dt.value2)))
437
+ .forEach((dt) => {
438
+ let filteredData = [];
439
+ switch (dt.type) {
440
+ case 'number':
441
+ switch (dt.operator) {
442
+ case 'igual':
443
+ currentData.forEach((cd) => {
444
+ const value = Number((0, lodash_get_1.default)(cd, dt.keyName, ''));
445
+ if (value === Number(dt.value)) {
446
+ filteredData.push(cd);
447
+ }
448
+ });
449
+ break;
450
+ case 'maior que':
451
+ currentData.forEach((cd) => {
452
+ const value = Number((0, lodash_get_1.default)(cd, dt.keyName, ''));
453
+ if (value > Number(dt.value)) {
454
+ filteredData.push(cd);
455
+ }
456
+ });
457
+ break;
458
+ case 'menor que':
459
+ currentData.forEach((cd) => {
460
+ const value = Number((0, lodash_get_1.default)(cd, dt.keyName, ''));
461
+ if (value < Number(dt.value)) {
462
+ filteredData.push(cd);
463
+ }
464
+ });
465
+ break;
466
+ }
467
+ break;
468
+ case 'string':
469
+ console.log('ata: ', dt.operator);
470
+ switch (dt.operator) {
471
+ case 'igual':
472
+ currentData.forEach((cd) => {
473
+ const value = (0, lodash_get_1.default)(cd, dt.keyName, '');
474
+ if (dt.useList) {
475
+ if (formatarString(value) === formatarString(dt.value.id)) {
476
+ filteredData.push(cd);
477
+ }
478
+ }
479
+ else {
480
+ if (formatarString(value) === formatarString(dt.value)) {
481
+ filteredData.push(cd);
482
+ }
483
+ }
484
+ });
485
+ break;
486
+ case 'contem':
487
+ currentData.forEach((cd) => {
488
+ const value = (0, lodash_get_1.default)(cd, dt.keyName, '');
489
+ if (!value)
490
+ return;
491
+ if (dt.useList) {
492
+ if (formatarString(value).includes(formatarString(dt.value.id))) {
493
+ filteredData.push(cd);
494
+ }
495
+ }
496
+ else {
497
+ if (formatarString(value).includes(formatarString(dt.value))) {
498
+ filteredData.push(cd);
499
+ }
500
+ }
501
+ });
502
+ break;
503
+ case 'tem um dos':
504
+ currentData.forEach((cd) => {
505
+ const value = (0, lodash_get_1.default)(cd, dt.keyName, '');
506
+ if (!value)
507
+ return;
508
+ if (dt.value.map((x) => formatarString(x.id)).includes(formatarString(value))) {
509
+ filteredData.push(cd);
510
+ }
511
+ });
512
+ break;
513
+ }
514
+ break;
515
+ case 'date':
516
+ switch (dt.operator) {
517
+ case 'data exata':
518
+ currentData.forEach((cd) => {
519
+ const value = (0, dayjs_1.default)((0, lodash_get_1.default)(cd, dt.keyName, ''), 'DD/MM/YYYY');
520
+ if (!value.isValid())
521
+ return;
522
+ if (value.isSame((0, dayjs_1.default)(dt.value, 'DD/MM/YYYY'))) {
523
+ filteredData.push(cd);
524
+ }
525
+ });
526
+ break;
527
+ case 'entre':
528
+ const dateA = dt.value ? (0, dayjs_1.default)(dt.value, 'DD/MM/YYYY') : (0, dayjs_1.default)('01/01/2000', 'DD/MM/YYYY');
529
+ const dateB = dt.value2 ? (0, dayjs_1.default)(dt.value2, 'DD/MM/YYYY') : (0, dayjs_1.default)('31/12/2030', 'DD/MM/YYYY');
530
+ currentData.forEach((cd) => {
531
+ const value = (0, dayjs_1.default)((0, lodash_get_1.default)(cd, dt.keyName, ''), 'DD/MM/YYYY');
532
+ if ((value.isAfter(dateA) || value.isSame(dateA)) && (value.isBefore(dateB) || value.isSame(dateB))) {
533
+ filteredData.push(cd);
534
+ }
535
+ });
536
+ break;
537
+ }
538
+ break;
539
+ case 'dates':
540
+ switch (dt.operator) {
541
+ case 'data inicio':
542
+ currentData.forEach((cd) => {
543
+ var _a;
544
+ const dates = (_a = filtersFuncData[dt.customFunc]((0, lodash_get_1.default)(cd, dt.keyName, ''))) !== null && _a !== void 0 ? _a : [];
545
+ if (dates.length <= 0)
546
+ return;
547
+ var inicioDate = dates[0];
548
+ var inicioValue = (0, dayjs_1.default)(inicioDate, 'DD/MM/YYYY');
549
+ if (inicioValue.isSame((0, dayjs_1.default)(dt.value, 'DD/MM/YYYY'))) {
550
+ filteredData.push(cd);
551
+ }
552
+ });
553
+ break;
554
+ case 'data fim':
555
+ currentData.forEach((cd) => {
556
+ var _a;
557
+ const dates = (_a = filtersFuncData[dt.customFunc]((0, lodash_get_1.default)(cd, dt.keyName, ''))) !== null && _a !== void 0 ? _a : [];
558
+ if (dates.length <= 0)
559
+ return;
560
+ var fimDate = dates[dates.length - 1];
561
+ var fimValue = (0, dayjs_1.default)(fimDate, 'DD/MM/YYYY');
562
+ if (fimValue.isSame((0, dayjs_1.default)(dt.value, 'DD/MM/YYYY'))) {
563
+ filteredData.push(cd);
564
+ }
565
+ });
566
+ break;
567
+ case 'tem a data':
568
+ currentData.forEach((cd) => {
569
+ var _a;
570
+ const dates = (_a = filtersFuncData[dt.customFunc]((0, lodash_get_1.default)(cd, dt.keyName, ''))) !== null && _a !== void 0 ? _a : [];
571
+ if (dates.includes(dt.value)) {
572
+ filteredData.push(cd);
573
+ }
574
+ });
575
+ break;
576
+ case 'entre':
577
+ const dateA = dt.value ? (0, dayjs_1.default)(dt.value, 'DD/MM/YYYY') : (0, dayjs_1.default)('01/01/2000', 'DD/MM/YYYY');
578
+ const dateB = dt.value2 ? (0, dayjs_1.default)(dt.value2, 'DD/MM/YYYY') : (0, dayjs_1.default)('31/12/2030', 'DD/MM/YYYY');
579
+ currentData.forEach((cd) => {
580
+ var _a;
581
+ const dates = (_a = filtersFuncData[dt.customFunc]((0, lodash_get_1.default)(cd, dt.keyName, ''))) !== null && _a !== void 0 ? _a : [];
582
+ let isBetween = false;
583
+ dates.forEach((dtStr) => {
584
+ if (isBetween)
585
+ return;
586
+ const dt = (0, dayjs_1.default)(dtStr, 'DD/MM/YYYY');
587
+ if (!dt.isValid())
588
+ return;
589
+ if ((dt.isAfter(dateA) || dt.isSame(dateA)) && (dt.isBefore(dateB) || dt.isSame(dateB))) {
590
+ isBetween = true;
591
+ }
592
+ });
593
+ if (isBetween) {
594
+ filteredData.push(cd);
595
+ }
596
+ });
597
+ break;
598
+ }
599
+ break;
600
+ }
601
+ currentData = filteredData;
602
+ });
603
+ setList(currentData);
604
+ setPagCount(getCount(currentData));
605
+ setCurrentPage(0);
606
+ setListPage(1);
607
+ localStorage.setItem(localTableName, JSON.stringify(filterData));
608
+ setListClone(currentData);
609
+ }
610
+ function ordenar(order) {
611
+ let oldList = [...list];
612
+ oldList.sort((a, b) => {
613
+ const aValue = order.type === 'string' ? (0, lodash_get_1.default)(a, order.key, '') : Number((0, lodash_get_1.default)(a, order.key, 0));
614
+ const bValue = order.type === 'string' ? (0, lodash_get_1.default)(b, order.key, '') : Number((0, lodash_get_1.default)(b, order.key, 0));
615
+ if (orderAsc) {
616
+ if (aValue < bValue)
617
+ return -1;
618
+ if (aValue > bValue)
619
+ return 1;
620
+ }
621
+ else {
622
+ if (aValue > bValue)
623
+ return -1;
624
+ if (aValue < bValue)
625
+ return 1;
626
+ }
627
+ return 0;
628
+ });
629
+ orderAsc = !orderAsc;
630
+ setList(oldList);
631
+ }
632
+ // effect usado quando for mostrar "VER MAIS" e "VER MENOS"
633
+ (0, react_1.useEffect)(() => {
634
+ const start = currentPage * itemsCount;
635
+ const newList = list.slice(start, start + itemsCount);
636
+ let obj = {};
637
+ newList.forEach((x, index) => {
638
+ columns.forEach((c) => {
639
+ var _a;
640
+ obj[index] = obj[index] === true ? true : ((_a = (0, lodash_get_1.default)(x, c === null || c === void 0 ? void 0 : c.keyName, '')) !== null && _a !== void 0 ? _a : 'Não Informado').toString().length >= expandTextMaxLength;
641
+ });
642
+ });
643
+ setShowExpandObj(obj);
644
+ }, [list, itemsCount, currentPage]);
645
+ (0, react_1.useEffect)(() => {
646
+ console.log(filterContainer.current);
647
+ }, [filterContainer.current]);
648
+ if (error)
649
+ return (react_1.default.createElement(material_1.Box, { bgcolor: '#fff2c8', color: '#3e3129', padding: 2, marginX: 2, borderRadius: 4 },
650
+ react_1.default.createElement(Typography_1.default, { fontSize: 24, textAlign: 'center', fontFamily: 'Inter' },
651
+ error.status === 403 && 'Acesso negado',
652
+ error.status === 500 && (react_1.default.createElement(material_1.Box, { fontWeight: 500, textAlign: 'center' },
653
+ react_1.default.createElement(icons_material_1.ReportProblemRounded, { sx: { transform: 'scale(2)', marginY: 1, fill: '#3e3129' } }),
654
+ react_1.default.createElement(material_1.Box, null, customErrorMsg ? (customErrorMsg) : (react_1.default.createElement(react_1.default.Fragment, null,
655
+ "N\u00E3o foi poss\u00EDvel se conectar ao servidor no momento. Por favor, aguarde alguns instantes e tente de novo.",
656
+ react_1.default.createElement("br", null),
657
+ react_1.default.createElement("br", null),
658
+ "Caso precise de ajuda, entre em contato pelo email: ",
659
+ react_1.default.createElement("strong", null, "cdes@ssp.df.gov.br")))))))));
660
+ if (isLoading)
661
+ return (react_1.default.createElement(material_1.Stack, { sx: { height: '100%', width: '100%' }, justifyContent: 'center', alignItems: 'center' },
662
+ react_1.default.createElement(material_1.Box, { width: '100%' },
663
+ react_1.default.createElement(material_1.Stack, { direction: 'row', justifyContent: 'center', alignItems: 'center', justifyItems: 'center', spacing: 2, marginY: 4 },
664
+ react_1.default.createElement(icons_material_1.PendingRounded, { sx: { fill: '#5e5e5e' } }),
665
+ react_1.default.createElement(Typography_1.default, { fontWeight: 600, fontSize: 20, textTransform: 'capitalize', textAlign: 'center', color: '#5e5e5e' },
666
+ "Carregando ",
667
+ tableName)),
668
+ react_1.default.createElement(material_1.LinearProgress, { color: 'inherit' }),
669
+ Array(10)
670
+ .fill('')
671
+ .map((x) => (react_1.default.createElement(material_1.Stack, { direction: {
672
+ xs: 'column',
673
+ md: 'row',
674
+ }, spacing: {
675
+ xs: 3,
676
+ md: 1,
677
+ }, justifyContent: 'space-between', paddingY: 8, borderBottom: '1px solid #cacaca' }, Array(7)
678
+ .fill(0)
679
+ .map((y) => (react_1.default.createElement(material_1.Box, null,
680
+ react_1.default.createElement(material_1.Skeleton, { width: 60 }),
681
+ react_1.default.createElement(material_1.Skeleton, { width: 120 }))))))))));
682
+ if (!userLoaded && useKC)
683
+ return react_1.default.createElement(material_1.LinearProgress, null);
684
+ return (react_1.default.createElement(react_1.default.Fragment, null,
685
+ react_1.default.createElement(material_1.Box, Object.assign({ marginX: isSmall ? customMarginMobile : customMargin, bgcolor: 'white', p: 2, borderRadius: 6 }, customTableStyle),
686
+ react_1.default.createElement(material_1.Stack, { spacing: 1.5, direction: { xs: 'column', md: 'row' } },
687
+ react_1.default.createElement(material_1.Stack, { spacing: 1.5, direction: { xs: 'column', md: 'row' }, height: { md: '40px', xs: 'inherit' }, width: '100%' },
688
+ react_1.default.createElement(TextField_1.default, { InputProps: {
689
+ startAdornment: react_1.default.createElement(Search_1.default, { sx: { marginRight: 1, fill: '#c0c0c0' } }),
690
+ sx: {
691
+ '.MuiOutlinedInput-notchedOutline': { border: 'none' },
692
+ },
693
+ }, sx: {
694
+ border: 'solid 1px #CBD5E1',
695
+ backgroundColor: '#F8FAFC',
696
+ borderRadius: '50px',
697
+ maxWidth: '600px',
698
+ }, size: 'small', onChange: onInputChange, fullWidth: true, placeholder: `Pesquisar ${tableName}` }),
699
+ filters.length > 0 && (react_1.default.createElement(material_1.Button, { startIcon: react_1.default.createElement(icons_material_1.FilterAlt, null), variant: 'contained', onClick: (e) => Modal_1.MODAL.open(react_1.default.createElement(CriarFiltro, { key: filterKey, reset: reset, filtrar: filtrar, baseFilters: [...filters], filters: localStorage.getItem(localTableName) ? JSON.parse(localStorage.getItem(localTableName)) : [...filters] })), sx: {
700
+ borderRadius: 3,
701
+ paddingX: '24px',
702
+ paddingY: '8px',
703
+ backgroundColor: '#208FE8',
704
+ textTransform: 'capitalize',
705
+ } },
706
+ react_1.default.createElement(material_1.Stack, { direction: 'row', borderRadius: 5, padding: 0 },
707
+ react_1.default.createElement("span", null, "Filtrar")))),
708
+ react_1.default.createElement(material_1.Stack, { direction: 'row', spacing: 1 },
709
+ react_1.default.createElement(CustomMenu_1.default, { data: orderBy.map((x) => ({
710
+ name: x.label,
711
+ onClick: () => ordenar(x),
712
+ })), btProps: {
713
+ startIcon: react_1.default.createElement(icons_material_1.KeyboardArrowDown, null),
714
+ fullWidth: true,
715
+ } }, "Ordenar"),
716
+ react_1.default.createElement(material_1.Button, { variant: 'contained', fullWidth: true, startIcon: isExpandAll ? react_1.default.createElement(icons_material_1.KeyboardArrowUp, null) : react_1.default.createElement(icons_material_1.KeyboardArrowDown, null), sx: {
717
+ backgroundColor: '#637082',
718
+ ':hover': {
719
+ backgroundColor: '#3c4757',
720
+ },
721
+ textTransform: 'capitalize',
722
+ borderRadius: 3,
723
+ padding: {
724
+ md: '0px 8px',
725
+ },
726
+ }, onClick: expandAll }, isExpandAll ? 'Recolher' : 'Expandir'))),
727
+ react_1.default.createElement(material_1.Stack, { alignItems: 'end', width: { xs: '100%', md: '20%' }, direction: { xs: 'row', md: 'column' }, spacing: { xs: 1, md: 0 } },
728
+ react_1.default.createElement(Typography_1.default, { fontWeight: 600, textAlign: 'end' },
729
+ "Registro de ",
730
+ tableName,
731
+ "s"),
732
+ react_1.default.createElement(material_1.Stack, { justifyContent: 'center' },
733
+ react_1.default.createElement(Typography_1.default, null,
734
+ "Exibindo ",
735
+ currentPage * itemsCount + 1,
736
+ "-",
737
+ currentPage * itemsCount + 1 + getMaxItems().length - 1,
738
+ " de ",
739
+ list.length)))),
740
+ localStorage.getItem(localTableName) && (react_1.default.createElement(material_1.Box, { display: 'inline-flex', flexWrap: 'wrap', padding: 0.5, borderRadius: 4, marginBottom: 1 }, JSON.parse((_a = localStorage.getItem(localTableName)) !== null && _a !== void 0 ? _a : '[]')
741
+ .filter((x) => x.value || (x.operator === 'entre' && (x.value || x.value2)))
742
+ .map((x) => (react_1.default.createElement(material_1.Stack, { direction: 'row', spacing: 1, bgcolor: '#4e85c1', color: 'white', width: 'fit-content', paddingY: 0.5, borderRadius: 2, paddingX: 1, m: 0.5 },
743
+ react_1.default.createElement(Typography_1.default, { fontWeight: 700 }, x.label),
744
+ react_1.default.createElement(Typography_1.default, { fontStyle: 'italic' }, x.operator),
745
+ react_1.default.createElement(Typography_1.default, { bgcolor: 'white', borderRadius: 2, paddingX: 1, color: 'black' }, Array.isArray(x.value)
746
+ ? x.value.map((x) => x.label).join(' - ')
747
+ : typeof x.value === 'object'
748
+ ? x.value.label
749
+ : x.operator === 'entre'
750
+ ? `${x.value ? x.value : 'Antes'} e ${x.value2 ? x.value2 : 'Depois'}`
751
+ : x.value.toString()),
752
+ react_1.default.createElement(material_1.IconButton, { onClick: (e) => {
753
+ var _a;
754
+ let currentValue = JSON.parse((_a = localStorage.getItem(localTableName)) !== null && _a !== void 0 ? _a : '[]');
755
+ currentValue = currentValue.map((item) => {
756
+ if (item.label === x.label) {
757
+ return Object.assign(Object.assign(Object.assign({}, item), { value: '' }), (item.value2 ? { value2: '' } : {}));
758
+ }
759
+ return item;
760
+ });
761
+ filtrar(currentValue);
762
+ }, size: 'small', sx: {
763
+ padding: 0,
764
+ } },
765
+ react_1.default.createElement(Clear_1.default, { sx: {
766
+ fill: 'white',
767
+ } }))))))),
768
+ react_1.default.createElement(material_1.Stack, { spacing: 0.2 }, getMaxItems().length <= 0 ? (react_1.default.createElement(material_1.Stack, { sx: { backgroundColor: '#E2E8F0', padding: 2, marginX: { xs: 2, md: 0 } }, justifyContent: 'center', alignItems: 'center' },
769
+ react_1.default.createElement(Typography_1.default, { fontSize: 21, fontFamily: 'Inter', fontWeight: 600, textAlign: 'center' }, user ? emptyMsg.user : emptyMsg.public))) : (getMaxItems().map((x, index) => (react_1.default.createElement(material_1.Paper, { key: index, sx: {
770
+ padding: 0.5,
771
+ backgroundColor: index % 2 === 0 ? '#F8FAFC' : 'white',
772
+ paddingTop: 2,
773
+ borderTop: 'solid 1.5px #E2E8F0',
774
+ position: 'relative',
775
+ }, elevation: 0 },
776
+ react_1.default.createElement(Grid_1.default, { container: true, spacing: isSmall ? 2 : 0, paddingX: 2, rowSpacing: 2 },
777
+ columns.map((c) => {
778
+ var _a, _b;
779
+ return (react_1.default.createElement(Grid_1.default, { key: String(c === null || c === void 0 ? void 0 : c.keyName) + index, item: true, xs: 12, md: lg ? (12 / columnSize) * (!!c.size ? c.size : 1) : mediaQueryLG ? mediaQueryLG.all : (12 / columnSize) * (!!c.size ? c.size : 1), sx: {
780
+ overflow: 'hidden',
781
+ } },
782
+ react_1.default.createElement(material_1.Box, { sx: { width: 'max-content', paddingX: 1 } },
783
+ react_1.default.createElement(Typography_1.default, { fontSize: 16, fontWeight: 700, color: '#1E293B', fontFamily: 'Inter' }, c.title)),
784
+ react_1.default.createElement(material_1.Box, { paddingLeft: 1, position: 'relative' },
785
+ react_1.default.createElement(material_1.Collapse, { in: expandObj[index] === true, collapsedSize: collapsedSize, onExited: (e) => setShowExpandObjOnExited((s) => (Object.assign(Object.assign({}, s), { [index]: false }))) },
786
+ react_1.default.createElement(material_1.Box, { sx: {
787
+ wordWrap: 'break-word',
788
+ color: '#1E293B',
789
+ fontSize: 16,
790
+ }, fontFamily: 'Inter' },
791
+ react_1.default.createElement(material_1.Box, null, c.customComponent ? (c.customComponent((0, lodash_get_1.default)(x, c.keyName), x)) : (react_1.default.createElement(material_1.Box, { color: 'transparent', sx: { pointerEvents: 'none', userSelect: 'none' } }, (0, lodash_get_1.default)(x, c.keyName, '')))),
792
+ react_1.default.createElement(material_1.Box, { position: 'absolute', top: 0 }, c.customComponent ? (c.customComponent((0, lodash_get_1.default)(x, c.keyName), x)) : (react_1.default.createElement(react_1.default.Fragment, null, showExpandObjOnExited[index] ? ((0, lodash_get_1.default)(x, c === null || c === void 0 ? void 0 : c.keyName, '')) : ((_a = (0, lodash_get_1.default)(x, c === null || c === void 0 ? void 0 : c.keyName, '')) !== null && _a !== void 0 ? _a : '').toString().length >= expandTextMaxLength ? (react_1.default.createElement(react_1.default.Fragment, null, ((_b = (0, lodash_get_1.default)(x, c === null || c === void 0 ? void 0 : c.keyName, '')) !== null && _b !== void 0 ? _b : '').toString().substring(0, expandTextMaxLength) + '...')) : ((0, lodash_get_1.default)(x, c === null || c === void 0 ? void 0 : c.keyName, ''))))))))));
793
+ }),
794
+ react_1.default.createElement(Grid_1.default, { item: true, xs: 12, md: lg ? 12 / columnSize : mediaQueryLG ? mediaQueryLG.action : 12 / columnSize },
795
+ react_1.default.createElement(material_1.Stack, { direction: 'row', alignItems: 'center', justifyContent: isSmall ? 'start' : 'flex-end', sx: { height: '100%', paddingBottom: isSmall ? 2 : 0 } }, action(x))),
796
+ showExpandObj[index] && (react_1.default.createElement(material_1.Stack, { direction: 'row', justifyContent: 'flex-end', bottom: 0, width: '100%' },
797
+ react_1.default.createElement(material_1.Button, { onClick: (e) => {
798
+ setExpandObj((s) => (Object.assign(Object.assign({}, s), { [index]: !s[index] })));
799
+ setShowExpandObjOnExited((s) => (Object.assign(Object.assign({}, s), { [index]: true })));
800
+ }, sx: {
801
+ padding: 0,
802
+ color: '#637082',
803
+ textTransform: 'capitalize',
804
+ }, startIcon: expandObj[index] ? react_1.default.createElement(icons_material_1.ExpandLess, null) : react_1.default.createElement(icons_material_1.ExpandMore, null) }, expandObj[index] ? 'Ver Menos' : 'Ver Mais'))))))))),
805
+ getMaxItems().length > 0 && (react_1.default.createElement(material_1.Stack, { padding: 1, direction: {
806
+ xs: 'column',
807
+ md: 'row',
808
+ }, spacing: {
809
+ xs: 2,
810
+ md: 0,
811
+ }, justifyContent: 'space-between', alignItems: 'center' }, csv && (react_1.default.createElement(material_1.Stack, { direction: {
812
+ xs: 'column',
813
+ md: 'row',
814
+ }, justifyContent: 'flex-end', spacing: 1 },
815
+ csvWithoutZip && (react_1.default.createElement(material_1.Button, { startIcon: react_1.default.createElement(FileDownload_1.default, null), variant: 'contained', size: 'small', onClick: downloadCSV, sx: { backgroundColor: '#5a88b0', marginRight: { xs: 2, md: 0 }, width: { xs: '100%', md: 'fit-content' } } }, csvNoZipText)),
816
+ csvShowAllButton && (react_1.default.createElement(material_1.Button, { startIcon: react_1.default.createElement(FileDownload_1.default, null), variant: 'contained', size: 'small', onClick: downloadCSVAll, sx: { backgroundColor: '#64748B', marginRight: { xs: 2, md: 0 }, width: { xs: '100%', md: 'fit-content' } } }, csvAllButtonTitle)),
817
+ react_1.default.createElement(material_1.Button, { startIcon: react_1.default.createElement(FileDownload_1.default, null), variant: 'contained', size: 'small', onClick: (e) => downloadCSV(e, true), sx: { backgroundColor: '#22C55E', marginRight: { xs: 2, md: 0 }, width: { xs: '100%', md: 'fit-content' } } }, csvButtonTitle)))))),
818
+ react_1.default.createElement(material_1.Stack, { direction: 'row', justifyContent: 'center', paddingY: 1, paddingTop: 2 },
819
+ react_1.default.createElement(material_1.Stack, { direction: 'row', justifyContent: 'center', alignItems: 'center', spacing: 2 },
820
+ react_1.default.createElement(material_1.Button, { onClick: (e) => setListPage((s) => {
821
+ if (s > 1) {
822
+ return s - 1;
823
+ }
824
+ return 1;
825
+ }), sx: { bgcolor: 'white', borderRadius: '50px', height: '40px', width: '40px', minWidth: 0, border: 'solid 1px #E2E8F0' } },
826
+ react_1.default.createElement(NavigateNextRounded_1.default, { sx: { transform: 'scale(1.5) scaleX(-1)' } })),
827
+ react_1.default.createElement(Pagination_1.default, { renderItem: (item) => {
828
+ if (item.type === 'page')
829
+ return (react_1.default.createElement(material_1.Button, { onClick: item.onClick, sx: Object.assign(Object.assign({ fontWeight: 600 }, (item.selected
830
+ ? {
831
+ bgcolor: '#33B55D',
832
+ color: 'white',
833
+ }
834
+ : {
835
+ color: '#1E293B',
836
+ })), { borderRadius: '100%', padding: 0, margin: 0, minWidth: 0, width: '40px', height: '40px', marginX: 0.25 }) }, item.page));
837
+ if (!['next', 'previous', 'page'].includes(item.type))
838
+ return react_1.default.createElement(material_1.PaginationItem, Object.assign({}, item));
839
+ }, count: paginationCount, siblingCount: isSmall ? 0 : 6, size: 'large', onChange: onPaginationChange, page: listPage, shape: 'circular', variant: 'outlined', sx: {
840
+ '.MuiPagination-ul': {
841
+ backgroundColor: 'white',
842
+ border: 'solid 1px #E2E8F0',
843
+ borderRadius: '50px',
844
+ paddingX: 0.25,
845
+ paddingY: 0.5,
846
+ },
847
+ } }),
848
+ react_1.default.createElement(material_1.Button, { onClick: (e) => setListPage((s) => {
849
+ if (s < paginationCount) {
850
+ return s + 1;
851
+ }
852
+ return paginationCount;
853
+ }), sx: { bgcolor: 'white', borderRadius: '50px', height: '40px', width: '40px', minWidth: 0, border: 'solid 1px #E2E8F0' } },
854
+ react_1.default.createElement(NavigateNextRounded_1.default, { sx: { transform: 'scale(1.5)' } }))))));
855
+ }
856
+ exports.GenericTable = GenericTable;
857
+ function CriarFiltro({ filters, baseFilters, filtrar, reset }) {
858
+ const [data, setData] = (0, react_1.useState)(filters);
859
+ const [resetFields, setResetFields] = (0, react_1.useState)(false);
860
+ function addRule(filter) {
861
+ setData((dt) => {
862
+ return [...dt, filter];
863
+ });
864
+ }
865
+ const [anchorEl, setAnchorEl] = react_1.default.useState(null);
866
+ const open = Boolean(anchorEl);
867
+ const handleClick = (event) => {
868
+ setAnchorEl(event.currentTarget);
869
+ };
870
+ const handleClose = () => {
871
+ setAnchorEl(null);
872
+ };
873
+ return (react_1.default.createElement(material_1.Box, { width: {
874
+ xs: 'inherit',
875
+ md: 850,
876
+ } },
877
+ react_1.default.createElement(material_1.Menu, { open: open, onClose: handleClose, anchorEl: anchorEl }, baseFilters.map((x) => (react_1.default.createElement(material_1.MenuItem, { onClick: (e) => {
878
+ addRule(x);
879
+ setAnchorEl(null);
880
+ } }, x.label)))),
881
+ react_1.default.createElement(material_1.Stack, { direction: 'row', justifyContent: 'space-between' },
882
+ react_1.default.createElement(Typography_1.default, { fontWeight: 700, fontSize: 18 }, "Filtrar"),
883
+ react_1.default.createElement(material_1.Button, { startIcon: react_1.default.createElement(icons_material_1.Refresh, null), sx: {
884
+ textTransform: 'capitalize',
885
+ }, onClick: (e) => {
886
+ reset();
887
+ Modal_1.MODAL.close();
888
+ } }, "Limpar")),
889
+ react_1.default.createElement(material_1.Box, { marginBottom: 1 },
890
+ react_1.default.createElement(material_1.Alert, { severity: 'warning' }, "Preencha apenas os campos que deseja filtrar.")),
891
+ react_1.default.createElement(material_1.Stack, null, resetFields ? (data.map((d, idx) => (react_1.default.createElement(FilterRow, { filterValue: d, setReset: setResetFields, idx: idx, setDt: (valueData) => {
892
+ setData((dt) => {
893
+ let arr = [...dt];
894
+ arr[idx] = valueData;
895
+ return arr;
896
+ });
897
+ }, removeDt: () => {
898
+ setData((dt) => {
899
+ let arr = [...dt];
900
+ arr.splice(idx, 1);
901
+ return arr;
902
+ });
903
+ } })))) : (react_1.default.createElement(material_1.Box, null, data.map((d, idx) => (react_1.default.createElement(FilterRow, { filterValue: d, setReset: setResetFields, idx: idx, setDt: (valueData) => {
904
+ setData((dt) => {
905
+ let arr = [...dt];
906
+ arr[idx] = valueData;
907
+ return arr;
908
+ });
909
+ }, removeDt: () => {
910
+ setData((dt) => {
911
+ let arr = [...dt];
912
+ arr.splice(idx, 1);
913
+ return arr;
914
+ });
915
+ } })))))),
916
+ react_1.default.createElement(material_1.Stack, { direction: 'row', justifyContent: 'flex-end', marginTop: 1 },
917
+ react_1.default.createElement(material_1.Button, { variant: 'contained', color: 'success', startIcon: react_1.default.createElement(Search_1.default, null), sx: {
918
+ textTransform: 'capitalize',
919
+ }, onClick: (e) => {
920
+ filtrar(data);
921
+ Modal_1.MODAL.close();
922
+ } }, "Filtrar"))));
923
+ }
924
+ function FilterRow({ filterValue, setDt, removeDt, idx, setReset, }) {
925
+ const [currentOperator, setCurrentOperator] = (0, react_1.useState)(filterValue.operator);
926
+ const [data, setData] = (0, react_1.useState)(filterValue);
927
+ const theme = (0, material_1.useTheme)();
928
+ const isSmall = (0, material_1.useMediaQuery)(theme.breakpoints.only('xs'));
929
+ (0, react_1.useEffect)(() => {
930
+ setDt(data);
931
+ }, [data]);
932
+ return (react_1.default.createElement(material_1.Stack, { direction: 'row', alignItems: 'end', spacing: 1, width: '100%', bgcolor: idx % 2 === 0 ? '#ededed' : 'inherit', padding: 0.5, borderRadius: 2 },
933
+ !isSmall && (react_1.default.createElement(Typography_1.default, { width: '100%', alignContent: 'center', fontWeight: 600, color: '#323232' }, filterValue.label)),
934
+ react_1.default.createElement(material_1.FormControl, { sx: {
935
+ width: '100%',
936
+ } },
937
+ isSmall && react_1.default.createElement(Typography_1.default, null, filterValue.label),
938
+ react_1.default.createElement(material_1.Select, { onChange: (e) => {
939
+ const value = e.target.value;
940
+ setData((obj) => (Object.assign(Object.assign({}, obj), { operator: value, value: '' })));
941
+ setCurrentOperator(value);
942
+ }, defaultValue: currentOperator, size: 'small', sx: {
943
+ bgcolor: 'white',
944
+ }, fullWidth: true }, filterValue.operators.map((x) => (react_1.default.createElement(material_1.MenuItem, { value: x }, x))))),
945
+ react_1.default.createElement(FilterField, { filterValue: filterValue, operator: data.operator, onChange: (value, type = 'value') => {
946
+ setData((obj) => (Object.assign(Object.assign({}, obj), { [type]: value })));
947
+ } })));
948
+ }
949
+ function FilterField({ filterValue, operator, onChange }) {
950
+ switch (filterValue.type) {
951
+ case 'number':
952
+ return (react_1.default.createElement(TextField_1.default, { type: 'number', size: 'small', placeholder: 'Valor', defaultValue: filterValue.value, onChange: (e) => {
953
+ onChange(e.target.value);
954
+ }, sx: {
955
+ bgcolor: 'white',
956
+ }, fullWidth: true }));
957
+ case 'string':
958
+ if (filterValue.useList) {
959
+ switch (operator) {
960
+ case 'tem um dos':
961
+ return (react_1.default.createElement(material_1.Autocomplete, { multiple: true, id: 'tags-standard', onChange: (e, value) => {
962
+ if (value.length <= 0) {
963
+ onChange('');
964
+ return;
965
+ }
966
+ onChange(value);
967
+ }, options: filterValue.useList, defaultValue: Array.isArray(filterValue.value) ? filterValue.value : [], renderInput: (params) => react_1.default.createElement(TextField_1.default, Object.assign({}, params, { variant: 'standard', placeholder: 'Escolha os valores', fullWidth: true })), fullWidth: true }));
968
+ case 'contem':
969
+ case 'igual':
970
+ return (react_1.default.createElement(material_1.Box, { width: '100%' },
971
+ react_1.default.createElement(material_1.Autocomplete, { options: filterValue.useList, onChange: (e, value) => {
972
+ onChange(value);
973
+ }, defaultValue: typeof filterValue.value === 'object' ? filterValue.value : undefined, isOptionEqualToValue: (option, value) => option.label === value.label, renderInput: (params) => (react_1.default.createElement(TextField_1.default, Object.assign({}, params, { size: 'small', placeholder: 'Escolha um valor', fullWidth: true, sx: {
974
+ bgcolor: 'white',
975
+ } }))), fullWidth: true })));
976
+ }
977
+ }
978
+ return (react_1.default.createElement(TextField_1.default, { size: 'small', placeholder: 'Valor', defaultValue: filterValue.value, onChange: (e) => {
979
+ onChange(e.target.value);
980
+ }, sx: {
981
+ bgcolor: 'white',
982
+ }, fullWidth: true }));
983
+ case 'date':
984
+ case 'dates':
985
+ switch (operator) {
986
+ case 'data exata':
987
+ case 'data fim':
988
+ case 'data inicio':
989
+ case 'tem a data':
990
+ return (react_1.default.createElement(x_date_pickers_1.LocalizationProvider, { adapterLocale: 'pt-br', dateAdapter: AdapterDayjs_1.AdapterDayjs },
991
+ react_1.default.createElement(x_date_pickers_1.DatePicker, { format: 'DD/MM/YYYY', onChange: (dt) => {
992
+ onChange(dt.isValid() ? dt.format('DD/MM/YYYY') : '');
993
+ }, defaultValue: filterValue.value ? (0, dayjs_1.default)(filterValue.value, 'DD/MM/YYYY') : undefined, sx: {
994
+ div: {
995
+ input: {
996
+ paddingX: 2,
997
+ paddingY: 1.05,
998
+ },
999
+ },
1000
+ width: '100%',
1001
+ bgcolor: 'white',
1002
+ }, inputRef: (params) => react_1.default.createElement(TextField_1.default, Object.assign({}, params, { size: 'small', fullWidth: true })) })));
1003
+ case 'entre':
1004
+ return (react_1.default.createElement(x_date_pickers_1.LocalizationProvider, { adapterLocale: 'pt-br', dateAdapter: AdapterDayjs_1.AdapterDayjs },
1005
+ react_1.default.createElement(x_date_pickers_1.DatePicker, { format: 'DD/MM/YYYY', onChange: (dt) => {
1006
+ onChange(dt.isValid() ? dt.format('DD/MM/YYYY') : '');
1007
+ }, defaultValue: filterValue.value ? (0, dayjs_1.default)(filterValue.value, 'DD/MM/YYYY') : undefined, sx: {
1008
+ div: {
1009
+ input: {
1010
+ paddingX: 2,
1011
+ paddingY: 1.05,
1012
+ },
1013
+ },
1014
+ width: '100%',
1015
+ bgcolor: 'white',
1016
+ }, inputRef: (params) => react_1.default.createElement(TextField_1.default, Object.assign({}, params, { size: 'small', fullWidth: true })) }),
1017
+ react_1.default.createElement(x_date_pickers_1.DatePicker, { format: 'DD/MM/YYYY', onChange: (dt) => {
1018
+ onChange(dt.isValid() ? dt.format('DD/MM/YYYY') : '', 'value2');
1019
+ }, defaultValue: filterValue.value2 ? (0, dayjs_1.default)(filterValue.value2, 'DD/MM/YYYY') : undefined, sx: {
1020
+ div: {
1021
+ input: {
1022
+ paddingX: 2,
1023
+ paddingY: 1.05,
1024
+ },
1025
+ },
1026
+ width: '100%',
1027
+ bgcolor: 'white',
1028
+ }, inputRef: (params) => react_1.default.createElement(TextField_1.default, Object.assign({}, params, { size: 'small', fullWidth: true })) })));
1029
+ }
1030
+ break;
1031
+ }
1032
+ return react_1.default.createElement(react_1.default.Fragment, null);
1033
+ }
1034
+ exports.default = react_1.default.memo(GenericTable);