@ssplib/react-components 0.0.274 → 0.0.276

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.
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ import { FilterValue } from './types';
3
+ export declare function FilterMenu({ filters, baseFilters, filtrar, reset }: {
4
+ reset: () => void;
5
+ filtrar: (dt: FilterValue[]) => void;
6
+ filters: FilterValue[];
7
+ baseFilters: FilterValue[];
8
+ }): JSX.Element;
@@ -0,0 +1,217 @@
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.FilterMenu = void 0;
30
+ const icons_material_1 = require("@mui/icons-material");
31
+ const Search_1 = __importDefault(require("@mui/icons-material/Search"));
32
+ const material_1 = require("@mui/material");
33
+ const TextField_1 = __importDefault(require("@mui/material/TextField"));
34
+ const Typography_1 = __importDefault(require("@mui/material/Typography"));
35
+ const x_date_pickers_1 = require("@mui/x-date-pickers");
36
+ const AdapterDayjs_1 = require("@mui/x-date-pickers/AdapterDayjs");
37
+ const dayjs_1 = __importDefault(require("dayjs"));
38
+ const react_1 = __importStar(require("react"));
39
+ const Modal_1 = require("../../modal/Modal");
40
+ function FilterMenu({ filters, baseFilters, filtrar, reset }) {
41
+ const [data, setData] = (0, react_1.useState)(filters);
42
+ const [resetFields, setResetFields] = (0, react_1.useState)(false);
43
+ function addRule(filter) {
44
+ setData((dt) => {
45
+ return [...dt, filter];
46
+ });
47
+ }
48
+ const [anchorEl, setAnchorEl] = react_1.default.useState(null);
49
+ const open = Boolean(anchorEl);
50
+ const handleClick = (event) => {
51
+ setAnchorEl(event.currentTarget);
52
+ };
53
+ const handleClose = () => {
54
+ setAnchorEl(null);
55
+ };
56
+ return (react_1.default.createElement(material_1.Box, { width: {
57
+ xs: 'inherit',
58
+ md: 850,
59
+ } },
60
+ 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) => {
61
+ addRule(x);
62
+ setAnchorEl(null);
63
+ } }, x.label)))),
64
+ react_1.default.createElement(material_1.Stack, { direction: 'row', justifyContent: 'space-between' },
65
+ react_1.default.createElement(Typography_1.default, { fontWeight: 700, fontSize: 18 }, "Filtrar"),
66
+ react_1.default.createElement(material_1.Button, { startIcon: react_1.default.createElement(icons_material_1.Refresh, null), sx: {
67
+ textTransform: 'capitalize',
68
+ }, onClick: (e) => {
69
+ reset();
70
+ Modal_1.MODAL.close();
71
+ } }, "Limpar")),
72
+ react_1.default.createElement(material_1.Box, { marginBottom: 1 },
73
+ react_1.default.createElement(material_1.Alert, { severity: 'warning' }, "Preencha apenas os campos que deseja filtrar.")),
74
+ 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) => {
75
+ setData((dt) => {
76
+ let arr = [...dt];
77
+ arr[idx] = valueData;
78
+ return arr;
79
+ });
80
+ }, removeDt: () => {
81
+ setData((dt) => {
82
+ let arr = [...dt];
83
+ arr.splice(idx, 1);
84
+ return arr;
85
+ });
86
+ } })))) : (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) => {
87
+ setData((dt) => {
88
+ let arr = [...dt];
89
+ arr[idx] = valueData;
90
+ return arr;
91
+ });
92
+ }, removeDt: () => {
93
+ setData((dt) => {
94
+ let arr = [...dt];
95
+ arr.splice(idx, 1);
96
+ return arr;
97
+ });
98
+ } })))))),
99
+ react_1.default.createElement(material_1.Stack, { direction: 'row', justifyContent: 'flex-end', marginTop: 1 },
100
+ react_1.default.createElement(material_1.Button, { variant: 'contained', color: 'success', startIcon: react_1.default.createElement(Search_1.default, null), sx: {
101
+ textTransform: 'capitalize',
102
+ }, onClick: (e) => {
103
+ filtrar(data);
104
+ Modal_1.MODAL.close();
105
+ } }, "Filtrar"))));
106
+ }
107
+ exports.FilterMenu = FilterMenu;
108
+ function FilterRow({ filterValue, setDt, removeDt, idx, setReset, }) {
109
+ const [currentOperator, setCurrentOperator] = (0, react_1.useState)(filterValue.operator);
110
+ const [data, setData] = (0, react_1.useState)(filterValue);
111
+ const theme = (0, material_1.useTheme)();
112
+ const isSmall = (0, material_1.useMediaQuery)(theme.breakpoints.only('xs'));
113
+ (0, react_1.useEffect)(() => {
114
+ setDt(data);
115
+ }, [data]);
116
+ 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 },
117
+ !isSmall && (react_1.default.createElement(Typography_1.default, { width: '100%', alignContent: 'center', fontWeight: 600, color: '#323232' }, filterValue.label)),
118
+ react_1.default.createElement(material_1.FormControl, { sx: {
119
+ width: '100%',
120
+ } },
121
+ isSmall && react_1.default.createElement(Typography_1.default, null, filterValue.label),
122
+ react_1.default.createElement(material_1.Select, { onChange: (e) => {
123
+ const value = e.target.value;
124
+ setData((obj) => (Object.assign(Object.assign({}, obj), { operator: value, value: '' })));
125
+ setCurrentOperator(value);
126
+ }, defaultValue: currentOperator, size: 'small', sx: {
127
+ bgcolor: 'white',
128
+ }, fullWidth: true }, filterValue.operators.map((x) => (react_1.default.createElement(material_1.MenuItem, { value: x }, x))))),
129
+ react_1.default.createElement(FilterField, { filterValue: filterValue, operator: data.operator, onChange: (value, type = 'value') => {
130
+ setData((obj) => (Object.assign(Object.assign({}, obj), { [type]: value })));
131
+ } })));
132
+ }
133
+ function FilterField({ filterValue, operator, onChange }) {
134
+ switch (filterValue.type) {
135
+ case 'number':
136
+ return (react_1.default.createElement(TextField_1.default, { type: 'number', size: 'small', placeholder: 'Valor', defaultValue: filterValue.value, onChange: (e) => {
137
+ onChange(e.target.value);
138
+ }, sx: {
139
+ bgcolor: 'white',
140
+ }, fullWidth: true }));
141
+ case 'string':
142
+ if (filterValue.useList) {
143
+ switch (operator) {
144
+ case 'tem um dos':
145
+ return (react_1.default.createElement(material_1.Autocomplete, { multiple: true, id: 'tags-standard', onChange: (e, value) => {
146
+ if (value.length <= 0) {
147
+ onChange('');
148
+ return;
149
+ }
150
+ onChange(value);
151
+ }, 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 }));
152
+ case 'contem':
153
+ case 'igual':
154
+ return (react_1.default.createElement(material_1.Box, { width: '100%' },
155
+ react_1.default.createElement(material_1.Autocomplete, { options: filterValue.useList, onChange: (e, value) => {
156
+ onChange(value);
157
+ }, 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: {
158
+ bgcolor: 'white',
159
+ } }))), fullWidth: true })));
160
+ }
161
+ }
162
+ return (react_1.default.createElement(TextField_1.default, { size: 'small', placeholder: 'Valor', defaultValue: filterValue.value, onChange: (e) => {
163
+ onChange(e.target.value);
164
+ }, sx: {
165
+ bgcolor: 'white',
166
+ }, fullWidth: true }));
167
+ case 'date':
168
+ case 'dates':
169
+ switch (operator) {
170
+ case 'data exata':
171
+ case 'data fim':
172
+ case 'data inicio':
173
+ case 'tem a data':
174
+ return (react_1.default.createElement(x_date_pickers_1.LocalizationProvider, { adapterLocale: 'pt-br', dateAdapter: AdapterDayjs_1.AdapterDayjs },
175
+ react_1.default.createElement(x_date_pickers_1.DatePicker, { format: 'DD/MM/YYYY', onChange: (dt) => {
176
+ onChange(dt.isValid() ? dt.format('DD/MM/YYYY') : '');
177
+ }, defaultValue: filterValue.value ? (0, dayjs_1.default)(filterValue.value, 'DD/MM/YYYY') : undefined, sx: {
178
+ div: {
179
+ input: {
180
+ paddingX: 2,
181
+ paddingY: 1.05,
182
+ },
183
+ },
184
+ width: '100%',
185
+ bgcolor: 'white',
186
+ }, inputRef: (params) => react_1.default.createElement(TextField_1.default, Object.assign({}, params, { size: 'small', fullWidth: true })) })));
187
+ case 'entre':
188
+ return (react_1.default.createElement(x_date_pickers_1.LocalizationProvider, { adapterLocale: 'pt-br', dateAdapter: AdapterDayjs_1.AdapterDayjs },
189
+ react_1.default.createElement(x_date_pickers_1.DatePicker, { format: 'DD/MM/YYYY', onChange: (dt) => {
190
+ onChange(dt.isValid() ? dt.format('DD/MM/YYYY') : '');
191
+ }, defaultValue: filterValue.value ? (0, dayjs_1.default)(filterValue.value, 'DD/MM/YYYY') : undefined, sx: {
192
+ div: {
193
+ input: {
194
+ paddingX: 2,
195
+ paddingY: 1.05,
196
+ },
197
+ },
198
+ width: '100%',
199
+ bgcolor: 'white',
200
+ }, inputRef: (params) => react_1.default.createElement(TextField_1.default, Object.assign({}, params, { size: 'small', fullWidth: true })) }),
201
+ react_1.default.createElement(x_date_pickers_1.DatePicker, { format: 'DD/MM/YYYY', onChange: (dt) => {
202
+ onChange(dt.isValid() ? dt.format('DD/MM/YYYY') : '', 'value2');
203
+ }, defaultValue: filterValue.value2 ? (0, dayjs_1.default)(filterValue.value2, 'DD/MM/YYYY') : undefined, sx: {
204
+ div: {
205
+ input: {
206
+ paddingX: 2,
207
+ paddingY: 1.05,
208
+ },
209
+ },
210
+ width: '100%',
211
+ bgcolor: 'white',
212
+ }, inputRef: (params) => react_1.default.createElement(TextField_1.default, Object.assign({}, params, { size: 'small', fullWidth: true })) })));
213
+ }
214
+ break;
215
+ }
216
+ return react_1.default.createElement(react_1.default.Fragment, null);
217
+ }
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
- import { GenericTableProps } from './types';
2
+ import { TableProps } from './types';
3
3
  /**
4
4
  * Tabela cujo dados devem ser passados via props
5
5
  */
