@sanity/sdk-react 0.0.0-alpha.19 → 0.0.0-alpha.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { jsxs, jsx, Fragment as Fragment$1 } from "react/jsx-runtime";
2
2
  import { c } from "react/compiler-runtime";
3
- import { getAuthState, getLoginUrlsState, fetchLoginUrls, handleCallback, logout, AuthStateType, createSanityInstance, getTokenState, getCurrentUserState, getClientState, getOrCreateController, getOrCreateChannel, releaseChannel, getOrCreateNode, releaseNode, resolveDatasets, getDatasetsState, applyActions, getResourceId, resolveDocument, getDocumentState, subscribeDocumentEvents, getDocumentSyncStatus, editDocument, getPermissionsState, getQueryKey, parseQueryKey, getQueryState, resolveQuery, getPreviewState, resolvePreview, getProjectionState, resolveProjection, resolveProject, getProjectState, resolveProjects, getProjectsState, createUsersStore } from "@sanity/sdk";
3
+ import { getAuthState, getLoginUrlsState, fetchLoginUrls, handleCallback, logout, AuthStateType, createSanityInstance, getTokenState, getCurrentUserState, getDashboardOrganizationId, getClientState, getOrCreateController, getOrCreateChannel, releaseChannel, getOrCreateNode, releaseNode, resolveDatasets, getDatasetsState, applyActions, getResourceId, resolveDocument, getDocumentState, subscribeDocumentEvents, getDocumentSyncStatus, editDocument, getPermissionsState, getQueryKey, parseQueryKey, getQueryState, resolveQuery, getPreviewState, resolvePreview, getProjectionState, resolveProjection, resolveProject, getProjectState, resolveProjects, getProjectsState, createUsersStore } from "@sanity/sdk";
4
4
  import { ErrorBoundary } from "react-error-boundary";
5
- import { createContext, useContext, useSyncExternalStore, useMemo, Fragment, Suspense, useEffect, useState, useRef, useInsertionEffect, useTransition } from "react";
5
+ import { createContext, useContext, useSyncExternalStore, useMemo, Fragment, Suspense, useEffect, useRef, useState, useInsertionEffect, useTransition } from "react";
6
6
  import { SanityLogo } from "@sanity/logos";
7
7
  import { SDK_CHANNEL_NAME, SDK_NODE_NAME } from "@sanity/message-protocol";
8
8
  import { firstValueFrom, filter, Observable, startWith, distinctUntilChanged, switchMap, EMPTY } from "rxjs";
