mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-04-23 03:00:31 -04:00
feat(ui): track & indicate workflow saved status
This commit is contained in:
@@ -1,14 +1,18 @@
|
||||
import { ToastId, useToast } from '@chakra-ui/react';
|
||||
import { useAppDispatch } from 'app/store/storeHooks';
|
||||
import { useWorkflow } from 'features/nodes/hooks/useWorkflow';
|
||||
import { workflowLoaded } from 'features/nodes/store/actions';
|
||||
import { zWorkflowV2 } from 'features/nodes/types/workflow';
|
||||
import {
|
||||
workflowIDChanged,
|
||||
workflowSaved,
|
||||
} from 'features/nodes/store/workflowSlice';
|
||||
import { WorkflowV2 } from 'features/nodes/types/workflow';
|
||||
import { useCallback, useRef } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import {
|
||||
useCreateWorkflowMutation,
|
||||
useUpdateWorkflowMutation,
|
||||
} from 'services/api/endpoints/workflows';
|
||||
import { O } from 'ts-toolbelt';
|
||||
|
||||
type UseSaveLibraryWorkflowReturn = {
|
||||
saveWorkflow: () => Promise<void>;
|
||||
@@ -18,6 +22,10 @@ type UseSaveLibraryWorkflowReturn = {
|
||||
|
||||
type UseSaveLibraryWorkflow = () => UseSaveLibraryWorkflowReturn;
|
||||
|
||||
const isWorkflowWithID = (
|
||||
workflow: WorkflowV2
|
||||
): workflow is O.Required<WorkflowV2, 'id'> => Boolean(workflow.id);
|
||||
|
||||
export const useSaveLibraryWorkflow: UseSaveLibraryWorkflow = () => {
|
||||
const { t } = useTranslation();
|
||||
const dispatch = useAppDispatch();
|
||||
@@ -34,15 +42,13 @@ export const useSaveLibraryWorkflow: UseSaveLibraryWorkflow = () => {
|
||||
isClosable: false,
|
||||
});
|
||||
try {
|
||||
if (workflow.id) {
|
||||
const data = await updateWorkflow(workflow).unwrap();
|
||||
const updatedWorkflow = zWorkflowV2.parse(data.workflow);
|
||||
dispatch(workflowLoaded(updatedWorkflow));
|
||||
if (isWorkflowWithID(workflow)) {
|
||||
await updateWorkflow(workflow).unwrap();
|
||||
} else {
|
||||
const data = await createWorkflow(workflow).unwrap();
|
||||
const createdWorkflow = zWorkflowV2.parse(data.workflow);
|
||||
dispatch(workflowLoaded(createdWorkflow));
|
||||
dispatch(workflowIDChanged(data.workflow.id));
|
||||
}
|
||||
dispatch(workflowSaved());
|
||||
toast.update(toastRef.current, {
|
||||
title: t('workflows.workflowSaved'),
|
||||
status: 'success',
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { ToastId, useToast } from '@chakra-ui/react';
|
||||
import { useAppDispatch } from 'app/store/storeHooks';
|
||||
import { useWorkflow } from 'features/nodes/hooks/useWorkflow';
|
||||
import { workflowLoaded } from 'features/nodes/store/actions';
|
||||
import { zWorkflowV2 } from 'features/nodes/types/workflow';
|
||||
import {
|
||||
workflowIDChanged,
|
||||
workflowNameChanged,
|
||||
workflowSaved,
|
||||
} from 'features/nodes/store/workflowSlice';
|
||||
import { useCallback, useRef } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useCreateWorkflowMutation } from 'services/api/endpoints/workflows';
|
||||
@@ -40,8 +43,9 @@ export const useSaveWorkflowAs: UseSaveWorkflowAs = () => {
|
||||
workflow.id = undefined;
|
||||
workflow.name = newName;
|
||||
const data = await createWorkflow(workflow).unwrap();
|
||||
const createdWorkflow = zWorkflowV2.parse(data.workflow);
|
||||
dispatch(workflowLoaded(createdWorkflow));
|
||||
dispatch(workflowIDChanged(data.workflow.id));
|
||||
dispatch(workflowNameChanged(data.workflow.name));
|
||||
dispatch(workflowSaved());
|
||||
onSuccess && onSuccess();
|
||||
toast.update(toastRef.current, {
|
||||
title: t('workflows.workflowSaved'),
|
||||
|
||||
Reference in New Issue
Block a user