Leon 2 vuotta sitten
vanhempi
commit
0c8245b8df

+ 46 - 45
src/features/trackTimeDuration/components/TimelineFastSleep.tsx

@@ -5,10 +5,12 @@ import getStatus from "../hooks/Record";
 import { ColorType } from "@/context/themes/color";
 import { useTranslation } from "react-i18next";
 import { useEffect, useState } from "react";
+import { useSelector } from "react-redux";
 
 export default function TimelineFastSleep(props: { data: any, title?: string, first_real_check_time?: number }) {
     const { t } = useTranslation()
     const [diffTimeZone, setDiffTimeZone] = useState(false)
+    const scenario = useSelector((state: any) => state.scenario);
 
     useEffect(() => {
         var split = new Date().toString().split(' ');
@@ -38,55 +40,29 @@ export default function TimelineFastSleep(props: { data: any, title?: string, fi
 
     }, [props.data])
 
+
     function formateTime(obj: any, isEnd: boolean) {
         if (isEnd) {
             if (obj.real_end_time) {
-                return diffTimeZone?TimeFormatter.timelineFullFormatTime(obj.real_end_time):TimeFormatter.timelineFormatTime(obj.real_end_time)
+                var newTimestamp = TimeFormatter.transferTimestamp(obj.real_end_time,obj.real_end_time_zone)
+                return diffTimeZone ? TimeFormatter.timelineFullFormatTime(newTimestamp) : TimeFormatter.timelineFormatTime(obj.real_end_time)
             }
             else {
-                return diffTimeZone?TimeFormatter.timelineFullFormatTime(obj.target_end_time):TimeFormatter.timelineFormatTime(obj.target_end_time)
+                return diffTimeZone ? TimeFormatter.timelineFullFormatTime(obj.target_end_time) : TimeFormatter.timelineFormatTime(obj.target_end_time)
             }
         }
         else {
             if (obj.real_start_time) {
-                return diffTimeZone?TimeFormatter.timelineFullFormatTime(obj.real_start_time):TimeFormatter.timelineFormatTime(obj.real_start_time)
+                var newTimestamp = TimeFormatter.transferTimestamp(obj.real_start_time,obj.real_start_time_zone)
+                return diffTimeZone ? TimeFormatter.timelineFullFormatTime(newTimestamp) : TimeFormatter.timelineFormatTime(obj.real_start_time)
             }
             else {
-                return diffTimeZone?TimeFormatter.timelineFullFormatTime(obj.target_start_time):TimeFormatter.timelineFormatTime(obj.target_start_time)
+                return diffTimeZone ? TimeFormatter.timelineFullFormatTime(obj.target_start_time) : TimeFormatter.timelineFormatTime(obj.target_start_time)
             }
         }
 
     }
 
-    // function formateTime(obj: any, isEnd: boolean) {
-    //     if (isEnd) {
-    //         if (obj.real_end_time) {
-    //             if (obj.real_end_time_zone) {
-    //                 var newTimestamp = TimeFormatter.transferTimestamp(obj.real_end_time, obj.real_end_time_zone)
-    //                 return TimeFormatter.timelineFormatTime(newTimestamp)
-    //             }
-    //             return TimeFormatter.timelineFormatTime(obj.real_end_time)
-    //         }
-    //         else {
-    //             return TimeFormatter.timelineFormatTime(obj.target_end_time)
-    //         }
-    //     }
-    //     else {
-    //         if (obj.real_start_time) {
-    //             if (obj.real_end_time_zone) {
-    //                 var newTimestamp = TimeFormatter.transferTimestamp(obj.real_start_time, obj.real_start_time_zone)
-    //                 return TimeFormatter.timelineFormatTime(newTimestamp)
-    //             }
-
-    //             return TimeFormatter.timelineFormatTime(obj.real_start_time, obj.real_start_time_zone)
-    //         }
-    //         else {
-    //             return TimeFormatter.timelineFormatTime(obj.target_start_time)
-    //         }
-    //     }
-
-    // }
-
     function showDate(obj: any, isEnd: boolean) {
         var dt = 0
         if (isEnd) {
@@ -137,8 +113,29 @@ export default function TimelineFastSleep(props: { data: any, title?: string, fi
 
     }
 
+    function getWaitForStartDate(time: string) {
+        var strTime
+        if (scenario.name == 'SLEEP') {
+            strTime = scenario.schedule.sleep.start_time
+        }
+        else {
+            strTime = scenario.schedule.fast.start_time
+        }
+        var count = parseInt(strTime.split(':')[0]) * 60 + parseInt(strTime.split(':')[1])
+        var count2 = parseInt(time.split(':')[0]) * 60 + parseInt(time.split(':')[1])
+        if (count > count2) {
+            return global.language == 'en' ? 'Tomorrow' : '明天'
+        }
+        return ''
+    }
+
     var timelineItems: any = [];
-    if (props.data.fast) {
+    /*
+    attention:
+    status == 待开始时
+    timeline的时间不以时间戳进行处理,而是以target时间字符串进行显示
+    */
+    if (props.data.fast && scenario.name != 'SLEEP') {
         var timeZone = ''
         if (props.data.fast.real_start_time_zone) {
             timeZone = ' ' + props.data.fast.real_start_time_zone
@@ -149,13 +146,14 @@ export default function TimelineFastSleep(props: { data: any, title?: string, fi
                 title: getStatus(true, true, props.data) == 'padding' ?
                     t('feature.track_time_duration.common.start_fast') :
                     t('feature.track_time_duration.common.started_fasting'),
-                content: formateTime(props.data.fast, false),
-                date: diffTimeZone?timeZone:showDate(props.data.fast, false) ? formateDate(props.data.fast, false) : '',
+                content: props.data.status == 'WAIT_FOR_START' ? scenario.schedule.fast.start_time : formateTime(props.data.fast, false),
+                date: props.data.status == 'WAIT_FOR_START' ? '' :
+                    (diffTimeZone ? timeZone : showDate(props.data.fast, false) ? formateDate(props.data.fast, false) : ''),
                 color: global.fastColor ? global.fastColor : ColorType.fast
             }
         )
     }
-    if (props.data.sleep) {
+    if (props.data.sleep && scenario.name != 'FAST') {
         var timeZone = ''
         if (props.data.sleep.real_start_time_zone) {
             timeZone = ' ' + props.data.sleep.real_start_time_zone
@@ -166,13 +164,14 @@ export default function TimelineFastSleep(props: { data: any, title?: string, fi
                 title: getStatus(false, true, props.data) == 'padding' ?
                     t('feature.track_time_duration.common.start_sleep') :
                     t('feature.track_time_duration.common.started_sleeping'),
-                content: formateTime(props.data.sleep, false),
-                date: diffTimeZone?timeZone:showDate(props.data.sleep, false) ? formateDate(props.data.sleep, false) : '',
+                content: props.data.status == 'WAIT_FOR_START' ? scenario.schedule.sleep.start_time : formateTime(props.data.sleep, false),
+                date: props.data.status == 'WAIT_FOR_START' ? getWaitForStartDate(scenario.schedule.sleep.start_time) :
+                    (diffTimeZone ? timeZone : showDate(props.data.sleep, false) ? formateDate(props.data.sleep, false) : ''),
                 color: global.sleepColor ? global.sleepColor : ColorType.sleep
             }
         )
     }
-    if (props.data.sleep) {
+    if (props.data.sleep && scenario.name != 'FAST') {
         var timeZone = ''
         if (props.data.sleep.real_end_time_zone) {
             timeZone = ' ' + props.data.sleep.real_end_time_zone
@@ -183,13 +182,14 @@ export default function TimelineFastSleep(props: { data: any, title?: string, fi
                 title: getStatus(false, false, props.data) == 'padding' ?
                     t('feature.track_time_duration.common.end_sleep') :
                     t('feature.track_time_duration.common.ended_sleeping'),
-                content: formateTime(props.data.sleep, true),
-                date: diffTimeZone?timeZone:showDate(props.data.sleep, true) ? formateDate(props.data.sleep, true) : '',
+                content: props.data.status == 'WAIT_FOR_START' ? scenario.schedule.sleep.end_time : formateTime(props.data.sleep, true),
+                date: props.data.status == 'WAIT_FOR_START' ? getWaitForStartDate(scenario.schedule.sleep.end_time) :
+                    (diffTimeZone ? timeZone : showDate(props.data.sleep, true) ? formateDate(props.data.sleep, true) : ''),
                 color: global.sleepColor ? global.sleepColor : ColorType.sleep
             }
         )
     }
-    if (props.data.fast) {
+    if (props.data.fast && scenario.name != 'SLEEP') {
         var timeZone = ''
         if (props.data.fast.real_end_time_zone) {
             timeZone = ' ' + props.data.fast.real_end_time_zone
@@ -200,8 +200,9 @@ export default function TimelineFastSleep(props: { data: any, title?: string, fi
                 title: getStatus(true, false, props.data) == 'padding' ?
                     t('feature.track_time_duration.common.end_fast') :
                     t('feature.track_time_duration.common.ended_fasting'),
-                content: formateTime(props.data.fast, true),
-                date: diffTimeZone?timeZone:showDate(props.data.fast, true) ? formateDate(props.data.fast, true) : '',
+                content: props.data.status == 'WAIT_FOR_START' ? scenario.schedule.fast.end_time : formateTime(props.data.fast, true),
+                date: props.data.status == 'WAIT_FOR_START' ? getWaitForStartDate(scenario.schedule.fast.end_time) :
+                    (diffTimeZone ? timeZone : showDate(props.data.fast, true) ? formateDate(props.data.fast, true) : ''),
                 color: global.fastColor ? global.fastColor : ColorType.fast
             }
         )

+ 42 - 26
src/pages/clock/demoA.tsx

@@ -11,26 +11,30 @@ import AppleHealthKit, {
 /* Permission options */
 const permissions = {
     permissions: {
-        read: [AppleHealthKit.Constants.Permissions.Steps,
-            AppleHealthKit.Constants.Permissions.HeartRate,
-            AppleHealthKit.Constants.Permissions.BloodGlucose,
-            AppleHealthKit.Constants.Permissions.BloodPressureDiastolic,
-            AppleHealthKit.Constants.Permissions.BloodPressureSystolic,
-            AppleHealthKit.Constants.Permissions.ActiveEnergyBurned,
-            // AppleHealthKit.Constants.Permissions.AllergyRecord,
-            AppleHealthKit.Constants.Permissions.AppleStandTime,
-            AppleHealthKit.Constants.Permissions.BloodType,
-            AppleHealthKit.Constants.Permissions.BiologicalSex,
-            AppleHealthKit.Constants.Permissions.BloodGlucose,
-            AppleHealthKit.Constants.Permissions.FatTotal,
-            AppleHealthKit.Constants.Permissions.Iron,
+        read: [
             AppleHealthKit.Constants.Permissions.StepCount,
-            AppleHealthKit.Constants.Permissions.VitaminA,
-            AppleHealthKit.Constants.Permissions.VitaminC,
-            AppleHealthKit.Constants.Permissions.VitaminD,
+            // AppleHealthKit.Constants.Permissions.Steps,
+            // AppleHealthKit.Constants.Permissions.HeartRate,
+            // AppleHealthKit.Constants.Permissions.BloodGlucose,
+            // AppleHealthKit.Constants.Permissions.BloodPressureDiastolic,
+            // AppleHealthKit.Constants.Permissions.BloodPressureSystolic,
+            // AppleHealthKit.Constants.Permissions.ActiveEnergyBurned,
+
+            // AppleHealthKit.Constants.Permissions.AppleStandTime,
+            // AppleHealthKit.Constants.Permissions.BloodType,
+            // AppleHealthKit.Constants.Permissions.BiologicalSex,
+            // AppleHealthKit.Constants.Permissions.BloodGlucose,
+            // AppleHealthKit.Constants.Permissions.FatTotal,
+            // AppleHealthKit.Constants.Permissions.Iron,
+            // AppleHealthKit.Constants.Permissions.StepCount,
+            // AppleHealthKit.Constants.Permissions.VitaminA,
+            // AppleHealthKit.Constants.Permissions.VitaminC,
+            // AppleHealthKit.Constants.Permissions.VitaminD,
+
+            // AppleHealthKit.Constants.Permissions.AllergyRecord,
             // AppleHealthKit.Constants.Permissions.VitalSignRecord,
         ],
-        write: [AppleHealthKit.Constants.Permissions.Steps],
+        write: [AppleHealthKit.Constants.Permissions.StepCount],
     },
 } as HealthKitPermissions
 
@@ -63,25 +67,36 @@ export default function DemoA() {
         })
     }
 
+    function getAuthStatus() {
+        AppleHealthKit.getAuthStatus(permissions, (err, results) => {
+            console.log(err, results)
+            Taro.showModal({
+                title: '返回原始数据',
+                content: JSON.stringify(results)
+            })
+        })
+        // const authorized = await AppleHealthKit.i
+    }
+
     function getSteps() {
         const options = {
-            startDate: new Date(2024, 1, 2).toISOString(),
+            date: new Date(new Date().getTime()-24*3600*1000).toISOString()
         }
         // AppleHealthKit.getDailyStepCountSamples
         AppleHealthKit.getStepCount(options, (error: string, results: HealthValue) => {
-            if (!error){
-                setSteps(results.value+'')
+            if (!error) {
+                setSteps(results.value + '')
                 Taro.showModal({
-                    title:'返回原始数据',
-                    content:JSON.stringify(results)
+                    title: '返回原始数据',
+                    content: JSON.stringify(results)
                 })
             }
-            console.log(error,results)
+            console.log(error, results)
         })
     }
 
-    function checkAuth(){
-        
+    function checkAuth() {
+
     }
 
     const years = [0, 1, 2, 3, 4, 5]
@@ -116,8 +131,9 @@ export default function DemoA() {
             </PickerView>
             <GradientText style={{ fontSize: 20 }}>Hello world</GradientText>
             <Text style={{ color: 'red' }} onClick={healthKit}>Health Kit 授权</Text>
+            <Text style={{ color: 'red', margin: 10 }} onClick={getAuthStatus}>Health Kit 获取授权状态</Text>
             <Text style={{ color: 'red' }} onClick={getSteps}>获取当前步数:<Text>{steps}</Text> </Text>
-            
+
         </View>
     );
 }

+ 24 - 4
src/pages/common/RecordsHistory.tsx

@@ -19,14 +19,35 @@ import { clearWorkoutRecords, workoutRecords } from "@/services/workout";
 import WorkoutHistory from "@/features/workout/WorkoutHistory";
 
 let useRoute;
+let useNavigation;
 if (process.env.TARO_ENV == 'rn') {
     useRoute = require("@react-navigation/native").useRoute
+    useNavigation = require("@react-navigation/native").useNavigation
 }
 
 export default function Page() {
+    const {t} = useTranslation()
     let router
+    let navigation;
+    if (useNavigation) {
+        navigation = useNavigation()
+    }
+
     if (process.env.TARO_ENV == 'rn') {
         router = useRoute()
+        var title = ''
+        if (router.params.type == 'time'){
+            title = t('page.clock.title')
+        }
+        else if (router.params.type=='metric'){
+            title = t('page.metric.title')
+        }
+        else if (router.params.type == 'workout') {
+            title = t('page.workout.title')
+        }
+        navigation.setOptions({
+            headerBackTitle:title
+        });
     }
     else {
         router = useRouter()
@@ -47,16 +68,15 @@ export default function Page() {
     const [summary_stats, setSummaryStats] = useState(null)
     const user = useSelector((state: any) => state.user);
     const [count, setCount] = useState(0)
-    const { t } = useTranslation()
 
     global.showModal = (isShow: boolean, detail: any) => {
         setShowModal(isShow)
         setModalDetail(detail)
     }
 
-    useEffect(()=>{
+    useEffect(() => {
         refresh()
-    },[])
+    }, [])
 
     useEffect(() => {
         startTimer();
@@ -137,7 +157,7 @@ export default function Page() {
     function getHistory(page = pageIndex) {
         if (page == 1)
             setTriggered(true)
-        
+
         if (router.params.type == 'time') {
             getClockRecords({
                 page: page,

+ 1 - 1
src/pages/rn/RNMain.tsx

@@ -170,7 +170,7 @@ export default function RNMain() {
         <Stack.Screen name='Setting' component={Setting} />
         <Stack.Screen name='ChooseScenario' component={ChooseScenario} />
         <Stack.Screen name='RecordsHistory' component={RecordsHistory} options={{
-          headerBackTitle:'hello world'
+          // headerBackTitle:'hello world'
         }}/>
         <Stack.Screen name='SetSchedule' component={SetSchedule} />
         <Stack.Screen name='ProfileSetting' component={ProfileSetting} />