6
- export declare function GenericTable<T>({ mediaQueryLG, columns, emptyMsg, dataPath, tableName, csv, columnSize, action, useKC, statusKeyName, csvExcludeKeys, csvExcludeKeysCSV, csvExcludeKeysAll, csvCustomKeyNames, csvExcludeValidate, csvButtonTitle, csvNoZipText, csvAllButtonTitle, removeQuotes, normalize, csvShowAllButton, csvWithoutZip, itemCount, csvUpper, csvZipFileNamesKey, generateCsvZip, hideTitleCSV, csvExcludeUpper, multipleDataPath, expandTextMaxLength, collapsedSize, customMargin, customMarginMobile, filtersFunc, filters, orderBy, customErrorMsg, customTableStyle, id, initialData, isLoading, }: GenericTableProps<T>): JSX.Element;
6
+ export declare function GenericTable<T>({ mediaQueryLG, columns, emptyMsg, dataPath, tableName, csv, columnSize, action, useKC, statusKeyName, csvExcludeKeys, csvExcludeKeysCSV, csvExcludeKeysAll, csvCustomKeyNames, csvExcludeValidate, csvButtonTitle, csvNoZipText, csvAllButtonTitle, removeQuotes, normalize, csvShowAllButton, csvWithoutZip, itemCount, csvUpper, csvZipFileNamesKey, generateCsvZip, hideTitleCSV, csvExcludeUpper, multipleDataPath, expandTextMaxLength, collapsedSize, customMargin, customMarginMobile, filtersFunc, filters, orderBy, customErrorMsg, customTableStyle, id, initialData, isLoading, }: TableProps): JSX.Element;
7
7
  declare const _default: React.MemoExoticComponent<typeof GenericTable>;
