Skip to content

Commit 31ba11f

Browse files
committed
dataset selection mechanism
1 parent 72b24d5 commit 31ba11f

File tree

3 files changed

+63
-21
lines changed

3 files changed

+63
-21
lines changed

frontend/src/components/datasets/DatasetTableEntry.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ type DatasetTableEntryProps = {
1313
iconStyle: {};
1414
selectDataset: any;
1515
dataset: DatasetOut;
16+
selected: boolean;
1617
};
1718

1819

1920
export default function DatsetTableEntry(props: DatasetTableEntryProps) {
20-
const {iconStyle, selectDataset, dataset} = props;
21+
const {iconStyle, selectDataset, dataset, selected} = props;
2122
const [thumbnailUrl, setThumbnailUrl] = useState("");
2223

2324
useEffect(() => {
@@ -28,6 +29,11 @@ export default function DatsetTableEntry(props: DatasetTableEntryProps) {
2829
setThumbnailUrl(url);
2930
}, [dataset]);
3031

32+
useEffect(() => {
33+
console.log(dataset.id);
34+
console.log(selected);
35+
}, [selected]);
36+
3137
const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
3238
const open = Boolean(anchorEl);
3339
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
@@ -37,7 +43,11 @@ export default function DatsetTableEntry(props: DatasetTableEntryProps) {
3743
return (
3844
<TableRow
3945
key={dataset.id}
40-
sx={{"&:last-child td, &:last-child th": {border: 0}}}
46+
sx={{
47+
"&:last-child td, &:last-child th": {border: 0},
48+
//backgroundColor: selected ? theme.palette.secondary.main : null,
49+
backgroundColor: selected ? "lightyellow" : null,
50+
}}
4151
>
4252
<TableCell component="th" scope="row" key={`${dataset.id}-icon`}>
4353
{dataset.thumbnail_id ? (

frontend/src/components/projects/CreateProject.tsx

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export const CreateProject = (): JSX.Element => {
3333
return required;
3434
};
3535

36-
// step 1 - pick datasets
36+
// step 1 - project details
3737
const onProjectSave = (formData: any) => {
3838
setProjectRequestForm(formData);
3939

@@ -46,7 +46,14 @@ export const CreateProject = (): JSX.Element => {
4646

4747
handleNext();
4848
};
49-
// step 2 - add users
49+
50+
// step 2 - pick datasets
51+
const onDatasetsSave = (selectedDatasets: any[]) => {
52+
console.log(selectedDatasets);
53+
handleNext();
54+
};
55+
56+
// step 3 - add users
5057

5158
// step
5259
const [activeStep, setActiveStep] = useState(0);
@@ -92,15 +99,17 @@ export const CreateProject = (): JSX.Element => {
9299
<StepLabel>Select Datasets</StepLabel>
93100
<StepContent>
94101
<Box>
95-
<SelectDatasetsModal/>
102+
<SelectDatasetsModal onSave={onDatasetsSave}/>
96103
</Box>
97104
</StepContent>
98105
</Step>
99106

100107
<Step key="invite-users">
101108
<StepLabel>Invite Users</StepLabel>
102109
<StepContent>
103-
<Box/>
110+
<Box>
111+
<SelectDatasetsModal onSave={onDatasetsSave}/>
112+
</Box>
104113
</StepContent>
105114
</Step>
106115
</Stepper>

frontend/src/components/projects/SelectDatasetsModal.tsx

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 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

44
import {useDispatch, useSelector} from "react-redux";
55
import config from "../../app.config";
@@ -12,12 +12,18 @@ import TableCell from "@mui/material/TableCell";
1212
import TableBody from "@mui/material/TableBody";
1313
import {theme} from "../../theme";
1414

15+
type SelectDatasetsModalProps = {
16+
onSave: any;
17+
};
18+
1519
type 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

Comments
 (0)