import { required, useRecordContext, useTranslate } from "ra-core"; import { ReferenceInput } from "@/components/ds/admin/reference-input"; import { TextInput } from "@/components/ds/admin/text-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 { Separator } from "@/components/ds/ui/separator"; import { useIsMobile } from "@/hooks/use-mobile"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ds/ui/collapsible"; import { ChevronDown } from "lucide-react"; import { useState } from "react"; import { translateChoice } from "@/i18n/utils"; import ImageEditorField from "../misc/ImageEditorField"; import { isLinkedinUrl } from "../misc/isLinkedInUrl"; import { useConfigurationContext } from "../root/ConfigurationContext"; import type { Company, Sale } from "../types"; import { sizes } from "./sizes"; const isUrl = (url: string, translate: any) => { if (!url) return; const UrlRegex = new RegExp( /^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/i, ); if (!UrlRegex.test(url)) { return translate("crm.company.error.invalid_url"); } }; export const CompanyInputs = () => { const isMobile = useIsMobile(); return (
); }; const CompanyDisplayInputs = () => { const record = useRecordContext(); const translate = useTranslate(); return (
); }; const CompanyContactInputs = () => { const translate = useTranslate(); return (
{translate("crm.company.section.contact")}
isUrl(value, translate)} />

{translate("crm.company.section.social_profiles")}

isUrl(value, translate)} /> isUrl(value, translate)} /> isUrl(value, translate)} />
isUrl(value, translate)} />
); }; const CompanyContextInputs = () => { const { companySectors, companyLifecycleStages, companyTypes, companyRevenueRanges, companyQualificationStatuses, } = useConfigurationContext(); const translate = useTranslate(); const translatedCompanySectors = companySectors.map((sector) => ({ id: sector, name: translateChoice(translate, "crm.company.sector", sector, sector), })); const translatedSizes = sizes.map((size) => ({ ...size, name: translate(`crm.company.size.${size.id}`, { _: size.name }), })); return (
{translate("crm.company.section.context")}
{/* Classification */} {companyLifecycleStages && ( )} {companyTypes && ( )} {companyQualificationStatuses && ( )} {/* Industry & Sector */} {/* Size & Revenue */} {companyRevenueRanges && ( )} {/* Additional */}
); }; const CompanyAddressInputs = () => { const translate = useTranslate(); return (
{translate("crm.company.section.address")}
); }; const CompanyAdditionalInformationInputs = () => { const translate = useTranslate(); return (
{translate("crm.company.section.additional_info")}
isUrl(value, translate)} />
); }; const CompanyAccountManagerInput = () => { const translate = useTranslate(); return (
{translate("crm.company.field.account_manager")}
); }; const saleOptionRenderer = (choice: Sale) => `${choice.first_name} ${choice.last_name}`; const CompanyAdvancedSettings = () => { const [isOpen, setIsOpen] = useState(false); const translate = useTranslate(); return ( {translate("crm.company.section.advanced_settings")}
{/* External System Integration */}
{translate("crm.company.section.external_system_integration")}
); };