From 625d634b849b8480cc53a04198f9e8cb94b901d4 Mon Sep 17 00:00:00 2001 From: Cody Olsen Date: Wed, 16 Oct 2024 21:29:17 +0200 Subject: [PATCH 01/18] chore: add next-loader back to release manifest --- release-please-config.json | 1 + 1 file changed, 1 insertion(+) diff --git a/release-please-config.json b/release-please-config.json index ce403aa707..ea85932875 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -8,6 +8,7 @@ "packages/comlink": {}, "packages/core-loader": {}, "packages/insert-menu": {}, + "packages/next-loader": {}, "packages/presentation": {}, "packages/preview-kit-compat": {}, "packages/preview-url-secret": {}, From d037e9aee402d84907068056fc6c8531239a64a2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 20:43:02 +0000 Subject: [PATCH 02/18] chore(release): publish canary [skip ci] --- packages/comlink/package.json | 2 +- packages/core-loader/package.json | 2 +- packages/insert-menu/package.json | 2 +- packages/next-loader/package.json | 2 +- packages/presentation/package.json | 2 +- packages/preview-kit-compat/package.json | 2 +- packages/preview-url-secret/package.json | 2 +- packages/react-loader/package.json | 2 +- packages/svelte-loader/package.json | 2 +- packages/visual-editing/package.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/comlink/package.json b/packages/comlink/package.json index 4da9012fc6..89a3529cf7 100644 --- a/packages/comlink/package.json +++ b/packages/comlink/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/comlink", - "version": "0.0.2-canary.62", + "version": "0.0.2-canary.63", "keywords": [ "sanity.io", "postmessage" diff --git a/packages/core-loader/package.json b/packages/core-loader/package.json index a9b75c9f40..7d53f7f094 100644 --- a/packages/core-loader/package.json +++ b/packages/core-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/core-loader", - "version": "1.6.24-canary.64", + "version": "1.6.24-canary.65", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/core-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/insert-menu/package.json b/packages/insert-menu/package.json index 0f1f0dc524..2798ff610d 100644 --- a/packages/insert-menu/package.json +++ b/packages/insert-menu/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/insert-menu", - "version": "1.0.10-canary.64", + "version": "1.0.10-canary.65", "description": "", "keywords": [], "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/insert-menu#readme", diff --git a/packages/next-loader/package.json b/packages/next-loader/package.json index bbfce72112..022a5e3f28 100644 --- a/packages/next-loader/package.json +++ b/packages/next-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/next-loader", - "version": "0.0.1-canary.48", + "version": "0.0.1-canary.49", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/next-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/presentation/package.json b/packages/presentation/package.json index 0f860beeea..6afe3d40cf 100644 --- a/packages/presentation/package.json +++ b/packages/presentation/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/presentation", - "version": "1.16.6-canary.64", + "version": "1.16.6-canary.65", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/presentation#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/preview-kit-compat/package.json b/packages/preview-kit-compat/package.json index e4e6dca487..05d6e3d71d 100644 --- a/packages/preview-kit-compat/package.json +++ b/packages/preview-kit-compat/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/preview-kit-compat", - "version": "1.5.8-canary.64", + "version": "1.5.8-canary.65", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/preview-kit-compat#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/preview-url-secret/package.json b/packages/preview-url-secret/package.json index 4d1f6f1428..84c5be8d20 100644 --- a/packages/preview-url-secret/package.json +++ b/packages/preview-url-secret/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/preview-url-secret", - "version": "1.6.22-canary.64", + "version": "1.6.22-canary.65", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/preview-url-secret#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/react-loader/package.json b/packages/react-loader/package.json index a997cc01f9..a95d978359 100644 --- a/packages/react-loader/package.json +++ b/packages/react-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/react-loader", - "version": "1.10.8-canary.64", + "version": "1.10.8-canary.65", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/react-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/svelte-loader/package.json b/packages/svelte-loader/package.json index d40c8bcc2c..104af38c3e 100644 --- a/packages/svelte-loader/package.json +++ b/packages/svelte-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/svelte-loader", - "version": "1.11.38-canary.64", + "version": "1.11.38-canary.65", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/svelte-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/visual-editing/package.json b/packages/visual-editing/package.json index 5b4fcd257c..44bb4589d6 100644 --- a/packages/visual-editing/package.json +++ b/packages/visual-editing/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/visual-editing", - "version": "2.1.11-canary.64", + "version": "2.1.11-canary.65", "keywords": [ "sanity.io", "visual-editing", From 7c27685ebf80f3633c4be49156470c3157bcc572 Mon Sep 17 00:00:00 2001 From: Cody Olsen Date: Thu, 17 Oct 2024 02:13:35 +0200 Subject: [PATCH 03/18] feat: use Live Draft Content API for loader live queries --- .github/workflows/release-canary.yml | 2 + .github/workflows/release-please.yml | 2 + apps/studio/.env.local | 2 + apps/studio/turbo.json | 6 +- packages/presentation/package.config.ts | 1 + .../presentation/src/PresentationTool.tsx | 34 +- packages/presentation/src/constants.ts | 8 + .../presentation/src/loader/LiveQueries.tsx | 488 ++++++++++++++++++ .../presentation/src/loader/LoaderQueries.tsx | 28 - .../src/overlays/PostMessageDocuments.tsx | 2 +- packages/presentation/turbo.json | 11 +- 11 files changed, 542 insertions(+), 42 deletions(-) create mode 100644 packages/presentation/src/loader/LiveQueries.tsx diff --git a/.github/workflows/release-canary.yml b/.github/workflows/release-canary.yml index a7dd417827..0971e9b69e 100644 --- a/.github/workflows/release-canary.yml +++ b/.github/workflows/release-canary.yml @@ -20,6 +20,8 @@ jobs: TURBO_TEAM: ${{ vars.TURBO_TEAM }} # Enable the new QRCode Preview URL menu on canary versions PRESENTATION_ENABLE_QRCODE: true + # The Live Draft Content API is much faster than the legacy Listen API based approach for loader live mode + PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS: true steps: - uses: actions/create-github-app-token@v1 id: generate-token diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 9f4ba8a5ec..c889b1c29f 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -26,6 +26,8 @@ jobs: TURBO_TEAM: ${{ vars.TURBO_TEAM }} # Disable the new QRCode feature on production builds PRESENTATION_ENABLE_QRCODE: false + # The Live Draft Content API is only available on vX atm + PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS: false steps: - uses: actions/create-github-app-token@v1 id: generate-token diff --git a/apps/studio/.env.local b/apps/studio/.env.local index 134565f458..b3926bb439 100644 --- a/apps/studio/.env.local +++ b/apps/studio/.env.local @@ -1,5 +1,7 @@ # Test the new QRCode Preview URL menu SANITY_STUDIO_PRESENTATION_ENABLE_QRCODE=true +# Test the new Live Draft Content API +SANITY_STUDIO_PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS=true # If you are opening a PR you can paste these variables into: https://vercel.com/sanity-sandbox/visual-editing-studio/settings/environment-variables # and then use "Preview (Select custom branch)" and batch add vars so that changes in the Studio side, and app side, can be tested together: diff --git a/apps/studio/turbo.json b/apps/studio/turbo.json index 62ec26d67d..6bc36f962f 100644 --- a/apps/studio/turbo.json +++ b/apps/studio/turbo.json @@ -16,7 +16,8 @@ "SANITY_STUDIO_SVELTE_PREVIEW_URL", "SANITY_STUDIO_VERCEL_BRANCH_URL", "SANITY_STUDIO_VERCEL_ENV", - "SANITY_STUDIO_PRESENTATION_ENABLE_QRCODE" + "SANITY_STUDIO_PRESENTATION_ENABLE_QRCODE", + "SANITY_STUDIO_PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS" ], "outputs": [".sanity/**", "dist/**"] }, @@ -32,7 +33,8 @@ "SANITY_STUDIO_REMIX_PREVIEW_URL", "SANITY_STUDIO_STEGA_DEBUG", "SANITY_STUDIO_SVELTE_PREVIEW_URL", - "SANITY_STUDIO_PRESENTATION_ENABLE_QRCODE" + "SANITY_STUDIO_PRESENTATION_ENABLE_QRCODE", + "SANITY_STUDIO_PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS" ] } } diff --git a/packages/presentation/package.config.ts b/packages/presentation/package.config.ts index a0416ff4d3..7524f77250 100644 --- a/packages/presentation/package.config.ts +++ b/packages/presentation/package.config.ts @@ -7,5 +7,6 @@ export default defineConfig({ external: ['@sanity/ui', 'react', 'react-dom', 'sanity', 'styled-components'], define: { PRESENTATION_ENABLE_QRCODE: process.env['PRESENTATION_ENABLE_QRCODE'], + PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS: process.env['PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS'], }, }) diff --git a/packages/presentation/src/PresentationTool.tsx b/packages/presentation/src/PresentationTool.tsx index ae34c076ea..127da964dd 100644 --- a/packages/presentation/src/PresentationTool.tsx +++ b/packages/presentation/src/PresentationTool.tsx @@ -28,7 +28,12 @@ import { import {useDataset, useProjectId, type Path, type SanityDocument, type Tool} from 'sanity' import {useRouter, type RouterContextValue} from 'sanity/router' import {styled} from 'styled-components' -import {COMMENTS_INSPECTOR_NAME, DEFAULT_TOOL_NAME, EDIT_INTENT_MODE} from './constants' +import { + COMMENTS_INSPECTOR_NAME, + DEFAULT_TOOL_NAME, + EDIT_INTENT_MODE, + LIVE_DRAFT_EVENTS_ENABLED, +} from './constants' import {useUnique, useWorkspace, type CommentIntentGetter} from './internals' import {debounce} from './lib/debounce' import {Panel} from './panels/Panel' @@ -64,6 +69,7 @@ import {usePreviewUrl} from './usePreviewUrl' import {useStatus} from './useStatus' const LoaderQueries = lazy(() => import('./loader/LoaderQueries')) +const LiveQueries = lazy(() => import('./loader/LiveQueries')) const PostMessageDocuments = lazy(() => import('./overlays/PostMessageDocuments')) const PostMessageRefreshMutations = lazy(() => import('./editor/PostMessageRefreshMutations')) const PostMessagePreviewSnapshots = lazy(() => import('./editor/PostMessagePreviewSnapshots')) @@ -557,14 +563,24 @@ export default function PresentationTool(props: { {controller && ( - + {LIVE_DRAFT_EVENTS_ENABLED ? ( + + ) : ( + + )} )} {visualEditingComlink && params.id && params.type && ( diff --git a/packages/presentation/src/constants.ts b/packages/presentation/src/constants.ts index 673fd1ef3b..41aa21ac35 100644 --- a/packages/presentation/src/constants.ts +++ b/packages/presentation/src/constants.ts @@ -26,6 +26,7 @@ export const LIVE_QUERY_CACHE_SIZE = 2048 declare global { const PRESENTATION_ENABLE_QRCODE: unknown + const PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS: unknown } // Feature flag that disables the new QRCode Preview URL menu @@ -34,3 +35,10 @@ export const QRCODE_ENABLED = ? PRESENTATION_ENABLE_QRCODE === 'true' : // @ts-expect-error: env vars are not typed process.env.SANITY_STUDIO_PRESENTATION_ENABLE_QRCODE === 'true' + +// Feature flag that uses the new Live Draft Content API instead of the Listen API + Mendoza events +export const LIVE_DRAFT_EVENTS_ENABLED = + typeof PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS === 'string' + ? PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS === 'true' + : // @ts-expect-error: env vars are not typed + process.env.SANITY_STUDIO_PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS === 'true' diff --git a/packages/presentation/src/loader/LiveQueries.tsx b/packages/presentation/src/loader/LiveQueries.tsx new file mode 100644 index 0000000000..fcc6045bc8 --- /dev/null +++ b/packages/presentation/src/loader/LiveQueries.tsx @@ -0,0 +1,488 @@ +import { + createCompatibilityActors, + getQueryCacheKey, + type LoaderControllerMsg, + type LoaderNodeMsg, +} from '@repo/visual-editing-helpers' +import {useQueryParams, useRevalidate} from '@repo/visual-editing-helpers/hooks' +import { + createClient, + type ClientPerspective, + type ContentSourceMap, + type LiveEventMessage, + type QueryParams, + type SyncTag, +} from '@sanity/client' +import {applySourceDocuments, getPublishedId} from '@sanity/client/csm' +import { + createChannelMachine, + type ConnectionInstance, + type Controller, + type StatusEvent, +} from '@sanity/comlink' +import isEqual from 'fast-deep-equal' +// import {createPreviewSecret} from '@sanity/preview-url-secret/create-secret' +import {memo, useDeferredValue, useEffect, useMemo, useState} from 'react' +import { + useClient, + // useCurrentUser, + useDataset, + useProjectId, + type SanityClient, + type SanityDocument, +} from 'sanity' +import {useEffectEvent} from 'use-effect-event' +// import {useEffectEvent} from 'use-effect-event' +import {MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL} from '../constants' +import type { + LiveQueriesState, + LiveQueriesStateValue, + LoaderConnection, + PresentationPerspective, +} from '../types' +import type {DocumentOnPage} from '../useDocumentsOnPage' + +export interface LoaderQueriesProps { + liveDocument: Partial | null | undefined + controller: Controller | undefined + perspective: ClientPerspective + onLoadersConnection: (event: StatusEvent) => void + onDocumentsOnPage: ( + key: string, + perspective: PresentationPerspective, + state: DocumentOnPage[], + ) => void +} + +export default function LoaderQueries(props: LoaderQueriesProps): JSX.Element { + const { + liveDocument: _liveDocument, + controller, + perspective: activePerspective, + onLoadersConnection, + onDocumentsOnPage, + } = props + + const [comlink, setComlink] = useState>() + const [liveQueries, setLiveQueries] = useState({}) + + const projectId = useProjectId() + const dataset = useDataset() + + useEffect(() => { + const interval = setInterval( + () => + setLiveQueries((liveQueries) => { + if (Object.keys(liveQueries).length < 1) { + return liveQueries + } + + const now = Date.now() + const hasAnyExpired = Object.values(liveQueries).some( + (liveQuery) => + liveQuery.heartbeat !== false && now > liveQuery.receivedAt + liveQuery.heartbeat, + ) + if (!hasAnyExpired) { + return liveQueries + } + const next = {} as LiveQueriesState + for (const [key, value] of Object.entries(liveQueries)) { + if (value.heartbeat !== false && now > value.receivedAt + value.heartbeat) { + continue + } + next[key] = value + } + return next + }), + MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL, + ) + return () => clearInterval(interval) + }, []) + + useEffect(() => { + if (controller) { + const comlink = controller.createConnection( + { + name: 'presentation', + connectTo: 'loaders', + heartbeat: true, + }, + createChannelMachine().provide({ + actors: createCompatibilityActors(), + }), + ) + setComlink(comlink) + + comlink.onStatus(onLoadersConnection) + + comlink.on('loader/documents', (data) => { + if (data.projectId === projectId && data.dataset === dataset) { + onDocumentsOnPage( + 'loaders', + // eslint-disable-next-line @typescript-eslint/no-explicit-any + data.perspective as unknown as any, + data.documents, + ) + } + }) + + comlink.on('loader/query-listen', (data) => { + if (data.projectId === projectId && data.dataset === dataset) { + if ( + typeof data.heartbeat === 'number' && + data.heartbeat < MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL + ) { + throw new Error( + `Loader query listen heartbeat interval must be at least ${MIN_LOADER_QUERY_LISTEN_HEARTBEAT_INTERVAL}ms`, + ) + } + setLiveQueries((prev) => ({ + ...prev, + [getQueryCacheKey(data.query, data.params)]: { + perspective: data.perspective, + query: data.query, + params: data.params, + receivedAt: Date.now(), + heartbeat: data.heartbeat ?? false, + } satisfies LiveQueriesStateValue, + })) + } + }) + + return comlink.start() + } + return + }, [controller, dataset, onDocumentsOnPage, onLoadersConnection, projectId]) + + // const currentUser = useCurrentUser() + // const handleCreatePreviewUrlSecret = useEffectEvent( + // async ({projectId, dataset}: {projectId: string; dataset: string}) => { + // try { + // // eslint-disable-next-line no-console + // console.log('Creating preview URL secret for ', {projectId, dataset}) + // const {secret} = await createPreviewSecret( + // client, + // '@sanity/presentation', + // typeof window === 'undefined' ? '' : location.href, + // currentUser?.id, + // ) + // return {secret} + // } catch (err) { + // // eslint-disable-next-line no-console + // console.error('Failed to generate preview URL secret', err) + // return {secret: null} + // } + // }, + // ) + // useEffect(() => { + // return comlink?.on('loader/fetch-preview-url-secret', (data) => + // handleCreatePreviewUrlSecret(data), + // ) + // }, [comlink, handleCreatePreviewUrlSecret]) + + const [syncTagsInUse] = useState(() => new Set()) + const [lastLiveEventId, setLastLiveEventId] = useState(null) + const studioClient = useClient({apiVersion: '2023-10-16'}) + const clientConfig = useMemo(() => studioClient.config(), [studioClient]) + const client = useMemo( + () => + studioClient.withConfig({ + resultSourceMap: 'withKeyArraySelector', + }), + [studioClient], + ) + useEffect(() => { + if (comlink) { + const {projectId, dataset} = clientConfig + // @todo - Can this be migrated/deprecated in favour of emitting + // `presentation/perspective` at a higher level? + comlink.post({ + type: 'loader/perspective', + data: { + projectId: projectId!, + dataset: dataset!, + perspective: activePerspective, + }, + }) + } + }, [comlink, clientConfig, activePerspective]) + + const handleSyncTags = useEffectEvent((event: LiveEventMessage) => { + const flattenedSyncTags = Array.from(syncTagsInUse).flat() + const hasMatchingTags = event.tags.some((tag) => flattenedSyncTags.includes(tag)) + if (hasMatchingTags) { + setLastLiveEventId(event.id) + } else { + // eslint-disable-next-line no-console + console.log('No matching tags found', event.tags, {flattenedSyncTags}) + } + }) + useEffect(() => { + const liveClient = createClient(client.config()).withConfig({ + // Necessary for the live drafts to work + apiVersion: 'vX', + }) + const subscription = liveClient.live.events({includeDrafts: true}).subscribe({ + next: (event) => { + if (event.type === 'message') { + handleSyncTags(event) + } else if (event.type === 'restart') { + setLastLiveEventId(event.id) + } else if (event.type === 'reconnect') { + setLastLiveEventId(null) + } + }, + // eslint-disable-next-line no-console + error: (err) => console.error('Error validating EventSource URL:', err), + }) + return () => subscription.unsubscribe() + }, [client, handleSyncTags]) + + /** + * Defer the liveDocument to avoid unnecessary rerenders on rapid edits + */ + const liveDocument = useDeferredValue(_liveDocument) + + return ( + <> + {Object.entries(liveQueries).map(([key, {query, params, perspective}]) => ( + + ))} + + ) +} + +interface SharedProps { + /** + * The Sanity client to use for fetching data and listening to mutations. + */ + client: SanityClient +} + +interface QuerySubscriptionProps + extends Pick { + projectId: string + dataset: string + perspective: ClientPerspective + query: string + params: QueryParams + comlink: LoaderConnection | undefined + syncTagsInUse: Set +} +function QuerySubscriptionComponent(props: QuerySubscriptionProps) { + const { + projectId, + dataset, + perspective, + query, + client, + liveDocument, + comlink, + lastLiveEventId, + syncTagsInUse, + } = props + + const params = useQueryParams(props.params) + const { + result, + resultSourceMap, + syncTags: tags, + } = useQuerySubscription({ + client, + liveDocument, + params, + perspective, + query, + lastLiveEventId, + }) || {} + + const handleQueryChange = useEffectEvent( + ( + comlink: LoaderConnection | undefined, + perspective: ClientPerspective, + query: string, + params: QueryParams, + result: unknown, + resultSourceMap: ContentSourceMap | undefined, + tags: `s1:${string}`[] | undefined, + ) => { + comlink?.post({ + type: 'loader/query-change', + data: { + projectId, + dataset, + perspective, + query, + params, + result, + resultSourceMap, + tags, + }, + }) + }, + ) + useEffect(() => { + if (resultSourceMap) { + handleQueryChange(comlink, perspective, query, params, result, resultSourceMap, tags) + } + if (Array.isArray(tags)) { + syncTagsInUse.add(tags) + return () => { + syncTagsInUse.delete(tags) + } + } + + return + }, [ + comlink, + handleQueryChange, + params, + perspective, + query, + result, + resultSourceMap, + syncTagsInUse, + tags, + ]) + + return null +} +const QuerySubscription = memo(QuerySubscriptionComponent) +QuerySubscription.displayName = 'Memo(QuerySubscription)' + +interface UseQuerySubscriptionProps extends Required> { + liveDocument: Partial | null | undefined + query: string + params: QueryParams + perspective: ClientPerspective + lastLiveEventId: string | null +} +function useQuerySubscription(props: UseQuerySubscriptionProps) { + const {liveDocument, client, query, params, perspective, lastLiveEventId} = props + const [snapshot, setSnapshot] = useState<{ + result: unknown + resultSourceMap?: ContentSourceMap + syncTags?: SyncTag[] + lastLiveEventId: string | null + } | null>(null) + // Make sure any async errors bubble up to the nearest error boundary + const [error, setError] = useState(null) + if (error) throw error + + const [revalidate, startRefresh] = useRevalidate({ + // Refresh interval is set to zero as we're using the Live Draft Content API to revalidate queries + refreshInterval: 0, + }) + const shouldRefetch = + revalidate === 'refresh' || + revalidate === 'inflight' || + lastLiveEventId !== snapshot?.lastLiveEventId + useEffect(() => { + if (!shouldRefetch) { + return + } + + let fulfilled = false + let fetching = false + const controller = new AbortController() + // eslint-disable-next-line no-inner-declarations + async function effect() { + const {signal} = controller + fetching = true + const {result, resultSourceMap, syncTags} = await client.fetch(query, params, { + lastLiveEventId, + tag: 'presentation-loader', + signal, + perspective, + filterResponse: false, + }) + fetching = false + + if (!signal.aborted) { + setSnapshot((prev) => ({ + result: isEqual(prev?.result, result) ? prev?.result : result, + resultSourceMap: isEqual(prev?.resultSourceMap, resultSourceMap) + ? prev?.resultSourceMap + : resultSourceMap, + syncTags: isEqual(prev?.syncTags, syncTags) ? prev?.syncTags : syncTags, + lastLiveEventId, + })) + fulfilled = true + } + } + const onFinally = startRefresh() + effect() + .catch((error) => { + fetching = false + if (error.name !== 'AbortError') { + setError(error) + } + }) + .finally(onFinally) + return () => { + if (!fulfilled && !fetching) { + controller.abort() + } + } + }, [client, lastLiveEventId, params, perspective, query, shouldRefetch, startRefresh]) + + const {result, resultSourceMap, syncTags} = snapshot ?? {} + return useMemo(() => { + if (liveDocument && resultSourceMap) { + return { + result: turboChargeResultIfSourceMap(liveDocument, result, perspective, resultSourceMap), + resultSourceMap, + syncTags, + } + } + return {result, resultSourceMap, syncTags} + }, [liveDocument, perspective, result, resultSourceMap, syncTags]) +} + +export function turboChargeResultIfSourceMap( + liveDocument: Partial | null | undefined, + result: T, + perspective: ClientPerspective, + resultSourceMap?: ContentSourceMap, +): T { + if (perspective === 'raw') { + throw new Error('turboChargeResultIfSourceMap does not support raw perspective') + } + return applySourceDocuments( + result, + resultSourceMap, + (sourceDocument) => { + // If there's a displayed document, always prefer it + if ( + // If _projectId is set, it's a cross dataset reference and we should skip it + !sourceDocument._projectId && + liveDocument?._id && + getPublishedId(liveDocument._id) === getPublishedId(sourceDocument._id) + ) { + return liveDocument + } + return undefined + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (changedValue: any, {previousValue}) => { + if (typeof changedValue === 'number' && typeof previousValue === 'string') { + // If the string() function was used in the query, we need to convert the source value to a string as well + return `${changedValue}` + } + return changedValue + }, + perspective, + ) +} diff --git a/packages/presentation/src/loader/LoaderQueries.tsx b/packages/presentation/src/loader/LoaderQueries.tsx index 33e5bdd69a..0d7acf0496 100644 --- a/packages/presentation/src/loader/LoaderQueries.tsx +++ b/packages/presentation/src/loader/LoaderQueries.tsx @@ -19,7 +19,6 @@ import { type Controller, type StatusEvent, } from '@sanity/comlink' -// import {createPreviewSecret} from '@sanity/preview-url-secret/create-secret' import {applyPatch} from 'mendoza' import LRUCache from 'mnemonist/lru-cache-with-delete' import {memo, useEffect, useMemo, useState} from 'react' @@ -31,7 +30,6 @@ import { type SanityClient, type SanityDocument, } from 'sanity' -// import {useEffectEvent} from 'use-effect-event' import { LIVE_QUERY_CACHE_BATCH_SIZE, LIVE_QUERY_CACHE_SIZE, @@ -159,32 +157,6 @@ export default function LoaderQueries(props: LoaderQueriesProps): JSX.Element { return }, [controller, dataset, onDocumentsOnPage, onLoadersConnection, projectId]) - // const currentUser = useCurrentUser() - // const handleCreatePreviewUrlSecret = useEffectEvent( - // async ({projectId, dataset}: {projectId: string; dataset: string}) => { - // try { - // // eslint-disable-next-line no-console - // console.log('Creating preview URL secret for ', {projectId, dataset}) - // const {secret} = await createPreviewSecret( - // client, - // '@sanity/presentation', - // typeof window === 'undefined' ? '' : location.href, - // currentUser?.id, - // ) - // return {secret} - // } catch (err) { - // // eslint-disable-next-line no-console - // console.error('Failed to generate preview URL secret', err) - // return {secret: null} - // } - // }, - // ) - // useEffect(() => { - // return comlink?.on('loader/fetch-preview-url-secret', (data) => - // handleCreatePreviewUrlSecret(data), - // ) - // }, [comlink, handleCreatePreviewUrlSecret]) - const [cache] = useState(() => new LRUCache(LIVE_QUERY_CACHE_SIZE)) const studioClient = useClient({apiVersion: '2023-10-16'}) const clientConfig = useMemo(() => studioClient.config(), [studioClient]) diff --git a/packages/presentation/src/overlays/PostMessageDocuments.tsx b/packages/presentation/src/overlays/PostMessageDocuments.tsx index d35f25f3fe..40f1f761e2 100644 --- a/packages/presentation/src/overlays/PostMessageDocuments.tsx +++ b/packages/presentation/src/overlays/PostMessageDocuments.tsx @@ -23,7 +23,7 @@ const PostMessageDocuments: FunctionComponent = (prop events: ['welcome', 'mutation', 'reconnect'], includePreviousRevision: false, includeResult: false, - tag: 'presentation-test', + tag: 'presentation-documents', visibility: 'transaction', }, ) diff --git a/packages/presentation/turbo.json b/packages/presentation/turbo.json index 4a1d9a5531..8f8ce0fa04 100644 --- a/packages/presentation/turbo.json +++ b/packages/presentation/turbo.json @@ -3,10 +3,17 @@ "extends": ["//"], "tasks": { "build": { - "env": ["GITHUB_ACTIONS", "PRESENTATION_ENABLE_QRCODE"] + "env": [ + "GITHUB_ACTIONS", + "PRESENTATION_ENABLE_QRCODE", + "PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS" + ] }, "dev": { - "env": ["SANITY_STUDIO_PRESENTATION_ENABLE_QRCODE"], + "env": [ + "SANITY_STUDIO_PRESENTATION_ENABLE_QRCODE", + "SANITY_STUDIO_PRESENTATION_ENABLE_LIVE_DRAFT_EVENTS" + ], "persistent": false } } From 66921e1c3a397d5d3d6026779c676581b1b8d870 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:18:30 +0000 Subject: [PATCH 04/18] chore(release): publish canary [skip ci] --- packages/comlink/package.json | 2 +- packages/core-loader/package.json | 2 +- packages/insert-menu/package.json | 2 +- packages/next-loader/package.json | 2 +- packages/presentation/package.json | 2 +- packages/preview-kit-compat/package.json | 2 +- packages/preview-url-secret/package.json | 2 +- packages/react-loader/package.json | 2 +- packages/svelte-loader/package.json | 2 +- packages/visual-editing/package.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/comlink/package.json b/packages/comlink/package.json index 89a3529cf7..cdb233b369 100644 --- a/packages/comlink/package.json +++ b/packages/comlink/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/comlink", - "version": "0.0.2-canary.63", + "version": "0.0.2-canary.64", "keywords": [ "sanity.io", "postmessage" diff --git a/packages/core-loader/package.json b/packages/core-loader/package.json index 7d53f7f094..420939ff44 100644 --- a/packages/core-loader/package.json +++ b/packages/core-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/core-loader", - "version": "1.6.24-canary.65", + "version": "1.6.24-canary.66", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/core-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/insert-menu/package.json b/packages/insert-menu/package.json index 2798ff610d..319da51f34 100644 --- a/packages/insert-menu/package.json +++ b/packages/insert-menu/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/insert-menu", - "version": "1.0.10-canary.65", + "version": "1.0.10-canary.66", "description": "", "keywords": [], "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/insert-menu#readme", diff --git a/packages/next-loader/package.json b/packages/next-loader/package.json index 022a5e3f28..98347585ef 100644 --- a/packages/next-loader/package.json +++ b/packages/next-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/next-loader", - "version": "0.0.1-canary.49", + "version": "0.0.1-canary.50", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/next-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/presentation/package.json b/packages/presentation/package.json index 6afe3d40cf..b5ac602641 100644 --- a/packages/presentation/package.json +++ b/packages/presentation/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/presentation", - "version": "1.16.6-canary.65", + "version": "1.16.6-canary.66", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/presentation#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/preview-kit-compat/package.json b/packages/preview-kit-compat/package.json index 05d6e3d71d..2a95218f3f 100644 --- a/packages/preview-kit-compat/package.json +++ b/packages/preview-kit-compat/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/preview-kit-compat", - "version": "1.5.8-canary.65", + "version": "1.5.8-canary.66", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/preview-kit-compat#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/preview-url-secret/package.json b/packages/preview-url-secret/package.json index 84c5be8d20..d6d260c273 100644 --- a/packages/preview-url-secret/package.json +++ b/packages/preview-url-secret/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/preview-url-secret", - "version": "1.6.22-canary.65", + "version": "1.6.22-canary.66", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/preview-url-secret#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/react-loader/package.json b/packages/react-loader/package.json index a95d978359..9416ef0fa9 100644 --- a/packages/react-loader/package.json +++ b/packages/react-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/react-loader", - "version": "1.10.8-canary.65", + "version": "1.10.8-canary.66", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/react-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/svelte-loader/package.json b/packages/svelte-loader/package.json index 104af38c3e..d2d8b5ad85 100644 --- a/packages/svelte-loader/package.json +++ b/packages/svelte-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/svelte-loader", - "version": "1.11.38-canary.65", + "version": "1.11.38-canary.66", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/svelte-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/visual-editing/package.json b/packages/visual-editing/package.json index 44bb4589d6..c24aca2c21 100644 --- a/packages/visual-editing/package.json +++ b/packages/visual-editing/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/visual-editing", - "version": "2.1.11-canary.65", + "version": "2.1.11-canary.66", "keywords": [ "sanity.io", "visual-editing", From 996f5de1b153e2a43b10564c9cf38d1eed15aec6 Mon Sep 17 00:00:00 2001 From: Cody Olsen Date: Thu, 17 Oct 2024 02:35:15 +0200 Subject: [PATCH 05/18] fix: tag live api --- packages/presentation/package.json | 1 + .../presentation/src/loader/LiveQueries.tsx | 29 ++++++------ pnpm-lock.yaml | 46 ++++++++++++++++--- 3 files changed, 56 insertions(+), 20 deletions(-) diff --git a/packages/presentation/package.json b/packages/presentation/package.json index b5ac602641..61ce08b54b 100644 --- a/packages/presentation/package.json +++ b/packages/presentation/package.json @@ -47,6 +47,7 @@ "root": true }, "dependencies": { + "@sanity/client": "6.22.2-canary.1", "@sanity/comlink": "workspace:*", "@sanity/icons": "^3.4.0", "@sanity/preview-url-secret": "workspace:*", diff --git a/packages/presentation/src/loader/LiveQueries.tsx b/packages/presentation/src/loader/LiveQueries.tsx index fcc6045bc8..9007c2baf4 100644 --- a/packages/presentation/src/loader/LiveQueries.tsx +++ b/packages/presentation/src/loader/LiveQueries.tsx @@ -222,19 +222,21 @@ export default function LoaderQueries(props: LoaderQueriesProps): JSX.Element { // Necessary for the live drafts to work apiVersion: 'vX', }) - const subscription = liveClient.live.events({includeDrafts: true}).subscribe({ - next: (event) => { - if (event.type === 'message') { - handleSyncTags(event) - } else if (event.type === 'restart') { - setLastLiveEventId(event.id) - } else if (event.type === 'reconnect') { - setLastLiveEventId(null) - } - }, - // eslint-disable-next-line no-console - error: (err) => console.error('Error validating EventSource URL:', err), - }) + const subscription = liveClient.live + .events({includeDrafts: true, tag: 'presentation-loader'}) + .subscribe({ + next: (event) => { + if (event.type === 'message') { + handleSyncTags(event) + } else if (event.type === 'restart') { + setLastLiveEventId(event.id) + } else if (event.type === 'reconnect') { + setLastLiveEventId(null) + } + }, + // eslint-disable-next-line no-console + error: (err) => console.error('Error validating EventSource URL:', err), + }) return () => subscription.unsubscribe() }, [client, handleSyncTags]) @@ -407,6 +409,7 @@ function useQuerySubscription(props: UseQuerySubscriptionProps) { signal, perspective, filterResponse: false, + returnQuery: false, }) fetching = false diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b80652392a..c8f442ed77 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1189,6 +1189,9 @@ importers: packages/presentation: dependencies: + '@sanity/client': + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1 '@sanity/comlink': specifier: workspace:* version: link:../comlink @@ -1253,9 +1256,6 @@ importers: '@repo/visual-editing-helpers': specifier: workspace:* version: link:../visual-editing-helpers - '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) '@sanity/pkg-utils': specifier: 6.11.3 version: 6.11.3(@types/babel__core@7.20.5)(@types/node@22.5.5)(typescript@5.6.3) @@ -4417,6 +4417,10 @@ packages: resolution: {integrity: sha512-GrLmwREcw4Us6kBaqoXyLVVl7xAELf/4Qzvv0nGxIIqCkDWQof6nL55ar6m1W9hF+eHKyRTkktWSkZ/+RklCuw==} engines: {node: '>=14.18'} + '@sanity/client@6.22.2-canary.1': + resolution: {integrity: sha512-hwcvmVzZz8WJiYSZAQLWiSNO70exc9dVLMZMiZ3TjaVK52pzdAePkIBPOKAUq77oYPNNp7aQ0DnAo0H/KrfnlA==} + engines: {node: '>=14.18'} + '@sanity/codegen@3.61.0': resolution: {integrity: sha512-dZ7jkZvlEHC3tcu9KTT4Uo1gr80PvRqO2D0/fQfChR3yqbWfIotXVnUkkhKGvKqYac5GgMjYGGsOm1yyUUNBzA==} engines: {node: '>=18'} @@ -16249,6 +16253,26 @@ snapshots: - react-dom - supports-color + '@portabletext/editor@1.1.4(@sanity/block-tools@3.61.0(debug@4.3.7))(@sanity/schema@3.61.0(debug@4.3.7))(@sanity/types@3.61.0)(@sanity/util@3.61.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + dependencies: + '@portabletext/patches': 1.1.0 + '@sanity/block-tools': 3.61.0(debug@4.3.7) + '@sanity/schema': 3.61.0(debug@4.3.7) + '@sanity/types': 3.61.0(debug@4.3.7) + '@sanity/util': 3.61.0(debug@4.3.7) + debug: 4.3.7 + is-hotkey-esm: 1.0.0 + lodash: 4.17.21 + react: 18.3.1 + rxjs: 7.8.1 + slate: 0.103.0 + slate-react: 0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0) + styled-components: 6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + xstate: 5.18.2 + transitivePeerDependencies: + - react-dom + - supports-color + '@portabletext/editor@1.1.4(@sanity/block-tools@3.61.0(debug@4.3.7))(@sanity/schema@3.61.0(debug@4.3.7))(@sanity/types@3.61.0)(@sanity/util@3.61.0)(react-dom@19.0.0-rc-fb9a90fa48-20240614(react@18.3.1))(react@18.3.1)(rxjs@7.8.1)(styled-components@6.1.13(react-dom@19.0.0-rc-fb9a90fa48-20240614(react@18.3.1))(react@18.3.1))': dependencies: '@portabletext/patches': 1.1.0 @@ -16852,6 +16876,14 @@ snapshots: transitivePeerDependencies: - debug + '@sanity/client@6.22.2-canary.1': + dependencies: + '@sanity/eventsource': 5.0.2 + get-it: 8.6.5(debug@4.3.7) + rxjs: 7.8.1 + transitivePeerDependencies: + - debug + '@sanity/codegen@3.61.0': dependencies: '@babel/core': 7.25.8 @@ -17009,7 +17041,7 @@ snapshots: react-copy-to-clipboard: 5.1.0(react@19.0.0-rc-fb9a90fa48-20240614) react-dom: 19.0.0-rc-fb9a90fa48-20240614(react@19.0.0-rc-fb9a90fa48-20240614) - '@sanity/insert-menu@1.0.9(@sanity/types@3.61.0(debug@4.3.7))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@sanity/insert-menu@1.0.9(@sanity/types@3.61.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: '@sanity/icons': 3.4.0(react@18.3.1) '@sanity/types': 3.61.0(debug@4.3.7) @@ -26907,7 +26939,7 @@ snapshots: '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@dnd-kit/utilities': 3.2.2(react@18.3.1) '@juggle/resize-observer': 3.4.0 - '@portabletext/editor': 1.1.4(@sanity/block-tools@3.61.0(debug@4.3.7))(@sanity/schema@3.61.0(debug@4.3.7))(@sanity/types@3.61.0(debug@4.3.7))(@sanity/util@3.61.0(debug@4.3.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@portabletext/editor': 1.1.4(@sanity/block-tools@3.61.0(debug@4.3.7))(@sanity/schema@3.61.0(debug@4.3.7))(@sanity/types@3.61.0)(@sanity/util@3.61.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@portabletext/react': 3.1.0(react@18.3.1) '@rexxars/react-json-inspector': 8.0.1(react@18.3.1) '@sanity/asset-utils': 2.0.6 @@ -26923,7 +26955,7 @@ snapshots: '@sanity/icons': 3.4.0(react@18.3.1) '@sanity/image-url': 1.0.2 '@sanity/import': 3.37.5 - '@sanity/insert-menu': 1.0.9(@sanity/types@3.61.0(debug@4.3.7))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@sanity/insert-menu': 1.0.9(@sanity/types@3.61.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@sanity/logos': 2.1.13(@sanity/color@3.0.6)(react@18.3.1) '@sanity/migrate': 3.61.0 '@sanity/mutator': 3.61.0 @@ -27059,7 +27091,7 @@ snapshots: '@sanity/icons': 3.4.0(react@18.3.1) '@sanity/image-url': 1.0.2 '@sanity/import': 3.37.5 - '@sanity/insert-menu': 1.0.9(@sanity/types@3.61.0(debug@4.3.7))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@sanity/insert-menu': 1.0.9(@sanity/types@3.61.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@sanity/logos': 2.1.13(@sanity/color@3.0.6)(react@18.3.1) '@sanity/migrate': 3.61.0 '@sanity/mutator': 3.61.0 From 1d68fd9ce2a8b4d7f8b06bc3c93e393f6dfebce2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:39:05 +0000 Subject: [PATCH 06/18] chore(release): publish canary [skip ci] --- packages/comlink/package.json | 2 +- packages/core-loader/package.json | 2 +- packages/insert-menu/package.json | 2 +- packages/next-loader/package.json | 2 +- packages/presentation/package.json | 2 +- packages/preview-kit-compat/package.json | 2 +- packages/preview-url-secret/package.json | 2 +- packages/react-loader/package.json | 2 +- packages/svelte-loader/package.json | 2 +- packages/visual-editing/package.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/comlink/package.json b/packages/comlink/package.json index cdb233b369..db43484da6 100644 --- a/packages/comlink/package.json +++ b/packages/comlink/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/comlink", - "version": "0.0.2-canary.64", + "version": "0.0.2-canary.65", "keywords": [ "sanity.io", "postmessage" diff --git a/packages/core-loader/package.json b/packages/core-loader/package.json index 420939ff44..a41a858224 100644 --- a/packages/core-loader/package.json +++ b/packages/core-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/core-loader", - "version": "1.6.24-canary.66", + "version": "1.6.24-canary.67", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/core-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/insert-menu/package.json b/packages/insert-menu/package.json index 319da51f34..97c2ad22e9 100644 --- a/packages/insert-menu/package.json +++ b/packages/insert-menu/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/insert-menu", - "version": "1.0.10-canary.66", + "version": "1.0.10-canary.67", "description": "", "keywords": [], "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/insert-menu#readme", diff --git a/packages/next-loader/package.json b/packages/next-loader/package.json index 98347585ef..22e9e0f17f 100644 --- a/packages/next-loader/package.json +++ b/packages/next-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/next-loader", - "version": "0.0.1-canary.50", + "version": "0.0.1-canary.51", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/next-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/presentation/package.json b/packages/presentation/package.json index 61ce08b54b..b4c3b06ca4 100644 --- a/packages/presentation/package.json +++ b/packages/presentation/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/presentation", - "version": "1.16.6-canary.66", + "version": "1.16.6-canary.67", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/presentation#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/preview-kit-compat/package.json b/packages/preview-kit-compat/package.json index 2a95218f3f..bd0b664b6a 100644 --- a/packages/preview-kit-compat/package.json +++ b/packages/preview-kit-compat/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/preview-kit-compat", - "version": "1.5.8-canary.66", + "version": "1.5.8-canary.67", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/preview-kit-compat#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/preview-url-secret/package.json b/packages/preview-url-secret/package.json index d6d260c273..72a5600022 100644 --- a/packages/preview-url-secret/package.json +++ b/packages/preview-url-secret/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/preview-url-secret", - "version": "1.6.22-canary.66", + "version": "1.6.22-canary.67", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/preview-url-secret#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/react-loader/package.json b/packages/react-loader/package.json index 9416ef0fa9..7538825fe8 100644 --- a/packages/react-loader/package.json +++ b/packages/react-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/react-loader", - "version": "1.10.8-canary.66", + "version": "1.10.8-canary.67", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/react-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/svelte-loader/package.json b/packages/svelte-loader/package.json index d2d8b5ad85..82f36e3884 100644 --- a/packages/svelte-loader/package.json +++ b/packages/svelte-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/svelte-loader", - "version": "1.11.38-canary.66", + "version": "1.11.38-canary.67", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/svelte-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/visual-editing/package.json b/packages/visual-editing/package.json index c24aca2c21..c33958de51 100644 --- a/packages/visual-editing/package.json +++ b/packages/visual-editing/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/visual-editing", - "version": "2.1.11-canary.66", + "version": "2.1.11-canary.67", "keywords": [ "sanity.io", "visual-editing", From cb5cb235f9bb240bcf10da4049f5310d15c5df34 Mon Sep 17 00:00:00 2001 From: Cody Olsen Date: Thu, 17 Oct 2024 03:10:00 +0200 Subject: [PATCH 07/18] refactor(SanityLiveStream): workaround sequence issue --- .../live-stream/SanityLiveStream.tsx | 39 ++++++++----------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/packages/next-loader/src/client-components/live-stream/SanityLiveStream.tsx b/packages/next-loader/src/client-components/live-stream/SanityLiveStream.tsx index 00f24301f4..870cedb651 100644 --- a/packages/next-loader/src/client-components/live-stream/SanityLiveStream.tsx +++ b/packages/next-loader/src/client-components/live-stream/SanityLiveStream.tsx @@ -71,10 +71,7 @@ export default function SanityLiveStream(props: SanityLiveStreamProps): React.JS }) }) const handleQueryChange = useEffectEvent( - ( - event: Extract['data'], - signal: AbortSignal, - ) => { + (event: Extract['data']) => { if ( isEqual( { @@ -114,38 +111,34 @@ export default function SanityLiveStream(props: SanityLiveStreamProps): React.JS // ), // ) // eslint-disable-next-line no-console - console.log('rendering with server action: render children start') + console.groupCollapsed('rendering with server action') ;( props.children({ data, sourceMap: resultSourceMap!, tags: tags || [], }) as Promise - ).then( - (children) => { - if (signal.aborted) return - // eslint-disable-next-line no-console - console.log('rendering with server action: render children end, setting state') - startTransition(() => setChildren(children)) - }, - (reason: unknown) => { - if (signal.aborted) return - // eslint-disable-next-line no-console - console.error('rendering with server action: render children error', reason) - }, ) + .then( + (children) => { + // eslint-disable-next-line no-console + console.log('startTransition(() => setChildren(children))') + startTransition(() => setChildren(children)) + }, + (reason: unknown) => { + // eslint-disable-next-line no-console + console.error('rendering with server action: render children error', reason) + }, + ) + // eslint-disable-next-line no-console + .finally(() => console.groupEnd()) } }, ) useEffect(() => { if (!comlink) return - let controller: AbortController | undefined - const unsubscribe = comlink.on('loader/query-change', (event) => { - controller?.abort() - controller = new AbortController() - handleQueryChange(event, controller.signal) - }) + const unsubscribe = comlink.on('loader/query-change', handleQueryChange) const interval = setInterval(() => handleQueryHeartbeat(comlink), LISTEN_HEARTBEAT_INTERVAL) return () => { clearInterval(interval) From 275195b7f0e6f99a2d8fd734e6b5102caea20787 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 01:15:49 +0000 Subject: [PATCH 08/18] chore(release): publish canary [skip ci] --- packages/comlink/package.json | 2 +- packages/core-loader/package.json | 2 +- packages/insert-menu/package.json | 2 +- packages/next-loader/package.json | 2 +- packages/presentation/package.json | 2 +- packages/preview-kit-compat/package.json | 2 +- packages/preview-url-secret/package.json | 2 +- packages/react-loader/package.json | 2 +- packages/svelte-loader/package.json | 2 +- packages/visual-editing/package.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/comlink/package.json b/packages/comlink/package.json index db43484da6..81435b7841 100644 --- a/packages/comlink/package.json +++ b/packages/comlink/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/comlink", - "version": "0.0.2-canary.65", + "version": "0.0.2-canary.66", "keywords": [ "sanity.io", "postmessage" diff --git a/packages/core-loader/package.json b/packages/core-loader/package.json index a41a858224..576b210e49 100644 --- a/packages/core-loader/package.json +++ b/packages/core-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/core-loader", - "version": "1.6.24-canary.67", + "version": "1.6.24-canary.68", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/core-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/insert-menu/package.json b/packages/insert-menu/package.json index 97c2ad22e9..8ad4e33e2c 100644 --- a/packages/insert-menu/package.json +++ b/packages/insert-menu/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/insert-menu", - "version": "1.0.10-canary.67", + "version": "1.0.10-canary.68", "description": "", "keywords": [], "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/insert-menu#readme", diff --git a/packages/next-loader/package.json b/packages/next-loader/package.json index 22e9e0f17f..9e6cb17ccf 100644 --- a/packages/next-loader/package.json +++ b/packages/next-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/next-loader", - "version": "0.0.1-canary.51", + "version": "0.0.1-canary.52", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/next-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/presentation/package.json b/packages/presentation/package.json index b4c3b06ca4..b68f2a00cd 100644 --- a/packages/presentation/package.json +++ b/packages/presentation/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/presentation", - "version": "1.16.6-canary.67", + "version": "1.16.6-canary.68", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/presentation#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/preview-kit-compat/package.json b/packages/preview-kit-compat/package.json index bd0b664b6a..8c68be1e26 100644 --- a/packages/preview-kit-compat/package.json +++ b/packages/preview-kit-compat/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/preview-kit-compat", - "version": "1.5.8-canary.67", + "version": "1.5.8-canary.68", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/preview-kit-compat#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/preview-url-secret/package.json b/packages/preview-url-secret/package.json index 72a5600022..1190e94e00 100644 --- a/packages/preview-url-secret/package.json +++ b/packages/preview-url-secret/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/preview-url-secret", - "version": "1.6.22-canary.67", + "version": "1.6.22-canary.68", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/preview-url-secret#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/react-loader/package.json b/packages/react-loader/package.json index 7538825fe8..aeb7414676 100644 --- a/packages/react-loader/package.json +++ b/packages/react-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/react-loader", - "version": "1.10.8-canary.67", + "version": "1.10.8-canary.68", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/react-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/svelte-loader/package.json b/packages/svelte-loader/package.json index 82f36e3884..6477b0d650 100644 --- a/packages/svelte-loader/package.json +++ b/packages/svelte-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/svelte-loader", - "version": "1.11.38-canary.67", + "version": "1.11.38-canary.68", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/svelte-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/visual-editing/package.json b/packages/visual-editing/package.json index c33958de51..59e29eeb20 100644 --- a/packages/visual-editing/package.json +++ b/packages/visual-editing/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/visual-editing", - "version": "2.1.11-canary.67", + "version": "2.1.11-canary.68", "keywords": [ "sanity.io", "visual-editing", From 8c9b77f6f713b95b39faff32349bb3bc5c768cf8 Mon Sep 17 00:00:00 2001 From: Cody Olsen Date: Thu, 17 Oct 2024 03:23:39 +0200 Subject: [PATCH 09/18] chore: force the `@sanity/client` canary for now --- package.json | 2 + packages/presentation/package.json | 1 - pnpm-lock.yaml | 181 +++++++++++++++-------------- 3 files changed, 98 insertions(+), 86 deletions(-) diff --git a/package.json b/package.json index 38548b8375..8354db8551 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ }, "prettier": "@repo/prettier-config", "dependencies": { + "@sanity/client": "6.22.2-canary.1", "@sanity/types": "3.61.0", "@sanity/util": "3.61.0", "@sanity/vision": "3.61.0", @@ -56,6 +57,7 @@ ] }, "overrides": { + "@sanity/client": "$@sanity/client", "@sanity/comlink": "workspace:*", "@sanity/core-loader": "workspace:*", "@sanity/next-loader": "workspace:*", diff --git a/packages/presentation/package.json b/packages/presentation/package.json index b68f2a00cd..b048d7e594 100644 --- a/packages/presentation/package.json +++ b/packages/presentation/package.json @@ -47,7 +47,6 @@ "root": true }, "dependencies": { - "@sanity/client": "6.22.2-canary.1", "@sanity/comlink": "workspace:*", "@sanity/icons": "^3.4.0", "@sanity/preview-url-secret": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8f442ed77..4903e73340 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: + '@sanity/client': 6.22.2-canary.1 '@sanity/comlink': workspace:* '@sanity/core-loader': workspace:* '@sanity/next-loader': workspace:* @@ -24,6 +25,9 @@ importers: .: dependencies: + '@sanity/client': + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/types': specifier: 3.61.0 version: 3.61.0(debug@4.3.7) @@ -87,10 +91,10 @@ importers: version: link:../../packages/@repo/studio-url '@sanity/astro': specifier: ^3.1.6 - version: 3.1.6(@sanity/client@6.22.2)(@sanity/visual-editing@packages+visual-editing)(astro@4.16.5(@types/node@22.5.5)(rollup@4.24.0)(terser@5.33.0)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@22.5.5)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0)) + version: 3.1.6(@sanity/client@6.22.2-canary.1)(@sanity/visual-editing@packages+visual-editing)(astro@4.16.5(@types/node@22.5.5)(rollup@4.24.0)(terser@5.33.0)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@22.5.5)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0)) '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/image-url': specifier: ^1.0.2 version: 1.0.2 @@ -235,8 +239,8 @@ importers: specifier: workspace:* version: link:../../packages/@repo/studio-url '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/image-url': specifier: ^1.0.2 version: 1.0.2 @@ -284,7 +288,7 @@ importers: version: 14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-sanity: specifier: 9.7.0-canary.17 - version: 9.7.0-canary.17(@sanity/client@6.22.2)(@sanity/icons@3.4.0(react@18.3.1))(@sanity/types@3.61.0)(@sanity/ui@2.8.9(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)))(next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@20.8.7)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 9.7.0-canary.17(@sanity/client@6.22.2-canary.1)(@sanity/icons@3.4.0(react@18.3.1))(@sanity/types@3.61.0)(@sanity/ui@2.8.9(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)))(next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@20.8.7)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) postcss: specifier: 8.4.47 version: 8.4.47 @@ -320,8 +324,8 @@ importers: specifier: ^3.0.8 version: 3.0.8(@sanity/mutator@3.61.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(sanity@3.61.0(@types/node@22.5.5)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/preview-url-secret': specifier: workspace:* version: link:../../packages/preview-url-secret @@ -345,7 +349,7 @@ importers: version: 14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-sanity: specifier: ^9.5.4 - version: 9.5.4(@sanity/client@6.22.2)(@sanity/icons@3.4.0(react@18.3.1))(@sanity/types@3.61.0)(@sanity/ui@2.8.9(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)))(next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@22.5.5)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 9.5.4(@sanity/client@6.22.2-canary.1)(@sanity/icons@3.4.0(react@18.3.1))(@sanity/types@3.61.0)(@sanity/ui@2.8.9(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)))(next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@22.5.5)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) react: specifier: ^18.3.1 version: 18.3.1 @@ -420,8 +424,8 @@ importers: specifier: workspace:* version: link:../../packages/@repo/studio-url '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/presentation': specifier: workspace:* version: link:../../packages/presentation @@ -694,8 +698,8 @@ importers: specifier: workspace:* version: link:../../packages/@repo/prettier-config '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/presentation': specifier: workspace:* version: link:../../packages/presentation @@ -1050,8 +1054,8 @@ importers: specifier: workspace:* version: link:../visual-editing-helpers '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/comlink': specifier: workspace:* version: link:../comlink @@ -1160,8 +1164,8 @@ importers: specifier: workspace:* version: link:../visual-editing-helpers '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/pkg-utils': specifier: 6.11.3 version: 6.11.3(@types/babel__core@7.20.5)(@types/node@22.5.5)(typescript@5.6.3) @@ -1189,9 +1193,6 @@ importers: packages/presentation: dependencies: - '@sanity/client': - specifier: 6.22.2-canary.1 - version: 6.22.2-canary.1 '@sanity/comlink': specifier: workspace:* version: link:../comlink @@ -1256,6 +1257,9 @@ importers: '@repo/visual-editing-helpers': specifier: workspace:* version: link:../visual-editing-helpers + '@sanity/client': + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/pkg-utils': specifier: 6.11.3 version: 6.11.3(@types/babel__core@7.20.5)(@types/node@22.5.5)(typescript@5.6.3) @@ -1302,8 +1306,8 @@ importers: specifier: workspace:* version: link:../visual-editing-helpers '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/comlink': specifier: workspace:* version: link:../comlink @@ -1342,8 +1346,8 @@ importers: specifier: workspace:* version: link:../@repo/prettier-config '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/icons': specifier: ^3.4.0 version: 3.4.0(react@19.0.0-rc-fb9a90fa48-20240614) @@ -1382,8 +1386,8 @@ importers: specifier: workspace:* version: link:../visual-editing-helpers '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/pkg-utils': specifier: 6.11.3 version: 6.11.3(@types/babel__core@7.20.5)(@types/node@22.5.5)(typescript@5.6.3) @@ -1428,8 +1432,8 @@ importers: specifier: workspace:* version: link:../visual-editing-helpers '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/pkg-utils': specifier: 6.11.3 version: 6.11.3(@types/babel__core@7.20.5)(@types/node@22.5.5)(typescript@5.6.3) @@ -1501,8 +1505,8 @@ importers: specifier: workspace:* version: link:../visual-editing-helpers '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/color': specifier: ^3.0.6 version: 3.0.6 @@ -1615,8 +1619,8 @@ importers: specifier: workspace:* version: link:../@repo/prettier-config '@sanity/client': - specifier: ^6.22.2 - version: 6.22.2(debug@4.3.7) + specifier: 6.22.2-canary.1 + version: 6.22.2-canary.1(debug@4.3.7) '@sanity/comlink': specifier: workspace:* version: link:../comlink @@ -4392,7 +4396,7 @@ packages: resolution: {integrity: sha512-MmwUI1Nb+XeWvLzuuxas8cEvOIbnYma30cju3l/FMIv5XroavgEnW1ISISi99A/SAp4Z88AIRUY8r4krV7ypAw==} engines: {node: '>=18.14.1'} peerDependencies: - '@sanity/client': ^6.18.3 + '@sanity/client': 6.22.2-canary.1 '@sanity/visual-editing': workspace:* astro: ^2.0.0 || ^3.0.0 || ^4.0.0 react: ^18.2.0 @@ -4570,7 +4574,7 @@ packages: resolution: {integrity: sha512-rPU2KVuxAYCSuizwMk88EHmqKenypuP2+TgZ9O3GV30pZDyf44EJTSbjhYR0nRqU1GY1adS6rvQvDHkrwAr1Kg==} engines: {node: '>=18'} peerDependencies: - '@sanity/client': ^6.22.1 + '@sanity/client': 6.22.2-canary.1 react: ^18.0.0 || >=19.0.0-rc peerDependenciesMeta: react: @@ -9934,7 +9938,7 @@ packages: resolution: {integrity: sha512-ZIHNfqmhRjwqW/QjjBFAFhhGvDaEAEuj0tUskf3FgXG0G/QSbIuVuNfF7dExXJdd5rXVpZb/Vp7J39Ba6XYdjQ==} engines: {node: '>=18.18'} peerDependencies: - '@sanity/client': ^6.22.1 + '@sanity/client': 6.22.2-canary.1 '@sanity/icons': ^3.4.0 '@sanity/types': 3.61.0 '@sanity/ui': ^2.8.9 @@ -9948,7 +9952,7 @@ packages: resolution: {integrity: sha512-sEkMISpvPxbZIozr+HhNC4It0zLefZz+K3OG+/zB9yGXlKwO4rHNfOYKZbQrORgV8+6Q8AodM7vsglF8HgoKDw==} engines: {node: '>=18.18'} peerDependencies: - '@sanity/client': ^6.22.1 + '@sanity/client': 6.22.2-canary.1 '@sanity/icons': ^3.4.0 '@sanity/types': 3.61.0 '@sanity/ui': ^2.8.9 @@ -16098,7 +16102,7 @@ snapshots: dependencies: '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3) '@portabletext/types': 2.0.13 - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/core-loader': link:packages/core-loader '@sanity/preview-url-secret': link:packages/preview-url-secret '@sanity/visual-editing': link:packages/visual-editing @@ -16253,26 +16257,6 @@ snapshots: - react-dom - supports-color - '@portabletext/editor@1.1.4(@sanity/block-tools@3.61.0(debug@4.3.7))(@sanity/schema@3.61.0(debug@4.3.7))(@sanity/types@3.61.0)(@sanity/util@3.61.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': - dependencies: - '@portabletext/patches': 1.1.0 - '@sanity/block-tools': 3.61.0(debug@4.3.7) - '@sanity/schema': 3.61.0(debug@4.3.7) - '@sanity/types': 3.61.0(debug@4.3.7) - '@sanity/util': 3.61.0(debug@4.3.7) - debug: 4.3.7 - is-hotkey-esm: 1.0.0 - lodash: 4.17.21 - react: 18.3.1 - rxjs: 7.8.1 - slate: 0.103.0 - slate-react: 0.110.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(slate@0.103.0) - styled-components: 6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - xstate: 5.18.2 - transitivePeerDependencies: - - react-dom - - supports-color - '@portabletext/editor@1.1.4(@sanity/block-tools@3.61.0(debug@4.3.7))(@sanity/schema@3.61.0(debug@4.3.7))(@sanity/types@3.61.0)(@sanity/util@3.61.0)(react-dom@19.0.0-rc-fb9a90fa48-20240614(react@18.3.1))(react@18.3.1)(rxjs@7.8.1)(styled-components@6.1.13(react-dom@19.0.0-rc-fb9a90fa48-20240614(react@18.3.1))(react@18.3.1))': dependencies: '@portabletext/patches': 1.1.0 @@ -16797,9 +16781,9 @@ snapshots: - react-dom - react-is - '@sanity/astro@3.1.6(@sanity/client@6.22.2)(@sanity/visual-editing@packages+visual-editing)(astro@4.16.5(@types/node@22.5.5)(rollup@4.24.0)(terser@5.33.0)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@22.5.5)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))': + '@sanity/astro@3.1.6(@sanity/client@6.22.2-canary.1)(@sanity/visual-editing@packages+visual-editing)(astro@4.16.5(@types/node@22.5.5)(rollup@4.24.0)(terser@5.33.0)(typescript@5.6.3))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@22.5.5)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))': dependencies: - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/visual-editing': link:packages/visual-editing astro: 4.16.5(@types/node@22.5.5)(rollup@4.24.0)(terser@5.33.0)(typescript@5.6.3) react: 18.3.1 @@ -16825,7 +16809,7 @@ snapshots: '@sanity/cli@3.61.0(react@18.3.1)': dependencies: '@babel/traverse': 7.25.7 - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/codegen': 3.61.0 '@sanity/telemetry': 0.7.9(react@18.3.1) '@sanity/util': 3.61.0(debug@4.3.7) @@ -16848,7 +16832,7 @@ snapshots: '@sanity/cli@3.61.0(react@19.0.0-rc-fb9a90fa48-20240614)': dependencies: '@babel/traverse': 7.25.7 - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/codegen': 3.61.0 '@sanity/telemetry': 0.7.9(react@19.0.0-rc-fb9a90fa48-20240614) '@sanity/util': 3.61.0(debug@4.3.7) @@ -16868,7 +16852,7 @@ snapshots: - react - supports-color - '@sanity/client@6.22.2(debug@4.3.7)': + '@sanity/client@6.22.2': dependencies: '@sanity/eventsource': 5.0.2 get-it: 8.6.5(debug@4.3.7) @@ -16876,7 +16860,7 @@ snapshots: transitivePeerDependencies: - debug - '@sanity/client@6.22.2-canary.1': + '@sanity/client@6.22.2-canary.1(debug@4.3.7)': dependencies: '@sanity/eventsource': 5.0.2 get-it: 8.6.5(debug@4.3.7) @@ -16958,7 +16942,7 @@ snapshots: '@sanity/export@3.41.0': dependencies: - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/util': 3.61.0(debug@4.3.7) archiver: 7.0.1 debug: 4.3.7 @@ -17041,7 +17025,7 @@ snapshots: react-copy-to-clipboard: 5.1.0(react@19.0.0-rc-fb9a90fa48-20240614) react-dom: 19.0.0-rc-fb9a90fa48-20240614(react@19.0.0-rc-fb9a90fa48-20240614) - '@sanity/insert-menu@1.0.9(@sanity/types@3.61.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@sanity/insert-menu@1.0.9(@sanity/types@3.61.0(debug@4.3.7))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: '@sanity/icons': 3.4.0(react@18.3.1) '@sanity/types': 3.61.0(debug@4.3.7) @@ -17101,7 +17085,7 @@ snapshots: '@sanity/migrate@3.61.0': dependencies: - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/mutate': 0.10.0(debug@4.3.7) '@sanity/types': 3.61.0(debug@4.3.7) '@sanity/util': 3.61.0(debug@4.3.7) @@ -17115,7 +17099,7 @@ snapshots: '@sanity/mutate@0.10.0(debug@4.3.7)': dependencies: - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/diff-match-patch': 3.1.1 hotscript: 1.0.13 mendoza: 3.0.7 @@ -17126,7 +17110,7 @@ snapshots: '@sanity/mutate@0.10.1-canary.4(xstate@5.18.2)': dependencies: - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/diff-match-patch': 3.1.1 hotscript: 1.0.13 mendoza: 3.0.7 @@ -17214,7 +17198,7 @@ snapshots: '@sanity/preview-kit@5.1.4(@sanity/client@6.22.2)(react@18.3.1)': dependencies: - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2 '@sanity/preview-kit-compat': link:packages/preview-kit-compat mendoza: 3.0.7 optionalDependencies: @@ -17222,12 +17206,20 @@ snapshots: '@sanity/preview-kit@5.1.4(@sanity/client@6.22.2)(react@19.0.0-rc-fb9a90fa48-20240614)': dependencies: - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2 '@sanity/preview-kit-compat': link:packages/preview-kit-compat mendoza: 3.0.7 optionalDependencies: react: 19.0.0-rc-fb9a90fa48-20240614 + '@sanity/preview-kit@5.1.4(@sanity/client@6.22.2-canary.1)(react@18.3.1)': + dependencies: + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) + '@sanity/preview-kit-compat': link:packages/preview-kit-compat + mendoza: 3.0.7 + optionalDependencies: + react: 18.3.1 + '@sanity/schema@3.61.0(debug@4.3.7)': dependencies: '@sanity/generate-help-url': 3.0.0 @@ -17258,7 +17250,7 @@ snapshots: '@sanity/types@3.61.0(debug@4.3.7)': dependencies: - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@types/react': 18.3.11 transitivePeerDependencies: - debug @@ -17341,7 +17333,7 @@ snapshots: '@sanity/util@3.61.0(debug@4.3.7)': dependencies: - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/types': 3.61.0(debug@4.3.7) get-random-values-esm: 1.0.2 moment: 2.30.1 @@ -24567,12 +24559,12 @@ snapshots: neotraverse@0.6.18: {} - next-sanity@9.5.4(@sanity/client@6.22.2)(@sanity/icons@3.4.0(react@18.3.1))(@sanity/types@3.61.0)(@sanity/ui@2.8.9(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)))(next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@22.5.5)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + next-sanity@9.5.4(@sanity/client@6.22.2-canary.1)(@sanity/icons@3.4.0(react@18.3.1))(@sanity/types@3.61.0)(@sanity/ui@2.8.9(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)))(next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@22.5.5)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: '@portabletext/react': 3.1.0(react@18.3.1) - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/icons': 3.4.0(react@18.3.1) - '@sanity/preview-kit': 5.1.4(@sanity/client@6.22.2)(react@18.3.1) + '@sanity/preview-kit': 5.1.4(@sanity/client@6.22.2-canary.1)(react@18.3.1) '@sanity/types': 3.61.0(debug@4.3.7) '@sanity/ui': 2.8.9(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@sanity/visual-editing': link:packages/visual-editing @@ -24587,7 +24579,7 @@ snapshots: next-sanity@9.7.0-canary.17(2hdiihllirvobj2t4yh7nyr5xe): dependencies: '@portabletext/react': 3.1.0(react@19.0.0-rc-fb9a90fa48-20240614) - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2 '@sanity/icons': 3.4.0(react@19.0.0-rc-fb9a90fa48-20240614) '@sanity/next-loader': link:packages/next-loader '@sanity/preview-kit': 5.1.4(@sanity/client@6.22.2)(react@19.0.0-rc-fb9a90fa48-20240614) @@ -24606,7 +24598,7 @@ snapshots: next-sanity@9.7.0-canary.17(@sanity/client@6.22.2)(@sanity/icons@3.4.0(react@18.3.1))(@sanity/types@3.61.0)(@sanity/ui@2.8.9(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)))(next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@20.8.7)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: '@portabletext/react': 3.1.0(react@18.3.1) - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2 '@sanity/icons': 3.4.0(react@18.3.1) '@sanity/next-loader': link:packages/next-loader '@sanity/preview-kit': 5.1.4(@sanity/client@6.22.2)(react@18.3.1) @@ -24622,6 +24614,25 @@ snapshots: sanity: 3.61.0(@types/node@20.8.7)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0) styled-components: 6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next-sanity@9.7.0-canary.17(@sanity/client@6.22.2-canary.1)(@sanity/icons@3.4.0(react@18.3.1))(@sanity/types@3.61.0)(@sanity/ui@2.8.9(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)))(next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sanity@3.61.0(@types/node@20.8.7)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0))(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + dependencies: + '@portabletext/react': 3.1.0(react@18.3.1) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) + '@sanity/icons': 3.4.0(react@18.3.1) + '@sanity/next-loader': link:packages/next-loader + '@sanity/preview-kit': 5.1.4(@sanity/client@6.22.2-canary.1)(react@18.3.1) + '@sanity/preview-url-secret': link:packages/preview-url-secret + '@sanity/types': 3.61.0(debug@4.3.7) + '@sanity/ui': 2.8.9(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@sanity/visual-editing': link:packages/visual-editing + groq: 3.61.0 + history: 5.3.0 + next: 14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + sanity: 3.61.0(@types/node@20.8.7)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.33.0) + styled-components: 6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next@14.2.15(@babel/core@7.25.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.15 @@ -26810,7 +26821,7 @@ snapshots: '@sanity/bifur-client': 0.4.1 '@sanity/block-tools': 3.61.0(debug@4.3.7) '@sanity/cli': 3.61.0(react@19.0.0-rc-fb9a90fa48-20240614) - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/color': 3.0.6 '@sanity/diff': 3.61.0 '@sanity/diff-match-patch': 3.1.1 @@ -26939,14 +26950,14 @@ snapshots: '@dnd-kit/sortable': 7.0.2(@dnd-kit/core@6.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) '@dnd-kit/utilities': 3.2.2(react@18.3.1) '@juggle/resize-observer': 3.4.0 - '@portabletext/editor': 1.1.4(@sanity/block-tools@3.61.0(debug@4.3.7))(@sanity/schema@3.61.0(debug@4.3.7))(@sanity/types@3.61.0)(@sanity/util@3.61.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@portabletext/editor': 1.1.4(@sanity/block-tools@3.61.0(debug@4.3.7))(@sanity/schema@3.61.0(debug@4.3.7))(@sanity/types@3.61.0(debug@4.3.7))(@sanity/util@3.61.0(debug@4.3.7))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rxjs@7.8.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@portabletext/react': 3.1.0(react@18.3.1) '@rexxars/react-json-inspector': 8.0.1(react@18.3.1) '@sanity/asset-utils': 2.0.6 '@sanity/bifur-client': 0.4.1 '@sanity/block-tools': 3.61.0(debug@4.3.7) '@sanity/cli': 3.61.0(react@18.3.1) - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/color': 3.0.6 '@sanity/diff': 3.61.0 '@sanity/diff-match-patch': 3.1.1 @@ -26955,7 +26966,7 @@ snapshots: '@sanity/icons': 3.4.0(react@18.3.1) '@sanity/image-url': 1.0.2 '@sanity/import': 3.37.5 - '@sanity/insert-menu': 1.0.9(@sanity/types@3.61.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@sanity/insert-menu': 1.0.9(@sanity/types@3.61.0(debug@4.3.7))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@sanity/logos': 2.1.13(@sanity/color@3.0.6)(react@18.3.1) '@sanity/migrate': 3.61.0 '@sanity/mutator': 3.61.0 @@ -27082,7 +27093,7 @@ snapshots: '@sanity/bifur-client': 0.4.1 '@sanity/block-tools': 3.61.0(debug@4.3.7) '@sanity/cli': 3.61.0(react@18.3.1) - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/color': 3.0.6 '@sanity/diff': 3.61.0 '@sanity/diff-match-patch': 3.1.1 @@ -27091,7 +27102,7 @@ snapshots: '@sanity/icons': 3.4.0(react@18.3.1) '@sanity/image-url': 1.0.2 '@sanity/import': 3.37.5 - '@sanity/insert-menu': 1.0.9(@sanity/types@3.61.0)(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@sanity/insert-menu': 1.0.9(@sanity/types@3.61.0(debug@4.3.7))(react-dom@18.3.1(react@18.3.1))(react-is@18.3.1)(react@18.3.1)(styled-components@6.1.13(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@sanity/logos': 2.1.13(@sanity/color@3.0.6)(react@18.3.1) '@sanity/migrate': 3.61.0 '@sanity/mutator': 3.61.0 @@ -27218,7 +27229,7 @@ snapshots: '@sanity/bifur-client': 0.4.1 '@sanity/block-tools': 3.61.0(debug@4.3.7) '@sanity/cli': 3.61.0(react@18.3.1) - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/color': 3.0.6 '@sanity/diff': 3.61.0 '@sanity/diff-match-patch': 3.1.1 @@ -27354,7 +27365,7 @@ snapshots: '@sanity/bifur-client': 0.4.1 '@sanity/block-tools': 3.61.0(debug@4.3.7) '@sanity/cli': 3.61.0(react@19.0.0-rc-fb9a90fa48-20240614) - '@sanity/client': 6.22.2(debug@4.3.7) + '@sanity/client': 6.22.2-canary.1(debug@4.3.7) '@sanity/color': 3.0.6 '@sanity/diff': 3.61.0 '@sanity/diff-match-patch': 3.1.1 From cb0f33b155ee9eaad43bd7b981356f08d01c462a Mon Sep 17 00:00:00 2001 From: Cody Olsen Date: Thu, 17 Oct 2024 03:30:46 +0200 Subject: [PATCH 10/18] fix(SanityLiveStream): remove transition to speed up sequence --- .../src/client-components/live-stream/SanityLiveStream.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/next-loader/src/client-components/live-stream/SanityLiveStream.tsx b/packages/next-loader/src/client-components/live-stream/SanityLiveStream.tsx index 870cedb651..21d3c2a1fc 100644 --- a/packages/next-loader/src/client-components/live-stream/SanityLiveStream.tsx +++ b/packages/next-loader/src/client-components/live-stream/SanityLiveStream.tsx @@ -7,7 +7,7 @@ import { } from '@sanity/client' import {stegaEncodeSourceMap} from '@sanity/client/stega' import isEqual from 'fast-deep-equal' -import {startTransition, useCallback, useEffect, useState, useSyncExternalStore} from 'react' +import {useCallback, useEffect, useState, useSyncExternalStore} from 'react' import * as React from 'react' import {useEffectEvent} from 'use-effect-event' import {comlinkListeners, comlink as comlinkSnapshot} from '../../hooks/context' @@ -122,8 +122,9 @@ export default function SanityLiveStream(props: SanityLiveStreamProps): React.JS .then( (children) => { // eslint-disable-next-line no-console - console.log('startTransition(() => setChildren(children))') - startTransition(() => setChildren(children)) + console.log('setChildren(children)') + // startTransition(() => setChildren(children)) + setChildren(children) }, (reason: unknown) => { // eslint-disable-next-line no-console From b6d7eba3ba8e58b45f760a43f853b2d56d8e8713 Mon Sep 17 00:00:00 2001 From: Cody Olsen Date: Thu, 17 Oct 2024 12:50:37 +0200 Subject: [PATCH 11/18] fix(next-loader): add request tag support --- .../src/client-components/live/SanityLive.tsx | 32 ++++++++++++++++--- packages/next-loader/src/defineLive.tsx | 29 +++++++++++++++-- 2 files changed, 54 insertions(+), 7 deletions(-) diff --git a/packages/next-loader/src/client-components/live/SanityLive.tsx b/packages/next-loader/src/client-components/live/SanityLive.tsx index 352a70facc..3fe20d20f3 100644 --- a/packages/next-loader/src/client-components/live/SanityLive.tsx +++ b/packages/next-loader/src/client-components/live/SanityLive.tsx @@ -22,6 +22,7 @@ export interface SanityLiveProps | 'useProjectHostname' | 'token' | 'ignoreBrowserTokenWarning' + | 'requestTagPrefix' > { // handleDraftModeAction: (secret: string) => Promise draftModeEnabled: boolean @@ -29,6 +30,7 @@ export interface SanityLiveProps refreshOnMount?: boolean refreshOnFocus?: boolean refreshOnReconnect?: boolean + tag: string } /** @@ -43,12 +45,14 @@ export function SanityLive(props: SanityLiveProps): React.JSX.Element | null { useProjectHostname, ignoreBrowserTokenWarning, token, + requestTagPrefix, // handleDraftModeAction, draftModeEnabled, draftModePerspective, refreshOnMount = false, refreshOnFocus = typeof window === 'undefined' ? true : window.self === window.top, refreshOnReconnect = true, + tag, } = props const [error, setError] = useState(null) @@ -85,8 +89,18 @@ export function SanityLive(props: SanityLiveProps): React.JSX.Element | null { ignoreBrowserTokenWarning, token, useCdn: false, + requestTagPrefix, }), - [apiHost, apiVersion, dataset, ignoreBrowserTokenWarning, projectId, token, useProjectHostname], + [ + apiHost, + apiVersion, + dataset, + ignoreBrowserTokenWarning, + projectId, + requestTagPrefix, + token, + useProjectHostname, + ], ) useEffect(() => { @@ -94,6 +108,10 @@ export function SanityLive(props: SanityLiveProps): React.JSX.Element | null { // and include CORS detection https://github.com/sanity-io/sanity/blob/9848f2069405e5d06f82a61a902f141e53099493/packages/sanity/src/core/store/_legacy/authStore/createAuthStore.ts#L92-L102 const path = client.getDataUrl('live/events') const url = new URL(client.getUrl(path, false)) + const preflightTag = [requestTagPrefix, tag, 'cors-preflight'].filter(Boolean).join('.') + if (preflightTag) { + url.searchParams.set('tag', preflightTag) + } if (token) { url.searchParams.set('includeDrafts', 'true') } @@ -148,19 +166,25 @@ export function SanityLive(props: SanityLiveProps): React.JSX.Element | null { } }) return () => controller.abort() - }, [client, token]) + }, [tag, client, requestTagPrefix, token]) useEffect(() => { - const subscription = client.live.events(token ? {includeDrafts: true} : undefined).subscribe({ + const subscription = client.live.events({includeDrafts: !!token, tag}).subscribe({ next: (event) => { if (event.type === 'message') { revalidateSyncTags(event.tags) + } else if (event.type === 'reconnect') { + // eslint-disable-next-line no-console + console.log('TODO: handle reconnect') + } else if (event.type === 'restart') { + // eslint-disable-next-line no-console + console.log('TODO: handle restart') } }, error: setError, }) return () => subscription.unsubscribe() - }, [client, token]) + }, [client, tag, token]) /** * 2. Notify what perspective we're in, when in Draft Mode diff --git a/packages/next-loader/src/defineLive.tsx b/packages/next-loader/src/defineLive.tsx index 401ab6bcf5..84b0ec5b2f 100644 --- a/packages/next-loader/src/defineLive.tsx +++ b/packages/next-loader/src/defineLive.tsx @@ -24,6 +24,7 @@ export type DefinedSanityFetchType = (options: params?: QueryParams perspective?: Omit stega?: boolean + tag?: string }) => Promise<{ data: ClientReturn sourceMap: ContentSourceMap | null @@ -38,6 +39,7 @@ export type DefinedSanityLiveStreamType = (pro params?: QueryParams perspective?: Omit stega?: boolean + tag?: string children: (result: { data: ClientReturn sourceMap: ContentSourceMap | null @@ -75,6 +77,12 @@ export interface DefinedSanityLiveProps { * TODO: this warning should only be necessary when `serverToken` and `browserToken` are the same value */ ignoreBrowserTokenWarning?: boolean + /** + * Optional request tag for the listener. Use to identify the request in logs. + * + * @defaultValue `next-loader.live` + */ + tag?: string /** * Required to enable draft mode in Presentation Tool. Requires `serverToken`. Returns a string if there were an error */ @@ -157,11 +165,13 @@ export function defineLive(config: DefineSanityLiveOptions): { params = {}, stega: _stega, perspective: _perspective, + tag = 'next-loader.fetch', }: { query: QueryString params?: QueryParams stega?: boolean perspective?: Omit + tag?: string }) { const stega = _stega ?? (await draftMode()).isEnabled const perspective = @@ -185,7 +195,7 @@ export function defineLive(config: DefineSanityLiveOptions): { revalidate: fetchOptions?.revalidate, // tags: ['sanity'], }, - tag: 'sanity.fetch-sync-tags', + tag: [tag, 'fetch-sync-tags'].filter(Boolean).join('.'), }) const tags = ['sanity', ...(syncTags?.map((tag) => `sanity:${tag}`) || [])] @@ -204,6 +214,7 @@ export function defineLive(config: DefineSanityLiveOptions): { // lastLiveEventId: syncTags?.map((tag) => tag.replace('s1:', '')).join(''), // Hash the syncTags to create a consistent, short lastLiveEventId lastLiveEventId: syncTags ? await hashSyncTags(syncTags) : undefined, + tag, }) return {data: result, sourceMap: resultSourceMap || null, tags} } @@ -225,8 +236,10 @@ export function defineLive(config: DefineSanityLiveOptions): { refreshOnMount, refreshOnFocus, refreshOnReconnect, + tag = 'next-loader.live', } = props - const {projectId, dataset, apiHost, apiVersion, useProjectHostname} = client.config() + const {projectId, dataset, apiHost, apiVersion, useProjectHostname, requestTagPrefix} = + client.config() return ( Date: Thu, 17 Oct 2024 10:59:48 +0000 Subject: [PATCH 12/18] chore(release): publish canary [skip ci] --- packages/comlink/package.json | 2 +- packages/core-loader/package.json | 2 +- packages/insert-menu/package.json | 2 +- packages/next-loader/package.json | 2 +- packages/presentation/package.json | 2 +- packages/preview-kit-compat/package.json | 2 +- packages/preview-url-secret/package.json | 2 +- packages/react-loader/package.json | 2 +- packages/svelte-loader/package.json | 2 +- packages/visual-editing/package.json | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/comlink/package.json b/packages/comlink/package.json index 81435b7841..5c2d6169db 100644 --- a/packages/comlink/package.json +++ b/packages/comlink/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/comlink", - "version": "0.0.2-canary.66", + "version": "0.0.2-canary.67", "keywords": [ "sanity.io", "postmessage" diff --git a/packages/core-loader/package.json b/packages/core-loader/package.json index 576b210e49..fb7fdc6263 100644 --- a/packages/core-loader/package.json +++ b/packages/core-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/core-loader", - "version": "1.6.24-canary.68", + "version": "1.6.24-canary.69", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/core-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/insert-menu/package.json b/packages/insert-menu/package.json index 8ad4e33e2c..0561f08669 100644 --- a/packages/insert-menu/package.json +++ b/packages/insert-menu/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/insert-menu", - "version": "1.0.10-canary.68", + "version": "1.0.10-canary.69", "description": "", "keywords": [], "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/insert-menu#readme", diff --git a/packages/next-loader/package.json b/packages/next-loader/package.json index 9e6cb17ccf..e03dfa0407 100644 --- a/packages/next-loader/package.json +++ b/packages/next-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/next-loader", - "version": "0.0.1-canary.52", + "version": "0.0.1-canary.53", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/next-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/presentation/package.json b/packages/presentation/package.json index b048d7e594..9517ef7021 100644 --- a/packages/presentation/package.json +++ b/packages/presentation/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/presentation", - "version": "1.16.6-canary.68", + "version": "1.16.6-canary.69", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/presentation#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/preview-kit-compat/package.json b/packages/preview-kit-compat/package.json index 8c68be1e26..2eab8ad1a0 100644 --- a/packages/preview-kit-compat/package.json +++ b/packages/preview-kit-compat/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/preview-kit-compat", - "version": "1.5.8-canary.68", + "version": "1.5.8-canary.69", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/preview-kit-compat#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/preview-url-secret/package.json b/packages/preview-url-secret/package.json index 1190e94e00..0c9887474d 100644 --- a/packages/preview-url-secret/package.json +++ b/packages/preview-url-secret/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/preview-url-secret", - "version": "1.6.22-canary.68", + "version": "1.6.22-canary.69", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/preview-url-secret#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/react-loader/package.json b/packages/react-loader/package.json index aeb7414676..59f4cf3c47 100644 --- a/packages/react-loader/package.json +++ b/packages/react-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/react-loader", - "version": "1.10.8-canary.68", + "version": "1.10.8-canary.69", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/react-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/svelte-loader/package.json b/packages/svelte-loader/package.json index 6477b0d650..6b9d8cda99 100644 --- a/packages/svelte-loader/package.json +++ b/packages/svelte-loader/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/svelte-loader", - "version": "1.11.38-canary.68", + "version": "1.11.38-canary.69", "homepage": "https://github.com/sanity-io/visual-editing/tree/main/packages/svelte-loader#readme", "bugs": { "url": "https://github.com/sanity-io/visual-editing/issues" diff --git a/packages/visual-editing/package.json b/packages/visual-editing/package.json index 59e29eeb20..38dba06574 100644 --- a/packages/visual-editing/package.json +++ b/packages/visual-editing/package.json @@ -1,6 +1,6 @@ { "name": "@sanity/visual-editing", - "version": "2.1.11-canary.68", + "version": "2.1.11-canary.69", "keywords": [ "sanity.io", "visual-editing", From 4b000b8378314c53b9457d0c2371a5680d2ed219 Mon Sep 17 00:00:00 2001 From: Cody Olsen Date: Thu, 17 Oct 2024 15:41:05 +0200 Subject: [PATCH 13/18] fix: handle section being null sometimes --- .../src/components/page/Page.tsx | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/apps/page-builder-demo/src/components/page/Page.tsx b/apps/page-builder-demo/src/components/page/Page.tsx index 22017e1696..a83828a101 100644 --- a/apps/page-builder-demo/src/components/page/Page.tsx +++ b/apps/page-builder-demo/src/components/page/Page.tsx @@ -38,36 +38,40 @@ export function Page(props: {data: PageData}) { path: 'sections', }).toString()} > - {sections?.map((section) => { - if (section._type === 'hero') { + {sections?.map((section: PageSection | null) => { + if (section?._type === 'hero') { return } - if (section._type === 'intro') { + if (section?._type === 'intro') { return } - if (section._type === 'featuredProducts') { + if (section?._type === 'featuredProducts') { return } - if (section._type === 'featureHighlight') { + if (section?._type === 'featureHighlight') { return } - if (section._type === 'section') { + if (section?._type === 'section') { return
} return (
Unknown section type: {(section as any)._type}
{JSON.stringify(section, null, 2)}
From f27944a14e1d886393b8a2cf31d2aa2e08c3940e Mon Sep 17 00:00:00 2001 From: Cody Olsen Date: Thu, 17 Oct 2024 15:58:57 +0200 Subject: [PATCH 14/18] fix: missed a spot --- apps/page-builder-demo/src/components/page/Page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/page-builder-demo/src/components/page/Page.tsx b/apps/page-builder-demo/src/components/page/Page.tsx index a83828a101..c405a75454 100644 --- a/apps/page-builder-demo/src/components/page/Page.tsx +++ b/apps/page-builder-demo/src/components/page/Page.tsx @@ -73,7 +73,7 @@ export function Page(props: {data: PageData}) { className="bg-red-50 p-5 font-mono text-sm text-red-600 dark:bg-red-950 dark:text-red-400" key={(section as any)?._key} > -
Unknown section type: {(section as any)._type}
+
Unknown section type: {(section as any)?._type}
{JSON.stringify(section, null, 2)}
) From 3fd2dbf9805075ea46c8ee92f9f4f5c6c95bd61c Mon Sep 17 00:00:00 2001 From: Cody Olsen Date: Thu, 17 Oct 2024 17:39:13 +0200 Subject: [PATCH 15/18] feat: update qr code menu design --- packages/next-loader/package.json | 1 + packages/next-loader/src/constants.ts | 4 - packages/next-loader/src/defineLive.tsx | 3 +- .../next-loader/src/server-actions/index.ts | 5 +- .../presentation/src/PresentationTool.tsx | 17 +- packages/presentation/src/constants.ts | 3 +- packages/presentation/src/i18n/resources.ts | 4 + .../src/preview/OpenPreviewButton.tsx | 51 +++++ .../presentation/src/preview/PreviewFrame.tsx | 99 ++++---- .../src/preview/SharePreviewMenu.tsx | 216 ++++++++++++++++++ .../src/preview/ShareUrlDialog.tsx | 6 +- .../src/preview/ShareUrlMenuItems.tsx | 10 +- packages/presentation/src/usePreviewUrl.ts | 2 + packages/preview-url-secret/src/constants.ts | 6 + .../src/definePreviewUrl.ts | 7 +- packages/preview-url-secret/src/types.ts | 20 ++ .../src/withoutSecretSearchParams.ts | 25 +- pnpm-lock.yaml | 19 +- 18 files changed, 418 insertions(+), 80 deletions(-) delete mode 100644 packages/next-loader/src/constants.ts create mode 100644 packages/presentation/src/preview/OpenPreviewButton.tsx create mode 100644 packages/presentation/src/preview/SharePreviewMenu.tsx diff --git a/packages/next-loader/package.json b/packages/next-loader/package.json index e03dfa0407..035cff81d4 100644 --- a/packages/next-loader/package.json +++ b/packages/next-loader/package.json @@ -98,6 +98,7 @@ "@repo/visual-editing-helpers": "workspace:*", "@sanity/client": "^6.22.2", "@sanity/pkg-utils": "6.11.3", + "@sanity/preview-url-secret": "workspace:*", "@types/react": "^18.3.11", "eslint": "^8.57.1", "fast-deep-equal": "3.1.3", diff --git a/packages/next-loader/src/constants.ts b/packages/next-loader/src/constants.ts deleted file mode 100644 index d05aa72d91..0000000000 --- a/packages/next-loader/src/constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** - * @internal - */ -export const perspectiveCookieName = 'sanity-perspective' diff --git a/packages/next-loader/src/defineLive.tsx b/packages/next-loader/src/defineLive.tsx index 84b0ec5b2f..3c9768f8d2 100644 --- a/packages/next-loader/src/defineLive.tsx +++ b/packages/next-loader/src/defineLive.tsx @@ -10,10 +10,9 @@ import { import SanityLiveClientComponent from '@sanity/next-loader/client-components/live' import SanityLiveStreamClientComponent from '@sanity/next-loader/client-components/live-stream' // import {handleDraftModeActionMissing} from '@sanity/next-loader/server-actions' -// import {apiVersion} from '@sanity/preview-url-secret/constants' +import {perspectiveCookieName} from '@sanity/preview-url-secret/constants' // import {validateSecret} from '@sanity/preview-url-secret/validate-secret' import {cookies, draftMode} from 'next/headers.js' -import {perspectiveCookieName} from './constants' import {sanitizePerspective} from './utils' /** diff --git a/packages/next-loader/src/server-actions/index.ts b/packages/next-loader/src/server-actions/index.ts index 4219d522ff..fe8cd015a7 100644 --- a/packages/next-loader/src/server-actions/index.ts +++ b/packages/next-loader/src/server-actions/index.ts @@ -1,9 +1,9 @@ 'use server' import type {ClientPerspective, SyncTag} from '@sanity/client' +import {perspectiveCookieName} from '@sanity/preview-url-secret/constants' import {revalidateTag} from 'next/cache.js' import {cookies, draftMode} from 'next/headers.js' -import {perspectiveCookieName} from '../constants' import {sanitizePerspective} from '../utils' export async function disableDraftMode(): Promise { @@ -36,6 +36,9 @@ export async function setPerspectiveCookie(perspective: string): Promise { ;(await cookies()).set(perspectiveCookieName, perspective satisfies ClientPerspective, { httpOnly: true, + path: '/', + secure: true, + sameSite: 'none', }) } diff --git a/packages/presentation/src/PresentationTool.tsx b/packages/presentation/src/PresentationTool.tsx index 127da964dd..d0e07a9b10 100644 --- a/packages/presentation/src/PresentationTool.tsx +++ b/packages/presentation/src/PresentationTool.tsx @@ -33,6 +33,7 @@ import { DEFAULT_TOOL_NAME, EDIT_INTENT_MODE, LIVE_DRAFT_EVENTS_ENABLED, + SHARE_PREVIEW_ACCESS, } from './constants' import {useUnique, useWorkspace, type CommentIntentGetter} from './internals' import {debounce} from './lib/debounce' @@ -84,7 +85,8 @@ export default function PresentationTool(props: { canCreateUrlPreviewSecrets: boolean }): ReactElement { const {canCreateUrlPreviewSecrets, tool} = props - const {previewUrl: _previewUrl, components} = tool.options ?? {} + const components = tool.options?.components + const _previewUrl = tool.options?.previewUrl const name = tool.name || DEFAULT_TOOL_NAME const {unstable_navigator} = components || {} @@ -96,9 +98,21 @@ export default function PresentationTool(props: { const initialPreviewUrl = usePreviewUrl( _previewUrl || '/', name, + routerSearchParams['perspective'] === 'published' ? 'published' : 'previewDrafts', routerSearchParams['preview'] || null, canCreateUrlPreviewSecrets, ) + const canSharePreviewAccess = useMemo(() => { + if ( + _previewUrl && + typeof _previewUrl === 'object' && + 'previewMode' in _previewUrl && + _previewUrl.previewMode + ) { + return _previewUrl.previewMode.shareAccess ?? SHARE_PREVIEW_ACCESS + } + return false + }, [_previewUrl]) const [devMode] = useState(() => { const option = tool.options?.devMode @@ -521,6 +535,7 @@ export default function PresentationTool(props: { & { + previewLocationOrigin: string + previewLocationRoute: string + }, +): React.ReactNode { + const {openPopup, previewLocationOrigin, previewLocationRoute} = props + + const {t} = useTranslation(presentationLocaleNamespace) + + const handleOpenPopup = useCallback( + (event: React.MouseEvent) => { + event.preventDefault() + openPopup(event.currentTarget.href) + }, + [openPopup], + ) + + return ( + {t('share-url.menu-item.open.text')}} + fallbackPlacements={['bottom-start']} + padding={2} + placement="bottom" + portal + > +