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",