From d26aa1b2da6300e1ca292e3f801293b029a3c747 Mon Sep 17 00:00:00 2001 From: Aaryan Khandelwal <65252264+aaryan610@users.noreply.github.com> Date: Thu, 7 Sep 2023 12:53:49 +0530 Subject: [PATCH] chore: render proper icons for due dates (#2114) --- .../issues/board-views/block-due-date.tsx | 33 ++++++++-------- .../issues/peek-overview/issue-properties.tsx | 38 +++++-------------- space/constants/helpers.ts | 36 ------------------ space/helpers/date-time.helper.ts | 23 +++++++++++ 4 files changed, 49 insertions(+), 81 deletions(-) delete mode 100644 space/constants/helpers.ts diff --git a/space/components/issues/board-views/block-due-date.tsx b/space/components/issues/board-views/block-due-date.tsx index f96836098..f88c82d0f 100644 --- a/space/components/issues/board-views/block-due-date.tsx +++ b/space/components/issues/board-views/block-due-date.tsx @@ -1,17 +1,9 @@ "use client"; // helpers -import { renderFullDate } from "constants/helpers"; +import { renderFullDate } from "helpers/date-time.helper"; -export const findHowManyDaysLeft = (date: string | Date) => { - const today = new Date(); - const eventDate = new Date(date); - const timeDiff = Math.abs(eventDate.getTime() - today.getTime()); - - return Math.ceil(timeDiff / (1000 * 3600 * 24)); -}; - -const dueDateIcon = ( +export const dueDateIconDetails = ( date: string, stateGroup: string ): { @@ -26,17 +18,24 @@ const dueDateIcon = ( className = ""; } else { const today = new Date(); - const dueDate = new Date(date); + today.setHours(0, 0, 0, 0); + const targetDate = new Date(date); + targetDate.setHours(0, 0, 0, 0); - if (dueDate < today) { + const timeDifference = targetDate.getTime() - today.getTime(); + + if (timeDifference < 0) { iconName = "event_busy"; className = "text-red-500"; - } else if (dueDate > today) { - iconName = "calendar_today"; - className = ""; - } else { + } else if (timeDifference === 0) { iconName = "today"; className = "text-red-500"; + } else if (timeDifference === 24 * 60 * 60 * 1000) { + iconName = "event"; + className = "text-yellow-500"; + } else { + iconName = "calendar_today"; + className = ""; } } @@ -47,7 +46,7 @@ const dueDateIcon = ( }; export const IssueBlockDueDate = ({ due_date, group }: { due_date: string; group: string }) => { - const iconDetails = dueDateIcon(due_date, group); + const iconDetails = dueDateIconDetails(due_date, group); return (
diff --git a/space/components/issues/peek-overview/issue-properties.tsx b/space/components/issues/peek-overview/issue-properties.tsx index 6b3394b56..c7a08faed 100644 --- a/space/components/issues/peek-overview/issue-properties.tsx +++ b/space/components/issues/peek-overview/issue-properties.tsx @@ -2,9 +2,10 @@ import useToast from "hooks/use-toast"; // icons import { Icon } from "components/ui"; -import { copyTextToClipboard, addSpaceIfCamelCase } from "helpers/string.helper"; // helpers -import { renderDateFormat } from "constants/helpers"; +import { copyTextToClipboard, addSpaceIfCamelCase } from "helpers/string.helper"; +import { renderFullDate } from "helpers/date-time.helper"; +import { dueDateIconDetails } from "../board-views/block-due-date"; // types import { IIssue } from "types/issue"; import { IPeekMode } from "store/issue_details"; @@ -16,35 +17,16 @@ type Props = { mode?: IPeekMode; }; -const validDate = (date: any, state: string): string => { - if (date === null || ["backlog", "unstarted", "cancelled"].includes(state)) - return `bg-gray-500/10 text-gray-500 border-gray-500/50`; - else { - const today = new Date(); - const dueDate = new Date(date); - - if (dueDate < today) return `bg-red-500/10 text-red-500 border-red-500/50`; - else return `bg-green-500/10 text-green-500 border-green-500/50`; - } -}; - export const PeekOverviewIssueProperties: React.FC = ({ issueDetails, mode }) => { const { setToastAlert } = useToast(); - const startDate = issueDetails.start_date; - const targetDate = issueDetails.target_date; - - const minDate = startDate ? new Date(startDate) : null; - minDate?.setDate(minDate.getDate()); - - const maxDate = targetDate ? new Date(targetDate) : null; - maxDate?.setDate(maxDate.getDate()); - const state = issueDetails.state_detail; const stateGroup = issueGroupFilter(state.group); const priority = issueDetails.priority ? issuePriorityFilter(issueDetails.priority) : null; + const dueDateIcon = dueDateIconDetails(issueDetails.target_date, state.group); + const handleCopyLink = () => { const urlToCopy = window.location.href; @@ -125,11 +107,11 @@ export const PeekOverviewIssueProperties: React.FC = ({ issueDetails, mod
{issueDetails.target_date ? ( -
- {renderDateFormat(issueDetails.target_date)} +
+ + {dueDateIcon.iconName} + + {renderFullDate(issueDetails.target_date)}
) : ( Empty diff --git a/space/constants/helpers.ts b/space/constants/helpers.ts deleted file mode 100644 index 0cf142353..000000000 --- a/space/constants/helpers.ts +++ /dev/null @@ -1,36 +0,0 @@ -export const renderDateFormat = (date: string | Date | null) => { - if (!date) return "N/A"; - - var d = new Date(date), - month = "" + (d.getMonth() + 1), - day = "" + d.getDate(), - year = d.getFullYear(); - - if (month.length < 2) month = "0" + month; - if (day.length < 2) day = "0" + day; - - return [year, month, day].join("-"); -}; - -/** - * @description Returns date and month, if date is of the current year - * @description Returns date, month adn year, if date is of a different year than current - * @param {string} date - * @example renderFullDate("2023-01-01") // 1 Jan - * @example renderFullDate("2021-01-01") // 1 Jan, 2021 - */ - -export const renderFullDate = (date: string): string => { - if (!date) return ""; - - const months: string[] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; - - const currentDate: Date = new Date(); - const [year, month, day]: number[] = date.split("-").map(Number); - - const formattedMonth: string = months[month - 1]; - const formattedDay: string = day < 10 ? `0${day}` : day.toString(); - - if (currentDate.getFullYear() === year) return `${formattedDay} ${formattedMonth}`; - else return `${formattedDay} ${formattedMonth}, ${year}`; -}; diff --git a/space/helpers/date-time.helper.ts b/space/helpers/date-time.helper.ts index 625871625..f19a5358b 100644 --- a/space/helpers/date-time.helper.ts +++ b/space/helpers/date-time.helper.ts @@ -12,3 +12,26 @@ export const timeAgo = (time: any) => { time = +new Date(); } }; + +/** + * @description Returns date and month, if date is of the current year + * @description Returns date, month adn year, if date is of a different year than current + * @param {string} date + * @example renderFullDate("2023-01-01") // 1 Jan + * @example renderFullDate("2021-01-01") // 1 Jan, 2021 + */ + +export const renderFullDate = (date: string): string => { + if (!date) return ""; + + const months: string[] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + + const currentDate: Date = new Date(); + const [year, month, day]: number[] = date.split("-").map(Number); + + const formattedMonth: string = months[month - 1]; + const formattedDay: string = day < 10 ? `0${day}` : day.toString(); + + if (currentDate.getFullYear() === year) return `${formattedDay} ${formattedMonth}`; + else return `${formattedDay} ${formattedMonth}, ${year}`; +};