From cb0a315ca62f9f59e4a9405bc6c8bc7f3ec07c84 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sat, 11 Jun 2022 00:45:31 +0200 Subject: [PATCH] feat: add task form dialog. --- .../containers/TaskDialogContent.tsx | 19 +++++ .../TaskDialog/containers/TaskForm.schema.tsx | 12 ++++ .../TaskDialog/containers/TaskForm.tsx | 66 +++++++++++++++++ .../TaskDialog/containers/TaskFormContent.tsx | 18 +++++ .../TaskDialog/containers/TaskFormFields.tsx | 70 +++++++++++++++++++ .../containers/TaskFormFloatingActions.tsx | 49 +++++++++++++ .../containers/TaskFormProvider.tsx | 29 ++++++++ src/containers/Dialogs/TaskDialog/index.tsx | 33 +++++++++ 8 files changed, 296 insertions(+) create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx create mode 100644 src/containers/Dialogs/TaskDialog/index.tsx diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx new file mode 100644 index 000000000..04e0a86bc --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx @@ -0,0 +1,19 @@ +import React from 'react'; + +import { TaskFormProvider } from './TaskFormProvider'; +import TaskForm from './TaskForm'; +/** + * Task dialog content. + * @returns + */ +export default function TaskDialogContent({ + // #ownProps + dialogName, + task, +}) { + return ( + + + + ); +} diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx new file mode 100644 index 000000000..f1c3ecd3b --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx @@ -0,0 +1,12 @@ +import * as Yup from 'yup'; +import intl from 'react-intl-universal'; +import { DATATYPES_LENGTH } from 'common/dataTypes'; + +const Schema = Yup.object().shape({ + taks_name: Yup.string(), + task_house: Yup.string(), + change: Yup.string(), + amount: Yup.number(), +}); + +export const CreateTaskFormSchema = Schema; diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx new file mode 100644 index 000000000..0fc7381e1 --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx @@ -0,0 +1,66 @@ +//@ts-nocheck +import React from 'react'; + +import { Formik } from 'formik'; + +import { CreateTaskFormSchema } from './TaskForm.schema'; +import { useTaskFormContext } from './TaskFormProvider'; +import TaskFormContent from './TaskFormContent'; + +import { AppToaster } from 'components'; +import withDialogActions from 'containers/Dialog/withDialogActions'; + +import { compose } from 'utils'; + +const defaultInitialValues = { + taks_name: '', + task_house: '00:00', + change: 'Hourly Rate', + change_amount: '100000000', + amount: '', +}; + +/** + * Task form. + * @returns + */ +function TaskForm({ + // #withDialogActions + closeDialog, +}) { + // task form dialog context. + const { dialogName } = useTaskFormContext(); + + // Initial form values + const initialValues = { + ...defaultInitialValues, + }; + + // Handles the form submit. + const handleFormSubmit = (values, { setSubmitting, setErrors }) => { + const form = {}; + + // Handle request response success. + const onSuccess = (response) => {}; + + // Handle request response errors. + const onError = ({ + response: { + data: { errors }, + }, + }) => { + setSubmitting(false); + }; + }; + + return ( + + ); +} + +export default compose(withDialogActions)(TaskForm); diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx new file mode 100644 index 000000000..49c8dd088 --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { Form } from 'formik'; + +import TaskFormFields from './TaskFormFields'; +import TaskFormFloatingActions from './TaskFormFloatingActions'; + +/** + * Task form content. + * @returns + */ +export default function TaskFormContent() { + return ( +
+ + + + ); +} diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx new file mode 100644 index 000000000..0dc877c10 --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx @@ -0,0 +1,70 @@ +import React from 'react'; +import styled from 'styled-components'; + +import { Classes, ControlGroup } from '@blueprintjs/core'; +import { + FFormGroup, + FInputGroup, + Col, + Row, + FormattedMessage as T, +} from 'components'; + +/** + * Task form fields. + * @returns + */ +function TaskFormFields() { + return ( +
+ {/*------------ Task Name -----------*/} + + + + {/*------------ Estimated Hours -----------*/} + + + + + + + {/*------------ Charge -----------*/} + + + + + + + + + + {/*------------ Estimated Amount -----------*/} + + + Estimated Amount: + $100000 + + +
+ ); +} + +export default TaskFormFields; + +const EstimatedAmountBase = styled.div` + display: flex; + justify-content: flex-end; + font-size: 12px; + /* opacity: 0.7; */ +`; + +const EstimatedAmountContent = styled.span` + background-color: #fffdf5; + padding: 0.1rem 0; +`; + +const EstimateAmount = styled.span` + font-size: 13px; + font-weight: 700; + margin-left: 10px; +`; diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx new file mode 100644 index 000000000..45344bdc3 --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx @@ -0,0 +1,49 @@ +// @ts-nocheck +import React from 'react'; +import { useFormikContext } from 'formik'; +import { Intent, Button, Classes } from '@blueprintjs/core'; +import { FormattedMessage as T } from 'components'; +import { useTaskFormContext } from './TaskFormProvider'; + +import withDialogActions from 'containers/Dialog/withDialogActions'; +import { compose } from 'utils'; + +/** + * Task form floating actions. + * @returns + */ +function TaskFormFloatingActions({ + // #withDialogActions + closeDialog, +}) { + // Formik context. + const { isSubmitting } = useFormikContext(); + + // Task form dialog context. + const { dialogName } = useTaskFormContext(); + + // Handle close button click. + const handleCancelBtnClick = () => { + closeDialog(dialogName); + }; + + return ( +
+
+ + +
+
+ ); +} + +export default compose(withDialogActions)(TaskFormFloatingActions); diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx new file mode 100644 index 000000000..bdd933cfb --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx @@ -0,0 +1,29 @@ +//@ts-nocheck +import React from 'react'; + +import { DialogContent } from 'components'; + +const TaskFormContext = React.createContext(); + +/** + * Task form provider. + * @returns + */ +function TaskFormProvider({ + // #ownProps + dialogName, + taskId, + ...props +}) { + // State provider. + const provider = {}; + return ( + + + + ); +} + +const useTaskFormContext = () => React.useContext(TaskFormContext); + +export { TaskFormProvider, useTaskFormContext }; diff --git a/src/containers/Dialogs/TaskDialog/index.tsx b/src/containers/Dialogs/TaskDialog/index.tsx new file mode 100644 index 000000000..7cef6e748 --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/index.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import styled from 'styled-components'; +import { Dialog, DialogSuspense, FormattedMessage as T } from 'components'; +import withDialogRedux from 'components/DialogReduxConnect'; +import { compose } from 'utils'; + +const TaskDialogContent = React.lazy(() => + import('./containers/TaskDialogContent'), +); + +/** + * Task dialog. + * @returns + */ +function TaskDialog({ dialogName, payload: { taskId = null }, isOpen }) { + return ( + + + + + + ); +} +export default compose(withDialogRedux())(TaskDialog); + +const TaskDialogRoot = styled(Dialog)``;