diff --git a/space_flow/src/App.tsx b/space_flow/src/App.tsx
index 32b87e72f..8787b2513 100644
--- a/space_flow/src/App.tsx
+++ b/space_flow/src/App.tsx
@@ -1,149 +1,144 @@
import "reactflow/dist/style.css";
-import { useState, useRef, useEffect, useContext } from "react";
-import { ReactFlowProvider } from "reactflow";
+import { useState, useEffect, useContext } from "react";
import "./App.css";
import { useLocation } from "react-router-dom";
import ErrorAlert from "./alerts/error";
import NoticeAlert from "./alerts/notice";
import SuccessAlert from "./alerts/success";
import ExtraSidebar from "./components/ExtraSidebarComponent";
-import { alertContext } from "./contexts/alertContext";
+import { alertContext } from "./contexts/alertContext";
import { locationContext } from "./contexts/locationContext";
-import FlowPage from "./pages/FlowPage";
import Sidebar from "./components/SidebarComponent";
import Header from "./components/HeaderComponent";
-import { TabsProvider } from "./contexts/tabsContext";
import { TabsManager } from "./pages/FlowPage/flowManager";
export default function App() {
- var _ = require("lodash");
-
+ var _ = require("lodash");
- let { setAtual, setShowSideBar, setIsStackedOpen} =
- useContext(locationContext);
- let location = useLocation();
- useEffect(() => {
- setAtual(location.pathname.replace(/\/$/g, "").split("/"));
- setShowSideBar(true);
- setIsStackedOpen(true);
- }, [location.pathname, setAtual, setIsStackedOpen, setShowSideBar]);
+ let { setCurrent, setShowSideBar, setIsStackedOpen } =
+ useContext(locationContext);
+ let location = useLocation();
+ useEffect(() => {
+ setCurrent(location.pathname.replace(/\/$/g, "").split("/"));
+ setShowSideBar(true);
+ setIsStackedOpen(true);
+ }, [location.pathname, setCurrent, setIsStackedOpen, setShowSideBar]);
- const {
- errorData,
- errorOpen,
- setErrorOpen,
- noticeData,
- noticeOpen,
- setNoticeOpen,
- successData,
- successOpen,
- setSuccessOpen,
- } = useContext(alertContext);
+ const {
+ errorData,
+ errorOpen,
+ setErrorOpen,
+ noticeData,
+ noticeOpen,
+ setNoticeOpen,
+ successData,
+ successOpen,
+ setSuccessOpen,
+ } = useContext(alertContext);
- const [alertsList, setAlertsList] = useState([]);
+ const [alertsList, setAlertsList] = useState([]);
- useEffect(() => {
- if (errorOpen && errorData) {
- setErrorOpen(false);
- setAlertsList((old) => {
- let newAlertsList = [
- ...old,
- { type: "error", data: _.cloneDeep(errorData), id: _.uniqueId() },
- ];
- return newAlertsList;
- });
- } else if (noticeOpen && noticeData) {
- setNoticeOpen(false);
- setAlertsList((old) => {
- let newAlertsList = [
- ...old,
- { type: "notice", data: _.cloneDeep(noticeData), id: _.uniqueId() },
- ];
- return newAlertsList;
- });
- } else if (successOpen && successData) {
- setSuccessOpen(false);
- setAlertsList((old) => {
- let newAlertsList = [
- ...old,
- { type: "success", data: _.cloneDeep(successData), id: _.uniqueId() },
- ];
- return newAlertsList;
- });
- }
- }, [errorData, errorOpen, noticeData, noticeOpen, successData, successOpen]);
+ useEffect(() => {
+ if (errorOpen && errorData) {
+ setErrorOpen(false);
+ setAlertsList((old) => {
+ let newAlertsList = [
+ ...old,
+ { type: "error", data: _.cloneDeep(errorData), id: _.uniqueId() },
+ ];
+ return newAlertsList;
+ });
+ } else if (noticeOpen && noticeData) {
+ setNoticeOpen(false);
+ setAlertsList((old) => {
+ let newAlertsList = [
+ ...old,
+ { type: "notice", data: _.cloneDeep(noticeData), id: _.uniqueId() },
+ ];
+ return newAlertsList;
+ });
+ } else if (successOpen && successData) {
+ setSuccessOpen(false);
+ setAlertsList((old) => {
+ let newAlertsList = [
+ ...old,
+ { type: "success", data: _.cloneDeep(successData), id: _.uniqueId() },
+ ];
+ return newAlertsList;
+ });
+ }
+ }, [errorData, errorOpen, noticeData, noticeOpen, successData, successOpen]);
- const removeAlert = (id: number) => {
- setAlertsList((prevAlertsList) =>
- prevAlertsList.filter((alert) => alert.id !== id)
- );
- };
+ const removeAlert = (id: number) => {
+ setAlertsList((prevAlertsList) =>
+ prevAlertsList.filter((alert) => alert.id !== id)
+ );
+ };
- const user = {
- name: "Whitney Francis",
- email: "whitney.francis@example.com",
- imageUrl:
- "https://images.unsplash.com/photo-1517365830460-955ce3ccd263?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80",
- };
+ const user = {
+ name: "Whitney Francis",
+ email: "whitney.francis@example.com",
+ imageUrl:
+ "https://images.unsplash.com/photo-1517365830460-955ce3ccd263?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=2&w=256&h=256&q=80",
+ };
- const userNavigation = [
- { name: "Your Projects", href: "/" },
- // {
- // name: "Account settings",
- // href: "http://localhost:4455/.ory/kratos/public/self-service/settings/browser",
- // },
- { name: "Sign out", href: "/" },
- ];
+ const userNavigation = [
+ { name: "Your Projects", href: "/" },
+ // {
+ // name: "Account settings",
+ // href: "http://localhost:4455/.ory/kratos/public/self-service/settings/browser",
+ // },
+ { name: "Sign out", href: "/" },
+ ];
- return (
- //need parent component with width and height
-
-
-
-
-
-
-
-
+ return (
+ //need parent component with width and height
+
+
+
+
+
+
+
- {/* Main area */}
-
- {/* Primary column */}
-
-
-
-
-
-
- {alertsList.map((alert) => (
-
- {alert.type === "error" ? (
-
- ) : alert.type === "notice" ? (
-
- ) : (
-
- )}
-
- ))}
-
-
- );
+ {/* Main area */}
+
+ {/* Primary column */}
+
+
+
+
+
+
+ {alertsList.map((alert) => (
+
+ {alert.type === "error" ? (
+
+ ) : alert.type === "notice" ? (
+
+ ) : (
+
+ )}
+
+ ))}
+
+
+ );
}
diff --git a/space_flow/src/alerts/error/errorClass.ts b/space_flow/src/alerts/error/errorClass.ts
deleted file mode 100644
index a37691976..000000000
--- a/space_flow/src/alerts/error/errorClass.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-const defaultErrorMessages ={
- deleteRLAS:"Could not remove label from record, please try again",
- addRLAS:"Could not label this record, please try again",
- deleteRecords:"Could not delete record, please try again later"
-}
-
-
-
-export class CustomError extends Error{
- constructor(message:string){
- super(message)
- Object.setPrototypeOf(this,CustomError.prototype)
- }
-
- getErrorMessage(): string{
- return defaultErrorMessages[this.message]?? "unknow error, please try again"
- }
-}
\ No newline at end of file
diff --git a/space_flow/src/components/ExtraSidebarComponent/index.tsx b/space_flow/src/components/ExtraSidebarComponent/index.tsx
index 7f6ef2c4a..8f2220cd0 100644
--- a/space_flow/src/components/ExtraSidebarComponent/index.tsx
+++ b/space_flow/src/components/ExtraSidebarComponent/index.tsx
@@ -1,13 +1,15 @@
import { Disclosure } from "@headlessui/react";
-import { ChevronLeftIcon } from "@heroicons/react/24/outline";
+import { ArrowUpTrayIcon, ChevronLeftIcon } from "@heroicons/react/24/outline";
import { useContext } from "react";
import { Link } from "react-router-dom";
import { classNames } from "../../utils";
import { locationContext } from "../../contexts/locationContext";
+import { TabsContext } from "../../contexts/tabsContext";
export default function ExtraSidebar() {
+ const {uploadFlow} = useContext(TabsContext)
const {
- atual,
+ current,
isStackedOpen,
setIsStackedOpen,
extraNavigation,
@@ -20,7 +22,7 @@ export default function ExtraSidebar() {
isStackedOpen ? "w-60" : "w-0 "
} flex-shrink-0 flex overflow-hidden flex-col border-r transition-all duration-500`}
>
-
+
{extraNavigation.title}
@@ -32,7 +34,7 @@ export default function ExtraSidebar() {
-
+
{extraNavigation.options ? (
>
diff --git a/space_flow/src/components/HeaderComponent/index.tsx b/space_flow/src/components/HeaderComponent/index.tsx
index 3f5981a63..fc6442161 100644
--- a/space_flow/src/components/HeaderComponent/index.tsx
+++ b/space_flow/src/components/HeaderComponent/index.tsx
@@ -45,7 +45,7 @@ export default function Header({user, userNavigation}){
- {/*
+
{renderLayer(setIsOpen(false)} open={isOpen}> )}
-
-
+ */}
-
*/}
+
)
diff --git a/space_flow/src/components/SidebarComponent/sidebarButton/index.tsx b/space_flow/src/components/SidebarComponent/sidebarButton/index.tsx
index 447f3fc52..0540d1964 100644
--- a/space_flow/src/components/SidebarComponent/sidebarButton/index.tsx
+++ b/space_flow/src/components/SidebarComponent/sidebarButton/index.tsx
@@ -4,14 +4,14 @@ import { useContext } from "react"
import { locationContext } from "../../../contexts/locationContext";
export default function SidebarButton({item}){
- let {atual}= useContext(locationContext);
+ let {current}= useContext(locationContext);
return (
<>
diff --git a/space_flow/src/components/breadcrumbComponent/index.tsx b/space_flow/src/components/breadcrumbComponent/index.tsx
index c4db2d896..809a4f144 100644
--- a/space_flow/src/components/breadcrumbComponent/index.tsx
+++ b/space_flow/src/components/breadcrumbComponent/index.tsx
@@ -22,7 +22,7 @@ function getPages(atual){
}
export default function Breadcrumb(){
- let {atual} = useContext(locationContext);
+ let {current} = useContext(locationContext);
return (
- {getPages(atual).map((page) => (
+ {getPages(current).map((page) => (
diff --git a/space_flow/src/components/chatComponent/index.tsx b/space_flow/src/components/chatComponent/index.tsx
index c2b43d280..6a31d6560 100644
--- a/space_flow/src/components/chatComponent/index.tsx
+++ b/space_flow/src/components/chatComponent/index.tsx
@@ -9,13 +9,16 @@ import { useContext, useEffect, useRef, useState } from "react";
import { sendAll } from "../../controllers/NodesServices";
import { alertContext } from "../../contexts/alertContext";
import { nodeColors } from "../../utils";
+import { TabsContext } from "../../contexts/tabsContext";
const _ = require("lodash");
-export default function Chat({ reactFlowInstance }) {
+export default function Chat({flow, reactFlowInstance }) {
+ const {updateFlow} = useContext(TabsContext)
+ const [saveChat,setSaveChat] = useState(false)
const [open, setOpen] = useState(true);
const [chatValue, setChatValue] = useState("");
- const [chatHistory, setChatHistory] = useState([]);
+ const [chatHistory, setChatHistory] = useState(flow.chat);
const {setErrorData} = useContext(alertContext);
const addChatHistory = (message, isSend) => {
setChatHistory((old) => {
@@ -23,9 +26,18 @@ export default function Chat({ reactFlowInstance }) {
newChat.push({ message, isSend });
return newChat;
});
+ setSaveChat(chat=>!chat)
};
useEffect(()=>{
- ref.current.scrollIntoView({behavior: 'smooth'});
+ console.log("flow")
+ updateFlow({..._.cloneDeep(flow),chat:chatHistory})
+ },[saveChat])
+ useEffect(()=>{
+ setChatHistory(flow.chat)
+ },[flow])
+ useEffect(()=>{
+ if(ref.current)
+ ref.current.scrollIntoView({behavior: 'smooth'});
}, [chatHistory])
function validateNodes(){
if(reactFlowInstance.getNodes().some((n) => (n.data.node && Object.keys(n.data.node.template).some((t: any) => ((n.data.node.template[t].required && n.data.node.template[t].value === "") && (n.data.node.template[t].required && !reactFlowInstance.getEdges().some((e) => (e.sourceHandle.split('|')[1] === t && e.sourceHandle.split('|')[2] === n.id)))))))){
@@ -40,6 +52,29 @@ export default function Chat({ reactFlowInstance }) {
return true;
}
const ref = useRef(null);
+
+ function sendMessage(){
+ console.log(reactFlowInstance.toObject())
+ if(chatValue !== ""){
+ if(validateNodes()){
+ if(validateChatNodes()){
+ let message = chatValue;
+ setChatValue("");
+ addChatHistory(message, true);
+ console.log({...reactFlowInstance.toObject(),message,chatHistory})
+ sendAll({...reactFlowInstance.toObject(),message,chatHistory}).then((r) => {addChatHistory(r.data.result, false);});
+ } else {
+ setErrorData({title: 'Error sending message', list:['Chat nodes are missing.']})
+ }
+
+ } else {
+ setErrorData({title: 'Error sending message', list:['There are required fields not filled yet.']})
+ }
+ } else {
+ setErrorData({title: 'Error sending message', list:['The message cannot be empty.']})
+ }
+ }
+
return (
<>
(
{c.isSend ? (
-
-
+
) : (
-
-
+
@@ -90,6 +125,11 @@ export default function Chat({ reactFlowInstance }) {
{
+ if(event.key==='Enter'){
+ sendMessage()
+ }
+ }}
type="text"
value={chatValue}
onChange={(e) => {
@@ -100,28 +140,7 @@ export default function Chat({ reactFlowInstance }) {
/>