|
@@ -1,4 +1,4 @@
|
|
|
-import { nextTick, reactive, ref, watchEffect } from "vue";
|
|
|
+import { computed, nextTick, reactive, ref, watchEffect } from "vue";
|
|
|
import { FixPoint, fixPoints } from "./store/fixPoint";
|
|
|
import { baseLines } from "./store/baseLine";
|
|
|
import { MeasureAtom, MeasuresRaw, Pos, Pos3D } from "./sdk";
|
|
@@ -6,6 +6,8 @@ import { list } from "./store/measure";
|
|
|
import { PhotoRaw } from "./store/photos";
|
|
|
import { useSDK } from "./hook";
|
|
|
|
|
|
+const global = window as any;
|
|
|
+
|
|
|
type SDKAPI = {
|
|
|
getFixPoints: () => FixPoint[];
|
|
|
getBaseLine: () => MeasureAtom;
|
|
@@ -14,6 +16,8 @@ type SDKAPI = {
|
|
|
getScreenPosition: (pos3d: Pos3D) => null | Pos;
|
|
|
};
|
|
|
|
|
|
+const mustAPI: (keyof SDKAPI)[] = ["photo"] as const;
|
|
|
+
|
|
|
export const loaded = ref(false);
|
|
|
export const sdkAPI = reactive({
|
|
|
getFixPoints: () => JSON.parse(JSON.stringify(fixPoints.value)),
|
|
@@ -26,9 +30,20 @@ export const sdkAPI = reactive({
|
|
|
},
|
|
|
}) as SDKAPI;
|
|
|
|
|
|
-(window as any).getSDK = (callback: (sdk: SDKAPI) => {}) => {
|
|
|
+const sdkLoaded = computed(
|
|
|
+ () => loaded.value && mustAPI.every((api) => api in sdkAPI)
|
|
|
+);
|
|
|
+
|
|
|
+const stopWatch = watchEffect(() => {
|
|
|
+ if (sdkLoaded.value) {
|
|
|
+ mustAPI.forEach((api) => (global[api] = sdkAPI[api]));
|
|
|
+ nextTick(() => stopWatch());
|
|
|
+ }
|
|
|
+});
|
|
|
+
|
|
|
+global.getSDK = (callback: (sdk: SDKAPI) => {}) => {
|
|
|
const stopWatch = watchEffect(() => {
|
|
|
- if (loaded.value && sdkAPI.photo) {
|
|
|
+ if (sdkLoaded.value) {
|
|
|
callback({ ...sdkAPI });
|
|
|
nextTick(() => stopWatch());
|
|
|
}
|