RingData.tsx 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. import { CurrentDot, RealRing, RingCommon, TargetRing } from "@/components/view/Rings"
  2. import { ColorType } from "@/context/themes/color";
  3. import { TimeFormatter } from "@/utils/time_format";
  4. const startArc = (time: number) => {
  5. var date = new Date(time);
  6. var hour = date.getHours();
  7. var minute = date.getMinutes();
  8. var second = date.getSeconds();
  9. return (hour * 3600 + minute * 60 + second) / (24 * 3600) * 2 * Math.PI - Math.PI / 2.0;
  10. }
  11. const durationArc = (start_time: number, end_time: number) => {
  12. var duration = (end_time - start_time) / 1000;
  13. return duration / (24 * 3600) * 2 * Math.PI;
  14. }
  15. export const ringWidth = 12
  16. export const smallRingRadius = 28
  17. export const bigRingRadius = 42
  18. export const thirdRingRadius = 56
  19. export const haveSmallRing = (data: any) => {
  20. if (data.scenario == 'FAST_SLEEP')
  21. return true
  22. return false
  23. }
  24. export const getCommon = (data: any, isBigRing: boolean) => {
  25. const commonBig: RingCommon = {
  26. useCase: 'Record',
  27. radius: 50,
  28. lineWidth: 8,
  29. isFast: true,
  30. status: 'WAIT_FOR_START'
  31. }
  32. const commonSmall: RingCommon = {
  33. useCase: 'Record',
  34. radius: 40,
  35. lineWidth: 8,
  36. isFast: true,
  37. status: 'WAIT_FOR_START'
  38. }
  39. if (isBigRing) {
  40. return commonBig
  41. }
  42. return commonSmall
  43. }
  44. export const getBgRing = () => {
  45. return {
  46. color: ColorType.ring
  47. }
  48. }
  49. export const getDot = (data: any, isBigRing: boolean) => {
  50. const currentDotBig: CurrentDot = {
  51. color: global.fastColor ? global.fastColor : ColorType.fast,
  52. lineWidth: 8,
  53. borderColor: 'black',
  54. offset:0
  55. }
  56. const currentDotSmall: CurrentDot = {
  57. color: global.sleepColor ? global.sleepColor : ColorType.sleep,
  58. lineWidth: 8,
  59. borderColor: 'black',
  60. offset:0
  61. }
  62. if (isBigRing) {
  63. if (data && data.scenario == 'SLEEP') {
  64. currentDotBig.color = global.sleepColor ? global.sleepColor : ColorType.sleep
  65. }
  66. return currentDotBig
  67. }
  68. else {
  69. return currentDotSmall
  70. }
  71. }
  72. export const dotIsOuterRange = (isTargetRange: boolean, scheduleData?: any, dayLightData?: any) => {
  73. // var date = new Date()
  74. // var minutes = date.getHours() * 60 + date.getMinutes()
  75. // if (isTargetRange) {
  76. // var scheduleStart = new Date(scheduleData!.target_start_time)
  77. // var scheduleEnd = new Date(scheduleData!.target_end_time)
  78. // var startMinute = scheduleStart.getHours() * 60 + scheduleStart.getMinutes()
  79. // var endMinute = scheduleEnd.getHours() * 60 + scheduleEnd.getMinutes()
  80. // if (minutes < startMinute) {
  81. // minutes += 1440
  82. // }
  83. // if (endMinute < startMinute) {
  84. // endMinute += 1440
  85. // }
  86. // if (startMinute <= minutes && endMinute > minutes) {
  87. // return false;
  88. // }
  89. // return true;
  90. // }
  91. // var startMinute = parseInt(dayLightData.sunrise.split(':')[0]) * 60 + parseInt(dayLightData.sunrise.split(':')[1])
  92. // var endMinute = parseInt(dayLightData.sunset.split(':')[0]) * 60 + parseInt(dayLightData.sunset.split(':')[1])
  93. // if (startMinute <= minutes && endMinute > minutes) {
  94. // return true;
  95. // }
  96. return false;
  97. }
  98. export const getTarget = (data: any, isBigRing: boolean) => {
  99. const targetRingBig: TargetRing = {
  100. color: '#FF0000',
  101. startArc: 0,
  102. durationArc: 0
  103. }
  104. const targetRingSmall: TargetRing = {
  105. color: '#FF0000',
  106. startArc: 0,
  107. durationArc: 0
  108. }
  109. if (isBigRing) {
  110. if (data.scenario == 'SLEEP') {
  111. targetRingBig.color = global.sleepColor ? global.sleepColor : ColorType.sleep
  112. targetRingBig.startArc = startArc(data.sleep.target_start_time)
  113. targetRingBig.durationArc = durationArc(data.sleep.target_start_time, data.sleep.target_end_time)
  114. }
  115. else {
  116. var timestamp = data.fast.target_start_time
  117. targetRingBig.color = (global.fastColor ? global.fastColor : ColorType.fast) + '66'
  118. targetRingBig.startArc = startArc(timestamp)
  119. targetRingBig.durationArc = durationArc(data.fast.target_start_time, data.fast.target_end_time)
  120. }
  121. return targetRingBig
  122. }
  123. else {
  124. var timestamp = data.sleep.target_start_time
  125. targetRingSmall.startArc = startArc(timestamp)
  126. targetRingSmall.durationArc = durationArc(data.sleep.target_start_time, data.sleep.target_end_time)
  127. return targetRingSmall
  128. }
  129. }
  130. export const getSchedule = (data: any, isFast: boolean, isBigRing: boolean, isHourMinutesFormat?: boolean) => {
  131. var detail = data;
  132. if (isHourMinutesFormat) {
  133. var obj = data.schedule
  134. if (isFast) {
  135. var startHour = parseInt(obj.fast.start_time.split(':')[0])
  136. var startM = parseInt(obj.fast.start_time.split(':')[1])
  137. var endHour = parseInt(obj.fast.end_time.split(':')[0])
  138. var endM = parseInt(obj.fast.end_time.split(':')[1])
  139. var dt1 = new Date()
  140. dt1.setHours(startHour)
  141. dt1.setMinutes(startM)
  142. var startTimestamp = dt1.getTime()
  143. var dt2 = new Date()
  144. dt2.setHours(endHour)
  145. dt2.setMinutes(endM)
  146. var endTimestamp = dt2.getTime()
  147. if (startTimestamp > endTimestamp) {
  148. endTimestamp += 24 * 3600 * 1000
  149. }
  150. detail.fast = {
  151. target_start_time: startTimestamp,
  152. target_end_time: endTimestamp
  153. }
  154. }
  155. else {
  156. var startHour = parseInt(obj.sleep.start_time.split(':')[0])
  157. var startM = parseInt(obj.sleep.start_time.split(':')[1])
  158. var endHour = parseInt(obj.sleep.end_time.split(':')[0])
  159. var endM = parseInt(obj.sleep.end_time.split(':')[1])
  160. var dt1 = new Date()
  161. dt1.setHours(startHour)
  162. dt1.setMinutes(startM)
  163. var startTimestamp = dt1.getTime()
  164. var dt2 = new Date()
  165. dt2.setHours(endHour)
  166. dt2.setMinutes(endM)
  167. var endTimestamp = dt2.getTime()
  168. if (startTimestamp > endTimestamp) {
  169. endTimestamp += 24 * 3600 * 1000
  170. }
  171. detail.sleep = {
  172. target_start_time: startTimestamp,
  173. target_end_time: endTimestamp
  174. }
  175. }
  176. }
  177. const realRingBig: RealRing = {
  178. color: global.fastColor ? global.fastColor : ColorType.fast,
  179. startArc: 0,
  180. durationArc: 0
  181. }
  182. const realRingSmall: RealRing = {
  183. color: global.sleepColor ? global.sleepColor : ColorType.sleep,
  184. startArc: 0,
  185. durationArc: 0
  186. }
  187. if (isBigRing) {
  188. if (isFast) {
  189. realRingBig.startArc = startArc(detail.fast.target_start_time)
  190. realRingBig.durationArc = durationArc(detail.fast.target_start_time, detail.fast.target_end_time)
  191. }
  192. else {
  193. realRingBig.color = global.sleepColor ? global.sleepColor : ColorType.sleep
  194. realRingBig.startArc = startArc(detail.sleep.target_start_time)
  195. realRingBig.durationArc = durationArc(detail.sleep.target_start_time, detail.sleep.target_end_time)
  196. }
  197. return realRingBig
  198. }
  199. else {
  200. realRingSmall.startArc = startArc(detail.sleep.target_start_time)
  201. realRingSmall.durationArc = durationArc(detail.sleep.target_start_time, detail.sleep.target_end_time)
  202. return realRingSmall
  203. }
  204. }
  205. //把hh:mm转换成时间戳
  206. export const timeTotimestamp = (data: any) => {
  207. var detail: any = {}
  208. var obj = data.schedule
  209. {
  210. var startHour = parseInt(obj.fast.start_time.split(':')[0])
  211. var startM = parseInt(obj.fast.start_time.split(':')[1])
  212. var endHour = parseInt(obj.fast.end_time.split(':')[0])
  213. var endM = parseInt(obj.fast.end_time.split(':')[1])
  214. var dt1 = new Date()
  215. dt1.setHours(startHour)
  216. dt1.setMinutes(startM)
  217. var startTimestamp = dt1.getTime()
  218. var dt2 = new Date()
  219. dt2.setHours(endHour)
  220. dt2.setMinutes(endM)
  221. var endTimestamp = dt2.getTime()
  222. if (startTimestamp > endTimestamp) {
  223. endTimestamp += 24 * 3600 * 1000
  224. }
  225. detail.fast = {
  226. target_start_time: startTimestamp,
  227. target_end_time: endTimestamp
  228. }
  229. }
  230. {
  231. var startHour = parseInt(obj.sleep.start_time.split(':')[0])
  232. var startM = parseInt(obj.sleep.start_time.split(':')[1])
  233. var endHour = parseInt(obj.sleep.end_time.split(':')[0])
  234. var endM = parseInt(obj.sleep.end_time.split(':')[1])
  235. var dt1 = new Date()
  236. dt1.setHours(startHour)
  237. dt1.setMinutes(startM)
  238. var startTimestamp = dt1.getTime()
  239. var dt2 = new Date()
  240. dt2.setHours(endHour)
  241. dt2.setMinutes(endM)
  242. var endTimestamp = dt2.getTime()
  243. if (startTimestamp > endTimestamp) {
  244. endTimestamp += 24 * 3600 * 1000
  245. }
  246. if (startTimestamp < detail.fast.target_start_time) {
  247. startTimestamp += 24 * 3600 * 1000
  248. endTimestamp += 24 * 3600 * 1000
  249. }
  250. detail.sleep = {
  251. target_start_time: startTimestamp,
  252. target_end_time: endTimestamp
  253. }
  254. }
  255. return detail
  256. }
  257. export const getReal = (data: any, isBigRing: boolean, isRecord: boolean) => {
  258. // console.log(data)
  259. const realRingBig: RealRing = {
  260. color: global.fastColor ? global.fastColor : ColorType.fast,
  261. startArc: 0,
  262. durationArc: 0
  263. }
  264. const realRingSmall: RealRing = {
  265. color: global.sleepColor ? global.sleepColor : ColorType.sleep,
  266. startArc: 0,
  267. durationArc: 0
  268. }
  269. if (isBigRing) {
  270. if (data.scenario == 'SLEEP') {
  271. realRingBig.color = global.sleepColor ? global.sleepColor : ColorType.sleep
  272. if (data.sleep.real_end_timezone && data.sleep.real_end_timezone.gmt && data.status == 'COMPLETED') {
  273. var timestamp = TimeFormatter.transferTimestamp(data.sleep.real_start_time, data.sleep.real_end_timezone.gmt)
  274. realRingBig.startArc = startArc(timestamp)
  275. }
  276. else {
  277. realRingBig.startArc = startArc(data.sleep.real_start_time)
  278. }
  279. realRingBig.durationArc = durationArc(data.sleep.real_start_time, isRecord ? (data.sleep.real_end_time ? data.sleep.real_end_time : new Date().getTime()) : new Date().getTime())
  280. }
  281. else {
  282. if (data.fast.real_end_timezone && data.fast.real_end_timezone.gmt && data.status == 'COMPLETED') {
  283. var timestamp = TimeFormatter.transferTimestamp(data.fast.real_start_time, data.fast.real_end_timezone.gmt)
  284. realRingBig.startArc = startArc(timestamp)
  285. }
  286. else {
  287. realRingBig.startArc = startArc(data.fast.real_start_time)
  288. }
  289. // realRingBig.startArc = startArc(data.fast.real_start_time)
  290. realRingBig.durationArc = durationArc(data.fast.real_start_time, isRecord ? (data.fast.real_end_time ? data.fast.real_end_time : new Date().getTime()) : new Date().getTime())
  291. }
  292. return realRingBig
  293. }
  294. else {
  295. if (!data.sleep) {
  296. return realRingSmall
  297. }
  298. if (data.sleep.real_end_timezone && data.sleep.real_end_timezone.gmt && data.status == 'COMPLETED') {
  299. var timestamp = TimeFormatter.transferTimestamp(data.sleep.real_start_time, data.fast.real_end_timezone.gmt ? data.fast.real_end_timezone.gmt : data.sleep.real_end_timezone.gmt)
  300. realRingSmall.startArc = startArc(timestamp)
  301. }
  302. else {
  303. realRingSmall.startArc = startArc(data.sleep.real_start_time)
  304. }
  305. // realRingSmall.startArc = startArc(data.sleep.real_start_time)
  306. realRingSmall.durationArc = durationArc(data.sleep.real_start_time, isRecord ? (data.sleep.real_end_time ? data.sleep.real_end_time : new Date().getTime()) : new Date().getTime())
  307. // if (isRecord && !isBigRing){
  308. // debugger
  309. // }
  310. return realRingSmall
  311. }
  312. }