@bluemarble/bm-components 0.0.2 → 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 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, memo } from 'react';
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('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, index) => {
28232
- return (React__default.createElement(TableCell$1, { key: index, sortDirection: orderBy === title.name ? order : false },
28233
- React__default.createElement(Box$1, { sx: {
28234
- width: '100%',
28235
- display: 'flex',
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, { ref: searchAnchorEl, 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, { 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 CustomTableRow = (props) => {
28597
- const { children, sx, striped = true } = props, rest = __rest(props, ["children", "sx", "striped"]);
28598
- return (React__default.createElement(TableRow$1, Object.assign({ sx: Object.assign({ "&:nth-of-type(even)": { bgcolor: striped ? "action.selected" : "" } }, sx) }, rest), children));
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 CustomTableCell = (_a) => {
28603
- var { children } = _a, props = __rest(_a, ["children"]);
28604
- return React__default.createElement(TableCell$1, Object.assign({}, props), children);
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