frontend/src/components/gallery/DatasetView/DatasetView.tsx (105 lines of code) (raw):

import React, { useState, useEffect } from 'react'; import { IBucket } from '../../../models'; import { Container, Grid, Select, FormControl, InputLabel, MenuItem, TextField, InputAdornment, Button, makeStyles, Dialog } from '@material-ui/core'; import AddBoxIcon from '@material-ui/icons/AddBox'; import SearchIcon from '@material-ui/icons/Search'; import { useTypedSelector, useAppDispatch } from '../../../store'; import { getDatasets } from '../../../store/data'; import { DatasetGrid } from './DatasetGrid'; import { AddDataset } from '../../addDataset'; const useStyles = makeStyles({ button: { paddingTop: '0.4375rem', paddingBottom: '0.4375rem' } }); const DatasetView = (): JSX.Element => { const classes = useStyles(); const dispatch = useAppDispatch(); const buckets = useTypedSelector(({ data }) => data.buckets); const [currentBucketId, setCurrentBucketId] = useState(''); const [searchTerm, setSearchTerm] = useState(''); const [isCreatingTask, setIsCreatingTask] = useState(false); useEffect(() => { if (buckets.length === 1) { setCurrentBucketId(buckets[0].id); dispatch(getDatasets(buckets[0].id)); } }, [dispatch, buckets]); const HandleChange = ({ target: { value } }: any) => { setCurrentBucketId(value); dispatch(getDatasets(value)); }; return ( <Container maxWidth={'xl'}> <Grid container spacing={2}> <Grid item xs={12} sm={6} md={3}> <FormControl size="small"> <InputLabel id="task-bucket-name">Bucket</InputLabel> <Select labelId="task-bucket-name" name="bucketId" label="Bucket" value={currentBucketId} onChange={HandleChange} > {buckets.map((bucket: IBucket, index: any) => ( <MenuItem key={index} value={bucket.id}> {bucket.name} </MenuItem> ))} </Select> </FormControl> </Grid> <Grid item xs={12} sm={6} md={3}> <TextField name="path" size="small" label="Search Dataset Path" value={searchTerm} disabled={!currentBucketId} onChange={(e: any) => { setSearchTerm(e.target.value); }} InputProps={{ endAdornment: ( <InputAdornment position="end"> <SearchIcon /> </InputAdornment> ) }} /> </Grid> <Grid item xs={12} sm={6} md={3}> <Button variant="contained" color="primary" className={classes.button} onClick={() => setIsCreatingTask(true)} startIcon={<AddBoxIcon />} > Add Dataset </Button> </Grid> </Grid> <DatasetGrid searchTerm={searchTerm} currentBucketId={currentBucketId} /> <Dialog open={isCreatingTask} onClose={() => setIsCreatingTask(false)} scroll="body" > <AddDataset onClose={() => setIsCreatingTask(false)} /> </Dialog> </Container> ); }; export default DatasetView;