From c671fcd011cde409d4297110e61fa443cb3122f8 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sun, 12 Dec 2021 19:06:55 +0200 Subject: [PATCH] feat: add unlocking partail transactions dialog. --- ...lockingPartialTransactionsDialogContent.js | 18 +++ .../UnlockingPartialTransactionsForm.js | 78 +++++++++++++ ...UnlockingPartialTransactionsForm.schema.js | 15 +++ ...UnlockingPartialTransactionsFormContent.js | 17 +++ .../UnlockingPartialTransactionsFormFields.js | 106 ++++++++++++++++++ ...gPartialTransactionsFormFloatingActions.js | 48 ++++++++ ...nlockingPartialTransactionsFormProvider.js | 37 ++++++ .../index.js | 34 ++++++ 8 files changed, 353 insertions(+) create mode 100644 src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsDialogContent.js create mode 100644 src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsForm.js create mode 100644 src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsForm.schema.js create mode 100644 src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormContent.js create mode 100644 src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormFields.js create mode 100644 src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormFloatingActions.js create mode 100644 src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormProvider.js create mode 100644 src/containers/Dialogs/UnlockingPartialTransactionsDialog/index.js diff --git a/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsDialogContent.js b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsDialogContent.js new file mode 100644 index 000000000..08e872ded --- /dev/null +++ b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsDialogContent.js @@ -0,0 +1,18 @@ +import React from 'react'; + +import { UnlockingPartialTransactionsFormProvider } from './UnlockingPartialTransactionsFormProvider'; +import UnlockingPartialTransactionsForm from './UnlockingPartialTransactionsForm'; + +/** + * Unlocking partail transactions dialog content. + */ +export default function UnlockingPartialTransactionsDialogContent({ + // #ownProps + dialogName, +}) { + return ( + + + + ); +} diff --git a/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsForm.js b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsForm.js new file mode 100644 index 000000000..2859b570e --- /dev/null +++ b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsForm.js @@ -0,0 +1,78 @@ +import React from 'react'; +import moment from 'moment'; +import { Intent } from '@blueprintjs/core'; +import { Formik } from 'formik'; +import intl from 'react-intl-universal'; + +import '../../../style/pages/TransactionsLocking/TransactionsLockingDialog.scss'; + +import { AppToaster } from 'components'; +import { CreateUnLockingPartialTransactionsFormSchema } from './UnlockingPartialTransactionsForm.schema'; + +import { useUnlockingPartialTransactionsContext } from './UnlockingPartialTransactionsFormProvider'; +import UnlockingPartialTransactionsFormContent from './UnlockingPartialTransactionsFormContent'; + +import withDialogActions from 'containers/Dialog/withDialogActions'; +import { compose } from 'utils'; + +const defaultInitialValues = { + module: 'all', + unlock_from_date: moment(new Date()).format('YYYY-MM-DD'), + unlock_to_date: moment(new Date()).format('YYYY-MM-DD'), + reason: '', +}; + +/** + * Partial Unlocking transactions form. + */ +function UnlockingPartialTransactionsForm({ + // #withDialogActions + closeDialog, +}) { + const { dialogName, createUnlockingPartialTransactionsMutate } = + useUnlockingPartialTransactionsContext(); + + // Initial form values. + const initialValues = { + ...defaultInitialValues, + }; + + // Handles the form submit. + const handleFormSubmit = (values, { setSubmitting, setErrors }) => { + setSubmitting(true); + + // Handle request response success. + const onSuccess = (response) => { + AppToaster.show({ + message: intl.get( + 'unlocking_partial_transactions.dialog.success_message', + ), + intent: Intent.SUCCESS, + }); + closeDialog(dialogName); + }; + // Handle request response errors. + const onError = ({ + response: { + data: { errors }, + }, + }) => { + setSubmitting(false); + }; + + createUnlockingPartialTransactionsMutate(values) + .then(onSuccess) + .catch(onError); + }; + + return ( + + ); +} + +export default compose(withDialogActions)(UnlockingPartialTransactionsForm); diff --git a/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsForm.schema.js b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsForm.schema.js new file mode 100644 index 000000000..92f228d45 --- /dev/null +++ b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsForm.schema.js @@ -0,0 +1,15 @@ +import * as Yup from 'yup'; +import intl from 'react-intl-universal'; +import { DATATYPES_LENGTH } from 'common/dataTypes'; + +const Schema = Yup.object().shape({ + unlock_from_date: Yup.date().required().label(intl.get('date')), + unlock_to_date: Yup.date().required().label(intl.get('date')), + module: Yup.string().required(), + reason: Yup.string() + .required() + .min(3) + .max(DATATYPES_LENGTH.TEXT) + .label(intl.get('reason')), +}); +export const CreateUnLockingPartialTransactionsFormSchema = Schema; diff --git a/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormContent.js b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormContent.js new file mode 100644 index 000000000..9a8c24cac --- /dev/null +++ b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormContent.js @@ -0,0 +1,17 @@ +import React from 'react'; +import { Form } from 'formik'; + +import UnlockingPartialTransactionsFormFields from './UnlockingPartialTransactionsFormFields'; +import UnlockingPartialTransactionsFormFloatingActions from './UnlockingPartialTransactionsFormFloatingActions'; + +/** + * Partial Unlocking trsnactions form content. + */ +export default function PartialUnlockingTransactionsFormContent() { + return ( +
+ + + + ); +} diff --git a/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormFields.js b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormFields.js new file mode 100644 index 000000000..651e5690a --- /dev/null +++ b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormFields.js @@ -0,0 +1,106 @@ +import React from 'react'; +import { FastField, ErrorMessage } from 'formik'; +import { Classes, FormGroup, TextArea, Position } from '@blueprintjs/core'; +import { DateInput } from '@blueprintjs/datetime'; +import classNames from 'classnames'; +import { CLASSES } from 'common/classes'; +import { FieldRequiredHint, Col, Row, FormattedMessage as T } from 'components'; +import { + inputIntent, + momentFormatter, + tansformDateValue, + handleDateChange, +} from 'utils'; + +/** + * Parial Unlocking transactions form fields. + */ +export default function UnlockingPartialTransactionsFormFields() { + return ( +
+ + + {/*------------ Unlocking from date -----------*/} + + {({ form, field: { value }, meta: { error, touched } }) => ( + + } + labelInfo={} + intent={inputIntent({ error, touched })} + helperText={} + minimal={true} + className={classNames(CLASSES.FILL, 'form-group--date')} + > + { + form.setFieldValue('unlock_from_date', formattedDate); + })} + value={tansformDateValue(value)} + popoverProps={{ + position: Position.BOTTOM, + minimal: true, + }} + intent={inputIntent({ error, touched })} + /> + + )} + + + + + {/*------------ Unlocking from date -----------*/} + + {({ form, field: { value }, meta: { error, touched } }) => ( + + } + labelInfo={} + intent={inputIntent({ error, touched })} + helperText={} + minimal={true} + className={classNames(CLASSES.FILL, 'form-group--date')} + > + { + form.setFieldValue('unlock_to_date', formattedDate); + })} + value={tansformDateValue(value)} + popoverProps={{ + position: Position.BOTTOM, + minimal: true, + }} + intent={inputIntent({ error, touched })} + /> + + )} + + + + + {/*------------ unLocking reason -----------*/} + + {({ field, meta: { error, touched } }) => ( + } + labelInfo={} + className={'form-group--reason'} + intent={inputIntent({ error, touched })} + helperText={} + > +