Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 

204 linhas
6.2 KiB

  1. // material-ui
  2. import * as React from 'react';
  3. import {
  4. DataGrid,
  5. GridActionsCellItem,
  6. GridRowModes
  7. } from "@mui/x-data-grid";
  8. import RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';
  9. import { useEffect } from "react";
  10. // import {useNavigate} from "react-router-dom";
  11. // import { useTheme } from '@mui/material/styles';
  12. import {
  13. Box,
  14. Stack,
  15. Button
  16. } from '@mui/material';
  17. // ==============================|| EVENT TABLE ||============================== //
  18. export default function UploadFileTable({ recordList, setRecordList, showPageColumn, _checkCode, _expectedCode }) {
  19. const [rows, setRows] = React.useState(recordList);
  20. const [rowModesModel, setRowModesModel] = React.useState({});
  21. const [showPage, setShowPage] = React.useState(false);
  22. const [checkCode, setCheckCode] = React.useState("");
  23. const [expectedCode, setExpectedCode] = React.useState("");
  24. // const theme = useTheme();
  25. // const navigate = useNavigate()
  26. useEffect(() => {
  27. setCheckCode(_checkCode)
  28. }, [_checkCode]);
  29. useEffect(() => {
  30. setExpectedCode(_expectedCode)
  31. }, [_expectedCode]);
  32. useEffect(() => {
  33. setRows(recordList);
  34. // console.log(disableDelete);
  35. }, [recordList]);
  36. useEffect(() => {
  37. setShowPage(showPageColumn);
  38. // console.log(disableDelete);
  39. }, [showPageColumn]);
  40. function NoRowsOverlay() {
  41. return (
  42. <Stack height="100%" alignItems="center" justifyContent="center">
  43. No File Record
  44. {/* <pre>(rows=&#123;[]&#125;)</pre> */}
  45. </Stack>
  46. );
  47. }
  48. const handleCancelClick = (id) => () => {
  49. setRowModesModel({
  50. ...rowModesModel,
  51. [id]: { mode: GridRowModes.View, ignoreModifications: true },
  52. });
  53. // console.log("Starting Delete")
  54. // const editedRow = rows.find((row) => row.id === id);
  55. // console.log(editedRow)
  56. // console.log(editedRow.isNew)
  57. setRecordList(rows.filter((row) => row.id !== id));
  58. setRows(rows.filter((row) => row.id !== id));
  59. }
  60. const handlePreviewClick = (param) => () => {
  61. var reader = new FileReader();
  62. reader.onload = function () {
  63. let path = reader.result;
  64. var pdf_newTab = window.open("");
  65. pdf_newTab.document.write(
  66. "<html>"
  67. + "<head><title>" + param.row.name + "</title></head>"
  68. + "<body>"
  69. + "<iframe title='" + param.row.name + "' width='100%' height='100%' src='" + path + "" + "'></iframe>"
  70. + "</body>"
  71. + "</html>"
  72. );
  73. };
  74. reader.readAsDataURL(param.row);
  75. }
  76. const columns = showPage?[
  77. {
  78. field: 'actions',
  79. type: 'actions',
  80. headerName: '',
  81. width: 30,
  82. cellClassName: 'actions',
  83. // hide:true,
  84. getActions: ({ id }) => {
  85. return [
  86. <GridActionsCellItem
  87. key="OutSave"
  88. icon={<RemoveCircleOutlineIcon />}
  89. label="delete"
  90. className="textPrimary"
  91. onClick={handleCancelClick(id)}
  92. color="error"
  93. />]
  94. },
  95. },
  96. {
  97. field: 'name',
  98. headerName: 'File Name',
  99. flex: 1,
  100. renderCell: (params) => {
  101. return <Button onClick={handlePreviewClick(params)}><u>{params.row.name}</u></Button>;
  102. },
  103. },
  104. {
  105. id: 'size',
  106. field: 'size',
  107. headerName: 'File Size',
  108. valueGetter: (params) => {
  109. // console.log(params)
  110. return Math.ceil(params.value / 1024) + " KB";
  111. },
  112. flex: 1,
  113. },
  114. {
  115. id: 'no_of_page',
  116. field: 'no_of_page',
  117. headerName: 'Page',
  118. flex: 1,
  119. hide: true
  120. },
  121. ]:[
  122. {
  123. field: 'actions',
  124. type: 'actions',
  125. headerName: '',
  126. width: 30,
  127. cellClassName: 'actions',
  128. // hide:true,
  129. getActions: ({ id }) => {
  130. return [
  131. <GridActionsCellItem
  132. key="OutSave"
  133. icon={<RemoveCircleOutlineIcon />}
  134. label="delete"
  135. className="textPrimary"
  136. onClick={handleCancelClick(id)}
  137. color="error"
  138. />]
  139. },
  140. },
  141. {
  142. field: 'name',
  143. headerName: 'File Name',
  144. flex: 1,
  145. renderCell: (params) => {
  146. return <Button onClick={handlePreviewClick(params)}><u>{params.row.name}</u></Button>;
  147. },
  148. },
  149. {
  150. id: 'check_code',
  151. field: 'check_code',
  152. headerName: 'File Code',
  153. flex: 1,
  154. hide: true,
  155. renderCell: () => {
  156. return (expectedCode == checkCode)?checkCode:<div style={{ margin: 4, color:"red" }}>Warning, File Code not match.<br/>File Code: {checkCode}<br/>Expected Code: {expectedCode}</div>;
  157. },
  158. },
  159. {
  160. id: 'size',
  161. field: 'size',
  162. headerName: 'File Size',
  163. valueGetter: (params) => {
  164. // console.log(params)
  165. return Math.ceil(params.value / 1024) + " KB";
  166. },
  167. flex: 1,
  168. },
  169. ];
  170. return (
  171. <Box style={{ height: '200px', width: '100%' }}>
  172. <DataGrid
  173. rows={rows}
  174. columns={columns}
  175. editMode="row"
  176. sx={{ border: 1 }}
  177. rowModesModel={rowModesModel}
  178. disablePagination
  179. components={{ NoRowsOverlay, }}
  180. // hideFooterPagination={true}
  181. disableSelectionOnClick
  182. disableColumnMenu
  183. disableColumnSelector
  184. hideFooter
  185. getRowHeight={() => 'auto'}
  186. />
  187. </Box>
  188. );
  189. }