From 056440842ad7532e8aab41e533c2b78d71d4d430 Mon Sep 17 00:00:00 2001 From: Cristhian Zanforlin Lousa Date: Tue, 13 May 2025 08:41:05 -0700 Subject: [PATCH] fix: revert #7970 and add tags to tests (#8019) --- src/backend/base/langflow/api/v1/flows.py | 4 --- .../components/FlowMenu/index.tsx | 11 +++--- .../core/editFlowSettingsComponent/index.tsx | 35 ++----------------- .../src/modals/flowSettingsModal/index.tsx | 12 +++---- src/frontend/src/pages/FlowPage/index.tsx | 1 + src/frontend/src/types/components/index.ts | 1 - .../extended/features/edit-flow-name.spec.ts | 2 +- 7 files changed, 14 insertions(+), 52 deletions(-) diff --git a/src/backend/base/langflow/api/v1/flows.py b/src/backend/base/langflow/api/v1/flows.py index 531ae888d..7797ad65b 100644 --- a/src/backend/base/langflow/api/v1/flows.py +++ b/src/backend/base/langflow/api/v1/flows.py @@ -322,10 +322,6 @@ async def update_flow( update_data = flow.model_dump(exclude_unset=True, exclude_none=True) - # Specifically handle endpoint_name when it's explicitly set to null or empty string - if flow.endpoint_name is None or flow.endpoint_name == "": - update_data["endpoint_name"] = None - if settings_service.settings.remove_api_keys: update_data = remove_api_keys(update_data) diff --git a/src/frontend/src/components/core/appHeaderComponent/components/FlowMenu/index.tsx b/src/frontend/src/components/core/appHeaderComponent/components/FlowMenu/index.tsx index 4a915a025..4701e5be3 100644 --- a/src/frontend/src/components/core/appHeaderComponent/components/FlowMenu/index.tsx +++ b/src/frontend/src/components/core/appHeaderComponent/components/FlowMenu/index.tsx @@ -216,8 +216,8 @@ export const MenuBar = memo((): JSX.Element => { ]); useEffect(() => { - if (!editingName) { - setFlowName(currentFlowName ?? "Untitled Flow"); + if (currentFlowName && !editingName) { + setFlowName(currentFlowName); } }, [currentFlowName, editingName]); @@ -233,7 +233,7 @@ export const MenuBar = memo((): JSX.Element => { : getNumberFromString(currentFlowGradient ?? currentFlowId ?? "")) % swatchColors.length; - return onFlowPage ? ( + return currentFlowName && onFlowPage ? (
{ onKeyDown={handleKeyDown} onFocus={() => { setEditingName(true); - setFlowName(currentFlowName ?? "Untitled Flow"); + setFlowName(currentFlowName); const flows = useFlowsManagerStore.getState().flows; setFlowNames( flows @@ -315,7 +315,6 @@ export const MenuBar = memo((): JSX.Element => { value={flowName} id="input-flow-name" data-testid="input-flow-name" - placeholder="Untitled Flow" /> { aria-hidden="true" data-testid="flow_name" > - {flowName || "Untitled Flow"} + {flowName}
diff --git a/src/frontend/src/components/core/editFlowSettingsComponent/index.tsx b/src/frontend/src/components/core/editFlowSettingsComponent/index.tsx index b2009d739..2a89d28ec 100644 --- a/src/frontend/src/components/core/editFlowSettingsComponent/index.tsx +++ b/src/frontend/src/components/core/editFlowSettingsComponent/index.tsx @@ -11,13 +11,11 @@ export const EditFlowSettings: React.FC = ({ description, endpointName, maxLength = 50, - minLength = 1, setName, setDescription, setEndpointName, }: InputProps): JSX.Element => { const [isMaxLength, setIsMaxLength] = useState(false); - const [isMinLength, setIsMinLength] = useState(false); const [validEndpointName, setValidEndpointName] = useState(true); const [isInvalidName, setIsInvalidName] = useState(false); @@ -28,11 +26,6 @@ export const EditFlowSettings: React.FC = ({ } else { setIsMaxLength(false); } - if (value.length < minLength) { - setIsMinLength(true); - } else { - setIsMinLength(false); - } let invalid = false; for (let i = 0; i < invalidNameList!.length; i++) { if (value === invalidNameList![i]) { @@ -42,15 +35,7 @@ export const EditFlowSettings: React.FC = ({ invalid = false; } setIsInvalidName(invalid); - - // Only update the name if it's valid (not empty and not invalid) - if (value.length >= minLength && !invalid) { - setName!(value); - } else if (value.length === 0) { - // For empty string, update state but keep isMinLength true - setName!(""); - setIsMinLength(true); - } + setName!(value); }; const handleDescriptionChange = (event: ChangeEvent) => { @@ -58,19 +43,11 @@ export const EditFlowSettings: React.FC = ({ }; const handleEndpointNameChange = (event: ChangeEvent) => { - const { value } = event.target; // Validate the endpoint name // use this regex r'^[a-zA-Z0-9_-]+$' const isValid = isEndpointNameValid(event.target.value, maxLength); setValidEndpointName(isValid); - - // Only update if valid and meets minimum length (if set) - if (isValid && value.length >= minLength) { - setEndpointName!(value); - } else if (value.length === 0) { - // Always allow empty endpoint name (it's optional) - setEndpointName!(""); - } + setEndpointName!(event.target.value); }; //this function is necessary to select the text when double clicking, this was not working with the onFocus event @@ -84,11 +61,6 @@ export const EditFlowSettings: React.FC = ({ {isMaxLength && ( Character limit reached )} - {isMinLength && ( - - Minimum {minLength} character(s) required - - )} {isInvalidName && ( Name invalid or already exists @@ -105,8 +77,6 @@ export const EditFlowSettings: React.FC = ({ placeholder="Flow name" id="name" maxLength={maxLength} - minLength={minLength} - required={true} onDoubleClickCapture={(event) => { handleFocus(event); }} @@ -167,7 +137,6 @@ export const EditFlowSettings: React.FC = ({ value={endpointName ?? ""} placeholder="An alternative name to run the endpoint" maxLength={maxLength} - minLength={minLength} id="endpoint_name" onDoubleClickCapture={(event) => { handleFocus(event); diff --git a/src/frontend/src/modals/flowSettingsModal/index.tsx b/src/frontend/src/modals/flowSettingsModal/index.tsx index 44f4fb242..d88096f6d 100644 --- a/src/frontend/src/modals/flowSettingsModal/index.tsx +++ b/src/frontend/src/modals/flowSettingsModal/index.tsx @@ -28,19 +28,17 @@ export default function FlowSettingsModal({ const setSuccessData = useAlertStore((state) => state.setSuccessData); const flows = useFlowsManagerStore((state) => state.flows); const flow = flowData ?? currentFlow; + useEffect(() => { + setName(flow?.name ?? ""); + setDescription(flow?.description ?? ""); + }, [flow?.name, flow?.description, open]); + const [name, setName] = useState(flow?.name ?? ""); const [description, setDescription] = useState(flow?.description ?? ""); const [endpoint_name, setEndpointName] = useState(flow?.endpoint_name ?? ""); const [isSaving, setIsSaving] = useState(false); const [disableSave, setDisableSave] = useState(true); const autoSaving = useFlowsManagerStore((state) => state.autoSaving); - - useEffect(() => { - setName(flow?.name ?? ""); - setDescription(flow?.description ?? ""); - setEndpointName(flow?.endpoint_name ?? ""); - }, [flow?.name, flow?.description, flow?.endpoint_name, open]); - function handleClick(): void { setIsSaving(true); if (!flow) return; diff --git a/src/frontend/src/pages/FlowPage/index.tsx b/src/frontend/src/pages/FlowPage/index.tsx index 87de565e7..4062f4c25 100644 --- a/src/frontend/src/pages/FlowPage/index.tsx +++ b/src/frontend/src/pages/FlowPage/index.tsx @@ -149,6 +149,7 @@ export default function FlowPage({ view }: { view?: boolean }): JSX.Element { const getFlowToAddToCanvas = async (id: string) => { const flow = await getFlow({ id: id }); + console.log(flow); setCurrentFlow(flow); }; diff --git a/src/frontend/src/types/components/index.ts b/src/frontend/src/types/components/index.ts index 9d999a66f..d765b8c13 100644 --- a/src/frontend/src/types/components/index.ts +++ b/src/frontend/src/types/components/index.ts @@ -303,7 +303,6 @@ export type InputProps = { description: string | null; endpointName?: string | null; maxLength?: number; - minLength?: number; setName?: (name: string) => void; setDescription?: (description: string) => void; setEndpointName?: (endpointName: string) => void; diff --git a/src/frontend/tests/extended/features/edit-flow-name.spec.ts b/src/frontend/tests/extended/features/edit-flow-name.spec.ts index 73783478e..1324c7778 100644 --- a/src/frontend/tests/extended/features/edit-flow-name.spec.ts +++ b/src/frontend/tests/extended/features/edit-flow-name.spec.ts @@ -2,7 +2,7 @@ import { expect, test } from "@playwright/test"; import { awaitBootstrapTest } from "../../utils/await-bootstrap-test"; test( "user should be able to edit flow name by clicking on the header or on the main page", - { tag: ["@release", "@workspace"] }, + { tag: ["@release", "@workspace", "@components"] }, async ({ page }) => { const randomName = Math.random().toString(36).substring(2, 15); const randomName2 = Math.random().toString(36).substring(2, 15);