From 991293807ba38098661cecdaf350c7e50c7e7681 Mon Sep 17 00:00:00 2001 From: uddhav bhople Date: Sun, 17 May 2026 00:39:08 +0530 Subject: [PATCH 1/3] fix: move dayjs.extend to module scope for correct last_modified display --- components/RepositoryItem.tsx | 17 ++++++----------- hooks/useLastModified.tsx | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 hooks/useLastModified.tsx diff --git a/components/RepositoryItem.tsx b/components/RepositoryItem.tsx index 6b41bb92..5b19ef9d 100644 --- a/components/RepositoryItem.tsx +++ b/components/RepositoryItem.tsx @@ -1,7 +1,6 @@ -import dayjs from "dayjs"; -import relativeTime from "dayjs/plugin/relativeTime"; import React, { useEffect, useState } from "react"; +import { useLastModified } from "../hooks/useLastModified"; import { Repository } from "../types"; import { IssuesList } from "./IssueList"; import { RepositoryDescription } from "./RepositoryDescription"; @@ -16,22 +15,18 @@ export const RepositoryItem = ({ repository }: RepositoryItemProps) => { const [isIssueOpen, setIsIssueOpen] = useState(false); const [isIssuesListVisible, setIsIssuesListVisible] = useState(false); - dayjs.extend(relativeTime); - const useLastModified = (date: string) => { - const [lastModified, setLastModified] = useState(""); - - useEffect(() => setLastModified(dayjs(date).fromNow()), [date]); - - return lastModified; - }; const lastModified = useLastModified(repository.last_modified); useEffect(() => { if (isIssueOpen) { + // eslint-disable-next-line react-hooks/set-state-in-effect setIsIssuesListVisible(true); } else { // Delay unmounting to allow close animation to complete - const timer = setTimeout(() => setIsIssuesListVisible(false), 300); + const timer = setTimeout(() => { + // eslint-disable-next-line react-hooks/set-state-in-effect + setIsIssuesListVisible(false); + }, 300); return () => clearTimeout(timer); } }, [isIssueOpen]); diff --git a/hooks/useLastModified.tsx b/hooks/useLastModified.tsx new file mode 100644 index 00000000..8dc4f96f --- /dev/null +++ b/hooks/useLastModified.tsx @@ -0,0 +1,17 @@ +import dayjs from "dayjs"; +import relativeTime from "dayjs/plugin/relativeTime"; +import { useEffect, useState } from "react"; + +// Extend dayjs with relativeTime plugin at module scope +dayjs.extend(relativeTime); + +export const useLastModified = (date: string) => { + const [lastModified, setLastModified] = useState(""); + + useEffect(() => { + // eslint-disable-next-line react-hooks/set-state-in-effect + setLastModified(dayjs(date).fromNow()); + }, [date]); + + return lastModified; +}; From 01bda0072464bfe27bcdfaa0bb387cba86ea09a0 Mon Sep 17 00:00:00 2001 From: uddhav bhople Date: Sun, 17 May 2026 00:58:06 +0530 Subject: [PATCH 2/3] fix: simplify useLastModified and remove invalid eslint-disable comments --- components/RepositoryItem.tsx | 1 - hooks/useLastModified.tsx | 11 +---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/components/RepositoryItem.tsx b/components/RepositoryItem.tsx index 5b19ef9d..07600d97 100644 --- a/components/RepositoryItem.tsx +++ b/components/RepositoryItem.tsx @@ -24,7 +24,6 @@ export const RepositoryItem = ({ repository }: RepositoryItemProps) => { } else { // Delay unmounting to allow close animation to complete const timer = setTimeout(() => { - // eslint-disable-next-line react-hooks/set-state-in-effect setIsIssuesListVisible(false); }, 300); return () => clearTimeout(timer); diff --git a/hooks/useLastModified.tsx b/hooks/useLastModified.tsx index 8dc4f96f..35ec93b5 100644 --- a/hooks/useLastModified.tsx +++ b/hooks/useLastModified.tsx @@ -1,17 +1,8 @@ import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; -import { useEffect, useState } from "react"; -// Extend dayjs with relativeTime plugin at module scope dayjs.extend(relativeTime); export const useLastModified = (date: string) => { - const [lastModified, setLastModified] = useState(""); - - useEffect(() => { - // eslint-disable-next-line react-hooks/set-state-in-effect - setLastModified(dayjs(date).fromNow()); - }, [date]); - - return lastModified; + return dayjs(date).fromNow(); }; From b207e83d859714f9695e338c512a0c6e3d1180a5 Mon Sep 17 00:00:00 2001 From: uddhav bhople Date: Sun, 17 May 2026 01:08:23 +0530 Subject: [PATCH 3/3] fix: remove invalid eslint-disable comment in RepositoryItem --- components/RepositoryItem.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/components/RepositoryItem.tsx b/components/RepositoryItem.tsx index 07600d97..48b7d9ef 100644 --- a/components/RepositoryItem.tsx +++ b/components/RepositoryItem.tsx @@ -19,7 +19,6 @@ export const RepositoryItem = ({ repository }: RepositoryItemProps) => { useEffect(() => { if (isIssueOpen) { - // eslint-disable-next-line react-hooks/set-state-in-effect setIsIssuesListVisible(true); } else { // Delay unmounting to allow close animation to complete