From 2e7ba59beb68c682b7efcfd5e19902dd9b0c9749 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sun, 31 Jul 2022 18:32:50 +0200 Subject: [PATCH] feat: add project time entry. --- src/constants/sidebarMenu.tsx | 5 +++ .../ProjectTimeEntryForm.schema.tsx | 6 ---- .../ProjectTimeEntryForm.tsx | 2 +- .../ProjectTimeEntryFormFields.tsx | 32 ++++++++++++------- .../ProjectTimeEntryFormProvider.tsx | 24 +++++++++++--- .../ProjectTimeEntryFormDialog/utils.ts | 15 +++++++++ src/lang/en/index.json | 1 + 7 files changed, 62 insertions(+), 23 deletions(-) create mode 100644 src/containers/Projects/containers/ProjectTimeEntryFormDialog/utils.ts diff --git a/src/constants/sidebarMenu.tsx b/src/constants/sidebarMenu.tsx index b003a90a8..e41ad8375 100644 --- a/src/constants/sidebarMenu.tsx +++ b/src/constants/sidebarMenu.tsx @@ -566,6 +566,11 @@ export const SidebarMenu = [ type: ISidebarMenuItemType.Dialog, dialogName: 'project-form', }, + { + text: , + type: ISidebarMenuItemType.Dialog, + dialogName: 'project-time-entry-form', + }, ], }, ], diff --git a/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryForm.schema.tsx b/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryForm.schema.tsx index c75f29c08..e1a6fe5ec 100644 --- a/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryForm.schema.tsx +++ b/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryForm.schema.tsx @@ -6,12 +6,6 @@ const Schema = Yup.object().shape({ date: Yup.date() .label(intl.get('project_time_entry.schema.label.date')) .required(), - // projectId: Yup.string() - // .label(intl.get('project_time_entry.schema.label.project_name')) - // .required(), - // taskId: Yup.string() - // .label(intl.get('project_time_entry.schema.label.task_name')) - // .required(), description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT), duration: Yup.string() .label(intl.get('project_time_entry.schema.label.duration')) diff --git a/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryForm.tsx b/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryForm.tsx index 679ce35f2..726c008ca 100644 --- a/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryForm.tsx +++ b/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryForm.tsx @@ -14,7 +14,7 @@ import { compose } from '@/utils'; const defaultInitialValues = { date: moment(new Date()).format('YYYY-MM-DD'), - // projectId: '', + projectId: '', taskId: '', description: '', duration: '', diff --git a/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryFormFields.tsx b/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryFormFields.tsx index 0ec18a5d4..979130b3e 100644 --- a/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryFormFields.tsx +++ b/src/containers/Projects/containers/ProjectTimeEntryFormDialog/ProjectTimeEntryFormFields.tsx @@ -5,6 +5,7 @@ import { Classes, Intent, Position } from '@blueprintjs/core'; import { CLASSES } from '@/constants/classes'; import classNames from 'classnames'; import { + If, FFormGroup, FInputGroup, FDateInput, @@ -15,6 +16,7 @@ import { import { useProjectTimeEntryFormContext } from './ProjectTimeEntryFormProvider'; import { TaskSelect, ProjectsSelect } from '../../components'; import { momentFormatter } from '@/utils'; +import { useSetProjectToForm } from './utils'; /** * Project time entry form fields. @@ -22,23 +24,29 @@ import { momentFormatter } from '@/utils'; */ function ProjectTimeEntryFormFields() { // time entry form dialog context. - const { projectTasks } = useProjectTimeEntryFormContext(); + const { projectTasks, projects, projectId } = + useProjectTimeEntryFormContext(); + + // Sets the project id. + useSetProjectToForm(); return (
{/*------------ Project -----------*/} - } - labelInfo={} - className={classNames('form-group--select-list', Classes.FILL)} - > - + - + label={} + labelInfo={} + className={classNames('form-group--select-list', Classes.FILL)} + > + + + {/*------------ Task -----------*/} + ); diff --git a/src/containers/Projects/containers/ProjectTimeEntryFormDialog/utils.ts b/src/containers/Projects/containers/ProjectTimeEntryFormDialog/utils.ts new file mode 100644 index 000000000..ed78d8140 --- /dev/null +++ b/src/containers/Projects/containers/ProjectTimeEntryFormDialog/utils.ts @@ -0,0 +1,15 @@ +import React from 'react'; +import { useFormikContext } from 'formik'; +import { useProjectTimeEntryFormContext } from './ProjectTimeEntryFormProvider'; + +export const useSetProjectToForm = () => { + const { values } = useFormikContext(); + const { setProjectPayload, isProjectsSuccess } = + useProjectTimeEntryFormContext(); + + React.useEffect(() => { + if (isProjectsSuccess) { + setProjectPayload(values.projectId); + } + }, [values.projectId]); +}; diff --git a/src/lang/en/index.json b/src/lang/en/index.json index 84e9c54aa..b46137395 100644 --- a/src/lang/en/index.json +++ b/src/lang/en/index.json @@ -2050,6 +2050,7 @@ "projects.action.new_task": "New Task", "projects.action.delete_project": "Delete Project", "projects.label.new_project": "New Project", + "projects.label.new_time_entry":"New Time Entry", "projects.dialog.contact": "Contact", "projects.dialog.project_name": "Project Name", "projects.dialog.deadline": "Deadline",