🐛 fix: fix Message Modal input issue (#266)

This commit is contained in:
Arvin Xu
2025-02-15 23:11:21 +08:00
committed by GitHub
parent 24ccbaa3fb
commit 80ff385694
2 changed files with 36 additions and 9 deletions
+27
View File
@@ -0,0 +1,27 @@
import { memo, useState } from 'react';
import { TextArea, TextAreaProps } from '@/Input';
interface MessageTextAreaProps extends Omit<TextAreaProps, 'onChange' | 'onBlur' | 'value'> {
defaultValue: string;
onChange?: (value: string) => void;
}
const MessageTextArea = memo<MessageTextAreaProps>(({ defaultValue, onChange, ...rest }) => {
const [text, setText] = useState<string>(defaultValue || '');
return (
<TextArea
onBlur={() => onChange?.(text)}
onChange={(e) => {
setText(e.target.value);
}}
onPressEnter={() => {
onChange?.(text);
}}
{...rest}
value={text}
/>
);
});
export default MessageTextArea;
+9 -9
View File
@@ -6,12 +6,13 @@ import { CSSProperties, ReactNode, memo, useState } from 'react';
import { Flexbox } from 'react-layout-kit';
import useControlledState from 'use-merge-value';
import { TextArea } from '@/Input';
import Markdown from '@/Markdown';
import Modal, { type ModalProps } from '@/Modal';
import { type MessageInputProps } from '@/chat/MessageInput';
import { useStyles as useTextStyles } from '@/chat/MessageInput/style';
import MessageTextArea from './TextArea';
export interface MessageModalProps extends Pick<ModalProps, 'open' | 'footer'> {
/**
* @description Whether the message is being edited or not
@@ -76,7 +77,7 @@ const MessageModal = memo<MessageModalProps>(
value: open,
});
const [temporaryValue, setValue] = useState(value);
const [temporaryValue, setMessage] = useState(value);
const isAutoSize = height === 'auto';
const markdownStyle: CSSProperties = {
@@ -91,7 +92,7 @@ const MessageModal = memo<MessageModalProps>(
onClick={() => {
setTyping(false);
onChange?.(temporaryValue);
setValue(value);
setMessage(value);
}}
type="primary"
>
@@ -100,7 +101,7 @@ const MessageModal = memo<MessageModalProps>(
<Button
onClick={() => {
setTyping(false);
setValue(value);
setMessage(value);
}}
>
{text?.cancel || 'Cancel'}
@@ -120,18 +121,18 @@ const MessageModal = memo<MessageModalProps>(
onCancel={() => {
setShowModal(false);
setTyping(false);
setValue(value);
setMessage(value);
}}
onOk={() => setTyping(true)}
open={showModal}
title={text?.title}
>
{isEdit ? (
<TextArea
<MessageTextArea
autoSize={isAutoSize}
className={textStyles}
onBlur={(e) => setValue(e.target.value)}
onChange={(e) => setValue(e.target.value)}
defaultValue={value}
onChange={(value) => setMessage(value)}
placeholder={placeholder}
resize={false}
style={{
@@ -140,7 +141,6 @@ const MessageModal = memo<MessageModalProps>(
minHeight: mobile ? 'unset' : '100%',
}}
type={mobile ? 'pure' : 'block'}
value={temporaryValue}
/>
) : (
<>