From 3665230c2106513568b2c287befdebe1ec6987c6 Mon Sep 17 00:00:00 2001 From: CREDO23 Date: Fri, 18 Oct 2024 03:39:29 +0200 Subject: [PATCH] refactor: enhance the enforce plan mode --- .../features/useStartStopTimerHandler.ts | 2 +- apps/web/app/hooks/features/useTimer.ts | 4 +- apps/web/lib/components/modal.tsx | 54 ++++++++++--------- apps/web/lib/components/switch.tsx | 4 ++ .../add-daily-plan-work-hours-modal.tsx | 2 +- .../add-task-estimation-hours-modal.tsx | 15 ++---- .../daily-plan/suggest-daily-plan-modal.tsx | 23 +++++--- apps/web/lib/features/user-profile-plans.tsx | 39 +++++++++++--- apps/web/locales/ar.json | 3 +- apps/web/locales/bg.json | 3 +- apps/web/locales/de.json | 3 +- apps/web/locales/en.json | 3 +- apps/web/locales/es.json | 3 +- apps/web/locales/fr.json | 3 +- apps/web/locales/he.json | 3 +- apps/web/locales/it.json | 3 +- apps/web/locales/nl.json | 3 +- apps/web/locales/pl.json | 3 +- apps/web/locales/pt.json | 3 +- apps/web/locales/ru.json | 3 +- apps/web/locales/zh.json | 3 +- 21 files changed, 114 insertions(+), 68 deletions(-) diff --git a/apps/web/app/hooks/features/useStartStopTimerHandler.ts b/apps/web/app/hooks/features/useStartStopTimerHandler.ts index 1b432a9e7..0968ea4b6 100644 --- a/apps/web/app/hooks/features/useStartStopTimerHandler.ts +++ b/apps/web/app/hooks/features/useStartStopTimerHandler.ts @@ -162,7 +162,7 @@ export function useStartStopTimerHandler() { if (timerStatusFetching || !canRunTimer) return; if (timerStatus?.running) { stopTimer(); - } else if (requirePlan && !isActiveTaskPlaned) { + } else if (requirePlan && hasPlan && !isActiveTaskPlaned) { openEnforcePlannedTaskModal(); } else { if ( diff --git a/apps/web/app/hooks/features/useTimer.ts b/apps/web/app/hooks/features/useTimer.ts index f6c222d2e..2a5de21ca 100644 --- a/apps/web/app/hooks/features/useTimer.ts +++ b/apps/web/app/hooks/features/useTimer.ts @@ -265,9 +265,7 @@ export function useTimer() { user?.isEmailVerified && ((!!activeTeamTask && activeTeamTask.status !== 'closed') || // If timer is running at some other source and user may or may not have selected the task - timerStatusRef.current?.lastLog?.source !== TimerSource.TEAMS) && - // If team settings require to have a plan to be able track - canTrack; + timerStatusRef.current?.lastLog?.source !== TimerSource.TEAMS) // Local time status const { diff --git a/apps/web/lib/components/modal.tsx b/apps/web/lib/components/modal.tsx index 84985fc01..4df9f676f 100644 --- a/apps/web/lib/components/modal.tsx +++ b/apps/web/lib/components/modal.tsx @@ -15,6 +15,7 @@ type Props = { className?: string; alignCloseIcon?: boolean; showCloseIcon?: boolean; + closeOnOutsideClick?: boolean; } & PropsWithChildren; export function Modal({ @@ -27,7 +28,8 @@ export function Modal({ description, className, alignCloseIcon, - showCloseIcon = true + showCloseIcon = true, + closeOnOutsideClick = false }: Props) { const refDiv = useRef(null); @@ -44,7 +46,7 @@ export function Modal({ > null} as="div" className="fixed inset-0 backdrop-brightness-90 backdrop-blur-sm z-[9999] w-full h-full" > @@ -52,28 +54,32 @@ export function Modal({ - {title && {title}} - {description && {description}} - {showCloseIcon && ( -
{ - closeModal(); - customCloseModal?.(); - }} - className={`absolute ${ - alignCloseIcon ? 'right-2 top-3' : 'right-3 top-3' - } md:right-2 md:top-3 cursor-pointer z-50`} - > - close -
- )} - {children} + + {title && {title}} + {description && {description}} + {showCloseIcon && ( +
{ + closeModal(); + customCloseModal?.(); + }} + className={`absolute ${ + alignCloseIcon ? 'right-2 top-3' : 'right-3 top-3' + } md:right-2 md:top-3 cursor-pointer z-50`} + > + close +
+ )} + {children} +
diff --git a/apps/web/lib/components/switch.tsx b/apps/web/lib/components/switch.tsx index e88350c4d..62a32779c 100644 --- a/apps/web/lib/components/switch.tsx +++ b/apps/web/lib/components/switch.tsx @@ -5,6 +5,7 @@ import { Switch } from '@headlessui/react'; import { useCallback, useEffect, useState } from 'react'; import { Text } from './typography'; import { useTranslations } from 'next-intl'; +import { DAILY_PLAN_SUGGESTION_MODAL_DATE } from '@app/constants'; export default function TimeTrackingToggle({ activeManager }: { activeManager: OT_Member | undefined }) { const t = useTranslations(); @@ -129,6 +130,9 @@ export function RequireDailyPlanToTrack() { .filter((value, index, array) => array.indexOf(value) === index) }); setEnabled(!enabled); + if (!enabled) { + localStorage.removeItem(DAILY_PLAN_SUGGESTION_MODAL_DATE); + } } }, [activeTeam, editOrganizationTeam, enabled]); diff --git a/apps/web/lib/features/daily-plan/add-daily-plan-work-hours-modal.tsx b/apps/web/lib/features/daily-plan/add-daily-plan-work-hours-modal.tsx index 31a8732bb..cb9c11d86 100644 --- a/apps/web/lib/features/daily-plan/add-daily-plan-work-hours-modal.tsx +++ b/apps/web/lib/features/daily-plan/add-daily-plan-work-hours-modal.tsx @@ -50,7 +50,7 @@ export function AddDailyPlanWorkHourModal(props: IAddDailyPlanWorkHoursModalProp }, [handleCloseModal, plan, startTimer, updateDailyPlan, workTimePlanned]); return ( - +
diff --git a/apps/web/lib/features/daily-plan/add-task-estimation-hours-modal.tsx b/apps/web/lib/features/daily-plan/add-task-estimation-hours-modal.tsx index 6f8452e2d..ce3eedd96 100644 --- a/apps/web/lib/features/daily-plan/add-task-estimation-hours-modal.tsx +++ b/apps/web/lib/features/daily-plan/add-task-estimation-hours-modal.tsx @@ -57,11 +57,10 @@ export function AddTasksEstimationHoursModal(props: IAddTasksEstimationHoursModa const t = useTranslations(); const { updateDailyPlan, myDailyPlans } = useDailyPlan(); const { startTimer, timerStatus } = useTimerView(); - const { activeTeam, activeTeamTask, setActiveTask } = useTeamTasks(); + const { activeTeamTask, setActiveTask } = useTeamTasks(); const [showSearchInput, setShowSearchInput] = useState(false); const [workTimePlanned, setWorkTimePlanned] = useState(plan?.workTimePlanned ?? 0); const currentDate = useMemo(() => new Date().toISOString().split('T')[0], []); - const requirePlan = useMemo(() => activeTeam?.requirePlanToTrack, [activeTeam?.requirePlanToTrack]); const tasksEstimationTimes = useMemo( () => (plan && plan.tasks ? estimatedTotalTime(plan.tasks).timesEstimated / 3600 : 0), [plan] @@ -466,15 +465,7 @@ export function AddTasksEstimationHoursModal(props: IAddTasksEstimationHoursModa
} > {/*button confirm*/} {/*button cancel*/}
diff --git a/apps/web/locales/ar.json b/apps/web/locales/ar.json index 8d125389b..0cc29dff3 100644 --- a/apps/web/locales/ar.json +++ b/apps/web/locales/ar.json @@ -217,7 +217,8 @@ "EDIT_PLAN": "تعديل الخطة", "TRACKED_TIME": "الوقت المتعقب", "SEE_PLANS": "عرض الخطط", - "ADD_PLAN": "إضافة خطة" + "ADD_PLAN": "إضافة خطة", + "DELETE_THIS_PLAN": "احذف هذه الخطة" }, "timesheets": { "SINGULAR": "ورقة الحضور", diff --git a/apps/web/locales/bg.json b/apps/web/locales/bg.json index 3f8b6fe8c..f401eaa36 100644 --- a/apps/web/locales/bg.json +++ b/apps/web/locales/bg.json @@ -217,7 +217,8 @@ "EDIT_PLAN": "Редактиране на план", "TRACKED_TIME": "Проследено време", "SEE_PLANS": "Виж планове", - "ADD_PLAN": "Добави план" + "ADD_PLAN": "Добави план", + "DELETE_THIS_PLAN": "Изтрийте този план" }, "timesheets": { "SINGULAR": "Работен лист", diff --git a/apps/web/locales/de.json b/apps/web/locales/de.json index 133934101..f53a9a886 100644 --- a/apps/web/locales/de.json +++ b/apps/web/locales/de.json @@ -217,7 +217,8 @@ "EDIT_PLAN": "Plan bearbeiten", "TRACKED_TIME": "Verfolgte Zeit", "SEE_PLANS": "Pläne anzeigen", - "ADD_PLAN": "Plan hinzufügen" + "ADD_PLAN": "Plan hinzufügen", + "DELETE_THIS_PLAN": "Diesen Plan löschen" }, "timesheets": { "SINGULAR": "Stundenzettel", diff --git a/apps/web/locales/en.json b/apps/web/locales/en.json index 4692276dc..4ec15a92e 100644 --- a/apps/web/locales/en.json +++ b/apps/web/locales/en.json @@ -217,7 +217,8 @@ "EDIT_PLAN": "Edit Plan", "TRACKED_TIME": "Tracked time", "SEE_PLANS": "See plans", - "ADD_PLAN": "Add Plan" + "ADD_PLAN": "Add Plan", + "DELETE_THIS_PLAN": "Delete this plan" }, "timesheets": { "SINGULAR": "Timesheet", diff --git a/apps/web/locales/es.json b/apps/web/locales/es.json index 2bfadb58b..5f962410b 100644 --- a/apps/web/locales/es.json +++ b/apps/web/locales/es.json @@ -217,7 +217,8 @@ "ADD_PLAN": "Agregar Plan", "TRACKED_TIME": "Tiempo registrado", "SEE_PLANS": "Ver planes", - "FOR_TOMORROW": "Plan de mañana" + "FOR_TOMORROW": "Plan de mañana", + "DELETE_THIS_PLAN": "Eliminar este plan" }, "timesheets": { "SINGULAR": "Hoja de horas", diff --git a/apps/web/locales/fr.json b/apps/web/locales/fr.json index 32440addd..2237827a9 100644 --- a/apps/web/locales/fr.json +++ b/apps/web/locales/fr.json @@ -217,7 +217,8 @@ "EDIT_PLAN": "Modifier le plan", "TRACKED_TIME": "Temps suivi", "SEE_PLANS": "Voir les plans", - "ADD_PLAN": "Ajouter un plan" + "ADD_PLAN": "Ajouter un plan", + "DELETE_THIS_PLAN": "Supprimer ce plan" }, "timesheets": { "SINGULAR": "Feuille de temps", diff --git a/apps/web/locales/he.json b/apps/web/locales/he.json index 5d9df1e15..ed4bd8807 100644 --- a/apps/web/locales/he.json +++ b/apps/web/locales/he.json @@ -217,7 +217,8 @@ "EDIT_PLAN": "ערוך תוכנית", "TRACKED_TIME": "זמן מעקב", "SEE_PLANS": "ראה תוכניות", - "ADD_PLAN": "הוסף תוכנית" + "ADD_PLAN": "הוסף תוכנית", + "DELETE_THIS_PLAN": "מחק את התוכנית הזו" }, "timesheets": { "SINGULAR": "דוח שעות", diff --git a/apps/web/locales/it.json b/apps/web/locales/it.json index bd11fbd71..ef56b6976 100644 --- a/apps/web/locales/it.json +++ b/apps/web/locales/it.json @@ -221,7 +221,8 @@ "EDIT_PLAN": "Modifica Piano", "TRACKED_TIME": "Tempo tracciato", "SEE_PLANS": "Vedi piani", - "ADD_PLAN": "Aggiungi Piano" + "ADD_PLAN": "Aggiungi Piano", + "DELETE_THIS_PLAN": "Elimina questo piano" }, "COPY_ISSUE_LINK": "Copia collegamento problema", "MAKE_A_COPY": "Fai una copia", diff --git a/apps/web/locales/nl.json b/apps/web/locales/nl.json index c59d6f29d..dec963075 100644 --- a/apps/web/locales/nl.json +++ b/apps/web/locales/nl.json @@ -221,7 +221,8 @@ "EDIT_PLAN": "Plan bewerken", "TRACKED_TIME": "Gegeneraliseerde tijd", "SEE_PLANS": "Plannen bekijken", - "ADD_PLAN": "Plan toevoegen" + "ADD_PLAN": "Plan toevoegen", + "DELETE_THIS_PLAN": "Verwijder dit plan" }, "COPY_ISSUE_LINK": "Probleemlink kopiëren", "MAKE_A_COPY": "Maak een kopie", diff --git a/apps/web/locales/pl.json b/apps/web/locales/pl.json index 013652426..566aec919 100644 --- a/apps/web/locales/pl.json +++ b/apps/web/locales/pl.json @@ -221,7 +221,8 @@ "EDIT_PLAN": "Edytuj plan", "TRACKED_TIME": "Śledzony czas", "SEE_PLANS": "Zobacz plany", - "ADD_PLAN": "Dodaj plan" + "ADD_PLAN": "Dodaj plan", + "DELETE_THIS_PLAN": "Usuń ten plan" }, "COPY_ISSUE_LINK": "Skopiuj link do zgłoszenia", "MAKE_A_COPY": "Zrób kopię", diff --git a/apps/web/locales/pt.json b/apps/web/locales/pt.json index a21389cf1..e907d74e9 100644 --- a/apps/web/locales/pt.json +++ b/apps/web/locales/pt.json @@ -221,7 +221,8 @@ "EDIT_PLAN": "Editar Plano", "TRACKED_TIME": "Tempo rastreado", "SEE_PLANS": "Ver planos", - "ADD_PLAN": "Adicionar Plano" + "ADD_PLAN": "Adicionar Plano", + "DELETE_THIS_PLAN": "Excluir este plano" }, "COPY_ISSUE_LINK": "Copiar link do problema", "MAKE_A_COPY": "Fazer uma cópia", diff --git a/apps/web/locales/ru.json b/apps/web/locales/ru.json index 7c58dd7a6..63081f89b 100644 --- a/apps/web/locales/ru.json +++ b/apps/web/locales/ru.json @@ -221,7 +221,8 @@ "EDIT_PLAN": "Редактировать план", "TRACKED_TIME": "Отслеживаемое время", "SEE_PLANS": "Посмотреть планы", - "ADD_PLAN": "Agregar Plan" + "ADD_PLAN": "Agregar Plan", + "DELETE_THIS_PLAN": "Удалить этот план" }, "COPY_ISSUE_LINK": "Скопировать ссылку на проблему", "MAKE_A_COPY": "Сделать копию", diff --git a/apps/web/locales/zh.json b/apps/web/locales/zh.json index 5e8860b36..b3e5bae92 100644 --- a/apps/web/locales/zh.json +++ b/apps/web/locales/zh.json @@ -221,7 +221,8 @@ "EDIT_PLAN": "编辑计划", "TRACKED_TIME": "跟踪时间", "SEE_PLANS": "查看计划", - "ADD_PLAN": "添加计划" + "ADD_PLAN": "添加计划", + "DELETE_THIS_PLAN": "删除此计划" }, "COPY_ISSUE_LINK": "复制问题链接", "MAKE_A_COPY": "制作副本",