diff --git a/dashboard/src/states/Dashboard/pages/MetaData/MetaData.jsx b/dashboard/src/states/Dashboard/pages/MetaData/MetaData.jsx new file mode 100644 index 0000000..c7357a7 --- /dev/null +++ b/dashboard/src/states/Dashboard/pages/MetaData/MetaData.jsx @@ -0,0 +1,117 @@ +import {useContext, useEffect, useState} from "react"; +import {deleteRequest, getRequest, patchRequest} from "@/common/utils/RequestUtil.js"; +import {ProjectContext} from "@/states/Dashboard/contexts/Project"; +import {Button, Chip, CircularProgress, IconButton, Link, Stack, Typography} from "@mui/material"; +import {Delete, TextFields, ToggleOn, LooksOneRounded, Edit} from "@mui/icons-material"; +import PermissionCreationDialog from "./components/MetaCreationDialog"; + +export const MetaData = () => { + const {currentProject} = useContext(ProjectContext); + + const [editItem, setEditItem] = useState(null); + const [loading, setLoading] = useState(true); + const [dialogOpen, setDialogOpen] = useState(false); + const [metaData, setMetaData] = useState([]); + + const fetchMetaData = async () => { + try { + const data = await getRequest(`/meta/${currentProject.id}/list`); + + if (!data) return; + + setMetaData(data); + setLoading(false); + } catch (e) { + console.error(e); + } + } + + const toggleVisibility = async (meta) => { + try { + await patchRequest(`/meta/${currentProject.id}/${meta.name}`, { + public: !meta.public + }); + await fetchMetaData(); + } catch (e) { + console.error(e); + } + } + + const deleteMetaItem = async (meta) => { + try { + await deleteRequest(`/meta/${currentProject.id}/${meta}`); + await fetchMetaData(); + } catch (e) { + console.error(e); + } + } + + useEffect(() => { + fetchMetaData(); + + const timer = setInterval(fetchMetaData, 5000); + + return () => clearInterval(timer); + }, []); + + return ( + + setDialogOpen(false)} + fetchPermissions={fetchMetaData} editItem={editItem} setEditItem={setEditItem} /> + + + + {loading && <>Meta-Items} + {!loading && <>{metaData.length} Meta-Items} + + + + + + {metaData.map((meta, index) => ( + + + + {meta.type === "BOOLEAN" && } + {meta.type === "TEXT" && } + {meta.type === "NUMBER" && } + {meta.name} + toggleVisibility(meta)}/> + + + {meta.description} {meta.defaultValue} + + + + + { + setEditItem(meta); + setDialogOpen(true); + }}> + deleteMetaItem(meta.name)}> + + + ))} + + {loading && + + } + + {!loading && metaData.length === 0 && + + No meta data created. setDialogOpen(true)} color="primary" + sx={{cursor: "pointer"}}>Create one + + } + + + ); +} \ No newline at end of file diff --git a/dashboard/src/states/Dashboard/pages/MetaData/index.js b/dashboard/src/states/Dashboard/pages/MetaData/index.js new file mode 100644 index 0000000..bebf433 --- /dev/null +++ b/dashboard/src/states/Dashboard/pages/MetaData/index.js @@ -0,0 +1 @@ +export {MetaData as default} from "./MetaData.jsx"; \ No newline at end of file