diff --git a/src/frontend/src/modals/shareModal/index.tsx b/src/frontend/src/modals/shareModal/index.tsx index e754984ff..0d1e843e6 100644 --- a/src/frontend/src/modals/shareModal/index.tsx +++ b/src/frontend/src/modals/shareModal/index.tsx @@ -1,11 +1,4 @@ -import { - ReactNode, - forwardRef, - useContext, - useEffect, - useRef, - useState, -} from "react"; +import { ReactNode, useContext, useEffect, useRef, useState } from "react"; import EditFlowSettings from "../../components/EditFlowSettingsComponent"; import IconComponent from "../../components/genericIconComponent"; import { TagsSelector } from "../../components/tagsSelectorComponent"; @@ -19,171 +12,166 @@ import { removeApiKeys } from "../../utils/reactflowUtils"; import { getTagsIds } from "../../utils/storeUtils"; import BaseModal from "../baseModal"; -const ShareModal = forwardRef( - ( - props: { - children?: ReactNode; - is_component: boolean; - component: FlowType; - open?: boolean; - setOpen?: (open: boolean) => void; - }, - ref - ): JSX.Element => { - const { version, addFlow } = useContext(FlowsContext); - const { setSuccessData, setErrorData } = useContext(alertContext); - const [checked, setChecked] = useState(true); - const [name, setName] = useState(props.component?.name ?? ""); - const [description, setDescription] = useState( - props.component?.description ?? "" - ); - const [open, setOpen] = useState(props.children ? false : true); +export default function ShareModal({ + component, + is_component, + children, + open, + setOpen, +}: { + children?: ReactNode; + is_component: boolean; + component: FlowType; + open?: boolean; + setOpen?: (open: boolean) => void; +}): JSX.Element { + const { version, addFlow } = useContext(FlowsContext); + const { setSuccessData, setErrorData } = useContext(alertContext); + const [checked, setChecked] = useState(true); + const [name, setName] = useState(component?.name ?? ""); + const [description, setDescription] = useState(component?.description ?? ""); + const [internalOpen, internalSetOpen] = useState(children ? false : true); - const nameComponent = props.is_component ? "Component" : "Flow"; + const nameComponent = is_component ? "Component" : "Flow"; - const [tags, setTags] = useState<{ id: string; name: string }[]>([]); - const [loadingTags, setLoadingTags] = useState(false); - const [sharePublic, setSharePublic] = useState(true); - const [selectedTags, setSelectedTags] = useState([]); - const tagListId = useRef<{ id: string; name: string }[]>([]); + const [tags, setTags] = useState<{ id: string; name: string }[]>([]); + const [loadingTags, setLoadingTags] = useState(false); + const [sharePublic, setSharePublic] = useState(true); + const [selectedTags, setSelectedTags] = useState([]); + const tagListId = useRef<{ id: string; name: string }[]>([]); - useEffect(() => { - handleGetTags(); - }, []); + useEffect(() => { + handleGetTags(); + }, []); - function handleGetTags() { - setLoadingTags(true); - getStoreTags().then((res) => { - setTags(res); - setLoadingTags(false); - }); - } - - useEffect(() => { - setName(props.component?.name ?? ""); - setDescription(props.component?.description ?? ""); - }, [props.component]); - - const handleShareComponent = () => { - const saveFlow: FlowType = checked - ? { - id: props.component!.id, - data: props.component!.data, - description, - name, - last_tested_version: version, - is_component: props.is_component, - } - : removeApiKeys({ - id: props.component!.id, - data: props.component!.data, - description, - name, - last_tested_version: version, - is_component: props.is_component, - }); - saveFlowStore( - saveFlow, - getTagsIds(selectedTags, tagListId), - sharePublic - ).then( - () => { - if (props.is_component) { - addFlow(true, saveFlow); - } - setSuccessData({ - title: `${nameComponent} shared successfully`, - }); - }, - (err) => { - setErrorData({ - title: "Error sharing flow", - list: [err["response"]["data"]["detail"]], - }); - } - ); - }; - - return ( - - - {props.children ? props.children : <>} - - - Share - - - -
- -
-
- { - setSharePublic(event); - }} - /> - -
-
- { - setChecked(event); - }} - /> - -
- - Caution: Uncheck this box only removes API keys from fields - specifically designated for API keys. - -
- - - - -
- ); + function handleGetTags() { + setLoadingTags(true); + getStoreTags().then((res) => { + setTags(res); + setLoadingTags(false); + }); } -); -export default ShareModal; + + useEffect(() => { + setName(component?.name ?? ""); + setDescription(component?.description ?? ""); + }, [component]); + + const handleShareComponent = () => { + const saveFlow: FlowType = checked + ? { + id: component!.id, + data: component!.data, + description, + name, + last_tested_version: version, + is_component: is_component, + } + : removeApiKeys({ + id: component!.id, + data: component!.data, + description, + name, + last_tested_version: version, + is_component: is_component, + }); + saveFlowStore( + saveFlow, + getTagsIds(selectedTags, tagListId), + sharePublic + ).then( + () => { + if (is_component) { + addFlow(true, saveFlow); + } + setSuccessData({ + title: `${nameComponent} shared successfully`, + }); + }, + (err) => { + setErrorData({ + title: "Error sharing flow", + list: [err["response"]["data"]["detail"]], + }); + } + ); + }; + + return ( + + {children ? children : <>} + + Share + + + +
+ +
+
+ { + setSharePublic(event); + }} + /> + +
+
+ { + setChecked(event); + }} + /> + +
+ + Caution: Uncheck this box only removes API keys from fields + specifically designated for API keys. + +
+ + + + +
+ ); +} diff --git a/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx index c7d8f274e..36e1acb1f 100644 --- a/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx +++ b/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx @@ -69,7 +69,7 @@ export default function NodeToolbarComponent({ const [flowComponent, setFlowComponent] = useState(); useEffect(() => { - setFlowComponent(createFlowComponent(data, version)); + setFlowComponent(createFlowComponent(cloneDeep(data), version)); }, [data]); const handleSelectChange = (event) => {