diff --git a/app/src/Loader.tsx b/app/src/Loader.tsx index 4b0e13c..000487a 100644 --- a/app/src/Loader.tsx +++ b/app/src/Loader.tsx @@ -4,6 +4,7 @@ import { styled } from "./stitches.config"; import Inspector from "./Inspector"; import MaplibreMap from "./MaplibreMap"; +import Metadata from "./Metadata"; import { MagnifyingGlassIcon, ImageIcon } from "@radix-ui/react-icons"; import * as ToolbarPrimitive from "@radix-ui/react-toolbar"; @@ -59,13 +60,6 @@ const StyledToggleItem = styled(ToolbarPrimitive.ToggleItem, { "&[data-state=on]": { backgroundColor: "$primary", color: "$primaryText" }, }); -const MetadataButton = styled(DialogPrimitive.Trigger, { - backgroundColor:"$primary", - color:"$primaryText", - padding:"$1", - cursor: "pointer" -}) - const StyledOverlay = styled(DialogPrimitive.Overlay, { backgroundColor: "black", position: "fixed", @@ -87,23 +81,6 @@ const StyledContent = styled(DialogPrimitive.Content, { "&:focus": { outline: "none" }, }); -const MetadataTable = styled("table", { - tableLayout:"fixed", - width:"100%" -}); - -const MetadataKey = styled("td", { - padding: "0 $1" -}); - -const MetadataValue = styled("td", { - fontFamily:"monospace", -}); - -const JsonValue = styled(MetadataValue, { - overflowX:"scroll" -}) - const Toolbar = StyledToolbar; const ToolbarLink = StyledLink; const ToolbarToggleGroup = StyledToggleGroup; @@ -111,41 +88,16 @@ const ToolbarToggleItem = StyledToggleItem; function Loader(props: { file: PMTiles }) { let [tab, setTab] = useState("maplibre"); - let [metadata, setMetadata] = useState<[string, string][]>([]); - let [modalOpen, setModalOpen] = useState(false); let view; if (tab === "maplibre") { view = ; - } else { + } else if (tab === "inspector") { view = ; + } else { + view = ; } - useEffect(() => { - let pmtiles = props.file; - const fetchData = async () => { - let m = await pmtiles.getMetadata(); - let tmp: [string, string][] = []; - for (var key in m) { - tmp.push([key, m[key]]); - } - setMetadata(tmp); - }; - fetchData(); - }, [props.file]); - - const metadataRows = metadata.map((d, i) => { - let Cls = (d[0] === 'json') ? JsonValue : MetadataValue - return - {d[0]} - {d[1]} - - }); - - const closeModal = () => { - setModalOpen(false); - }; - return ( <> @@ -162,35 +114,13 @@ function Loader(props: { file: PMTiles }) { Tile Inspector + + Metadata + {props.file.source.getKey()} - - setModalOpen(true)}> - Metadata - - - - - - - - - - key - value - - - {metadataRows} - - - - - {view} diff --git a/app/src/Metadata.tsx b/app/src/Metadata.tsx new file mode 100644 index 0000000..31fe621 --- /dev/null +++ b/app/src/Metadata.tsx @@ -0,0 +1,63 @@ +import { useState, useEffect, useRef } from "react"; +import { PMTiles, TileType } from "../../js"; +import { Protocol } from "../../js/adapters"; +import { styled } from "./stitches.config"; + +const MetadataTable = styled("table", { + tableLayout: "fixed", + width: "100%", +}); + +const MetadataKey = styled("td", { + padding: "0 $1", +}); + +const MetadataValue = styled("td", { + fontFamily: "monospace", +}); + +const JsonValue = styled(MetadataValue, { + overflowX: "scroll", +}); + +function Metadata(props: { file: PMTiles }) { + let [metadata, setMetadata] = useState<[string, string][]>([]); + + useEffect(() => { + let pmtiles = props.file; + const fetchData = async () => { + let m = await pmtiles.getMetadata(); + let tmp: [string, string][] = []; + for (var key in m) { + let val = m[key]; + tmp.push([key, JSON.stringify(val)]); + } + setMetadata(tmp); + }; + fetchData(); + }, [props.file]); + + const metadataRows = metadata.map((d, i) => { + let Cls = d[0] === "json" ? JsonValue : MetadataValue; + return ( + + {d[0]} + {d[1]} + + ); + }); + + return ( + + + + key + value + + + {metadataRows} + + ); +} + +export default Metadata; diff --git a/js/index.ts b/js/index.ts index 822d6d2..79d5aae 100644 --- a/js/index.ts +++ b/js/index.ts @@ -799,21 +799,6 @@ export class PMTiles { } } - async root_entries() { - const header = await this.cache.getHeader(this.source); - - // V2 COMPATIBILITY - if (header.specVersion < 3) { - return []; - } - return await this.cache.getDirectory( - this.source, - header.rootDirectoryOffset, - header.rootDirectoryLength, - header - ); - } - async getHeader() { return await this.cache.getHeader(this.source); }