perf: 时区设置一次

dev/timezone
Lei OT 1 year ago
parent aa62fc183e
commit c4f13b5b8e

@ -2,44 +2,47 @@ import { useEffect, useState } from 'react';
import { Typography, Select } from 'antd'; import { Typography, Select } from 'antd';
import ct from 'countries-and-timezones'; import ct from 'countries-and-timezones';
const LocalTimeClock = ({ region, ...props }) => { const LocalTimeClock = ({ region, timezone, ...props }) => {
const [countryTimezones, setCountryTimezones] = useState([]); const [countryTimezones, setCountryTimezones] = useState([]);
useEffect(() => { const [timezoneP, setTimezoneP] = useState(timezone);
const _countryTimezones = Object.values(ct.getTimezonesForCountry(region || 'CN')).map((tz) => { const [customerDateTime, setCustomerDateTime] = useState();
const date = new Date(); console.log(timezone, timezoneP);
const options = { timeZone: tz.name, timeZoneName: 'short' };
const shortName = date.toLocaleTimeString('en-US', options).split(' ')[2];
return { ...tz, fullName: `${tz.name} (${shortName})`, shortName };
});
// console.log(_countryTimezones);
setCountryTimezones(_countryTimezones);
useEffect(() => {
if (timezone) {
setTimezoneP(timezone);
} else {
const _countryTimezones = Object.values(ct.getTimezonesForCountry(region || 'CN')).map((tz) => {
const date = new Date();
const options = { timeZone: tz.name, timeZoneName: 'short' };
const shortName = date.toLocaleTimeString('en-US', options).split(' ')[2];
return { ...tz, fullName: `${tz.name} (${shortName})`, shortName };
});
// console.log(_countryTimezones);
setCountryTimezones(_countryTimezones);
setTimezoneP(_countryTimezones[0].name);
}
return () => {}; return () => {};
}, [region]); }, [region, timezone]);
const [timezone, setTimezone] = useState(countryTimezones?.[0]?.name || ''); // countryTimezones?.[0]?.name || ''
const [customerDateTime, setCustomerDateTime] = useState();
useEffect(() => { useEffect(() => {
const interval = setInterval(() => { const interval = setInterval(() => {
// const date = new Date(); // const date = new Date();
const options = { const options = {
timeZone: timezone, timeZone: timezoneP,
timeZoneName: 'short', timeZoneName: 'short',
hour12: false, hour12: false,
month: 'numeric', month: '2-digit',
day: 'numeric', day: '2-digit',
hour: 'numeric', hour: '2-digit',
minute: 'numeric', minute: '2-digit',
}; };
// const formatter = new Intl.DateTimeFormat('en-US', options); // const formatter = new Intl.DateTimeFormat('en-US', options);
// setCustomerDateTime(formatter.format(date)); // setCustomerDateTime(formatter.format(date));
setCustomerDateTime(new Date().toLocaleTimeString('cn-ZH', options)); setCustomerDateTime(new Date().toLocaleTimeString('cn-ZH', options));
}, 1000); }, 1000);
return () => clearInterval(interval); return () => clearInterval(interval);
}, [timezone]); }, [timezoneP]);
return region ? ( return region ? (
<> <>
@ -52,7 +55,7 @@ const LocalTimeClock = ({ region, ...props }) => {
dropdownStyle={{ width: 250 }} dropdownStyle={{ width: 250 }}
variant='borderless' variant='borderless'
onSelect={(value) => { onSelect={(value) => {
setTimezone(value); setTimezoneP(value);
// setOrderPropValue(currentOrder, 'orderlabel', value) // setOrderPropValue(currentOrder, 'orderlabel', value)
// .then(() => { // .then(() => {
// message.success('') // message.success('')
@ -66,13 +69,13 @@ const LocalTimeClock = ({ region, ...props }) => {
// }) // })
// }) // })
}} }}
value={timezone} value={timezoneP}
options={countryTimezones} options={countryTimezones}
fieldNames={{ label: 'fullName', value: 'name' }} fieldNames={{ label: 'fullName', value: 'name' }}
/> />
) : ( ) : (
<> <>
<Typography.Text>{timezone}</Typography.Text> {/* <Typography.Text>{timezoneP}</Typography.Text> */}
</> </>
)} )}
<Typography.Text>{customerDateTime}</Typography.Text> <Typography.Text>{customerDateTime}</Typography.Text>

@ -43,7 +43,7 @@ const MessagesHeader = () => {
<> <>
<Typography.Text>{currentConversation.whatsapp_phone_number}</Typography.Text> <Typography.Text>{currentConversation.whatsapp_phone_number}</Typography.Text>
{/* todo: regionCode */} {/* todo: regionCode */}
<LocalTimeClock region={'US'} /> <LocalTimeClock region={'US'} timezone={'America/New_York'} />
</> </>
) : ( ) : (
<Typography.Text strong type='danger'> <Typography.Text strong type='danger'>

Loading…
Cancel
Save