8
8
  export default _default;
@@ -1,209 +1,5 @@
1
- import { BoxProps } from '@mui/material';
2
- import React, { ReactNode } from 'react';
3
- interface ColumnData {
4
- title: string;
5
- keyName: string;
6
- customComponent?: (content: string, obj: any) => JSX.Element;
7
- size?: number;
8
- }
9
- interface OrderBy {
10
- label: string;
11
- key: string;
12
- type: 'string' | 'number';
13
- }
14
- /**
15
- * Interface para as propriedades do componente Table.
16
- */
17
- export interface TableProps {
18
- /**
19
- * Identificador único da tabela.
20
- */
21
- id: string;
22
- /**
23
- * Configuração de largura para exibição em telas grandes.
24
- */
25
- mediaQueryLG?: {
26
- all: number;
27
- action: number;
28
- };
29
- /**
30
- * Funções de filtragem aplicáveis à tabela.
31
- */
32
- filtersFunc?: {
33
- [key: string]: (value: string) => any;
34
- };
35
- /**
36
- * Lista de filtros disponíveis.
37
- */
38
- filters?: FilterValue[];
39
- /**
40
- * Configuração da ordenação das colunas.
41
- */
42
- orderBy?: OrderBy[];
43
- /**
44
- * Margem personalizada para o componente.
45
- */
46
- customMargin?: number;
47
- /**
48
- * Margem personalizada para visualização em dispositivos móveis.
49
- */
50
- customMarginMobile?: number;
51
- /**
52
- * Define se os valores CSV devem ser normalizados (removendo acentos, por exemplo).
53
- */
54
- normalize?: boolean;
55
- /**
56
- * Define se os valores CSV devem ser convertidos para maiúsculas.
57
- */
58
- csvUpper?: boolean;
59
- /**
60
- * Estilo personalizado para a tabela.
61
- */
62
- customTableStyle?: BoxProps;
63
- /**
64
- * Caminho múltiplo para os dados dentro do JSON retornado pela API.
65
- */
66
- multipleDataPath?: string;
67
- /**
68
- * Mensagem de erro personalizada para exibição na tabela.
69
- */
70
- customErrorMsg?: string | ReactNode;
71
- /**
72
- * Remove aspas dos valores no CSV.
73
- */
74
- removeQuotes?: boolean;
75
- /**
76
- * Lista de colunas a serem exibidas na tabela.
77
- */
78
- columns: ColumnData[];
79
- /**
80
- * Nome da tabela para exibição.
81
- */
82
- tableName: string;
83
- /**
84
- * Exibe botão para exportar todos os dados para CSV.
85
- */
86
- csvShowAllButton?: boolean;
87
- /**
88
- * Lista de chaves que devem ser excluídas da exportação para CSV.
89
- */
90
- csvExcludeUpper?: string[];
91
- /**
92
- * Define se o CSV será exportado sem compactação.
93
- */
94
- csvWithoutZip?: boolean;
95
- /**
96
- * Define o tamanho colapsado das células expansíveis.
97
- */
98
- collapsedSize?: number;
99
- /**
100
- * Título do botão para exportação de todos os dados em CSV.
101
- */
102
- csvAllButtonTitle?: string;
103
- /**
104
- * Título do botão para exportação em CSV.
105
- */
106
- csvButtonTitle?: string;
107
- /**
108
- * Título do botão para exportação sem compactação.
109
- */
110
- csvNoZipText?: string;
111
- /**
112
- * Chave usada para nomeação de arquivos CSV compactados.
113
- */
114
- csvZipFileNamesKey?: string;
115
- /**
116
- * Define se será gerado um ZIP contendo os arquivos CSV.
117
- */
118
- generateCsvZip?: boolean;
119
- /**
120
- * Função de validação para exclusão de chaves ao exportar CSV.
121
- */
122
- csvExcludeValidate?: (key: string, value: string | number) => boolean;
123
- /**
124
- * Mapeamento de nomes personalizados para colunas do CSV.
125
- */
126
- csvCustomKeyNames?: {
127
- [key: string]: string;
128
- };
129
- /**
130
- * Define o tamanho máximo do texto antes de ser colapsado.
131
- */
132
- expandTextMaxLength?: number;
133
- /**
134
- * Lista de chaves a serem excluídas da exportação para CSV.
135
- */
136
- csvExcludeKeysCSV?: string[];
137
- /**
138
- * Lista de chaves a serem excluídas da exportação geral para CSV.
139
- */
140
- csvExcludeKeys?: string[];
141
- /**
142
- * Define se o título deve ser ocultado na exportação CSV.
143
- */
144
- hideTitleCSV?: boolean;
145
- /**
146
- * Lista de chaves a serem excluídas na exportação de todos os dados.
147
- */
148
- csvExcludeKeysAll?: string[];
149
- /**
150
- * Nome da chave do status para identificação de status da linha.
151
- */
152
- statusKeyName?: string;
153
- /**
154
- * Quantidade de itens por página.
155
- */
156
- itemCount?: number;
157
- /**
158
- * Componente para exibir ações específicas para cada linha.
159
- */
160
- action: (prop: any) => JSX.Element;
161
- /**
162
- * Configuração para exportação de arquivos CSV.
163
- */
164
- csv?: {
165
- fileName: string;
166
- };
167
- /**
168
- * Define o número de colunas exibidas na tabela.
169
- */
170
- columnSize: number;
171
- /**
172
- * Função para buscar os dados a serem exibidos na tabela.
173
- */
174
- fetchFunc: () => Promise<Response>;
175
- /**
176
- * Mensagens exibidas quando não há dados na tabela.
177
- */
178
- emptyMsg?: {
179
- user: string;
180
- public: string;
181
- };
182
- /**
183
- * Caminho dentro do JSON de resposta onde os dados estão armazenados.
184
- */
185
- dataPath?: string;
186
- /**
187
- * Define se a autenticação via Keycloak será utilizada.
188
- */
189
- useKC?: boolean;
190
- }
191
- export declare function Table({ mediaQueryLG, columns, fetchFunc, emptyMsg, dataPath, tableName, csv, columnSize, action, useKC, statusKeyName, csvExcludeKeys, csvExcludeKeysCSV, csvExcludeKeysAll, csvCustomKeyNames, csvExcludeValidate, csvButtonTitle, csvNoZipText, csvAllButtonTitle, removeQuotes, normalize, csvShowAllButton, csvWithoutZip, itemCount, csvUpper, csvZipFileNamesKey, generateCsvZip, hideTitleCSV, csvExcludeUpper, multipleDataPath, expandTextMaxLength, collapsedSize, customMargin, customMarginMobile, filtersFunc, filters, orderBy, customErrorMsg, customTableStyle, id, }: TableProps): JSX.Element;
192
- type FilterType = 'string' | 'number' | 'date' | 'dates';
193
- type FilterOperators = 'igual' | 'contem' | 'maior que' | 'menor que' | 'data exata' | 'após' | 'antes de' | 'entre' | 'tem um dos' | 'depois de' | 'antes de' | 'data inicio' | 'data fim' | 'tem a data';
194
- interface FilterValue {
195
- label: string;
196
- keyName: string;
197
- type: FilterType;
198
- operator: FilterOperators;
199
- operators: FilterOperators[];
200
- value: string | any;
201
- value2?: string | any;
202
- useList?: {
203
- id: string | number;
204
- label: string;
205
- }[];
206
- customFunc?: string;
207
- }
1
+ import React from 'react';
2
+ import { TableProps } from './types';
3
+ export declare function Table({ mediaQueryLG, columns, fetchFunc, emptyMsg, dataPath, tableName, csv, columnSize, action, useKC, statusKeyName, csvExcludeKeys, csvExcludeKeysCSV, csvExcludeKeysAll, csvCustomKeyNames, csvExcludeValidate, csvButtonTitle, csvNoZipText, csvAllButtonTitle, removeQuotes, normalize, csvShowAllButton, csvWithoutZip, itemCount, csvUpper, csvZipFileNamesKey, generateCsvZip, hideTitleCSV, csvExcludeUpper, multipleDataPath, expandTextMaxLength, collapsedSize, customMargin, customMarginMobile, filtersFunc, filters, orderBy, customErrorMsg, customTableStyle, id, initialData, }: TableProps): JSX.Element;
208
4
  declare const _default: React.MemoExoticComponent<typeof Table>;
209
5
  export default _default;