From 73a60a0c8192bb86a70fbe638c2f3b5dddb9747a Mon Sep 17 00:00:00 2001 From: xudaotutou <13435638964@163.com> Date: Fri, 8 Mar 2024 21:18:52 +0800 Subject: [PATCH] fix(costcenter):fix rerender when select date --- .../src/components/billing/InOutTabPanel.tsx | 6 +-- .../components/billing/RechargeTabPanel.tsx | 9 +++-- .../components/billing/selectDateRange.tsx | 40 ++++++++----------- .../providers/costcenter/src/pages/_app.tsx | 10 ----- .../costcenter/src/pages/billing/index.tsx | 15 +------ 5 files changed, 27 insertions(+), 53 deletions(-) diff --git a/frontend/providers/costcenter/src/components/billing/InOutTabPanel.tsx b/frontend/providers/costcenter/src/components/billing/InOutTabPanel.tsx index 429250eefe5..a122becc260 100644 --- a/frontend/providers/costcenter/src/components/billing/InOutTabPanel.tsx +++ b/frontend/providers/costcenter/src/components/billing/InOutTabPanel.tsx @@ -1,5 +1,5 @@ import useOverviewStore from '@/stores/overview'; -import { useEffect, useState } from 'react'; +import { memo, useEffect, useState } from 'react'; import { BillingData, BillingSpec, BillingType } from '@/types'; import { useQuery } from '@tanstack/react-query'; import { formatISO } from 'date-fns'; @@ -53,7 +53,7 @@ export default function InOutTabPanel({ namespace }: { namespace: string }) { onSuccess(data) { const totalPage = data.data.status.pageLength; if (totalPage === 0) { - // 搜索时的bug + // search reset setTotalPage(1); setTotalItem(1); } else { @@ -80,7 +80,7 @@ export default function InOutTabPanel({ namespace }: { namespace: string }) { {t('Transaction Time')} - + {} diff --git a/frontend/providers/costcenter/src/components/billing/RechargeTabPanel.tsx b/frontend/providers/costcenter/src/components/billing/RechargeTabPanel.tsx index 5bc5eb544a5..4bd8cfc6a1d 100644 --- a/frontend/providers/costcenter/src/components/billing/RechargeTabPanel.tsx +++ b/frontend/providers/costcenter/src/components/billing/RechargeTabPanel.tsx @@ -27,8 +27,7 @@ import Amount from '@/components/billing/AmountTableHeader'; import SearchBox from '@/components/billing/SearchBox'; export default function RechargeTabPanel() { - const startTime = useOverviewStore((state) => state.startTime); - const endTime = useOverviewStore((state) => state.endTime); + const { startTime, endTime } = useOverviewStore(); const { data, isFetching, isSuccess } = useQuery( ['billing', 'in', { startTime, endTime }], () => { @@ -44,7 +43,10 @@ export default function RechargeTabPanel() { } ); const { t } = useTranslation(); - const tableResult = data?.data?.payment || []; + const tableResult = useMemo(() => { + if (data?.data?.payment) return data.data.payment; + else return []; + }, [data?.data?.payment]); const currency = useEnvStore((s) => s.currency); const columns = useMemo(() => { const columnHelper = createColumnHelper(); @@ -112,6 +114,7 @@ export default function RechargeTabPanel() { columns, getCoreRowModel: getCoreRowModel() }); + useEffect(() => { table.resetPageIndex(true); }, [startTime, endTime]); diff --git a/frontend/providers/costcenter/src/components/billing/selectDateRange.tsx b/frontend/providers/costcenter/src/components/billing/selectDateRange.tsx index 34b19cdbc9a..cd3b7f4e1a1 100644 --- a/frontend/providers/costcenter/src/components/billing/selectDateRange.tsx +++ b/frontend/providers/costcenter/src/components/billing/selectDateRange.tsx @@ -11,14 +11,13 @@ import { Box } from '@chakra-ui/react'; import { format, parse, isValid, isAfter, isBefore, endOfDay, startOfDay, addDays } from 'date-fns'; -import { useState, ChangeEventHandler } from 'react'; +import { useState, ChangeEventHandler, useCallback, useEffect } from 'react'; import { DateRange, SelectRangeEventHandler, DayPicker } from 'react-day-picker'; +import { useShallow } from 'zustand/react/shallow'; +import { subscribeWithSelector } from 'zustand/middleware'; export default function SelectRange({ isDisabled }: { isDisabled: boolean | undefined }) { - let { startTime, endTime } = useOverviewStore(); - const setStartTime = useOverviewStore((state) => state.setStartTime); - const setEndTime = useOverviewStore((state) => state.setEndTime); - + const { setStartTime, setEndTime, startTime, endTime } = useOverviewStore(); const initState = { from: startTime, to: endTime }; const [selectedRange, setSelectedRange] = useState(initState); const [fromValue, setFromValue] = useState(format(initState.from, 'y-MM-dd')); @@ -68,9 +67,9 @@ export default function SelectRange({ isDisabled }: { isDisabled: boolean | unde if (range) { let { from, to } = range; if (inputState === 0) { - // 输入from + // from if (from === selectedRange?.from) { - // 组件动了to + // when 'to' is changed from = to; } else { to = from; @@ -94,7 +93,7 @@ export default function SelectRange({ isDisabled }: { isDisabled: boolean | unde setToValue(from ? format(from, 'y-MM-dd') : ''); } } else { - // 选了第一个日期,组件默认的行为是取消选择 + // default is cancel if (fromValue && selectedRange?.from) { setToValue(fromValue); setSelectedRange({ @@ -111,10 +110,10 @@ export default function SelectRange({ isDisabled }: { isDisabled: boolean | unde if (selectedRange?.to) { if (from) { if (!to) { - // 证明直接重合 + // proof 'to' = 'from' to = from; } else if (from === selectedRange?.from) { - // 组件动了to + // when 'to' is changed from = to; to = selectedRange.to; } @@ -130,16 +129,15 @@ export default function SelectRange({ isDisabled }: { isDisabled: boolean | unde } }; const handleRangeSelectTo: SelectRangeEventHandler = (range: DateRange | undefined) => { - console.log(range, selectedRange); if (range) { let { from, to } = range; if (selectedRange?.from) { if (to) { if (!from) { - // 证明直接重合 + // proof 'to' = 'from' from = to; } else if (to === selectedRange?.to) { - // 组件动了from + // when 'from' is changed to = from; from = selectedRange.from; } @@ -153,7 +151,7 @@ export default function SelectRange({ isDisabled }: { isDisabled: boolean | unde } } } else { - // 选了第一个日期,组件默认的行为是取消选择 + // default is cancelgit if (fromValue && selectedRange?.from) { setToValue(fromValue); setSelectedRange({ @@ -187,10 +185,7 @@ export default function SelectRange({ isDisabled }: { isDisabled: boolean | unde value={fromValue} minW="90px" onChange={handleFromChange} - onBlur={() => { - selectedRange?.from && setStartTime(startOfDay(selectedRange.from)); - console.log(selectedRange?.from); - }} + onBlur={onClose} /> @@ -199,7 +194,7 @@ export default function SelectRange({ isDisabled }: { isDisabled: boolean | unde mode="range" selected={selectedRange} onSelect={handleRangeSelectFrom} - defaultMonth={startTime} + defaultMonth={initState.from} styles={{ day: { borderRadius: 'unset', @@ -221,10 +216,7 @@ export default function SelectRange({ isDisabled }: { isDisabled: boolean | unde flex={1} minW="90px" onChange={handleToChange} - onBlur={() => { - selectedRange?.to && setEndTime(endOfDay(selectedRange.to)); - console.log(selectedRange?.to); - }} + onBlur={onClose} /> @@ -233,7 +225,7 @@ export default function SelectRange({ isDisabled }: { isDisabled: boolean | unde mode="range" selected={selectedRange} onSelect={handleRangeSelectTo} - defaultMonth={endTime} + defaultMonth={initState.to} styles={{ day: { borderRadius: 'unset', diff --git a/frontend/providers/costcenter/src/pages/_app.tsx b/frontend/providers/costcenter/src/pages/_app.tsx index ec08b1e38f0..5a54c349b21 100644 --- a/frontend/providers/costcenter/src/pages/_app.tsx +++ b/frontend/providers/costcenter/src/pages/_app.tsx @@ -41,17 +41,7 @@ const App = ({ Component, pageProps }: AppProps) => { const router = useRouter(); useEffect(() => { const changeI18n = (data: { currentLanguage: string }) => { - // setCookie('NEXT_LOCALE', data.currentLanguage, { - // expires: 30, - // sameSite: 'None', - // secure: true - // }); - console.log(data); router.replace(router.basePath, router.asPath, { locale: data.currentLanguage }); - // router.replace(router.asPath,router.asPath, { - // locale: data.currentLanguage - // }) - // i18n?.changeLanguage(data.currentLanguage); }; (async () => { diff --git a/frontend/providers/costcenter/src/pages/billing/index.tsx b/frontend/providers/costcenter/src/pages/billing/index.tsx index 6a4b7305d53..e98e5a47bc4 100644 --- a/frontend/providers/costcenter/src/pages/billing/index.tsx +++ b/frontend/providers/costcenter/src/pages/billing/index.tsx @@ -1,16 +1,5 @@ -import { - Box, - Flex, - Heading, - Img, - Tab, - TabList, - TabPanel, - TabPanels, - Tabs, - Text -} from '@chakra-ui/react'; -import { useEffect, useRef, useState } from 'react'; +import { Flex, Heading, Img, Tab, TabList, TabPanels, Tabs } from '@chakra-ui/react'; +import { useState } from 'react'; import receipt_icon from '@/assert/receipt_long_black.svg'; import { serverSideTranslations } from 'next-i18next/serverSideTranslations'; import { useTranslation } from 'next-i18next';