TimelineFastSleep.tsx 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. import Timeline from "@/components/view/Timeline";
  2. import { TimeFormatter } from "@/utils/time_format";
  3. import { View, Text } from "@tarojs/components";
  4. import getStatus from "../hooks/Record";
  5. import { ColorType } from "@/context/themes/color";
  6. import { useTranslation } from "react-i18next";
  7. import { useEffect, useState } from "react";
  8. import { useSelector } from "react-redux";
  9. import './TimelineFastSleep.scss'
  10. export default function TimelineFastSleep(props: { data: any, title?: string, first_real_check_time?: number, multiTimeZone?: boolean, diffTimeZone?: boolean }) {
  11. const { t } = useTranslation()
  12. const [diffTimeZone, setDiffTimeZone] = useState(props.diffTimeZone)
  13. const [multTimeZone, setMulTimeZone] = useState(props.multiTimeZone)
  14. const scenario = useSelector((state: any) => state.scenario);
  15. useEffect(() => {
  16. // var split = new Date().toString().split(' ');
  17. // var currentTZ = split[split.length - 2];
  18. // if (props.data.fast) {
  19. // if (props.data.fast.real_start_time_zone && props.data.fast.real_start_time_zone != currentTZ) {
  20. // setDiffTimeZone(true)
  21. // return
  22. // }
  23. // if (props.data.fast.real_end_time_zone && props.data.fast.real_end_time_zone != currentTZ) {
  24. // setDiffTimeZone(true)
  25. // return
  26. // }
  27. // }
  28. // if (props.data.sleep) {
  29. // if (props.data.sleep.real_start_time_zone && props.data.sleep.real_start_time_zone != currentTZ) {
  30. // setDiffTimeZone(true)
  31. // return
  32. // }
  33. // if (props.data.sleep.real_end_time_zone && props.data.sleep.real_end_time_zone != currentTZ) {
  34. // setDiffTimeZone(true)
  35. // return
  36. // }
  37. // }
  38. // setDiffTimeZone(false)
  39. }, [props.data])
  40. function formateTime(obj: any, isEnd: boolean) {
  41. if (isEnd) {
  42. if (obj.real_end_time) {
  43. var newTimestamp = TimeFormatter.transferTimestamp(obj.real_end_time, obj.real_end_time_zone)
  44. return TimeFormatter.timelineFormatTime(newTimestamp)
  45. // return diffTimeZone ? TimeFormatter.timelineFullFormatTime(newTimestamp) : TimeFormatter.timelineFormatTime(obj.real_end_time)
  46. }
  47. else {
  48. return TimeFormatter.timelineFormatTime(obj.target_end_time)
  49. // return diffTimeZone ? TimeFormatter.timelineFullFormatTime(obj.target_end_time) : TimeFormatter.timelineFormatTime(obj.target_end_time)
  50. }
  51. }
  52. else {
  53. if (obj.real_start_time) {
  54. var newTimestamp = TimeFormatter.transferTimestamp(obj.real_start_time, obj.real_start_time_zone)
  55. return TimeFormatter.timelineFormatTime(newTimestamp)
  56. // return diffTimeZone ? TimeFormatter.timelineFullFormatTime(newTimestamp) : TimeFormatter.timelineFormatTime(obj.real_start_time)
  57. }
  58. else {
  59. return TimeFormatter.timelineFormatTime(obj.target_start_time)
  60. // return diffTimeZone ? TimeFormatter.timelineFullFormatTime(obj.target_start_time) : TimeFormatter.timelineFormatTime(obj.target_start_time)
  61. }
  62. }
  63. }
  64. function formateDate(obj: any, isEnd: boolean) {
  65. if (isEnd) {
  66. if (obj.real_end_time) {
  67. return TimeFormatter.dateDescription(obj.real_end_time, true)
  68. }
  69. else {
  70. return TimeFormatter.dateDescription(obj.target_end_time, true)
  71. }
  72. }
  73. else {
  74. if (obj.real_start_time) {
  75. return TimeFormatter.dateDescription(obj.real_start_time, true)
  76. }
  77. else {
  78. return TimeFormatter.dateDescription(obj.target_start_time, true)
  79. }
  80. }
  81. }
  82. function getWaitForStartDate(time: string) {
  83. var strTime
  84. if (scenario.name == 'SLEEP') {
  85. strTime = scenario.schedule.sleep.start_time
  86. }
  87. else {
  88. strTime = scenario.schedule.fast.start_time
  89. }
  90. var count = parseInt(strTime.split(':')[0]) * 60 + parseInt(strTime.split(':')[1])
  91. var count2 = parseInt(time.split(':')[0]) * 60 + parseInt(time.split(':')[1])
  92. if (count > count2) {
  93. return global.language == 'en' ? 'Tomorrow' : '明天'
  94. }
  95. return ''
  96. }
  97. var timelineItems: any = [];
  98. /*
  99. attention:
  100. status == 待开始时
  101. timeline的时间不以时间戳进行处理,而是以target时间字符串进行显示
  102. */
  103. if (props.data.fast && scenario.name != 'SLEEP') {
  104. var timeZone = ''
  105. if (props.data.fast.real_start_time_zone) {
  106. timeZone = ' ' + props.data.fast.real_start_time_zone
  107. }
  108. debugger
  109. timelineItems.push(
  110. {
  111. status: getStatus(true, true, props.data),
  112. title: getStatus(true, true, props.data) == 'padding' ?
  113. t('feature.track_time_duration.common.start_fast') :
  114. t('feature.track_time_duration.common.started_fasting'),
  115. content: props.data.status == 'WAIT_FOR_START' ? formateDate(props.data.fast, false) + scenario.schedule.fast.start_time : formateDate(props.data.fast, false) + formateTime(props.data.fast, false),
  116. date: props.data.status == 'WAIT_FOR_START' ? '' : multTimeZone ? timeZone : '',
  117. // (diffTimeZone ? timeZone : showDate(props.data.fast, false) ? formateDate(props.data.fast, false) : ''),
  118. color: global.fastColor ? global.fastColor : ColorType.fast
  119. }
  120. )
  121. }
  122. if (props.data.sleep && scenario.name != 'FAST') {
  123. var timeZone = ''
  124. if (props.data.sleep.real_start_time_zone) {
  125. timeZone = ' ' + props.data.sleep.real_start_time_zone
  126. }
  127. var status = getStatus(false, true, props.data)
  128. var strContent = props.data.status == 'WAIT_FOR_START' ? formateDate(props.data.sleep, false) + scenario.schedule.sleep.start_time : formateDate(props.data.sleep, false) + formateTime(props.data.sleep, false)
  129. var strDate = multTimeZone ? timeZone : ''
  130. // (diffTimeZone ? timeZone : showDate(props.data.sleep, false) ? formateDate(props.data.sleep, false) : '')
  131. timelineItems.push(
  132. {
  133. status: status,
  134. title: status == 'padding' ?
  135. t('feature.track_time_duration.common.start_sleep') :
  136. t('feature.track_time_duration.common.started_sleeping'),
  137. content: status == 'un_done' ? '' : strContent,
  138. date: status == 'un_done' ? '' : strDate,
  139. color: global.sleepColor ? global.sleepColor : ColorType.sleep
  140. }
  141. )
  142. }
  143. if (props.data.sleep && scenario.name != 'FAST') {
  144. var timeZone = ''
  145. if (props.data.sleep.real_end_time_zone) {
  146. timeZone = ' ' + props.data.sleep.real_end_time_zone
  147. }
  148. var status = getStatus(false, false, props.data)
  149. var strContent: string = props.data.status == 'WAIT_FOR_START' ? formateDate(props.data.sleep, true) + scenario.schedule.sleep.end_time : formateDate(props.data.sleep, true) + formateTime(props.data.sleep, true)
  150. var strDate = multTimeZone ? timeZone : ''
  151. // (diffTimeZone ? timeZone : showDate(props.data.sleep, true) ? formateDate(props.data.sleep, true) : '')
  152. timelineItems.push(
  153. {
  154. status: status,
  155. title: status == 'padding' ?
  156. t('feature.track_time_duration.common.end_sleep') :
  157. t('feature.track_time_duration.common.ended_sleeping'),
  158. content: status == 'un_done' ? '' : strContent,
  159. date: status == 'un_done' ? '' : strDate,
  160. color: global.sleepColor ? global.sleepColor : ColorType.sleep
  161. }
  162. )
  163. }
  164. if (props.data.fast && scenario.name != 'SLEEP') {
  165. var timeZone = ''
  166. if (props.data.fast.real_end_time_zone) {
  167. timeZone = ' ' + props.data.fast.real_end_time_zone
  168. }
  169. timelineItems.push(
  170. {
  171. status: getStatus(true, false, props.data),
  172. title: getStatus(true, false, props.data) == 'padding' ?
  173. t('feature.track_time_duration.common.end_fast') :
  174. t('feature.track_time_duration.common.ended_fasting'),
  175. content: props.data.status == 'WAIT_FOR_START' ? formateDate(props.data.fast, true) + scenario.schedule.fast.end_time : formateDate(props.data.fast, true) + formateTime(props.data.fast, true),
  176. date: multTimeZone ? timeZone : '',
  177. // (diffTimeZone ? timeZone : showDate(props.data.fast, true) ? formateDate(props.data.fast, true) : ''),
  178. color: global.fastColor ? global.fastColor : ColorType.fast
  179. }
  180. )
  181. }
  182. function getTZLocation() {
  183. if (props.data.fast) {
  184. if (props.data.fast.real_start_time_zone_id) {
  185. return props.data.fast.real_start_time_zone_id
  186. }
  187. return props.data.fast.real_start_time_zone
  188. }
  189. else {
  190. if (props.data.sleep.real_start_time_zone_id) {
  191. return props.data.sleep.real_start_time_zone_id
  192. }
  193. return props.data.sleep.real_start_time_zone
  194. }
  195. }
  196. return <View style={{ display: 'flex', flexDirection: 'column' }}>
  197. <View style={{ display: 'flex', flexDirection: 'row' }}>
  198. <Timeline items={timelineItems} title={props.title} width={468} />
  199. <View>
  200. </View>
  201. </View>
  202. {
  203. multTimeZone && <Text className="tz_note_desc">{t('feature.common.multi_tz_desc')}</Text>
  204. }
  205. {
  206. !multTimeZone && diffTimeZone && <Text className="tz_note_desc">{t('feature.common.diff_tz_desc', { location: getTZLocation() })}</Text>
  207. }
  208. </View>
  209. }