useNativeRoute.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { miniprogramThis } from '../internals/global'
  2. /**
  3. * openType 属性可选值为 navigateTo、redirectTo、switchTab、navigateBack、reLaunch
  4. */
  5. const NATIVE_ROUTES = [
  6. 'navigateTo',
  7. 'redirectTo',
  8. 'switchTab',
  9. 'navigateBack',
  10. 'reLaunch',
  11. ]
  12. export function useNativeRoute(props, vm) {
  13. const { url, openType = 'navigateTo', delta = 1 } = props
  14. const promisify = (method, params) => {
  15. return new Promise((resolve, reject) => {
  16. miniprogramThis[method].call(miniprogramThis, {
  17. ...params,
  18. success: resolve,
  19. fail: reject,
  20. })
  21. })
  22. }
  23. if (!url) {
  24. return Promise.reject(
  25. `Invalid value of prop "url" of "${vm.is}": Expected an Non-empty String.`
  26. )
  27. } else if (!NATIVE_ROUTES.includes(openType)) {
  28. return Promise.reject(
  29. `Invalid value of prop "openType" of "${vm.is}": expected "${NATIVE_ROUTES.join(',')}", ` +
  30. `but got ${openType}.`
  31. )
  32. } else if (openType === 'navigateBack') {
  33. return promisify(openType, { delta })
  34. } else {
  35. return promisify(openType, { url })
  36. }
  37. }