diff --git a/ui/src/RecentFilesDrawer/WorkspaceSettingsModal.tsx b/ui/src/RecentFilesDrawer/WorkspaceSettingsModal.tsx index f5d041a..1c31c0e 100644 --- a/ui/src/RecentFilesDrawer/WorkspaceSettingsModal.tsx +++ b/ui/src/RecentFilesDrawer/WorkspaceSettingsModal.tsx @@ -41,6 +41,7 @@ export default function WorkspaceSettingsModal({ + - + { - console.log("session, sharekey", session?.shareKey); const trimName = newVersionName.trim(); setNewVersionName(trimName); if (!workflowsTable?.curWorkflow) { diff --git a/ui/src/components/VersionHistoryDrawer.tsx b/ui/src/components/VersionHistoryDrawer.tsx index c6cc0ac..fecaeed 100644 --- a/ui/src/components/VersionHistoryDrawer.tsx +++ b/ui/src/components/VersionHistoryDrawer.tsx @@ -27,19 +27,22 @@ import { } from "../db-tables/WorkspaceDB"; import { useContext, useEffect, useState } from "react"; import { WorkspaceContext } from "../WorkspaceContext"; -import { formatTimestamp } from "../utils"; import { Changelog, WorkflowVersion } from "../types/dbTypes"; import DeleteConfirm from "./DeleteConfirm"; import { app } from "../utils/comfyapp"; export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) { - const { curFlowID, isDirty, loadWorkflowID, curVersion, session } = + const { isDirty, loadWorkflowID, curVersion, session } = useContext(WorkspaceContext); const [active, setActive] = useState(0); // 0: version、1: changelog const [selectedVersion, setSelectedVersion] = useState(null); const [changelogs, setChangelogs] = useState([]); - const [versions, setVersions] = useState([]); - + const [versions, setVersions] = useState< + (WorkflowVersion & { isCloud?: boolean })[] + >([]); + const curFlow = workflowsTable?.curWorkflow; + const cloudHost = userSettingsTable?.settings?.cloudHost; + const [loading, setLoading] = useState(false); const loadChangeLogs = async (flowId: string) => { const workflow = await workflowsTable?.get(flowId); const changelogs = await changelogsTable?.listByWorkflowID(flowId); @@ -52,12 +55,14 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) { }; const loadVersions = async () => { - const vers = - (await workflowVersionsTable?.listByWorkflowID(curFlowID!)) ?? []; - if (session?.shareKey) { - fetch( + let vers = + (await workflowVersionsTable?.listByWorkflowID(curFlow!.id)) ?? []; + if (session?.shareKey && curFlow?.cloudID) { + setLoading(true); + await fetch( userSettingsTable?.settings?.cloudHost! + - "/api/listWorkflowVersionsByWorkflowID", + "/api/listWorkflowVersionsByWorkflowID?workflowID=" + + curFlow?.cloudID, { headers: { authorization: `Bearer ${session?.shareKey}`, @@ -66,11 +71,20 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) { ) .then((resp) => resp.json()) .then((data) => { - console.log("cloud versions", data); - if (data.data) { - setVersions(data.data); + if (data.items) { + const cloudVers = data.items.map((v: any) => { + return { + ...v, + isCloud: true, + }; + }); + vers = vers.concat(cloudVers as WorkflowVersion[]); } + }) + .catch((e) => { + console.error(e); }); + setLoading(false); } setVersions(vers); @@ -88,7 +102,7 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) { loadVersions(); break; case 1: - loadChangeLogs(curFlowID!); + loadChangeLogs(curFlow!.id); break; } }, [active]); @@ -135,7 +149,16 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) { + {session?.shareKey && ( + + Connected to{" "} + + {cloudHost} + + + )} } spacing={2}> + {loading && Loading...} {versions?.map((version) => { return ( void }) { borderRadius={4} > - - {version.name ?? "untitled"} - + {version.isCloud ? ( + + {version.name ?? "untitled"} + + ) : ( + + {version.name ?? "untitled"} + + )} + - Created: {formatTimestamp(version.createTime)} + Created:{" "} + {new Date( + version.createTime ?? + version.createdAt ?? + version.created_at ?? + "", + ).toLocaleString()} @@ -167,18 +206,20 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) { return; } app.loadGraphData(JSON.parse(version.json)); - loadWorkflowID(curFlowID!, version.id); + loadWorkflowID(curFlow!.id, version.id); onClose(); }} > Load - { - onDelete(version.id); - }} - /> + {!version.isCloud && ( + { + onDelete(version.id); + }} + /> + )} ); @@ -203,9 +244,6 @@ export function VersionHistoryDrawer({ onClose }: { onClose: () => void }) { return; } app.loadGraphData(JSON.parse(c.json)); - workflowsTable?.updateFlow(curFlowID!, { - json: c.json, - }); onClose(); }} isActive={c.id === selectedVersion} diff --git a/ui/src/settings/SharekeySetting.tsx b/ui/src/settings/SharekeySetting.tsx index 2102e65..a61d442 100644 --- a/ui/src/settings/SharekeySetting.tsx +++ b/ui/src/settings/SharekeySetting.tsx @@ -8,6 +8,7 @@ export default function SharekeySetting() { const toast = useToast(); const { session, updateSession } = useContext(WorkspaceContext); const [text, setText] = useState(""); + const cloudDomain = new URL(userSettingsTable?.settings?.cloudHost!).hostname; useEffect(() => { setText(session?.shareKey ?? ""); @@ -23,18 +24,26 @@ export default function SharekeySetting() { }; return ( - - - Copy your share key here and paste it to below to start sharing - workflows - + +

Cloud Backup [Beta]

+

+ + + {" "} + and paste it below to start saving workflow versions to cloud at{" "} + + {cloudDomain} + +

- + setText(e.target.value)} onBlur={() => submitChange(text)} onKeyDown={(e) => { diff --git a/ui/src/settings/TwoWaySyncSettings.tsx b/ui/src/settings/TwoWaySyncSettings.tsx index 3d9c186..8d1c88c 100644 --- a/ui/src/settings/TwoWaySyncSettings.tsx +++ b/ui/src/settings/TwoWaySyncSettings.tsx @@ -49,9 +49,8 @@ export default function TwoWaySyncSettings() { return ( - Only for legacy two way sync users to get back their data. Do not - disable two way sync if you have already enabled it. It may cause some - unexpected issues. + Only for legacy two way sync users to get back their data. [DO NOT + DISABLE] Enable two way sync diff --git a/ui/src/types/dbTypes.ts b/ui/src/types/dbTypes.ts index 0421833..3b05e95 100644 --- a/ui/src/types/dbTypes.ts +++ b/ui/src/types/dbTypes.ts @@ -66,9 +66,9 @@ export type WorkflowVersion = { name: string; workflowID: string; json: string; - createTime: number; - cloudID?: string; - cloudOrigin?: string; + createTime?: number; + createdAt?: string; + created_at?: string; authorID?: string; nodeDefs?: string; //for cloud workflow version }; diff --git a/ui/src/versionHistory/CreateVersionLogin.tsx b/ui/src/versionHistory/CreateVersionLogin.tsx index 3f65b28..c0909b7 100644 --- a/ui/src/versionHistory/CreateVersionLogin.tsx +++ b/ui/src/versionHistory/CreateVersionLogin.tsx @@ -2,7 +2,6 @@ import { Button, Flex, Input, Stack } from "@chakra-ui/react"; import { userSettingsTable } from "../db-tables/WorkspaceDB"; import { useContext } from "react"; import { WorkspaceContext } from "../WorkspaceContext"; -import { encodeKey } from "../utils/encryptUtils"; import { saveShareKey } from "../utils/saveShareKey"; export default function CreateVersionLogin() { @@ -40,7 +39,13 @@ export default function CreateVersionLogin() { { - if (!e.target.value || e.target.value === "") return; + if ( + !e.target.value || + e.target.value === "" || + e.target.value.length < 20 + ) + return; + saveShareKey(e.target.value); updateSession({ shareKey: e.target.value,