diff --git a/apps/web/components/PencilEdit.tsx b/apps/web/components/PencilEdit.tsx deleted file mode 100644 index 0d958e3480..0000000000 --- a/apps/web/components/PencilEdit.tsx +++ /dev/null @@ -1,56 +0,0 @@ -// This component is abstracted from /event-types/[type] for common usecase. -import { PencilIcon } from "@heroicons/react/solid"; -import { useState } from "react"; - -export default function PencilEdit({ - value, - // eslint-disable-next-line @typescript-eslint/no-empty-function - onChange = () => {}, - placeholder = "", - readOnly = false, -}: { - value: string; - onChange?: (value: string) => void; - placeholder?: string; - readOnly?: boolean; -}) { - const [editIcon, setEditIcon] = useState(true); - const onDivClick = !readOnly - ? () => { - return setEditIcon(false); - } - : // eslint-disable-next-line @typescript-eslint/no-empty-function - () => {}; - return ( -
- {editIcon ? ( - <> -

- {value} -

- {!readOnly ? ( - - ) : null} - - ) : ( -
- { - setEditIcon(true); - onChange(e.target.value); - }} - /> -
- )} -
- ); -} diff --git a/apps/web/components/ui/EditableHeading.tsx b/apps/web/components/ui/EditableHeading.tsx index 3e3c5f9457..5d8d65c524 100644 --- a/apps/web/components/ui/EditableHeading.tsx +++ b/apps/web/components/ui/EditableHeading.tsx @@ -1,18 +1,31 @@ import { PencilIcon } from "@heroicons/react/solid"; import { useState } from "react"; -const EditableHeading = ({ title, onChange }: { title: string; onChange: (value: string) => void }) => { - const [editIcon, setEditIcon] = useState(true); +const EditableHeading = ({ + title, + onChange, + placeholder = "", + readOnly = false, +}: { + title: string; + onChange?: (value: string) => void; + placeholder?: string; + readOnly?: boolean; +}) => { + const [isEditing, setIsEditing] = useState(false); + const enableEditing = () => !readOnly && setIsEditing(true); return ( -
setEditIcon(false)}> - {editIcon ? ( +
+ {!isEditing ? ( <>

+ className="inline pl-0 normal-case text-gray-900 focus:text-black group-hover:text-gray-500"> {title}

- + {!readOnly ? ( + + ) : null} ) : (
@@ -22,8 +35,12 @@ const EditableHeading = ({ title, onChange }: { title: string; onChange: (value: style={{ top: -6, fontSize: 22 }} required className="relative h-10 w-full cursor-pointer border-none bg-transparent pl-0 text-gray-900 hover:text-gray-700 focus:text-black focus:outline-none focus:ring-0" + placeholder={placeholder} defaultValue={title} - onChange={(e) => onChange(e.target.value)} + onBlur={(e) => { + setIsEditing(false); + onChange && onChange(e.target.value); + }} />
)} diff --git a/apps/web/pages/availability/[schedule].tsx b/apps/web/pages/availability/[schedule].tsx index 94774d8321..66e1e80e7c 100644 --- a/apps/web/pages/availability/[schedule].tsx +++ b/apps/web/pages/availability/[schedule].tsx @@ -141,7 +141,7 @@ export default function Availability() { success={({ data }) => { return ( } + heading={} subtitle={data.schedule.availability.map((availability) => ( {availabilityAsString(availability, i18n.language)} diff --git a/apps/web/pages/event-types/[type].tsx b/apps/web/pages/event-types/[type].tsx index 2bac1df15e..b87460dddb 100644 --- a/apps/web/pages/event-types/[type].tsx +++ b/apps/web/pages/event-types/[type].tsx @@ -67,6 +67,7 @@ import { EditLocationDialog } from "@components/dialog/EditLocationDialog"; import RecurringEventController from "@components/eventtype/RecurringEventController"; import CustomInputTypeForm from "@components/pages/eventtypes/CustomInputTypeForm"; import Badge from "@components/ui/Badge"; +import EditableHeading from "@components/ui/EditableHeading"; import InfoBadge from "@components/ui/InfoBadge"; import CheckboxField from "@components/ui/form/CheckboxField"; import CheckedSelect from "@components/ui/form/CheckedSelect"; @@ -310,7 +311,6 @@ const EventTypePage = (props: inferSSRProps) => { }); const connectedCalendarsQuery = trpc.useQuery(["viewer.connectedCalendars"]); - const [editIcon, setEditIcon] = useState(true); const [showLocationModal, setShowLocationModal] = useState(false); const [selectedLocation, setSelectedLocation] = useState(undefined); const [selectedCustomInput, setSelectedCustomInput] = useState(undefined); @@ -318,7 +318,6 @@ const EventTypePage = (props: inferSSRProps) => { const [customInputs, setCustomInputs] = useState( eventType.customInputs.sort((a, b) => a.id - b.id) || [] ); - const [tokensList, setTokensList] = useState>([]); const defaultSeatsPro = 6; const minSeats = 2; @@ -439,6 +438,7 @@ const EventTypePage = (props: inferSSRProps) => { const formMethods = useForm({ defaultValues: { + title: eventType.title, locations: eventType.locations || [], recurringEvent: eventType.recurringEvent || null, schedule: eventType.schedule?.id, @@ -846,37 +846,10 @@ const EventTypePage = (props: inferSSRProps) => { setEditIcon(false)}> - {editIcon ? ( - <> -

- {formMethods.getValues("title") && formMethods.getValues("title") !== "" - ? formMethods.getValues("title") - : eventType.title} -

- - - ) : ( -
- { - setEditIcon(true); - formMethods.getValues("title") === "" && formMethods.setValue("title", eventType.title); - }} - /> -
- )} -
+ formMethods.setValue("title", value)} + /> } subtitle={eventType.description || ""}> }> diff --git a/packages/app-store/ee/routing_forms/pages/form-edit/[...appPages].tsx b/packages/app-store/ee/routing_forms/pages/form-edit/[...appPages].tsx index 0235fecd8e..623682b95e 100644 --- a/packages/app-store/ee/routing_forms/pages/form-edit/[...appPages].tsx +++ b/packages/app-store/ee/routing_forms/pages/form-edit/[...appPages].tsx @@ -14,7 +14,7 @@ import { Form, TextArea } from "@calcom/ui/form/fields"; import { inferSSRProps } from "@lib/types/inferSSRProps"; -import PencilEdit from "@components/PencilEdit"; +import EditableHeading from "@components/ui/EditableHeading"; import RoutingShell from "../../components/RoutingShell"; import SideBar from "../../components/SideBar"; @@ -285,12 +285,8 @@ export default function FormEdit({ form={form} appUrl={appUrl} heading={ - { hookForm.setValue("name", value); }} diff --git a/packages/app-store/ee/routing_forms/pages/route-builder/[...appPages].tsx b/packages/app-store/ee/routing_forms/pages/route-builder/[...appPages].tsx index 98786bec50..cf3434150c 100644 --- a/packages/app-store/ee/routing_forms/pages/route-builder/[...appPages].tsx +++ b/packages/app-store/ee/routing_forms/pages/route-builder/[...appPages].tsx @@ -13,7 +13,7 @@ import { inferSSRProps } from "@calcom/types/inferSSRProps"; import { Button } from "@calcom/ui"; import { Label } from "@calcom/ui/form/fields"; -import PencilEdit from "@components/PencilEdit"; +import EditableHeading from "@components/ui/EditableHeading"; import { SelectWithValidation as Select } from "@components/ui/form/Select"; import RoutingShell from "../../components/RoutingShell"; @@ -466,7 +466,10 @@ export default function RouteBuilder({ appUrl, }: inferSSRProps & { appUrl: string }) { return ( - } form={form}> + } + form={form}>