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")}
);
};