Spaces:
Sleeping
Sleeping
| import { FormEvent, KeyboardEvent, useState } from 'react'; | |
| import { Laugh, SendHorizontal } from 'lucide-react'; | |
| type MessageComposerProps = { | |
| disabled: boolean; | |
| onSend: (text: string) => boolean; | |
| }; | |
| const stickerPacks = [ | |
| { label: 'εΌεΏ', value: 'π' }, | |
| { label: 'θ΅', value: 'π' }, | |
| { label: 'ιΌζ', value: 'π' }, | |
| { label: 'ζΆε°', value: 'π' }, | |
| { label: 'ζθ', value: 'π€' }, | |
| { label: 'εΊη₯', value: 'π' }, | |
| { label: 'ε ζ²Ή', value: 'πͺ' }, | |
| { label: 'η¬ε', value: 'π' }, | |
| ]; | |
| export default function MessageComposer({ disabled, onSend }: MessageComposerProps) { | |
| const [text, setText] = useState(''); | |
| function submit() { | |
| if (onSend(text)) { | |
| setText(''); | |
| } | |
| } | |
| function handleSubmit(event: FormEvent<HTMLFormElement>) { | |
| event.preventDefault(); | |
| submit(); | |
| } | |
| function handleKeyDown(event: KeyboardEvent<HTMLTextAreaElement>) { | |
| if (event.key === 'Enter' && !event.shiftKey) { | |
| event.preventDefault(); | |
| submit(); | |
| } | |
| } | |
| function sendSticker(sticker: string) { | |
| if (disabled) { | |
| return; | |
| } | |
| onSend(sticker); | |
| } | |
| return ( | |
| <form className="composer" onSubmit={handleSubmit}> | |
| <div className="sticker-toolbar" aria-label="葨ζ ε εΏ«ζ·ει"> | |
| <span> | |
| <Laugh size={16} /> | |
| 葨ζ ε | |
| </span> | |
| <div className="sticker-list"> | |
| {stickerPacks.map((sticker) => ( | |
| <button | |
| aria-label={`ει${sticker.label}葨ζ `} | |
| className="sticker-button" | |
| disabled={disabled} | |
| key={sticker.label} | |
| onClick={() => sendSticker(sticker.value)} | |
| type="button" | |
| > | |
| {sticker.value} | |
| </button> | |
| ))} | |
| </div> | |
| </div> | |
| <div className="composer-row"> | |
| <textarea | |
| value={text} | |
| onChange={(event) => setText(event.target.value)} | |
| onKeyDown={handleKeyDown} | |
| placeholder={disabled ? 'θΏζ₯εε³ε―ειζΆζ―' : 'θΎε ₯ζΆζ―οΌEnter ειοΌShift + Enter ζ’θ‘'} | |
| maxLength={800} | |
| disabled={disabled} | |
| /> | |
| <button className="send-button" type="submit" disabled={disabled || !text.trim()}> | |
| <SendHorizontal size={18} /> | |
| ει | |
| </button> | |
| </div> | |
| </form> | |
| ); | |
| } | |