import { useState } from 'react' import { toast } from '@redwoodjs/web/toast' import { Link, navigate, routes } from '@redwoodjs/router' import { useUpdateProject } from 'src/helpers/hooks/useUpdateProject' import Svg from 'src/components/Svg/Svg' interface EditableProjectTitleProps { id: string userName: string projectTitle: string canEdit: boolean shouldRouteToIde: boolean } const EditableProjectTitle = ({ id, userName, projectTitle, canEdit, shouldRouteToIde, }: EditableProjectTitleProps) => { const [inEditMode, setInEditMode] = useState(false) const [newTitle, setNewTitle] = useState(projectTitle) const inputRef = React.useRef(null) const { updateProject } = useUpdateProject({ onCompleted: ({ updateProject }) => { const routeVars = { userName: updateProject.user.userName, projectTitle: updateProject.title, } navigate( shouldRouteToIde ? routes.ide(routeVars) : routes.project(routeVars) ) toast.success('Project updated.') }, }) const onTitleChange = ({ target }) => { if (target.value.length > 25) { toast.error('Titles must be 25 or less characters') } setNewTitle(target.value.replace(/([^a-zA-Z\d_:])/g, '-').slice(0, 25)) } const onKeyDown = (event) => { if (event.key === 'Enter') { event.preventDefault(); event.stopPropagation(); updateProject({ variables: { id, input: { title: newTitle } } }); } } return ( <> {!inEditMode && ( <> /{projectTitle} {canEdit && ( )} > )} {inEditMode && ( <> / setTimeout(() => { setInEditMode(false) setNewTitle(projectTitle) }, 300) } />