diff --git a/components/Projects/Project/type.ts b/components/Projects/Project/type.ts index 521f0f1e..3fc840b9 100644 --- a/components/Projects/Project/type.ts +++ b/components/Projects/Project/type.ts @@ -1,3 +1,5 @@ +import { Milestone } from "@/contexts/Milestones/type"; + interface User { id: string; name: string; @@ -22,6 +24,7 @@ export interface Project { outcome: string[]; outcomeDescription: string; user: User; + milestones: Milestone[]; } export const DEFAULT_PROJECT: Project = { @@ -46,4 +49,5 @@ export const DEFAULT_PROJECT: Project = { name: "", _id: "", }, + milestones: [], }; diff --git a/hooks/api/project/useProjectQuery.ts b/hooks/api/project/useProjectQuery.ts index 653d1d45..42342eda 100644 --- a/hooks/api/project/useProjectQuery.ts +++ b/hooks/api/project/useProjectQuery.ts @@ -1,5 +1,6 @@ import useSWR from 'swr'; import { getProjectEndpoint } from '@/services/project'; +import { Project } from '@/components/Projects/Project/type'; interface UseProjectQueryProps { isMe?: boolean; @@ -10,5 +11,7 @@ export default function useProjectQuery({ isMe, projectId, }: UseProjectQueryProps = {}) { - return useSWR(projectId || isMe ? getProjectEndpoint({ isMe, projectId }) : null); + return useSWR( + projectId || isMe ? getProjectEndpoint({ isMe, projectId }) : null + ); } diff --git a/hooks/useClickOutside.tsx b/hooks/useClickOutside.tsx index ac633eed..801defa2 100644 --- a/hooks/useClickOutside.tsx +++ b/hooks/useClickOutside.tsx @@ -16,7 +16,7 @@ export default function useClickOutside({ useEffect(() => { const handleClick = (e: MouseEvent) => { if ( - e.target instanceof HTMLElement && + (e.target instanceof HTMLElement || e.target instanceof SVGElement) && ref.current?.contains?.(e.target) ) { return; diff --git a/pages/manage/index.tsx b/pages/manage/index.tsx index e470caae..ede992e5 100644 --- a/pages/manage/index.tsx +++ b/pages/manage/index.tsx @@ -10,11 +10,16 @@ import { GoArrowUpRight } from 'react-icons/go'; import { PiCalendarBlankBold } from 'react-icons/pi'; import getManageLayout from '@/layout/ManageLayout'; import useClickOutside from '@/hooks/useClickOutside'; +import { useProjectReviewQuery } from '@/hooks/api/review'; +import { useProjectQuery } from '@/hooks/api/project'; import SEOConfig from '@/shared/components/SEO'; import Dropdown from '@/shared/components/Dropdown'; import Button from '@/shared/components/Button'; import Collapse from '@/shared/components/Collapse'; -// import ReviewCard from '@/components/Review/Card'; +import ReviewCard from '@/components/Review/Card'; +import MilestoneItem from '@/components/Milestones/MilestoneItem'; +import { MilestonesProvider } from '@/contexts/Milestones'; +import { ProjectProvider } from '@/contexts/Project'; import { cn } from '@/utils/cn'; import 'dayjs/locale/zh-tw'; @@ -31,7 +36,7 @@ const Header = () => {
- 新增啥? + 學習計畫
@@ -164,14 +169,31 @@ const Project = ({ href, title, children, defaultOpen }: ProjectProps) => { ); }; +const ReviewCardList = () => { + const { data } = useProjectReviewQuery(); + + return ( + + ); +}; + const Manage = () => { const [date, setDate] = useState(dayjs().startOf('day')); const pathname = usePathname(); + const { data: projects } = useProjectQuery({ isMe: true }); + const { data: reviews } = useProjectReviewQuery(projects?.[0]?.id); - // const MIN_DATE = dayjs(new Date('2025-02-09')); - // const MAX_DATE = dayjs(new Date('2025-07-12')); - const MIN_DATE = dayjs().startOf('day').subtract(5, 'day'); - const MAX_DATE = dayjs().startOf('day').add(5, 'day'); + const MIN_DATE = dayjs(new Date('2025-02-09')); + const MAX_DATE = dayjs(new Date('2025-07-12')); const SEOData = useMemo( () => ({ @@ -197,19 +219,48 @@ const Manage = () => { maxDate={MAX_DATE} minDate={MIN_DATE} /> - -
第一週
-
第三週
-
- -
第一週
-
第三週
-
- {/* */} +
    + {Array.isArray(projects) && + projects.map((project, index) => ( +
  • + + {project?.milestones?.map((milestone) => ( + + ))} + +
  • + ))} +
+ +
    + {Array.isArray(reviews) && + reviews.map((review) => ( +
  • + +
  • + ))} +
); }; -Manage.getLayout = getManageLayout; +Manage.getLayout = (page: React.ReactElement) => + getManageLayout( + + {page} + + ); export default Manage;