import { InlineTip, Input, Switch } from "@medusajs/ui" import { ComponentType } from "react" import { ControllerRenderProps, UseFormReturn } from "react-hook-form" import { useTranslation } from "react-i18next" import { Form } from "../../../components/common/form" import { FormField } from "../../types" import { FormFieldType } from "./types" import { getFieldType } from "./utils" type FormExtensionZoneProps = { fields: FormField[] form: UseFormReturn } export const FormExtensionZone = ({ fields, form }: FormExtensionZoneProps) => { return (
{fields.map((field, index) => ( ))}
) } function getFieldLabel(field: FormField) { if (field.label) { return field.label } return field.name .split("_") .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join(" ") } type FormExtensionFieldProps = { field: FormField form: UseFormReturn } const FormExtensionField = ({ field, form }: FormExtensionFieldProps) => { const label = getFieldLabel(field) const description = field.description const placeholder = field.placeholder const Component = field.Component const type = getFieldType(field.validation) const { control } = form return ( { return ( {label} {description && {description}} ) }} /> ) } type FormExtensionFieldComponentProps = { field: ControllerRenderProps type: FormFieldType component?: ComponentType placeholder?: string } const FormExtensionFieldComponent = ({ field, type, component, placeholder, }: FormExtensionFieldComponentProps) => { const { t } = useTranslation() if (component) { const Component = component return } switch (type) { case "text": { return } case "number": { return } case "boolean": { return } default: { return ( The field type does not support rendering a fallback component. Please provide a component prop. ) } } }