| import { useStore } from '@nanostores/react'; |
| import { TooltipProvider } from '@radix-ui/react-tooltip'; |
| import WithTooltip from '~/components/ui/Tooltip'; |
| import { useEditChatDescription } from '~/lib/hooks'; |
| import { description as descriptionStore } from '~/lib/persistence'; |
|
|
| export function ChatDescription() { |
| const initialDescription = useStore(descriptionStore)!; |
|
|
| const { editing, handleChange, handleBlur, handleSubmit, handleKeyDown, currentDescription, toggleEditMode } = |
| useEditChatDescription({ |
| initialDescription, |
| syncWithGlobalStore: true, |
| }); |
|
|
| if (!initialDescription) { |
| |
| return null; |
| } |
|
|
| return ( |
| <div className="flex items-center justify-center"> |
| {editing ? ( |
| <form onSubmit={handleSubmit} className="flex items-center justify-center"> |
| <input |
| type="text" |
| className="bg-bolt-elements-background-depth-1 text-bolt-elements-textPrimary rounded px-2 mr-2 w-fit" |
| autoFocus |
| value={currentDescription} |
| onChange={handleChange} |
| onBlur={handleBlur} |
| onKeyDown={handleKeyDown} |
| style={{ width: `${Math.max(currentDescription.length * 8, 100)}px` }} |
| /> |
| <TooltipProvider> |
| <WithTooltip tooltip="Save title"> |
| <div className="flex justify-between items-center p-2 rounded-md bg-bolt-elements-item-backgroundAccent"> |
| <button |
| type="submit" |
| className="i-ph:check-bold scale-110 hover:text-bolt-elements-item-contentAccent" |
| onMouseDown={handleSubmit} |
| /> |
| </div> |
| </WithTooltip> |
| </TooltipProvider> |
| </form> |
| ) : ( |
| <> |
| {currentDescription} |
| <TooltipProvider> |
| <WithTooltip tooltip="Rename chat"> |
| <div className="flex justify-between items-center p-2 rounded-md bg-bolt-elements-item-backgroundAccent ml-2"> |
| <button |
| type="button" |
| className="i-ph:pencil-fill scale-110 hover:text-bolt-elements-item-contentAccent" |
| onClick={(event) => { |
| event.preventDefault(); |
| toggleEditMode(); |
| }} |
| /> |
| </div> |
| </WithTooltip> |
| </TooltipProvider> |
| </> |
| )} |
| </div> |
| ); |
| } |
|
|