@heycar/heycars-map 1.0.0-coordinate7 → 2.0.0-switchMap10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +45 -52
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/v2/App.js +8 -4
  5. package/dist/v2/Demo/DemoBusinessQuoting.js +6 -12
  6. package/dist/v2/Demo/DemoBusinessRecomendPlace.js +3 -8
  7. package/dist/v2/Demo/DemoBusinessReselectPlace.js +2 -7
  8. package/dist/v2/Demo/DemoBusinessTaxiEnd.d.ts +1 -3
  9. package/dist/v2/Demo/DemoBusinessTaxiEnd.js +2 -18
  10. package/dist/v2/Demo/DemoBusinessTaxiService.d.ts +1 -2392
  11. package/dist/v2/Demo/DemoBusinessTaxiService.js +6 -19
  12. package/dist/v2/api/cdn.d.ts +1 -0
  13. package/dist/v2/api/cdn.js +2 -0
  14. package/dist/v2/api/googleSnapRoad.js +7 -2
  15. package/dist/v2/api/pingConnection.d.ts +9 -0
  16. package/dist/v2/api/pingConnection.js +111 -0
  17. package/dist/v2/business-components/BusinessQuotingMap/BusinessQuotingMap.d.ts +5 -5
  18. package/dist/v2/business-components/BusinessQuotingMap/BusinessQuotingMap.js +46 -12
  19. package/dist/v2/business-components/BusinessQuotingMap/index.js +3 -2
  20. package/dist/v2/business-components/BusinessRecomendPlaceMap/BusinessRecomendPlaceMap.d.ts +2 -3
  21. package/dist/v2/business-components/BusinessRecomendPlaceMap/BusinessRecomendPlaceMap.js +7 -4
  22. package/dist/v2/business-components/BusinessRecomendPlaceMap/index.js +4 -3
  23. package/dist/v2/business-components/BusinessReselectPlaceMap/BusinessReselectPlaceMap.d.ts +3 -2
  24. package/dist/v2/business-components/BusinessReselectPlaceMap/BusinessReselectPlaceMap.js +60 -24
  25. package/dist/v2/business-components/BusinessReselectPlaceMap/index.js +3 -2
  26. package/dist/v2/business-components/BusinessTaxiEndMap/BusinessTaxiEndMap.d.ts +2 -3
  27. package/dist/v2/business-components/BusinessTaxiEndMap/BusinessTaxiEndMap.js +22 -8
  28. package/dist/v2/business-components/BusinessTaxiEndMap/index.js +3 -2
  29. package/dist/v2/business-components/BusinessTaxiServiceMap/BusinessTaxiServiceMap.d.ts +5 -5
  30. package/dist/v2/business-components/BusinessTaxiServiceMap/BusinessTaxiServiceMap.js +52 -21
  31. package/dist/v2/business-components/BusinessTaxiServiceMap/index.js +3 -2
  32. package/dist/v2/chunks/{BusinessRecomendPlaceMap.87ea3b2f.js → BusinessRecomendPlaceMap.b4d45108.js} +65 -30
  33. package/dist/v2/chunks/{Loading.fc6e75d0.js → Loading.492acbc2.js} +30 -2
  34. package/dist/v2/components/AmapMarker/AmapMarker.js +2 -1
  35. package/dist/v2/components/GmapAdvancedMarkerElement/GmapAdvancedMarkerElement.js +1 -1
  36. package/dist/v2/components/Loading/Loading.css.d.ts +5 -0
  37. package/dist/v2/components/Loading/Loading.d.ts +6 -0
  38. package/dist/v2/components/Loading/Loading.js +4 -2
  39. package/dist/v2/components/Loading/index.js +3 -2
  40. package/dist/v2/components/MapProvider/MapProvider.d.ts +2 -2
  41. package/dist/v2/components/MapProvider/MapProvider.js +24 -13
  42. package/dist/v2/css/Loading-49e58ced.css +46 -0
  43. package/dist/v2/demi-polyfill/demi-polyfill.d.ts +1 -0
  44. package/dist/v2/hooks/useDrivingRoute.js +4 -0
  45. package/dist/v2/hooks/useMapGCJ02.js +4 -37
  46. package/dist/v2/hooks/useMapGeometry.d.ts +1 -3
  47. package/dist/v2/hooks/useMapGeometry.js +4 -4
  48. package/dist/v2/hooks/useMapGraspRoad.js +1 -2
  49. package/dist/v2/hooks/useMapInChina.d.ts +3 -15
  50. package/dist/v2/hooks/useMapInChina.js +11 -16
  51. package/dist/v2/hooks/useMapLoader.d.ts +18 -10
  52. package/dist/v2/hooks/useMapLoader.js +159 -82
  53. package/dist/v2/hooks/useMapPlace.d.ts +1 -0
  54. package/dist/v2/hooks/useMapPlace.js +52 -44
  55. package/dist/v2/hooks/useMapRecomendPlace.d.ts +1 -0
  56. package/dist/v2/hooks/useMapRecomendPlace.js +75 -67
  57. package/dist/v2/hooks/useMapSupplier.d.ts +8 -0
  58. package/dist/v2/hooks/useMapSupplier.js +17 -0
  59. package/dist/v2/hooks/usePingConnection.d.ts +10 -0
  60. package/dist/v2/hooks/usePingConnection.js +26 -0
  61. package/dist/v2/hooks-business/useBusinessAlarm.d.ts +3 -0
  62. package/dist/v2/hooks-business/useBusinessQuotingMap.d.ts +7 -2393
  63. package/dist/v2/hooks-business/useBusinessQuotingMap.js +10 -10
  64. package/dist/v2/hooks-business/useBusinessRecomendPlaceMap.d.ts +8 -17
  65. package/dist/v2/hooks-business/useBusinessRecomendPlaceMap.js +8 -34
  66. package/dist/v2/hooks-business/useBusinessReselectPlaceMap.d.ts +4 -13
  67. package/dist/v2/hooks-business/useBusinessTaxiServiceMap.d.ts +5 -2393
  68. package/dist/v2/hooks-business/useBusinessTaxiServiceMap.js +5 -10
  69. package/dist/v2/index.js +1 -1
  70. package/dist/v2/types/global.d.ts +3 -0
  71. package/dist/v2/types/interface.d.ts +1 -1
  72. package/dist/v2/utils/ManualAbortError.d.ts +3 -0
  73. package/dist/v2/utils/ManualAbortError.js +14 -0
  74. package/dist/v2/utils/compare.d.ts +4 -0
  75. package/dist/v2/utils/compare.js +6 -0
  76. package/dist/v2/utils/helper.d.ts +6 -0
  77. package/dist/v2/utils/helper.js +43 -0
  78. package/dist/v2/utils/log.js +1 -1
  79. package/dist/v2/utils/patchGoogleMapLoader.d.ts +2 -0
  80. package/dist/v2/utils/patchGoogleMapLoader.js +64 -0
  81. package/dist/v3/App.js +8 -4
  82. package/dist/v3/Demo/DemoBusinessQuoting.js +7 -13
  83. package/dist/v3/Demo/DemoBusinessRecomendPlace.js +3 -8
  84. package/dist/v3/Demo/DemoBusinessReselectPlace.js +2 -7
  85. package/dist/v3/Demo/DemoBusinessTaxiEnd.d.ts +1 -3
  86. package/dist/v3/Demo/DemoBusinessTaxiEnd.js +3 -17
  87. package/dist/v3/Demo/DemoBusinessTaxiService.d.ts +1 -2392
  88. package/dist/v3/Demo/DemoBusinessTaxiService.js +6 -17
  89. package/dist/v3/api/cdn.d.ts +1 -0
  90. package/dist/v3/api/cdn.js +2 -0
  91. package/dist/v3/api/googleSnapRoad.js +7 -2
  92. package/dist/v3/api/pingConnection.d.ts +9 -0
  93. package/dist/v3/api/pingConnection.js +111 -0
  94. package/dist/v3/business-components/BusinessQuotingMap/BusinessQuotingMap.d.ts +16 -7
  95. package/dist/v3/business-components/BusinessQuotingMap/BusinessQuotingMap.js +46 -12
  96. package/dist/v3/business-components/BusinessQuotingMap/index.js +3 -2
  97. package/dist/v3/business-components/BusinessRecomendPlaceMap/BusinessRecomendPlaceMap.d.ts +10 -3
  98. package/dist/v3/business-components/BusinessRecomendPlaceMap/BusinessRecomendPlaceMap.js +7 -4
  99. package/dist/v3/business-components/BusinessRecomendPlaceMap/index.js +4 -3
  100. package/dist/v3/business-components/BusinessReselectPlaceMap/BusinessReselectPlaceMap.d.ts +10 -2
  101. package/dist/v3/business-components/BusinessReselectPlaceMap/BusinessReselectPlaceMap.js +60 -24
  102. package/dist/v3/business-components/BusinessReselectPlaceMap/index.js +3 -2
  103. package/dist/v3/business-components/BusinessTaxiEndMap/BusinessTaxiEndMap.d.ts +4 -3
  104. package/dist/v3/business-components/BusinessTaxiEndMap/BusinessTaxiEndMap.js +22 -8
  105. package/dist/v3/business-components/BusinessTaxiEndMap/index.js +3 -2
  106. package/dist/v3/business-components/BusinessTaxiServiceMap/BusinessTaxiServiceMap.d.ts +19 -7
  107. package/dist/v3/business-components/BusinessTaxiServiceMap/BusinessTaxiServiceMap.js +52 -21
  108. package/dist/v3/business-components/BusinessTaxiServiceMap/index.js +3 -2
  109. package/dist/v3/chunks/{BusinessRecomendPlaceMap.57b15c64.js → BusinessRecomendPlaceMap.6ba5dbb1.js} +65 -30
  110. package/dist/v3/chunks/{Loading.a8e2f26a.js → Loading.21d8e759.js} +26 -2
  111. package/dist/v3/components/AmapMarker/AmapMarker.js +2 -1
  112. package/dist/v3/components/GmapAdvancedMarkerElement/GmapAdvancedMarkerElement.js +1 -1
  113. package/dist/v3/components/Loading/Loading.css.d.ts +5 -0
  114. package/dist/v3/components/Loading/Loading.d.ts +8 -0
  115. package/dist/v3/components/Loading/Loading.js +4 -2
  116. package/dist/v3/components/Loading/index.js +3 -2
  117. package/dist/v3/components/MapProvider/MapProvider.d.ts +6 -3
  118. package/dist/v3/components/MapProvider/MapProvider.js +22 -13
  119. package/dist/v3/css/Loading-49e58ced.css +46 -0
  120. package/dist/v3/demi-polyfill/demi-polyfill.d.ts +1 -0
  121. package/dist/v3/hooks/useDrivingRoute.js +4 -0
  122. package/dist/v3/hooks/useMapGCJ02.js +4 -37
  123. package/dist/v3/hooks/useMapGeometry.d.ts +1 -3
  124. package/dist/v3/hooks/useMapGeometry.js +4 -4
  125. package/dist/v3/hooks/useMapGraspRoad.js +1 -2
  126. package/dist/v3/hooks/useMapInChina.d.ts +3 -15
  127. package/dist/v3/hooks/useMapInChina.js +11 -16
  128. package/dist/v3/hooks/useMapLoader.d.ts +18 -10
  129. package/dist/v3/hooks/useMapLoader.js +159 -82
  130. package/dist/v3/hooks/useMapPlace.d.ts +1 -0
  131. package/dist/v3/hooks/useMapPlace.js +52 -44
  132. package/dist/v3/hooks/useMapRecomendPlace.d.ts +1 -0
  133. package/dist/v3/hooks/useMapRecomendPlace.js +75 -67
  134. package/dist/v3/hooks/useMapSupplier.d.ts +8 -0
  135. package/dist/v3/hooks/useMapSupplier.js +17 -0
  136. package/dist/v3/hooks/usePingConnection.d.ts +10 -0
  137. package/dist/v3/hooks/usePingConnection.js +26 -0
  138. package/dist/v3/hooks-business/useBusinessAlarm.d.ts +3 -0
  139. package/dist/v3/hooks-business/useBusinessQuotingMap.d.ts +7 -2393
  140. package/dist/v3/hooks-business/useBusinessQuotingMap.js +10 -10
  141. package/dist/v3/hooks-business/useBusinessRecomendPlaceMap.d.ts +8 -17
  142. package/dist/v3/hooks-business/useBusinessRecomendPlaceMap.js +8 -34
  143. package/dist/v3/hooks-business/useBusinessReselectPlaceMap.d.ts +4 -13
  144. package/dist/v3/hooks-business/useBusinessTaxiServiceMap.d.ts +5 -2393
  145. package/dist/v3/hooks-business/useBusinessTaxiServiceMap.js +5 -10
  146. package/dist/v3/index.js +1 -1
  147. package/dist/v3/types/global.d.ts +3 -0
  148. package/dist/v3/types/interface.d.ts +1 -1
  149. package/dist/v3/utils/ManualAbortError.d.ts +3 -0
  150. package/dist/v3/utils/ManualAbortError.js +14 -0
  151. package/dist/v3/utils/compare.d.ts +4 -0
  152. package/dist/v3/utils/compare.js +6 -0
  153. package/dist/v3/utils/helper.d.ts +6 -0
  154. package/dist/v3/utils/helper.js +43 -0
  155. package/dist/v3/utils/log.js +1 -1
  156. package/dist/v3/utils/patchGoogleMapLoader.d.ts +2 -0
  157. package/dist/v3/utils/patchGoogleMapLoader.js +64 -0
  158. package/package.json +2 -2
  159. package/dist/v2/Demo/Demo.d.ts +0 -3
  160. package/dist/v2/Demo/Demo.js +0 -1634
  161. package/dist/v2/api/googleConnection.d.ts +0 -5
  162. package/dist/v2/api/googleConnection.js +0 -51
  163. package/dist/v2/components/AmapLoader/AmapLoader.d.ts +0 -5
  164. package/dist/v2/components/AmapLoader/AmapLoader.js +0 -21
  165. package/dist/v2/components/AmapLoader/index.d.ts +0 -1
  166. package/dist/v2/components/AmapLoader/index.js +0 -4
  167. package/dist/v2/components/GmapLoader/GmapLoader.d.ts +0 -5
  168. package/dist/v2/components/GmapLoader/GmapLoader.js +0 -21
  169. package/dist/v2/components/GmapLoader/index.d.ts +0 -1
  170. package/dist/v2/components/GmapLoader/index.js +0 -4
  171. package/dist/v2/css/Loading-523061b9.css +0 -9
  172. package/dist/v2/hooks/useGoogleConnection.d.ts +0 -7
  173. package/dist/v2/hooks/useGoogleConnection.js +0 -15
  174. package/dist/v2/hooks-business/useBusinessTaxiEndMap.d.ts +0 -3
  175. package/dist/v2/hooks-business/useBusinessTaxiEndMap.js +0 -7
  176. package/dist/v3/Demo/Demo.d.ts +0 -9
  177. package/dist/v3/Demo/Demo.js +0 -1612
  178. package/dist/v3/api/googleConnection.d.ts +0 -5
  179. package/dist/v3/api/googleConnection.js +0 -51
  180. package/dist/v3/components/AmapLoader/AmapLoader.d.ts +0 -10
  181. package/dist/v3/components/AmapLoader/AmapLoader.js +0 -21
  182. package/dist/v3/components/AmapLoader/index.d.ts +0 -1
  183. package/dist/v3/components/AmapLoader/index.js +0 -4
  184. package/dist/v3/components/GmapLoader/GmapLoader.d.ts +0 -10
  185. package/dist/v3/components/GmapLoader/GmapLoader.js +0 -21
  186. package/dist/v3/components/GmapLoader/index.d.ts +0 -1
  187. package/dist/v3/components/GmapLoader/index.js +0 -4
  188. package/dist/v3/css/Loading-523061b9.css +0 -9
  189. package/dist/v3/hooks/useGoogleConnection.d.ts +0 -7
  190. package/dist/v3/hooks/useGoogleConnection.js +0 -15
  191. package/dist/v3/hooks-business/useBusinessTaxiEndMap.d.ts +0 -3
  192. package/dist/v3/hooks-business/useBusinessTaxiEndMap.js +0 -7
@@ -1,6 +1,8 @@
1
1
  import { shallowRef, computed } from "vue-demi";
2
+ import { apiPingAmap, apiPingGmap } from "../api/pingConnection.js";
2
3
  import { watchPostEffectForDeepOption } from "../utils/compare.js";
3
- import { createRunOnce } from "../utils/helper.js";
4
+ import { createOneConcurrent, sleep, createRunOnce } from "../utils/helper.js";
5
+ import { patchGoogleMapLoader } from "../utils/patchGoogleMapLoader.js";
4
6
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
5
7
  var distExports = {};
6
8
  var dist = {
@@ -537,6 +539,7 @@ class Loader {
537
539
  }
538
540
  }
539
541
  }
542
+ const MIN_MAP_RELOAD_INTERVAL = 5e3;
540
543
  const DEFAULT_AMAP_PLUGINS = [
541
544
  "AMap.Geocoder",
542
545
  "AMap.Driving",
@@ -551,120 +554,194 @@ var Status = /* @__PURE__ */ ((Status2) => {
551
554
  return Status2;
552
555
  })(Status || {});
553
556
  const useAmapLoader = (props) => {
554
- const { onChange } = props;
557
+ const { disableRef, onSuccess, onFail } = props;
555
558
  let resolveLoader;
556
- let rejectLoader;
557
- const readyPromise = new Promise((resolve, reject) => {
559
+ const readyPromise = new Promise((resolve) => {
558
560
  resolveLoader = resolve;
559
- rejectLoader = reject;
560
561
  });
561
562
  const statusRef = shallowRef(
562
563
  "LOADING"
563
564
  /* LOADING */
564
565
  );
566
+ const pingStatusRef = shallowRef("connected");
565
567
  const optionsRef = computed(() => {
566
- const { onChange: onChange2, loading, fallback, apiKey, apiSecret, apiServiceHost, version, ...options } = props;
568
+ const {
569
+ onSuccess: onSuccess2,
570
+ onFail: onFail2,
571
+ loading,
572
+ fallback,
573
+ apiKey,
574
+ apiSecret,
575
+ apiServiceHost,
576
+ version,
577
+ ...options
578
+ } = props;
567
579
  return { ...options, key: apiKey, version: version != null ? version : "2.0" };
568
580
  });
569
- watchPostEffectForDeepOption(
570
- () => optionsRef.value,
571
- (options) => {
572
- const setStatusAndExecuteCallback = (status) => {
573
- statusRef.value = status;
574
- if (status === "SUCCESS")
575
- resolveLoader();
576
- if (status === "FAILURE")
577
- rejectLoader();
578
- onChange == null ? void 0 : onChange(statusRef.value);
579
- };
580
- setStatusAndExecuteCallback(
581
- "LOADING"
582
- /* LOADING */
583
- );
584
- window._AMapSecurityConfig = props.apiServiceHost ? {
585
- serviceHost: props.apiServiceHost
586
- } : { securityJsCode: props.apiSecret };
587
- distExports.load(options).then(
588
- () => setStatusAndExecuteCallback(
589
- "SUCCESS"
590
- /* SUCCESS */
591
- ),
592
- () => setStatusAndExecuteCallback(
593
- "FAILURE"
594
- /* FAILURE */
595
- )
596
- );
581
+ const defineSecurityOnce = createRunOnce(() => {
582
+ window._AMapSecurityConfig = props.apiServiceHost ? {
583
+ serviceHost: props.apiServiceHost
584
+ } : { securityJsCode: props.apiSecret };
585
+ });
586
+ const reload = createOneConcurrent((options) => {
587
+ if (statusRef.value === "SUCCESS")
588
+ return Promise.resolve();
589
+ defineSecurityOnce();
590
+ distExports.reset();
591
+ statusRef.value = "LOADING";
592
+ return distExports.load(options).then(
593
+ () => {
594
+ statusRef.value = "SUCCESS";
595
+ resolveLoader();
596
+ onSuccess == null ? void 0 : onSuccess();
597
+ },
598
+ () => {
599
+ statusRef.value = "FAILURE";
600
+ onFail == null ? void 0 : onFail();
601
+ }
602
+ );
603
+ });
604
+ const keepRetry = createOneConcurrent(async () => {
605
+ if (!(disableRef == null ? void 0 : disableRef.value) && statusRef.value === "SUCCESS") {
606
+ pingStatusRef.value = "pending";
607
+ while (!(disableRef == null ? void 0 : disableRef.value) && pingStatusRef.value !== "connected") {
608
+ if (pingStatusRef.value === "unconnected")
609
+ await sleep(MIN_MAP_RELOAD_INTERVAL);
610
+ pingStatusRef.value = await apiPingAmap();
611
+ }
597
612
  }
598
- );
599
- return { statusRef, readyPromise };
613
+ const options = optionsRef.value;
614
+ while (!(disableRef == null ? void 0 : disableRef.value) && statusRef.value !== "SUCCESS") {
615
+ if (statusRef.value === "LOADING") {
616
+ await reload(options);
617
+ continue;
618
+ }
619
+ await sleep(MIN_MAP_RELOAD_INTERVAL);
620
+ const pingStatus = await apiPingAmap();
621
+ if (pingStatus === "unconnected")
622
+ continue;
623
+ await reload(options);
624
+ }
625
+ });
626
+ watchPostEffectForDeepOption(() => [optionsRef.value, disableRef == null ? void 0 : disableRef.value], keepRetry);
627
+ return { statusRef, pingStatusRef, readyPromise };
600
628
  };
601
- const loadGmapOnce = createRunOnce((opts) => {
602
- const loader = new Loader(opts);
603
- return loader.load();
604
- });
605
629
  const useGmapLoader = (props) => {
606
- const { onChange } = props;
630
+ const { disableRef, onSuccess, onFail } = props;
607
631
  let resolveLoader;
608
- let rejectLoader;
609
- const readyPromise = new Promise((resolve, reject) => {
632
+ const readyPromise = new Promise((resolve) => {
610
633
  resolveLoader = resolve;
611
- rejectLoader = reject;
612
634
  });
613
635
  const statusRef = shallowRef(
614
636
  "LOADING"
615
637
  /* LOADING */
616
638
  );
639
+ const pingStatusRef = shallowRef("pending");
617
640
  const optionsRef = computed(() => {
618
- const { onChange: onChange2, fallback, loading, language, ...options } = props;
641
+ const { onSuccess: onSuccess2, onFail: onFail2, fallback, loading, language, ...options } = props;
619
642
  return options;
620
643
  });
621
- watchPostEffectForDeepOption(
622
- () => optionsRef.value,
623
- (options) => {
624
- const language = navigator.language;
625
- const setStatusAndExecuteCallback = (status) => {
626
- statusRef.value = status;
627
- if (status === "SUCCESS")
628
- resolveLoader();
629
- if (status === "FAILURE")
630
- rejectLoader();
631
- onChange == null ? void 0 : onChange(statusRef.value);
632
- };
633
- setStatusAndExecuteCallback(
634
- "LOADING"
635
- /* LOADING */
636
- );
637
- loadGmapOnce({ ...options, language }).then(
638
- () => setStatusAndExecuteCallback(
639
- "SUCCESS"
640
- /* SUCCESS */
641
- ),
642
- () => setStatusAndExecuteCallback(
643
- "FAILURE"
644
- /* FAILURE */
645
- )
646
- );
644
+ const reload = createOneConcurrent((options, signal) => {
645
+ if (statusRef.value === "SUCCESS")
646
+ return Promise.resolve();
647
+ const loader = new Loader({ ...options, retries: 0 });
648
+ patchGoogleMapLoader(loader);
649
+ if (loader.status !== LoaderStatus.INITIALIZED) {
650
+ window.google = void 0;
651
+ loader.reset();
647
652
  }
648
- );
649
- return { statusRef, readyPromise };
653
+ const abortPromise = new Promise((resolve) => signal == null ? void 0 : signal.addEventListener("abort", resolve));
654
+ statusRef.value = "LOADING";
655
+ const loadPromise = loader.load().then(
656
+ () => {
657
+ if (signal == null ? void 0 : signal.aborted)
658
+ return;
659
+ statusRef.value = "SUCCESS";
660
+ resolveLoader();
661
+ onSuccess == null ? void 0 : onSuccess();
662
+ },
663
+ () => {
664
+ if (signal == null ? void 0 : signal.aborted)
665
+ return;
666
+ statusRef.value = "FAILURE";
667
+ onFail == null ? void 0 : onFail();
668
+ }
669
+ );
670
+ return Promise.race([abortPromise, loadPromise]);
671
+ });
672
+ const keepRetry = createOneConcurrent(async () => {
673
+ if (!(disableRef == null ? void 0 : disableRef.value) && statusRef.value === "SUCCESS") {
674
+ pingStatusRef.value = "pending";
675
+ while (!(disableRef == null ? void 0 : disableRef.value) && pingStatusRef.value !== "connected") {
676
+ if (pingStatusRef.value === "unconnected")
677
+ await sleep(MIN_MAP_RELOAD_INTERVAL);
678
+ pingStatusRef.value = await apiPingGmap();
679
+ }
680
+ }
681
+ const language = navigator.language;
682
+ const options = { ...optionsRef.value, language };
683
+ while (!(disableRef == null ? void 0 : disableRef.value) && statusRef.value !== "SUCCESS") {
684
+ if (statusRef.value === "FAILURE" || pingStatusRef.value === "unconnected") {
685
+ await sleep(MIN_MAP_RELOAD_INTERVAL);
686
+ pingStatusRef.value = await apiPingGmap();
687
+ if (pingStatusRef.value === "connected")
688
+ statusRef.value = "LOADING";
689
+ continue;
690
+ }
691
+ const controller = new AbortController();
692
+ const reloadPromise = reload(options, controller.signal);
693
+ pingStatusRef.value = await apiPingGmap();
694
+ if (pingStatusRef.value === "unconnected") {
695
+ controller.abort();
696
+ continue;
697
+ }
698
+ await reloadPromise;
699
+ }
700
+ });
701
+ watchPostEffectForDeepOption(() => [optionsRef.value, disableRef == null ? void 0 : disableRef.value], keepRetry);
702
+ return { statusRef, pingStatusRef, readyPromise };
650
703
  };
651
704
  const useMapLoader = (props) => {
652
- const { gmapKey, amapKey, amapSecret, amapServiceHost, supplier, language, onChange } = props;
653
- return supplier === "gmap" ? useGmapLoader({
705
+ const { gmapKey, amapKey, amapSecret, amapServiceHost, language, onSuccess, onFail } = props;
706
+ const {
707
+ statusRef: amapStatusRef,
708
+ pingStatusRef: amapPingStatusRef,
709
+ readyPromise: amapReadyPromise
710
+ } = useAmapLoader({
711
+ apiKey: amapKey,
712
+ apiSecret: amapSecret,
713
+ apiServiceHost: amapServiceHost,
714
+ plugins: DEFAULT_AMAP_PLUGINS,
715
+ disableRef: computed(() => props.supplier !== "amap"),
716
+ onSuccess,
717
+ onFail
718
+ });
719
+ const {
720
+ statusRef: gmapStatusRef,
721
+ pingStatusRef: gmapPingStatusRef,
722
+ readyPromise: gmapReadyPromise
723
+ } = useGmapLoader({
654
724
  apiKey: gmapKey,
655
725
  language,
656
726
  version: "weekly",
657
727
  // todo: 需要提前设置 region
658
728
  // region: "CN",
659
729
  libraries: DEFAULT_GMAP_LIBRARIES,
660
- onChange
661
- }) : useAmapLoader({
662
- apiKey: amapKey,
663
- apiSecret: amapSecret,
664
- apiServiceHost: amapServiceHost,
665
- plugins: DEFAULT_AMAP_PLUGINS,
666
- onChange
730
+ disableRef: computed(() => props.supplier !== "gmap"),
731
+ onSuccess,
732
+ onFail
667
733
  });
734
+ return {
735
+ get statusRef() {
736
+ return props.supplier === "gmap" ? gmapStatusRef : amapStatusRef;
737
+ },
738
+ get pingStatusRef() {
739
+ return props.supplier === "gmap" ? gmapPingStatusRef : amapPingStatusRef;
740
+ },
741
+ get readyPromise() {
742
+ return props.supplier === "gmap" ? gmapReadyPromise : amapReadyPromise;
743
+ }
744
+ };
668
745
  };
669
746
  export {
670
747
  DEFAULT_AMAP_PLUGINS,
@@ -3,6 +3,7 @@ import type { Place, Point } from "../types/interface";
3
3
  export interface UseMapPlaceProps {
4
4
  pointRef: Ref<Point>;
5
5
  emptyPlaceName: string;
6
+ signal?: AbortSignal;
6
7
  onChange?: (value: Place) => any;
7
8
  }
8
9
  export declare const useAmapPlace: (props: UseMapPlaceProps) => {
@@ -1,23 +1,23 @@
1
1
  import { ref, reactive, watch } from "vue-demi";
2
2
  import { REGEO_TIMEOUT } from "../api/contants.js";
3
3
  import { createPipeTw } from "../utils/cn2tw.js";
4
- import { equalAssign } from "../utils/helper.js";
4
+ import { equalAssign, createAbortable } from "../utils/helper.js";
5
5
  import { amapPlaceName2DisplayName, gmapPlaceName2DisplayName } from "../utils/transform.js";
6
- import { useAmapInChina } from "./useMapInChina.js";
6
+ import { inChina } from "./useMapInChina.js";
7
7
  import { useMapSupplier } from "./useMapSupplier.js";
8
8
  import { useUpdate } from "./useUdate.js";
9
9
  const useAmapPlace = (props) => {
10
- const { onChange, emptyPlaceName } = props;
10
+ const { signal, onChange, emptyPlaceName } = props;
11
11
  const defaultPoint = [...props.pointRef.value];
12
12
  const pointRef = ref(defaultPoint);
13
13
  const { readyPromise, language } = useMapSupplier();
14
- const { inChina } = useAmapInChina();
15
14
  const place = reactive({
16
15
  lng: pointRef.value[0],
17
16
  lat: pointRef.value[1],
18
17
  name: "",
19
18
  displayName: ""
20
19
  });
20
+ const abortable = createAbortable(signal);
21
21
  const { idx: placeKey, update } = useUpdate();
22
22
  const updatePlace = (value) => {
23
23
  pointRef.value = value;
@@ -29,37 +29,42 @@ const useAmapPlace = (props) => {
29
29
  place.name = value.name;
30
30
  place.displayName = value.displayName;
31
31
  };
32
- const getPlaceByRegeo = ([lng, lat]) => {
32
+ const getPlaceByRegeo = abortable(([lng, lat]) => {
33
33
  return new Promise((resolve) => {
34
- const geocoder = new AMap.Geocoder({ lang: language === "en" ? "en" : "zh_cn" });
35
- const pipeTw = createPipeTw(language === "zh-TW");
36
- const isChina = inChina([lng, lat]);
37
- geocoder.getAddress(new AMap.LngLat(lng, lat), (status, result) => {
38
- switch (status) {
39
- case "complete": {
40
- const { formattedAddress, addressComponent } = result.regeocode;
41
- const name = formattedAddress ? formattedAddress : emptyPlaceName;
42
- const displayName = amapPlaceName2DisplayName(name, { isChina, ...addressComponent });
43
- resolve({ lng, lat, name: pipeTw(name), displayName: pipeTw(displayName) });
44
- return;
45
- }
46
- case "no_data":
47
- case "error": {
48
- const name = emptyPlaceName;
49
- const displayName = emptyPlaceName;
50
- resolve({ lng, lat, name, displayName });
51
- return;
52
- }
53
- }
54
- });
55
- setTimeout(() => {
56
- console.warn("高德逆地理请求超时!");
34
+ const handleFailed = () => {
57
35
  const name = emptyPlaceName;
58
36
  const displayName = emptyPlaceName;
59
37
  resolve({ lng, lat, name, displayName });
38
+ };
39
+ readyPromise.then(() => {
40
+ const geocoder = new AMap.Geocoder({ lang: language === "en" ? "en" : "zh_cn" });
41
+ const pipeTw = createPipeTw(language === "zh-TW");
42
+ const isChina = inChina([lng, lat]);
43
+ geocoder.getAddress(new AMap.LngLat(lng, lat), (status, result) => {
44
+ switch (status) {
45
+ case "complete": {
46
+ const { formattedAddress, addressComponent } = result.regeocode;
47
+ const name = formattedAddress ? formattedAddress : emptyPlaceName;
48
+ const displayName = amapPlaceName2DisplayName(name, {
49
+ isChina,
50
+ ...addressComponent
51
+ });
52
+ resolve({ lng, lat, name: pipeTw(name), displayName: pipeTw(displayName) });
53
+ return;
54
+ }
55
+ case "no_data":
56
+ case "error": {
57
+ handleFailed();
58
+ }
59
+ }
60
+ });
61
+ }, handleFailed);
62
+ setTimeout(() => {
63
+ console.warn("高德逆地理请求超时!");
64
+ handleFailed();
60
65
  }, REGEO_TIMEOUT);
61
66
  });
62
- };
67
+ });
63
68
  watch(
64
69
  () => [placeKey.value],
65
70
  async () => {
@@ -72,7 +77,7 @@ const useAmapPlace = (props) => {
72
77
  return { place, updatePlace, setPlace, getPlaceByRegeo };
73
78
  };
74
79
  const useGmapPlace = (props) => {
75
- const { onChange, emptyPlaceName } = props;
80
+ const { signal, onChange, emptyPlaceName } = props;
76
81
  const defaultPoint = [...props.pointRef.value];
77
82
  const pointRef = ref(defaultPoint);
78
83
  const { readyPromise, language } = useMapSupplier();
@@ -83,6 +88,7 @@ const useGmapPlace = (props) => {
83
88
  name: "",
84
89
  displayName: ""
85
90
  });
91
+ const abortable = createAbortable(signal);
86
92
  const updatePlace = (value) => {
87
93
  pointRef.value = value;
88
94
  update();
@@ -93,28 +99,30 @@ const useGmapPlace = (props) => {
93
99
  place.name = value.name;
94
100
  place.displayName = value.displayName;
95
101
  };
96
- const getPlaceByRegeo = ([lng, lat]) => {
102
+ const getPlaceByRegeo = abortable(([lng, lat]) => {
97
103
  return new Promise((resolve) => {
98
- const geocoder = new google.maps.Geocoder();
99
- const pipeTw = createPipeTw(language === "zh-TW");
100
- geocoder.geocode({ language, location: { lng, lat } }).then(({ results }) => {
101
- const name = results[0].formatted_address ? results[0].formatted_address : emptyPlaceName;
102
- const displayName = gmapPlaceName2DisplayName(name, results[0].address_components);
103
- resolve({ lng, lat, name: pipeTw(name), displayName: pipeTw(displayName) });
104
- }).catch((err) => {
105
- console.error(err);
104
+ const handleFailed = (err) => {
105
+ if (err)
106
+ console.error(err);
106
107
  const name = emptyPlaceName;
107
108
  const displayName = emptyPlaceName;
108
109
  resolve({ lng, lat, name, displayName });
109
- });
110
+ };
111
+ readyPromise.then(() => {
112
+ const geocoder = new google.maps.Geocoder();
113
+ const pipeTw = createPipeTw(language === "zh-TW");
114
+ geocoder.geocode({ language, location: { lng, lat } }).then(({ results }) => {
115
+ const name = results[0].formatted_address ? results[0].formatted_address : emptyPlaceName;
116
+ const displayName = gmapPlaceName2DisplayName(name, results[0].address_components);
117
+ resolve({ lng, lat, name: pipeTw(name), displayName: pipeTw(displayName) });
118
+ }).catch(handleFailed);
119
+ }, handleFailed);
110
120
  setTimeout(() => {
111
121
  console.warn("谷歌逆地理请求超时!");
112
- const name = emptyPlaceName;
113
- const displayName = emptyPlaceName;
114
- resolve({ lng, lat, name, displayName });
122
+ handleFailed();
115
123
  }, REGEO_TIMEOUT);
116
124
  });
117
- };
125
+ });
118
126
  watch(
119
127
  () => placeKey.value,
120
128
  async () => {
@@ -5,6 +5,7 @@ export interface UseMapRecomendPlaceProps<C = Record<string, any>> {
5
5
  context?: C;
6
6
  emptyPlaceName: string;
7
7
  queryingPlaceName: string;
8
+ signal?: AbortSignal;
8
9
  getLimit: (context?: C) => number;
9
10
  getAvailable?: (place: Place) => Promise<boolean>;
10
11
  getRecomendPlace: (place: Place, context?: C) => Promise<RecommendZonePlaces | undefined>;