diff --git a/typescript/Frontend/src/components/Context/GroupContextProvider.tsx b/typescript/Frontend/src/components/Context/GroupContextProvider.tsx index 888fc4531..21f1cb904 100644 --- a/typescript/Frontend/src/components/Context/GroupContextProvider.tsx +++ b/typescript/Frontend/src/components/Context/GroupContextProvider.tsx @@ -1,63 +1,47 @@ -import { NodeModel } from "@minoru/react-dnd-treeview"; import { createContext, ReactNode, useCallback, useState } from "react"; import axiosConfig from "../../config/axiosConfig"; +import { transformArrayToTree } from "../../util/group.util"; import { I_Folder, I_Installation } from "../../util/types"; interface GroupContextProviderProps { + currentType: string; + setCurrentType: (value: string) => void; + isMove: boolean; + setIsMove: (value: boolean) => void; data: (I_Folder | I_Installation)[]; setData: (value: (I_Folder | I_Installation)[]) => void; fetchData: () => Promise; loading: boolean; setLoading: (value: boolean) => void; getError: boolean; - tree: NodeModel[]; - setTree: (value: NodeModel[]) => void; - currentType: string; - setCurrentType: (value: string) => void; } export const GroupContext = createContext({ + currentType: "", + setCurrentType: () => {}, + isMove: false, + setIsMove: () => {}, data: [], setData: () => {}, fetchData: () => Promise.resolve(), loading: false, setLoading: () => {}, getError: false, - tree: [], - setTree: () => {}, - currentType: "", - setCurrentType: () => {}, }); -const getTreeData = ( - data: (I_Folder | I_Installation)[] -): NodeModel[] => { - return data.map((element) => { - const isFolder = element.type === "Folder"; - return { - id: isFolder ? element.id : "installation-" + element.id, - parent: element.parentId, - text: element.name, - droppable: isFolder, - data: element, - }; - }); -}; - const GroupContextProvider = ({ children }: { children: ReactNode }) => { + const [currentType, setCurrentType] = useState(""); + const [isMove, setIsMove] = useState(false); const [data, setData] = useState<(I_Folder | I_Installation)[]>([]); const [loading, setLoading] = useState(false); const [getError, setGetError] = useState(false); - const [tree, setTree] = useState[]>([]); - const [currentType, setCurrentType] = useState(""); const fetchData = useCallback(async () => { setLoading(true); return axiosConfig .get("/GetAllFoldersAndInstallations") .then((res) => { - setData(res.data); - setTree(getTreeData(res.data)); + setData(transformArrayToTree(res.data)); setLoading(false); }) .catch((err) => { @@ -69,16 +53,16 @@ const GroupContextProvider = ({ children }: { children: ReactNode }) => { return ( {children} diff --git a/typescript/Frontend/src/components/Groups/FolderForm.tsx b/typescript/Frontend/src/components/Groups/FolderForm.tsx index b22de8229..8e4d2827e 100644 --- a/typescript/Frontend/src/components/Groups/FolderForm.tsx +++ b/typescript/Frontend/src/components/Groups/FolderForm.tsx @@ -1,4 +1,4 @@ -import { Button, CircularProgress, Grid } from "@mui/material"; +import { Button, CircularProgress, Grid, InputLabel } from "@mui/material"; import { useFormik } from "formik"; import { useContext, useState } from "react"; import { FormattedMessage, useIntl } from "react-intl"; @@ -7,6 +7,7 @@ import { I_Folder } from "../../util/types"; import { GroupContext } from "../Context/GroupContextProvider"; import InnovenergySnackbar from "../InnovenergySnackbar"; import InnovenergyTextfield from "../Layout/InnovenergyTextfield"; +import MoveTree from "./Tree/MoveTree"; interface I_CustomerFormProps { values: I_Folder; @@ -20,23 +21,12 @@ const updateFolder = (data: I_Folder) => { const FolderForm = (props: I_CustomerFormProps) => { const { values, id } = props; const intl = useIntl(); + const { isMove, setIsMove } = useContext(GroupContext); const [snackbarOpen, setSnackbarOpen] = useState(false); const [error, setError] = useState(); const [loading, setLoading] = useState(false); - - const { setTree, tree } = useContext(GroupContext); - - const updateTree = (newValues: I_Folder) => { - const elementToUpdate = tree.find( - (element) => element.data?.id.toString() === id - ); - if (elementToUpdate) { - elementToUpdate.data = newValues; - elementToUpdate.text = newValues.name; - setTree([...tree]); - } - }; + const [selectedParentId, setSelectedParentId] = useState(); const formik = useFormik({ initialValues: { @@ -49,10 +39,10 @@ const FolderForm = (props: I_CustomerFormProps) => { updateFolder({ ...values, ...formikValues, + parentId: selectedParentId ?? values.parentId, id: idAsNumber, }) .then((res) => { - updateTree({ ...values, ...formikValues, id: idAsNumber }); setSnackbarOpen(true); setLoading(false); }) @@ -86,6 +76,23 @@ const FolderForm = (props: I_CustomerFormProps) => { value={formik.values.information} handleChange={formik.handleChange} /> + + + + + + + + + {isMove && } + + {loading && }