// material-ui import * as React from 'react'; import { GridActionsCellItem, } from "@mui/x-data-grid"; import * as Icon from '../utils/IconUtils'; import * as HttpUtils from "../utils/HttpUtils" import * as UrlUtils from "../utils/ApiPathConst" import * as DateUtils from "../utils/DateUtils" import { FiDataGrid } from './FiDataGrid'; import {useTheme} from "@emotion/react"; import {useMediaQuery} from "@mui/material"; import {useIntl} from "react-intl"; import { createDeleteFileColumn } from 'utils/fileListColumns'; import { CONTAINED_PRIMARY_BLUE } from "themes/colorConst"; // ==============================|| EVENT TABLE ||============================== // export default function FileList({ refType, refId, allowDelete, sx, dateHideable,lang, ...props }) { const [rows, setRows] = React.useState([]); const [rowModesModel] = React.useState({}); const theme = useTheme(); const isMdOrLg = useMediaQuery(theme.breakpoints.up('md')); const intl = useIntl(); const [onDownload, setOnDownload] = React.useState(false); React.useEffect(() => { loadData(); }, []); const onDeleteClick = (fileId, skey, filename) => () => { HttpUtils.get( { url: UrlUtils.GET_FILE_DELETE, params: { fileId: fileId, skey: skey, filename: filename }, onSuccess: function () { loadData(); } } ); }; const onDownloadClick = (fileId, skey, filename) => () => { setOnDownload(true) HttpUtils.fileDownload({ fileId: fileId, skey: skey, filename: filename, onResponse:()=>{ setOnDownload(false) }, onError:()=>{ setOnDownload(false) } }); }; const loadData = () => { HttpUtils.post( { url: UrlUtils.POST_FILE_LIST, params: { refType: refType, refId:refId, }, onSuccess: function (responseData) { setRows(responseData.records); } } ); }; const convertToStr = (bytes, decimals) => { if (bytes == 0) return '0 Bytes'; var dm = decimals || 2, sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; let i = 0; i = Math.floor(Math.log(bytes) / Math.log(1024)); return parseFloat((bytes / Math.pow(1024, i)).toFixed(dm)) + ' ' + sizes[i]; } const columns = (dateHideable ? [ { field: 'actions', type: 'actions', headerName: '', width: 50, cellClassName: 'actions', getActions: (params) => { return [ } label="Download" className="textPrimary" onClick={onDownloadClick(params.id, params.row.skey, params.row.filename)} disabled={onDownload} />] }, }, { id: 'filename', field: 'filename', headerName: intl.formatMessage({id: 'fileName'}), width: isMdOrLg ? 'auto' : 400, flex: isMdOrLg ? 3 : undefined, }, { id: 'filesize', field: 'filesize', headerName: intl.formatMessage({id: 'fileSize'}), width: isMdOrLg ? 'auto' : 160, flex: isMdOrLg ? 1 : undefined, valueGetter: (params) => { return convertToStr(params.value); } } ] : [ { id: 'created', field: 'created', headerName: lang=="ch"?"日期":'Created', width: isMdOrLg ? 'auto' : 160, flex: isMdOrLg ? 1 : undefined, valueGetter: (params) => { return DateUtils.datetimeStr(params.value); } }, { field: 'actions', type: 'actions', headerName: '', width: 50, cellClassName: 'actions', getActions: (params) => { return [ } label="Download" className="textPrimary" onClick={onDownloadClick(params.id, params.row.skey, params.row.filename)} disabled={onDownload} />] }, }, { id: 'filename', field: 'filename', headerName: intl.formatMessage({id: 'fileName'}), width: isMdOrLg ? 'auto' : 400, flex: isMdOrLg ? 3 : undefined, }, { id: 'filesize', field: 'filesize', headerName: intl.formatMessage({id: 'fileSize'}), width: isMdOrLg ? 'auto' : 160, flex: isMdOrLg ? 1 : undefined, valueGetter: (params) => { return convertToStr(params.value); } }, ] ); if (allowDelete) { columns.push(createDeleteFileColumn( (id, row) => onDeleteClick(id, row.skey, row.filename), { icon: Icon.Delete, color: 'primary', width: 100 } )); } return ( ); }