@ssplib/react-components 0.0.206 → 0.0.208
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.
|
@@ -5,8 +5,12 @@ interface ColumnData {
|
|
|
5
5
|
customComponent?: (content: string, obj: any) => JSX.Element;
|
|
6
6
|
size?: number;
|
|
7
7
|
}
|
|
8
|
-
type FilterTypes = 'a-z' | 'z-a' | 'items' | 'date-interval' | 'data-a-z' | 'data-z-a';
|
|
9
|
-
export declare function Table({ 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, filters, hideTitleCSV, csvExcludeUpper, filterSeparator, filterStorageName, multipleDataPath, }: {
|
|
8
|
+
type FilterTypes = 'a-z' | 'z-a' | 'items' | 'date-interval' | 'data-a-z' | 'data-z-a' | 'select';
|
|
9
|
+
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, filters, hideTitleCSV, csvExcludeUpper, filterSeparator, filterStorageName, multipleDataPath, }: {
|
|
10
|
+
mediaQueryLG?: {
|
|
11
|
+
all: number;
|
|
12
|
+
action: number;
|
|
13
|
+
};
|
|
10
14
|
normalize?: boolean;
|
|
11
15
|
csvUpper?: boolean;
|
|
12
16
|
multipleDataPath?: string;
|
|
@@ -49,6 +53,8 @@ export declare function Table({ columns, fetchFunc, emptyMsg, dataPath, tableNam
|
|
|
49
53
|
type: FilterTypes;
|
|
50
54
|
keyName: string;
|
|
51
55
|
name: string;
|
|
56
|
+
listEndpoint?: string;
|
|
57
|
+
selectList?: string[];
|
|
52
58
|
referenceKey?: string;
|
|
53
59
|
options?: {
|
|
54
60
|
name: string;
|
|
@@ -22,6 +22,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
25
34
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
36
|
};
|
|
@@ -43,6 +52,7 @@ const DatePicker_1 = __importDefault(require("../date/DatePicker"));
|
|
|
43
52
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
44
53
|
const jszip_1 = __importDefault(require("jszip"));
|
|
45
54
|
const NavigateNextRounded_1 = __importDefault(require("@mui/icons-material/NavigateNextRounded"));
|
|
55
|
+
const axios_1 = __importDefault(require("axios"));
|
|
46
56
|
function removePunctuationAndAccents(text) {
|
|
47
57
|
// Remove accents and diacritics
|
|
48
58
|
const normalizedText = text.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
@@ -51,7 +61,7 @@ function removePunctuationAndAccents(text) {
|
|
|
51
61
|
return cleanedText;
|
|
52
62
|
}
|
|
53
63
|
let startData = [];
|
|
54
|
-
function Table({ columns, fetchFunc, emptyMsg = {
|
|
64
|
+
function Table({ mediaQueryLG, columns, fetchFunc, emptyMsg = {
|
|
55
65
|
user: 'Nenhum dado encontrado',
|
|
56
66
|
public: 'Nenhum dado encontrado',
|
|
57
67
|
}, 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, filters = {}, hideTitleCSV = false, csvExcludeUpper = [], filterSeparator = '|', filterStorageName = 'tableFilters', multipleDataPath = '', }) {
|
|
@@ -66,11 +76,13 @@ function Table({ columns, fetchFunc, emptyMsg = {
|
|
|
66
76
|
const [paginationCount, setPagCount] = (0, react_1.useState)(1);
|
|
67
77
|
const [listPage, setListPage] = (0, react_1.useState)(1);
|
|
68
78
|
const [appliedFilters, setAppliedFilters] = (0, react_1.useState)([]);
|
|
79
|
+
const [oldSelectState, setOldSelectState] = (0, react_1.useState)('');
|
|
69
80
|
// filters states
|
|
70
81
|
const [filterCollapse, setFilterCollapse] = (0, react_1.useState)(Array(Object.keys(filters).length).fill(false));
|
|
71
82
|
const [filterOpen, setFilterOpen] = (0, react_1.useState)(false);
|
|
72
83
|
const theme = (0, material_1.useTheme)();
|
|
73
84
|
const isSmall = (0, material_1.useMediaQuery)(theme.breakpoints.only('xs'));
|
|
85
|
+
const lg = (0, material_1.useMediaQuery)(theme.breakpoints.up(2000));
|
|
74
86
|
(0, react_1.useEffect)(() => {
|
|
75
87
|
setError(null);
|
|
76
88
|
if (userLoaded || !useKC) {
|
|
@@ -429,11 +441,17 @@ function Table({ columns, fetchFunc, emptyMsg = {
|
|
|
429
441
|
return (react_1.default.createElement(Typography_1.default, { color: '#991b1b', fontWeight: 600, fontFamily: 'Inter' }, "FORA DO PRAZO"));
|
|
430
442
|
}
|
|
431
443
|
}, []);
|
|
444
|
+
function getSelectValues(url) {
|
|
445
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
446
|
+
return ['dd'];
|
|
447
|
+
});
|
|
448
|
+
}
|
|
432
449
|
(0, react_1.useEffect)(() => {
|
|
433
450
|
filterBasedOnList(appliedFilters);
|
|
434
451
|
}, [appliedFilters]);
|
|
435
452
|
const filterBasedOnList = (filteredList) => {
|
|
436
|
-
|
|
453
|
+
var _a;
|
|
454
|
+
let rawList = JSON.parse(JSON.stringify(Array.isArray(startData) ? startData : (_a = (0, lodash_get_1.default)(startData, dataPath)) !== null && _a !== void 0 ? _a : '[]'));
|
|
437
455
|
if (filteredList.length <= 0 || rawList.length <= 0) {
|
|
438
456
|
setList(rawList);
|
|
439
457
|
setPagCount(getCount(rawList));
|
|
@@ -493,7 +511,7 @@ function Table({ columns, fetchFunc, emptyMsg = {
|
|
|
493
511
|
return 0;
|
|
494
512
|
});
|
|
495
513
|
} //
|
|
496
|
-
else if (type === 'items') {
|
|
514
|
+
else if (type === 'items' || type === 'select') {
|
|
497
515
|
rawList = rawList
|
|
498
516
|
.filter((x) => String(x[keyName])
|
|
499
517
|
.toLowerCase()
|
|
@@ -718,9 +736,22 @@ function Table({ columns, fetchFunc, emptyMsg = {
|
|
|
718
736
|
borderRadius: '8px',
|
|
719
737
|
paddingX: '24px',
|
|
720
738
|
paddingY: '8px',
|
|
739
|
+
minWidth: 200,
|
|
721
740
|
backgroundColor: '#208FE8',
|
|
722
741
|
textTransform: 'capitalize',
|
|
723
|
-
} },
|
|
742
|
+
} },
|
|
743
|
+
react_1.default.createElement(material_1.Stack, { direction: 'row', marginLeft: 2, borderRadius: 5, padding: 0 },
|
|
744
|
+
react_1.default.createElement("span", null, "Filtro"),
|
|
745
|
+
react_1.default.createElement("span", { style: {
|
|
746
|
+
whiteSpace: 'nowrap',
|
|
747
|
+
marginLeft: 8,
|
|
748
|
+
backgroundColor: '#15528f',
|
|
749
|
+
borderRadius: 8,
|
|
750
|
+
padding: '0px 8px',
|
|
751
|
+
} },
|
|
752
|
+
appliedFilters.length,
|
|
753
|
+
" aplicado",
|
|
754
|
+
appliedFilters.length > 1 ? 's' : ''))))),
|
|
724
755
|
react_1.default.createElement(material_1.Stack, { alignItems: 'end', width: '100%', pb: 2 },
|
|
725
756
|
react_1.default.createElement(Typography_1.default, { fontWeight: 600 }, "Demandas cadastradas"),
|
|
726
757
|
react_1.default.createElement(material_1.Stack, { justifyContent: 'center' },
|
|
@@ -733,13 +764,13 @@ function Table({ columns, fetchFunc, emptyMsg = {
|
|
|
733
764
|
list.length)))),
|
|
734
765
|
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' },
|
|
735
766
|
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: { padding: 0.5, backgroundColor: index % 2 === 0 ? '#F8FAFC' : 'white', paddingY: 2, borderTop: 'solid 1.5px #E2E8F0' }, elevation: 0 },
|
|
736
|
-
react_1.default.createElement(Grid_1.default, { container: true, spacing: isSmall ? 2 : 0, paddingX: 2 },
|
|
737
|
-
columns.map((c) => (react_1.default.createElement(Grid_1.default, { key: c.keyName + index, item: true, xs: 12, md: (12 / columnSize) * (!!c.size ? c.size : 1) },
|
|
767
|
+
react_1.default.createElement(Grid_1.default, { container: true, spacing: isSmall ? 2 : 0, paddingX: 2, rowSpacing: 2 },
|
|
768
|
+
columns.map((c) => (react_1.default.createElement(Grid_1.default, { key: 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) },
|
|
738
769
|
react_1.default.createElement(material_1.Box, { sx: { width: 'max-content', paddingX: 1 } },
|
|
739
770
|
react_1.default.createElement(Typography_1.default, { fontSize: 16, fontWeight: 700, color: '#1E293B', fontFamily: 'Inter' }, c.title)),
|
|
740
771
|
react_1.default.createElement(material_1.Box, { paddingLeft: 1 },
|
|
741
772
|
react_1.default.createElement(material_1.Box, { sx: { wordWrap: 'break-word', color: '#1E293B', fontSize: 16 }, fontFamily: 'Inter' }, c.customComponent ? (c.customComponent((0, lodash_get_1.default)(x, c.keyName), x)) : c.keyName === statusKeyName ? (getStatusMsg((0, lodash_get_1.default)(x, c.keyName))) : (react_1.default.createElement("div", { dangerouslySetInnerHTML: { __html: (0, lodash_get_1.default)(x, c.keyName) } }))))))),
|
|
742
|
-
react_1.default.createElement(Grid_1.default, { item: true, xs: 12, md: 12 / columnSize },
|
|
773
|
+
react_1.default.createElement(Grid_1.default, { item: true, xs: 12, md: lg ? 12 / columnSize : mediaQueryLG ? mediaQueryLG.action : 12 / columnSize },
|
|
743
774
|
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))))))))),
|
|
744
775
|
getMaxItems().length > 0 && (react_1.default.createElement(material_1.Stack, { padding: 1, direction: {
|
|
745
776
|
xs: 'column',
|
|
@@ -819,7 +850,34 @@ function Table({ columns, fetchFunc, emptyMsg = {
|
|
|
819
850
|
react_1.default.createElement(DatePicker_1.default, { name: 'filterDtEnd', title: 'At\u00E9 (opcional):' }),
|
|
820
851
|
react_1.default.createElement(material_1.Stack, { marginTop: 2 },
|
|
821
852
|
react_1.default.createElement(material_1.Button, { type: 'submit', variant: 'outlined', startIcon: react_1.default.createElement(icons_material_1.CalendarToday, null), sx: { width: '100%' } }, "Filtrar por Data"),
|
|
822
|
-
react_1.default.createElement(material_1.Box, null, appliedFilters.filter((x) => x.isDate).length > 0 && (react_1.default.createElement(material_1.Button, { startIcon: react_1.default.createElement(icons_material_1.Delete, { sx: { fill: 'white' } }), variant: 'contained', color: 'error', sx: { width: '100%', marginTop: 1 }, onClick: (e) => removeFilter('isDate') }, "Remover Filtro Data"))))))) : (react_1.default.createElement(
|
|
853
|
+
react_1.default.createElement(material_1.Box, null, appliedFilters.filter((x) => x.isDate).length > 0 && (react_1.default.createElement(material_1.Button, { startIcon: react_1.default.createElement(icons_material_1.Delete, { sx: { fill: 'white' } }), variant: 'contained', color: 'error', sx: { width: '100%', marginTop: 1 }, onClick: (e) => removeFilter('isDate') }, "Remover Filtro Data"))))))) : x.selectList ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
854
|
+
react_1.default.createElement(material_1.Autocomplete, { options: x.selectList.map((x) => ({
|
|
855
|
+
id: x.toLowerCase(),
|
|
856
|
+
label: x,
|
|
857
|
+
})), onFocus: (e) => console.log('ata'), onChange: (e, value) => {
|
|
858
|
+
console.log(value);
|
|
859
|
+
if (value) {
|
|
860
|
+
const id = `${f}:${JSON.stringify(value)}`;
|
|
861
|
+
handleFilterOption(x.type, x.keyName, id, value === null || value === void 0 ? void 0 : value.label.toLowerCase(), x.referenceKey);
|
|
862
|
+
setOldSelectState(id);
|
|
863
|
+
}
|
|
864
|
+
else {
|
|
865
|
+
removeFilter(oldSelectState);
|
|
866
|
+
}
|
|
867
|
+
}, sx: {
|
|
868
|
+
margin: 1,
|
|
869
|
+
}, size: 'small', renderInput: (params) => react_1.default.createElement(TextField_1.default, Object.assign({}, params, { label: 'Teste' })) }))) : x.listEndpoint ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
870
|
+
react_1.default.createElement(FetchSelectAutoComplete, { url: x.listEndpoint, label: x.name, onChange: (e, value) => {
|
|
871
|
+
console.log(value);
|
|
872
|
+
if (value) {
|
|
873
|
+
const id = `${f}:${JSON.stringify(value)}`;
|
|
874
|
+
handleFilterOption(x.type, x.keyName, id, value === null || value === void 0 ? void 0 : value.label.toLowerCase(), x.referenceKey);
|
|
875
|
+
setOldSelectState(id);
|
|
876
|
+
}
|
|
877
|
+
else {
|
|
878
|
+
removeFilter(oldSelectState);
|
|
879
|
+
}
|
|
880
|
+
} }))) : (react_1.default.createElement(material_1.Stack, { direction: 'row', sx: Object.assign({}, (appliedFilters.map((x) => x.uniqueName).includes(`${f}:${JSON.stringify(x)}`) && {
|
|
823
881
|
bgcolor: '#b7e4c7',
|
|
824
882
|
':hover': { bgcolor: '#b7e4c7' },
|
|
825
883
|
})) },
|
|
@@ -836,4 +894,17 @@ function Table({ columns, fetchFunc, emptyMsg = {
|
|
|
836
894
|
react_1.default.createElement(material_1.Button, { variant: 'contained', onClick: handleFilterReset, startIcon: react_1.default.createElement(icons_material_1.RestartAlt, null), sx: { marginX: 2, marginBottom: 2 } }, "Reiniciar"))));
|
|
837
895
|
}
|
|
838
896
|
exports.Table = Table;
|
|
897
|
+
function FetchSelectAutoComplete(props) {
|
|
898
|
+
const [data, setData] = (0, react_1.useState)([]);
|
|
899
|
+
(0, react_1.useEffect)(() => {
|
|
900
|
+
axios_1.default.get(props.url).then((dt) => {
|
|
901
|
+
setData(dt.data);
|
|
902
|
+
});
|
|
903
|
+
}, []);
|
|
904
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
905
|
+
react_1.default.createElement(Typography_1.default, { marginLeft: 1 }, props.label),
|
|
906
|
+
react_1.default.createElement(material_1.Autocomplete, { options: data, onFocus: (e) => console.log('ata'), onChange: props.onChange, sx: {
|
|
907
|
+
margin: 1,
|
|
908
|
+
}, size: 'small', renderInput: (params) => react_1.default.createElement(TextField_1.default, Object.assign({}, params, { label: props.label })) })));
|
|
909
|
+
}
|
|
839
910
|
exports.default = react_1.default.memo(Table);
|