added CurrentFlowState to zustand
This commit is contained in:
parent
18b2f5e970
commit
6195acee22
11 changed files with 55 additions and 18 deletions
|
|
@ -22,6 +22,7 @@ import { getHealth, getVersion } from "./controllers/API";
|
||||||
import Router from "./routes";
|
import Router from "./routes";
|
||||||
import useAlertStore from "./stores/alertStore";
|
import useAlertStore from "./stores/alertStore";
|
||||||
import { useTypesStore } from "./stores/typesStore";
|
import { useTypesStore } from "./stores/typesStore";
|
||||||
|
import { useDarkStore } from "./stores/darkStore";
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
let { setCurrent, setShowSideBar, setIsStackedOpen } =
|
let { setCurrent, setShowSideBar, setIsStackedOpen } =
|
||||||
|
|
@ -130,7 +131,8 @@ export default function App() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const { isAuthenticated } = useContext(AuthContext);
|
const { isAuthenticated } = useContext(AuthContext);
|
||||||
const { refreshFlows, setVersion } = useContext(FlowsContext);
|
const { refreshFlows } = useContext(FlowsContext);
|
||||||
|
const setVersion = useDarkStore((state) => state.setVersion);
|
||||||
const getTypes = useTypesStore((state) => state.getTypes);
|
const getTypes = useTypesStore((state) => state.getTypes);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,12 @@ import { FlowsContext } from "../../contexts/flowsContext";
|
||||||
import useAlertStore from "../../stores/alertStore";
|
import useAlertStore from "../../stores/alertStore";
|
||||||
import { removeApiKeys } from "../../utils/reactflowUtils";
|
import { removeApiKeys } from "../../utils/reactflowUtils";
|
||||||
import BaseModal from "../baseModal";
|
import BaseModal from "../baseModal";
|
||||||
|
import { useDarkStore } from "../../stores/darkStore";
|
||||||
|
|
||||||
const ExportModal = forwardRef(
|
const ExportModal = forwardRef(
|
||||||
(props: { children: ReactNode }, ref): JSX.Element => {
|
(props: { children: ReactNode }, ref): JSX.Element => {
|
||||||
const { flows, tabId, downloadFlow, version } = useContext(FlowsContext);
|
const { flows, tabId, downloadFlow } = useContext(FlowsContext);
|
||||||
|
const version = useDarkStore((state) => state.version);
|
||||||
const setNoticeData = useAlertStore((state) => state.setNoticeData);
|
const setNoticeData = useAlertStore((state) => state.setNoticeData);
|
||||||
const [checked, setChecked] = useState(true);
|
const [checked, setChecked] = useState(true);
|
||||||
const flow = flows.find((f) => f.id === tabId);
|
const flow = flows.find((f) => f.id === tabId);
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import {
|
||||||
import { getTagsIds } from "../../utils/storeUtils";
|
import { getTagsIds } from "../../utils/storeUtils";
|
||||||
import ConfirmationModal from "../ConfirmationModal";
|
import ConfirmationModal from "../ConfirmationModal";
|
||||||
import BaseModal from "../baseModal";
|
import BaseModal from "../baseModal";
|
||||||
|
import { useDarkStore } from "../../stores/darkStore";
|
||||||
|
|
||||||
export default function ShareModal({
|
export default function ShareModal({
|
||||||
component,
|
component,
|
||||||
|
|
@ -39,7 +40,7 @@ export default function ShareModal({
|
||||||
setOpen?: (open: boolean) => void;
|
setOpen?: (open: boolean) => void;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
}): JSX.Element {
|
}): JSX.Element {
|
||||||
const { version } = useContext(FlowsContext);
|
const version = useDarkStore((state) => state.version);
|
||||||
const hasStore = useStoreStore((state) => state.hasStore);
|
const hasStore = useStoreStore((state) => state.hasStore);
|
||||||
const hasApiKey = useStoreStore((state) => state.hasApiKey);
|
const hasApiKey = useStoreStore((state) => state.hasApiKey);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import {
|
||||||
getNodeId,
|
getNodeId,
|
||||||
} from "../../../../../utils/reactflowUtils";
|
} from "../../../../../utils/reactflowUtils";
|
||||||
import { removeCountFromString } from "../../../../../utils/utils";
|
import { removeCountFromString } from "../../../../../utils/utils";
|
||||||
|
import { useDarkStore } from "../../../../../stores/darkStore";
|
||||||
|
|
||||||
export default function SidebarDraggableComponent({
|
export default function SidebarDraggableComponent({
|
||||||
sectionName,
|
sectionName,
|
||||||
|
|
@ -36,8 +37,8 @@ export default function SidebarDraggableComponent({
|
||||||
official: boolean;
|
official: boolean;
|
||||||
}) {
|
}) {
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const { deleteComponent, version } = useContext(FlowsContext);
|
const { deleteComponent } = useContext(FlowsContext);
|
||||||
const { autoLogin, userData } = useContext(AuthContext);
|
const version = useDarkStore((state) => state.version);
|
||||||
const [cursorPos, setCursorPos] = useState({ x: 0, y: 0 });
|
const [cursorPos, setCursorPos] = useState({ x: 0, y: 0 });
|
||||||
const popoverRef = useRef<HTMLDivElement>(null);
|
const popoverRef = useRef<HTMLDivElement>(null);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ import {
|
||||||
updateFlowPosition,
|
updateFlowPosition,
|
||||||
} from "../../../../utils/reactflowUtils";
|
} from "../../../../utils/reactflowUtils";
|
||||||
import { classNames } from "../../../../utils/utils";
|
import { classNames } from "../../../../utils/utils";
|
||||||
|
import { useDarkStore } from "../../../../stores/darkStore";
|
||||||
|
|
||||||
export default function NodeToolbarComponent({
|
export default function NodeToolbarComponent({
|
||||||
data,
|
data,
|
||||||
|
|
@ -72,7 +73,8 @@ export default function NodeToolbarComponent({
|
||||||
const setNodes = useFlowStore((state) => state.setNodes);
|
const setNodes = useFlowStore((state) => state.setNodes);
|
||||||
const setEdges = useFlowStore((state) => state.setEdges);
|
const setEdges = useFlowStore((state) => state.setEdges);
|
||||||
|
|
||||||
const { saveComponent, flows, version } = useContext(FlowsContext);
|
const { saveComponent, flows } = useContext(FlowsContext);
|
||||||
|
const version = useDarkStore((state) => state.version);
|
||||||
const { takeSnapshot } = useContext(undoRedoContext);
|
const { takeSnapshot } = useContext(undoRedoContext);
|
||||||
const [showModalAdvanced, setShowModalAdvanced] = useState(false);
|
const [showModalAdvanced, setShowModalAdvanced] = useState(false);
|
||||||
const [showconfirmShare, setShowconfirmShare] = useState(false);
|
const [showconfirmShare, setShowconfirmShare] = useState(false);
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,11 @@ import { useParams } from "react-router-dom";
|
||||||
import Header from "../../components/headerComponent";
|
import Header from "../../components/headerComponent";
|
||||||
import { FlowsContext } from "../../contexts/flowsContext";
|
import { FlowsContext } from "../../contexts/flowsContext";
|
||||||
import Page from "./components/PageComponent";
|
import Page from "./components/PageComponent";
|
||||||
|
import { useDarkStore } from "../../stores/darkStore";
|
||||||
|
|
||||||
export default function FlowPage(): JSX.Element {
|
export default function FlowPage(): JSX.Element {
|
||||||
const { flows, tabId, setTabId, version } = useContext(FlowsContext);
|
const { flows, tabId, setTabId } = useContext(FlowsContext);
|
||||||
|
const version = useDarkStore((state) => state.version);
|
||||||
const { id } = useParams();
|
const { id } = useParams();
|
||||||
|
|
||||||
// Set flow tab id
|
// Set flow tab id
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@ export const useDarkStore = create<DarkStoreType>((set) => ({
|
||||||
dark: JSON.parse(window.localStorage.getItem("isDark")!) ?? false,
|
dark: JSON.parse(window.localStorage.getItem("isDark")!) ?? false,
|
||||||
stars: 0,
|
stars: 0,
|
||||||
gradientIndex: gradientIndexInitialState(),
|
gradientIndex: gradientIndexInitialState(),
|
||||||
|
version: "",
|
||||||
|
setVersion: (version) => set(() => ({ version: version })),
|
||||||
setDark: (dark) => set(() => ({ dark: dark })),
|
setDark: (dark) => set(() => ({ dark: dark })),
|
||||||
setStars: (starts) => set(() => ({ stars: starts })),
|
setStars: (starts) => set(() => ({ stars: starts })),
|
||||||
setGradientIndex: (gradientIndex) =>
|
setGradientIndex: (gradientIndex) =>
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,25 @@
|
||||||
import { create } from "zustand";
|
import { create } from "zustand";
|
||||||
import { FlowsManagerStoreType } from "../types/zustand/flowsManager";
|
import { FlowsManagerStoreType } from "../types/zustand/flowsManager";
|
||||||
|
import { FlowState } from "../types/tabs";
|
||||||
let currentFlowId: string = "";
|
|
||||||
|
|
||||||
const useFlowsManagerStore = create<FlowsManagerStoreType>((set, get) => ({
|
const useFlowsManagerStore = create<FlowsManagerStoreType>((set, get) => ({
|
||||||
|
currentFlowId: "",
|
||||||
flows: [],
|
flows: [],
|
||||||
currentFlow: get().flows[currentFlowId],
|
currentFlow: get().flows[get().currentFlowId],
|
||||||
|
isLoading: true,
|
||||||
|
setIsLoading: (isLoading: boolean) => set({ isLoading }),
|
||||||
|
flowsState: {},
|
||||||
|
currentFlowState: get().flowsState[get().currentFlowId],
|
||||||
|
setCurrentFlowState: (flowState: FlowState | ((oldState: FlowState) => FlowState)) => {
|
||||||
|
const newFlowState = typeof flowState === "function" ? flowState(get().currentFlowState) : flowState;
|
||||||
|
set((state) => ({
|
||||||
|
flowsState: {
|
||||||
|
...state.flowsState,
|
||||||
|
[state.currentFlowId]: newFlowState,
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
export default useFlowsManagerStore;
|
export default useFlowsManagerStore;
|
||||||
|
|
|
||||||
|
|
@ -55,14 +55,16 @@ export type FlowsContextType = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export type FlowsState = {
|
export type FlowsState = {
|
||||||
[key: string]: {
|
[key: string]: FlowState;
|
||||||
isPending: boolean;
|
};
|
||||||
formKeysData: {
|
|
||||||
template?: string;
|
export type FlowState = {
|
||||||
input_keys?: Object;
|
isPending: boolean;
|
||||||
memory_keys?: Array<string>;
|
formKeysData: {
|
||||||
handle_keys?: Array<string>;
|
template?: string;
|
||||||
};
|
input_keys?: Object;
|
||||||
|
memory_keys?: Array<string>;
|
||||||
|
handle_keys?: Array<string>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ export type DarkStoreType = {
|
||||||
dark: boolean;
|
dark: boolean;
|
||||||
stars: number;
|
stars: number;
|
||||||
gradientIndex: number;
|
gradientIndex: number;
|
||||||
|
version: string;
|
||||||
|
setVersion: (version: string) => void;
|
||||||
setDark: (dark: boolean) => void;
|
setDark: (dark: boolean) => void;
|
||||||
setStars: (stars: number) => void;
|
setStars: (stars: number) => void;
|
||||||
setGradientIndex: (gradientIndex: number) => void;
|
setGradientIndex: (gradientIndex: number) => void;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,13 @@
|
||||||
import { FlowType } from "../../flow";
|
import { FlowType } from "../../flow";
|
||||||
|
import { FlowState, FlowsState } from "../../tabs";
|
||||||
|
|
||||||
export type FlowsManagerStoreType = {
|
export type FlowsManagerStoreType = {
|
||||||
flows: Array<FlowType>;
|
flows: Array<FlowType>;
|
||||||
currentFlow: FlowType | undefined;
|
currentFlow: FlowType | undefined;
|
||||||
|
currentFlowId: string;
|
||||||
|
isLoading: boolean;
|
||||||
|
setIsLoading: (isLoading: boolean) => void;
|
||||||
|
flowsState: FlowsState;
|
||||||
|
currentFlowState: FlowState;
|
||||||
|
setCurrentFlowState: (state: FlowState | ((oldState: FlowState) => FlowState)) => void;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue