index.uts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { OpenLocation, OpenLocationOptions, OpenLocationSuccessImpl, OpenLocationErrorCode } from "../interface.uts"
  2. import { OpenLocationFailImpl } from "../unierror.uts"
  3. export const openLocation : OpenLocation = function (options : OpenLocationOptions) {
  4. const uuid = `${Date.now()}${Math.floor(Math.random() * 1e7)}`
  5. const baseEventName = `uni_open_location_${uuid}`
  6. const readyEventName = `${baseEventName}_ready`
  7. const optionsEventName = `${baseEventName}_options`
  8. const successEventName = `${baseEventName}_success`
  9. const failEventName = `${baseEventName}_fail`
  10. const readyEventId = uni.$on(readyEventName, () => {
  11. uni.$emit(optionsEventName, JSON.parse(JSON.stringify(options)))
  12. })
  13. const successEventId = uni.$on(successEventName, () => {
  14. const res = new OpenLocationSuccessImpl()
  15. options.success?.(res)
  16. options.complete?.(res)
  17. })
  18. const failEventId = uni.$on(failEventName, (errCode : OpenLocationErrorCode) => {
  19. const res = new OpenLocationFailImpl(errCode)
  20. options.fail?.(res)
  21. options.complete?.(res)
  22. })
  23. uni.openDialogPage({
  24. url: `/uni_modules/uni-openLocation/pages/openLocation/openLocation?readyEventName=${readyEventName}&optionsEventName=${optionsEventName}&successEventName=${successEventName}&failEventName=${failEventName}`,
  25. fail(err) {
  26. const res = new OpenLocationFailImpl(4)
  27. options.fail?.(res)
  28. options.complete?.(res)
  29. uni.$off(readyEventName, readyEventId)
  30. uni.$off(successEventName, successEventId)
  31. uni.$off(failEventName, failEventId)
  32. }
  33. })
  34. };