diff --git a/web/src/components/originui/select-with-search.tsx b/web/src/components/originui/select-with-search.tsx
index 9627fe027..ce4327332 100644
--- a/web/src/components/originui/select-with-search.tsx
+++ b/web/src/components/originui/select-with-search.tsx
@@ -83,7 +83,7 @@ export const SelectWithSearch = forwardRef<
aria-expanded={open}
ref={ref}
className={cn(
- 'bg-background hover:bg-background border-input w-full justify-between px-3 font-normal outline-offset-0 outline-none focus-visible:outline-[3px]',
+ 'bg-background hover:bg-background border-input w-full justify-between px-3 font-normal outline-offset-0 outline-none focus-visible:outline-[3px]',
triggerClassName,
)}
>
diff --git a/web/src/components/ui/multi-select.tsx b/web/src/components/ui/multi-select.tsx
index 8f4c8bcac..3f123c7b3 100644
--- a/web/src/components/ui/multi-select.tsx
+++ b/web/src/components/ui/multi-select.tsx
@@ -209,7 +209,7 @@ export const MultiSelect = React.forwardRef<
{selectedValues.length > 0 ? (
- {selectedValues.slice(0, maxCount).map((value) => {
+ {selectedValues?.slice(0, maxCount)?.map((value) => {
const option = options.find((o) => o.value === value);
const IconComponent = option?.icon;
return (
diff --git a/web/src/pages/agent/canvas/node/switch-node.tsx b/web/src/pages/agent/canvas/node/switch-node.tsx
index 796239c33..102fb9f8d 100644
--- a/web/src/pages/agent/canvas/node/switch-node.tsx
+++ b/web/src/pages/agent/canvas/node/switch-node.tsx
@@ -78,14 +78,17 @@ function InnerSwitchNode({ id, data, selected }: NodeProps
) {
{positions.map((position, idx) => {
return (
-
-
-
- {idx < positions.length - 1 &&
- position.condition?.logical_operator?.toUpperCase()}
-
+
+
{getConditionKey(idx, positions.length)}
+
+ {idx < positions.length - 1 && position.text}
+
+
+ {idx < positions.length - 1 &&
+ position.condition?.logical_operator?.toUpperCase()}
+
{position.condition && (
{
- console.info('xxx0000');
- }, [conditions]);
-
const positions = useMemo(() => {
const list: Array<{
text: string;
@@ -31,7 +27,7 @@ export const useBuildSwitchHandlePositions = ({
}> = [];
[...conditions, ''].forEach((x, idx) => {
- let top = idx === 0 ? 53 : list[idx - 1].top + 10 + 14; // case number (Case 1) height + flex gap
+ let top = idx === 0 ? 53 : list[idx - 1].top + 10 + 14 + 16 + 16; // case number (Case 1) height + flex gap
if (idx >= 1) {
const previousItems = conditions[idx - 1]?.items ?? [];
if (previousItems.length > 0) {
diff --git a/web/src/pages/agent/form-sheet/form-config-map.tsx b/web/src/pages/agent/form-sheet/form-config-map.tsx
index 0bfd96717..faeb7ab5a 100644
--- a/web/src/pages/agent/form-sheet/form-config-map.tsx
+++ b/web/src/pages/agent/form-sheet/form-config-map.tsx
@@ -30,7 +30,7 @@ import QWeatherForm from '../form/qweather-form';
import RelevantForm from '../form/relevant-form';
import RetrievalForm from '../form/retrieval-form/next';
import RewriteQuestionForm from '../form/rewrite-question-form';
-import { StringTransformForm } from '../form/string-transform-form';
+import StringTransformForm from '../form/string-transform-form';
import SwitchForm from '../form/switch-form';
import TavilyExtractForm from '../form/tavily-extract-form';
import TavilyForm from '../form/tavily-form';
diff --git a/web/src/pages/agent/form/string-transform-form/index.tsx b/web/src/pages/agent/form/string-transform-form/index.tsx
index 3efc636b9..0aad80b97 100644
--- a/web/src/pages/agent/form/string-transform-form/index.tsx
+++ b/web/src/pages/agent/form/string-transform-form/index.tsx
@@ -11,7 +11,7 @@ import { MultiSelect } from '@/components/ui/multi-select';
import { RAGFlowSelect } from '@/components/ui/select';
import { buildOptions } from '@/utils/form';
import { zodResolver } from '@hookform/resolvers/zod';
-import { useCallback, useMemo } from 'react';
+import { memo, useCallback, useMemo } from 'react';
import { useForm, useWatch } from 'react-hook-form';
import { z } from 'zod';
import {
@@ -30,14 +30,14 @@ const DelimiterOptions = Object.entries(StringTransformDelimiter).map(
([key, val]) => ({ label: key, value: val }),
);
-export const StringTransformForm = ({ node }: INextOperatorForm) => {
+function StringTransformForm({ node }: INextOperatorForm) {
const values = useValues(node);
const FormSchema = z.object({
method: z.string(),
split_ref: z.string().optional(),
script: z.string().optional(),
- delimiters: z.array(z.string()),
+ delimiters: z.array(z.string()).or(z.string()),
outputs: z.object({ result: z.object({ type: z.string() }) }).optional(),
});
@@ -56,14 +56,18 @@ export const StringTransformForm = ({ node }: INextOperatorForm) => {
const handleMethodChange = useCallback(
(value: StringTransformMethod) => {
+ const isMerge = value === StringTransformMethod.Merge;
const outputs = {
...initialStringTransformValues.outputs,
result: {
- type:
- value === StringTransformMethod.Merge ? 'string' : 'Array',
+ type: isMerge ? 'string' : 'Array',
},
};
form.setValue('outputs', outputs);
+ form.setValue(
+ 'delimiters',
+ isMerge ? StringTransformDelimiter.Comma : [],
+ );
},
[form],
);
@@ -132,8 +136,9 @@ export const StringTransformForm = ({ node }: INextOperatorForm) => {
) : (
{
);
-};
+}
+
+export default memo(StringTransformForm);
diff --git a/web/src/pages/agent/form/switch-form/index.tsx b/web/src/pages/agent/form/switch-form/index.tsx
index 64b791974..e06c47996 100644
--- a/web/src/pages/agent/form/switch-form/index.tsx
+++ b/web/src/pages/agent/form/switch-form/index.tsx
@@ -17,7 +17,7 @@ import { cn } from '@/lib/utils';
import { zodResolver } from '@hookform/resolvers/zod';
import { toLower } from 'lodash';
import { X } from 'lucide-react';
-import { useCallback, useMemo } from 'react';
+import { memo, useCallback, useMemo } from 'react';
import { useFieldArray, useForm, useFormContext } from 'react-hook-form';
import { useTranslation } from 'react-i18next';
import { z } from 'zod';
@@ -118,13 +118,13 @@ function ConditionCards({
);
return (
-
+
{fields.map((field, index) => {
return (
(
-
+
@@ -202,7 +202,7 @@ function ConditionCards({
);
}
-const SwitchForm = ({ node }: IOperatorForm) => {
+function SwitchForm({ node }: IOperatorForm) {
const { t } = useTranslation();
const values = useValues(node);
const switchOperatorOptions = useBuildSwitchOperatorOptions();
@@ -257,9 +257,23 @@ const SwitchForm = ({ node }: IOperatorForm) => {
{fields.map((field, index) => {
return (
- {index === 0 ? 'IF' : 'ELSEIF'}
+
+
+ {index === 0 ? 'IF' : 'ELSEIF'}
+ Case {index + 1}
+
+ {index !== 0 && (
+
+ )}
+
-
+
{
@@ -307,6 +320,6 @@ const SwitchForm = ({ node }: IOperatorForm) => {
);
-};
+}
-export default SwitchForm;
+export default memo(SwitchForm);
diff --git a/web/src/pages/agents/agent-card.tsx b/web/src/pages/agents/agent-card.tsx
index b2ccabe6b..c6497b968 100644
--- a/web/src/pages/agents/agent-card.tsx
+++ b/web/src/pages/agents/agent-card.tsx
@@ -1,5 +1,5 @@
import { MoreButton } from '@/components/more-button';
-import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
+import { RAGFlowAvatar } from '@/components/ragflow-avatar';
import { Card, CardContent } from '@/components/ui/card';
import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
import { IFlow } from '@/interfaces/database/flow';
@@ -19,10 +19,11 @@ export function AgentCard({ data, showAgentRenameModal }: DatasetCardProps) {