fix(pipeline dialog): config reset between tabs switching (#1597)

This commit is contained in:
Junyan Qin (Chin)
2025-08-04 00:05:55 +08:00
committed by GitHub
parent b70001c579
commit d60af2b451
4 changed files with 22 additions and 51 deletions

View File

@@ -1,3 +1,3 @@
# Debug LangBot Frontend # Debug LangBot Frontend
Please refer to the [Development Guide](https://docs.langbot.app/en/develop/dev-config.html) for more information. Please refer to the [Development Guide](https://docs.langbot.app/en/develop/dev-config.html) for more information.

View File

@@ -18,7 +18,6 @@ import {
} from '@/components/ui/sidebar'; } from '@/components/ui/sidebar';
import PipelineFormComponent from './components/pipeline-form/PipelineFormComponent'; import PipelineFormComponent from './components/pipeline-form/PipelineFormComponent';
import DebugDialog from './components/debug-dialog/DebugDialog'; import DebugDialog from './components/debug-dialog/DebugDialog';
import { PipelineFormEntity } from '@/app/infra/entities/pipeline';
interface PipelineDialogProps { interface PipelineDialogProps {
open: boolean; open: boolean;
@@ -26,7 +25,6 @@ interface PipelineDialogProps {
pipelineId?: string; pipelineId?: string;
isEditMode?: boolean; isEditMode?: boolean;
isDefaultPipeline?: boolean; isDefaultPipeline?: boolean;
initValues?: PipelineFormEntity;
onFinish: () => void; onFinish: () => void;
onNewPipelineCreated?: (pipelineId: string) => void; onNewPipelineCreated?: (pipelineId: string) => void;
onDeletePipeline: () => void; onDeletePipeline: () => void;
@@ -41,7 +39,6 @@ export default function PipelineDialog({
pipelineId: propPipelineId, pipelineId: propPipelineId,
isEditMode = false, isEditMode = false,
isDefaultPipeline = false, isDefaultPipeline = false,
initValues,
onFinish, onFinish,
onNewPipelineCreated, onNewPipelineCreated,
onDeletePipeline, onDeletePipeline,
@@ -119,7 +116,6 @@ export default function PipelineDialog({
</DialogHeader> </DialogHeader>
<div className="flex-1 overflow-y-auto px-6 pb-6"> <div className="flex-1 overflow-y-auto px-6 pb-6">
<PipelineFormComponent <PipelineFormComponent
initValues={initValues}
isDefaultPipeline={isDefaultPipeline} isDefaultPipeline={isDefaultPipeline}
onFinish={handleFinish} onFinish={handleFinish}
onNewPipelineCreated={handleNewPipelineCreated} onNewPipelineCreated={handleNewPipelineCreated}
@@ -184,7 +180,6 @@ export default function PipelineDialog({
> >
{currentMode === 'config' && ( {currentMode === 'config' && (
<PipelineFormComponent <PipelineFormComponent
initValues={initValues}
isDefaultPipeline={isDefaultPipeline} isDefaultPipeline={isDefaultPipeline}
onFinish={handleFinish} onFinish={handleFinish}
onNewPipelineCreated={handleNewPipelineCreated} onNewPipelineCreated={handleNewPipelineCreated}

View File

@@ -1,8 +1,7 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { httpClient } from '@/app/infra/http/HttpClient'; import { httpClient } from '@/app/infra/http/HttpClient';
import { Pipeline } from '@/app/infra/entities/api'; import { GetPipelineResponseData, Pipeline } from '@/app/infra/entities/api';
import { import {
PipelineFormEntity,
PipelineConfigTab, PipelineConfigTab,
PipelineConfigStage, PipelineConfigStage,
} from '@/app/infra/entities/pipeline'; } from '@/app/infra/entities/pipeline';
@@ -34,7 +33,6 @@ import { useTranslation } from 'react-i18next';
import { i18nObj } from '@/i18n/I18nProvider'; import { i18nObj } from '@/i18n/I18nProvider';
export default function PipelineFormComponent({ export default function PipelineFormComponent({
initValues,
isDefaultPipeline, isDefaultPipeline,
onFinish, onFinish,
onNewPipelineCreated, onNewPipelineCreated,
@@ -49,8 +47,6 @@ export default function PipelineFormComponent({
isEditMode: boolean; isEditMode: boolean;
disableForm: boolean; disableForm: boolean;
showButtons?: boolean; showButtons?: boolean;
// 这里的写法很不安全不规范,未来流水线需要重新整理
initValues?: PipelineFormEntity;
onFinish: () => void; onFinish: () => void;
onNewPipelineCreated: (pipelineId: string) => void; onNewPipelineCreated: (pipelineId: string) => void;
onDeletePipeline: () => void; onDeletePipeline: () => void;
@@ -132,13 +128,26 @@ export default function PipelineFormComponent({
} }
} }
}); });
if (isEditMode) {
httpClient
.getPipeline(pipelineId || '')
.then((resp: GetPipelineResponseData) => {
form.reset({
basic: {
name: resp.pipeline.name,
description: resp.pipeline.description,
},
ai: resp.pipeline.config.ai,
trigger: resp.pipeline.config.trigger,
safety: resp.pipeline.config.safety,
output: resp.pipeline.config.output,
});
});
}
}, []); }, []);
useEffect(() => { useEffect(() => {
if (initValues) {
form.reset(initValues);
}
if (!isEditMode) { if (!isEditMode) {
form.reset({ form.reset({
basic: { basic: {
@@ -147,7 +156,7 @@ export default function PipelineFormComponent({
}, },
}); });
} }
}, [initValues, form, isEditMode]); }, [form, isEditMode]);
function handleFormSubmit(values: FormValues) { function handleFormSubmit(values: FormValues) {
console.log('handleFormSubmit', values); console.log('handleFormSubmit', values);

View File

@@ -4,7 +4,6 @@ import CreateCardComponent from '@/app/infra/basic-component/create-card-compone
import { httpClient } from '@/app/infra/http/HttpClient'; import { httpClient } from '@/app/infra/http/HttpClient';
import { PipelineCardVO } from '@/app/home/pipelines/components/pipeline-card/PipelineCardVO'; import { PipelineCardVO } from '@/app/home/pipelines/components/pipeline-card/PipelineCardVO';
import PipelineCard from '@/app/home/pipelines/components/pipeline-card/PipelineCard'; import PipelineCard from '@/app/home/pipelines/components/pipeline-card/PipelineCard';
import { PipelineFormEntity } from '@/app/infra/entities/pipeline';
import styles from './pipelineConfig.module.css'; import styles from './pipelineConfig.module.css';
import { toast } from 'sonner'; import { toast } from 'sonner';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@@ -23,14 +22,7 @@ export default function PluginConfigPage() {
const [isEditForm, setIsEditForm] = useState(false); const [isEditForm, setIsEditForm] = useState(false);
const [pipelineList, setPipelineList] = useState<PipelineCardVO[]>([]); const [pipelineList, setPipelineList] = useState<PipelineCardVO[]>([]);
const [selectedPipelineId, setSelectedPipelineId] = useState(''); const [selectedPipelineId, setSelectedPipelineId] = useState('');
const [selectedPipelineFormValue, setSelectedPipelineFormValue] =
useState<PipelineFormEntity>({
basic: {},
ai: {},
trigger: {},
safety: {},
output: {},
});
const [selectedPipelineIsDefault, setSelectedPipelineIsDefault] = const [selectedPipelineIsDefault, setSelectedPipelineIsDefault] =
useState(false); useState(false);
const [sortByValue, setSortByValue] = useState<string>('created_at'); const [sortByValue, setSortByValue] = useState<string>('created_at');
@@ -81,39 +73,16 @@ export default function PluginConfigPage() {
}); });
} }
function getSelectedPipelineForm(id?: string) {
httpClient.getPipeline(id ?? selectedPipelineId).then((value) => {
setSelectedPipelineFormValue({
ai: value.pipeline.config.ai,
basic: {
description: value.pipeline.description,
name: value.pipeline.name,
},
output: value.pipeline.config.output,
safety: value.pipeline.config.safety,
trigger: value.pipeline.config.trigger,
});
setSelectedPipelineIsDefault(value.pipeline.is_default ?? false);
});
}
const handlePipelineClick = (pipelineId: string) => { const handlePipelineClick = (pipelineId: string) => {
setSelectedPipelineId(pipelineId); setSelectedPipelineId(pipelineId);
setIsEditForm(true); setIsEditForm(true);
setDialogOpen(true); setDialogOpen(true);
getSelectedPipelineForm(pipelineId);
}; };
const handleCreateNew = () => { const handleCreateNew = () => {
setIsEditForm(false); setIsEditForm(false);
setSelectedPipelineId(''); setSelectedPipelineId('');
setSelectedPipelineFormValue({
basic: {},
ai: {},
trigger: {},
safety: {},
output: {},
});
setSelectedPipelineIsDefault(false); setSelectedPipelineIsDefault(false);
setDialogOpen(true); setDialogOpen(true);
}; };
@@ -133,7 +102,6 @@ export default function PluginConfigPage() {
pipelineId={selectedPipelineId || undefined} pipelineId={selectedPipelineId || undefined}
isEditMode={isEditForm} isEditMode={isEditForm}
isDefaultPipeline={selectedPipelineIsDefault} isDefaultPipeline={selectedPipelineIsDefault}
initValues={selectedPipelineFormValue}
onFinish={() => { onFinish={() => {
getPipelines(); getPipelines();
}} }}
@@ -142,7 +110,6 @@ export default function PluginConfigPage() {
setSelectedPipelineId(pipelineId); setSelectedPipelineId(pipelineId);
setIsEditForm(true); setIsEditForm(true);
setDialogOpen(true); setDialogOpen(true);
getSelectedPipelineForm(pipelineId);
}} }}
onDeletePipeline={() => { onDeletePipeline={() => {
getPipelines(); getPipelines();