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 { MainColorType } from "@/context/themes/color"; import { useDispatch, useSelector } from "react-redux"; import { WindowStatusType, WindowType } from "@/utils/types"; import { durationArc, isCurrentTimeInRange, startArc } from "./util"; import { setMode } from "@/store/health"; import { getScenario, getWindowStatus } from "./hooks/health_hooks"; import { useTranslation } from "react-i18next"; export default function MainSleepActiveCard(props: { count: any, typeChanged: Function, id: number, onClick: Function, scale: number }) { const [isSleepMode, setIsSleepMode] = useState(true) const user = useSelector((state: any) => state.user); const health = useSelector((state: any) => state.health); const dispatch = useDispatch() const {t} = useTranslation() useEffect(() => { if (health.mode == 'SLEEP') { setIsSleepMode(true) } else if (health.mode == 'ACTIVE') { setIsSleepMode(false) } }, [health.mode]) useEffect(() => { const { sleep } = health.windows.sleep_active if (isCurrentTimeInRange(sleep.period.start_time, sleep.period.end_time)) { setIsSleepMode(true) } else { setIsSleepMode(false) } }, []) useEffect(() => { }, [user.isLogin]) useEffect(() => { if (health.selTab == 2) { dispatch(setMode(isSleepMode ? 'SLEEP' : 'ACTIVE')) } }, [health.selTab, isSleepMode]) const common: RingCommon = { useCase: 'ChooseScenario', radius: 23.5, lineWidth: 13, isFast: true, status: 'WAIT_FOR_START' } const bgRing: BgRing = { color: MainColorType.ringBg } 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 targetRing() { const color = isSleepMode ? '#D0C0FB' : '#FF498366' const startArc = getArc() const durationArc = getTargetArc() return { color, startArc, durationArc } } function getRealArc(time) { var date = new Date(time); var hour = date.getHours(); var minute = date.getMinutes(); var second = date.getSeconds(); return (hour * 3600 + minute * 60 + second) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0; } function getRealDurationArc(start, end) { var duration = (end - start) / 1000; return duration / (24 * 3600) * 2 * Math.PI; } function realRing() { const status = getWindowStatus(health.windows, isSleepMode ? 'SLEEP' : 'ACTIVE') const scenario = getScenario(health.windows, isSleepMode ? 'SLEEP' : 'ACTIVE') if (status == WindowStatusType.upcoming) { return null; // return { // color: '#cccccc', // startArc: getRealArc(new Date().getTime()), // durationArc: getRealDurationArc(new Date().getTime(), scenario.target.start_timestamp), // } } return { color: isSleepMode ? MainColorType.sleep : MainColorType.active, startArc: getRealArc(scenario.target.start_timestamp), durationArc: getRealDurationArc(scenario.target.start_timestamp, new Date().getTime()) } } function currentDot() { if (health.mode == 'SLEEP' || health.mode == 'ACTIVE') { const status = getWindowStatus(health.windows, isSleepMode ? 'SLEEP' : 'ACTIVE') return { color: status == WindowStatusType.upcoming?'#B2B2B2':isSleepMode ? MainColorType.sleep : MainColorType.active, lineWidth: 4, borderColor: '#F5F5F5', offset: 0 } } return null; } function showDotAnimation(){ if (health.mode == 'SLEEP' || health.mode == 'ACTIVE') { const status = getWindowStatus(health.windows, isSleepMode ? 'SLEEP' : 'ACTIVE') if (status == WindowStatusType.process) return true; } return false } function ring() { return } return props.onClick()}> { ring() } {isSleepMode ? t('health.sleep') : t('health.active')} }