/** * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates * SPDX-License-Identifier: MIT */ import { useRef, useEffect } from 'react'; import { Field, FieldRenderProps, I18n } from '@flowgram.ai/free-layout-editor'; import { Typography, Input } from '@douyinfe/semi-ui'; import { Title } from './styles'; import { Feedback } from '../feedback'; const { Text } = Typography; export function TitleInput(props: { readonly: boolean; titleEdit: boolean; updateTitleEdit: (setEdit: boolean) => void; }): JSX.Element { const { readonly, titleEdit, updateTitleEdit } = props; const ref = useRef(); const titleEditing = titleEdit && !readonly; useEffect(() => { if (titleEditing) { ref.current?.focus(); } }, [titleEditing]); return ( <Field name="title"> {({ field: { value, onChange }, fieldState }: FieldRenderProps<string>) => ( <div style={{ height: 24 }}> {titleEditing ? ( <Input value={value} onChange={onChange} ref={ref} onBlur={() => updateTitleEdit(false)} /> ) : ( // 对默认的 Start/End 标题进行按需本地化显示 <Text ellipsis={{ showTooltip: true }}>{ value === 'Start' || value === 'End' ? I18n.t(value as any) : (value as any) }</Text> )} <Feedback errors={fieldState?.errors} /> </div> )} </Field> ); }