diff --git a/src/ui/cameraUtils.ts b/src/ui/cameraUtils.ts index 4bb93d1..11c94ab 100644 --- a/src/ui/cameraUtils.ts +++ b/src/ui/cameraUtils.ts @@ -137,11 +137,17 @@ export const copyLinkToCurrentView = async (editor: Editor) => { zoom: camera.z, }) - // Set camera parameters + // Set camera parameters first url.searchParams.set("x", camera.x.toString()) url.searchParams.set("y", camera.y.toString()) url.searchParams.set("zoom", camera.z.toString()) + // Add shape ID last if needed + const selectedIds = editor.getSelectedShapeIds() + if (selectedIds.length > 0) { + url.searchParams.set("shapeId", selectedIds[0].toString()) + } + const finalUrl = url.toString() console.log("Final URL to copy:", finalUrl) @@ -188,12 +194,15 @@ export const lockCameraToFrame = async (editor: Editor) => { 1, // Cap at 1x zoom ) - url.searchParams.set("frameId", selectedShape.id) - url.searchParams.set("isLocked", "true") + // Set camera parameters first url.searchParams.set("x", bounds.x.toString()) url.searchParams.set("y", bounds.y.toString()) url.searchParams.set("zoom", targetZoom.toString()) + // Add frame-specific parameters last + url.searchParams.set("isLocked", "true") + url.searchParams.set("frameId", selectedShape.id) + const finalUrl = url.toString() if (navigator.clipboard && window.isSecureContext) { diff --git a/src/utils/handleInitialPageLoad.ts b/src/utils/handleInitialPageLoad.ts index 7cc0edb..1ce4fcd 100644 --- a/src/utils/handleInitialPageLoad.ts +++ b/src/utils/handleInitialPageLoad.ts @@ -2,11 +2,15 @@ import { Editor, TLShapeId } from "tldraw" export const handleInitialPageLoad = (editor: Editor) => { const url = new URL(window.location.href) - const frameId = url.searchParams.get("frameId") - const shapeId = url.searchParams.get("shapeId") + + // Get camera parameters first const x = url.searchParams.get("x") const y = url.searchParams.get("y") const zoom = url.searchParams.get("zoom") + + // Get shape/frame parameters last + const frameId = url.searchParams.get("frameId") + const shapeId = url.searchParams.get("shapeId") const isLocked = url.searchParams.get("isLocked") === "true" // Wait for next tick to ensure editor is ready