@@ -294,132 +294,129 @@ function _temp2$3() {
294
294
  function _temp$6() {
295
295
  console.warn("Redirecting to core", CORE_URL), window.location.replace(CORE_URL);
296
296
  }
297
- const useAuthToken = createStateSourceHook(getTokenState), useCurrentUser = createStateSourceHook(getCurrentUserState), useClient = createStateSourceHook({
297
+ const useAuthToken = createStateSourceHook(getTokenState), useCurrentUser = createStateSourceHook(getCurrentUserState);
298
+ function useDashboardOrganizationId() {
299
+ const $ = c(2), instance = useSanityInstance();
300
+ let t0, t1;
301
+ $[0] !== instance ? (t1 = getDashboardOrganizationId(instance), $[0] = instance, $[1] = t1) : t1 = $[1], t0 = t1;
302
+ const {
303
+ subscribe,
304
+ getCurrent
305
+ } = t0;
306
+ return useSyncExternalStore(subscribe, getCurrent);
307
+ }
308
+ const useClient = createStateSourceHook({
298
309
  getState: getClientState,
299
310
  getResourceId: (e) => e.resourceId
300
311
  });
301
312
  function useFrameConnection(options) {
302
- const $ = c(27), {
313
+ const $ = c(12), {
303
314
  onMessage,
304
315
  targetOrigin,
305
316
  name,
306
317
  connectTo,
307
- heartbeat
308
- } = options, instance = useSanityInstance(), [status, setStatus] = useState("idle");
318
+ heartbeat,
319
+ onStatus
320
+ } = options, instance = useSanityInstance(), controllerRef = useRef(null), channelRef = useRef(null);
309
321
  let t0, t1;
310
- $[0] !== instance || $[1] !== targetOrigin ? (t1 = getOrCreateController(instance, targetOrigin), $[0] = instance, $[1] = targetOrigin, $[2] = t1) : t1 = $[2], t0 = t1;
311
- const controller = t0;
312
- let t2, t3;
313
- $[3] !== connectTo || $[4] !== heartbeat || $[5] !== instance || $[6] !== name ? (t3 = getOrCreateChannel(instance, {
314
- name,
315
- connectTo,
316
- heartbeat
317
- }), $[3] = connectTo, $[4] = heartbeat, $[5] = instance, $[6] = name, $[7] = t3) : t3 = $[7], t2 = t3;
318
- const channel = t2;
319
- let t4, t5;
320
- $[8] !== channel ? (t4 = () => channel ? channel.onStatus((event) => {
321
- setStatus(event.status);
322
- }) : void 0, t5 = [channel], $[8] = channel, $[9] = t4, $[10] = t5) : (t4 = $[9], t5 = $[10]), useEffect(t4, t5);
323
- let t6, t7;
324
- $[11] !== channel || $[12] !== onMessage ? (t6 = () => {
325
- if (!channel || !onMessage)
326
- return;
327
- const unsubscribers = [];
328
- return Object.entries(onMessage).forEach((t82) => {
329
- const [type, handler] = t82, unsubscribe_0 = channel.on(type, handler);
330
- unsubscribers.push(unsubscribe_0);
322
+ $[0] !== connectTo || $[1] !== heartbeat || $[2] !== instance || $[3] !== name || $[4] !== onMessage || $[5] !== onStatus || $[6] !== targetOrigin ? (t0 = () => {
323
+ const controller = getOrCreateController(instance, targetOrigin), channel = getOrCreateChannel(instance, {
324
+ name,
325
+ connectTo,
326
+ heartbeat
327
+ });
328
+ controllerRef.current = controller, channelRef.current = channel, channel.onStatus((event) => {
329
+ onStatus?.(event.status);
330
+ });
331
+ const messageUnsubscribers = [];
332
+ return onMessage && Object.entries(onMessage).forEach((t22) => {
333
+ const [type, handler] = t22, unsubscribe = channel.on(type, handler);
334
+ messageUnsubscribers.push(unsubscribe);
331
335
  }), () => {
332
- unsubscribers.forEach(_temp$5);
336
+ messageUnsubscribers.forEach(_temp$5), releaseChannel(instance, name), channelRef.current = null, controllerRef.current = null;
333
337
  };
334
- }, t7 = [channel, onMessage], $[11] = channel, $[12] = onMessage, $[13] = t6, $[14] = t7) : (t6 = $[13], t7 = $[14]), useEffect(t6, t7);
335
- let t8;
336
- $[15] !== controller ? (t8 = (frameWindow) => {
337
- const removeTarget = controller?.addTarget(frameWindow);
338
+ }, t1 = [targetOrigin, name, connectTo, heartbeat, onMessage, instance, onStatus], $[0] = connectTo, $[1] = heartbeat, $[2] = instance, $[3] = name, $[4] = onMessage, $[5] = onStatus, $[6] = targetOrigin, $[7] = t0, $[8] = t1) : (t0 = $[7], t1 = $[8]), useEffect(t0, t1);
339
+ let t2;
340
+ $[9] === Symbol.for("react.memo_cache_sentinel") ? (t2 = (frameWindow) => {
341
+ const removeTarget = controllerRef.current?.addTarget(frameWindow);
338
342
  return () => {
339
343
  removeTarget?.();
340
344
  };
341
- }, $[15] = controller, $[16] = t8) : t8 = $[16];
342
- const connect = t8;
343
- let t9;
344
- $[17] !== channel ? (t9 = (type_0, data) => {
345
- channel?.post(type_0, data);
346
- }, $[17] = channel, $[18] = t9) : t9 = $[18];
347
- const sendMessage = t9;
348
- let t10, t11;
349
- $[19] !== instance || $[20] !== name ? (t10 = () => () => {
350
- releaseChannel(instance, name);
351
- }, t11 = [name, instance], $[19] = instance, $[20] = name, $[21] = t10, $[22] = t11) : (t10 = $[21], t11 = $[22]), useEffect(t10, t11);
352
- let t12;
353
- return $[23] !== connect || $[24] !== sendMessage || $[25] !== status ? (t12 = {
345
+ }, $[9] = t2) : t2 = $[9];
346
+ const connect = t2;
347
+ let t3;
348
+ $[10] === Symbol.for("react.memo_cache_sentinel") ? (t3 = (type_0, data) => {
349
+ channelRef.current?.post(type_0, data);
350
+ }, $[10] = t3) : t3 = $[10];
351
+ const sendMessage = t3;
352
+ let t4;
353
+ return $[11] === Symbol.for("react.memo_cache_sentinel") ? (t4 = {
354
354
  connect,
355
- sendMessage,
356
- status
357
- }, $[23] = connect, $[24] = sendMessage, $[25] = status, $[26] = t12) : t12 = $[26], t12;
355
+ sendMessage
356
+ }, $[11] = t4) : t4 = $[11], t4;
358
357
  }
359
358
  function _temp$5(unsub) {
360
359
  return unsub();
361
360
  }
362
- function useWindowConnection(options) {
363
- const $ = c(23), {
361
+ function useWindowConnection(t0) {
362
+ const $ = c(11), {
364
363
  name,
364
+ connectTo,
365
365
  onMessage,
366
- connectTo
367
- } = options, instance = useSanityInstance(), [status, setStatus] = useState("idle");
368
- let t0, t1;
369
- $[0] !== connectTo || $[1] !== instance || $[2] !== name ? (t1 = getOrCreateNode(instance, {
370
- name,
371
- connectTo
372
- }), $[0] = connectTo, $[1] = instance, $[2] = name, $[3] = t1) : t1 = $[3], t0 = t1;
373
- const node = t0;
374
- let t2;
375
- $[4] !== node ? (t2 = () => node.onStatus((newStatus) => {
376
- setStatus(newStatus);
377
- }), $[4] = node, $[5] = t2) : t2 = $[5];
378
- let t3;
379
- $[6] !== instance || $[7] !== name || $[8] !== node ? (t3 = [node, instance, name], $[6] = instance, $[7] = name, $[8] = node, $[9] = t3) : t3 = $[9], useEffect(t2, t3);
380
- let t4, t5;
381
- $[10] !== node || $[11] !== onMessage ? (t4 = () => {
382
- if (!onMessage)
383
- return;
384
- const unsubscribers = [];
385
- return Object.entries(onMessage).forEach((t62) => {
386
- const [type, handler] = t62, unsubscribe_0 = node.on(type, handler);
387
- unsubscribers.push(unsubscribe_0);
366
+ onStatus
367
+ } = t0, nodeRef = useRef(null);
368
+ let t1;
369
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t1 = [], $[0] = t1) : t1 = $[0];
370
+ const messageUnsubscribers = useRef(t1), instance = useSanityInstance();
371
+ let t2, t3;
372
+ $[1] !== connectTo || $[2] !== instance || $[3] !== name || $[4] !== onMessage || $[5] !== onStatus ? (t2 = () => {
373
+ const node = getOrCreateNode(instance, {
374
+ name,
375
+ connectTo
376
+ });
377
+ nodeRef.current = node;
378
+ const statusUnsubscribe = node.onStatus((eventStatus) => {
379
+ onStatus?.(eventStatus);
380
+ });
381
+ return onMessage && Object.entries(onMessage).forEach((t42) => {
382
+ const [type, handler] = t42, messageUnsubscribe = node.on(type, handler);
383
+ messageUnsubscribers.current.push(messageUnsubscribe);
388
384
  }), () => {
389
- unsubscribers.forEach(_temp$4);
385
+ statusUnsubscribe(), messageUnsubscribers.current.forEach(_temp$4), messageUnsubscribers.current = [], releaseNode(instance, name), nodeRef.current = null;
390
386
  };
391
- }, t5 = [node, onMessage], $[10] = node, $[11] = onMessage, $[12] = t4, $[13] = t5) : (t4 = $[12], t5 = $[13]), useEffect(t4, t5);
387
+ }, t3 = [instance, name, connectTo, onMessage, onStatus], $[1] = connectTo, $[2] = instance, $[3] = name, $[4] = onMessage, $[5] = onStatus, $[6] = t2, $[7] = t3) : (t2 = $[6], t3 = $[7]), useEffect(t2, t3);
388
+ let t4;
389
+ $[8] === Symbol.for("react.memo_cache_sentinel") ? (t4 = (type_0, data) => {
390
+ if (!nodeRef.current)
391
+ throw new Error("Cannot send message before connection is established");
392
+ nodeRef.current.post(type_0, data);
393
+ }, $[8] = t4) : t4 = $[8];
394
+ const sendMessage = t4;
395
+ let t5;
396
+ $[9] === Symbol.for("react.memo_cache_sentinel") ? (t5 = (type_1, data_0, fetchOptions) => nodeRef.current?.fetch(type_1, data_0, fetchOptions ?? {}), $[9] = t5) : t5 = $[9];
397
+ const fetch = t5;
392
398
  let t6;
393
- $[14] !== node ? (t6 = (type_0, data) => {
394
- node?.post(type_0, data);
395
- }, $[14] = node, $[15] = t6) : t6 = $[15];
396
- const sendMessage = t6;
397
- let t7, t8;
398
- $[16] !== instance || $[17] !== name ? (t7 = () => () => {
399
- releaseNode(instance, name);
400
- }, t8 = [instance, name], $[16] = instance, $[17] = name, $[18] = t7, $[19] = t8) : (t7 = $[18], t8 = $[19]), useEffect(t7, t8);
401
- let t9;
402
- return $[20] !== sendMessage || $[21] !== status ? (t9 = {
399
+ return $[10] === Symbol.for("react.memo_cache_sentinel") ? (t6 = {
403
400
  sendMessage,
404
- status
405
- }, $[20] = sendMessage, $[21] = status, $[22] = t9) : t9 = $[22], t9;
401
+ fetch
402
+ }, $[10] = t6) : t6 = $[10], t6;
406
403
  }
407
- function _temp$4(unsub) {
408
- return unsub();
404
+ function _temp$4(unsubscribe) {
405
+ return unsubscribe();
409
406
  }
410
407
  function useManageFavorite(t0) {
411
408
  const $ = c(14), {
412
409
  _id,
413
410
  _type
414
- } = t0, [isFavorited, setIsFavorited] = useState(!1);
411
+ } = t0, [isFavorited, setIsFavorited] = useState(!1), [status, setStatus] = useState("idle");
415
412
  let t1;
416
413
  $[0] === Symbol.for("react.memo_cache_sentinel") ? (t1 = {
417
414
  name: SDK_NODE_NAME,
418
- connectTo: SDK_CHANNEL_NAME
415
+ connectTo: SDK_CHANNEL_NAME,
416
+ onStatus: setStatus
419
417
  }, $[0] = t1) : t1 = $[0];
420
418
  const {
421
- sendMessage,
422
- status
419
+ sendMessage
423
420
  } = useWindowConnection(t1);
424
421
  let t2;
425
422
  $[1] !== _id || $[2] !== _type || $[3] !== sendMessage ? (t2 = (action, setFavoriteState) => {
@@ -458,15 +455,15 @@ function useRecordDocumentHistoryEvent(t0) {
458
455
  const $ = c(8), {
459
456
  _id,
460
457
  _type
461
- } = t0;
458
+ } = t0, [status, setStatus] = useState("idle");
462
459
  let t1;
463
460
  $[0] === Symbol.for("react.memo_cache_sentinel") ? (t1 = {
464
461
  name: SDK_NODE_NAME,
465
- connectTo: SDK_CHANNEL_NAME
462
+ connectTo: SDK_CHANNEL_NAME,
463
+ onStatus: setStatus
466
464
  }, $[0] = t1) : t1 = $[0];
467
465
  const {
468
- sendMessage,
469
- status
466
+ sendMessage
470
467
  } = useWindowConnection(t1);
471
468
  let t2;
472
469
  $[1] !== _id || $[2] !== _type || $[3] !== sendMessage ? (t2 = (eventType) => {
@@ -492,6 +489,100 @@ function useRecordDocumentHistoryEvent(t0) {
492
489
  isConnected: t3
493
490
  }, $[5] = recordEvent, $[6] = t3, $[7] = t4) : t4 = $[7], t4;
494
491
  }
492
+ function useStudioWorkspacesByResourceId() {
493
+ const $ = c(10);
494
+ let t0;
495
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = {}, $[0] = t0) : t0 = $[0];
496
+ const [workspacesByResourceId, setWorkspacesByResourceId] = useState(t0), [status, setStatus] = useState("idle"), [error, setError] = useState(null);
497
+ let t1;
498
+ $[1] === Symbol.for("react.memo_cache_sentinel") ? (t1 = {
499
+ name: "core/nodes/sdk",
500
+ connectTo: "core/channels/sdk",
501
+ onStatus: setStatus
502
+ }, $[1] = t1) : t1 = $[1];
503
+ const {
504
+ fetch
505
+ } = useWindowConnection(t1);
506
+ let t2, t3;
507
+ $[2] !== fetch || $[3] !== status ? (t2 = () => {
508
+ if (!fetch || status !== "connected")
509
+ return;
510
+ const fetchWorkspaces = async function(signal) {
511
+ try {
512
+ const data = await fetch("core/v1/bridge/context", void 0, {
513
+ signal
514
+ }), workspaceMap = {};
515
+ data.context.availableResources.forEach((resource) => {
516
+ !resource.projectId || !resource.workspaces?.length || resource.workspaces.forEach((workspace) => {
517
+ const key = `${resource.projectId}:${workspace.dataset}`;
518
+ workspaceMap[key] || (workspaceMap[key] = []), workspaceMap[key].push(workspace);
519
+ });
520
+ }), setWorkspacesByResourceId(workspaceMap), setError(null);
521
+ } catch (t42) {
522
+ const err = t42;
523
+ if (err instanceof Error) {
524
+ if (err.name === "AbortError")
525
+ return;
526
+ setError("Failed to fetch workspaces");
527
+ }
528
+ }
529
+ }, controller = new AbortController();
530
+ return fetchWorkspaces(controller.signal), () => {
531
+ controller.abort();
532
+ };
533
+ }, t3 = [fetch, status], $[2] = fetch, $[3] = status, $[4] = t2, $[5] = t3) : (t2 = $[4], t3 = $[5]), useEffect(t2, t3);
534
+ const t4 = status === "connected";
535
+ let t5;
536
+ return $[6] !== error || $[7] !== t4 || $[8] !== workspacesByResourceId ? (t5 = {
537
+ workspacesByResourceId,
538
+ error,
539
+ isConnected: t4
540
+ }, $[6] = error, $[7] = t4, $[8] = workspacesByResourceId, $[9] = t5) : t5 = $[9], t5;
541
+ }
542
+ function useNavigateToStudioDocument(documentHandle) {
543
+ const $ = c(10), {
544
+ workspacesByResourceId,
545
+ isConnected: workspacesConnected
546
+ } = useStudioWorkspacesByResourceId(), [status, setStatus] = useState("idle");
547
+ let t0;
548
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = {
549
+ name: "core/nodes/sdk",
550
+ connectTo: "core/channels/sdk",
551
+ onStatus: setStatus
552
+ }, $[0] = t0) : t0 = $[0];
553
+ const {
554
+ sendMessage
555
+ } = useWindowConnection(t0);
556
+ let t1;
557
+ $[1] !== documentHandle || $[2] !== sendMessage || $[3] !== status || $[4] !== workspacesByResourceId || $[5] !== workspacesConnected ? (t1 = () => {
558
+ if (!workspacesConnected || status !== "connected" || !documentHandle.resourceId)
559
+ return;
560
+ const [, projectAndDataset] = documentHandle.resourceId.split(":"), [projectId, dataset] = projectAndDataset.split(".");
561
+ if (!projectId || !dataset)
562
+ return;
563
+ const workspaces = workspacesByResourceId[`${projectId}:${dataset}`];
564
+ if (!workspaces?.length) {
565
+ console.warn("No workspace found for document", documentHandle.resourceId);
566
+ return;
567
+ }
568
+ workspaces.length > 1 && (console.warn("Multiple workspaces found for document", documentHandle.resourceId), console.warn("Using the first one", workspaces[0]));
569
+ const message = {
570
+ type: "core/v1/bridge/navigate-to-resource",
571
+ data: {
572
+ resourceId: workspaces[0]._ref,
573
+ resourceType: "studio",
574
+ path: `/intent/edit/id=${documentHandle._id};type=${documentHandle._type}`
575
+ }
576
+ };
577
+ sendMessage(message.type, message.data);
578
+ }, $[1] = documentHandle, $[2] = sendMessage, $[3] = status, $[4] = workspacesByResourceId, $[5] = workspacesConnected, $[6] = t1) : t1 = $[6];
579
+ const navigateToStudioDocument = t1, t2 = workspacesConnected && status === "connected";
580
+ let t3;
581
+ return $[7] !== navigateToStudioDocument || $[8] !== t2 ? (t3 = {
582
+ navigateToStudioDocument,
583
+ isConnected: t2
584
+ }, $[7] = navigateToStudioDocument, $[8] = t2, $[9] = t3) : t3 = $[9], t3;
585
+ }
495
586
  const useDatasets = createStateSourceHook({
496
587
  // remove `undefined` since we're suspending when that is the case
497
588
  getState: getDatasetsState,
@@ -811,7 +902,7 @@ function usePreview(t0) {
811
902
  let t5;
812
903
  return $[7] !== _id || $[8] !== _type || $[9] !== instance || $[10] !== stateSource ? (t5 = () => {
813
904
  const currentState = stateSource.getCurrent();
814
- if (currentState.results === null)
905
+ if (currentState.data === null)
815
906
  throw resolvePreview(instance, {
816
907
  document: {
817
908
  _id,
@@ -861,7 +952,7 @@ function useProjection(t0) {
861
952
  let t5;
862
953
  return $[8] !== _id || $[9] !== _type || $[10] !== instance || $[11] !== projection || $[12] !== stateSource ? (t5 = () => {
863
954
  const currentState = stateSource.getCurrent();
864
- if (currentState.results === null)
955
+ if (currentState.data === null)
865
956
  throw resolveProjection(instance, {
866
957
  document: {
867
958
  _id,
@@ -917,7 +1008,7 @@ function useUsers(params) {
917
1008
  loadMore: store.loadMore
918
1009
  }, $[11] = hasMore, $[12] = store.loadMore, $[13] = users, $[14] = t5) : t5 = $[14], t5;
919
1010
  }
920
- var version = "0.0.0-alpha.19";
1011
+ var version = "0.0.0-alpha.20";
921
1012
  function getEnv(key) {
922
1013
  if (typeof import.meta < "u" && import.meta.env)
923
1014
  return import.meta.env[key];
@@ -938,6 +1029,7 @@ export {
938
1029
  useAuthToken,
939
1030
  useClient,
940
1031
  useCurrentUser,
1032
+ useDashboardOrganizationId,
941
1033
  useDatasets,
942
1034
  useDocument,
943
1035
  useDocumentEvent,
@@ -949,6 +1041,7 @@ export {
949
1041
  useLogOut,
950
1042
  useLoginUrls,
951
1043
  useManageFavorite,
1044
+ useNavigateToStudioDocument,
952
1045
  usePaginatedList,
953
1046
  usePermissions,
954
1047
  usePreview,
@@ -958,6 +1051,7 @@ export {
958
1051
  useQuery,
959
1052
  useRecordDocumentHistoryEvent,
960
1053
  useSanityInstance,
1054
+ useStudioWorkspacesByResourceId,
961
1055
  useUsers,
962
1056
  useWindowConnection
963
1057
  };