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={}
+ >
+
+
+ )}
+
+
+ );
+}
diff --git a/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormFloatingActions.js b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormFloatingActions.js
new file mode 100644
index 000000000..7457859c8
--- /dev/null
+++ b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormFloatingActions.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import { Intent, Button, Classes } from '@blueprintjs/core';
+import { useFormikContext } from 'formik';
+import { FormattedMessage as T } from 'components';
+
+import { useUnlockingPartialTransactionsContext } from './UnlockingPartialTransactionsFormProvider';
+import withDialogActions from 'containers/Dialog/withDialogActions';
+import { compose } from 'utils';
+
+/**
+ * Partial Unlocking transactions floating actions
+ */
+function UnlockingPartialTransactionsFormFloatingActions({
+ // #withDialogActions
+ closeDialog,
+}) {
+ // Formik context.
+ const { isSubmitting } = useFormikContext();
+
+ const { dialogName } = useUnlockingPartialTransactionsContext();
+
+ // Handle cancel button click.
+ const handleCancelBtnClick = (event) => {
+ closeDialog(dialogName);
+ };
+
+ return (
+
+ );
+}
+
+export default compose(withDialogActions)(
+ UnlockingPartialTransactionsFormFloatingActions,
+);
diff --git a/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormProvider.js b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormProvider.js
new file mode 100644
index 000000000..2669090c8
--- /dev/null
+++ b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/UnlockingPartialTransactionsFormProvider.js
@@ -0,0 +1,37 @@
+import React from 'react';
+import { DialogContent } from 'components';
+import { useCreateUnlockingPartialTransactions } from 'hooks/query';
+
+const UnlockingPartialTransactionsContext = React.createContext();
+
+/**
+ * Unlocking partial transactions form provider.
+ */
+function UnlockingPartialTransactionsFormProvider({ dialogName, ...props }) {
+ // Create unlocking partial transactions mutations.
+ const { mutateAsync: createUnlockingPartialTransactionsMutate } =
+ useCreateUnlockingPartialTransactions();
+
+ // State provider.
+ const provider = {
+ dialogName,
+ createUnlockingPartialTransactionsMutate,
+ };
+
+ return (
+
+
+
+ );
+}
+
+const useUnlockingPartialTransactionsContext = () =>
+ React.useContext(UnlockingPartialTransactionsContext);
+
+export {
+ UnlockingPartialTransactionsFormProvider,
+ useUnlockingPartialTransactionsContext,
+};
diff --git a/src/containers/Dialogs/UnlockingPartialTransactionsDialog/index.js b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/index.js
new file mode 100644
index 000000000..a3b8b1e3d
--- /dev/null
+++ b/src/containers/Dialogs/UnlockingPartialTransactionsDialog/index.js
@@ -0,0 +1,34 @@
+import React from 'react';
+import { Dialog, DialogSuspense, FormattedMessage as T } from 'components';
+import withDialogRedux from 'components/DialogReduxConnect';
+import { compose } from 'utils';
+
+const UnlockingPartialTransactionsDialogContent = React.lazy(() =>
+ import('./UnlockingPartialTransactionsDialogContent'),
+);
+
+/**
+ * UncLocking Partial transactions dialog.
+ */
+function UnLockingPartialTransactionsDilaog({
+ isOpen,
+ dialogName,
+ payload = {},
+}) {
+ return (
+ }
+ canEscapeKeyClose={true}
+ isOpen={isOpen}
+ className={'dialog--transaction--locking'}
+ >
+
+
+
+
+ );
+}
+
+export default compose(withDialogRedux())(UnLockingPartialTransactionsDilaog);