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