|
@@ -1,8 +1,7 @@
|
|
|
-import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
|
+import React, { useCallback, useEffect, useState } from "react";
|
|
|
import { KrpanoActionProxy } from "../KrpanoActionProxy";
|
|
|
-import { useEventCallback } from "../hooks";
|
|
|
+import { useMounted, useEventCallback } from "../hooks";
|
|
|
import { IKrpanoConfig, NativeKrpanoRendererObject } from "../types";
|
|
|
-import { useKrpano } from "../hooks/useKrpano";
|
|
|
import { CurrentSceneContext, KrpanoRendererContext } from "../contexts";
|
|
|
import { buildKrpanoAction } from "../utils";
|
|
|
import { WebVR } from "./WebVR";
|
|
@@ -31,7 +30,6 @@ export const Krpano: React.FC<KrpanoProps> = ({
|
|
|
...rest
|
|
|
}) => {
|
|
|
const [renderer, setRenderer] = useState<KrpanoActionProxy | null>(null);
|
|
|
- const restRef = useEventCallback(rest);
|
|
|
const onReadyRef = useEventCallback(onReady);
|
|
|
const onReadyCallback = useCallback(
|
|
|
(obj: NativeKrpanoRendererObject) => {
|
|
@@ -45,16 +43,6 @@ export const Krpano: React.FC<KrpanoProps> = ({
|
|
|
},
|
|
|
[onReadyRef]
|
|
|
);
|
|
|
- const krpanoConfig = useMemo(
|
|
|
- () => ({
|
|
|
- target,
|
|
|
- onready: onReadyCallback,
|
|
|
- ...restRef.current,
|
|
|
- }),
|
|
|
- [target, restRef, onReadyCallback]
|
|
|
- );
|
|
|
-
|
|
|
- useKrpano(krpanoConfig);
|
|
|
|
|
|
useEffect(() => {
|
|
|
if (!renderer) return;
|
|
@@ -79,11 +67,34 @@ export const Krpano: React.FC<KrpanoProps> = ({
|
|
|
useEffect(() => {
|
|
|
if (!renderer || !currentScene) return;
|
|
|
|
|
|
- renderer.waitIncludeLoad().then(() => {
|
|
|
+ renderer.waitIncludeLoaded(true).then(() => {
|
|
|
renderer.loadScene(currentScene);
|
|
|
});
|
|
|
}, [renderer, currentScene]);
|
|
|
|
|
|
+ const initKrpano = () => {
|
|
|
+ const defaultConfig: Partial<IKrpanoConfig> = {
|
|
|
+ html5: "auto",
|
|
|
+ xml: null,
|
|
|
+ mobilescale: 1,
|
|
|
+ };
|
|
|
+
|
|
|
+ if (typeof window.embedpano === "function") {
|
|
|
+ window.embedpano({
|
|
|
+ ...defaultConfig,
|
|
|
+ target,
|
|
|
+ onready: onReadyCallback,
|
|
|
+ ...rest,
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ throw new Error("Krpano required");
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ useMounted(() => {
|
|
|
+ initKrpano();
|
|
|
+ });
|
|
|
+
|
|
|
return (
|
|
|
<KrpanoRendererContext.Provider value={renderer}>
|
|
|
<CurrentSceneContext.Provider value={currentScene || null}>
|