import FormioUtils from "formiojs/utils"; import React, { PropsWithChildren, ReactElement, useMemo } from "react"; import { ActionDefaultsSchema, ActionSchema, FormOptions, Submission } from "../../interfaces"; import { Form } from "../form/form.component"; function mapData(options: any, defaults: ActionDefaultsSchema): any { return { ...defaults, ...options }; } function mapSettingsForm({ action, ...settingsForm }: any): any { FormioUtils.eachComponent(settingsForm.components, (component: any) => { const resourceExclude = ""; if (component.type === "resourcefields") { component.type = "select"; component.label = component.title; component.dataSrc = "url"; component.data = { url: `${component.basePath}?type=resource${resourceExclude}` }; component.valueProperty = "_id"; component.template = "{{ item.title }}"; component.persistent = true; } }); return settingsForm; } export interface FormActionProps { actionInfo: Partial; submission?: Partial; onSubmit?: Function; options: FormOptions; } export function FormAction({ actionInfo, children, onSubmit, options, ...props }: PropsWithChildren): ReactElement { const { form, submission } = useMemo(() => { const submission = mapData(props.submission || {}, actionInfo.defaults); const form = mapSettingsForm(actionInfo.settingsForm); return { form, submission: { data: submission } }; }, [props.submission, actionInfo.settingsForm]); return (
{children}
{children}
); }