import { View, Text, Image, PageContainer } from "@tarojs/components"; import './TotalTime.scss' import { useTranslation } from "react-i18next"; import { ColorType } from "@/context/themes/color"; import { rpxToPx } from "@/utils/tools"; import { TimeFormatter } from "@/utils/time_format"; import Modal from "@/components/layout/Modal.weapp"; import { useEffect, useRef, useState } from "react"; import { durationDatas, durationIndex, getColor, getDurationTitle } from "../hooks/Console"; import PickerViews from "@/components/input/PickerViews"; import { useSelector } from "react-redux"; import Taro from "@tarojs/taro"; import { updateRecord } from "@/services/trackTimeDuration"; export default function TotalTime(props: { record: any }) { const [showDurationPicker, setShowDurationPicker] = useState(false) const [fastPickerValue, setFastPickerValue] = useState([0, 0]) const [sleepPickerValue, setSleepPickerValue] = useState([0, 0]) const [showEditPicker, setShowEditPicker] = useState(false) const [count, setCount] = useState(0) const common = useSelector((state: any) => state.common); const [isFast, setIsFast] = useState(true) const durationPickerRef = useRef(null) const { t } = useTranslation() useEffect(() => { getStateDetail() setCount((pre) => pre + 1) }, [props.record]) function getStateDetail() { var current_record = props.record if (current_record.fast) setFastPickerValue(durationIndex(current_record.fast.target_start_time, current_record.fast.target_end_time, common)) if (current_record.sleep) setSleepPickerValue(durationIndex(current_record.sleep.target_start_time, current_record.sleep.target_end_time, common)) } function sleepCompleteStatus() { if (props.record.sleep.status == "NOT_STARTED") { return t('feature.common.not_started') } else if (props.record.sleep.status == 'NOT_COMPLETED') { return t('feature.common.not_completed') } return TimeFormatter.durationFormate(props.record.sleep.real_start_time, props.record.sleep.real_end_time) } function fastGoingText() { if (props.record.status == 'WAIT_FOR_START') { return '00:00:00' } return TimeFormatter.formateTimeNow(props.record.fast.real_start_time) } function fastEndText() { if (props.record.status == 'WAIT_FOR_START') { return TimeFormatter.formateTimeDifference(new Date().getTime(), new Date().getTime() + props.record.fast.target_end_time - props.record.fast.target_start_time) } return TimeFormatter.countdown(props.record.fast.target_end_time) } function sleepGoingText() { if (props.record.status == 'WAIT_FOR_START' || props.record.status == 'ONGOING1') { return '00:00:00' } return TimeFormatter.formateTimeNow(props.record.sleep.real_start_time) } function sleepEndText() { if (props.record.status == 'WAIT_FOR_START' || props.record.status == 'ONGOING1') { return TimeFormatter.formateTimeDifference(new Date().getTime(), new Date().getTime() + props.record.sleep.target_end_time - props.record.sleep.target_start_time) } return TimeFormatter.countdown(props.record.sleep.target_end_time) } function setFastDuration(e) { setIsFast(true) if (disableChange(true)) return if (process.env.TARO_ENV == 'weapp') { e.stopPropagation() } if (props.record.status == 'WAIT_FOR_START') { setShowDurationPicker(true) } else { setShowEditPicker(true) } } function setSleepDuration(e) { setIsFast(false) if (disableChange(false)) return if (process.env.TARO_ENV == 'weapp') { e.stopPropagation() } if (props.record.status == 'WAIT_FOR_START') { Taro.showToast({ title: t('feature.track_time_duration.common.start_fasting_first'), icon: 'none' }) return; } if (props.record.status == 'WAIT_FOR_START' || props.record.status == 'ONGOING1') { setShowDurationPicker(true) } else { setShowEditPicker(true) } } function disableChange(isFastStatus) { if (props.record.status == 'WAIT_FOR_START') { return false; } if (isFastStatus) { if (props.record.status != 'COMPLETED') return false; return true } else { if (props.record.status == 'ONGOING3' || props.record.status == 'COMPLETED') { return true } return false; } } function fastOtherStatus() { return 已进行 {fastGoingText()} {new Date().getTime() < props.record.fast.target_end_time ? '距结束' : '已超时'} {fastEndText()} } function sleepOtherStatus() { return 已进行 {sleepGoingText()} {new Date().getTime() < props.record.sleep.target_end_time ? '距结束' : '已超时'} {sleepEndText()} } function durationPickerContent() { var color = getColor(props.record) var title = getDurationTitle(props.record, t) return { setShowDurationPicker(false) }} /> } function editPickerContent() { return { setShowEditPicker(false) }} /> } function durationChange(e) { // debugger var count = (e[0] + common.duration.min) * 60 + e[1] * common.duration.step // var count = (e[0] + 1) * 60 + e[1] * 5 if (showDurationPicker) { global.changeTargetDuration(count, isFast) } else { var params: any = {} if (isFast) { params = { fast: { target_duration: count * 60 * 1000 } } } else { params = { sleep: { target_duration: count * 60 * 1000 } } } updateRecord({ ...params }, props.record.id).then(res => { global.indexPageRefresh() }).catch(e => { }) } setShowDurationPicker(false) setShowEditPicker(false) } function modalContent() { if (showDurationPicker || showEditPicker) { if (process.env.TARO_ENV == 'weapp') { return { setShowDurationPicker(false) setShowEditPicker(false) }} confirm={() => { }}> { showDurationPicker ? durationPickerContent() : editPickerContent() } } else if (process.env.TARO_ENV == 'rn') { return { }} onBeforeLeave={() => { }} onClick={() => { alert('b') }} onClickOverlay={() => { alert('a') }} onAfterLeave={() => { setShowDurationPicker(false); setShowEditPicker(false) }} show={showDurationPicker} round={true} overlay={true} position='bottom' > { showDurationPicker ? durationPickerContent() : editPickerContent() } } } return } return { props.record.fast && 断食 { props.record.status == 'COMPLETED' ? {t('feature.track_time_duration.console.real_duration')} {TimeFormatter.durationFormate(props.record.fast.real_start_time, props.record.fast.real_end_time)} {/* */} : {t('feature.track_time_duration.console.target')} {TimeFormatter.durationFormate(props.record.fast.target_start_time, props.record.fast.target_end_time)} {!disableChange(true) && } } { props.record.status == 'COMPLETED' ? {t('feature.track_time_duration.console.target')} {TimeFormatter.durationFormate(props.record.fast.target_start_time, props.record.fast.target_end_time)} {!disableChange(true) && } : fastOtherStatus() } } { props.record.sleep && 睡眠 { // props.record.status == 'COMPLETED' || props.record.status == 'ONGOING3' ? // // {t('feature.track_time_duration.console.real_duration')} // {sleepCompleteStatus()} // : {t('feature.track_time_duration.console.target')} {TimeFormatter.durationFormate(props.record.sleep.target_start_time, props.record.sleep.target_end_time)} {!disableChange(false) && } } { props.record.status == 'COMPLETED' || props.record.status == 'ONGOING3' ? // // {t('feature.track_time_duration.console.target')} // {TimeFormatter.durationFormate(props.record.sleep.target_start_time, props.record.sleep.target_end_time)} // {!disableChange(false) && } // {t('feature.track_time_duration.console.real_duration')} {sleepCompleteStatus()} : sleepOtherStatus() } } { modalContent() } }