11import React , { ChangeEvent , useEffect , useState } from "react" ;
2- import { Box , Chip , Grid , Pagination , Table } from "@mui/material" ;
2+ import { Box , Button , Chip , Grid , Pagination , Table } from "@mui/material" ;
33
44import { useDispatch , useSelector } from "react-redux" ;
55import config from "../../app.config" ;
@@ -12,12 +12,18 @@ import TableCell from "@mui/material/TableCell";
1212import TableBody from "@mui/material/TableBody" ;
1313import { theme } from "../../theme" ;
1414
15+ type SelectDatasetsModalProps = {
16+ onSave : any ;
17+ } ;
18+
1519type SelectedDataset = {
1620 id : string ,
1721 label : string
1822} ;
1923
20- export const SelectDatasetsModal = ( ) : JSX . Element => {
24+ export const SelectDatasetsModal = ( props : SelectDatasetsModalProps ) : JSX . Element => {
25+ const { onSave} = props ;
26+
2127 // Redux connect equivalent
2228 const dispatch = useDispatch ( ) ;
2329 const listDatasets = ( skip : number | undefined , limit : number | undefined ) =>
@@ -41,13 +47,19 @@ export const SelectDatasetsModal = (): JSX.Element => {
4147 const selectDataset = ( selectedDatasetId : string | undefined , selectedDatasetName : string | undefined ) => {
4248 // add dataset to selection list
4349 if ( selectedDatasetId && selectedDatasetName ) {
44- setSelectedDatasets ( [
45- ...selectedDatasets ,
46- { id : selectedDatasetId , label : selectedDatasetName }
47- ] ) ;
50+ const record = { id : selectedDatasetId , label : selectedDatasetName } ;
51+ if ( selectedDatasets . filter ( ds => ds . id === selectedDatasetId ) . length === 0 ) {
52+ setSelectedDatasets ( [
53+ ...selectedDatasets ,
54+ record
55+ ] ) ;
56+ } else {
57+ setSelectedDatasets ( selectedDatasets . filter ( ds => ds . id !== selectedDatasetId ) ) ;
58+ }
4859 }
4960 } ;
5061
62+
5163 // pagination
5264 const handlePageChange = ( _ : ChangeEvent < unknown > , value : number ) => {
5365 const newSkip = ( value - 1 ) * limit ;
@@ -58,15 +70,18 @@ export const SelectDatasetsModal = (): JSX.Element => {
5870 return (
5971 < Grid container spacing = { 4 } >
6072 < Grid item xs >
61- < Grid container spacing = { 2 } >
62- {
63- selectedDatasets ?. map ( ( selected ) => {
64- return (
65- < Chip label = { selected . label } key = { selected . id } />
66- ) ;
67- } )
68- }
69- </ Grid >
73+ < Box display = "flex" sx = { { m : 1 } } >
74+ < Grid container spacing = { 2 } >
75+ {
76+ selectedDatasets ?. map ( ( selected ) => {
77+ return (
78+ < Chip label = { selected . label } key = { selected . id }
79+ onDelete = { ( ) => selectDataset ( selected . id , selected . label ) } />
80+ ) ;
81+ } )
82+ }
83+ </ Grid >
84+ </ Box >
7085 < Grid container spacing = { 2 } >
7186 { datasets !== undefined ? ( < >
7287 < Table sx = { { minWidth : 650 } } aria-label = "simple table" >
@@ -90,6 +105,9 @@ export const SelectDatasetsModal = (): JSX.Element => {
90105 } }
91106 selectDataset = { selectDataset }
92107 dataset = { dataset }
108+ selected = { selectedDatasets . filter ( ds =>
109+ ds . id === dataset . id
110+ ) . length > 0 }
93111 />
94112 ) ;
95113 } )
@@ -114,6 +132,11 @@ export const SelectDatasetsModal = (): JSX.Element => {
114132 ) : (
115133 < > </ >
116134 ) }
135+ < Box className = "inputGroup" >
136+ < Button variant = "contained" onClick = { ( ) => onSave ( selectedDatasets ) } >
137+ Next
138+ </ Button >
139+ </ Box >
117140 </ Grid >
118141 </ Grid >
119142 ) ;
0 commit comments