Skip to content

Commit 0e98928

Browse files
authored
Implemented Metadata Definition UI (#150)
* Implemented Metadata Definition UI * Addressing PR comments Implement UI for Metadata definition 2/? * Bug fixes * Fixing popup resize issue * Minor UI improvements
1 parent 531f61e commit 0e98928

File tree

9 files changed

+497
-2
lines changed

9 files changed

+497
-2
lines changed

frontend/src/actions/metadata.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,23 @@ export function fetchMetadataDefinitions(name=null, skip=0, limit=10){
1919
};
2020
}
2121

22+
export const SAVE_METADATA_DEFINITIONS = "SAVE_METADATA_DEFINITIONS";
23+
export function postMetadataDefinitions(metadataDefinition){
24+
return (dispatch) => {
25+
return V2.MetadataService.saveMetadataDefinitionApiV2MetadataDefinitionPost(metadataDefinition)
26+
.then(json => {
27+
dispatch({
28+
type: SAVE_METADATA_DEFINITIONS,
29+
metadataDefinitionList: json,
30+
receivedAt: Date.now(),
31+
});
32+
})
33+
.catch(reason => {
34+
dispatch(handleErrors(reason, postMetadataDefinitions(metadataDefinition)));
35+
});
36+
};
37+
}
38+
2239

2340
export const RECEIVE_DATASET_METADATA = "RECEIVE_DATASET_METADATA";
2441
export function fetchDatasetMetadata(datasetId){

frontend/src/components/Layout.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {Link} from "@mui/material";
2121
import {Link as RouterLink, useLocation} from 'react-router-dom';
2222
import {useSelector} from "react-redux";
2323
import {RootState} from "../types/data";
24-
import {AddBox, Explore} from "@material-ui/icons";
24+
import {AddBox, Create, Explore} from "@material-ui/icons";
2525
import {EmbeddedSearch} from "./search/EmbeddedSearch";
2626
import {SearchErrorBoundary} from "./search/SearchErrorBoundary";
2727
import {searchTheme} from "../theme";
@@ -224,6 +224,18 @@ export default function PersistentDrawerLeft(props) {
224224
</ListItemButton>
225225
</ListItem>
226226
</List>
227+
<Divider/>
228+
<List>
229+
<ListItem key={"newmetadata"} disablePadding>
230+
<ListItemButton component={RouterLink} to="/new-metadata-definition">
231+
<ListItemIcon>
232+
<Create/>
233+
</ListItemIcon>
234+
<ListItemText primary={"Create Metadata Definition"}/>
235+
</ListItemButton>
236+
</ListItem>
237+
</List>
238+
<Divider/>
227239
</Drawer>
228240
<Main open={open}>
229241
<DrawerHeader/>

frontend/src/components/datasets/Dataset.tsx

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, {useEffect, useState} from "react";
2-
import {Box, Button, Dialog, Divider, Grid, IconButton, Menu, MenuItem, Tab, Tabs, Typography} from "@mui/material";
2+
import {Box, Button, Dialog, Divider, Grid, IconButton, Menu, MenuItem, Tab, Tabs, Typography, DialogActions, DialogContent, DialogContentText, DialogTitle,} from "@mui/material";
33
import {ClowderInput} from "../styledComponents/ClowderInput";
44
import {ClowderButton} from "../styledComponents/ClowderButton";
55
import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown";
@@ -26,6 +26,7 @@ import {parseDate} from "../../utils/common";
2626
import config from "../../app.config";
2727
import {DatasetIn, MetadataIn} from "../../openapi/v2";
2828
import {DisplayMetadata} from "../metadata/DisplayMetadata";
29+
import {CreateMetadataDefinition} from "../metadata/CreateMetadataDefinition";
2930
import {EditMetadata} from "../metadata/EditMetadata";
3031
import {
3132
deleteDatasetMetadata as deleteDatasetMetadataAction,
@@ -92,6 +93,7 @@ export const Dataset = (): JSX.Element => {
9293
const [datasetDescription, setDatasetDescription] = React.useState<string>("");
9394
const [enableAddMetadata, setEnableAddMetadata] = React.useState<boolean>(false);
9495
const [metadataRequestForms, setMetadataRequestForms] = useState({});
96+
const [openPopup, setOpenPopup] = React.useState<boolean>(false)
9597

9698
// component did mount list all files in dataset
9799
useEffect(() => {
@@ -276,6 +278,9 @@ export const Dataset = (): JSX.Element => {
276278
>
277279
<CloseIcon />
278280
</IconButton>
281+
<Button variant="contained" onClick={() => {setOpenPopup(true);}} sx={{ mt: 1, mr: 1, "alignItems": "right" }}>
282+
Add new metadata definition
283+
</Button>
279284
<EditMetadata resourceType="dataset" resourceId={datasetId}
280285
setMetadata={setMetadata}
281286
/>
@@ -286,6 +291,22 @@ export const Dataset = (): JSX.Element => {
286291
sx={{ mt: 1, mr: 1 }}>
287292
Cancel
288293
</Button>
294+
{
295+
openPopup ?
296+
<>
297+
<Dialog open={openPopup} onClose={() => {setOpenPopup(false);}} fullWidth={true} maxWidth={"md"}>
298+
<DialogTitle>Add new metadata definition</DialogTitle>
299+
<DialogContent>
300+
<DialogContentText>Please fill out the metadata information here.</DialogContentText>
301+
<CreateMetadataDefinition/>
302+
</DialogContent>
303+
<DialogActions>
304+
<Button onClick={() => {setOpenPopup(false);}}>Cancel</Button>
305+
</DialogActions>
306+
</Dialog>
307+
</>
308+
: <></>
309+
}
289310
</>
290311
:
291312
<>

0 commit comments

Comments
 (0)