buildCreateEmailTemplateForm()

in source/idea/idea-cluster-manager/webapp/src/pages/cluster-admin/email-templates.tsx [119:240]


    buildCreateEmailTemplateForm() {
        let values = undefined;
        const isUpdate = this.state.createModalType === "update";

        if (isUpdate) {
            const selected = this.getSelected();
            if (selected != null) {
                values = {
                    ...selected,
                };
            }
        }
        return (
            this.state.showCreateForm && (
                <IdeaForm
                    ref={this.createForm}
                    name="create-update-email-template"
                    modal={true}
                    modalSize="medium"
                    title={isUpdate ? "Update Email Template" : "Create new Email Template"}
                    values={values}
                    onSubmit={() => {
                        if (!this.getCreateForm().validate()) {
                            return;
                        }
                        const values = this.getCreateForm().getValues();
                        let createOrUpdate;
                        if (isUpdate) {
                            createOrUpdate = (request: any) => this.emailTemplates().updateEmailTemplate(request);
                            values.name = this.getSelected()?.name;
                        } else {
                            createOrUpdate = (request: any) => this.emailTemplates().createEmailTemplate(request);
                        }
                        createOrUpdate({
                            template: values,
                        })
                            .then(() => {
                                this.setState(
                                    {
                                        emailTemplateSelected: false,
                                    },
                                    () => {
                                        this.hideCreateForm();
                                        this.getListing().fetchRecords();
                                    }
                                );
                            })
                            .catch((error) => {
                                this.getCreateForm().setError(error.errorCode, error.message);
                            });
                    }}
                    onCancel={() => {
                        this.hideCreateForm();
                    }}
                    params={[
                        {
                            name: "title",
                            title: "Title",
                            description: "Enter a user friendly email template title",
                            data_type: "str",
                            param_type: "text",
                            validate: {
                                required: true,
                            },
                        },
                        {
                            name: "name",
                            title: "Template Name",
                            description: "Enter name for the email template",
                            help_text: "Name can only use lowercase alphabets, numbers, hyphens (-), underscores, and periods. Must be between 3 and 32 characters long.",
                            data_type: "str",
                            param_type: "text",
                            readonly: isUpdate,
                            validate: {
                                required: true,
                                regex: "^([a-z0-9-._]+){3,32}$",
                                message: "Only use lowercase alphabets, numbers, hyphens (-), underscores, and periods. Must be between 3 and 32 characters long.",
                            },
                        },
                        {
                            name: "template_type",
                            title: "Type",
                            description: "Select a template type",
                            data_type: "str",
                            param_type: "select",
                            choices: [
                                {
                                    title: "Jinja2",
                                    value: "jinja2",
                                },
                            ],
                            default: "jinja2",
                            validate: {
                                required: true,
                            },
                        },
                        {
                            name: "subject",
                            title: "Email Subject",
                            description: "Enter the email subject",
                            data_type: "str",
                            param_type: "text",
                            validate: {
                                required: true,
                            },
                        },
                        {
                            name: "body",
                            title: "Email Body",
                            description: "Enter email template body",
                            data_type: "str",
                            param_type: "text",
                            multiline: true,
                            validate: {
                                required: true,
                            },
                        },
                    ]}
                />
            )
        );
    }