import { Meta, StoryObj } from "@storybook/react"; import { Color } from "cesium"; import { Suspense } from "react"; import VrtViewer from "../__vrt__/VrtViewer"; import GeoJsonDataSource from "./GeoJsonDataSource"; /** * Stories tagged `vrt` are rendered deterministically (see `src/__vrt__`) so the * test runner can compare screenshots. Run `npm run storybook:build:vrt` then `npm run vrt`. */ const meta: Meta = { title: "VRT/GeoJsonDataSource", tags: ["vrt"], parameters: { layout: "fullscreen" }, }; export default meta; type Story = StoryObj; const geojson = { type: "FeatureCollection", features: [ { type: "Feature", properties: {}, geometry: { type: "Point", coordinates: [-100, 40] }, }, { type: "Feature", properties: {}, geometry: { type: "Point", coordinates: [-120, 35] }, }, ], } as const; export const GeoJson: Story = { render: () => ( ), }; // The suspense story exercises the opt-in Suspense data-loading path: `data` is // a URL (a blob URL keeps it offline/deterministic), so the data source is // fetched during render behind a boundary. The deterministic viewer // only flips `__VRT_READY__` after tiles load and the scene settles, by which // point the suspended data has resolved and rendered, so the screenshot shows // the loaded state — a regression here (suspense path broken) renders nothing. const dataUrl = URL.createObjectURL( new Blob([JSON.stringify(geojson)], { type: "application/json" }), ); export const SuspenseStory: Story = { name: "Suspense", render: () => ( ), };