import type { Formik } from 'formik'; import { Form } from 'formik'; import React from 'react'; import { Modal } from 'react-bootstrap'; import { NotificationDetails } from './NotificationDetails'; import type { INotification } from '../../domain'; import { ModalClose, SubmitButton } from '../../modal'; import type { IModalComponentProps } from '../../presentation'; import { FormValidator, ReactModal, SpinFormik } from '../../presentation'; export interface IEditNotificationModalProps extends IModalComponentProps { level: string; notification: INotification; stageType: string; editNotification?: (n: INotification) => Promise; } export interface IEditNotificationModalState { isSubmitting: boolean; } export class EditNotificationModal extends React.Component { constructor(props: IEditNotificationModalProps) { super(props); this.state = { isSubmitting: false, }; } private formikRef = React.createRef>(); private submit = (values: INotification): void => { if (this.props.editNotification) { this.setState({ isSubmitting: true }); this.props.editNotification(values).then(() => { this.setState({ isSubmitting: false }); this.props.closeModal(); }); } else { this.props.closeModal(values); } }; public static show(props: any): Promise { const modalProps = { dialogClassName: 'modal-md' }; return ReactModal.show(EditNotificationModal, props, modalProps); } private validate = (values: INotification): any => { const formValidator = new FormValidator(values); formValidator .field('when', 'Notify when') .required() .withValidators((value: any[]) => !value.length && 'Please select when the notification should execute'); return formValidator.validateForm(); }; public render(): React.ReactElement { const { dismissModal, level, notification, stageType } = this.props; return ( ref={this.formikRef} initialValues={notification} onSubmit={this.submit} validate={this.validate} render={(formik) => (
Edit Notification
)} /> ); } }