// material-ui
import {useState, useEffect} from 'react';
import {
DataGrid, GridOverlay,
} from "@mui/x-data-grid";
import * as HttpUtils from "utils/HttpUtils";
import {FormattedMessage, useIntl} from "react-intl";
import {TablePagination, Typography} from '@mui/material';
// ==============================|| EVENT TABLE ||============================== //
export function FiDataGrid({ rows, columns, sx, autoHeight,
hideFooterSelectedRowCount, rowModesModel, editMode,
pageSizeOptions, filterItems, customPageSize, doLoad, ...props }) {
const intl = useIntl();
const [_rows, set_rows] = useState([]);
const [_doLoad, set_doLoad] = useState({});
const [_columns, set_columns] = useState([]);
const [_rowModesModel, set_rowModesModel] = useState({});
const [_editMode, set_editMode] = useState("row");
const [_pageSizeOptions, set_pageSizeOptions] = useState([10]);
const [_filterItems, set_filterItems] = useState([]);
const [page, setPage] = useState(0);
const [pageSize, setPageSize] = useState(10);
const [_autoHeight, set_autoHeight] = useState(true);
const [myHideFooterSelectedRowCount, setMyHideFooterSelectedRowCount] = useState(true);
const [_sx, set_sx] = useState({
padding: "4 2 4 2",
'& .MuiDataGrid-cell': {
borderTop: 1,
borderBottom: 1,
borderColor: "#EEE",
},
'& .MuiDataGrid-footerContainer': {
border: 1,
borderColor: "#EEE"
},
});
const [rowCount, setRowCount] = useState(0);
useEffect(() => {
setPage(0);
set_doLoad(doLoad);
}, [doLoad]);
useEffect(()=>{
getDataList();
},[_doLoad, page]);
useEffect(() => {
if (sx) {
set_sx(sx);
}
if (hideFooterSelectedRowCount) {
setMyHideFooterSelectedRowCount(hideFooterSelectedRowCount);
}
if (rowModesModel) {
set_rowModesModel(rowModesModel)
}
if (rows) {
set_rows(rows)
setRowCount(rows.length)
}
if (columns) {
set_columns(columns)
}
if (pageSizeOptions) {
set_pageSizeOptions(pageSizeOptions)
}
if(autoHeight !== undefined){
set_autoHeight(autoHeight)
}
if(editMode){
set_editMode(editMode);
}
if(filterItems){
set_filterItems(filterItems);
}
if(customPageSize){
setPageSize(customPageSize);
}
}, [sx, hideFooterSelectedRowCount, rowModesModel, rows, columns, pageSizeOptions, autoHeight, editMode, filterItems, customPageSize]);
const handleChangePage = (event, newPage) => {
setPage(newPage);
};
const handleChangePageSize = (event) => {
setPageSize(parseInt(event.target.value, 10));
setPage(0);
};
function CustomNoRowsOverlay() {
return (
);
}
function getDataList() {
if(_doLoad?.url == null) return;
if(_doLoad.params == null) _doLoad.params = {};
_doLoad.params.start = page*pageSize;
_doLoad.params.limit = pageSize;
HttpUtils.get({
url: _doLoad.url,
params: _doLoad.params,
onSuccess: function (responseData) {
set_rows(responseData?.records);
setRowCount(responseData?.count);
if(_doLoad.callback != null){
_doLoad.callback(responseData);
}
}
});
}
return (
(
`${(_rows?.length?page*pageSize+1:0)}-${page*pageSize+(_rows?.length??0)} ${intl.formatMessage({ id: "of" })} ${rowCount}`
}
labelRowsPerPage={intl.formatMessage({ id: "rowsPerPage" }) + ":"}
onPageChange={handleChangePage}
onRowsPerPageChange={handleChangePageSize}
/>
),
}}
/>
);
}