import Box from "@/components/layout/Box"; import Header from "@/components/layout/Header"; import Modal from "@/components/layout/Modal"; import RecordItem from "@/features/common/RecordItem"; import { delRecord } from "@/services/trackTimeDuration"; import { ModalType } from "@/utils/types"; import { View, Text, Image } from "@tarojs/components"; import Taro from "@tarojs/taro"; import { useEffect, useState } from "react"; import TimelineFastSleep from "./TimelineFastSleep"; import { TimeFormatter } from "@/utils/time_format"; import './RecordFastSleep.scss' import { getBgRing, getCommon, getDot, getReal, getTarget } from "../hooks/RingData"; import Rings from "./Rings"; import Segment from "@/components/navigation/Segment"; import Stage from "./Stage"; import CenterContentTitleModal from "@/features/common/CenterContentTitleModal"; import { useTranslation } from "react-i18next"; import { ColorType } from "@/context/themes/color"; import TimelineStage from "./TimelineStage"; import { jumpPage } from "../hooks/Common"; // import { sqrt } from 'mathjs' let AppState; if (process.env.TARO_ENV == 'rn') { AppState = require("react-native").AppState } export default function RecordFastSleep(props: { data: any, type: string, delSuccess?: Function }) { const [showDetailModal, setShowDetailModal] = useState(false) const [segmentIndex, setSegmentIndex] = useState(0) const [diffTimeZone, setDiffTimeZone] = useState(false) const [multiTimeZone, setMultiTimeZone] = useState(false) const { t } = useTranslation() const canvasId = props.data.id const record = props.data; const handleAppStateChange = (nextAppState) => { checkTimezone() }; useEffect(() => { checkTimezone() if (process.env.TARO_ENV == 'rn') { AppState.addEventListener('change', handleAppStateChange); } // console.log(sqrt(-4).toString()) }, [props.data]) function checkTimezone() { var split = new Date().toString().split(' '); var currentTZ = split[split.length - 2]; var isDiff = false; var isMulti = false; var tempTZ = ''; if (props.data.fast) { if (props.data.fast.real_start_time_zone) { tempTZ = props.data.fast.real_start_time_zone if (props.data.fast.real_start_time_zone != currentTZ) { isDiff = true } } if (props.data.fast.real_end_time_zone) { if (tempTZ != props.data.fast.real_end_time_zone) { isMulti = true } if (props.data.fast.real_end_time_zone != currentTZ) { isDiff = true } } } if (props.data.sleep) { if (props.data.sleep.real_start_time_zone) { if (tempTZ == '') { tempTZ = props.data.sleep.real_start_time_zone } else if (tempTZ != props.data.sleep.real_start_time_zone) { isMulti = true } if (props.data.sleep.real_start_time_zone != currentTZ) { isDiff = true } } if (props.data.sleep.real_end_time_zone) { if (tempTZ != props.data.sleep.real_end_time_zone) { isMulti = true } if (props.data.sleep.real_end_time_zone != currentTZ) { isDiff = true } } } setDiffTimeZone(isDiff) setMultiTimeZone(isMulti) } function del() { var id = props.data.id delRecord(id ).then(res => { global.refreshTime() Taro.showToast({ title: t('page.records_history.del_success') }) props.delSuccess && props.delSuccess(props.data) // Taro.navigateBack() }) } function subTitle(timestamp) { if (multiTimeZone) { return t('feature.common.multi_timezones') } if (diffTimeZone) { return t('feature.common.different_timezone') } return TimeFormatter.getDateAndWeek(timestamp) } function schedules() { var timestamp = props.data.first_real_check_time return } function showDetail(e) { if (props.type == 'latest') { setSegmentIndex(0) global.segmentIndex = 0 setShowDetailModal(true) return; } setShowDetailModal(true) // var node = ( { // global.showModal(false, null) // }} // confirm={() => { }} />); // global.showModal(true, node); } function getDuration(obj) { if (!obj) { } if (obj.status == 'NOT_STARTED' || obj.status == 'NOT_COMPLETED') { return '' } var start = obj.real_start_time var end = obj.real_end_time if (!end) { end = (new Date()).getTime() } return TimeFormatter.durationFormate(start, end) // return TimeFormatter.calculateTimeDifference(start, end) } function durationArc(start_time: number, end_time: number) { var duration = (end_time - start_time) / 1000; return duration / (24 * 3600) * 2 * Math.PI; } function bigRing() { var common = getCommon(null, true) common.radius = 42; common.lineWidth = 9; var bgRing = getBgRing() if (props.type == 'record' || props.type == 'latest') { var realRing = getReal(record, true, true) if (props.data.status == 'ONGOING3') { realRing.color = 'rgba(0,0,0,0)' // bgRing.color = 'rgba(0,0,0,0)' } return } else { var currentDot1 = getDot(record, true) var targetBigRing1 = getTarget(record, true) if (record.status == 'ONGOING') { var realRing1 = getReal(record, true, false) return } if (record.status == 'WAIT_FOR_START') { return } var realRing1 = getReal(record, true, false) return } } function smallRing() { if (record.scenario == 'FAST_SLEEP') { var common = getCommon(null, false) common.radius = 28; common.lineWidth = 9; var bgRing = getBgRing() var realRing = getReal(record, false, false) if (props.type == 'record' || props.type == 'latest') { if (record.sleep.status == 'WAIT_FOR_END') { realRing.durationArc = durationArc(record.sleep.target_start_time, (new Date()).getTime()) return } else if (record.sleep.status == 'NOT_COMPLETED') { realRing.durationArc = 0.01 return } else if (record.sleep.status == 'COMPLETED') { realRing = getReal(record, false, true) return } return } else { var currentDot = getDot(record, false) var targetRing = getTarget(record, false) if (record.status == 'ONGOING2') { var realRing = getReal(record, false, false) return } if (record.status == 'ONGOING3') { currentDot.color = 'rgba(0, 255, 255, 0.5)' } return } } return null } function rings() { return { bigRing() } { smallRing() } } function recordTime() { var timestamp = props.data.first_real_check_time if (props.data.first_time_zone) { timestamp = TimeFormatter.transferTimestamp(timestamp, props.data.first_time_zone) } return TimeFormatter.dateDescription(timestamp, true) } function getArrowText() { if (multiTimeZone) { return t('feature.common.multi_timezones') } if (diffTimeZone) { return t('feature.common.different_timezone') } return recordTime() } function recordDetail() { var fastDuration = '' var sleepDuration = '' var showFast = false; var showSleep = false; if (record.scenario == 'FAST_SLEEP') { fastDuration = getDuration(record.fast) sleepDuration = getDuration(record.sleep) if (record.status == 'ONGOING3') { fastDuration = t('feature.common.wait_for_end') } if (record.sleep.status == "NOT_STARTED") { sleepDuration = t('feature.common.not_started') } else if (record.sleep.status == 'NOT_COMPLETED') { sleepDuration = t('feature.common.not_completed') } showFast = true showSleep = true } else if (record.scenario == 'FAST') { fastDuration = getDuration(record.fast) showFast = true } else { sleepDuration = getDuration(record.sleep) showSleep = true } return { rings() } { showFast && {t('feature.track_time_duration.record_fast_sleep.item.fast')} } { showFast && {fastDuration} } { showSleep && {t('feature.track_time_duration.record_fast_sleep.item.sleep')} } { showSleep && {sleepDuration} } {/* */} {getArrowText()} } return {recordDetail()} { showDetailModal && setShowDetailModal(false)} confirm={() => { }} /> } }