import { View, Text } from "@tarojs/components"; import './MainCard.scss' import { useEffect, useState } from "react"; import { rpxToPx } from "@/utils/tools"; import Rings, { RingCommon, BgRing, TargetRing, CurrentDot } from "@/features/trackTimeDuration/components/Rings"; import dayjs from "dayjs"; import moment from 'moment-timezone' import { MainColorType } from "@/context/themes/color"; import { useDispatch, useSelector } from "react-redux"; import { sleepWindow } from "@/services/trackTimeDuration"; import { WindowType } from "@/utils/types"; import { durationArc, isCurrentTimeInRange, startArc } from "./util"; import { setMode } from "@/store/health"; import { IconSwitch1, IconSwitch2 } from "@/components/basic/Icons"; export default function MainSleepActiveCard(props: { count: any, typeChanged: Function }) { const [isSleepMode, setIsSleepMode] = useState(true) const startScheduleTime = '19:00' const endScheduleTime = '06:00' const user = useSelector((state: any) => state.user); const health = useSelector((state: any) => state.health); const dispatch = useDispatch() useEffect(() => { const { sleep } = health.windows.sleep_active if (isCurrentTimeInRange(sleep.period.start_time, sleep.period.end_time)) { setIsSleepMode(true) } else { setIsSleepMode(false) } }, [health.windows]) useEffect(() => { }, [user.isLogin]) useEffect(() => { if (health.selTab == 2) { dispatch(setMode(isSleepMode ? 'SLEEP' : 'ACTIVE')) } }, [health.selTab, isSleepMode]) function formatTime(format: string, timestamp?: number) { return dayjs().format(format) } function switchMode() { var mode = !isSleepMode; setIsSleepMode(mode) props.typeChanged(mode ? WindowType.sleep : WindowType.active) } const common: RingCommon = { useCase: 'ChooseScenario', radius: 115, lineWidth: 26, isFast: true, status: 'WAIT_FOR_START' } const bgRing: BgRing = { color: '#EAE9E9' } function getArc() { const { sleep, active } = health.windows.sleep_active if (isSleepMode) { return startArc(sleep.target.start_timestamp) } return startArc(active.target.start_timestamp) } function getTargetArc() { const { sleep, active } = health.windows.sleep_active if (isSleepMode) { return durationArc(sleep.target.start_timestamp, sleep.target.end_timestamp) } return durationArc(active.target.start_timestamp, active.target.end_timestamp) } function getRealArc() { const { sleep, active } = health.windows.sleep_active if (isSleepMode) { return durationArc(sleep.target.start_timestamp, new Date().getTime()) } return durationArc(active.target.start_timestamp, new Date().getTime()) } function targetRing() { const color = isSleepMode ? '#D0C0FB' : '#FF498366' const startArc = getArc() const durationArc = getTargetArc() return { color, startArc, durationArc } } function realRing() { const color = isSleepMode ? MainColorType.sleep : MainColorType.active const { sleep, active } = health.windows.sleep_active if (isSleepMode) { if (!isCurrentTimeInRange(sleep.period.start_time, sleep.period.end_time)) { return null } } else { if (!isCurrentTimeInRange(active.period.start_time, active.period.end_time)) { return null } } return { color: color, startArc: getArc(),//-Math.PI / 2, durationArc: getRealArc() } // if (isSleepMode) { // if (isCurrentTimeInRange(startScheduleTime, endScheduleTime)) { // var starts: any = startScheduleTime.split(':') // const startSeconds = parseInt(starts[0] + '') * 60 + parseInt(starts[1] + '') // const color = MainColorType.sleep // const startArc = startSeconds / 1440 * 2 * Math.PI - Math.PI / 2 // var endSeconds = new Date().getHours() * 60 + new Date().getMinutes() // const fastCount = endSeconds - startSeconds > 0 ? endSeconds - startSeconds : endSeconds - startSeconds + 1440 // const durationArc = fastCount / 1440 * 2 * Math.PI // return { // color, // startArc, // durationArc // } // } // } // else { // if (isCurrentTimeInRange(endScheduleTime, startScheduleTime)) { // var starts: any = endScheduleTime.split(':') // const startSeconds = parseInt(starts[0] + '') * 60 + parseInt(starts[1] + '') // const color = MainColorType.active // const startArc = startSeconds / 1440 * 2 * Math.PI - Math.PI / 2 // var endSeconds = new Date().getHours() * 60 + new Date().getMinutes() // const fastCount = endSeconds - startSeconds > 0 ? endSeconds - startSeconds : endSeconds - startSeconds + 1440 // const durationArc = fastCount / 1440 * 2 * Math.PI // return { // color, // startArc, // durationArc // } // } // } } function ring() { var offset = 0 var hour = new Date().getHours() var minute = new Date().getMinutes() if (hour != new Date().getHours() || minute != new Date().getMinutes()) { offset = hour * 60 + minute - new Date().getHours() * 60 - new Date().getMinutes() } const currentDot: CurrentDot = { color: isSleepMode ? MainColorType.sleep : MainColorType.active, lineWidth: 10, borderColor: '#fff', offset: offset, whiteIcon: true } return } function switchIcon() { const { sleep } = health.windows.sleep_active if (isSleepMode) { if (isCurrentTimeInRange(sleep.period.start_time, sleep.period.end_time)) { return } return } if (isCurrentTimeInRange(sleep.period.start_time, sleep.period.end_time)) { return } return } function switchBtn() { var bgColor = '' const { sleep } = health.windows.sleep_active if (isSleepMode) { if (isCurrentTimeInRange(sleep.period.start_time, sleep.period.end_time)) { bgColor = '#fff' } else { bgColor = MainColorType.active } } else { if (isCurrentTimeInRange(sleep.period.start_time, sleep.period.end_time)) { bgColor = MainColorType.sleep } else { bgColor = '#fff' } } return { switchIcon() } } return { ring() } {formatTime('HH:mm:ss')} {global.language == 'en' ? formatTime('dddd, MMM D') : formatTime('MMMDæ—¥ dddd')} { switchBtn() } }