@bluemarble/bm-components 0.0.4 → 0.0.5
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.
- package/dist/esm/index.js +308 -276
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/Grid/AutoCreatedRows.d.ts +8 -0
- package/dist/esm/types/components/Grid/Filters.d.ts +12 -12
- package/dist/esm/types/components/Grid/Grid.d.ts +32 -29
- package/dist/esm/types/components/Grid/Header.d.ts +10 -11
- package/dist/esm/types/components/Grid/Td.d.ts +18 -3
- package/dist/esm/types/components/Grid/Tr.d.ts +7 -7
- package/dist/esm/types/components/Grid/index.d.ts +5 -5
- package/dist/esm/types/components/Grid/utils.d.ts +5 -5
- package/dist/esm/types/components/index.d.ts +1 -1
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/index.d.ts +50 -34
- package/package.json +36 -36
- package/dist/esm/types/src/components/Grid/Grid.d.ts +0 -27
- package/dist/esm/types/src/components/Grid/Header.d.ts +0 -10
- package/dist/esm/types/src/components/Grid/Td.d.ts +0 -3
- package/dist/esm/types/src/components/Grid/Tr.d.ts +0 -3
- package/dist/esm/types/src/components/Grid/index.d.ts +0 -5
- package/dist/esm/types/src/components/Grid/utils.d.ts +0 -5
- package/dist/esm/types/src/components/index.d.ts +0 -1
- package/dist/esm/types/src/index.d.ts +0 -1
- package/dist/esm/types/tests/src/App.d.ts +0 -2
- package/dist/esm/types/tests/src/main.d.ts +0 -1
- package/dist/esm/types/tests/vite.config.d.ts +0 -2
package/dist/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import React__default, { forwardRef, useContext, createElement, createContext, Fragment, useRef, useLayoutEffect, Children, isValidElement, cloneElement, useState, useMemo, useEffect
|
|
2
|
+
import React__default, { forwardRef, useContext, createElement, createContext, Fragment, useRef, useLayoutEffect, Children, isValidElement, cloneElement, memo, useState, useMemo, useEffect } from 'react';
|
|
3
3
|
import * as ReactDOM from 'react-dom';
|
|
4
4
|
import ReactDOM__default from 'react-dom';
|
|
5
5
|
|
|
@@ -28206,38 +28206,33 @@ process.env.NODE_ENV !== "production" ? TextField.propTypes
|
|
|
28206
28206
|
} : void 0;
|
|
28207
28207
|
var TextField$1 = TextField;
|
|
28208
28208
|
|
|
28209
|
-
const GridHeader = ({ setOrder, setOrderBy, order, orderBy, titles = [] }) => {
|
|
28210
|
-
function onRequestSort(title) {
|
|
28211
|
-
if (title !== orderBy) {
|
|
28212
|
-
setOrderBy(title);
|
|
28213
|
-
return setOrder(
|
|
28214
|
-
}
|
|
28215
|
-
switch (order) {
|
|
28216
|
-
case
|
|
28217
|
-
setOrder(
|
|
28218
|
-
setOrderBy(title);
|
|
28219
|
-
break;
|
|
28220
|
-
case
|
|
28221
|
-
setOrder(undefined);
|
|
28222
|
-
setOrderBy(
|
|
28223
|
-
break;
|
|
28224
|
-
default:
|
|
28225
|
-
setOrder(
|
|
28226
|
-
setOrderBy(title);
|
|
28227
|
-
break;
|
|
28228
|
-
}
|
|
28229
|
-
}
|
|
28230
|
-
return (React__default.createElement(TableHead$1, null,
|
|
28231
|
-
React__default.createElement(TableRow$1, { sx: { backgroundColor:
|
|
28232
|
-
return (React__default.createElement(TableCell$1, { key:
|
|
28233
|
-
React__default.createElement(
|
|
28234
|
-
|
|
28235
|
-
|
|
28236
|
-
justifyContent: 'space-between'
|
|
28237
|
-
} },
|
|
28238
|
-
React__default.createElement(TableSortLabel$1, { onClick: () => onRequestSort(title.name), active: orderBy === title.name, direction: orderBy === title.name ? order : 'asc' },
|
|
28239
|
-
React__default.createElement(Typography$1, { fontWeight: "bold", component: "p", variant: "body2" }, title.label)))));
|
|
28240
|
-
}))));
|
|
28209
|
+
const GridHeader = ({ setOrder, setOrderBy, order, orderBy, titles = [], }) => {
|
|
28210
|
+
function onRequestSort(title) {
|
|
28211
|
+
if (title !== orderBy) {
|
|
28212
|
+
setOrderBy(title);
|
|
28213
|
+
return setOrder("desc");
|
|
28214
|
+
}
|
|
28215
|
+
switch (order) {
|
|
28216
|
+
case "desc":
|
|
28217
|
+
setOrder("asc");
|
|
28218
|
+
setOrderBy(title);
|
|
28219
|
+
break;
|
|
28220
|
+
case "asc":
|
|
28221
|
+
setOrder(undefined);
|
|
28222
|
+
setOrderBy("");
|
|
28223
|
+
break;
|
|
28224
|
+
default:
|
|
28225
|
+
setOrder("desc");
|
|
28226
|
+
setOrderBy(title);
|
|
28227
|
+
break;
|
|
28228
|
+
}
|
|
28229
|
+
}
|
|
28230
|
+
return (React__default.createElement(TableHead$1, null,
|
|
28231
|
+
React__default.createElement(TableRow$1, { sx: { backgroundColor: "background.default" } }, titles.map((title) => {
|
|
28232
|
+
return (React__default.createElement(TableCell$1, { key: title.name, sortDirection: orderBy === title.name ? order : false, sx: title.sx },
|
|
28233
|
+
React__default.createElement(TableSortLabel$1, { onClick: () => onRequestSort(title.name), active: orderBy === title.name, direction: orderBy === title.name ? order : "asc" },
|
|
28234
|
+
React__default.createElement(Typography$1, { fontWeight: "bold", component: "p", variant: "body2" }, title.label))));
|
|
28235
|
+
}))));
|
|
28241
28236
|
};
|
|
28242
28237
|
|
|
28243
28238
|
var DefaultContext = {
|
|
@@ -28329,242 +28324,47 @@ function MdSearch (props) {
|
|
|
28329
28324
|
return GenIcon({"tag":"svg","attr":{"viewBox":"0 0 24 24"},"child":[{"tag":"path","attr":{"fill":"none","d":"M0 0h24v24H0z"}},{"tag":"path","attr":{"d":"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}}]})(props);
|
|
28330
28325
|
}
|
|
28331
28326
|
|
|
28332
|
-
const FiltersBar = ({ customButtons, selectedFilters, handleCloseFilter, noFilterButtons, searchAnchorEl, setOpenSearch, setAnchorEl, }) => {
|
|
28333
|
-
return (React__default.createElement(Box$3, { sx: {
|
|
28334
|
-
display: "flex",
|
|
28335
|
-
justifyContent: "space-between",
|
|
28336
|
-
alignItems: "center",
|
|
28337
|
-
} },
|
|
28338
|
-
React__default.createElement(Box$3, { sx: { pl: 1 } }, selectedFilters.map((item, index) => {
|
|
28339
|
-
return (React__default.createElement(Chip$1, { key: index, label: item.value, onDelete: () => handleCloseFilter(item) }));
|
|
28340
|
-
})),
|
|
28341
|
-
React__default.createElement(Box$3, { ref: searchAnchorEl, sx: { minHeight: 30 } },
|
|
28342
|
-
customButtons,
|
|
28343
|
-
!noFilterButtons && (React__default.createElement(React__default.Fragment, null,
|
|
28344
|
-
React__default.createElement(Tooltip$1, { title: "Buscar" },
|
|
28345
|
-
React__default.createElement(IconButton$1, { onClick: () => setOpenSearch(true) },
|
|
28346
|
-
React__default.createElement(MdSearch, { size: 8 * 3 }))),
|
|
28347
|
-
React__default.createElement(Tooltip$1, { title: "Filtrar" },
|
|
28348
|
-
React__default.createElement(IconButton$1, { sx: { position: "relative" }, onClick: ({ currentTarget }) => setAnchorEl(currentTarget) },
|
|
28349
|
-
React__default.createElement(MdFilterList, { size: 8 * 3 }))))))));
|
|
28327
|
+
const FiltersBar = ({ customButtons, selectedFilters, handleCloseFilter, noFilterButtons, searchAnchorEl, setOpenSearch, setAnchorEl, }) => {
|
|
28328
|
+
return (React__default.createElement(Box$3, { sx: {
|
|
28329
|
+
display: "flex",
|
|
28330
|
+
justifyContent: "space-between",
|
|
28331
|
+
alignItems: "center",
|
|
28332
|
+
} },
|
|
28333
|
+
React__default.createElement(Box$3, { sx: { pl: 1 } }, selectedFilters.map((item, index) => {
|
|
28334
|
+
return (React__default.createElement(Chip$1, { key: index, label: item.value, onDelete: () => handleCloseFilter(item) }));
|
|
28335
|
+
})),
|
|
28336
|
+
React__default.createElement(Box$3, { ref: searchAnchorEl, sx: { minHeight: 30 } },
|
|
28337
|
+
customButtons,
|
|
28338
|
+
!noFilterButtons && (React__default.createElement(React__default.Fragment, null,
|
|
28339
|
+
React__default.createElement(Tooltip$1, { title: "Buscar" },
|
|
28340
|
+
React__default.createElement(IconButton$1, { onClick: () => setOpenSearch(true) },
|
|
28341
|
+
React__default.createElement(MdSearch, { size: 8 * 3 }))),
|
|
28342
|
+
React__default.createElement(Tooltip$1, { title: "Filtrar" },
|
|
28343
|
+
React__default.createElement(IconButton$1, { sx: { position: "relative" }, onClick: ({ currentTarget }) => setAnchorEl(currentTarget) },
|
|
28344
|
+
React__default.createElement(MdFilterList, { size: 8 * 3 }))))))));
|
|
28350
28345
|
};
|
|
28351
28346
|
|
|
28352
|
-
function filterData(filters, defaultData) {
|
|
28353
|
-
if (filters.length === 0)
|
|
28354
|
-
return defaultData.current;
|
|
28355
|
-
const filteredArray = defaultData.current.slice(0).filter((item) => {
|
|
28356
|
-
let satisfiedFilter = 0;
|
|
28357
|
-
filters.forEach((sub) => {
|
|
28358
|
-
let currentValue = getPropertyValue(item, sub.column);
|
|
28359
|
-
if (sub.transformer)
|
|
28360
|
-
currentValue = sub.transformer(currentValue);
|
|
28361
|
-
if (String(currentValue) === String(sub.value))
|
|
28362
|
-
satisfiedFilter += 1;
|
|
28363
|
-
});
|
|
28364
|
-
if (satisfiedFilter === filters.length)
|
|
28365
|
-
return true;
|
|
28366
|
-
return false;
|
|
28367
|
-
});
|
|
28368
|
-
return filteredArray;
|
|
28369
|
-
}
|
|
28370
|
-
function getPropertyValue(obj, property) {
|
|
28371
|
-
return String(property.split('.').reduce((o, k) => o && o[k], obj));
|
|
28372
|
-
}
|
|
28373
|
-
|
|
28374
|
-
const Grid = (props) => {
|
|
28375
|
-
const { columnTitles, isLoading, footer, noFilterButtons = false, selectedFilters, customButtons, setSelectedFilters, defaultData, setTableData, updateFilters, tableData, rowOptions = [30, 60, 100], noPagination, } = props;
|
|
28376
|
-
const [order, setOrder] = useState(undefined);
|
|
28377
|
-
const [orderBy, setOrderBy] = useState("Nome");
|
|
28378
|
-
const [page, setPage] = useState(0);
|
|
28379
|
-
const [rowsPerPage, setRowsPerPage] = useState(rowOptions[0]);
|
|
28380
|
-
const [selectedTitle, setSelectedTitle] = useState(undefined);
|
|
28381
|
-
const [selectedFilterValue, setSelectedFilterValue] = useState(undefined);
|
|
28382
|
-
const [valuesToFilter, setValuesToFilter] = useState([]);
|
|
28383
|
-
const [anchorEl, setAnchorEl] = useState(null);
|
|
28384
|
-
const [searchText, setSearchText] = useState("");
|
|
28385
|
-
const [openSearch, setOpenSearch] = useState(false);
|
|
28386
|
-
const searchAnchorEl = useRef(null);
|
|
28387
|
-
const countRows = useMemo(() => {
|
|
28388
|
-
if (searchText.length > 0) {
|
|
28389
|
-
const array = handleFilterBySearch(searchText);
|
|
28390
|
-
return array.length;
|
|
28391
|
-
}
|
|
28392
|
-
else {
|
|
28393
|
-
return defaultData.length;
|
|
28394
|
-
}
|
|
28395
|
-
}, [searchText, tableData]);
|
|
28396
|
-
const handleChangeRowsPerPage = ({ target, }) => {
|
|
28397
|
-
setRowsPerPage(parseInt(target.value));
|
|
28398
|
-
const maxPage = Math.floor(countRows / rowsPerPage);
|
|
28399
|
-
if (page > maxPage)
|
|
28400
|
-
setPage(maxPage);
|
|
28401
|
-
};
|
|
28402
|
-
function handleSort(data) {
|
|
28403
|
-
const sortable = data.slice(0);
|
|
28404
|
-
if (order === undefined)
|
|
28405
|
-
return sortable;
|
|
28406
|
-
sortable.sort((a, b) => {
|
|
28407
|
-
const x = a[orderBy];
|
|
28408
|
-
const y = b[orderBy];
|
|
28409
|
-
return x < y ? -1 : x > y ? 1 : 0;
|
|
28410
|
-
});
|
|
28411
|
-
return order === "asc" ? sortable : sortable.reverse();
|
|
28412
|
-
}
|
|
28413
|
-
function handleAddFilter() {
|
|
28414
|
-
const [column] = columnTitles.filter((item) => item.label === selectedTitle);
|
|
28415
|
-
const newFilter = {
|
|
28416
|
-
column: column.name,
|
|
28417
|
-
value: selectedFilterValue || "",
|
|
28418
|
-
transformer: column.transformer,
|
|
28419
|
-
};
|
|
28420
|
-
const filterAlreadyExists = selectedFilters.some((filter) => filter.column === column.name && filter.value === selectedFilterValue);
|
|
28421
|
-
if (filterAlreadyExists)
|
|
28422
|
-
return;
|
|
28423
|
-
setSelectedFilters([...selectedFilters, newFilter]);
|
|
28424
|
-
}
|
|
28425
|
-
function handleCloseFilter(item) {
|
|
28426
|
-
const filterToDelete = selectedFilters.find((filter) => filter.column === item.column && filter.value === item.value);
|
|
28427
|
-
if (!filterToDelete)
|
|
28428
|
-
return;
|
|
28429
|
-
const filteredSelectedFilters = selectedFilters.filter((_, index) => selectedFilters.indexOf(filterToDelete) !== index);
|
|
28430
|
-
setSelectedFilters([...filteredSelectedFilters]);
|
|
28431
|
-
}
|
|
28432
|
-
function handleFilterBySearch(text) {
|
|
28433
|
-
const newArray = defaultData.filter((item) => {
|
|
28434
|
-
for (const [, value] of Object.entries(item)) {
|
|
28435
|
-
if (`${value}`.includes(text))
|
|
28436
|
-
return true;
|
|
28437
|
-
}
|
|
28438
|
-
return false;
|
|
28439
|
-
});
|
|
28440
|
-
return newArray;
|
|
28441
|
-
}
|
|
28442
|
-
useEffect(() => {
|
|
28443
|
-
const maxPage = Math.floor(countRows / rowsPerPage);
|
|
28444
|
-
if (page > maxPage)
|
|
28445
|
-
setPage(maxPage - 1);
|
|
28446
|
-
}, [countRows]);
|
|
28447
|
-
useEffect(() => {
|
|
28448
|
-
if (order) {
|
|
28449
|
-
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28450
|
-
const sortedArray = handleSort(newArray);
|
|
28451
|
-
const data = sortedArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28452
|
-
setTableData(data);
|
|
28453
|
-
}
|
|
28454
|
-
else {
|
|
28455
|
-
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28456
|
-
const data = newArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28457
|
-
setTableData(data);
|
|
28458
|
-
}
|
|
28459
|
-
}, [defaultData]);
|
|
28460
|
-
useEffect(() => {
|
|
28461
|
-
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28462
|
-
const sortedArray = handleSort(newArray);
|
|
28463
|
-
const paginatedArray = sortedArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28464
|
-
setTableData(paginatedArray);
|
|
28465
|
-
}, [order, orderBy]);
|
|
28466
|
-
useEffect(() => {
|
|
28467
|
-
if (order) {
|
|
28468
|
-
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28469
|
-
const sortedArray = handleSort(newArray);
|
|
28470
|
-
const dados = sortedArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28471
|
-
setTableData(dados);
|
|
28472
|
-
}
|
|
28473
|
-
else {
|
|
28474
|
-
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28475
|
-
const dados = newArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28476
|
-
setTableData(dados);
|
|
28477
|
-
}
|
|
28478
|
-
}, [page, rowsPerPage]);
|
|
28479
|
-
useEffect(() => {
|
|
28480
|
-
setValuesToFilter([]);
|
|
28481
|
-
setSelectedFilterValue(undefined);
|
|
28482
|
-
if (selectedTitle) {
|
|
28483
|
-
const values = [];
|
|
28484
|
-
const [prop] = columnTitles.filter((item) => item.label === selectedTitle);
|
|
28485
|
-
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28486
|
-
newArray.forEach((item) => {
|
|
28487
|
-
const value = prop.transformer
|
|
28488
|
-
? prop.transformer(getPropertyValue(item, prop.name))
|
|
28489
|
-
: String(getPropertyValue(item, prop.name));
|
|
28490
|
-
if (!values.includes(value))
|
|
28491
|
-
values.push(value);
|
|
28492
|
-
});
|
|
28493
|
-
setValuesToFilter(values);
|
|
28494
|
-
}
|
|
28495
|
-
}, [selectedTitle]);
|
|
28496
|
-
useEffect(() => {
|
|
28497
|
-
if (order) {
|
|
28498
|
-
const newArray = handleFilterBySearch(searchText);
|
|
28499
|
-
const sortedArray = handleSort(newArray);
|
|
28500
|
-
const dados = sortedArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28501
|
-
setTableData(dados);
|
|
28502
|
-
}
|
|
28503
|
-
else {
|
|
28504
|
-
const newArray = handleFilterBySearch(searchText);
|
|
28505
|
-
const dados = newArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28506
|
-
setTableData(dados);
|
|
28507
|
-
}
|
|
28508
|
-
}, [searchText]);
|
|
28509
|
-
useEffect(() => {
|
|
28510
|
-
updateFilters(selectedFilters);
|
|
28511
|
-
}, [selectedFilters]);
|
|
28512
|
-
return (React__default.createElement(Paper$1, null,
|
|
28513
|
-
isLoading && React__default.createElement(LinearProgress$1, null),
|
|
28514
|
-
React__default.createElement(FiltersBar, { setAnchorEl: setAnchorEl, setOpenSearch: setOpenSearch, searchAnchorEl: searchAnchorEl, noFilterButtons: noFilterButtons, selectedFilters: selectedFilters, customButtons: customButtons, handleCloseFilter: handleCloseFilter }),
|
|
28515
|
-
React__default.createElement(TableContainer$1, null,
|
|
28516
|
-
React__default.createElement(Table$1, { size: "small" },
|
|
28517
|
-
React__default.createElement(GridHeader, { titles: columnTitles, order: order, orderBy: orderBy, setOrder: setOrder, setOrderBy: setOrderBy }),
|
|
28518
|
-
React__default.createElement(TableBody$1, null,
|
|
28519
|
-
props.children,
|
|
28520
|
-
footer))),
|
|
28521
|
-
!noPagination && (React__default.createElement(TablePagination$1, { page: page, component: "div", rowsPerPage: rowsPerPage, labelRowsPerPage: "Linhas por p\u00E1gina", rowsPerPageOptions: rowOptions, count: countRows, labelDisplayedRows: ({ page }) => `${page + 1} de ${Math.floor(countRows / rowsPerPage) + 1}`, onPageChange: (_, newPage) => {
|
|
28522
|
-
setPage(newPage);
|
|
28523
|
-
}, onRowsPerPageChange: handleChangeRowsPerPage })),
|
|
28524
|
-
React__default.createElement(Popover$1, { anchorEl: anchorEl, open: !!anchorEl, onClose: () => setAnchorEl(null), anchorOrigin: {
|
|
28525
|
-
vertical: "top",
|
|
28526
|
-
horizontal: "right",
|
|
28527
|
-
}, transformOrigin: {
|
|
28528
|
-
vertical: "top",
|
|
28529
|
-
horizontal: "right",
|
|
28530
|
-
} },
|
|
28531
|
-
React__default.createElement(Box$1, { sx: { minWidth: 300, padding: 2 } },
|
|
28532
|
-
React__default.createElement(Typography$1, { fontWeight: "bold", variant: "body1" }, "Filtrar por:"),
|
|
28533
|
-
React__default.createElement(Autocomplete$1, { value: selectedTitle, onChange: ({ target }) => {
|
|
28534
|
-
!target.innerHTML.includes("path")
|
|
28535
|
-
? setSelectedTitle(target.innerHTML)
|
|
28536
|
-
: setSelectedTitle(undefined);
|
|
28537
|
-
}, options: columnTitles.map((title) => title.label), renderInput: (params) => (React__default.createElement(TextField$1, Object.assign({ variant: "standard", margin: "dense" }, params, { label: "Coluna" }))) }),
|
|
28538
|
-
React__default.createElement(Autocomplete$1, { value: selectedFilterValue, onChange: ({ target }) => {
|
|
28539
|
-
!target.innerHTML.includes("path")
|
|
28540
|
-
? setSelectedFilterValue(target.innerHTML)
|
|
28541
|
-
: setSelectedFilterValue(undefined);
|
|
28542
|
-
}, disabled: valuesToFilter.length < 1, options: valuesToFilter.map((title) => title), renderInput: (params) => (React__default.createElement(TextField$1, Object.assign({ variant: "standard", margin: "dense" }, params, { label: "Valor" }))) }),
|
|
28543
|
-
React__default.createElement(Box$1, { sx: { py: 1 } }),
|
|
28544
|
-
React__default.createElement(Button$1, { disabled: !selectedFilterValue, onClick: handleAddFilter, fullWidth: true }, "Adicionar filtro"))),
|
|
28545
|
-
React__default.createElement(Popover$1, { anchorEl: searchAnchorEl.current, open: openSearch, onClose: () => setOpenSearch(false), anchorOrigin: {
|
|
28546
|
-
vertical: "top",
|
|
28547
|
-
horizontal: "left",
|
|
28548
|
-
}, transformOrigin: {
|
|
28549
|
-
vertical: "top",
|
|
28550
|
-
horizontal: "left",
|
|
28551
|
-
} },
|
|
28552
|
-
React__default.createElement(Box$1, { sx: {
|
|
28553
|
-
minWidth: 300,
|
|
28554
|
-
px: 2,
|
|
28555
|
-
pb: 1,
|
|
28556
|
-
display: "grid",
|
|
28557
|
-
gridTemplateColumns: "1fr 30px",
|
|
28558
|
-
alignItems: "flex-end",
|
|
28559
|
-
} },
|
|
28560
|
-
React__default.createElement(TextField$1, { variant: "standard", margin: "dense", label: "Buscar", value: searchText, onChange: ({ currentTarget }) => setSearchText(currentTarget.value) }),
|
|
28561
|
-
React__default.createElement(Box$1, null,
|
|
28562
|
-
React__default.createElement(IconButton$1, { onClick: () => {
|
|
28563
|
-
setSearchText("");
|
|
28564
|
-
setOpenSearch(false);
|
|
28565
|
-
} },
|
|
28566
|
-
React__default.createElement(MdClose, { size: 8 * 3 })))))));
|
|
28567
|
-
};
|
|
28347
|
+
function filterData(filters, defaultData) {
|
|
28348
|
+
if (filters.length === 0)
|
|
28349
|
+
return defaultData.current;
|
|
28350
|
+
const filteredArray = defaultData.current.slice(0).filter((item) => {
|
|
28351
|
+
let satisfiedFilter = 0;
|
|
28352
|
+
filters.forEach((sub) => {
|
|
28353
|
+
let currentValue = getPropertyValue(item, sub.column);
|
|
28354
|
+
if (sub.transformer)
|
|
28355
|
+
currentValue = sub.transformer(currentValue);
|
|
28356
|
+
if (String(currentValue) === String(sub.value))
|
|
28357
|
+
satisfiedFilter += 1;
|
|
28358
|
+
});
|
|
28359
|
+
if (satisfiedFilter === filters.length)
|
|
28360
|
+
return true;
|
|
28361
|
+
return false;
|
|
28362
|
+
});
|
|
28363
|
+
return filteredArray;
|
|
28364
|
+
}
|
|
28365
|
+
function getPropertyValue(obj, property) {
|
|
28366
|
+
return String(property.split('.').reduce((o, k) => o && o[k], obj));
|
|
28367
|
+
}
|
|
28568
28368
|
|
|
28569
28369
|
/*! *****************************************************************************
|
|
28570
28370
|
Copyright (c) Microsoft Corporation.
|
|
@@ -28593,17 +28393,249 @@ function __rest(s, e) {
|
|
|
28593
28393
|
return t;
|
|
28594
28394
|
}
|
|
28595
28395
|
|
|
28596
|
-
const
|
|
28597
|
-
|
|
28598
|
-
return
|
|
28599
|
-
};
|
|
28396
|
+
const CustomTableCell = (_a) => {
|
|
28397
|
+
var { children } = _a, props = __rest(_a, ["children"]);
|
|
28398
|
+
return React__default.createElement(TableCell$1, Object.assign({}, props), children);
|
|
28399
|
+
};
|
|
28400
|
+
const EditableTableCell = (_a) => {
|
|
28401
|
+
var { TextFieldProps, onSave, name, data, fullWidth = true } = _a, props = __rest(_a, ["TextFieldProps", "onSave", "name", "data", "fullWidth"]);
|
|
28402
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
28403
|
+
let value = data === null || data === void 0 ? void 0 : data[name];
|
|
28404
|
+
const handleSave = (event) => {
|
|
28405
|
+
var _a, _b, _c;
|
|
28406
|
+
setIsEditing(false);
|
|
28407
|
+
value = (_a = event.target) === null || _a === void 0 ? void 0 : _a.value;
|
|
28408
|
+
const response = {
|
|
28409
|
+
name,
|
|
28410
|
+
event,
|
|
28411
|
+
value: (_b = event.target) === null || _b === void 0 ? void 0 : _b.value,
|
|
28412
|
+
data: Object.assign(Object.assign({}, data), { [name]: (_c = event.target) === null || _c === void 0 ? void 0 : _c.value }),
|
|
28413
|
+
};
|
|
28414
|
+
onSave(response);
|
|
28415
|
+
};
|
|
28416
|
+
return (React__default.createElement(TableCell$1, Object.assign({ sx: { py: 0, px: isEditing ? 0 : "intial" }, onDoubleClick: () => setIsEditing(true) }, props), isEditing ? (React__default.createElement(TextField$1, Object.assign({ name: name, focused: isEditing, onBlur: (ev) => handleSave(ev), autoFocus: true, size: "small", defaultValue: data === null || data === void 0 ? void 0 : data[name], sx: Object.assign({ width: fullWidth ? "100%" : "intial" }, TextFieldProps === null || TextFieldProps === void 0 ? void 0 : TextFieldProps.sx), inputProps: {
|
|
28417
|
+
style: {
|
|
28418
|
+
paddingBottom: 6,
|
|
28419
|
+
paddingTop: 6,
|
|
28420
|
+
},
|
|
28421
|
+
}, InputProps: {
|
|
28422
|
+
sx: {
|
|
28423
|
+
fontSize: 14,
|
|
28424
|
+
pl: 0.2,
|
|
28425
|
+
},
|
|
28426
|
+
} }, TextFieldProps))) : (React__default.createElement(React__default.Fragment, null, value))));
|
|
28427
|
+
};
|
|
28428
|
+
const Td = memo(CustomTableCell);
|
|
28429
|
+
|
|
28430
|
+
const CustomTableRow = (props) => {
|
|
28431
|
+
const { children, sx, striped = true } = props, rest = __rest(props, ["children", "sx", "striped"]);
|
|
28432
|
+
return (React__default.createElement(TableRow$1, Object.assign({ sx: Object.assign({ "&:nth-of-type(even)": { bgcolor: striped ? "action.selected" : "" } }, sx) }, rest), children));
|
|
28433
|
+
};
|
|
28600
28434
|
const Tr = memo(CustomTableRow);
|
|
28601
28435
|
|
|
28602
|
-
const
|
|
28603
|
-
|
|
28604
|
-
|
|
28436
|
+
const AutoCreatedRows = ({ tableData, columns, primaryKey, }) => {
|
|
28437
|
+
return (React__default.createElement(React__default.Fragment, null, tableData.map((row) => (React__default.createElement(Tr, { key: row[primaryKey] }, columns.map((column) => {
|
|
28438
|
+
const cellValue = column.transformer
|
|
28439
|
+
? column.transformer(row[column.name])
|
|
28440
|
+
: row[column.name];
|
|
28441
|
+
return React__default.createElement(Td, { key: column.name }, cellValue);
|
|
28442
|
+
}))))));
|
|
28443
|
+
};
|
|
28444
|
+
|
|
28445
|
+
const Grid = (props) => {
|
|
28446
|
+
const { columnTitles, isLoading, footer, noFilterButtons = false, selectedFilters, customButtons, setSelectedFilters, defaultData, setTableData, updateFilters, tableData, rowOptions = [60, 100, 150], noPagination, primaryKey, } = props;
|
|
28447
|
+
const [order, setOrder] = useState(undefined);
|
|
28448
|
+
const [orderBy, setOrderBy] = useState("");
|
|
28449
|
+
const [page, setPage] = useState(0);
|
|
28450
|
+
const [rowsPerPage, setRowsPerPage] = useState(rowOptions[0]);
|
|
28451
|
+
const [selectedTitle, setSelectedTitle] = useState(undefined);
|
|
28452
|
+
const [selectedFilterValue, setSelectedFilterValue] = useState(undefined);
|
|
28453
|
+
const [valuesToFilter, setValuesToFilter] = useState([]);
|
|
28454
|
+
const [anchorEl, setAnchorEl] = useState(null);
|
|
28455
|
+
const [searchText, setSearchText] = useState("");
|
|
28456
|
+
const [openSearch, setOpenSearch] = useState(false);
|
|
28457
|
+
const searchAnchorEl = useRef(null);
|
|
28458
|
+
const countRows = useMemo(() => {
|
|
28459
|
+
if (searchText.length > 0) {
|
|
28460
|
+
const array = handleFilterBySearch(searchText);
|
|
28461
|
+
return array.length;
|
|
28462
|
+
}
|
|
28463
|
+
else {
|
|
28464
|
+
return defaultData.length;
|
|
28465
|
+
}
|
|
28466
|
+
}, [searchText, tableData]);
|
|
28467
|
+
const handleChangeRowsPerPage = ({ target, }) => {
|
|
28468
|
+
setRowsPerPage(parseInt(target.value));
|
|
28469
|
+
const maxPage = Math.floor(countRows / rowsPerPage);
|
|
28470
|
+
if (page > maxPage)
|
|
28471
|
+
setPage(maxPage);
|
|
28472
|
+
};
|
|
28473
|
+
function handleSort(data) {
|
|
28474
|
+
const sortable = data.slice(0);
|
|
28475
|
+
if (order === undefined)
|
|
28476
|
+
return sortable;
|
|
28477
|
+
sortable.sort((a, b) => {
|
|
28478
|
+
const x = a[orderBy];
|
|
28479
|
+
const y = b[orderBy];
|
|
28480
|
+
return x < y ? -1 : x > y ? 1 : 0;
|
|
28481
|
+
});
|
|
28482
|
+
return order === "asc" ? sortable : sortable.reverse();
|
|
28483
|
+
}
|
|
28484
|
+
function handleAddFilter() {
|
|
28485
|
+
const [column] = columnTitles.filter((item) => item.label === selectedTitle);
|
|
28486
|
+
const newFilter = {
|
|
28487
|
+
column: column.name,
|
|
28488
|
+
value: selectedFilterValue || "",
|
|
28489
|
+
transformer: column.transformer,
|
|
28490
|
+
};
|
|
28491
|
+
const filterAlreadyExists = selectedFilters.some((filter) => filter.column === column.name && filter.value === selectedFilterValue);
|
|
28492
|
+
if (filterAlreadyExists)
|
|
28493
|
+
return;
|
|
28494
|
+
setSelectedFilters([...selectedFilters, newFilter]);
|
|
28495
|
+
}
|
|
28496
|
+
function handleCloseFilter(item) {
|
|
28497
|
+
const filterToDelete = selectedFilters.find((filter) => filter.column === item.column && filter.value === item.value);
|
|
28498
|
+
if (!filterToDelete)
|
|
28499
|
+
return;
|
|
28500
|
+
const filteredSelectedFilters = selectedFilters.filter((_, index) => selectedFilters.indexOf(filterToDelete) !== index);
|
|
28501
|
+
setSelectedFilters([...filteredSelectedFilters]);
|
|
28502
|
+
}
|
|
28503
|
+
function handleFilterBySearch(text) {
|
|
28504
|
+
const newArray = defaultData.filter((item) => {
|
|
28505
|
+
for (const [, value] of Object.entries(item)) {
|
|
28506
|
+
if (`${value}`.includes(text))
|
|
28507
|
+
return true;
|
|
28508
|
+
}
|
|
28509
|
+
return false;
|
|
28510
|
+
});
|
|
28511
|
+
return newArray;
|
|
28512
|
+
}
|
|
28513
|
+
useEffect(() => {
|
|
28514
|
+
const maxPage = Math.floor(countRows / rowsPerPage);
|
|
28515
|
+
if (page > maxPage)
|
|
28516
|
+
setPage(maxPage - 1);
|
|
28517
|
+
}, [countRows]);
|
|
28518
|
+
useEffect(() => {
|
|
28519
|
+
if (order) {
|
|
28520
|
+
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28521
|
+
const sortedArray = handleSort(newArray);
|
|
28522
|
+
const data = sortedArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28523
|
+
setTableData(data);
|
|
28524
|
+
}
|
|
28525
|
+
else {
|
|
28526
|
+
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28527
|
+
const data = newArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28528
|
+
setTableData(data);
|
|
28529
|
+
}
|
|
28530
|
+
}, [defaultData]);
|
|
28531
|
+
useEffect(() => {
|
|
28532
|
+
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28533
|
+
const sortedArray = handleSort(newArray);
|
|
28534
|
+
const paginatedArray = sortedArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28535
|
+
setTableData(paginatedArray);
|
|
28536
|
+
}, [order, orderBy]);
|
|
28537
|
+
useEffect(() => {
|
|
28538
|
+
if (order) {
|
|
28539
|
+
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28540
|
+
const sortedArray = handleSort(newArray);
|
|
28541
|
+
const dados = sortedArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28542
|
+
setTableData(dados);
|
|
28543
|
+
}
|
|
28544
|
+
else {
|
|
28545
|
+
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28546
|
+
const dados = newArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28547
|
+
setTableData(dados);
|
|
28548
|
+
}
|
|
28549
|
+
}, [page, rowsPerPage]);
|
|
28550
|
+
useEffect(() => {
|
|
28551
|
+
setValuesToFilter([]);
|
|
28552
|
+
setSelectedFilterValue(undefined);
|
|
28553
|
+
if (selectedTitle) {
|
|
28554
|
+
const values = [];
|
|
28555
|
+
const [prop] = columnTitles.filter((item) => item.label === selectedTitle);
|
|
28556
|
+
const newArray = searchText.length > 0 ? handleFilterBySearch(searchText) : defaultData;
|
|
28557
|
+
newArray.forEach((item) => {
|
|
28558
|
+
const value = prop.transformer
|
|
28559
|
+
? prop.transformer(getPropertyValue(item, prop.name))
|
|
28560
|
+
: String(getPropertyValue(item, prop.name));
|
|
28561
|
+
if (!values.includes(value))
|
|
28562
|
+
values.push(value);
|
|
28563
|
+
});
|
|
28564
|
+
setValuesToFilter(values);
|
|
28565
|
+
}
|
|
28566
|
+
}, [selectedTitle]);
|
|
28567
|
+
useEffect(() => {
|
|
28568
|
+
if (order) {
|
|
28569
|
+
const newArray = handleFilterBySearch(searchText);
|
|
28570
|
+
const sortedArray = handleSort(newArray);
|
|
28571
|
+
const dados = sortedArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28572
|
+
setTableData(dados);
|
|
28573
|
+
}
|
|
28574
|
+
else {
|
|
28575
|
+
const newArray = handleFilterBySearch(searchText);
|
|
28576
|
+
const dados = newArray.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage);
|
|
28577
|
+
setTableData(dados);
|
|
28578
|
+
}
|
|
28579
|
+
}, [searchText]);
|
|
28580
|
+
useEffect(() => {
|
|
28581
|
+
updateFilters(selectedFilters);
|
|
28582
|
+
}, [selectedFilters]);
|
|
28583
|
+
return (React__default.createElement(Paper$1, null,
|
|
28584
|
+
isLoading && React__default.createElement(LinearProgress$1, null),
|
|
28585
|
+
React__default.createElement(FiltersBar, { setAnchorEl: setAnchorEl, setOpenSearch: setOpenSearch, searchAnchorEl: searchAnchorEl, noFilterButtons: noFilterButtons, selectedFilters: selectedFilters, customButtons: customButtons, handleCloseFilter: handleCloseFilter }),
|
|
28586
|
+
React__default.createElement(TableContainer$1, null,
|
|
28587
|
+
React__default.createElement(Table$1, { size: "small" },
|
|
28588
|
+
React__default.createElement(GridHeader, { titles: columnTitles, order: order, orderBy: orderBy, setOrder: setOrder, setOrderBy: setOrderBy }),
|
|
28589
|
+
React__default.createElement(TableBody$1, null,
|
|
28590
|
+
props.children ? (props.children) : primaryKey ? (React__default.createElement(AutoCreatedRows, { tableData: tableData, columns: columnTitles, primaryKey: primaryKey })) : null,
|
|
28591
|
+
footer))),
|
|
28592
|
+
!noPagination && (React__default.createElement(TablePagination$1, { page: page, component: "div", rowsPerPage: rowsPerPage, labelRowsPerPage: "Linhas por p\u00E1gina", rowsPerPageOptions: rowOptions, count: countRows, labelDisplayedRows: ({ page }) => `${page + 1} de ${Math.floor(countRows / rowsPerPage) + 1}`, onPageChange: (_, newPage) => {
|
|
28593
|
+
setPage(newPage);
|
|
28594
|
+
}, onRowsPerPageChange: handleChangeRowsPerPage })),
|
|
28595
|
+
React__default.createElement(Popover$1, { anchorEl: anchorEl, open: !!anchorEl, onClose: () => setAnchorEl(null), anchorOrigin: {
|
|
28596
|
+
vertical: "top",
|
|
28597
|
+
horizontal: "right",
|
|
28598
|
+
}, transformOrigin: {
|
|
28599
|
+
vertical: "top",
|
|
28600
|
+
horizontal: "right",
|
|
28601
|
+
} },
|
|
28602
|
+
React__default.createElement(Box$1, { sx: { minWidth: 300, padding: 2 } },
|
|
28603
|
+
React__default.createElement(Typography$1, { fontWeight: "bold", variant: "body1" }, "Filtrar por:"),
|
|
28604
|
+
React__default.createElement(Autocomplete$1, { value: selectedTitle || "", onChange: ({ target }) => {
|
|
28605
|
+
!target.innerHTML.includes("path")
|
|
28606
|
+
? setSelectedTitle(target.innerHTML)
|
|
28607
|
+
: setSelectedTitle(undefined);
|
|
28608
|
+
}, options: columnTitles.map((title) => title.label), renderInput: (params) => (React__default.createElement(TextField$1, Object.assign({ variant: "standard", margin: "dense" }, params, { label: "Coluna" }))) }),
|
|
28609
|
+
React__default.createElement(Autocomplete$1, { value: selectedFilterValue || "", onChange: ({ target }) => {
|
|
28610
|
+
!target.innerHTML.includes("path")
|
|
28611
|
+
? setSelectedFilterValue(target.innerHTML)
|
|
28612
|
+
: setSelectedFilterValue(undefined);
|
|
28613
|
+
}, disabled: valuesToFilter.length < 1, options: valuesToFilter.map((title) => title), renderInput: (params) => (React__default.createElement(TextField$1, Object.assign({ variant: "standard", margin: "dense" }, params, { label: "Valor" }))) }),
|
|
28614
|
+
React__default.createElement(Box$1, { sx: { py: 1 } }),
|
|
28615
|
+
React__default.createElement(Button$1, { disabled: !selectedFilterValue, onClick: handleAddFilter, fullWidth: true }, "Adicionar filtro"))),
|
|
28616
|
+
React__default.createElement(Popover$1, { anchorEl: searchAnchorEl.current, open: openSearch, onClose: () => setOpenSearch(false), anchorOrigin: {
|
|
28617
|
+
vertical: "top",
|
|
28618
|
+
horizontal: "left",
|
|
28619
|
+
}, transformOrigin: {
|
|
28620
|
+
vertical: "top",
|
|
28621
|
+
horizontal: "left",
|
|
28622
|
+
} },
|
|
28623
|
+
React__default.createElement(Box$1, { sx: {
|
|
28624
|
+
minWidth: 300,
|
|
28625
|
+
px: 2,
|
|
28626
|
+
pb: 1,
|
|
28627
|
+
display: "grid",
|
|
28628
|
+
gridTemplateColumns: "1fr 30px",
|
|
28629
|
+
alignItems: "flex-end",
|
|
28630
|
+
} },
|
|
28631
|
+
React__default.createElement(TextField$1, { variant: "standard", margin: "dense", label: "Buscar", value: searchText, onChange: ({ currentTarget }) => setSearchText(currentTarget.value) }),
|
|
28632
|
+
React__default.createElement(Box$1, null,
|
|
28633
|
+
React__default.createElement(IconButton$1, { onClick: () => {
|
|
28634
|
+
setSearchText("");
|
|
28635
|
+
setOpenSearch(false);
|
|
28636
|
+
} },
|
|
28637
|
+
React__default.createElement(MdClose, { size: 8 * 3 })))))));
|
|
28605
28638
|
};
|
|
28606
|
-
const Td = memo(CustomTableCell);
|
|
28607
28639
|
|
|
28608
|
-
export { Grid, Td, Tr, filterData };
|
|
28640
|
+
export { EditableTableCell, Grid, Td, Tr, filterData };
|
|
28609
28641
|
//# sourceMappingURL=index.js.map
|