import { EnterOutlined } from "@ant-design/icons"; import { useClickAway } from "ahooks"; import { Input, InputRef } from "antd"; import clsx from "clsx"; import { FC, useRef, useState } from "react"; import edit_name from "@/assets/images/chatSetting/edit_name.png"; interface IEditableContentProps { editable?: boolean; value?: string; placeholder?: string; className?: string; textClassName?: string; onChange?: (value: string) => Promise; } const EditableContent: FC = ({ editable, value, placeholder, className, textClassName, onChange, }) => { const wrapRef = useRef(null); const inputRef = useRef(null); const [editState, setEditState] = useState({ isEdit: false, loading: false, innerValue: value, }); useClickAway(() => { if (editState.isEdit) { setEditState({ isEdit: false, loading: false, innerValue: value, }); } }, [wrapRef]); const toggleEdit = (e: React.MouseEvent) => { e.stopPropagation(); setEditState({ isEdit: true, loading: false, innerValue: value === "-" ? "" : value, }); setTimeout(() => inputRef.current?.focus()); }; const onPressEnter = async ( e: React.KeyboardEvent & { target: { value: string } }, ) => { setEditState((state) => ({ ...state, loading: true })); await onChange?.(e.target.value); setEditState({ isEdit: false, loading: false, innerValue: e.target.value, }); }; return (
{editState.isEdit ? ( setEditState((state) => ({ ...state, innerValue: e.target.value })) } ref={inputRef} onPressEnter={onPressEnter} suffix={} /> ) : ( <>
{value}
{editable && ( edit name )} )}
); }; export default EditableContent;