Refactor: make new flow create as "Untitled document" instead of random name (#1408)

This commit is contained in:
Cristhian Zanforlin Lousa 2024-02-07 20:00:21 -03:00 • committed by GitHub
commit 034312d2a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 24 additions and 7 deletions

View file

@ -7,20 +7,23 @@ import {
DropdownMenuTrigger, DropdownMenuTrigger,
} from "../../../ui/dropdown-menu"; } from "../../../ui/dropdown-menu";
import { useNavigate } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
import FlowSettingsModal from "../../../../modals/flowSettingsModal"; import FlowSettingsModal from "../../../../modals/flowSettingsModal";
import useAlertStore from "../../../../stores/alertStore"; import useAlertStore from "../../../../stores/alertStore";
import useFlowsManagerStore from "../../../../stores/flowsManagerStore"; import useFlowsManagerStore from "../../../../stores/flowsManagerStore";
import IconComponent from "../../../genericIconComponent"; import IconComponent from "../../../genericIconComponent";
import { Button } from "../../../ui/button"; import { Button } from "../../../ui/button";
import { Node } from "reactflow";
import useFlowStore from "../../../../stores/flowStore";
export const MenuBar = (): JSX.Element => { export const MenuBar = ({removeFunction}: {removeFunction: (nodes: Node[]) => void}): JSX.Element => {
const addFlow = useFlowsManagerStore((state) => state.addFlow); const addFlow = useFlowsManagerStore((state) => state.addFlow);
const currentFlow = useFlowsManagerStore((state) => state.currentFlow); const currentFlow = useFlowsManagerStore((state) => state.currentFlow);
const setErrorData = useAlertStore((state) => state.setErrorData); const setErrorData = useAlertStore((state) => state.setErrorData);
const undo = useFlowsManagerStore((state) => state.undo); const undo = useFlowsManagerStore((state) => state.undo);
const redo = useFlowsManagerStore((state) => state.redo); const redo = useFlowsManagerStore((state) => state.redo);
const [openSettings, setOpenSettings] = useState(false); const [openSettings, setOpenSettings] = useState(false);
const n = useFlowStore((state) => state.nodes);
const navigate = useNavigate(); const navigate = useNavigate();
@ -39,6 +42,7 @@ export const MenuBar = (): JSX.Element => {
<div className="round-button-div"> <div className="round-button-div">
<button <button
onClick={() => { onClick={() => {
removeFunction(n)
navigate(-1); navigate(-1);
}} }}
> >

View file

@ -1,6 +1,6 @@
import { useContext, useEffect } from "react"; import { useContext, useEffect } from "react";
import { FaDiscord, FaGithub, FaTwitter } from "react-icons/fa"; import { FaDiscord, FaGithub, FaTwitter } from "react-icons/fa";
import { Link, useLocation, useNavigate } from "react-router-dom"; import { Link, useLocation, useNavigate, useParams } from "react-router-dom";
import AlertDropdown from "../../alerts/alertDropDown"; import AlertDropdown from "../../alerts/alertDropDown";
import { USER_PROJECTS_HEADER } from "../../constants/constants"; import { USER_PROJECTS_HEADER } from "../../constants/constants";
import { AuthContext } from "../../contexts/authContext"; import { AuthContext } from "../../contexts/authContext";
@ -21,14 +21,19 @@ import {
} from "../ui/dropdown-menu"; } from "../ui/dropdown-menu";
import { Separator } from "../ui/separator"; import { Separator } from "../ui/separator";
import MenuBar from "./components/menuBar"; import MenuBar from "./components/menuBar";
import useFlowsManagerStore from "../../stores/flowsManagerStore";
import useFlowStore from "../../stores/flowStore";
import { Node } from "reactflow";
export default function Header(): JSX.Element { export default function Header(): JSX.Element {
const notificationCenter = useAlertStore((state) => state.notificationCenter); const notificationCenter = useAlertStore((state) => state.notificationCenter);
const location = useLocation(); const location = useLocation();
const { logout, autoLogin, isAdmin, userData } = useContext(AuthContext); const { logout, autoLogin, isAdmin, userData } = useContext(AuthContext);
const navigate = useNavigate(); const navigate = useNavigate();
const removeFlow = useFlowsManagerStore((store) => store.removeFlow);
const hasStore = useStoreStore((state) => state.hasStore); const hasStore = useStoreStore((state) => state.hasStore);
const {id} = useParams();
const n = useFlowStore((state) => state.nodes);
const dark = useDarkStore((state) => state.dark); const dark = useDarkStore((state) => state.dark);
const setDark = useDarkStore((state) => state.setDark); const setDark = useDarkStore((state) => state.setDark);
@ -43,13 +48,19 @@ export default function Header(): JSX.Element {
window.localStorage.setItem("isDark", dark.toString()); window.localStorage.setItem("isDark", dark.toString());
}, [dark]); }, [dark]);
async function checkForChanges(nodes: Node[]): Promise<void> {
if (nodes.length === 0) {
await removeFlow(id!)
}
}
return ( return (
<div className="header-arrangement"> <div className="header-arrangement">
<div className="header-start-display lg:w-[30%]"> <div className="header-start-display lg:w-[30%]">
<Link to="/"> <Link to="/" onClick={() => checkForChanges(n)}>
<span className="ml-4 text-2xl">⛓️</span> <span className="ml-4 text-2xl">⛓️</span>
</Link> </Link>
<MenuBar /> <MenuBar removeFunction={checkForChanges} />
</div> </div>
<div className="round-button-div"> <div className="round-button-div">
<Link to="/"> <Link to="/">
@ -62,6 +73,7 @@ export default function Header(): JSX.Element {
: "secondary" : "secondary"
} }
size="sm" size="sm"
onClick={() => {checkForChanges(n)}}
> >
<IconComponent name="Home" className="h-4 w-4" /> <IconComponent name="Home" className="h-4 w-4" />
<div className="hidden flex-1 md:block">{USER_PROJECTS_HEADER}</div> <div className="hidden flex-1 md:block">{USER_PROJECTS_HEADER}</div>
@ -85,6 +97,7 @@ export default function Header(): JSX.Element {
className="gap-2" className="gap-2"
variant={location.pathname === "/store" ? "primary" : "secondary"} variant={location.pathname === "/store" ? "primary" : "secondary"}
size="sm" size="sm"
onClick={() => {checkForChanges(n)}}
> >
<IconComponent name="Store" className="h-4 w-4" /> <IconComponent name="Store" className="h-4 w-4" />
<div className="flex-1">Store</div> <div className="flex-1">Store</div>

View file

@ -1185,7 +1185,7 @@ export const createNewFlow = (
) => { ) => {
return { return {
description: flow?.description ?? getRandomDescription(), description: flow?.description ?? getRandomDescription(),
name: flow?.name ?? getRandomName(), name: flow?.name ? flow.name : "Untitled document",
data: flowData, data: flowData,
id: "", id: "",
is_component: flow?.is_component ?? false, is_component: flow?.is_component ?? false,