import { email, required, useRecordContext, useTranslate } from "ra-core"; import type { FocusEvent, ClipboardEventHandler } from "react"; import { useFormContext } from "react-hook-form"; import { Separator } from "@/components/ds/ui/separator"; import { useIsMobile } from "@/hooks/use-mobile"; import { BooleanInput } from "@/components/ds/admin/boolean-input"; import { ReferenceInput } from "@/components/ds/admin/reference-input"; import { TextInput } from "@/components/ds/admin/text-input"; import { RadioButtonGroupInput } from "@/components/ds/admin/radio-button-group-input"; import { SelectInput } from "@/components/ds/admin/select-input"; import { ArrayInput } from "@/components/ds/admin/array-input"; import { SimpleFormIterator } from "@/components/ds/admin/simple-form-iterator"; import { isLinkedinUrl } from "../misc/isLinkedInUrl"; import { useConfigurationContext } from "../root/ConfigurationContext"; import type { Contact, Sale } from "../types"; import ImageEditorField from "../misc/ImageEditorField"; import { AutocompleteCompanyInput } from "../companies/AutocompleteCompanyInput.tsx"; import { translateChoice } from "@/i18n/utils"; export const ContactInputs = () => { const isMobile = useIsMobile(); const record = useRecordContext(); return (
); }; const ContactIdentityInputs = () => { const { contactGender } = useConfigurationContext(); const translate = useTranslate(); const translatedGenders = contactGender.map((gender) => ({ ...gender, label: translateChoice( translate, "crm.contact.gender", gender.value, gender.label, ), })); return (
{translate("crm.contact.section.identity")}
); }; const ContactPositionInputs = () => { const translate = useTranslate(); return (
{translate("crm.contact.section.position")}
); }; const ContactPersonalInformationInputs = () => { const { getValues, setValue } = useFormContext(); const translate = useTranslate(); const translatedPersonalInfoTypes = personalInfoTypes.map((type) => ({ id: type.id, name: translate(`crm.contact.type.${type.id.toLowerCase()}`), })); // set first and last name based on email const handleEmailChange = (email: string) => { const { first_name, last_name } = getValues(); if (first_name || last_name || !email) return; const [first, last] = email.split("@")[0].split("."); setValue("first_name", first.charAt(0).toUpperCase() + first.slice(1)); setValue( "last_name", last ? last.charAt(0).toUpperCase() + last.slice(1) : "", ); }; const handleEmailPaste: ClipboardEventHandler< HTMLTextAreaElement | HTMLInputElement > = (e) => { const email = e.clipboardData?.getData("text/plain"); handleEmailChange(email); }; const handleEmailBlur = ( e: FocusEvent, ) => { const email = e.target.value; handleEmailChange(email); }; return (
{translate("crm.contact.section.personal_info")}
); }; const personalInfoTypes = [{ id: "Work" }, { id: "Home" }, { id: "Other" }]; const ContactMiscInputs = () => { const translate = useTranslate(); return (
{translate("crm.contact.section.misc")}
); }; const saleOptionRenderer = (choice: Sale) => `${choice.first_name} ${choice.last_name}`;