123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- import { FC, MouseEvent } from 'react';
- import React from 'react';
- import { makeStyles } from '@material-ui/core/styles';
- import Grid from '@material-ui/core/Grid';
- import Breadcrumbs from '@material-ui/core/Breadcrumbs';
- import TablePagination from '@material-ui/core/TablePagination';
- import Typography from '@material-ui/core/Typography';
- import CustomToolbar from './ToolBar';
- import Table from './Table';
- import { MilvusGridType } from './Types';
- import { useTranslation } from 'react-i18next';
- import TablePaginationActions from './TablePaginationActions';
- const userStyle = makeStyles(theme => ({
- loading: {
- height: '100%',
- display: 'flex',
- alignItems: 'center',
- justifyContent: 'center',
- padding: theme.spacing(20),
- width: '100%',
- },
- titleIcon: {
- verticalAlign: '-3px',
- '& svg': {
- fill: '#32363c',
- },
- },
- tableTitle: {
- '& .last': {
- color: 'rgba(0, 0, 0, 0.54)',
- },
- },
- noData: {
- pointerEvents: 'none',
- color: '#999',
- textAlign: 'center',
- height: '50vh',
- display: 'grid',
- justifyContent: 'center',
- alignContent: 'center',
- fontSize: '32px',
- },
- pagenation: {
- '& .MuiTablePagination-caption': {
- position: 'absolute',
- left: 0,
- bottom: 0,
- top: 0,
- display: 'flex',
- alignItems: 'center',
- '& .rows': {
- color: 'rgba(0,0,0,0.33)',
- marginLeft: theme.spacing(1),
- },
- },
- },
- noBottomPadding: {
- paddingBottom: '0 !important',
- display: 'flex',
- flexDirection: 'column',
- },
- wrapper: {
- height: '100%',
- },
- container: {
- flexWrap: 'nowrap',
- flexDirection: 'column',
- },
- }));
- const MilvusGrid: FC<MilvusGridType> = props => {
- const classes = userStyle();
- const { t } = useTranslation();
- const gridTrans = t('grid') as any;
- const {
- rowCount = 10,
- rowsPerPage = 5,
- primaryKey = 'id',
- showToolbar = false,
- toolbarConfigs = [],
- onChangePage = (
- e: MouseEvent<HTMLButtonElement> | null,
- nextPageNum: number
- ) => {
- console.log('nextPageNum', nextPageNum);
- },
- labelDisplayedRows,
- // pageUnit = 'item',
- page = 0,
- rows = [],
- colDefinitions = [],
- isLoading = false,
- title,
- // titleIcon = <CollectionIcon />,
- searchForm,
- openCheckBox = true,
- disableSelect = false,
- noData = t('grid.noData'),
- showHoverStyle = true,
- selected = [],
- setSelected = () => {},
- } = props;
- const _isSelected = (row: { [x: string]: any }) => {
- // console.log("row selected test", row[primaryKey]);
- return selected.some((s: any) => s[primaryKey] === row[primaryKey]);
- };
- const _onSelected = (event: React.MouseEvent, row: { [x: string]: any }) => {
- let newSelected: any[] = ([] as any[]).concat(selected);
- if (_isSelected(row)) {
- newSelected = newSelected.filter(s => s[primaryKey] !== row[primaryKey]);
- } else {
- newSelected.push(row);
- }
- setSelected(newSelected);
- };
- const _onSelectedAll = (event: React.ChangeEvent) => {
- if ((event.target as HTMLInputElement).checked) {
- const newSelecteds = rows;
- setSelected(newSelecteds);
- return;
- }
- setSelected([]);
- };
- // const defaultLabelRows = ({ from = 0, to = 0, count = 0 }) => {
- // const plural = pageUnit.charAt(pageUnit.length - 1) === 'y' ? 'ies' : 's';
- // const formatUnit =
- // pageUnit.charAt(pageUnit.length - 1) === 'y'
- // ? pageUnit.slice(0, pageUnit.length - 1)
- // : pageUnit;
- // const unit = count > 1 ? `${formatUnit}${plural}` : pageUnit;
- // return `${count} ${unit}`;
- // };
- const defaultLabelRows = ({ from = 0, to = 0, count = 0 }) => {
- return (
- <>
- <Typography variant="body2" component="span">
- {from} - {to}
- </Typography>
- <Typography variant="body2" className="rows" component="span">
- {gridTrans.of} {count} {gridTrans.rows}
- </Typography>
- </>
- );
- };
- return (
- <Grid
- container
- classes={{ root: classes.wrapper, container: classes.container }}
- spacing={3}
- >
- {title && (
- <Grid item xs={12} className={classes.tableTitle}>
- <Breadcrumbs separator="›" aria-label="breadcrumb">
- {title.map(
- (v: any, i: number) =>
- v && (
- <Typography
- key={v}
- className={i === title.length - 1 ? 'last' : ''}
- variant="h6"
- color="textPrimary"
- >
- {v}
- </Typography>
- )
- )}
- </Breadcrumbs>
- </Grid>
- )}
- {searchForm && (
- <Grid item xs={12}>
- {searchForm}
- </Grid>
- )}
- {(showToolbar || toolbarConfigs.length > 0) && (
- <Grid item>
- <CustomToolbar
- toolbarConfigs={toolbarConfigs}
- selected={selected}
- ></CustomToolbar>
- </Grid>
- )}
- <Grid item xs={12} className={classes.noBottomPadding}>
- <Table
- openCheckBox={openCheckBox}
- primaryKey={primaryKey}
- rows={rows}
- selected={selected}
- colDefinitions={colDefinitions}
- onSelectedAll={_onSelectedAll}
- onSelected={_onSelected}
- isSelected={_isSelected}
- disableSelect={disableSelect}
- noData={noData}
- showHoverStyle={showHoverStyle}
- isLoading={isLoading}
- ></Table>
- {rowCount ? (
- <TablePagination
- component="div"
- colSpan={3}
- count={rowCount}
- page={page}
- labelDisplayedRows={labelDisplayedRows || defaultLabelRows}
- rowsPerPage={rowsPerPage}
- rowsPerPageOptions={[]}
- onChangePage={onChangePage}
- className={classes.pagenation}
- ActionsComponent={TablePaginationActions}
- />
- ) : null}
- </Grid>
- </Grid>
- );
- };
- export default MilvusGrid;
|