| import React, { useEffect, useRef } from 'react'; |
| import { Check, X } from 'lucide-react'; |
| import type { KeyboardEvent } from 'react'; |
|
|
| interface RenameFormProps { |
| titleInput: string; |
| setTitleInput: (value: string) => void; |
| onSubmit: (title: string) => void; |
| onCancel: () => void; |
| localize: (key: any, options?: any) => string; |
| } |
|
|
| const RenameForm: React.FC<RenameFormProps> = ({ |
| titleInput, |
| setTitleInput, |
| onSubmit, |
| onCancel, |
| localize, |
| }) => { |
| const inputRef = useRef<HTMLInputElement>(null); |
|
|
| useEffect(() => { |
| if (inputRef.current) { |
| inputRef.current.focus(); |
| inputRef.current.select(); |
| } |
| }, []); |
|
|
| const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => { |
| switch (e.key) { |
| case 'Escape': |
| onCancel(); |
| break; |
| case 'Enter': |
| onSubmit(titleInput); |
| break; |
| case 'Tab': |
| break; |
| } |
| }; |
|
|
| return ( |
| <div |
| className="absolute inset-0 z-20 flex w-full items-center rounded-lg bg-surface-active-alt p-1.5" |
| role="form" |
| aria-label={localize('com_ui_rename_conversation')} |
| > |
| <input |
| ref={inputRef} |
| type="text" |
| className="w-full rounded bg-transparent p-0.5 text-sm leading-tight focus-visible:outline-none" |
| value={titleInput} |
| onChange={(e) => setTitleInput(e.target.value)} |
| onKeyDown={handleKeyDown} |
| maxLength={100} |
| aria-label={localize('com_ui_new_conversation_title')} |
| /> |
| <div className="flex gap-1" role="toolbar"> |
| <button |
| onClick={() => onCancel()} |
| className="rounded-md p-1 hover:opacity-70 focus:outline-none focus:ring-2 focus:ring-ring" |
| aria-label={localize('com_ui_cancel')} |
| type="button" |
| > |
| <X className="h-4 w-4" aria-hidden="true" /> |
| </button> |
| <button |
| onClick={() => onSubmit(titleInput)} |
| className="rounded-md p-1 hover:opacity-70 focus:outline-none focus:ring-2 focus:ring-ring" |
| aria-label={localize('com_ui_save')} |
| type="button" |
| > |
| <Check className="h-4 w-4" aria-hidden="true" /> |
| </button> |
| </div> |
| </div> |
| ); |
| }; |
|
|
| export default RenameForm; |
|
|