SetSchedule.rn.tsx 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. import Buttons from "@/components/basic/Buttons";
  2. import { setPlan } from "@/services/trackTimeDuration";
  3. import { setScenario, setStep } from "@/store/scenario";
  4. import { View, Text, PageContainer, Image } from "@tarojs/components";
  5. import "./SetSchedule.scss";
  6. import Taro, { useDidShow, useReady } from "@tarojs/taro";
  7. import { useEffect, useRef, useState } from "react";
  8. import { useDispatch, useSelector } from "react-redux";
  9. import Footer from "@/components/layout/Footer";
  10. import PickerViews from "@/components/input/PickerViews";
  11. import { durationDatas, durationIndex, durationTime, pickerDurations } from "../hooks/Console";
  12. import { TimeFormatter } from "@/utils/time_format";
  13. import Modal from "@/components/layout/Modal";
  14. import TimePicker from "@/features/common/TimePicker";
  15. import { SetScheduleBtn } from "@/features/common/SpecBtns";
  16. import Layout from "@/components/layout/layout";
  17. import { NaviBarTitleShowType, TemplateType } from "@/utils/types";
  18. import { useTranslation } from "react-i18next";
  19. import { ColorType } from "@/context/themes/color";
  20. import TitleView from "./TitleView";
  21. import { jumpPage } from "../hooks/Common";
  22. import { kIsIOS, rpxToPx, vibrate } from "@/utils/tools";
  23. import { PixelRatio } from "react-native";
  24. import { clientId } from "@/services/user";
  25. import showAlert from "@/components/basic/Alert";
  26. import { OneSignal } from 'react-native-onesignal';
  27. let useNavigation;
  28. // let JPush;
  29. let Linking;
  30. let checkNotification, uploadPermissions,PushNotification;
  31. if (process.env.TARO_ENV == 'rn') {
  32. useNavigation = require("@react-navigation/native").useNavigation
  33. Linking = require('react-native').Linking;
  34. // JPush = require('jpush-react-native').default;
  35. checkNotification = require('@/utils/native_permission_check').checkNotification;
  36. uploadPermissions = require('@/utils/native_permission_check').uploadPermissions;
  37. PushNotification = require('react-native-push-notification')
  38. }
  39. export default function Component() {
  40. const isFastFirst = true;
  41. const { t } = useTranslation()
  42. const dispatch = useDispatch();
  43. const canvasRef = useRef(null);
  44. const [scenario] = useState(useSelector((state: any) => state.scenario))
  45. // const scenario = useSelector((state: any) => state.scenario);
  46. const common = useSelector((state: any) => state.common);
  47. const [isOpen, setIsOpen] = useState(false)
  48. const [isTimeOpen, setIsTimeOpen] = useState(false)
  49. const [btnDisable, setBtnDisable] = useState(false)
  50. const pickerRef = useRef<any>(null);
  51. // const [count,setCount] = useState(0)
  52. const [beginChange, setBeginChange] = useState(true)
  53. const [operateType, setOperateType] = useState(0)
  54. const [isModalTimePicker, setIsModalTimePicker] = useState(false)
  55. let navigation;
  56. if (useNavigation) {
  57. navigation = useNavigation()
  58. }
  59. var scheduleObj: { start_time: any; end_time: any; };
  60. if (scenario.name == 'FAST') {
  61. scheduleObj = scenario.schedule.fast
  62. }
  63. else if (scenario.name == 'SLEEP') {
  64. scheduleObj = scenario.schedule.sleep
  65. }
  66. else {
  67. if (scenario.step == 'fast') {
  68. scheduleObj = scenario.schedule.fast
  69. }
  70. else {
  71. scheduleObj = scenario.schedule.sleep
  72. }
  73. }
  74. const [startTime, setStartTime] = useState(scheduleObj.start_time)
  75. const [endTime, setEndTime] = useState(scheduleObj.end_time)
  76. global.startTime = startTime
  77. global.endTime = endTime
  78. const [pickerValue, setPickerValue] = useState(durationIndex(scheduleObj.start_time, scheduleObj.end_time, common))
  79. const [hours, setHours] = useState(durationTime(scheduleObj.start_time, scheduleObj.end_time)[0])
  80. const [minutes, setMinutes] = useState(durationTime(scheduleObj.start_time, scheduleObj.end_time)[1])
  81. const [chooseStart, setChooseStart] = useState(true)
  82. const [count, setCount] = useState(0)
  83. const [authStatus, setAuthStatus] = useState('')
  84. useEffect(() => {
  85. if (global.schedule_fast && scenario.step == 'fast') {
  86. scheduleObj = global.schedule_fast
  87. }
  88. if (global.schedule_sleep && scenario.step == 'sleep') {
  89. scheduleObj = global.schedule_sleep
  90. }
  91. setStartTime(scheduleObj.start_time)
  92. setEndTime(scheduleObj.end_time)
  93. setPickerValue(durationIndex(scheduleObj.start_time, scheduleObj.end_time, common))
  94. setHours(durationTime(scheduleObj.start_time, scheduleObj.end_time)[0])
  95. setMinutes(durationTime(scheduleObj.start_time, scheduleObj.end_time)[1])
  96. if (kIsIOS) {
  97. var Jto = require('react-native').NativeModules.NativeBridge;
  98. Jto.getNotificationAuthStatus()
  99. require('react-native').NativeAppEventEmitter.addListener('notificationResult', (data) => {
  100. setAuthStatus(data)
  101. global.notification = data
  102. uploadPermissions()
  103. })
  104. require('react-native').NativeAppEventEmitter.addListener('operateNotificationResult', (data) => {
  105. global.notification = data
  106. navigation.popToTop()
  107. uploadPermissions()
  108. })
  109. }
  110. else {
  111. OneSignal.Notifications.canRequestPermission().then((status) => {
  112. if (status) {
  113. OneSignal.Notifications.getPermissionAsync().then((res) => {
  114. if (res) {
  115. global.notification = 'authorized'
  116. uploadPermissions()
  117. }
  118. else {
  119. global.notification = 'denied'
  120. uploadPermissions()
  121. }
  122. })
  123. }
  124. else {
  125. global.notification = 'not_determined'
  126. uploadPermissions()
  127. }
  128. })
  129. }
  130. }, [])
  131. useEffect(() => {
  132. if (isOpen || isTimeOpen) {
  133. global.disableCanvasGesture = true
  134. }
  135. else {
  136. global.disableCanvasGesture = false
  137. }
  138. }, [isOpen, isTimeOpen])
  139. useDidShow(() => {
  140. setCount(count + 1)
  141. })
  142. function checkPermission() {
  143. start()
  144. // const test = require('@/utils/push').default
  145. // test()
  146. }
  147. function start() {
  148. if (scenario.name == 'FAST' || scenario.name == 'SLEEP') {
  149. setBtnDisable(true)
  150. setPlan({
  151. scenario: scenario.name,
  152. schedule: scenario.name == 'FAST' ? {
  153. fast: {
  154. start_time: startTime,
  155. end_time: endTime,
  156. }
  157. } : {
  158. sleep: {
  159. start_time: startTime,
  160. end_time: endTime,
  161. }
  162. }
  163. }).then(res => {
  164. setBtnDisable(false)
  165. if (global.checkData) {
  166. global.checkData()
  167. }
  168. if (global.indexPageRefresh) {
  169. global.indexPageRefresh()
  170. }
  171. // if (process.env.TARO_ENV == 'weapp') {
  172. // Taro.navigateBack({ delta: 3 })
  173. // }
  174. // else {
  175. // navigation.popToTop()
  176. // }
  177. // setTimeout(() => {
  178. popScheduleAlert(scenario, startTime)
  179. // }, 1000)
  180. }).catch(e => {
  181. setBtnDisable(false)
  182. })
  183. }
  184. else {
  185. if ((scenario.step == 'fast' && isFastFirst) || (scenario.step == 'sleep' && !isFastFirst)) {
  186. var obj = JSON.parse(JSON.stringify(scenario))
  187. if (isFastFirst) {
  188. obj.schedule.fast = {
  189. start_time: startTime,
  190. end_time: endTime,
  191. }
  192. dispatch(setStep('sleep'))
  193. dispatch(setScenario(obj))
  194. }
  195. else {
  196. obj.schedule.sleep = {
  197. start_time: startTime,
  198. end_time: endTime,
  199. }
  200. dispatch(setStep('fast'))
  201. dispatch(setScenario(obj))
  202. }
  203. saveTempCache(startTime, endTime)
  204. jumpPage('/pages/clock/SetSchedule', 'SetSchedule', navigation)
  205. }
  206. else {
  207. commit()
  208. }
  209. }
  210. }
  211. function saveTempCache(strStart, strEnd) {
  212. if (scenario.step == 'fast') {
  213. global.schedule_fast = {
  214. start_time: strStart,
  215. end_time: strEnd,
  216. }
  217. }
  218. if (scenario.step == 'sleep') {
  219. global.schedule_sleep = {
  220. start_time: strStart,
  221. end_time: strEnd,
  222. }
  223. }
  224. }
  225. function commit() {
  226. setBtnDisable(true)
  227. setPlan({
  228. scenario: scenario.name,
  229. schedule: {
  230. fast: {
  231. start_time: isFastFirst ? scenario.schedule.fast.start_time : startTime,
  232. end_time: isFastFirst ? scenario.schedule.fast.end_time : endTime,
  233. }, sleep: {
  234. start_time: !isFastFirst ? scenario.schedule.sleep.start_time : startTime,
  235. end_time: !isFastFirst ? scenario.schedule.sleep.end_time : endTime,
  236. }
  237. }
  238. }).then(res => {
  239. setBtnDisable(false)
  240. dispatch(setStep('fast'))
  241. if (global.checkData) {
  242. global.checkData()
  243. }
  244. if (global.indexPageRefresh) {
  245. global.indexPageRefresh()
  246. }
  247. // if (process.env.TARO_ENV == 'weapp') {
  248. // Taro.navigateBack({ delta: 4 })
  249. // }
  250. // else {
  251. // navigation.popToTop()
  252. // }
  253. // setTimeout(() => {
  254. popMixScheduleAlert(scenario.schedule.fast.start_time, startTime)
  255. // }, 1000)
  256. }).catch(e => {
  257. setBtnDisable(false)
  258. })
  259. }
  260. function popScheduleAlert(scenario, startTime) {
  261. PushNotification.checkPermissions((res)=>{
  262. //允许授权
  263. if (res.authorizationStatus == 2){
  264. showAlert({
  265. title: t('feature.track_time_duration.reminders.schedule_title'),
  266. content: scenario.name == 'FAST' ?
  267. t('feature.track_time_duration.reminders.enable_schedule_fast_content', { time: startTime }) :
  268. t('feature.track_time_duration.reminders.enable_schedule_sleep_content', { time: startTime }),
  269. showCancel: false,
  270. confirmText: t('feature.track_time_duration.reminders.ok'),
  271. cancel: () => {
  272. navigation.popToTop()
  273. },
  274. confirm: () => {
  275. navigation.popToTop()
  276. },
  277. })
  278. }
  279. else {
  280. showAlert({
  281. title: t('feature.track_time_duration.reminders.schedule_title'),
  282. content: scenario.name == 'FAST' ?
  283. t('feature.track_time_duration.reminders.schedule_fast_content', { time: startTime }) :
  284. t('feature.track_time_duration.reminders.schedule_sleep_content', { time: startTime }),
  285. cancelText: t('feature.track_time_duration.reminders.later'),
  286. confirmText: t('feature.track_time_duration.reminders.open'),
  287. showCancel: true,
  288. cancel: () => {
  289. navigation.popToTop()
  290. },
  291. confirm: () => {
  292. if (authStatus != 'not_determined') {
  293. navigation.popToTop()
  294. }
  295. checkNotification()
  296. // Linking.openURL('app-settings:notifications')
  297. }
  298. })
  299. }
  300. })
  301. }
  302. function popMixScheduleAlert(time1, time2) {
  303. console.log(time1, time2)
  304. PushNotification.checkPermissions((res)=>{
  305. //允许授权
  306. if (res.authorizationStatus == 2){
  307. showAlert({
  308. title: t('feature.track_time_duration.reminders.schedule_title'),
  309. content: t('feature.track_time_duration.reminders.enable_schedule_mix_content', { time1: time1, time2: time2 }),
  310. showCancel: false,
  311. confirmText: t('feature.track_time_duration.reminders.ok'),
  312. cancel: () => {
  313. navigation.popToTop()
  314. },
  315. confirm: () => {
  316. navigation.popToTop()
  317. },
  318. })
  319. }
  320. else {
  321. showAlert({
  322. title: t('feature.track_time_duration.reminders.schedule_title'),
  323. content:
  324. t('feature.track_time_duration.reminders.schedule_mix_content'),
  325. cancelText: t('feature.track_time_duration.reminders.later'),
  326. confirmText: t('feature.track_time_duration.reminders.open'),
  327. showCancel: true,
  328. cancel: () => {
  329. navigation.popToTop()
  330. },
  331. confirm: () => {
  332. if (authStatus != 'not_determined') {
  333. navigation.popToTop()
  334. }
  335. checkNotification()
  336. // Linking.openURL('app-settings:notifications')
  337. }
  338. })
  339. }
  340. })
  341. }
  342. function onStartTimeChange(e: string) {
  343. setIsTimeOpen(false)
  344. setBeginChange(true)
  345. setStartTime(e)
  346. setPickerValue(durationIndex(e, endTime, common))
  347. setHours(durationTime(e, endTime)[0])
  348. setMinutes(durationTime(e, endTime)[1])
  349. saveTempCache(e, endTime);
  350. if (global.updateDial)
  351. global.updateDial(e, endTime)
  352. }
  353. function onEndTimeChange(e: string) {
  354. setIsTimeOpen(false)
  355. setBeginChange(false)
  356. setEndTime(e)
  357. setPickerValue(durationIndex(startTime, e, common))
  358. setHours(durationTime(startTime, e)[0])
  359. setMinutes(durationTime(startTime, e)[1])
  360. saveTempCache(startTime, e);
  361. if (global.updateDial)
  362. global.updateDial(startTime, e)
  363. }
  364. function showPicker() {
  365. setIsOpen(true)
  366. }
  367. function durationChange(e) {
  368. var count = (e[0] + common.duration.min) * 60 + e[1] * common.duration.step
  369. var h = parseInt(count / 60)
  370. var m = count % 60
  371. setHours(h)
  372. setMinutes(m)
  373. setPickerValue(e)
  374. setIsOpen(false)
  375. if (beginChange) {
  376. var strEnd = TimeFormatter.calculateTimeByTimeRange(count, startTime, true)
  377. setEndTime(strEnd);
  378. saveTempCache(startTime, strEnd)
  379. if (global.updateDial)
  380. global.updateDial(startTime, strEnd)
  381. }
  382. else {
  383. var strStart = TimeFormatter.calculateTimeByTimeRange(count, endTime, false)
  384. setStartTime(strStart);
  385. saveTempCache(strStart, endTime)
  386. if (global.updateDial)
  387. global.updateDial(strStart, endTime)
  388. }
  389. }
  390. global.startDuration = (type) => {
  391. setOperateType(type)
  392. }
  393. global.updateDuration = (start, end) => {
  394. var startCount = parseInt(start.split(':')[0]) * 60 + parseInt(start.split(':')[1])
  395. var endCount = parseInt(end.split(':')[0]) * 60 + parseInt(end.split(':')[1])
  396. if (operateType == 1 && startCount % 30 == 0) {
  397. vibrate()
  398. }
  399. else if (operateType == 2 && endCount % 30 == 0) {
  400. vibrate()
  401. }
  402. else if (operateType == 3 && (startCount % 30 == 0 || endCount % 30 == 0)) {
  403. vibrate()
  404. }
  405. setStartTime(start)
  406. setEndTime(end)
  407. setPickerValue(durationIndex(start, end, common))
  408. setHours(durationTime(start, end)[0])
  409. setMinutes(durationTime(start, end)[1])
  410. saveTempCache(start, end)
  411. }
  412. global.endDuration = () => {
  413. setOperateType(0)
  414. }
  415. function layoutContent() {
  416. return <PickerViews ref={pickerRef}
  417. onChange={durationChange}
  418. items={durationDatas(common)}
  419. value={pickerValue} height={200}
  420. title={scenario.step == 'fast' ?
  421. t('feature.track_time_duration.dial.picker_fast_schedule_duration') :
  422. t('feature.track_time_duration.dial.picker_sleep_schedule_duration')}
  423. themeColor={scenario.step == 'fast' ? global.fastColor ? global.fastColor : ColorType.fast : global.sleepColor ? global.sleepColor : ColorType.sleep}
  424. showBtns={true} onCancel={() => { setIsOpen(false); }} />
  425. }
  426. function pickerTitle() {
  427. if (scenario.step == 'fast') {
  428. if (chooseStart) {
  429. return t('feature.track_time_duration.dial.picker_fast_schedule_start_time');
  430. }
  431. return t('feature.track_time_duration.dial.picker_fast_schedule_end_time');
  432. }
  433. else {
  434. if (chooseStart) {
  435. return t('feature.track_time_duration.dial.picker_sleep_schedule_start_time');
  436. }
  437. return t('feature.track_time_duration.dial.picker_sleep_schedule_end_time');
  438. }
  439. }
  440. function timeContent() {
  441. return <TimePicker time={chooseStart ? startTime : endTime}
  442. color={scenario.step == 'fast' ? global.fastColor ? global.fastColor : ColorType.fast : global.sleepColor ? global.sleepColor : ColorType.sleep}
  443. title={pickerTitle()}
  444. confirm={chooseStart ? onStartTimeChange : onEndTimeChange}
  445. cancel={() => { setIsTimeOpen(false) }} />
  446. }
  447. function getTargetDesc() {
  448. var count = 24 * 60 - (hours * 60 + minutes)
  449. var leftHours = Math.floor(count / 60)
  450. var leftMinutes = count % 60
  451. return scenario.step == 'fast' ? t('page.set_schedule.fast_target_desc', {
  452. target_time: (hours > 0 ? hours + TimeFormatter.getHoursUnit(hours) : '') + (minutes > 0 ? minutes + TimeFormatter.getMinutesUnit(minutes) : ''),
  453. left_time: (leftHours > 0 ? leftHours + TimeFormatter.getHoursUnit(leftHours) : '') + (leftMinutes > 0 ? leftMinutes + TimeFormatter.getMinutesUnit(leftMinutes) : '')
  454. }) :
  455. t('page.set_schedule.sleep_target_desc', {
  456. target_time: (hours > 0 ? hours + TimeFormatter.getHoursUnit(hours) : '') + (minutes > 0 ? minutes + TimeFormatter.getMinutesUnit(minutes) : ''),
  457. left_time: (leftHours > 0 ? leftHours + TimeFormatter.getHoursUnit(leftHours) : '') + (leftMinutes > 0 ? leftMinutes + TimeFormatter.getMinutesUnit(leftMinutes) : '')
  458. })
  459. }
  460. function detail() {
  461. var isNextDay: boolean = parseInt(startTime.split(':')[0]) * 60 + parseInt(startTime.split(':')[1]) > parseInt(endTime.split(':')[0]) * 60 + parseInt(endTime.split(':')[1])
  462. return <View style={{ height: Taro.getSystemInfoSync().screenHeight - 200, flexDirection: 'column', display: 'flex' }}>
  463. {/* <Text className="subtitle">{t('page.set_schedule.fast_subtitle')}</Text> */}
  464. <TitleView title={scenario.step == 'fast' ? t('page.set_schedule.fast_title') : t('page.set_schedule.sleep_title')}
  465. subTitle={t('page.set_schedule.fast_subtitle')}
  466. titleColor={scenario.step == 'fast' ? global.fastColor ? global.fastColor : ColorType.fast : global.sleepColor ? global.sleepColor : ColorType.sleep}
  467. />
  468. <View style={{ color: '#fff', marginTop: rpxToPx(64) }}>
  469. <Text className="cell_header">{scenario.step == 'fast' ? t('page.set_schedule.fast_target') : t('page.set_schedule.sleep_target')}</Text>
  470. <View className="cell_full" style={{
  471. marginLeft: rpxToPx(46),
  472. marginRight: rpxToPx(46),
  473. paddingLeft: rpxToPx(40),
  474. paddingRight: rpxToPx(40),
  475. }} onClick={() => { setIsModalTimePicker(false); setIsOpen(true) }}>
  476. <Text className="cell_title">{t('feature.track_time_duration.dial.duration')}</Text>
  477. <Text className="cell_value" style={{ color: scenario.step == 'fast' ? ColorType.fast : ColorType.sleep }}>{hours > 0 ? hours + TimeFormatter.getHoursUnit(hours) : ''}{minutes > 0 ? minutes + TimeFormatter.getMinutesUnit(minutes) : ''}</Text>
  478. <Image className="cell_arrow" src={require('@/assets/images/arrow3.png')} />
  479. </View>
  480. <Text className="cell_footer">{getTargetDesc()}</Text>
  481. <View style={{ height: rpxToPx(60) }} />
  482. <Text className="cell_header">{scenario.step == 'fast' ? t('page.set_schedule.fast_schedule') : t('page.set_schedule.sleep_schedule')}</Text>
  483. <View className="cell_top" onClick={() => {
  484. setIsModalTimePicker(true)
  485. setChooseStart(true)
  486. setIsTimeOpen(true)
  487. }}>
  488. <Text className="cell_title">{t('feature.track_time_duration.dial.start_time')}</Text>
  489. <Text className="cell_value" style={{ color: scenario.step == 'fast' ? ColorType.fast : ColorType.sleep }}>{startTime}</Text>
  490. <Image className="cell_arrow" src={require('@/assets/images/arrow3.png')} />
  491. <View className="cell_line" style={{ height: 1 / PixelRatio.get() }} />
  492. </View>
  493. <View className="cell_bottom" onClick={() => {
  494. setIsModalTimePicker(true)
  495. setChooseStart(false)
  496. setIsTimeOpen(true)
  497. }}>
  498. <Text className="cell_title">{t('feature.track_time_duration.dial.end_time')}</Text>
  499. {
  500. isNextDay &&
  501. <Text className="next_day">{t('page.set_schedule.next_day')}</Text>
  502. }
  503. <Text className="cell_value" style={{ color: scenario.step == 'fast' ? ColorType.fast : ColorType.sleep }}>{endTime}</Text>
  504. <Image className="cell_arrow" src={require('@/assets/images/arrow3.png')} />
  505. </View>
  506. <Text className="cell_footer">{scenario.step == 'fast' ? t('page.set_schedule.fast_schedule_desc', {
  507. start_time: startTime, end_time: endTime, the_next_day:
  508. isNextDay ? t('page.set_schedule.the_next_day') : ''
  509. }) :
  510. t('page.set_schedule.sleep_schedule_desc', {
  511. start_time: startTime, end_time: endTime, the_next_day:
  512. isNextDay ? t('page.set_schedule.the_next_day') : ''
  513. })}</Text>
  514. {/* <Text className="cell_footer">计划每日18:00开始断食,次日10:00结束断食。</Text> */}
  515. </View>
  516. <View style={{ flex: 1 }} />
  517. <Footer>
  518. <SetScheduleBtn title={(scenario.step == 'fast' && scenario.name == 'FAST_SLEEP') ? t('feature.common.btn_set_and_next') : t('feature.common.btn_set_and_done')}
  519. lowLight={operateType != 0}
  520. isFast={scenario.step == 'fast'}
  521. disable={btnDisable}
  522. onClick={() => checkPermission()} />
  523. </Footer>
  524. {
  525. (isOpen || isTimeOpen) && <PageContainer style={{ backgroundColor: '#1c1c1c' }}
  526. overlayStyle={{ backgroundColor: 'rgba(0,0,0,0.9)' }}
  527. customStyle={{ backgroundColor: '#1c1c1c' }}
  528. closeOnSlideDown={false}
  529. onAfterLeave={() => { setIsOpen(false); setIsTimeOpen(false) }}
  530. show={isOpen || isTimeOpen} round={true} overlay={true} position='bottom'
  531. >
  532. {
  533. isTimeOpen ? timeContent() : layoutContent()
  534. }
  535. </PageContainer>
  536. }
  537. {/* <PageContainer style={{ backgroundColor: '#1c1c1c' }}
  538. overlayStyle='background-color:rgba(0,0,0,0.9)'
  539. custom-style='background-color:#1c1c1c'
  540. closeOnSlideDown={false}
  541. onAfterLeave={() => { setIsOpen(false); setIsTimeOpen(false) }}
  542. show={isOpen || isTimeOpen} round={true} overlay={true} position='bottom'
  543. >
  544. {
  545. isModalTimePicker?timeContent():layoutContent()
  546. }
  547. </PageContainer> */}
  548. {/* {
  549. isOpen && <Modal children={layoutContent()} dismiss={() => setIsOpen(false)} confirm={() => {
  550. setIsOpen(false)
  551. durationChange(pickerRef.current.getConfirmData())
  552. }} />
  553. }
  554. {
  555. isTimeOpen && <Modal children={timeContent()} dismiss={() => setIsTimeOpen(false)} confirm={() => {
  556. setIsTimeOpen(false)
  557. }} />
  558. } */}
  559. </View>
  560. }
  561. return <Layout
  562. titleColor={scenario.step == 'fast' ? global.fastColor ? global.fastColor : ColorType.fast : global.sleepColor ? global.sleepColor : ColorType.sleep}
  563. title={scenario.step == 'fast' ? t('page.set_schedule.fast_title') : t('page.set_schedule.sleep_title')}
  564. titleShowStyle={NaviBarTitleShowType.scrollToShow} type={TemplateType.customHeader}>
  565. {
  566. detail()
  567. }
  568. </Layout>;
  569. }