From dca2649235bccb312e0c09e3322c21fcb64b2440 Mon Sep 17 00:00:00 2001 From: "sosuke.iwabuchi" Date: Mon, 27 Nov 2023 11:23:54 +0900 Subject: [PATCH] =?UTF-8?q?=E5=A5=91=E7=B4=84=E4=B8=80=E8=A6=A7=E3=80=80?= =?UTF-8?q?=E8=A7=A3=E7=B4=84=E6=B8=88=E3=81=BF=E3=82=92=E5=BE=8C=E3=82=8D?= =?UTF-8?q?=E3=81=B8=E4=B8=A6=E3=81=B3=E6=9B=BF=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/season-ticket-contract.ts | 1 + src/pages/dashboard/contract/list.tsx | 42 ++++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/src/api/season-ticket-contract.ts b/src/api/season-ticket-contract.ts index 47898dd..6c214cd 100644 --- a/src/api/season-ticket-contract.ts +++ b/src/api/season-ticket-contract.ts @@ -26,6 +26,7 @@ export type SeasonTicketContract = { can_some_apply: boolean | null; can_change_plan_apply: boolean | null; can_parking_certificate_apply: boolean | null; + is_terminated: boolean | null; revision: number; }; diff --git a/src/pages/dashboard/contract/list.tsx b/src/pages/dashboard/contract/list.tsx index 267a8b5..9a65ac5 100644 --- a/src/pages/dashboard/contract/list.tsx +++ b/src/pages/dashboard/contract/list.tsx @@ -1,11 +1,12 @@ -import { Box, Grid, Paper, Typography } from "@mui/material"; +import { Box, Grid, Paper, SxProps, Typography } from "@mui/material"; import { SeasonTicketContract } from "api/season-ticket-contract"; import { useSeasonTicketContractContext } from "contexts/dashboard/SeasonTicketContractContext"; import useDashboard from "hooks/useDashBoard"; import useNavigateCustom from "hooks/useNavigateCustom"; import { PageID, TabID } from "pages"; -import { useEffect } from "react"; +import { useEffect, useMemo } from "react"; import { getPath } from "routes/path"; +import { dateParse } from "utils/datetime"; function SeasonTicketContractCard({ data }: { data: SeasonTicketContract }) { const { navigateWhenChanged } = useNavigateCustom(); @@ -18,8 +19,20 @@ function SeasonTicketContractCard({ data }: { data: SeasonTicketContract }) { }) ); }; + + const sx: SxProps = useMemo(() => { + const sx: SxProps = { + p: 2, + cursor: "pointer", + }; + if (data.is_terminated) { + sx.backgroundColor = "gray"; + } + return sx; + }, [data]); + return ( - + {data.parking_name} 区画:{data.room_no} @@ -34,6 +47,27 @@ export default function ContractList() { const { seasonTicketContracts } = useSeasonTicketContractContext(); + const listData = useMemo(() => { + return ( + seasonTicketContracts + // 契約日付の昇順に並び替え + .sort((a, b) => { + if (!a.contract_start_date) return 0; + if (!b.contract_start_date) return 0; + const aDate = dateParse(a.contract_start_date); + const bDate = dateParse(b.contract_start_date); + if (!aDate || !bDate) return 0; + return aDate < bDate ? -1 : 1; + }) + // 解約済みは後ろへ並び替え + .sort((a, b) => { + if (!a.is_terminated && b.is_terminated) return -1; + if (a.is_terminated && !b.is_terminated) return 1; + return 0; + }) + ); + }, [seasonTicketContracts]); + const { navigateWhenChanged } = useNavigateCustom(); const moveToDetail = () => { @@ -53,7 +87,7 @@ export default function ContractList() { return ( - {seasonTicketContracts.map((item, index) => { + {listData.map((item, index) => { return (