|
@@ -1,56 +1,21 @@
|
|
|
-import { useState } from "react";
|
|
|
-import { Krpano, Scene, View } from "@dage/krpano";
|
|
|
-import { ISceneProps } from "@/types";
|
|
|
+import { useMemo, useState } from "react";
|
|
|
+import classnames from "classnames";
|
|
|
+import { Krpano, Scene } from "@dage/krpano";
|
|
|
+import { ALL_SCENES, MENUS } from "./constants";
|
|
|
import "./index.scss";
|
|
|
|
|
|
-const URL = "https://houseoss.4dkankan.com/project/leifeng-transfer";
|
|
|
-
|
|
|
-const CENTER_SCENE_LIST: ISceneProps[] = [
|
|
|
- {
|
|
|
- name: "center1",
|
|
|
- thumbUrl: URL + "/panos/center1.tiles/thumb.jpg",
|
|
|
- previewUrl: URL + "/panos/center1.tiles/preview.jpg",
|
|
|
- imageTagAttributes: {
|
|
|
- type: "cube",
|
|
|
- tileSize: 512,
|
|
|
- multires: true,
|
|
|
- },
|
|
|
- images: [
|
|
|
- {
|
|
|
- tiledImageWidth: 2624,
|
|
|
- tiledImageHeight: 2624,
|
|
|
- url: URL + "/panos/center1.tiles/%s/l3/%v/l3_%s_%v_%h.jpg",
|
|
|
- },
|
|
|
- {
|
|
|
- tiledImageWidth: 1280,
|
|
|
- tiledImageHeight: 1280,
|
|
|
- url: URL + "/panos/center1.tiles/%s/l2/%v/l2_%s_%v_%h.jpg",
|
|
|
- },
|
|
|
- {
|
|
|
- tiledImageWidth: 640,
|
|
|
- tiledImageHeight: 640,
|
|
|
- url: URL + "/panos/center1.tiles/%s/l1/%v/l1_%s_%v_%h.jpg",
|
|
|
- },
|
|
|
- ],
|
|
|
- children: (
|
|
|
- <View
|
|
|
- hlookat={0}
|
|
|
- vlookat={0}
|
|
|
- fovType="MFOV"
|
|
|
- fov={120}
|
|
|
- maxPixelZoom={2}
|
|
|
- fovMin={70}
|
|
|
- fovMax={140}
|
|
|
- limitView="auto"
|
|
|
- />
|
|
|
- ),
|
|
|
- },
|
|
|
-];
|
|
|
-
|
|
|
export default function HomePage() {
|
|
|
- const [currentScene, setCurrentScene] = useState(CENTER_SCENE_LIST[0].name);
|
|
|
+ const [currentMenu, setCurrentMenu] = useState(0);
|
|
|
+ const sceneList = useMemo(() => MENUS[currentMenu].scenes, [currentMenu]);
|
|
|
+ const [currentScene, setCurrentScene] = useState(sceneList[0].name);
|
|
|
+
|
|
|
+ const handleSceneClick = (name: string) => {
|
|
|
+ setCurrentScene(name);
|
|
|
+ };
|
|
|
|
|
|
- const handleClick = (name: string) => () => setCurrentScene(name);
|
|
|
+ const handleMenuClick = (idx: number) => {
|
|
|
+ setCurrentMenu(idx);
|
|
|
+ };
|
|
|
|
|
|
return (
|
|
|
<div className="home-page">
|
|
@@ -59,26 +24,43 @@ export default function HomePage() {
|
|
|
currentScene={currentScene}
|
|
|
passQueryParameters={true}
|
|
|
>
|
|
|
- {CENTER_SCENE_LIST.map((sc) => (
|
|
|
+ {ALL_SCENES.map((sc) => (
|
|
|
<Scene key={sc.name} {...sc} />
|
|
|
))}
|
|
|
</Krpano>
|
|
|
|
|
|
- <div className="scene-list">
|
|
|
- {CENTER_SCENE_LIST.map((sc) => (
|
|
|
- <div
|
|
|
- key={sc.name}
|
|
|
- className={`scene-list-item ${
|
|
|
- sc.name === currentScene ? "active" : ""
|
|
|
- }`}
|
|
|
- onClick={handleClick(sc.name)}
|
|
|
- >
|
|
|
- <img
|
|
|
- src={sc.thumbUrl || sc.images![0].url.replace("%s", "f")}
|
|
|
- alt={sc.name}
|
|
|
- />
|
|
|
- </div>
|
|
|
- ))}
|
|
|
+ <div className="scene-panel">
|
|
|
+ <div className="scene-panel__menu">
|
|
|
+ {MENUS.map((sc, idx) => (
|
|
|
+ <div
|
|
|
+ key={sc.title}
|
|
|
+ className={classnames([
|
|
|
+ "scene-panel__menu__item",
|
|
|
+ idx === currentMenu && "active",
|
|
|
+ ])}
|
|
|
+ onClick={handleMenuClick.bind(undefined, idx)}
|
|
|
+ >
|
|
|
+ {sc.title}
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className="scene-panel__list">
|
|
|
+ {sceneList.map((sc) => (
|
|
|
+ <div
|
|
|
+ key={sc.name}
|
|
|
+ className={`scene-panel__list__item ${
|
|
|
+ sc.name === currentScene ? "active" : ""
|
|
|
+ }`}
|
|
|
+ onClick={handleSceneClick.bind(undefined, sc.name)}
|
|
|
+ >
|
|
|
+ <img
|
|
|
+ src={sc.thumbUrl || sc.images![0].url.replace("%s", "f")}
|
|
|
+ alt={sc.name}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
);
|