11import React , { ChangeEvent , useEffect , useState } from "react" ;
2- import { Box , Grid , Pagination } from "@mui/material" ;
2+ import { Box , Chip , Grid , Pagination , Table } from "@mui/material" ;
33
44import { useDispatch , useSelector } from "react-redux" ;
55import config from "../../app.config" ;
66import { RootState } from "../../types/data" ;
77import { fetchDatasets } from "../../actions/dataset" ;
8- import DatasetCard from "../datasets/DatasetCard" ;
8+ import DatasetTableEntry from "../datasets/DatasetTableEntry" ;
9+ import TableHead from "@mui/material/TableHead" ;
10+ import TableRow from "@mui/material/TableRow" ;
11+ import TableCell from "@mui/material/TableCell" ;
12+ import TableBody from "@mui/material/TableBody" ;
13+ import { theme } from "../../theme" ;
14+
15+ type SelectedDataset = {
16+ id : string ,
17+ label : string
18+ } ;
919
1020export const SelectDatasetsModal = ( ) : JSX . Element => {
1121 // Redux connect equivalent
@@ -19,6 +29,7 @@ export const SelectDatasetsModal = (): JSX.Element => {
1929 ( state : RootState ) => state . dataset . datasets . metadata
2030 ) ;
2131
32+ const [ selectedDatasets , setSelectedDatasets ] = useState < SelectedDataset [ ] > ( [ ] ) ;
2233 const [ currPageNum , setCurrPageNum ] = useState < number > ( 1 ) ;
2334 const [ limit ] = useState < number > ( config . defaultDatasetPerPage ) ;
2435
@@ -27,6 +38,16 @@ export const SelectDatasetsModal = (): JSX.Element => {
2738 listDatasets ( ( currPageNum - 1 ) * limit , limit ) ;
2839 } , [ currPageNum , limit ] ) ;
2940
41+ const selectDataset = ( selectedDatasetId : string | undefined , selectedDatasetName : string | undefined ) => {
42+ // add dataset to selection list
43+ if ( selectedDatasetId && selectedDatasetName ) {
44+ setSelectedDatasets ( [
45+ ...selectedDatasets ,
46+ { id : selectedDatasetId , label : selectedDatasetName }
47+ ] ) ;
48+ }
49+ } ;
50+
3051 // pagination
3152 const handlePageChange = ( _ : ChangeEvent < unknown > , value : number ) => {
3253 const newSkip = ( value - 1 ) * limit ;
@@ -38,24 +59,44 @@ export const SelectDatasetsModal = (): JSX.Element => {
3859 < Grid container spacing = { 4 } >
3960 < Grid item xs >
4061 < Grid container spacing = { 2 } >
41- { datasets !== undefined ? (
42- datasets . map ( ( dataset ) => {
62+ {
63+ selectedDatasets ? .map ( ( selected ) => {
4364 return (
44- < Grid item key = { dataset . id } xs = { 12 } sm = { 6 } md = { 4 } lg = { 3 } >
45- < DatasetCard
46- id = { dataset . id }
47- name = { dataset . name }
48- author = { `${ dataset . creator . first_name } ${ dataset . creator . last_name } ` }
49- created = { dataset . created }
50- description = { dataset . description }
51- thumbnailId = { dataset . thumbnail_id }
52- frozen = { dataset . frozen }
53- frozenVersionNum = { dataset . frozen_version_num }
54- download = { false }
55- />
56- </ Grid >
65+ < Chip label = { selected . label } key = { selected . id } />
5766 ) ;
5867 } )
68+ }
69+ </ Grid >
70+ < Grid container spacing = { 2 } >
71+ { datasets !== undefined ? ( < >
72+ < Table sx = { { minWidth : 650 } } aria-label = "simple table" >
73+ < TableHead >
74+ < TableRow >
75+ < TableCell > Name</ TableCell >
76+ < TableCell align = "right" > Created</ TableCell >
77+ < TableCell align = "right" > Size</ TableCell >
78+ < TableCell align = "right" > Type</ TableCell >
79+ < TableCell align = "right" />
80+ </ TableRow >
81+ </ TableHead >
82+ < TableBody >
83+ {
84+ datasets . map ( ( dataset ) => {
85+ return (
86+ < DatasetTableEntry
87+ iconStyle = { {
88+ verticalAlign : "middle" ,
89+ color : theme . palette . primary . main ,
90+ } }
91+ selectDataset = { selectDataset }
92+ dataset = { dataset }
93+ />
94+ ) ;
95+ } )
96+ }
97+ </ TableBody >
98+ </ Table >
99+ </ >
59100 ) : (
60101 < > </ >
61102 ) }
0 commit comments