chore: update SaveFlowModal component to use useRouter hook and add useEffect for id state

This commit is contained in:
谨欣 2024-08-30 17:54:34 +08:00
parent f978a50565
commit d07cce603a
4 changed files with 35 additions and 23 deletions

View File

@ -2,8 +2,8 @@ import { addFlow, apiInterceptors, updateFlowById } from '@/client/api';
import { IFlowData, IFlowUpdateParam } from '@/types/flow'; import { IFlowData, IFlowUpdateParam } from '@/types/flow';
import { mapHumpToUnderline } from '@/utils/flow'; import { mapHumpToUnderline } from '@/utils/flow';
import { Button, Checkbox, Form, Input, Modal, Space, message } from 'antd'; import { Button, Checkbox, Form, Input, Modal, Space, message } from 'antd';
import { useSearchParams } from 'next/navigation'; import { useRouter } from 'next/router';
import { useState } from 'react'; import { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { ReactFlowInstance } from 'reactflow'; import { ReactFlowInstance } from 'reactflow';
@ -22,13 +22,18 @@ export const SaveFlowModal: React.FC<Props> = ({
flowInfo, flowInfo,
setIsSaveFlowModalOpen, setIsSaveFlowModalOpen,
}) => { }) => {
const [deploy, setDeploy] = useState(true);
const { t } = useTranslation(); const { t } = useTranslation();
const searchParams = useSearchParams(); const router = useRouter();
const id = searchParams?.get('id') || '';
const [form] = Form.useForm<IFlowUpdateParam>(); const [form] = Form.useForm<IFlowUpdateParam>();
const [messageApi, contextHolder] = message.useMessage(); const [messageApi, contextHolder] = message.useMessage();
const [deploy, setDeploy] = useState(true);
const [id, setId] = useState(router.query.id || '');
useEffect(() => {
setId(router.query.id || '');
}, [router.query.id]);
function onLabelChange(e: React.ChangeEvent<HTMLInputElement>) { function onLabelChange(e: React.ChangeEvent<HTMLInputElement>) {
const label = e.target.value; const label = e.target.value;
// replace spaces with underscores, convert uppercase letters to lowercase, remove characters other than digits, letters, _, and -. // replace spaces with underscores, convert uppercase letters to lowercase, remove characters other than digits, letters, _, and -.
@ -45,12 +50,12 @@ export const SaveFlowModal: React.FC<Props> = ({
if (id) { if (id) {
const [, , res] = await apiInterceptors( const [, , res] = await apiInterceptors(
updateFlowById(id, { updateFlowById(id.toString(), {
name, name,
label, label,
description, description,
editable, editable,
uid: id, uid: id.toString(),
flow_data: reactFlowObject, flow_data: reactFlowObject,
state, state,
}), }),
@ -72,10 +77,10 @@ export const SaveFlowModal: React.FC<Props> = ({
state, state,
}), }),
); );
if (res?.uid) { if (res?.uid) {
messageApi.success(t('save_flow_success')); messageApi.success(t('save_flow_success'));
const history = window.history; router.push(`/construct/flow/canvas?id=${res.uid}`, undefined, { shallow: true });
history.pushState(null, '', `/flow/canvas?id=${res.uid}`);
} }
} }
setIsSaveFlowModalOpen(false); setIsSaveFlowModalOpen(false);

View File

@ -16,4 +16,5 @@ export const FlowEn = {
Export_File_Format: 'File_Format', Export_File_Format: 'File_Format',
Yes: 'Yes', Yes: 'Yes',
No: 'No', No: 'No',
Please_Add_Nodes_First: 'Please add nodes first',
}; };

View File

@ -16,4 +16,5 @@ export const FlowZn = {
Export_File_Format: '文件格式', Export_File_Format: '文件格式',
Yes: '是', Yes: '是',
No: '否', No: '否',
Please_Add_Nodes_First: '请先添加节点',
}; };

View File

@ -30,6 +30,7 @@ const edgeTypes = { buttonedge: ButtonEdge };
const Canvas: React.FC = () => { const Canvas: React.FC = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const [messageApi, contextHolder] = message.useMessage();
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const id = searchParams?.get('id') || ''; const id = searchParams?.get('id') || '';
@ -152,22 +153,24 @@ const Canvas: React.FC = () => {
function onSave() { function onSave() {
const flowData = reactFlow.toObject() as IFlowData; const flowData = reactFlow.toObject() as IFlowData;
const [check, node, message] = checkFlowDataRequied(flowData); const [check, node, message] = checkFlowDataRequied(flowData);
if (!node) {
messageApi.open({
type: 'warning',
content: t('Please_Add_Nodes_First'),
});
return;
}
if (!check && message) { if (!check && message) {
setNodes(nds => setNodes(nds =>
nds.map(item => { nds.map(item => ({
if (item.id === node?.id) { ...item,
item.data = { data: {
...item.data, ...item.data,
invalid: true, invalid: item.id === node?.id,
}; },
} else { })),
item.data = {
...item.data,
invalid: false,
};
}
return item;
}),
); );
return notification.error({ return notification.error({
message: 'Error', message: 'Error',
@ -274,6 +277,8 @@ const Canvas: React.FC = () => {
isImportModalOpen={isImportModalOpen} isImportModalOpen={isImportModalOpen}
setIsImportFlowModalOpen={setIsImportFlowModalOpen} setIsImportFlowModalOpen={setIsImportFlowModalOpen}
/> />
{contextHolder}
</> </>
); );
}; };