sanity 6.7.0 → 6.8.0-next.2
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/lib/{AddonDatasetProvider-DGvQRg0M.js → AddonDatasetProvider-DKjnqxwO.js} +2 -2
- package/lib/{AddonDatasetProvider-DGvQRg0M.js.map → AddonDatasetProvider-DKjnqxwO.js.map} +1 -1
- package/lib/{CalendarFilter-Cz5HCFLA.js → CalendarFilter-B5Bb9eze.js} +3 -3
- package/lib/{CalendarFilter-Cz5HCFLA.js.map → CalendarFilter-B5Bb9eze.js.map} +1 -1
- package/lib/{CommentsDocumentLayout-C8D--w7w.js → CommentsDocumentLayout-Brt2OR56.js} +2 -2
- package/lib/{CommentsDocumentLayout-C8D--w7w.js.map → CommentsDocumentLayout-Brt2OR56.js.map} +1 -1
- package/lib/{CommentsField-01fndj6n.js → CommentsField-Cmmta6uT.js} +3 -3
- package/lib/{CommentsField-01fndj6n.js.map → CommentsField-Cmmta6uT.js.map} +1 -1
- package/lib/{CommentsInput-DEXCCEGP.js → CommentsInput-C7Kq5XMu.js} +5 -5
- package/lib/{CommentsInput-DEXCCEGP.js.map → CommentsInput-C7Kq5XMu.js.map} +1 -1
- package/lib/{CommentsInspector-DBY7KD3P.js → CommentsInspector-H5CpN_XH.js} +5 -5
- package/lib/{CommentsInspector-DBY7KD3P.js.map → CommentsInspector-H5CpN_XH.js.map} +1 -1
- package/lib/{CommentsListItem-BEGOSIY0.js → CommentsListItem-x7FKz_CM.js} +3 -3
- package/lib/{CommentsListItem-BEGOSIY0.js.map → CommentsListItem-x7FKz_CM.js.map} +1 -1
- package/lib/{CommentsSelectedPathProvider-Clvemp0W.js → CommentsSelectedPathProvider-Bt8q7wL8.js} +3 -3
- package/lib/{CommentsSelectedPathProvider-Clvemp0W.js.map → CommentsSelectedPathProvider-Bt8q7wL8.js.map} +1 -1
- package/lib/{CommentsStudioLayout-D1kFwOni.js → CommentsStudioLayout-BTJ8Jz1o.js} +4 -4
- package/lib/{CommentsStudioLayout-D1kFwOni.js.map → CommentsStudioLayout-BTJ8Jz1o.js.map} +1 -1
- package/lib/{PaneContainer-QCEhEyzd.js → PaneContainer-D8iNUpZk.js} +2 -2
- package/lib/{PaneContainer-QCEhEyzd.js.map → PaneContainer-D8iNUpZk.js.map} +1 -1
- package/lib/{ReleasesMetadataProvider-DH9ZPiY1.js → ReleasesMetadataProvider-CZ8jrkBT.js} +2 -2
- package/lib/{ReleasesMetadataProvider-DH9ZPiY1.js.map → ReleasesMetadataProvider-CZ8jrkBT.js.map} +1 -1
- package/lib/{ReleasesNav-DIkvTixA.js → ReleasesNav-BmGRLcrk.js} +14 -14
- package/lib/{ReleasesNav-DIkvTixA.js.map → ReleasesNav-BmGRLcrk.js.map} +1 -1
- package/lib/{ReleasesStudioLayout-KuVpj5_v.js → ReleasesStudioLayout-6V5oDb3h.js} +8 -8
- package/lib/{ReleasesStudioLayout-KuVpj5_v.js.map → ReleasesStudioLayout-6V5oDb3h.js.map} +1 -1
- package/lib/{ReleasesTool-DN5FBLWz.js → ReleasesTool-CMABMGcE.js} +14 -14
- package/lib/{ReleasesTool-DN5FBLWz.js.map → ReleasesTool-CMABMGcE.js.map} +1 -1
- package/lib/{SchedulePublishingStudioLayout-B5K8nqiH.js → SchedulePublishingStudioLayout-BJDA4FBy.js} +3 -3
- package/lib/{SchedulePublishingStudioLayout-B5K8nqiH.js.map → SchedulePublishingStudioLayout-BJDA4FBy.js.map} +1 -1
- package/lib/{SchedulePublishingUpsellProvider-CSMocuXk.js → SchedulePublishingUpsellProvider-DfmpnFZz.js} +2 -2
- package/lib/{SchedulePublishingUpsellProvider-CSMocuXk.js.map → SchedulePublishingUpsellProvider-DfmpnFZz.js.map} +1 -1
- package/lib/{ScheduledPublishingEnabledProvider-DGpt_kKu.js → ScheduledPublishingEnabledProvider-C2jEx3t4.js} +3 -3
- package/lib/{ScheduledPublishingEnabledProvider-DGpt_kKu.js.map → ScheduledPublishingEnabledProvider-C2jEx3t4.js.map} +1 -1
- package/lib/{SearchProvider-Iy4-6hcz.js → SearchProvider-Dk7IfeRS.js} +4 -4
- package/lib/{SearchProvider-Iy4-6hcz.js.map → SearchProvider-Dk7IfeRS.js.map} +1 -1
- package/lib/{SingleDocReleaseLayout-CRJT6Vu9.js → SingleDocReleaseLayout-DW02L2zA.js} +2 -2
- package/lib/{SingleDocReleaseLayout-CRJT6Vu9.js.map → SingleDocReleaseLayout-DW02L2zA.js.map} +1 -1
- package/lib/{SingleDocReleaseUpsellProvider-BRUYOryN.js → SingleDocReleaseUpsellProvider-9OXN223n.js} +4 -4
- package/lib/{SingleDocReleaseUpsellProvider-BRUYOryN.js.map → SingleDocReleaseUpsellProvider-9OXN223n.js.map} +1 -1
- package/lib/{TasksStudioActiveToolLayout-BUnLMMYi.js → TasksStudioActiveToolLayout-grF1qQvq.js} +11 -11
- package/lib/{TasksStudioActiveToolLayout-BUnLMMYi.js.map → TasksStudioActiveToolLayout-grF1qQvq.js.map} +1 -1
- package/lib/{TasksStudioLayout-ClMZ9sWa.js → TasksStudioLayout-Dq72bdM2.js} +5 -5
- package/lib/{TasksStudioLayout-ClMZ9sWa.js.map → TasksStudioLayout-Dq72bdM2.js.map} +1 -1
- package/lib/{Tool-CGMUCSOs.js → Tool-DNTYDreC.js} +12 -12
- package/lib/{Tool-CGMUCSOs.js.map → Tool-DNTYDreC.js.map} +1 -1
- package/lib/{UnpublishVersionDialog-DnGH3SLI.js → UnpublishVersionDialog-B0kX1dt6.js} +4 -4
- package/lib/{UnpublishVersionDialog-DnGH3SLI.js.map → UnpublishVersionDialog-B0kX1dt6.js.map} +1 -1
- package/lib/{UpsellDialog-Dcjf8OuF.js → UpsellDialog-B3IbZqLA.js} +2 -2
- package/lib/{UpsellDialog-Dcjf8OuF.js.map → UpsellDialog-B3IbZqLA.js.map} +1 -1
- package/lib/{VariantsStudioNavbar-D8L9UWqH.js → VariantsStudioNavbar-N-cvStJh.js} +6 -6
- package/lib/{VariantsStudioNavbar-D8L9UWqH.js.map → VariantsStudioNavbar-N-cvStJh.js.map} +1 -1
- package/lib/{VariantsTool-JHeKZHcr.js → VariantsTool-Bj3RjgBN.js} +7 -7
- package/lib/{VariantsTool-JHeKZHcr.js.map → VariantsTool-Bj3RjgBN.js.map} +1 -1
- package/lib/{WorkspaceLoader-CtnP9tNF.js → WorkspaceLoader-BZD0-fj6.js} +21 -21
- package/lib/{WorkspaceLoader-CtnP9tNF.js.map → WorkspaceLoader-BZD0-fj6.js.map} +1 -1
- package/lib/_createContext.js +1 -1
- package/lib/_singletons.d.ts +1 -1
- package/lib/{buildTextSelectionFromFragment-k_rh1KNa.js → buildTextSelectionFromFragment-BXiSMql4.js} +3 -3
- package/lib/{buildTextSelectionFromFragment-k_rh1KNa.js.map → buildTextSelectionFromFragment-BXiSMql4.js.map} +1 -1
- package/lib/{datastores-X2znh4zT.js → datastores-CFWEadl-.js} +6 -5
- package/lib/datastores-CFWEadl-.js.map +1 -0
- package/lib/desk.d.ts +1 -1
- package/lib/desk.js +2 -2
- package/lib/{index-Z0jxEn8U.d.ts → index-Dhee2Ms1.d.ts} +21 -2
- package/lib/index.d.ts +1 -1
- package/lib/index.js +29 -29
- package/lib/{inputResolver-CwZU1DyA.js → inputResolver-BHxsuFDP.js} +4 -4
- package/lib/{inputResolver-CwZU1DyA.js.map → inputResolver-BHxsuFDP.js.map} +1 -1
- package/lib/{list-CQ5wYKGN.js → list-CwENPuWS.js} +2 -2
- package/lib/{list-CQ5wYKGN.js.map → list-CwENPuWS.js.map} +1 -1
- package/lib/{navigation.telemetry-Poh1ANIW.js → navigation.telemetry-C6drHR5a.js} +7 -7
- package/lib/{navigation.telemetry-Poh1ANIW.js.map → navigation.telemetry-C6drHR5a.js.map} +1 -1
- package/lib/pane-CEegQ2Kh.js +2 -0
- package/lib/pane-DHrjuFiG.js +2 -0
- package/lib/{plugin-CNhX_Tb7.js → plugin-BHRmn24Q.js} +6 -6
- package/lib/{plugin-CNhX_Tb7.js.map → plugin-BHRmn24Q.js.map} +1 -1
- package/lib/{plugin-C220AR82.js → plugin-C1y-_vWr.js} +3 -3
- package/lib/{plugin-C220AR82.js.map → plugin-C1y-_vWr.js.map} +1 -1
- package/lib/{plugin-WOJhZc9d.js → plugin-Cr5EXfrh.js} +4 -4
- package/lib/{plugin-WOJhZc9d.js.map → plugin-Cr5EXfrh.js.map} +1 -1
- package/lib/{plugin-CXnu--df.js → plugin-DkiEMpfN.js} +5 -5
- package/lib/{plugin-CXnu--df.js.map → plugin-DkiEMpfN.js.map} +1 -1
- package/lib/{scheduleItem-DvRHEFEW.js → scheduleItem-u5-b4stD.js} +8 -8
- package/lib/{scheduleItem-DvRHEFEW.js.map → scheduleItem-u5-b4stD.js.map} +1 -1
- package/lib/{schedules-pdE6eEGn.js → schedules-D0WwNN6x.js} +3 -3
- package/lib/{schedules-pdE6eEGn.js.map → schedules-D0WwNN6x.js.map} +1 -1
- package/lib/structure.js +2 -2
- package/lib/{structureTool-BwC_ba3R.js → structureTool-B5ch7u4I.js} +6 -6
- package/lib/{structureTool-BwC_ba3R.js.map → structureTool-B5ch7u4I.js.map} +1 -1
- package/lib/{structureTool-BRYk4qG7.js → structureTool-BCCGiqpF.js} +34 -34
- package/lib/structureTool-BCCGiqpF.js.map +1 -0
- package/lib/{studioClient--dm-G_7a.js → studioClient-DvoDxN44.js} +2 -2
- package/lib/{studioClient--dm-G_7a.js.map → studioClient-DvoDxN44.js.map} +1 -1
- package/lib/{useBundleDocuments-oAq5rEkm.js → useBundleDocuments-CWvP-dZI.js} +7 -7
- package/lib/{useBundleDocuments-oAq5rEkm.js.map → useBundleDocuments-CWvP-dZI.js.map} +1 -1
- package/lib/{useComments-DYQ9xguT.js → useComments-KoRXRvW7.js} +2 -2
- package/lib/{useComments-DYQ9xguT.js.map → useComments-KoRXRvW7.js.map} +1 -1
- package/lib/{useCommentsTelemetry-BoYJL3eG.js → useCommentsTelemetry-LlKtxi5d.js} +3 -3
- package/lib/{useCommentsTelemetry-BoYJL3eG.js.map → useCommentsTelemetry-LlKtxi5d.js.map} +1 -1
- package/lib/{useDocumentPreviewValues-v43xdQrb.js → useDocumentPreviewValues-DcVumcdT.js} +3 -3
- package/lib/{useDocumentPreviewValues-v43xdQrb.js.map → useDocumentPreviewValues-DcVumcdT.js.map} +1 -1
- package/lib/{useFeatureEnabled-4gSsu40G.js → useFeatureEnabled-D7BsN6xF.js} +2 -2
- package/lib/{useFeatureEnabled-4gSsu40G.js.map → useFeatureEnabled-D7BsN6xF.js.map} +1 -1
- package/lib/{useFieldActions-BKWh56GI.js → useFieldActions-NrjLdjo8.js} +2 -2
- package/lib/{useFieldActions-BKWh56GI.js.map → useFieldActions-NrjLdjo8.js.map} +1 -1
- package/lib/{useReleasesToolAvailable-5DSPa2Gx.js → useReleasesToolAvailable-Cki52QI6.js} +3 -3
- package/lib/{useReleasesToolAvailable-5DSPa2Gx.js.map → useReleasesToolAvailable-Cki52QI6.js.map} +1 -1
- package/lib/{useScheduledDraftMenuActions-BxKkDOS8.js → useScheduledDraftMenuActions-DIa5I8rU.js} +38 -21
- package/lib/useScheduledDraftMenuActions-DIa5I8rU.js.map +1 -0
- package/lib/{useSetVariant-C6TkfVCm.js → useSetVariant-MvLHJC9A.js} +3 -3
- package/lib/{useSetVariant-C6TkfVCm.js.map → useSetVariant-MvLHJC9A.js.map} +1 -1
- package/lib/{useStudioUrl-CGakngEM.js → useStudioUrl-DN_xMGIS.js} +5 -5
- package/lib/{useStudioUrl-CGakngEM.js.map → useStudioUrl-DN_xMGIS.js.map} +1 -1
- package/lib/{useTimeZone-BoKWaSj6.js → useTimeZone-B5fBFjsR.js} +2 -2
- package/lib/{useTimeZone-BoKWaSj6.js.map → useTimeZone-B5fBFjsR.js.map} +1 -1
- package/lib/{userComponent-DIoiRgtl.js → userComponent-BQj9BWzn.js} +2 -2
- package/lib/{userComponent-DIoiRgtl.js.map → userComponent-BQj9BWzn.js.map} +1 -1
- package/lib/{validationUtils-CX9mO1s1.js → validationUtils-RTzFL-p1.js} +4 -4
- package/lib/{validationUtils-CX9mO1s1.js.map → validationUtils-RTzFL-p1.js.map} +1 -1
- package/lib/{version-CUL0S-Ix.js → version-CY300aPw.js} +2 -2
- package/lib/{version-CUL0S-Ix.js.map → version-CY300aPw.js.map} +1 -1
- package/package.json +10 -10
- package/lib/datastores-X2znh4zT.js.map +0 -1
- package/lib/pane-CoSiSpvR.js +0 -2
- package/lib/pane-ptq8ykm7.js +0 -2
- package/lib/structureTool-BRYk4qG7.js.map +0 -1
- package/lib/useScheduledDraftMenuActions-BxKkDOS8.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaneContainer-QCEhEyzd.js","names":["SortOrder","PARTIAL_PAGE_LIMIT","FULL_LIST_LIMIT","DEFAULT_ORDERING","by","field","direction","EMPTY_RECORD","Record","SanityDocument","Box","Container","Flex","Heading","Stack","Text","useCallback","useEffect","useMemo","useState","CommandList","CommandListRenderItemCallback","ErrorActions","GeneralPreviewLayoutKey","getPublishedId","isDev","LoadingBlock","SanityDefaultPreview","Translate","useSchema","useTranslation","styled","Delay","PaneContent","usePane","usePaneLayout","PaneItem","structureLocaleNamespace","FULL_LIST_LIMIT","DocumentListPaneItem","LoadingVariant","SortOrder","RootBox","$opacity","props","CommandListBox","DocumentListPaneContentProps","childItemId","error","message","filterIsSimpleTypeConstraint","hasMaxItems","muted","hasSearchQuery","isActive","isLazyLoading","isLoading","isConnected","autoRetry","canRetry","retryCount","isRetrying","items","layout","loadingVariant","onEndReached","onRetry","paneTitle","searchInputElement","HTMLInputElement","showIcons","sortOrder","SKELETON_ITEMS","Array","keys","LoadingView","$","_c","t0","map","num","t1","DocumentListPaneContent","schema","collapsed","layoutCollapsed","index","shouldRender","setShouldRender","t","handleEndReached","timer","setTimeout","clearTimeout","t2","t3","length","item","t4","activeIndex","publishedId","_id","isSelected","pressed","selected","isLastItem","showSpinner","showMaxItemsMessage","undefined","get","_type","limit","renderItem","bb0","t5","t6","noDocumentsContent","bb1","isOnline","window","navigator","onLine","t7","t8","Code","_temp","t9","t10","t11","t12","count","t13","key","mainContent","children","SortIcon","Box","Menu","MenuDivider","Text","memo","useId","useGetI18nText","useTranslation","Button","MenuButton","MenuItem","structureLocaleNamespace","PaneMenuItem","RELEVANCE_ORDERING_ID","getSearchOrderingId","menuItem","id","JSON","stringify","params","by","isSortOrderingMenuItem","action","Array","isArray","OrderingMenuItemProps","selected","onSelect","OrderingMenuItem","t0","$","_c","getI18nText","t1","title","t2","t3","DocumentListPaneSearchOrderingProps","orderings","value","onChange","DocumentListPaneSearchOrdering","props","t","menuButtonId","relevanceTitle","undefined","find","ordering","selectedOrdering","order","buttonText","length","t4","t5","t6","t7","t8","Symbol","for","t9","t10","ordering_0","map","t11","placement","portal","radius","t12","isArraySchemaType","isIndexSegment","isKeySegment","isReferenceSchemaType","ObjectField","ObjectFieldType","ObjectSchemaType","SanityDocumentLike","SchemaType","PathUtils","ExprNode","parse","collate","DocumentListPaneItem","SortOrder","StaticSortOrder","toStaticSortOrder","sortOrder","by","map","field","direction","mapWith","nulls","undefined","fromStaticSortOrder","staticSortOrder","schemaType","Array","isArray","entry","removePublishedWithDrafts","documents","doc","draft","published","versions","hasDraft","Boolean","hasPublished","applyOrderingFunctions","order","orderBy","fieldType","tryResolveSchemaTypeForPath","fieldExtendsType","jsonType","every","item","index","BUILT_IN_SORT_FIELDS","Set","validateSortOrder","fallback","allFieldsValid","has","baseType","path","pathSegments","fromString","current","segment","getFieldTypeByName","refType","otherRefType","to","isArrayAccessor","of","length","memberType","refTargets","type","fieldName","fields","find","name","ofType","findTypes","node","left","right","op","base","value","types","element","elements","isSplat","add","size","findStaticTypesInFilter","filter","params","Record","from","sort","getPublishedId","DocumentListPaneItem","SortOrder","ORDER_BY_IDS_PARAM_FIELD","ORDER_BY_IDS_PARAM_SORT_ORDER","by","field","direction","isOrderByIdsParam","sortOrder","length","reorderItemsByIdsParam","items","ids","indexById","reduce","Map","accumulatedIndex","id","index","has","set","positionOf","item","matchedIndex","get","_id","undefined","Number","MAX_SAFE_INTEGER","map","originalIndex","sort","first","second","positionDifference","entry","defineEvent","DocumentListLoadTimeData","durationMs","searchStringLength","returnedDocuments","fromCache","DocumentListLoadTimeMeasured","name","version","description","maxSampleRate","ClientPerspective","SanityClient","asyncScheduler","defer","filter","map","merge","mergeMap","Observable","of","partition","share","throttleTime","throwError","timer","exhaustMapWithTrailing","scan","compileFieldPath","createSearch","createSWR","getSearchableTypes","SanityDocumentLike","Schema","SearchOptions","SearchSort","SearchStrategy","toStaticSortOrder","SortOrder","ListenQueryOptions","client","limit","params","Record","schema","searchQuery","sort","perspective","staticTypeNames","maxFieldDepth","searchStrategy","sortByRelevance","SearchQueryEvent","type","documents","SearchQueryState","connected","fromCache","swr","maxSize","resolveSearchOrdering","options","sortBy","useRelevance","skipSortByScore","Boolean","field","direction","listenSearchQuery","groqFilter","by","events$","listen","events","includeAllVersions","includeResult","visibility","tag","pipe","ev","i","isFirst","Error","welcome$","mutationAndReconnect$","swrKey","JSON","stringify","fiilter","leading","trailing","event","typeNames$","observable","fetch","typeNames","types","includes","name","entry","strict","search","strategy","maxDepth","doFetch","searchTerms","query","searchOptions","comments","result","hits","hit","const","acc","v","value","ChannelError","ClientError","ClientPerspective","SanityClient","ServerError","useTelemetry","observableCallback","useMemo","useState","useObservable","concat","fromEvent","merge","NEVER","of","timer","filter","map","mergeMap","scan","share","shareReplay","switchMap","take","takeUntil","withLatestFrom","catchWithCount","measureFirstMatch","useSchema","useSearchMaxFieldDepth","useWorkspace","DocumentListLoadTimeMeasured","DEFAULT_ORDERING","FULL_LIST_LIMIT","PARTIAL_PAGE_LIMIT","findStaticTypesInFilter","removePublishedWithDrafts","listenSearchQuery","DocumentListPaneItem","SortOrder","UseDocumentListOpts","client","perspective","params","Record","searchQuery","sortOrder","searchSortByRelevance","DocumentListState","error","message","isLoadingFullList","isLoading","connected","isRetrying","autoRetry","canRetry","retryCount","fromCache","items","INITIAL_QUERY_STATE","UseDocumentListHookValue","onRetry","onLoadFullList","isRetriableError","statusCode","useDocumentList","opts","$","_c","searchFilter","paramsProp","t0","undefined","strategy","searchStrategy","search","schema","maxFieldDepth","telemetry","t1","typeNameFromFilter","t2","_temp","onRetry$","t3","_temp2","onFetchFullList$","t4","t5","t6","listenSearchQueryArgs","limit","sort","staticTypeNames","sortByRelevance","t7","durationMs","data","log","searchStringLength","length","returnedDocuments","documents","partialList$","pipe","_temp3","refCount","bufferSize","fullList$","_temp4","type","const","_temp5","t8","lastError","caught$","safeError","isOnline","window","navigator","onLine","retries","retrying","_temp6","_temp7","queryResults$","error_0","canRetry_0","autoRetry_0","retryCount_0","prev","event_0","event","result","Error","result_1","result_0","nonErrorThrownWarning","thrown","String","SearchIcon","SpinnerIcon","Box","Stack","TextInput","memo","useCallback","useEffect","useMemo","useState","useObservableEvent","debounce","map","Observable","of","tap","timer","DEFAULT_STUDIO_CLIENT_OPTIONS","EMPTY_ARRAY","GeneralPreviewLayoutKey","useActiveReleases","useClient","useI18nText","usePerspective","useReconnectingToast","useSchema","useTranslation","useUnique","keyframes","styled","structureLocaleNamespace","BaseStructureToolPaneProps","DEFAULT_ORDERING","EMPTY_RECORD","FULL_LIST_LIMIT","DocumentListPaneContent","DocumentListPaneSearchOrdering","getSearchOrderingId","isSortOrderingMenuItem","RELEVANCE_ORDERING_ID","applyOrderingFunctions","findStaticTypesInFilter","isOrderByIdsParam","reorderItemsByIdsParam","useShallowUnique","LoadingVariant","SortOrder","useDocumentList","DocumentListPaneProps","sortOrder","layout","rotate","fadeIn","AnimatedSpinnerIcon","SubtleSpinnerIcon","DelayedSubtleSpinnerIcon","DocumentListPane","props","$","_c","childItemId","isActive","pane","paneKey","sortOrderRaw","schema","releases","perspectiveStack","displayOptions","options","apiVersion","filter","params","t0","bb0","t1","staticTypes","length","typeName","showIcons","t","title","searchQuery","setSearchQuery","searchInputValue","setSearchInputValue","searchInputElement","setSearchInputElement","searchOrderingId","setSearchOrderingId","trim","trimmedSearchQuery","orderByIdsParam","t2","get","sortWithOrderingFn","fetchSortOrder","t3","menuItems","t4","_temp","searchOrderings","useRelevance","t5","t6","selectedSearchOrdering","undefined","find","ordering","searchSchemaType","by","effectiveSortOrder","t7","t8","client","t9","perspective","searchSortByRelevance","error","isLoadingFullList","isLoading","documentListIsLoading","items","fromCache","isRetrying","autoRetry","canRetry","retryCount","connected","onLoadFullList","onRetry","t10","bb1","idsParam","Array","isArray","ids","t11","orderedItems","loading","Symbol","for","event$","pipe","_temp2","_temp3","handleQueryChange","t12","handleClearSearch","t13","event_0","event","key","handleSearchKeyDown","enableSearchSpinner","setEnableSearchSpinner","t14","t15","t16","t17","t18","t19","t20","bb2","loadingVariant","t21","bb3","textInputIcon","t22","t23","Boolean","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","item","target","value","ArrowLeftIcon","memo","ReactNode","useMemo","GeneralPreviewLayoutKey","InitialValueTemplateItem","Button","TooltipDelayGroupProvider","PaneHeader","StructurePaneHeader","usePane","PaneHeaderActions","BackLink","PaneMenuItem","PaneMenuItemGroup","StructureToolPaneActionHandler","useStructureTool","SortOrder","PaneHeaderProps","contentAfter","customMenuItemState","Record","index","initialValueTemplates","menuItemGroups","menuItems","setLayout","layout","setSortOrder","sortOrder","setCustomMenuItemState","state","restoreDefaultLayout","restoreDefaultSortOrder","title","t0","$","_c","t1","t2","t3","t4","t5","undefined","t6","t7","t8","features","collapsed","isLast","tabIndex","t9","t10","value","sort","t11","params","id","_menuItemId","value_0","currentValue","newState","Object","fromEntries","entries","filter","t12","key","setMenuItemState","actionHandlers","t13","t14","backButton","content","t15","displayName","Card","Code","isEqual","memo","useCallback","useMemo","useState","EMPTY_ARRAY","GeneralDocumentListLayoutKey","ObjectSchemaType","SourceProvider","useI18nText","useSchema","useSource","useTranslation","shallowEquals","Pane","_DEBUG","structureLocaleNamespace","assignId","PaneMenuItem","useStructureToolSetting","BaseStructureToolPaneProps","DEFAULT_ORDERING","EMPTY_RECORD","DocumentListPane","findStaticTypesInFilter","fromStaticSortOrder","toStaticSortOrder","validateSortOrder","PaneHeader","SortOrder","StaticSortOrder","CustomMenuItemState","Record","addIdsToMenuItems","menuItems","map","item","id","addSelectedStateToMenuItems","options","sortOrderRaw","layout","customMenuItemState","schemaType","disabledSortReason","params","selected","by","itemSortOrder","isInvalidSortOrder","staticSortBy","itemSortBy","disabled","reason","storedValue","itemValue","value","appendRestoreDefaultItems","isSortDefault","isLayoutDefault","restoreSortDisabledReason","restoreLayoutDisabledReason","suppressRestoreDefaults","hasSortItems","some","group","action","hasLayoutItems","restoreDefaultSortOrderItem","i18n","title","key","ns","hideSelectionIndicator","restoreDefaultLayoutItem","useShallowUnique","previous","setPrevious","PaneContainer","props","$","_c","index","isSelected","pane","paneKey","name","parentSourceName","defaultLayout","t0","initialValueTemplates","t1","menuItemGroups","suppressRestoreDefaultMenuItems","undefined","defaultOrdering","t2","filter","sourceName","source","t3","bb0","t4","staticTypes","length","typeName","setLayout","defaultSortOrder","storedSortOrderRaw","setStoredSortOrder","schema","t5","get","t","t6","t7","bb1","t8","validatedSortOrder","newSortOrder","validated","handleSetSortOrder","t9","handleRestoreDefaultSortOrder","t10","handleRestoreDefaultLayout","t11","Symbol","for","setCustomMenuItemState","t12","menuItemsWithIds","t13","t14","menuItemsWithSelectedState","t15","t16","menuItemsWithRestoreDefaults","t17","t18","t19","t20","t21","t22","displayName"],"sources":["../src/structure/panes/documentList/constants.ts","../src/structure/panes/documentList/DocumentListPaneContent.tsx","../src/structure/panes/documentList/DocumentListPaneSearchOrdering.tsx","../src/structure/panes/documentList/helpers.ts","../src/structure/panes/documentList/orderByIdsParam.ts","../src/structure/panes/documentList/__telemetry__/documentListSearch.telemetry.ts","../src/structure/panes/documentList/listenSearchQuery.ts","../src/structure/panes/documentList/useDocumentList.ts","../src/structure/panes/documentList/DocumentListPane.tsx","../src/structure/panes/documentList/PaneHeader.tsx","../src/structure/panes/documentList/PaneContainer.tsx"],"sourcesContent":["import {type SortOrder} from './types'\n\nexport const PARTIAL_PAGE_LIMIT = 100\nexport const FULL_LIST_LIMIT = 2000\nexport const DEFAULT_ORDERING: SortOrder = {by: [{field: '_updatedAt', direction: 'desc'}]}\nexport const EMPTY_RECORD: Record<string, unknown> = {}\n","import {type SanityDocument} from '@sanity/types'\nimport {Box, Container, Flex, Heading, Stack, Text} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {\n CommandList,\n type CommandListRenderItemCallback,\n ErrorActions,\n type GeneralPreviewLayoutKey,\n getPublishedId,\n isDev,\n LoadingBlock,\n SanityDefaultPreview,\n Translate,\n useSchema,\n useTranslation,\n} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {Delay} from '../../components/Delay'\nimport {PaneContent} from '../../components/pane/PaneContent'\nimport {usePane} from '../../components/pane/usePane'\nimport {usePaneLayout} from '../../components/pane/usePaneLayout'\nimport {PaneItem} from '../../components/paneItem/PaneItem'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {FULL_LIST_LIMIT} from './constants'\nimport {type DocumentListPaneItem, type LoadingVariant, type SortOrder} from './types'\n\nconst RootBox = styled(Box)<{$opacity?: number}>`\n position: relative;\n opacity: ${(props) => props.$opacity || 1};\n transition: opacity 0.4s;\n`\n\nconst CommandListBox = styled(Box)`\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n`\n\ninterface DocumentListPaneContentProps {\n childItemId?: string\n error: {message: string} | null\n filterIsSimpleTypeConstraint: boolean\n hasMaxItems?: boolean\n muted?: boolean\n hasSearchQuery: boolean\n isActive?: boolean\n isLazyLoading: boolean\n isLoading: boolean\n isConnected?: boolean\n autoRetry?: boolean\n canRetry: boolean\n retryCount?: number\n isRetrying?: boolean\n items: DocumentListPaneItem[]\n layout?: GeneralPreviewLayoutKey\n loadingVariant?: LoadingVariant\n onEndReached: () => void\n onRetry?: () => void\n paneTitle: string\n searchInputElement: HTMLInputElement | null\n showIcons: boolean\n sortOrder?: SortOrder\n}\n\nconst SKELETON_ITEMS = [...Array(30).keys()]\n\nfunction LoadingView(props: {layout?: GeneralPreviewLayoutKey}) {\n const {layout} = props\n\n return (\n <Stack paddingX={3} paddingY={2} paddingTop={0} space={1}>\n {SKELETON_ITEMS.map((num) => (\n <SanityDefaultPreview key={num} isPlaceholder layout={layout} />\n ))}\n </Stack>\n )\n}\n\nexport function DocumentListPaneContent(props: DocumentListPaneContentProps) {\n const {\n childItemId,\n error,\n isRetrying,\n autoRetry,\n filterIsSimpleTypeConstraint,\n hasMaxItems,\n hasSearchQuery,\n isActive,\n isLazyLoading,\n muted,\n isLoading,\n isConnected,\n retryCount,\n canRetry,\n items,\n layout,\n loadingVariant,\n onEndReached,\n onRetry,\n paneTitle,\n searchInputElement,\n showIcons,\n sortOrder,\n } = props\n\n const schema = useSchema()\n\n const {collapsed: layoutCollapsed} = usePaneLayout()\n const {collapsed, index} = usePane()\n const [shouldRender, setShouldRender] = useState(!collapsed)\n const {t} = useTranslation(structureLocaleNamespace)\n\n const handleEndReached = useCallback(() => {\n if (shouldRender) {\n onEndReached()\n }\n }, [onEndReached, shouldRender])\n\n useEffect(() => {\n if (collapsed) return undefined\n\n const timer = setTimeout(() => {\n setShouldRender(true)\n }, 0)\n\n return () => {\n clearTimeout(timer)\n }\n }, [collapsed, items])\n\n const renderItem = useCallback<CommandListRenderItemCallback<SanityDocument>>(\n (item, {activeIndex}) => {\n const publishedId = getPublishedId(item._id)\n const isSelected = childItemId === publishedId\n const pressed = !isActive && isSelected\n const selected = isActive && isSelected\n const isLastItem = activeIndex === items.length - 1\n const showSpinner = isLastItem && isLazyLoading\n const showMaxItemsMessage = isLastItem && hasMaxItems\n\n return (\n <>\n <PaneItem\n icon={showIcons ? undefined : false}\n id={publishedId}\n layout={layout}\n marginBottom={1}\n pressed={pressed}\n schemaType={schema.get(item._type)}\n selected={selected}\n sortOrder={sortOrder}\n value={item}\n />\n\n {showSpinner && <LoadingBlock />}\n\n {showMaxItemsMessage && (\n <Box marginY={1} paddingX={3} paddingY={4}>\n <Text align=\"center\" muted size={1}>\n {t('panes.document-list-pane.max-items.text', {limit: FULL_LIST_LIMIT})}\n </Text>\n </Box>\n )}\n </>\n )\n },\n [\n childItemId,\n isActive,\n items.length,\n layout,\n schema,\n showIcons,\n sortOrder,\n hasMaxItems,\n isLazyLoading,\n t,\n ],\n )\n\n const noDocumentsContent = useMemo(() => {\n if (hasSearchQuery) {\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Box paddingX={4} paddingY={5}>\n <Text align=\"center\" muted>\n {t('panes.document-list-pane.no-documents.text')}\n </Text>\n </Box>\n </Container>\n </Flex>\n )\n }\n\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Box paddingX={4} paddingY={5}>\n <Text align=\"center\" muted>\n {filterIsSimpleTypeConstraint\n ? t('panes.document-list-pane.no-documents-of-type.text')\n : t('panes.document-list-pane.no-matching-documents.text')}\n </Text>\n </Box>\n </Container>\n </Flex>\n )\n }, [filterIsSimpleTypeConstraint, hasSearchQuery, t])\n\n const mainContent = useMemo(() => {\n if (!shouldRender) {\n return null\n }\n\n const isOnline = window.navigator.onLine\n if (error) {\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Stack paddingX={4} paddingY={5} space={4}>\n <Heading as=\"h3\">{t('panes.document-list-pane.error.title')}</Heading>\n <Text as=\"p\">\n {isDev ? (\n <Translate\n t={t}\n i18nKey=\"panes.document-list-pane.error.text.dev\"\n values={{error: error.message}}\n components={{Code: ({children}) => <code>{children}</code>}}\n />\n ) : isOnline ? (\n t('panes.document-list-pane.error.text')\n ) : (\n t('panes.document-list-pane.error.text.offline')\n )}\n </Text>\n <ErrorActions\n error={error}\n eventId={null}\n onRetry={isOnline && canRetry ? onRetry : undefined}\n isRetrying={isRetrying}\n />\n {canRetry ? (\n <Text as=\"p\" muted size={1}>\n {isRetrying\n ? t('panes.document-list-pane.error.retrying', {count: retryCount})\n : autoRetry\n ? t('panes.document-list-pane.error.will-retry-automatically', {\n count: retryCount,\n })\n : t('panes.document-list-pane.error.max-retries-attempted', {\n count: retryCount,\n })}\n </Text>\n ) : null}\n </Stack>\n </Container>\n </Flex>\n )\n }\n\n if (isConnected && !isLoading && items.length === 0) {\n return noDocumentsContent\n }\n\n if (loadingVariant === 'initial' && isLoading) {\n return (\n <Delay ms={300}>\n <LoadingView layout={layout} />\n </Delay>\n )\n }\n\n if (loadingVariant === 'spinner' && isLoading) {\n return null\n }\n\n // prevents bug when panes won't render if first rendered while collapsed\n const key = `${index}-${collapsed}`\n\n return (\n <RootBox overflow=\"hidden\" height=\"fill\" $opacity={muted ? 0.8 : 1}>\n <CommandListBox>\n <CommandList\n key={key}\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={paneTitle}\n canReceiveFocus\n inputElement={searchInputElement}\n itemHeight={51}\n items={items}\n onEndReached={handleEndReached}\n onlyShowSelectionWhenActive\n overscan={10}\n paddingBottom={1}\n paddingX={3}\n renderItem={renderItem}\n wrapAround={false}\n />\n </CommandListBox>\n </RootBox>\n )\n }, [\n autoRetry,\n canRetry,\n collapsed,\n error,\n handleEndReached,\n index,\n isConnected,\n isLoading,\n isRetrying,\n items,\n layout,\n loadingVariant,\n muted,\n noDocumentsContent,\n onRetry,\n paneTitle,\n renderItem,\n retryCount,\n searchInputElement,\n shouldRender,\n t,\n ])\n\n return (\n <PaneContent\n data-testid=\"document-list-pane\"\n overflow={layoutCollapsed || loadingVariant === 'initial' ? 'hidden' : 'auto'}\n >\n {mainContent}\n </PaneContent>\n )\n}\n","import {SortIcon} from '@sanity/icons/Sort'\nimport {Box, Menu, MenuDivider, Text} from '@sanity/ui'\nimport {memo, useId} from 'react'\nimport {useGetI18nText, useTranslation} from 'sanity'\n\nimport {Button} from '../../../ui-components/button/Button'\nimport {MenuButton} from '../../../ui-components/menuButton/MenuButton'\nimport {MenuItem} from '../../../ui-components/menuItem/MenuItem'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {type PaneMenuItem} from '../../types'\n\n/**\n * Identifier for the (virtual) \"relevance\" ordering. Relevance isn't one of the\n * pane's configured orderings — it's the score-based ranking applied while a\n * search term is present, so it gets its own reserved id.\n *\n * @internal\n */\nexport const RELEVANCE_ORDERING_ID = 'relevance'\n\n/**\n * Stable id for a sort-order menu item, derived from its sort spec so it\n * survives re-renders without relying on the optional `id` field.\n *\n * @internal\n */\nexport function getSearchOrderingId(menuItem: PaneMenuItem): string {\n return menuItem.id ?? JSON.stringify(menuItem.params?.by ?? [])\n}\n\n/**\n * Whether a pane menu item represents a sort ordering.\n *\n * @internal\n */\nexport function isSortOrderingMenuItem(menuItem: PaneMenuItem): boolean {\n return menuItem.action === 'setSortOrder' && Array.isArray(menuItem.params?.by)\n}\n\ninterface OrderingMenuItemProps {\n menuItem: PaneMenuItem\n selected: boolean\n onSelect: (id: string) => void\n}\n\n/**\n * A single ordering option. Rendered as its own component so it can resolve its\n * localized title via `useGetI18nText` (each item may carry its own i18n\n * record).\n */\nfunction OrderingMenuItem({menuItem, selected, onSelect}: OrderingMenuItemProps) {\n const getI18nText = useGetI18nText(menuItem)\n const {title} = getI18nText(menuItem)\n\n return (\n <MenuItem\n onClick={() => onSelect(getSearchOrderingId(menuItem))}\n pressed={selected}\n text={title}\n />\n )\n}\n\ninterface DocumentListPaneSearchOrderingProps {\n orderings: PaneMenuItem[]\n value: string\n onChange: (id: string) => void\n}\n\n/**\n * Sort-order control shown beneath the document list search input while a\n * search term is present. Defaults to relevance ranking, and lets the editor\n * temporarily apply one of the list's configured orderings instead.\n */\nexport const DocumentListPaneSearchOrdering = memo(function DocumentListPaneSearchOrdering(\n props: DocumentListPaneSearchOrderingProps,\n) {\n const {orderings, value, onChange} = props\n const {t} = useTranslation(structureLocaleNamespace)\n const menuButtonId = useId()\n\n const relevanceTitle = t('panes.document-list-pane.search-ordering.relevance')\n\n const selectedOrdering =\n value === RELEVANCE_ORDERING_ID\n ? undefined\n : orderings.find((ordering) => getSearchOrderingId(ordering) === value)\n\n // Resolve the active ordering's localized title for the button label. The\n // relevance case uses its own complete string rather than interpolating a\n // case-transformed title, which is unreliable across locales.\n const getI18nText = useGetI18nText(selectedOrdering)\n const buttonText = selectedOrdering\n ? t('panes.document-list-pane.search-ordering.label', {\n order: getI18nText(selectedOrdering).title,\n })\n : t('panes.document-list-pane.search-ordering.summary-relevance')\n\n // With no configured orderings there's nothing to choose between, so render a\n // plain, non-interactive label instead of an empty menu.\n if (orderings.length === 0) {\n return (\n <Box paddingX={2} paddingBottom={1}>\n <Text muted size={1} data-testid=\"document-list-search-ordering\">\n {buttonText}\n </Text>\n </Box>\n )\n }\n\n return (\n <Box paddingBottom={1}>\n <MenuButton\n button={\n <Button\n data-testid=\"document-list-search-ordering\"\n icon={SortIcon}\n mode=\"bleed\"\n text={buttonText}\n tone=\"default\"\n aria-label={t('panes.document-list-pane.search-ordering.aria-label')}\n />\n }\n id={menuButtonId}\n menu={\n <Menu>\n <MenuItem\n onClick={() => onChange(RELEVANCE_ORDERING_ID)}\n pressed={value === RELEVANCE_ORDERING_ID}\n text={relevanceTitle}\n />\n <MenuDivider />\n {orderings.map((ordering) => {\n const id = getSearchOrderingId(ordering)\n return (\n <OrderingMenuItem\n key={id}\n menuItem={ordering}\n onSelect={onChange}\n selected={value === id}\n />\n )\n })}\n </Menu>\n }\n popover={{placement: 'bottom-start', portal: true, radius: 2}}\n />\n </Box>\n )\n})\n","import {\n isArraySchemaType,\n isIndexSegment,\n isKeySegment,\n isReferenceSchemaType,\n type ObjectField,\n type ObjectFieldType,\n type ObjectSchemaType,\n type SanityDocumentLike,\n type SchemaType,\n} from '@sanity/types'\nimport * as PathUtils from '@sanity/util/paths'\nimport {type ExprNode, parse} from 'groq-js'\nimport {collate} from 'sanity'\n\nimport {type DocumentListPaneItem, type SortOrder, type StaticSortOrder} from './types'\n\n/**\n * Project a `SortOrder` to its static, runtime-detached shape —\n * stripping the live `schemaType` and the derived `projectionIndex`\n * from each entry.\n *\n * `schemaType` is a live compiled-schema object (with circular\n * references) that cannot be serialized. `projectionIndex` is a\n * derived numeric index regenerated by `compileSortExpression`\n * from each entry's position in the resolved sort order;\n * persisting it risks a stale index after the sort order's shape\n * changes.\n *\n * Used wherever a JSON-safe / runtime-detached sort order is\n * required: writes to settings storage, SWR cache keys, telemetry,\n * etc.\n */\nexport function toStaticSortOrder(sortOrder: SortOrder): StaticSortOrder {\n return {\n by: sortOrder.by.map(({field, direction, mapWith, nulls}) => ({\n field,\n direction,\n ...(mapWith !== undefined && {mapWith}),\n ...(nulls !== undefined && {nulls}),\n })),\n }\n}\n\n/**\n * Hydrate a `StaticSortOrder` into a runtime `SortOrder` by\n * attaching a live `schemaType` to each entry. The pane is the\n * binding to the schema (via its existing `typeName` resolution),\n * so we don't need to encode a discriminator into the static shape.\n * `projectionIndex` is left unset — it's regenerated downstream by\n * `compileSortExpression` inside the search strategy.\n *\n * Tolerates legacy persisted shapes (e.g. `extendedProjection` at\n * the wrapper level) by simply ignoring extra keys, and tolerates\n * partial reads with no `by` array by treating them as empty.\n */\nexport function fromStaticSortOrder(\n staticSortOrder: SortOrder | StaticSortOrder | undefined,\n schemaType: ObjectSchemaType | undefined,\n): SortOrder | undefined {\n if (!staticSortOrder) {\n return staticSortOrder\n }\n const by = Array.isArray(staticSortOrder.by) ? staticSortOrder.by : []\n return {\n by: by.map((entry) => ({\n ...entry,\n ...(schemaType ? {schemaType} : {}),\n })),\n }\n}\n\nexport function removePublishedWithDrafts(documents: SanityDocumentLike[]): DocumentListPaneItem[] {\n return collate(documents).map((entry) => {\n const doc = entry.draft || entry.published || entry.versions[0]\n const hasDraft = Boolean(entry.draft)\n\n return {\n ...doc,\n hasPublished: !!entry.published,\n hasDraft,\n }\n }) as any\n}\n\nexport function applyOrderingFunctions(order: SortOrder, schemaType: ObjectSchemaType): SortOrder {\n const orderBy = order.by.map((by) => {\n // Skip those that already have a mapper\n if (by.mapWith) {\n return by\n }\n\n const fieldType = tryResolveSchemaTypeForPath(schemaType, by.field)\n if (!fieldType) {\n return by\n }\n\n // Note: order matters here, since the jsonType of a date field is `string`,\n // but we want to apply `datetime()`, not `lower()`\n if (fieldExtendsType(fieldType, 'datetime')) {\n return {...by, mapWith: 'dateTime'}\n }\n\n if (fieldType.jsonType === 'string') {\n return {...by, mapWith: 'lower'}\n }\n\n return by\n })\n\n return orderBy.every((item, index) => item === order.by[index]) ? order : {...order, by: orderBy}\n}\n\nconst BUILT_IN_SORT_FIELDS = new Set(['_id', '_type', '_rev', '_createdAt', '_updatedAt'])\n\n/**\n * Checks that every field in a sort order resolves against the schema type.\n * Built-in document fields (_id, _createdAt, etc.) always pass. Returns\n * the fallback when any field is missing - typically when a persisted sort\n * order from one workspace references fields absent in another.\n */\nexport function validateSortOrder(\n sortOrder: SortOrder,\n schemaType: ObjectSchemaType | undefined,\n fallback: SortOrder,\n): SortOrder {\n if (!schemaType) {\n return sortOrder\n }\n\n const allFieldsValid = sortOrder.by.every(\n (entry) =>\n BUILT_IN_SORT_FIELDS.has(entry.field) ||\n Boolean(tryResolveSchemaTypeForPath(schemaType, entry.field)),\n )\n\n return allFieldsValid ? sortOrder : fallback\n}\n\nfunction tryResolveSchemaTypeForPath(baseType: SchemaType, path: string): SchemaType | undefined {\n const pathSegments = PathUtils.fromString(path)\n\n let current: SchemaType | undefined = baseType\n for (const segment of pathSegments) {\n if (!current) {\n return undefined\n }\n\n if (typeof segment === 'string') {\n current = getFieldTypeByName(current, segment)\n\n if (current && isReferenceSchemaType(current)) {\n const [refType, otherRefType] = current.to || []\n if (otherRefType || !refType) {\n return undefined\n }\n current = refType\n }\n\n continue\n }\n\n const isArrayAccessor = isKeySegment(segment) || isIndexSegment(segment)\n if (!isArrayAccessor || !isArraySchemaType(current)) {\n return undefined\n }\n\n if (current.of.length !== 1) {\n // Can't figure out the type without knowing the value\n return undefined\n }\n\n const memberType: SchemaType = current.of[0]\n\n if (!isReferenceSchemaType(memberType)) {\n current = memberType\n continue\n }\n\n const refTargets: SchemaType[] = memberType.to || []\n if (refTargets.length !== 1) {\n // Can't figure out the type without knowing the value\n return undefined\n }\n\n current = refTargets[0]\n }\n\n return current\n}\n\nfunction getFieldTypeByName(type: SchemaType, fieldName: string): SchemaType | undefined {\n if (!('fields' in type)) {\n return undefined\n }\n\n const fieldType = type.fields.find((field) => field.name === fieldName)\n return fieldType ? fieldType.type : undefined\n}\n\nexport function fieldExtendsType(field: ObjectField | ObjectFieldType, ofType: string): boolean {\n let current: SchemaType | undefined = field.type\n while (current) {\n if (current.name === ofType) {\n return true\n }\n\n if (!current.type && current.jsonType === ofType) {\n return true\n }\n\n current = current.type\n }\n\n return false\n}\n\n/**\n * Recursively extract static `_type`s from GROQ filter expressions. If the\n * types can't be statically determined then it will return `null`.\n */\nfunction findTypes(node: ExprNode): Set<string> | null {\n switch (node.type) {\n case 'OpCall': {\n const {left, right} = node\n\n switch (node.op) {\n // e.g. `a == b`\n case '==': {\n // e.g. `_type == 'value'`\n if (left.type === 'AccessAttribute' && left.name === '_type' && !left.base) {\n if (right.type !== 'Value' || typeof right.value !== 'string') return null\n return new Set([right.value])\n }\n\n // e.g. `'value' == _type`\n if (right.type === 'AccessAttribute' && right.name === '_type' && !right.base) {\n if (left.type !== 'Value' || typeof left.value !== 'string') return null\n return new Set([left.value])\n }\n\n // otherwise, we can't determine the types statically\n return null\n }\n\n // e.g. `a in b`\n case 'in': {\n // if `_type` is not on the left hand side of `in` then it can't be determined\n if (left.type !== 'AccessAttribute' || left.name !== '_type' || left.base) return null\n // if the right hand side is not an array then the types can't be determined\n if (right.type !== 'Array') return null\n\n const types = new Set<string>()\n // iterate through all the types\n for (const element of right.elements) {\n // if we find a splat, then early return, we can't determine the types\n if (element.isSplat) return null\n // if the array element is not just a simple value, then early return\n if (element.value.type !== 'Value') return null\n // if the array element value is not a string, then early return\n if (typeof element.value.value !== 'string') return null\n // otherwise add the element value to the set of types\n types.add(element.value.value)\n }\n\n // if there were any elements in the types set, return it\n if (types.size) return types\n // otherwise, the set of types cannot be determined\n return null\n }\n\n default: {\n return null\n }\n }\n }\n\n // groups can just be unwrapped, the AST preserves the order\n case 'Group': {\n return findTypes(node.base)\n }\n\n // e.g. `_type == 'a' || _type == 'b'`\n // with Or nodes, if we can't determine the types for either the left or\n // right hand side then we can't determine the types for any\n // e.g. `_type == 'a' || isActive`\n // — can't determine types because `isActive` could be true on another types\n case 'Or': {\n const left = findTypes(node.left)\n if (!left) return null\n\n const right = findTypes(node.right)\n if (!right) return null\n\n return new Set([...left, ...right])\n }\n\n // e.g. `_type == 'a' && isActive`\n // with And nodes, we can determine the types as long as we can determine\n // the types for one side. We can't determine the types if both are `null`.\n case 'And': {\n const left = findTypes(node.left)\n const right = findTypes(node.right)\n\n if (!left && !right) return null\n return new Set([...(left || []), ...(right || [])])\n }\n\n default: {\n return null\n }\n }\n}\n\nexport function findStaticTypesInFilter(\n filter: string,\n params: Record<string, unknown> = {},\n): string[] | null {\n try {\n const types = findTypes(parse(filter, {params}))\n if (!types) return null\n\n return Array.from(types).sort()\n } catch {\n // if we couldn't parse the filter, just return `null`\n return null\n }\n}\n","import {getPublishedId} from 'sanity'\n\nimport {type DocumentListPaneItem, type SortOrder} from './types'\n\n/**\n * Reserved sentinel field name. A sort order using this field signals that the\n * list should be ordered to match the incoming `$ids` param rather than sorted\n * server-side, so the surrounding pane preserves the caller-provided ordering.\n *\n * @internal\n */\nexport const ORDER_BY_IDS_PARAM_FIELD = '__orderByIdsParam'\n\n/**\n * @internal\n */\nexport const ORDER_BY_IDS_PARAM_SORT_ORDER: SortOrder = {\n by: [{field: ORDER_BY_IDS_PARAM_FIELD, direction: 'asc'}],\n}\n\n/**\n * @internal\n */\nexport function isOrderByIdsParam(sortOrder?: {by?: readonly {field: string}[]}): boolean {\n return sortOrder?.by?.length === 1 && sortOrder.by[0].field === ORDER_BY_IDS_PARAM_FIELD\n}\n\n/**\n * Reorders the list items to match the order of the provided published ids.\n * Items whose published id is absent from `ids` are appended after the matched\n * items, preserving the server-returned order amongst themselves.\n *\n * @internal\n */\nexport function reorderItemsByIdsParam(\n items: DocumentListPaneItem[],\n ids: string[],\n): DocumentListPaneItem[] {\n const indexById = ids.reduce<Map<string, number>>((accumulatedIndex, id, index) => {\n if (!accumulatedIndex.has(id)) {\n accumulatedIndex.set(id, index)\n }\n return accumulatedIndex\n }, new Map())\n\n const positionOf = (item: DocumentListPaneItem): number => {\n const matchedIndex = indexById.get(getPublishedId(item._id))\n return matchedIndex === undefined ? Number.MAX_SAFE_INTEGER : matchedIndex\n }\n\n return items\n .map((item, originalIndex) => ({item, originalIndex}))\n .sort((first, second) => {\n const positionDifference = positionOf(first.item) - positionOf(second.item)\n if (positionDifference !== 0) return positionDifference\n return first.originalIndex - second.originalIndex\n })\n .map((entry) => entry.item)\n}\n","import {defineEvent} from '@sanity/telemetry'\n\ninterface DocumentListLoadTimeData {\n /**\n * How long it took to load the document list end to end\n */\n durationMs: number\n /**\n * Length of the search string typed into the \"Search\"-field above the document list\n */\n searchStringLength: number\n /**\n * Represents the number of documents that was returned by the document list\n */\n returnedDocuments: number\n /**\n * Whether the document list was loaded from an in-memory cache\n */\n fromCache: boolean\n}\n\nexport const DocumentListLoadTimeMeasured = defineEvent<DocumentListLoadTimeData>({\n name: 'Document List Load Time Measured',\n version: 1,\n description: 'Time from document list search subscription to first result',\n maxSampleRate: 30_000,\n})\n","import {type ClientPerspective, type SanityClient} from '@sanity/client'\nimport {\n asyncScheduler,\n defer,\n filter,\n map,\n merge,\n mergeMap,\n type Observable,\n of,\n partition,\n share,\n throttleTime,\n throwError,\n timer,\n} from 'rxjs'\nimport {exhaustMapWithTrailing} from 'rxjs-exhaustmap-with-trailing'\nimport {scan} from 'rxjs/operators'\nimport {\n compileFieldPath,\n createSearch,\n createSWR,\n getSearchableTypes,\n type SanityDocumentLike,\n type Schema,\n type SearchOptions,\n type SearchSort,\n type SearchStrategy,\n} from 'sanity'\n\nimport {toStaticSortOrder} from './helpers'\nimport {type SortOrder} from './types'\n\ninterface ListenQueryOptions {\n client: SanityClient\n filter: string\n limit: number\n params: Record<string, unknown>\n schema: Schema\n searchQuery: string\n sort: SortOrder\n perspective?: ClientPerspective\n staticTypeNames?: string[] | null\n maxFieldDepth?: number\n searchStrategy?: SearchStrategy\n /**\n * Whether to rank results by relevance when a search term is present.\n * Defaults to `true`. See {@link resolveSearchOrdering}.\n */\n sortByRelevance?: boolean\n}\n\nexport type SearchQueryEvent =\n | {\n type: 'reconnect'\n }\n | {type: 'result'; documents: SanityDocumentLike[]}\n\nexport interface SearchQueryState {\n connected: boolean\n fromCache: boolean\n documents: SanityDocumentLike[]\n}\n\nconst swr = createSWR<{connected: boolean; documents: SanityDocumentLike[]}>({maxSize: 100})\n\n/**\n * Resolve the score/sort options for a list pane search request.\n *\n * When a search term is present, results are ranked by relevance so the most\n * relevant documents surface first (matching the behaviour of global search).\n * The configured/selected sort order is preserved as a tiebreaker. With an\n * empty query there are no scores to sort by, so the configured order is kept\n * untouched.\n *\n * The two search strategies express relevance differently:\n * - `groq2024` is driven by the presence of a `_score` sort entry, which\n * activates the server-side `score(boost(...))` pipeline.\n * - `groqLegacy` computes scores client-side and sorts by them unless\n * `skipSortByScore` is set.\n *\n * @internal\n */\nexport function resolveSearchOrdering(options: {\n searchQuery: string\n sortBy: SearchSort[]\n searchStrategy?: SearchStrategy\n /**\n * Whether to rank by relevance when a search term is present. Defaults to\n * `true`. Set to `false` when the editor has explicitly chosen one of the\n * configured orderings instead of relevance.\n */\n useRelevance?: boolean\n}): {skipSortByScore: boolean; sort: SearchSort[]} {\n const {searchQuery, sortBy, searchStrategy, useRelevance = true} = options\n const sortByRelevance = Boolean(searchQuery) && useRelevance\n\n if (!sortByRelevance) {\n return {skipSortByScore: true, sort: sortBy}\n }\n\n // `groqLegacy` cannot order by a projected `_score` field, so it relies on\n // client-side score sorting (`skipSortByScore: false`) with the configured\n // order kept as a tiebreaker. `groq2024` ranks by relevance by prepending a\n // `_score` sort entry.\n if (searchStrategy === 'groqLegacy') {\n return {skipSortByScore: false, sort: sortBy}\n }\n\n return {\n skipSortByScore: false,\n sort: [{field: '_score', direction: 'desc'}, ...sortBy],\n }\n}\n\nexport function listenSearchQuery(options: ListenQueryOptions): Observable<SearchQueryState> {\n const {\n client,\n schema,\n sort,\n perspective,\n limit,\n params,\n filter: groqFilter,\n searchQuery,\n staticTypeNames,\n sortByRelevance,\n maxFieldDepth,\n searchStrategy,\n } = options\n const sortBy = sort.by\n\n // Listen for changes with the given filter and params, and whenever a change occurs, we want to\n // re-fetch the documents that match the search query (see below).\n // We use a separate listener since the search query is too large to use in a listen query.\n const events$ = defer(() => {\n return client.listen(`*[${groqFilter}]`, params, {\n events: ['welcome', 'mutation', 'reconnect'],\n includeAllVersions: true,\n includeResult: false,\n visibility: 'query',\n tag: 'listen-search-query',\n })\n }).pipe(\n mergeMap((ev, i) => {\n const isFirst = i === 0\n // If we can't establish a connection to the /listen endpoint, the first event we receive will be 'reconnect'\n // So if we get \"reconnect\" as the first event actually means \"Connection can't be established\"\n if (isFirst && ev.type === 'reconnect') {\n // if it's neither welcome nor reconnect, something unexpected has happened.\n return throwError(() => new Error(`Failed to establish EventSource connection`))\n }\n // When a connection is successfully established, the first event will be 'welcome'\n if (isFirst && ev.type !== 'welcome') {\n // if it's neither welcome nor reconnect, something unexpected has happened.\n return throwError(() => new Error(`Received unexpected type of first event \"${ev.type}\"`))\n }\n return of(ev)\n }),\n share(),\n )\n\n const [welcome$, mutationAndReconnect$] = partition(events$, (ev) => ev.type === 'welcome')\n\n const swrKey = JSON.stringify({\n fiilter: groqFilter,\n limit,\n params,\n searchQuery,\n perspective,\n sort: toStaticSortOrder(sort),\n staticTypeNames,\n })\n\n return merge(\n welcome$,\n mutationAndReconnect$.pipe(throttleTime(1000, asyncScheduler, {leading: true, trailing: true})),\n ).pipe(\n exhaustMapWithTrailing((event): Observable<SearchQueryEvent> => {\n // Get the types names to use for searching.\n // If we have a static list of types, we can skip fetching the types and use the static list.\n const typeNames$ = staticTypeNames\n ? of(staticTypeNames)\n : client.observable.fetch(`array::unique(*[${groqFilter}][]._type)`, params)\n\n // Use the type names to create a search query and fetch the documents that match the query.\n return typeNames$.pipe(\n mergeMap((typeNames: string[]) => {\n const types = getSearchableTypes(schema, staticTypeNames || []).filter((type) => {\n if (typeNames.includes(type.name)) {\n // Validate every sort field against the schema in strict\n // mode. `compileFieldPath` throws an `Error` for unknown\n // fields, paths into non-object types, range slices,\n // multi-type array access, etc.\n for (const entry of sort.by) {\n if (!entry.field) {\n continue\n }\n compileFieldPath(type, entry.field, {strict: true})\n }\n return true\n }\n return false\n })\n\n const search = createSearch(types, client, {\n filter: groqFilter,\n params,\n strategy: searchStrategy,\n maxDepth: maxFieldDepth,\n })\n\n const doFetch = () => {\n const searchTerms = {\n query: searchQuery || '',\n types,\n }\n\n const {skipSortByScore, sort} = resolveSearchOrdering({\n searchQuery: searchQuery || '',\n sortBy,\n searchStrategy,\n useRelevance: sortByRelevance,\n })\n\n const searchOptions: SearchOptions = {\n comments: [`findability-source: ${searchQuery ? 'list-query' : 'list'}`],\n limit,\n skipSortByScore,\n sort,\n perspective,\n }\n\n return search(searchTerms, searchOptions).pipe(\n map((result) => result.hits.map(({hit}) => hit)),\n map((hits) => ({type: 'result' as const, documents: hits})),\n )\n }\n\n if (event.type === 'mutation' && event.visibility !== 'query') {\n // Even though the listener request specifies visibility=query, the events are not guaranteed to be delivered with visibility=query\n // If the event we are responding to arrives with visibility != query, we add a little delay to allow for the updated document to be available for queries\n // See https://www.sanity.io/docs/listening#visibility-c4786e55c3ff\n return timer(1200).pipe(mergeMap(doFetch))\n }\n if (event.type === 'reconnect') {\n return of(event)\n }\n return doFetch()\n }),\n )\n }),\n scan(\n (\n acc: null | {connected: boolean; documents: SanityDocumentLike[]},\n event: SearchQueryEvent,\n ) => ({\n connected: event.type !== 'reconnect',\n documents: event.type === 'result' ? event.documents : acc?.documents || [],\n }),\n null as null | {connected: boolean; documents: SanityDocumentLike[]},\n ),\n filter((v) => v !== null),\n swr(swrKey),\n map(({fromCache, value}): SearchQueryState => ({fromCache, ...value})),\n )\n}\n","import {\n ChannelError,\n ClientError,\n type ClientPerspective,\n type SanityClient,\n ServerError,\n} from '@sanity/client'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {observableCallback} from 'observable-callback'\nimport {useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {concat, fromEvent, merge, NEVER, of, timer} from 'rxjs'\nimport {\n filter,\n map,\n mergeMap,\n scan,\n share,\n shareReplay,\n switchMap,\n take,\n takeUntil,\n withLatestFrom,\n} from 'rxjs/operators'\nimport {\n catchWithCount,\n measureFirstMatch,\n useSchema,\n useSearchMaxFieldDepth,\n useWorkspace,\n} from 'sanity'\n\nimport {DocumentListLoadTimeMeasured} from './__telemetry__/documentListSearch.telemetry'\nimport {DEFAULT_ORDERING, FULL_LIST_LIMIT, PARTIAL_PAGE_LIMIT} from './constants'\nimport {findStaticTypesInFilter, removePublishedWithDrafts} from './helpers'\nimport {listenSearchQuery} from './listenSearchQuery'\nimport {type DocumentListPaneItem, type SortOrder} from './types'\n\ninterface UseDocumentListOpts {\n client: SanityClient\n filter: string\n perspective?: ClientPerspective\n params: Record<string, unknown>\n searchQuery: string | null\n sortOrder?: SortOrder\n /**\n * Whether to rank results by relevance when a search term is present.\n * Defaults to `true`.\n */\n searchSortByRelevance?: boolean\n}\n\ninterface DocumentListState {\n error: {message: string} | null\n isLoadingFullList: boolean\n isLoading: boolean\n connected?: boolean\n isRetrying: boolean\n autoRetry: boolean\n canRetry: boolean\n retryCount: number\n fromCache?: boolean\n items: DocumentListPaneItem[]\n}\n\nconst INITIAL_QUERY_STATE: DocumentListState = {\n error: null,\n isRetrying: false,\n retryCount: 0,\n autoRetry: false,\n canRetry: false,\n isLoading: true,\n isLoadingFullList: false,\n fromCache: false,\n items: [],\n}\n\ninterface UseDocumentListHookValue extends DocumentListState {\n onRetry: () => void\n onLoadFullList: () => void\n}\n\n/**\n * Determine whether an error should be possible to retry\n * @param error - Any caught error\n */\nfunction isRetriableError(error: unknown) {\n if (error instanceof ChannelError) {\n // Usually indicative of a bad or malformed request\n return false\n }\n if (error instanceof ServerError) {\n // >= 500\n return true\n }\n if (error instanceof ClientError) {\n // >= 400\n // note: 403 Forbidden makes sense to retry, because it's a potentially passing condition\n return error.statusCode === 403\n }\n return true\n}\n\n/**\n * @internal\n */\nexport function useDocumentList(opts: UseDocumentListOpts): UseDocumentListHookValue {\n const {\n client,\n filter: searchFilter,\n params: paramsProp,\n sortOrder,\n searchQuery,\n perspective,\n searchSortByRelevance = true,\n } = opts\n const {strategy: searchStrategy} = useWorkspace().search\n const schema = useSchema()\n const maxFieldDepth = useSearchMaxFieldDepth()\n const telemetry = useTelemetry()\n\n // Get the type name from the filter, if it is a simple type filter.\n const typeNameFromFilter = useMemo(\n () => findStaticTypesInFilter(searchFilter, paramsProp),\n [searchFilter, paramsProp],\n )\n\n const [[onRetry$, onRetry]] = useState(() => observableCallback())\n const [[onFetchFullList$, onLoadFullList]] = useState(() => observableCallback())\n\n const queryResults$ = useMemo(() => {\n const listenSearchQueryArgs = {\n client,\n filter: searchFilter,\n limit: PARTIAL_PAGE_LIMIT,\n params: paramsProp,\n schema,\n perspective,\n searchQuery: searchQuery || '',\n sort: sortOrder || DEFAULT_ORDERING,\n staticTypeNames: typeNameFromFilter,\n maxFieldDepth,\n searchStrategy,\n sortByRelevance: searchSortByRelevance,\n }\n\n const partialList$ = listenSearchQuery(listenSearchQueryArgs).pipe(\n measureFirstMatch(\n (event) => event.connected,\n (durationMs, data) => {\n telemetry.log(DocumentListLoadTimeMeasured, {\n durationMs: durationMs,\n searchStringLength: (searchQuery || '').length,\n returnedDocuments: data.documents.length,\n fromCache: data.fromCache,\n })\n },\n ),\n shareReplay({refCount: true, bufferSize: 1}),\n )\n\n // we want to fetch the full list if the last result of the partial list is at the limit\n const fullList$ = onFetchFullList$.pipe(\n withLatestFrom(partialList$),\n filter(([, result]) => result?.documents.length === PARTIAL_PAGE_LIMIT),\n // we want to set up the full list listener only once\n take(1),\n mergeMap(() =>\n concat(\n of({type: 'loadFullList' as const}),\n listenSearchQuery({...listenSearchQueryArgs, limit: FULL_LIST_LIMIT}).pipe(\n map((result) => ({type: 'result' as const, result})),\n ),\n ),\n ),\n share(),\n )\n\n // The combined search results from both partial page and full list\n return merge(\n partialList$.pipe(\n map((result) => ({\n type: 'result' as const,\n result,\n })),\n // when the full list listener kicks off, we want to stop the partial list listener\n takeUntil(fullList$),\n ),\n fullList$,\n ).pipe(\n catchWithCount((lastError, retryCount, caught$) => {\n const error = safeError(lastError)\n const isOnline = window.navigator.onLine\n const canRetry = isOnline && isRetriableError(lastError)\n const autoRetry = retryCount < 10\n const retries = merge(\n isOnline ? onRetry$ : fromEvent(window, 'online'),\n isOnline && autoRetry ? timer(retryCount * 1_000) : NEVER,\n ).pipe(\n take(1),\n switchMap(() =>\n merge(\n of({\n type: 'error' as const,\n error,\n retrying: true,\n autoRetry,\n canRetry,\n retryCount,\n }),\n caught$,\n ),\n ),\n )\n return concat(\n of({\n type: 'error' as const,\n error,\n retrying: false,\n autoRetry,\n canRetry,\n retryCount,\n }),\n retries,\n )\n }),\n scan((prev, event) => {\n if (event.type === 'error') {\n return {\n ...prev,\n error: event.error,\n retryCount: event.retryCount,\n isRetrying: event.retrying,\n autoRetry: event.autoRetry,\n canRetry: event.canRetry,\n }\n }\n if (event.type === 'result') {\n return {\n ...prev,\n error: null,\n isRetrying: false,\n fromCache: event.result.fromCache,\n connected: event.result.connected,\n isLoading: false,\n items: removePublishedWithDrafts(event.result.documents),\n isLoadingFullList: false,\n }\n }\n if (event.type === 'loadFullList') {\n return {\n ...prev,\n error: null,\n isLoadingFullList: true,\n }\n }\n // @ts-expect-error - all cases should be covered\n throw new Error(`Unexpected event type: ${event.type}`)\n }, INITIAL_QUERY_STATE),\n )\n }, [\n client,\n searchFilter,\n paramsProp,\n schema,\n perspective,\n searchQuery,\n sortOrder,\n searchSortByRelevance,\n typeNameFromFilter,\n maxFieldDepth,\n searchStrategy,\n onFetchFullList$,\n onRetry$,\n telemetry,\n ])\n\n const {\n error,\n items,\n isLoading,\n fromCache,\n connected,\n canRetry,\n isLoadingFullList,\n isRetrying,\n autoRetry,\n retryCount,\n } = useObservable(queryResults$, INITIAL_QUERY_STATE)\n\n return {\n error,\n onRetry,\n isLoading,\n items,\n isRetrying,\n canRetry,\n retryCount,\n autoRetry,\n connected,\n fromCache,\n onLoadFullList,\n isLoadingFullList,\n }\n}\n\n// todo: candidate for re-use\nconst nonErrorThrownWarning = `[WARNING: This was thrown as a non-error. Only Error instances should be thrown]`\nfunction safeError(thrown: unknown): Error {\n if (thrown instanceof Error) {\n return thrown\n }\n if (typeof thrown === 'object' && thrown !== null) {\n if ('message' in thrown && typeof thrown.message === 'string') {\n return new Error(`${thrown.message} ${nonErrorThrownWarning}`)\n }\n return new Error(`${String(thrown)} ${nonErrorThrownWarning}`)\n }\n return new Error(`${String(thrown)} ${nonErrorThrownWarning}`)\n}\n","import {SearchIcon} from '@sanity/icons/Search'\nimport {SpinnerIcon} from '@sanity/icons/Spinner'\nimport {Box, Stack, TextInput} from '@sanity/ui'\nimport {memo, useCallback, useEffect, useMemo, useState} from 'react'\nimport {useObservableEvent} from 'react-rx'\nimport {debounce, map, type Observable, of, tap, timer} from 'rxjs'\nimport {\n DEFAULT_STUDIO_CLIENT_OPTIONS,\n EMPTY_ARRAY,\n type GeneralPreviewLayoutKey,\n useActiveReleases,\n useClient,\n useI18nText,\n usePerspective,\n useReconnectingToast,\n useSchema,\n useTranslation,\n useUnique,\n} from 'sanity'\nimport {keyframes, styled} from 'styled-components'\n\nimport {structureLocaleNamespace} from '../../i18n'\nimport {type BaseStructureToolPaneProps} from '../types'\nimport {DEFAULT_ORDERING, EMPTY_RECORD, FULL_LIST_LIMIT} from './constants'\nimport {DocumentListPaneContent} from './DocumentListPaneContent'\nimport {\n DocumentListPaneSearchOrdering,\n getSearchOrderingId,\n isSortOrderingMenuItem,\n RELEVANCE_ORDERING_ID,\n} from './DocumentListPaneSearchOrdering'\nimport {applyOrderingFunctions, findStaticTypesInFilter} from './helpers'\nimport {isOrderByIdsParam, reorderItemsByIdsParam} from './orderByIdsParam'\nimport {useShallowUnique} from './PaneContainer'\nimport {type LoadingVariant, type SortOrder} from './types'\nimport {useDocumentList} from './useDocumentList'\n\n/**\n * @internal\n */\nexport type DocumentListPaneProps = BaseStructureToolPaneProps<'documentList'> & {\n sortOrder?: SortOrder\n layout?: GeneralPreviewLayoutKey\n}\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst fadeIn = keyframes`\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0.1;\n }\n 100% {\n opacity: 0.4;\n }\n`\n\nconst AnimatedSpinnerIcon = styled(SpinnerIcon)`\n animation: ${rotate} 500ms linear infinite;\n`\n\nconst SubtleSpinnerIcon = styled(SpinnerIcon)`\n animation: ${rotate} 1500ms linear infinite;\n opacity: 0.4;\n`\n\nconst DelayedSubtleSpinnerIcon = styled(SpinnerIcon)`\n animation:\n ${rotate} 1500ms linear infinite,\n ${fadeIn} 1000ms linear;\n opacity: 0.4;\n`\n\n/**\n * @internal\n */\n\nexport const DocumentListPane = memo(function DocumentListPane(props: DocumentListPaneProps) {\n const {childItemId, isActive, pane, paneKey, sortOrder: sortOrderRaw, layout} = props\n const schema = useSchema()\n const releases = useActiveReleases()\n const {perspectiveStack} = usePerspective()\n const {displayOptions, options} = pane\n const {apiVersion, filter} = options\n const params = useShallowUnique(options.params || EMPTY_RECORD)\n const typeName = useMemo(() => {\n const staticTypes = findStaticTypesInFilter(filter, params)\n if (staticTypes?.length === 1) return staticTypes[0]\n return null\n }, [filter, params])\n\n const showIcons = displayOptions?.showIcons !== false\n\n const {t} = useTranslation(structureLocaleNamespace)\n const {title} = useI18nText(pane)\n\n const [searchQuery, setSearchQuery] = useState<string>('')\n const [searchInputValue, setSearchInputValue] = useState<string>('')\n const [searchInputElement, setSearchInputElement] = useState<HTMLInputElement | null>(null)\n // The ordering applied while a search term is present. Defaults to relevance\n // ranking, and resets back to relevance whenever the search is cleared.\n const [searchOrderingId, setSearchOrderingId] = useState<string>(RELEVANCE_ORDERING_ID)\n\n // The query the list actually searches on. Whitespace-only input is treated as\n // empty, so the search-scoped UI must key off the trimmed value too.\n const trimmedSearchQuery = searchQuery.trim()\n\n const orderByIdsParam = isOrderByIdsParam(sortOrderRaw)\n\n const sortWithOrderingFn =\n typeName && sortOrderRaw\n ? applyOrderingFunctions(sortOrderRaw, schema.get(typeName) as any)\n : sortOrderRaw\n\n const sortOrder = useUnique(sortWithOrderingFn)\n\n // The sentinel ordering has no server-side meaning, so the fetch falls back to\n // the default ordering and the items are reordered client-side afterwards.\n const fetchSortOrder = orderByIdsParam ? DEFAULT_ORDERING : sortOrder\n\n // The list's configured orderings, surfaced as choices in the search sort\n // control (relevance plus these). The sentinel ordering is excluded; it isn't\n // a real sort choice the editor can apply while searching.\n const searchOrderings = useMemo(\n () =>\n (pane.menuItems || []).filter(\n (item) => isSortOrderingMenuItem(item) && !isOrderByIdsParam({by: item.params!.by}),\n ),\n [pane.menuItems],\n )\n\n // While searching, relevance ranking is the default. If the editor picks one\n // of the configured orderings instead, apply that order and disable scoring.\n const useRelevance = searchOrderingId === RELEVANCE_ORDERING_ID\n const selectedSearchOrdering = useRelevance\n ? undefined\n : searchOrderings.find((ordering) => getSearchOrderingId(ordering) === searchOrderingId)\n const searchSchemaType = typeName ? schema.get(typeName) : undefined\n const effectiveSortOrder = useUnique(\n selectedSearchOrdering?.params?.by\n ? // Run the chosen ordering through `applyOrderingFunctions` so it picks up\n // the same field mappers (e.g. `lower`, `dateTime`) the header sort menu\n // uses — otherwise the same ordering would sort differently here.\n // `applyOrderingFunctions` requires a concrete schema type, so only apply\n // it when the type is statically resolvable; otherwise fall back to the\n // raw ordering rather than passing `undefined`.\n searchSchemaType\n ? applyOrderingFunctions({by: selectedSearchOrdering.params.by}, searchSchemaType as any)\n : {by: selectedSearchOrdering.params.by}\n : fetchSortOrder,\n )\n\n const client = useClient({\n ...DEFAULT_STUDIO_CLIENT_OPTIONS,\n apiVersion: apiVersion || DEFAULT_STUDIO_CLIENT_OPTIONS.apiVersion,\n })\n\n const {\n error,\n isLoadingFullList,\n isLoading: documentListIsLoading,\n items,\n fromCache,\n isRetrying,\n autoRetry,\n canRetry,\n retryCount,\n connected,\n onLoadFullList,\n onRetry,\n } = useDocumentList({\n client,\n filter,\n perspective: perspectiveStack,\n params,\n searchQuery: trimmedSearchQuery,\n sortOrder: effectiveSortOrder,\n searchSortByRelevance: useRelevance,\n })\n\n const orderedItems = useMemo(() => {\n if (!orderByIdsParam || trimmedSearchQuery) return items\n const idsParam = Array.isArray(params.ids) ? (params.ids as string[]) : EMPTY_ARRAY\n return reorderItemsByIdsParam(items, idsParam)\n }, [orderByIdsParam, trimmedSearchQuery, items, params.ids])\n\n const isLoading = documentListIsLoading || releases.loading\n\n const handleQueryChange = useObservableEvent(\n (event$: Observable<React.ChangeEvent<HTMLInputElement>>) => {\n return event$.pipe(\n map((event) => event.target.value),\n tap(setSearchInputValue),\n debounce((value) => (value === '' ? of('') : timer(300))),\n tap(setSearchQuery),\n )\n },\n )\n\n const handleClearSearch = useCallback(() => {\n setSearchQuery('')\n setSearchInputValue('')\n }, [])\n\n const handleSearchKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Escape') {\n handleClearSearch()\n }\n },\n [handleClearSearch],\n )\n\n const [enableSearchSpinner, setEnableSearchSpinner] = useState<string | void>()\n\n useEffect(() => {\n if (!enableSearchSpinner && !isLoading) {\n // oxlint-disable-next-line react/react-compiler\n setEnableSearchSpinner(paneKey)\n }\n }, [enableSearchSpinner, isLoading, paneKey])\n\n useEffect(() => {\n // Clear search field and disable search spinner\n // when switching between panes (i.e. when paneKey changes).\n // oxlint-disable-next-line react/react-compiler\n handleClearSearch()\n setEnableSearchSpinner()\n }, [paneKey, handleClearSearch])\n\n useEffect(() => {\n // Relevance ranking is search-scoped: whenever the term is cleared (via the\n // clear button, Escape, emptying the field, or switching panes), reset the\n // applied ordering back to relevance.\n if (!trimmedSearchQuery) {\n // TODO: Refactor search ordering reset to avoid effect state updates.\n // oxlint-disable-next-line react/react-compiler\n setSearchOrderingId(RELEVANCE_ORDERING_ID)\n }\n }, [trimmedSearchQuery])\n\n const loadingVariant: LoadingVariant = useMemo(() => {\n if (connected && isLoading && enableSearchSpinner === paneKey) {\n return 'spinner'\n }\n if (connected && fromCache) {\n return 'subtle'\n }\n\n return 'initial'\n }, [connected, enableSearchSpinner, fromCache, isLoading, paneKey])\n\n const textInputIcon = useMemo(() => {\n if (loadingVariant === 'spinner') {\n return AnimatedSpinnerIcon\n }\n if (searchInputValue && loadingVariant === 'subtle') {\n return SubtleSpinnerIcon\n }\n return SearchIcon\n }, [loadingVariant, searchInputValue])\n\n useReconnectingToast(!connected)\n\n return (\n <>\n <Box paddingX={3} paddingBottom={3}>\n <Stack space={3}>\n <TextInput\n aria-label={t('panes.document-list-pane.search-input.aria-label')}\n autoComplete=\"off\"\n border={false}\n clearButton={Boolean(searchQuery)}\n fontSize={[2, 2, 1]}\n icon={textInputIcon}\n iconRight={\n !connected || (loadingVariant === 'subtle' && !searchInputValue)\n ? DelayedSubtleSpinnerIcon\n : null\n }\n onChange={handleQueryChange}\n onClear={handleClearSearch}\n onKeyDown={handleSearchKeyDown}\n padding={2}\n placeholder={t('panes.document-list-pane.search-input.placeholder')}\n radius={2}\n ref={setSearchInputElement}\n spellCheck={false}\n value={searchInputValue}\n />\n {trimmedSearchQuery && (\n <DocumentListPaneSearchOrdering\n orderings={searchOrderings}\n value={searchOrderingId}\n onChange={setSearchOrderingId}\n />\n )}\n </Stack>\n </Box>\n <DocumentListPaneContent\n key={paneKey}\n childItemId={childItemId}\n error={error}\n filterIsSimpleTypeConstraint={!!typeName}\n hasMaxItems={items.length === FULL_LIST_LIMIT}\n hasSearchQuery={Boolean(searchQuery)}\n isActive={isActive}\n isLazyLoading={isLoadingFullList}\n isLoading={isLoading}\n autoRetry={autoRetry}\n canRetry={canRetry}\n retryCount={retryCount}\n isRetrying={isRetrying}\n isConnected={connected}\n items={orderedItems}\n layout={layout}\n muted={loadingVariant === 'subtle'}\n loadingVariant={loadingVariant}\n onEndReached={onLoadFullList}\n onRetry={onRetry}\n paneTitle={title}\n searchInputElement={searchInputElement}\n showIcons={showIcons}\n sortOrder={orderByIdsParam ? DEFAULT_ORDERING : sortOrder}\n />\n </>\n )\n})\n","import {ArrowLeftIcon} from '@sanity/icons/ArrowLeft'\nimport {memo, type ReactNode, useMemo} from 'react'\nimport {type GeneralPreviewLayoutKey, type InitialValueTemplateItem} from 'sanity'\n\nimport {Button} from '../../../ui-components/button/Button'\nimport {TooltipDelayGroupProvider} from '../../../ui-components/tooltipDelayGroupProvider/TooltipDelayGroupProvider'\nimport {PaneHeader as StructurePaneHeader} from '../../components/pane/PaneHeader'\nimport {usePane} from '../../components/pane/usePane'\nimport {PaneHeaderActions} from '../../components/paneHeaderActions/PaneHeaderActions'\nimport {BackLink} from '../../components/paneRouter/BackLink'\nimport {\n type PaneMenuItem,\n type PaneMenuItemGroup,\n type StructureToolPaneActionHandler,\n} from '../../types'\nimport {useStructureTool} from '../../useStructureTool'\nimport {type SortOrder} from './types'\n\ninterface PaneHeaderProps {\n contentAfter?: ReactNode\n customMenuItemState?: Record<string, unknown>\n index: number\n initialValueTemplates?: InitialValueTemplateItem[]\n menuItemGroups?: PaneMenuItemGroup[]\n menuItems?: PaneMenuItem[]\n setLayout: (layout: GeneralPreviewLayoutKey) => void\n setSortOrder: (sortOrder: SortOrder) => void\n setCustomMenuItemState: (state: Record<string, unknown>) => void\n restoreDefaultLayout: () => void\n restoreDefaultSortOrder: () => void\n title: string\n}\n\nexport const PaneHeader = memo(\n ({\n contentAfter,\n customMenuItemState = {},\n index,\n initialValueTemplates = [],\n menuItemGroups = [],\n menuItems = [],\n setLayout,\n setSortOrder,\n setCustomMenuItemState,\n restoreDefaultLayout,\n restoreDefaultSortOrder,\n title,\n }: PaneHeaderProps) => {\n const {features} = useStructureTool()\n const {collapsed, isLast} = usePane()\n // Prevent focus if this is the last (non-collapsed) pane.\n const tabIndex = isLast && !collapsed ? -1 : 0\n\n const actionHandlers = useMemo((): Record<string, StructureToolPaneActionHandler> => {\n return {\n setLayout: ({layout: value}: {layout: GeneralPreviewLayoutKey}) => {\n setLayout(value)\n },\n setSortOrder: (sort: SortOrder) => {\n setSortOrder(sort)\n },\n restoreDefaultLayout,\n restoreDefaultSortOrder,\n setMenuItemState: (params: {_menuItemId: string; value?: unknown}) => {\n const id = params._menuItemId\n const value = params.value ?? true\n const currentValue = customMenuItemState[id]\n // Toggle behavior: if clicking the same value, remove it (deselect)\n if (currentValue === value) {\n // Remove the key from state\n const newState = Object.fromEntries(\n Object.entries(customMenuItemState).filter(([key]) => key !== id),\n )\n setCustomMenuItemState(newState)\n } else {\n setCustomMenuItemState({...customMenuItemState, [id]: value})\n }\n },\n }\n }, [\n customMenuItemState,\n setLayout,\n setSortOrder,\n setCustomMenuItemState,\n restoreDefaultLayout,\n restoreDefaultSortOrder,\n ])\n\n return (\n <TooltipDelayGroupProvider>\n <StructurePaneHeader\n actions={\n <PaneHeaderActions\n initialValueTemplateItems={initialValueTemplates}\n actionHandlers={actionHandlers}\n menuItemGroups={menuItemGroups}\n menuItems={menuItems}\n />\n }\n backButton={\n features.backButton &&\n index > 0 && (\n <Button\n as={BackLink}\n data-as=\"a\"\n icon={ArrowLeftIcon}\n mode=\"bleed\"\n tooltipProps={{content: 'Back'}}\n />\n )\n }\n contentAfter={contentAfter}\n tabIndex={tabIndex}\n title={title}\n />\n </TooltipDelayGroupProvider>\n )\n },\n)\n\nPaneHeader.displayName = 'Memo(PaneHeader)'\n","import {Card, Code} from '@sanity/ui'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {memo, useCallback, useMemo, useState} from 'react'\nimport {\n EMPTY_ARRAY,\n type GeneralDocumentListLayoutKey,\n type ObjectSchemaType,\n SourceProvider,\n useI18nText,\n useSchema,\n useSource,\n useTranslation,\n} from 'sanity'\nimport shallowEquals from 'shallow-equals'\n\nimport {Pane} from '../../components/pane/Pane'\nimport {_DEBUG} from '../../constants'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {assignId} from '../../structureResolvers/assignId'\nimport {type PaneMenuItem} from '../../types'\nimport {useStructureToolSetting} from '../../useStructureToolSetting'\nimport {type BaseStructureToolPaneProps} from '../types'\nimport {DEFAULT_ORDERING, EMPTY_RECORD} from './constants'\nimport {DocumentListPane} from './DocumentListPane'\nimport {\n findStaticTypesInFilter,\n fromStaticSortOrder,\n toStaticSortOrder,\n validateSortOrder,\n} from './helpers'\nimport {PaneHeader} from './PaneHeader'\nimport {type SortOrder, type StaticSortOrder} from './types'\n\n/**\n * Type for custom menu item state storage.\n * Maps menu item IDs to their current state values.\n */\ntype CustomMenuItemState = Record<string, unknown>\n\n/**\n * Adds auto-generated IDs to menu items that don't have one.\n */\nconst addIdsToMenuItems = (menuItems?: PaneMenuItem[]): PaneMenuItem[] | undefined => {\n return menuItems?.map((item) => {\n if (item.id) return item\n return {...item, id: assignId(item)}\n })\n}\n\n/**\n * @internal exported for testing\n */\nexport const addSelectedStateToMenuItems = (options: {\n menuItems?: PaneMenuItem[]\n sortOrderRaw?: SortOrder\n layout?: GeneralDocumentListLayoutKey\n customMenuItemState?: CustomMenuItemState\n schemaType?: ObjectSchemaType\n disabledSortReason?: string\n}) => {\n const {\n menuItems,\n sortOrderRaw,\n layout,\n customMenuItemState = {},\n schemaType,\n disabledSortReason,\n } = options\n\n return menuItems?.map((item) => {\n if (item.params?.layout) {\n return {\n ...item,\n selected: layout === item.params?.layout,\n }\n }\n\n if (item?.params?.by) {\n const itemSortOrder: SortOrder = {by: item.params.by}\n\n const isInvalidSortOrder =\n validateSortOrder(itemSortOrder, schemaType, DEFAULT_ORDERING) !== itemSortOrder\n\n const staticSortBy = toStaticSortOrder({by: sortOrderRaw?.by ?? EMPTY_ARRAY}).by\n const itemSortBy = toStaticSortOrder({by: item?.params?.by ?? EMPTY_ARRAY}).by\n\n return {\n ...item,\n selected: isEqual(staticSortBy, itemSortBy),\n ...(isInvalidSortOrder && {\n disabled: {reason: disabledSortReason},\n }),\n }\n }\n\n // Check custom menu item state by id\n if (item.id && item.id in customMenuItemState) {\n const storedValue = customMenuItemState[item.id]\n const itemValue = item.params?.value ?? true\n return {\n ...item,\n selected: isEqual(storedValue, itemValue),\n }\n }\n\n // Preserve any existing selected state, default to false\n return {...item, selected: item.selected ?? false}\n })\n}\n\n/**\n * Appends restore-default items to the Sort and Layout groups. Injected at\n * render time so panes with custom `menuItems` still receive them.\n *\n * @internal exported for testing\n */\nexport const appendRestoreDefaultItems = (options: {\n menuItems?: PaneMenuItem[]\n isSortDefault: boolean\n isLayoutDefault: boolean\n restoreSortDisabledReason: string\n restoreLayoutDisabledReason: string\n suppressRestoreDefaults?: boolean\n}): PaneMenuItem[] => {\n const {\n menuItems = [],\n isSortDefault,\n isLayoutDefault,\n restoreSortDisabledReason,\n restoreLayoutDisabledReason,\n suppressRestoreDefaults,\n } = options\n\n if (suppressRestoreDefaults) return menuItems\n\n // Only attach a restore item to a group that already has items, so a pane\n // that removed them (e.g. `menuItems([])`) does not get them back.\n const hasSortItems = menuItems.some(\n (item) => item.group === 'sorting' || item.action === 'setSortOrder',\n )\n const hasLayoutItems = menuItems.some(\n (item) => item.group === 'layout' || item.action === 'setLayout',\n )\n\n const restoreDefaultSortOrderItem: PaneMenuItem = {\n group: 'sorting',\n action: 'restoreDefaultSortOrder',\n i18n: {title: {key: 'menu-items.sort-by.restore-default', ns: structureLocaleNamespace}},\n title: 'Default sort',\n params: {hideSelectionIndicator: true},\n ...(isSortDefault && {disabled: {reason: restoreSortDisabledReason}}),\n }\n\n const restoreDefaultLayoutItem: PaneMenuItem = {\n group: 'layout',\n action: 'restoreDefaultLayout',\n i18n: {title: {key: 'menu-items.layout.restore-default', ns: structureLocaleNamespace}},\n title: 'Default view',\n params: {hideSelectionIndicator: true},\n ...(isLayoutDefault && {disabled: {reason: restoreLayoutDisabledReason}}),\n }\n\n return [\n ...menuItems,\n ...(hasSortItems ? [restoreDefaultSortOrderItem] : []),\n ...(hasLayoutItems ? [restoreDefaultLayoutItem] : []),\n ]\n}\n\nexport function useShallowUnique<ValueType>(value: ValueType): ValueType {\n const [previous, setPrevious] = useState<ValueType>(value)\n if (!shallowEquals(previous, value)) {\n setPrevious(value)\n return value\n }\n return previous\n}\n\n/**\n * @internal\n */\nexport const PaneContainer = memo(function PaneContainer(\n props: BaseStructureToolPaneProps<'documentList'>,\n) {\n const {index, isSelected, pane, paneKey} = props\n const {name: parentSourceName} = useSource()\n\n const {\n defaultLayout = 'default',\n initialValueTemplates = EMPTY_ARRAY,\n menuItemGroups,\n menuItems,\n options,\n suppressRestoreDefaultMenuItems,\n } = pane\n const {defaultOrdering = EMPTY_ARRAY, filter} = options\n const params = useShallowUnique(options.params || EMPTY_RECORD)\n const sourceName = pane.source\n const typeName = useMemo(() => {\n const staticTypes = findStaticTypesInFilter(filter, params)\n if (staticTypes?.length === 1) return staticTypes[0]\n return null\n }, [filter, params])\n\n const [layout, setLayout] = useStructureToolSetting<GeneralDocumentListLayoutKey>(\n 'layout',\n typeName ?? pane.id, //pane.id for anything that is not documentTypeList\n defaultLayout,\n )\n\n const {title} = useI18nText(pane)\n\n // Ensure that we use the defaultOrdering value from structure builder if any as the default\n const defaultSortOrder = useMemo(() => {\n return defaultOrdering?.length > 0 ? {by: defaultOrdering} : DEFAULT_ORDERING\n }, [defaultOrdering])\n\n const [storedSortOrderRaw, setStoredSortOrder] = useStructureToolSetting<StaticSortOrder>(\n 'sort-order',\n typeName ?? pane.id, //pane.id for anything that is not documentTypeList\n defaultSortOrder,\n )\n\n const schema = useSchema()\n const schemaType = useMemo(\n () => (typeName ? (schema.get(typeName) as ObjectSchemaType | undefined) : undefined),\n [typeName, schema],\n )\n const {t} = useTranslation(structureLocaleNamespace)\n\n // Rehydrate the live `schemaType` onto each persisted entry. The\n // pane already knows the type via `typeName`, so no discriminator\n // is needed in storage.\n const sortOrderRaw = useMemo<SortOrder | undefined>(\n () => fromStaticSortOrder(storedSortOrderRaw, schemaType),\n [storedSortOrderRaw, schemaType],\n )\n\n const validatedSortOrder = useMemo(() => {\n if (!sortOrderRaw) return sortOrderRaw\n return validateSortOrder(sortOrderRaw, schemaType, defaultSortOrder)\n }, [sortOrderRaw, schemaType, defaultSortOrder])\n\n const handleSetSortOrder = useCallback(\n async (newSortOrder: SortOrder) => {\n const validated = validateSortOrder(newSortOrder, schemaType, defaultSortOrder)\n await setStoredSortOrder(toStaticSortOrder(validated))\n },\n [setStoredSortOrder, schemaType, defaultSortOrder],\n )\n\n // Clear the stored preference instead of writing the default: the key is\n // shared per type, so writing would leak this list's default onto its siblings.\n const handleRestoreDefaultSortOrder = useCallback(async () => {\n await setStoredSortOrder(null)\n }, [setStoredSortOrder])\n\n const handleRestoreDefaultLayout = useCallback(async () => {\n await setLayout(null)\n }, [setLayout])\n\n const [customMenuItemState, setCustomMenuItemState] = useState<CustomMenuItemState>({})\n\n const menuItemsWithIds = useMemo(() => addIdsToMenuItems(menuItems), [menuItems])\n\n const disabledSortReason = t('panes.document-list-pane.sort-order.disabled-reason')\n\n const menuItemsWithSelectedState = useMemo(\n () =>\n addSelectedStateToMenuItems({\n menuItems: menuItemsWithIds,\n sortOrderRaw: validatedSortOrder,\n layout,\n customMenuItemState,\n schemaType,\n disabledSortReason,\n }),\n [\n customMenuItemState,\n disabledSortReason,\n layout,\n menuItemsWithIds,\n schemaType,\n validatedSortOrder,\n ],\n )\n\n const isLayoutDefault = layout === defaultLayout\n // Compare the stored static order, not the hydrated validatedSortOrder.\n const isSortDefault = useMemo(\n () => isEqual(storedSortOrderRaw?.by ?? [], toStaticSortOrder(defaultSortOrder).by),\n [storedSortOrderRaw, defaultSortOrder],\n )\n\n const menuItemsWithRestoreDefaults = useMemo(\n () =>\n appendRestoreDefaultItems({\n menuItems: menuItemsWithSelectedState,\n isSortDefault,\n isLayoutDefault,\n restoreSortDisabledReason: t('menu-items.sort-by.restore-default.disabled-reason'),\n restoreLayoutDisabledReason: t('menu-items.layout.restore-default.disabled-reason'),\n suppressRestoreDefaults: suppressRestoreDefaultMenuItems,\n }),\n [\n menuItemsWithSelectedState,\n isSortDefault,\n isLayoutDefault,\n t,\n suppressRestoreDefaultMenuItems,\n ],\n )\n\n return (\n <SourceProvider name={sourceName || parentSourceName}>\n <Pane\n data-ui=\"DocumentListPane\"\n id={paneKey}\n minWidth={320}\n currentMaxWidth={350}\n maxWidth={640}\n selected={isSelected}\n >\n {_DEBUG && (\n <Card padding={4} tone=\"transparent\">\n <Code>{pane.source || '(none)'}</Code>\n </Card>\n )}\n\n <PaneHeader\n customMenuItemState={customMenuItemState}\n index={index}\n initialValueTemplates={initialValueTemplates}\n menuItemGroups={menuItemGroups}\n menuItems={menuItemsWithRestoreDefaults}\n setLayout={setLayout}\n setSortOrder={handleSetSortOrder}\n setCustomMenuItemState={setCustomMenuItemState}\n restoreDefaultLayout={handleRestoreDefaultLayout}\n restoreDefaultSortOrder={handleRestoreDefaultSortOrder}\n title={title}\n />\n <DocumentListPane {...props} sortOrder={validatedSortOrder} layout={layout} />\n </Pane>\n </SourceProvider>\n )\n})\nPaneContainer.displayName = 'Memo(PaneContainer)'\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PaneContainer-D8iNUpZk.js","names":["SortOrder","PARTIAL_PAGE_LIMIT","FULL_LIST_LIMIT","DEFAULT_ORDERING","by","field","direction","EMPTY_RECORD","Record","SanityDocument","Box","Container","Flex","Heading","Stack","Text","useCallback","useEffect","useMemo","useState","CommandList","CommandListRenderItemCallback","ErrorActions","GeneralPreviewLayoutKey","getPublishedId","isDev","LoadingBlock","SanityDefaultPreview","Translate","useSchema","useTranslation","styled","Delay","PaneContent","usePane","usePaneLayout","PaneItem","structureLocaleNamespace","FULL_LIST_LIMIT","DocumentListPaneItem","LoadingVariant","SortOrder","RootBox","$opacity","props","CommandListBox","DocumentListPaneContentProps","childItemId","error","message","filterIsSimpleTypeConstraint","hasMaxItems","muted","hasSearchQuery","isActive","isLazyLoading","isLoading","isConnected","autoRetry","canRetry","retryCount","isRetrying","items","layout","loadingVariant","onEndReached","onRetry","paneTitle","searchInputElement","HTMLInputElement","showIcons","sortOrder","SKELETON_ITEMS","Array","keys","LoadingView","$","_c","t0","map","num","t1","DocumentListPaneContent","schema","collapsed","layoutCollapsed","index","shouldRender","setShouldRender","t","handleEndReached","timer","setTimeout","clearTimeout","t2","t3","length","item","t4","activeIndex","publishedId","_id","isSelected","pressed","selected","isLastItem","showSpinner","showMaxItemsMessage","undefined","get","_type","limit","renderItem","bb0","t5","t6","noDocumentsContent","bb1","isOnline","window","navigator","onLine","t7","t8","Code","_temp","t9","t10","t11","t12","count","t13","key","mainContent","children","SortIcon","Box","Menu","MenuDivider","Text","memo","useId","useGetI18nText","useTranslation","Button","MenuButton","MenuItem","structureLocaleNamespace","PaneMenuItem","RELEVANCE_ORDERING_ID","getSearchOrderingId","menuItem","id","JSON","stringify","params","by","isSortOrderingMenuItem","action","Array","isArray","OrderingMenuItemProps","selected","onSelect","OrderingMenuItem","t0","$","_c","getI18nText","t1","title","t2","t3","DocumentListPaneSearchOrderingProps","orderings","value","onChange","DocumentListPaneSearchOrdering","props","t","menuButtonId","relevanceTitle","undefined","find","ordering","selectedOrdering","order","buttonText","length","t4","t5","t6","t7","t8","Symbol","for","t9","t10","ordering_0","map","t11","placement","portal","radius","t12","isArraySchemaType","isIndexSegment","isKeySegment","isReferenceSchemaType","ObjectField","ObjectFieldType","ObjectSchemaType","SanityDocumentLike","SchemaType","PathUtils","ExprNode","parse","collate","DocumentListPaneItem","SortOrder","StaticSortOrder","toStaticSortOrder","sortOrder","by","map","field","direction","mapWith","nulls","undefined","fromStaticSortOrder","staticSortOrder","schemaType","Array","isArray","entry","removePublishedWithDrafts","documents","doc","draft","published","versions","hasDraft","Boolean","hasPublished","applyOrderingFunctions","order","orderBy","fieldType","tryResolveSchemaTypeForPath","fieldExtendsType","jsonType","every","item","index","BUILT_IN_SORT_FIELDS","Set","validateSortOrder","fallback","allFieldsValid","has","baseType","path","pathSegments","fromString","current","segment","getFieldTypeByName","refType","otherRefType","to","isArrayAccessor","of","length","memberType","refTargets","type","fieldName","fields","find","name","ofType","findTypes","node","left","right","op","base","value","types","element","elements","isSplat","add","size","findStaticTypesInFilter","filter","params","Record","from","sort","getPublishedId","DocumentListPaneItem","SortOrder","ORDER_BY_IDS_PARAM_FIELD","ORDER_BY_IDS_PARAM_SORT_ORDER","by","field","direction","isOrderByIdsParam","sortOrder","length","reorderItemsByIdsParam","items","ids","indexById","reduce","Map","accumulatedIndex","id","index","has","set","positionOf","item","matchedIndex","get","_id","undefined","Number","MAX_SAFE_INTEGER","map","originalIndex","sort","first","second","positionDifference","entry","defineEvent","DocumentListLoadTimeData","durationMs","searchStringLength","returnedDocuments","fromCache","DocumentListLoadTimeMeasured","name","version","description","maxSampleRate","ClientPerspective","SanityClient","asyncScheduler","defer","filter","map","merge","mergeMap","Observable","of","partition","share","throttleTime","throwError","timer","exhaustMapWithTrailing","scan","compileFieldPath","createSearch","createSWR","getSearchableTypes","SanityDocumentLike","Schema","SearchOptions","SearchSort","SearchStrategy","toStaticSortOrder","SortOrder","ListenQueryOptions","client","limit","params","Record","schema","searchQuery","sort","perspective","staticTypeNames","maxFieldDepth","searchStrategy","sortByRelevance","SearchQueryEvent","type","documents","SearchQueryState","connected","fromCache","swr","maxSize","resolveSearchOrdering","options","sortBy","useRelevance","skipSortByScore","Boolean","field","direction","listenSearchQuery","groqFilter","by","events$","listen","events","includeAllVersions","includeResult","visibility","tag","pipe","ev","i","isFirst","Error","welcome$","mutationAndReconnect$","swrKey","JSON","stringify","fiilter","leading","trailing","event","typeNames$","observable","fetch","typeNames","types","includes","name","entry","strict","search","strategy","maxDepth","doFetch","searchTerms","query","searchOptions","comments","result","hits","hit","const","acc","v","value","ChannelError","ClientError","ClientPerspective","SanityClient","ServerError","useTelemetry","observableCallback","useMemo","useState","useObservable","concat","fromEvent","merge","NEVER","of","timer","filter","map","mergeMap","scan","share","shareReplay","switchMap","take","takeUntil","withLatestFrom","catchWithCount","measureFirstMatch","useSchema","useSearchMaxFieldDepth","useWorkspace","DocumentListLoadTimeMeasured","DEFAULT_ORDERING","FULL_LIST_LIMIT","PARTIAL_PAGE_LIMIT","findStaticTypesInFilter","removePublishedWithDrafts","listenSearchQuery","DocumentListPaneItem","SortOrder","UseDocumentListOpts","client","perspective","params","Record","searchQuery","sortOrder","searchSortByRelevance","DocumentListState","error","message","isLoadingFullList","isLoading","connected","isRetrying","autoRetry","canRetry","retryCount","fromCache","items","INITIAL_QUERY_STATE","UseDocumentListHookValue","onRetry","onLoadFullList","isRetriableError","statusCode","useDocumentList","opts","$","_c","searchFilter","paramsProp","t0","undefined","strategy","searchStrategy","search","schema","maxFieldDepth","telemetry","t1","typeNameFromFilter","t2","_temp","onRetry$","t3","_temp2","onFetchFullList$","t4","t5","t6","listenSearchQueryArgs","limit","sort","staticTypeNames","sortByRelevance","t7","durationMs","data","log","searchStringLength","length","returnedDocuments","documents","partialList$","pipe","_temp3","refCount","bufferSize","fullList$","_temp4","type","const","_temp5","t8","lastError","caught$","safeError","isOnline","window","navigator","onLine","retries","retrying","_temp6","_temp7","queryResults$","error_0","canRetry_0","autoRetry_0","retryCount_0","prev","event_0","event","result","Error","result_1","result_0","nonErrorThrownWarning","thrown","String","SearchIcon","SpinnerIcon","Box","Stack","TextInput","memo","useCallback","useEffect","useMemo","useState","useObservableEvent","debounce","map","Observable","of","tap","timer","DEFAULT_STUDIO_CLIENT_OPTIONS","EMPTY_ARRAY","GeneralPreviewLayoutKey","useActiveReleases","useClient","useI18nText","usePerspective","useReconnectingToast","useSchema","useTranslation","useUnique","keyframes","styled","structureLocaleNamespace","BaseStructureToolPaneProps","DEFAULT_ORDERING","EMPTY_RECORD","FULL_LIST_LIMIT","DocumentListPaneContent","DocumentListPaneSearchOrdering","getSearchOrderingId","isSortOrderingMenuItem","RELEVANCE_ORDERING_ID","applyOrderingFunctions","findStaticTypesInFilter","isOrderByIdsParam","reorderItemsByIdsParam","useShallowUnique","LoadingVariant","SortOrder","useDocumentList","DocumentListPaneProps","sortOrder","layout","rotate","fadeIn","AnimatedSpinnerIcon","SubtleSpinnerIcon","DelayedSubtleSpinnerIcon","DocumentListPane","props","$","_c","childItemId","isActive","pane","paneKey","sortOrderRaw","schema","releases","perspectiveStack","displayOptions","options","apiVersion","filter","params","t0","bb0","t1","staticTypes","length","typeName","showIcons","t","title","searchQuery","setSearchQuery","searchInputValue","setSearchInputValue","searchInputElement","setSearchInputElement","searchOrderingId","setSearchOrderingId","trim","trimmedSearchQuery","orderByIdsParam","t2","get","sortWithOrderingFn","fetchSortOrder","t3","menuItems","t4","_temp","searchOrderings","useRelevance","t5","t6","selectedSearchOrdering","undefined","find","ordering","searchSchemaType","by","effectiveSortOrder","t7","t8","client","t9","perspective","searchSortByRelevance","error","isLoadingFullList","isLoading","documentListIsLoading","items","fromCache","isRetrying","autoRetry","canRetry","retryCount","connected","onLoadFullList","onRetry","t10","bb1","idsParam","Array","isArray","ids","t11","orderedItems","loading","Symbol","for","event$","pipe","_temp2","_temp3","handleQueryChange","t12","handleClearSearch","t13","event_0","event","key","handleSearchKeyDown","enableSearchSpinner","setEnableSearchSpinner","t14","t15","t16","t17","t18","t19","t20","bb2","loadingVariant","t21","bb3","textInputIcon","t22","t23","Boolean","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","item","target","value","ArrowLeftIcon","memo","ReactNode","useMemo","GeneralPreviewLayoutKey","InitialValueTemplateItem","Button","TooltipDelayGroupProvider","PaneHeader","StructurePaneHeader","usePane","PaneHeaderActions","BackLink","PaneMenuItem","PaneMenuItemGroup","StructureToolPaneActionHandler","useStructureTool","SortOrder","PaneHeaderProps","contentAfter","customMenuItemState","Record","index","initialValueTemplates","menuItemGroups","menuItems","setLayout","layout","setSortOrder","sortOrder","setCustomMenuItemState","state","restoreDefaultLayout","restoreDefaultSortOrder","title","t0","$","_c","t1","t2","t3","t4","t5","undefined","t6","t7","t8","features","collapsed","isLast","tabIndex","t9","t10","value","sort","t11","params","id","_menuItemId","value_0","currentValue","newState","Object","fromEntries","entries","filter","t12","key","setMenuItemState","actionHandlers","t13","t14","backButton","content","t15","displayName","Card","Code","isEqual","memo","useCallback","useMemo","useState","EMPTY_ARRAY","GeneralDocumentListLayoutKey","ObjectSchemaType","SourceProvider","useI18nText","useSchema","useSource","useTranslation","shallowEquals","Pane","_DEBUG","structureLocaleNamespace","assignId","PaneMenuItem","useStructureToolSetting","BaseStructureToolPaneProps","DEFAULT_ORDERING","EMPTY_RECORD","DocumentListPane","findStaticTypesInFilter","fromStaticSortOrder","toStaticSortOrder","validateSortOrder","PaneHeader","SortOrder","StaticSortOrder","CustomMenuItemState","Record","addIdsToMenuItems","menuItems","map","item","id","addSelectedStateToMenuItems","options","sortOrderRaw","layout","customMenuItemState","schemaType","disabledSortReason","params","selected","by","itemSortOrder","isInvalidSortOrder","staticSortBy","itemSortBy","disabled","reason","storedValue","itemValue","value","appendRestoreDefaultItems","isSortDefault","isLayoutDefault","restoreSortDisabledReason","restoreLayoutDisabledReason","suppressRestoreDefaults","hasSortItems","some","group","action","hasLayoutItems","restoreDefaultSortOrderItem","i18n","title","key","ns","hideSelectionIndicator","restoreDefaultLayoutItem","useShallowUnique","previous","setPrevious","PaneContainer","props","$","_c","index","isSelected","pane","paneKey","name","parentSourceName","defaultLayout","t0","initialValueTemplates","t1","menuItemGroups","suppressRestoreDefaultMenuItems","undefined","defaultOrdering","t2","filter","sourceName","source","t3","bb0","t4","staticTypes","length","typeName","setLayout","defaultSortOrder","storedSortOrderRaw","setStoredSortOrder","schema","t5","get","t","t6","t7","bb1","t8","validatedSortOrder","newSortOrder","validated","handleSetSortOrder","t9","handleRestoreDefaultSortOrder","t10","handleRestoreDefaultLayout","t11","Symbol","for","setCustomMenuItemState","t12","menuItemsWithIds","t13","t14","menuItemsWithSelectedState","t15","t16","menuItemsWithRestoreDefaults","t17","t18","t19","t20","t21","t22","displayName"],"sources":["../src/structure/panes/documentList/constants.ts","../src/structure/panes/documentList/DocumentListPaneContent.tsx","../src/structure/panes/documentList/DocumentListPaneSearchOrdering.tsx","../src/structure/panes/documentList/helpers.ts","../src/structure/panes/documentList/orderByIdsParam.ts","../src/structure/panes/documentList/__telemetry__/documentListSearch.telemetry.ts","../src/structure/panes/documentList/listenSearchQuery.ts","../src/structure/panes/documentList/useDocumentList.ts","../src/structure/panes/documentList/DocumentListPane.tsx","../src/structure/panes/documentList/PaneHeader.tsx","../src/structure/panes/documentList/PaneContainer.tsx"],"sourcesContent":["import {type SortOrder} from './types'\n\nexport const PARTIAL_PAGE_LIMIT = 100\nexport const FULL_LIST_LIMIT = 2000\nexport const DEFAULT_ORDERING: SortOrder = {by: [{field: '_updatedAt', direction: 'desc'}]}\nexport const EMPTY_RECORD: Record<string, unknown> = {}\n","import {type SanityDocument} from '@sanity/types'\nimport {Box, Container, Flex, Heading, Stack, Text} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {\n CommandList,\n type CommandListRenderItemCallback,\n ErrorActions,\n type GeneralPreviewLayoutKey,\n getPublishedId,\n isDev,\n LoadingBlock,\n SanityDefaultPreview,\n Translate,\n useSchema,\n useTranslation,\n} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {Delay} from '../../components/Delay'\nimport {PaneContent} from '../../components/pane/PaneContent'\nimport {usePane} from '../../components/pane/usePane'\nimport {usePaneLayout} from '../../components/pane/usePaneLayout'\nimport {PaneItem} from '../../components/paneItem/PaneItem'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {FULL_LIST_LIMIT} from './constants'\nimport {type DocumentListPaneItem, type LoadingVariant, type SortOrder} from './types'\n\nconst RootBox = styled(Box)<{$opacity?: number}>`\n position: relative;\n opacity: ${(props) => props.$opacity || 1};\n transition: opacity 0.4s;\n`\n\nconst CommandListBox = styled(Box)`\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n`\n\ninterface DocumentListPaneContentProps {\n childItemId?: string\n error: {message: string} | null\n filterIsSimpleTypeConstraint: boolean\n hasMaxItems?: boolean\n muted?: boolean\n hasSearchQuery: boolean\n isActive?: boolean\n isLazyLoading: boolean\n isLoading: boolean\n isConnected?: boolean\n autoRetry?: boolean\n canRetry: boolean\n retryCount?: number\n isRetrying?: boolean\n items: DocumentListPaneItem[]\n layout?: GeneralPreviewLayoutKey\n loadingVariant?: LoadingVariant\n onEndReached: () => void\n onRetry?: () => void\n paneTitle: string\n searchInputElement: HTMLInputElement | null\n showIcons: boolean\n sortOrder?: SortOrder\n}\n\nconst SKELETON_ITEMS = [...Array(30).keys()]\n\nfunction LoadingView(props: {layout?: GeneralPreviewLayoutKey}) {\n const {layout} = props\n\n return (\n <Stack paddingX={3} paddingY={2} paddingTop={0} space={1}>\n {SKELETON_ITEMS.map((num) => (\n <SanityDefaultPreview key={num} isPlaceholder layout={layout} />\n ))}\n </Stack>\n )\n}\n\nexport function DocumentListPaneContent(props: DocumentListPaneContentProps) {\n const {\n childItemId,\n error,\n isRetrying,\n autoRetry,\n filterIsSimpleTypeConstraint,\n hasMaxItems,\n hasSearchQuery,\n isActive,\n isLazyLoading,\n muted,\n isLoading,\n isConnected,\n retryCount,\n canRetry,\n items,\n layout,\n loadingVariant,\n onEndReached,\n onRetry,\n paneTitle,\n searchInputElement,\n showIcons,\n sortOrder,\n } = props\n\n const schema = useSchema()\n\n const {collapsed: layoutCollapsed} = usePaneLayout()\n const {collapsed, index} = usePane()\n const [shouldRender, setShouldRender] = useState(!collapsed)\n const {t} = useTranslation(structureLocaleNamespace)\n\n const handleEndReached = useCallback(() => {\n if (shouldRender) {\n onEndReached()\n }\n }, [onEndReached, shouldRender])\n\n useEffect(() => {\n if (collapsed) return undefined\n\n const timer = setTimeout(() => {\n setShouldRender(true)\n }, 0)\n\n return () => {\n clearTimeout(timer)\n }\n }, [collapsed, items])\n\n const renderItem = useCallback<CommandListRenderItemCallback<SanityDocument>>(\n (item, {activeIndex}) => {\n const publishedId = getPublishedId(item._id)\n const isSelected = childItemId === publishedId\n const pressed = !isActive && isSelected\n const selected = isActive && isSelected\n const isLastItem = activeIndex === items.length - 1\n const showSpinner = isLastItem && isLazyLoading\n const showMaxItemsMessage = isLastItem && hasMaxItems\n\n return (\n <>\n <PaneItem\n icon={showIcons ? undefined : false}\n id={publishedId}\n layout={layout}\n marginBottom={1}\n pressed={pressed}\n schemaType={schema.get(item._type)}\n selected={selected}\n sortOrder={sortOrder}\n value={item}\n />\n\n {showSpinner && <LoadingBlock />}\n\n {showMaxItemsMessage && (\n <Box marginY={1} paddingX={3} paddingY={4}>\n <Text align=\"center\" muted size={1}>\n {t('panes.document-list-pane.max-items.text', {limit: FULL_LIST_LIMIT})}\n </Text>\n </Box>\n )}\n </>\n )\n },\n [\n childItemId,\n isActive,\n items.length,\n layout,\n schema,\n showIcons,\n sortOrder,\n hasMaxItems,\n isLazyLoading,\n t,\n ],\n )\n\n const noDocumentsContent = useMemo(() => {\n if (hasSearchQuery) {\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Box paddingX={4} paddingY={5}>\n <Text align=\"center\" muted>\n {t('panes.document-list-pane.no-documents.text')}\n </Text>\n </Box>\n </Container>\n </Flex>\n )\n }\n\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Box paddingX={4} paddingY={5}>\n <Text align=\"center\" muted>\n {filterIsSimpleTypeConstraint\n ? t('panes.document-list-pane.no-documents-of-type.text')\n : t('panes.document-list-pane.no-matching-documents.text')}\n </Text>\n </Box>\n </Container>\n </Flex>\n )\n }, [filterIsSimpleTypeConstraint, hasSearchQuery, t])\n\n const mainContent = useMemo(() => {\n if (!shouldRender) {\n return null\n }\n\n const isOnline = window.navigator.onLine\n if (error) {\n return (\n <Flex align=\"center\" direction=\"column\" height=\"fill\" justify=\"center\">\n <Container width={1}>\n <Stack paddingX={4} paddingY={5} space={4}>\n <Heading as=\"h3\">{t('panes.document-list-pane.error.title')}</Heading>\n <Text as=\"p\">\n {isDev ? (\n <Translate\n t={t}\n i18nKey=\"panes.document-list-pane.error.text.dev\"\n values={{error: error.message}}\n components={{Code: ({children}) => <code>{children}</code>}}\n />\n ) : isOnline ? (\n t('panes.document-list-pane.error.text')\n ) : (\n t('panes.document-list-pane.error.text.offline')\n )}\n </Text>\n <ErrorActions\n error={error}\n eventId={null}\n onRetry={isOnline && canRetry ? onRetry : undefined}\n isRetrying={isRetrying}\n />\n {canRetry ? (\n <Text as=\"p\" muted size={1}>\n {isRetrying\n ? t('panes.document-list-pane.error.retrying', {count: retryCount})\n : autoRetry\n ? t('panes.document-list-pane.error.will-retry-automatically', {\n count: retryCount,\n })\n : t('panes.document-list-pane.error.max-retries-attempted', {\n count: retryCount,\n })}\n </Text>\n ) : null}\n </Stack>\n </Container>\n </Flex>\n )\n }\n\n if (isConnected && !isLoading && items.length === 0) {\n return noDocumentsContent\n }\n\n if (loadingVariant === 'initial' && isLoading) {\n return (\n <Delay ms={300}>\n <LoadingView layout={layout} />\n </Delay>\n )\n }\n\n if (loadingVariant === 'spinner' && isLoading) {\n return null\n }\n\n // prevents bug when panes won't render if first rendered while collapsed\n const key = `${index}-${collapsed}`\n\n return (\n <RootBox overflow=\"hidden\" height=\"fill\" $opacity={muted ? 0.8 : 1}>\n <CommandListBox>\n <CommandList\n key={key}\n activeItemDataAttr=\"data-hovered\"\n ariaLabel={paneTitle}\n canReceiveFocus\n inputElement={searchInputElement}\n itemHeight={51}\n items={items}\n onEndReached={handleEndReached}\n onlyShowSelectionWhenActive\n overscan={10}\n paddingBottom={1}\n paddingX={3}\n renderItem={renderItem}\n wrapAround={false}\n />\n </CommandListBox>\n </RootBox>\n )\n }, [\n autoRetry,\n canRetry,\n collapsed,\n error,\n handleEndReached,\n index,\n isConnected,\n isLoading,\n isRetrying,\n items,\n layout,\n loadingVariant,\n muted,\n noDocumentsContent,\n onRetry,\n paneTitle,\n renderItem,\n retryCount,\n searchInputElement,\n shouldRender,\n t,\n ])\n\n return (\n <PaneContent\n data-testid=\"document-list-pane\"\n overflow={layoutCollapsed || loadingVariant === 'initial' ? 'hidden' : 'auto'}\n >\n {mainContent}\n </PaneContent>\n )\n}\n","import {SortIcon} from '@sanity/icons/Sort'\nimport {Box, Menu, MenuDivider, Text} from '@sanity/ui'\nimport {memo, useId} from 'react'\nimport {useGetI18nText, useTranslation} from 'sanity'\n\nimport {Button} from '../../../ui-components/button/Button'\nimport {MenuButton} from '../../../ui-components/menuButton/MenuButton'\nimport {MenuItem} from '../../../ui-components/menuItem/MenuItem'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {type PaneMenuItem} from '../../types'\n\n/**\n * Identifier for the (virtual) \"relevance\" ordering. Relevance isn't one of the\n * pane's configured orderings — it's the score-based ranking applied while a\n * search term is present, so it gets its own reserved id.\n *\n * @internal\n */\nexport const RELEVANCE_ORDERING_ID = 'relevance'\n\n/**\n * Stable id for a sort-order menu item, derived from its sort spec so it\n * survives re-renders without relying on the optional `id` field.\n *\n * @internal\n */\nexport function getSearchOrderingId(menuItem: PaneMenuItem): string {\n return menuItem.id ?? JSON.stringify(menuItem.params?.by ?? [])\n}\n\n/**\n * Whether a pane menu item represents a sort ordering.\n *\n * @internal\n */\nexport function isSortOrderingMenuItem(menuItem: PaneMenuItem): boolean {\n return menuItem.action === 'setSortOrder' && Array.isArray(menuItem.params?.by)\n}\n\ninterface OrderingMenuItemProps {\n menuItem: PaneMenuItem\n selected: boolean\n onSelect: (id: string) => void\n}\n\n/**\n * A single ordering option. Rendered as its own component so it can resolve its\n * localized title via `useGetI18nText` (each item may carry its own i18n\n * record).\n */\nfunction OrderingMenuItem({menuItem, selected, onSelect}: OrderingMenuItemProps) {\n const getI18nText = useGetI18nText(menuItem)\n const {title} = getI18nText(menuItem)\n\n return (\n <MenuItem\n onClick={() => onSelect(getSearchOrderingId(menuItem))}\n pressed={selected}\n text={title}\n />\n )\n}\n\ninterface DocumentListPaneSearchOrderingProps {\n orderings: PaneMenuItem[]\n value: string\n onChange: (id: string) => void\n}\n\n/**\n * Sort-order control shown beneath the document list search input while a\n * search term is present. Defaults to relevance ranking, and lets the editor\n * temporarily apply one of the list's configured orderings instead.\n */\nexport const DocumentListPaneSearchOrdering = memo(function DocumentListPaneSearchOrdering(\n props: DocumentListPaneSearchOrderingProps,\n) {\n const {orderings, value, onChange} = props\n const {t} = useTranslation(structureLocaleNamespace)\n const menuButtonId = useId()\n\n const relevanceTitle = t('panes.document-list-pane.search-ordering.relevance')\n\n const selectedOrdering =\n value === RELEVANCE_ORDERING_ID\n ? undefined\n : orderings.find((ordering) => getSearchOrderingId(ordering) === value)\n\n // Resolve the active ordering's localized title for the button label. The\n // relevance case uses its own complete string rather than interpolating a\n // case-transformed title, which is unreliable across locales.\n const getI18nText = useGetI18nText(selectedOrdering)\n const buttonText = selectedOrdering\n ? t('panes.document-list-pane.search-ordering.label', {\n order: getI18nText(selectedOrdering).title,\n })\n : t('panes.document-list-pane.search-ordering.summary-relevance')\n\n // With no configured orderings there's nothing to choose between, so render a\n // plain, non-interactive label instead of an empty menu.\n if (orderings.length === 0) {\n return (\n <Box paddingX={2} paddingBottom={1}>\n <Text muted size={1} data-testid=\"document-list-search-ordering\">\n {buttonText}\n </Text>\n </Box>\n )\n }\n\n return (\n <Box paddingBottom={1}>\n <MenuButton\n button={\n <Button\n data-testid=\"document-list-search-ordering\"\n icon={SortIcon}\n mode=\"bleed\"\n text={buttonText}\n tone=\"default\"\n aria-label={t('panes.document-list-pane.search-ordering.aria-label')}\n />\n }\n id={menuButtonId}\n menu={\n <Menu>\n <MenuItem\n onClick={() => onChange(RELEVANCE_ORDERING_ID)}\n pressed={value === RELEVANCE_ORDERING_ID}\n text={relevanceTitle}\n />\n <MenuDivider />\n {orderings.map((ordering) => {\n const id = getSearchOrderingId(ordering)\n return (\n <OrderingMenuItem\n key={id}\n menuItem={ordering}\n onSelect={onChange}\n selected={value === id}\n />\n )\n })}\n </Menu>\n }\n popover={{placement: 'bottom-start', portal: true, radius: 2}}\n />\n </Box>\n )\n})\n","import {\n isArraySchemaType,\n isIndexSegment,\n isKeySegment,\n isReferenceSchemaType,\n type ObjectField,\n type ObjectFieldType,\n type ObjectSchemaType,\n type SanityDocumentLike,\n type SchemaType,\n} from '@sanity/types'\nimport * as PathUtils from '@sanity/util/paths'\nimport {type ExprNode, parse} from 'groq-js'\nimport {collate} from 'sanity'\n\nimport {type DocumentListPaneItem, type SortOrder, type StaticSortOrder} from './types'\n\n/**\n * Project a `SortOrder` to its static, runtime-detached shape —\n * stripping the live `schemaType` and the derived `projectionIndex`\n * from each entry.\n *\n * `schemaType` is a live compiled-schema object (with circular\n * references) that cannot be serialized. `projectionIndex` is a\n * derived numeric index regenerated by `compileSortExpression`\n * from each entry's position in the resolved sort order;\n * persisting it risks a stale index after the sort order's shape\n * changes.\n *\n * Used wherever a JSON-safe / runtime-detached sort order is\n * required: writes to settings storage, SWR cache keys, telemetry,\n * etc.\n */\nexport function toStaticSortOrder(sortOrder: SortOrder): StaticSortOrder {\n return {\n by: sortOrder.by.map(({field, direction, mapWith, nulls}) => ({\n field,\n direction,\n ...(mapWith !== undefined && {mapWith}),\n ...(nulls !== undefined && {nulls}),\n })),\n }\n}\n\n/**\n * Hydrate a `StaticSortOrder` into a runtime `SortOrder` by\n * attaching a live `schemaType` to each entry. The pane is the\n * binding to the schema (via its existing `typeName` resolution),\n * so we don't need to encode a discriminator into the static shape.\n * `projectionIndex` is left unset — it's regenerated downstream by\n * `compileSortExpression` inside the search strategy.\n *\n * Tolerates legacy persisted shapes (e.g. `extendedProjection` at\n * the wrapper level) by simply ignoring extra keys, and tolerates\n * partial reads with no `by` array by treating them as empty.\n */\nexport function fromStaticSortOrder(\n staticSortOrder: SortOrder | StaticSortOrder | undefined,\n schemaType: ObjectSchemaType | undefined,\n): SortOrder | undefined {\n if (!staticSortOrder) {\n return staticSortOrder\n }\n const by = Array.isArray(staticSortOrder.by) ? staticSortOrder.by : []\n return {\n by: by.map((entry) => ({\n ...entry,\n ...(schemaType ? {schemaType} : {}),\n })),\n }\n}\n\nexport function removePublishedWithDrafts(documents: SanityDocumentLike[]): DocumentListPaneItem[] {\n return collate(documents).map((entry) => {\n const doc = entry.draft || entry.published || entry.versions[0]\n const hasDraft = Boolean(entry.draft)\n\n return {\n ...doc,\n hasPublished: !!entry.published,\n hasDraft,\n }\n }) as any\n}\n\nexport function applyOrderingFunctions(order: SortOrder, schemaType: ObjectSchemaType): SortOrder {\n const orderBy = order.by.map((by) => {\n // Skip those that already have a mapper\n if (by.mapWith) {\n return by\n }\n\n const fieldType = tryResolveSchemaTypeForPath(schemaType, by.field)\n if (!fieldType) {\n return by\n }\n\n // Note: order matters here, since the jsonType of a date field is `string`,\n // but we want to apply `datetime()`, not `lower()`\n if (fieldExtendsType(fieldType, 'datetime')) {\n return {...by, mapWith: 'dateTime'}\n }\n\n if (fieldType.jsonType === 'string') {\n return {...by, mapWith: 'lower'}\n }\n\n return by\n })\n\n return orderBy.every((item, index) => item === order.by[index]) ? order : {...order, by: orderBy}\n}\n\nconst BUILT_IN_SORT_FIELDS = new Set(['_id', '_type', '_rev', '_createdAt', '_updatedAt'])\n\n/**\n * Checks that every field in a sort order resolves against the schema type.\n * Built-in document fields (_id, _createdAt, etc.) always pass. Returns\n * the fallback when any field is missing - typically when a persisted sort\n * order from one workspace references fields absent in another.\n */\nexport function validateSortOrder(\n sortOrder: SortOrder,\n schemaType: ObjectSchemaType | undefined,\n fallback: SortOrder,\n): SortOrder {\n if (!schemaType) {\n return sortOrder\n }\n\n const allFieldsValid = sortOrder.by.every(\n (entry) =>\n BUILT_IN_SORT_FIELDS.has(entry.field) ||\n Boolean(tryResolveSchemaTypeForPath(schemaType, entry.field)),\n )\n\n return allFieldsValid ? sortOrder : fallback\n}\n\nfunction tryResolveSchemaTypeForPath(baseType: SchemaType, path: string): SchemaType | undefined {\n const pathSegments = PathUtils.fromString(path)\n\n let current: SchemaType | undefined = baseType\n for (const segment of pathSegments) {\n if (!current) {\n return undefined\n }\n\n if (typeof segment === 'string') {\n current = getFieldTypeByName(current, segment)\n\n if (current && isReferenceSchemaType(current)) {\n const [refType, otherRefType] = current.to || []\n if (otherRefType || !refType) {\n return undefined\n }\n current = refType\n }\n\n continue\n }\n\n const isArrayAccessor = isKeySegment(segment) || isIndexSegment(segment)\n if (!isArrayAccessor || !isArraySchemaType(current)) {\n return undefined\n }\n\n if (current.of.length !== 1) {\n // Can't figure out the type without knowing the value\n return undefined\n }\n\n const memberType: SchemaType = current.of[0]\n\n if (!isReferenceSchemaType(memberType)) {\n current = memberType\n continue\n }\n\n const refTargets: SchemaType[] = memberType.to || []\n if (refTargets.length !== 1) {\n // Can't figure out the type without knowing the value\n return undefined\n }\n\n current = refTargets[0]\n }\n\n return current\n}\n\nfunction getFieldTypeByName(type: SchemaType, fieldName: string): SchemaType | undefined {\n if (!('fields' in type)) {\n return undefined\n }\n\n const fieldType = type.fields.find((field) => field.name === fieldName)\n return fieldType ? fieldType.type : undefined\n}\n\nexport function fieldExtendsType(field: ObjectField | ObjectFieldType, ofType: string): boolean {\n let current: SchemaType | undefined = field.type\n while (current) {\n if (current.name === ofType) {\n return true\n }\n\n if (!current.type && current.jsonType === ofType) {\n return true\n }\n\n current = current.type\n }\n\n return false\n}\n\n/**\n * Recursively extract static `_type`s from GROQ filter expressions. If the\n * types can't be statically determined then it will return `null`.\n */\nfunction findTypes(node: ExprNode): Set<string> | null {\n switch (node.type) {\n case 'OpCall': {\n const {left, right} = node\n\n switch (node.op) {\n // e.g. `a == b`\n case '==': {\n // e.g. `_type == 'value'`\n if (left.type === 'AccessAttribute' && left.name === '_type' && !left.base) {\n if (right.type !== 'Value' || typeof right.value !== 'string') return null\n return new Set([right.value])\n }\n\n // e.g. `'value' == _type`\n if (right.type === 'AccessAttribute' && right.name === '_type' && !right.base) {\n if (left.type !== 'Value' || typeof left.value !== 'string') return null\n return new Set([left.value])\n }\n\n // otherwise, we can't determine the types statically\n return null\n }\n\n // e.g. `a in b`\n case 'in': {\n // if `_type` is not on the left hand side of `in` then it can't be determined\n if (left.type !== 'AccessAttribute' || left.name !== '_type' || left.base) return null\n // if the right hand side is not an array then the types can't be determined\n if (right.type !== 'Array') return null\n\n const types = new Set<string>()\n // iterate through all the types\n for (const element of right.elements) {\n // if we find a splat, then early return, we can't determine the types\n if (element.isSplat) return null\n // if the array element is not just a simple value, then early return\n if (element.value.type !== 'Value') return null\n // if the array element value is not a string, then early return\n if (typeof element.value.value !== 'string') return null\n // otherwise add the element value to the set of types\n types.add(element.value.value)\n }\n\n // if there were any elements in the types set, return it\n if (types.size) return types\n // otherwise, the set of types cannot be determined\n return null\n }\n\n default: {\n return null\n }\n }\n }\n\n // groups can just be unwrapped, the AST preserves the order\n case 'Group': {\n return findTypes(node.base)\n }\n\n // e.g. `_type == 'a' || _type == 'b'`\n // with Or nodes, if we can't determine the types for either the left or\n // right hand side then we can't determine the types for any\n // e.g. `_type == 'a' || isActive`\n // — can't determine types because `isActive` could be true on another types\n case 'Or': {\n const left = findTypes(node.left)\n if (!left) return null\n\n const right = findTypes(node.right)\n if (!right) return null\n\n return new Set([...left, ...right])\n }\n\n // e.g. `_type == 'a' && isActive`\n // with And nodes, we can determine the types as long as we can determine\n // the types for one side. We can't determine the types if both are `null`.\n case 'And': {\n const left = findTypes(node.left)\n const right = findTypes(node.right)\n\n if (!left && !right) return null\n return new Set([...(left || []), ...(right || [])])\n }\n\n default: {\n return null\n }\n }\n}\n\nexport function findStaticTypesInFilter(\n filter: string,\n params: Record<string, unknown> = {},\n): string[] | null {\n try {\n const types = findTypes(parse(filter, {params}))\n if (!types) return null\n\n return Array.from(types).sort()\n } catch {\n // if we couldn't parse the filter, just return `null`\n return null\n }\n}\n","import {getPublishedId} from 'sanity'\n\nimport {type DocumentListPaneItem, type SortOrder} from './types'\n\n/**\n * Reserved sentinel field name. A sort order using this field signals that the\n * list should be ordered to match the incoming `$ids` param rather than sorted\n * server-side, so the surrounding pane preserves the caller-provided ordering.\n *\n * @internal\n */\nexport const ORDER_BY_IDS_PARAM_FIELD = '__orderByIdsParam'\n\n/**\n * @internal\n */\nexport const ORDER_BY_IDS_PARAM_SORT_ORDER: SortOrder = {\n by: [{field: ORDER_BY_IDS_PARAM_FIELD, direction: 'asc'}],\n}\n\n/**\n * @internal\n */\nexport function isOrderByIdsParam(sortOrder?: {by?: readonly {field: string}[]}): boolean {\n return sortOrder?.by?.length === 1 && sortOrder.by[0].field === ORDER_BY_IDS_PARAM_FIELD\n}\n\n/**\n * Reorders the list items to match the order of the provided published ids.\n * Items whose published id is absent from `ids` are appended after the matched\n * items, preserving the server-returned order amongst themselves.\n *\n * @internal\n */\nexport function reorderItemsByIdsParam(\n items: DocumentListPaneItem[],\n ids: string[],\n): DocumentListPaneItem[] {\n const indexById = ids.reduce<Map<string, number>>((accumulatedIndex, id, index) => {\n if (!accumulatedIndex.has(id)) {\n accumulatedIndex.set(id, index)\n }\n return accumulatedIndex\n }, new Map())\n\n const positionOf = (item: DocumentListPaneItem): number => {\n const matchedIndex = indexById.get(getPublishedId(item._id))\n return matchedIndex === undefined ? Number.MAX_SAFE_INTEGER : matchedIndex\n }\n\n return items\n .map((item, originalIndex) => ({item, originalIndex}))\n .sort((first, second) => {\n const positionDifference = positionOf(first.item) - positionOf(second.item)\n if (positionDifference !== 0) return positionDifference\n return first.originalIndex - second.originalIndex\n })\n .map((entry) => entry.item)\n}\n","import {defineEvent} from '@sanity/telemetry'\n\ninterface DocumentListLoadTimeData {\n /**\n * How long it took to load the document list end to end\n */\n durationMs: number\n /**\n * Length of the search string typed into the \"Search\"-field above the document list\n */\n searchStringLength: number\n /**\n * Represents the number of documents that was returned by the document list\n */\n returnedDocuments: number\n /**\n * Whether the document list was loaded from an in-memory cache\n */\n fromCache: boolean\n}\n\nexport const DocumentListLoadTimeMeasured = defineEvent<DocumentListLoadTimeData>({\n name: 'Document List Load Time Measured',\n version: 1,\n description: 'Time from document list search subscription to first result',\n maxSampleRate: 30_000,\n})\n","import {type ClientPerspective, type SanityClient} from '@sanity/client'\nimport {\n asyncScheduler,\n defer,\n filter,\n map,\n merge,\n mergeMap,\n type Observable,\n of,\n partition,\n share,\n throttleTime,\n throwError,\n timer,\n} from 'rxjs'\nimport {exhaustMapWithTrailing} from 'rxjs-exhaustmap-with-trailing'\nimport {scan} from 'rxjs/operators'\nimport {\n compileFieldPath,\n createSearch,\n createSWR,\n getSearchableTypes,\n type SanityDocumentLike,\n type Schema,\n type SearchOptions,\n type SearchSort,\n type SearchStrategy,\n} from 'sanity'\n\nimport {toStaticSortOrder} from './helpers'\nimport {type SortOrder} from './types'\n\ninterface ListenQueryOptions {\n client: SanityClient\n filter: string\n limit: number\n params: Record<string, unknown>\n schema: Schema\n searchQuery: string\n sort: SortOrder\n perspective?: ClientPerspective\n staticTypeNames?: string[] | null\n maxFieldDepth?: number\n searchStrategy?: SearchStrategy\n /**\n * Whether to rank results by relevance when a search term is present.\n * Defaults to `true`. See {@link resolveSearchOrdering}.\n */\n sortByRelevance?: boolean\n}\n\nexport type SearchQueryEvent =\n | {\n type: 'reconnect'\n }\n | {type: 'result'; documents: SanityDocumentLike[]}\n\nexport interface SearchQueryState {\n connected: boolean\n fromCache: boolean\n documents: SanityDocumentLike[]\n}\n\nconst swr = createSWR<{connected: boolean; documents: SanityDocumentLike[]}>({maxSize: 100})\n\n/**\n * Resolve the score/sort options for a list pane search request.\n *\n * When a search term is present, results are ranked by relevance so the most\n * relevant documents surface first (matching the behaviour of global search).\n * The configured/selected sort order is preserved as a tiebreaker. With an\n * empty query there are no scores to sort by, so the configured order is kept\n * untouched.\n *\n * The two search strategies express relevance differently:\n * - `groq2024` is driven by the presence of a `_score` sort entry, which\n * activates the server-side `score(boost(...))` pipeline.\n * - `groqLegacy` computes scores client-side and sorts by them unless\n * `skipSortByScore` is set.\n *\n * @internal\n */\nexport function resolveSearchOrdering(options: {\n searchQuery: string\n sortBy: SearchSort[]\n searchStrategy?: SearchStrategy\n /**\n * Whether to rank by relevance when a search term is present. Defaults to\n * `true`. Set to `false` when the editor has explicitly chosen one of the\n * configured orderings instead of relevance.\n */\n useRelevance?: boolean\n}): {skipSortByScore: boolean; sort: SearchSort[]} {\n const {searchQuery, sortBy, searchStrategy, useRelevance = true} = options\n const sortByRelevance = Boolean(searchQuery) && useRelevance\n\n if (!sortByRelevance) {\n return {skipSortByScore: true, sort: sortBy}\n }\n\n // `groqLegacy` cannot order by a projected `_score` field, so it relies on\n // client-side score sorting (`skipSortByScore: false`) with the configured\n // order kept as a tiebreaker. `groq2024` ranks by relevance by prepending a\n // `_score` sort entry.\n if (searchStrategy === 'groqLegacy') {\n return {skipSortByScore: false, sort: sortBy}\n }\n\n return {\n skipSortByScore: false,\n sort: [{field: '_score', direction: 'desc'}, ...sortBy],\n }\n}\n\nexport function listenSearchQuery(options: ListenQueryOptions): Observable<SearchQueryState> {\n const {\n client,\n schema,\n sort,\n perspective,\n limit,\n params,\n filter: groqFilter,\n searchQuery,\n staticTypeNames,\n sortByRelevance,\n maxFieldDepth,\n searchStrategy,\n } = options\n const sortBy = sort.by\n\n // Listen for changes with the given filter and params, and whenever a change occurs, we want to\n // re-fetch the documents that match the search query (see below).\n // We use a separate listener since the search query is too large to use in a listen query.\n const events$ = defer(() => {\n return client.listen(`*[${groqFilter}]`, params, {\n events: ['welcome', 'mutation', 'reconnect'],\n includeAllVersions: true,\n includeResult: false,\n visibility: 'query',\n tag: 'listen-search-query',\n })\n }).pipe(\n mergeMap((ev, i) => {\n const isFirst = i === 0\n // If we can't establish a connection to the /listen endpoint, the first event we receive will be 'reconnect'\n // So if we get \"reconnect\" as the first event actually means \"Connection can't be established\"\n if (isFirst && ev.type === 'reconnect') {\n // if it's neither welcome nor reconnect, something unexpected has happened.\n return throwError(() => new Error(`Failed to establish EventSource connection`))\n }\n // When a connection is successfully established, the first event will be 'welcome'\n if (isFirst && ev.type !== 'welcome') {\n // if it's neither welcome nor reconnect, something unexpected has happened.\n return throwError(() => new Error(`Received unexpected type of first event \"${ev.type}\"`))\n }\n return of(ev)\n }),\n share(),\n )\n\n const [welcome$, mutationAndReconnect$] = partition(events$, (ev) => ev.type === 'welcome')\n\n const swrKey = JSON.stringify({\n fiilter: groqFilter,\n limit,\n params,\n searchQuery,\n perspective,\n sort: toStaticSortOrder(sort),\n staticTypeNames,\n })\n\n return merge(\n welcome$,\n mutationAndReconnect$.pipe(throttleTime(1000, asyncScheduler, {leading: true, trailing: true})),\n ).pipe(\n exhaustMapWithTrailing((event): Observable<SearchQueryEvent> => {\n // Get the types names to use for searching.\n // If we have a static list of types, we can skip fetching the types and use the static list.\n const typeNames$ = staticTypeNames\n ? of(staticTypeNames)\n : client.observable.fetch(`array::unique(*[${groqFilter}][]._type)`, params)\n\n // Use the type names to create a search query and fetch the documents that match the query.\n return typeNames$.pipe(\n mergeMap((typeNames: string[]) => {\n const types = getSearchableTypes(schema, staticTypeNames || []).filter((type) => {\n if (typeNames.includes(type.name)) {\n // Validate every sort field against the schema in strict\n // mode. `compileFieldPath` throws an `Error` for unknown\n // fields, paths into non-object types, range slices,\n // multi-type array access, etc.\n for (const entry of sort.by) {\n if (!entry.field) {\n continue\n }\n compileFieldPath(type, entry.field, {strict: true})\n }\n return true\n }\n return false\n })\n\n const search = createSearch(types, client, {\n filter: groqFilter,\n params,\n strategy: searchStrategy,\n maxDepth: maxFieldDepth,\n })\n\n const doFetch = () => {\n const searchTerms = {\n query: searchQuery || '',\n types,\n }\n\n const {skipSortByScore, sort} = resolveSearchOrdering({\n searchQuery: searchQuery || '',\n sortBy,\n searchStrategy,\n useRelevance: sortByRelevance,\n })\n\n const searchOptions: SearchOptions = {\n comments: [`findability-source: ${searchQuery ? 'list-query' : 'list'}`],\n limit,\n skipSortByScore,\n sort,\n perspective,\n }\n\n return search(searchTerms, searchOptions).pipe(\n map((result) => result.hits.map(({hit}) => hit)),\n map((hits) => ({type: 'result' as const, documents: hits})),\n )\n }\n\n if (event.type === 'mutation' && event.visibility !== 'query') {\n // Even though the listener request specifies visibility=query, the events are not guaranteed to be delivered with visibility=query\n // If the event we are responding to arrives with visibility != query, we add a little delay to allow for the updated document to be available for queries\n // See https://www.sanity.io/docs/listening#visibility-c4786e55c3ff\n return timer(1200).pipe(mergeMap(doFetch))\n }\n if (event.type === 'reconnect') {\n return of(event)\n }\n return doFetch()\n }),\n )\n }),\n scan(\n (\n acc: null | {connected: boolean; documents: SanityDocumentLike[]},\n event: SearchQueryEvent,\n ) => ({\n connected: event.type !== 'reconnect',\n documents: event.type === 'result' ? event.documents : acc?.documents || [],\n }),\n null as null | {connected: boolean; documents: SanityDocumentLike[]},\n ),\n filter((v) => v !== null),\n swr(swrKey),\n map(({fromCache, value}): SearchQueryState => ({fromCache, ...value})),\n )\n}\n","import {\n ChannelError,\n ClientError,\n type ClientPerspective,\n type SanityClient,\n ServerError,\n} from '@sanity/client'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {observableCallback} from 'observable-callback'\nimport {useMemo, useState} from 'react'\nimport {useObservable} from 'react-rx'\nimport {concat, fromEvent, merge, NEVER, of, timer} from 'rxjs'\nimport {\n filter,\n map,\n mergeMap,\n scan,\n share,\n shareReplay,\n switchMap,\n take,\n takeUntil,\n withLatestFrom,\n} from 'rxjs/operators'\nimport {\n catchWithCount,\n measureFirstMatch,\n useSchema,\n useSearchMaxFieldDepth,\n useWorkspace,\n} from 'sanity'\n\nimport {DocumentListLoadTimeMeasured} from './__telemetry__/documentListSearch.telemetry'\nimport {DEFAULT_ORDERING, FULL_LIST_LIMIT, PARTIAL_PAGE_LIMIT} from './constants'\nimport {findStaticTypesInFilter, removePublishedWithDrafts} from './helpers'\nimport {listenSearchQuery} from './listenSearchQuery'\nimport {type DocumentListPaneItem, type SortOrder} from './types'\n\ninterface UseDocumentListOpts {\n client: SanityClient\n filter: string\n perspective?: ClientPerspective\n params: Record<string, unknown>\n searchQuery: string | null\n sortOrder?: SortOrder\n /**\n * Whether to rank results by relevance when a search term is present.\n * Defaults to `true`.\n */\n searchSortByRelevance?: boolean\n}\n\ninterface DocumentListState {\n error: {message: string} | null\n isLoadingFullList: boolean\n isLoading: boolean\n connected?: boolean\n isRetrying: boolean\n autoRetry: boolean\n canRetry: boolean\n retryCount: number\n fromCache?: boolean\n items: DocumentListPaneItem[]\n}\n\nconst INITIAL_QUERY_STATE: DocumentListState = {\n error: null,\n isRetrying: false,\n retryCount: 0,\n autoRetry: false,\n canRetry: false,\n isLoading: true,\n isLoadingFullList: false,\n fromCache: false,\n items: [],\n}\n\ninterface UseDocumentListHookValue extends DocumentListState {\n onRetry: () => void\n onLoadFullList: () => void\n}\n\n/**\n * Determine whether an error should be possible to retry\n * @param error - Any caught error\n */\nfunction isRetriableError(error: unknown) {\n if (error instanceof ChannelError) {\n // Usually indicative of a bad or malformed request\n return false\n }\n if (error instanceof ServerError) {\n // >= 500\n return true\n }\n if (error instanceof ClientError) {\n // >= 400\n // note: 403 Forbidden makes sense to retry, because it's a potentially passing condition\n return error.statusCode === 403\n }\n return true\n}\n\n/**\n * @internal\n */\nexport function useDocumentList(opts: UseDocumentListOpts): UseDocumentListHookValue {\n const {\n client,\n filter: searchFilter,\n params: paramsProp,\n sortOrder,\n searchQuery,\n perspective,\n searchSortByRelevance = true,\n } = opts\n const {strategy: searchStrategy} = useWorkspace().search\n const schema = useSchema()\n const maxFieldDepth = useSearchMaxFieldDepth()\n const telemetry = useTelemetry()\n\n // Get the type name from the filter, if it is a simple type filter.\n const typeNameFromFilter = useMemo(\n () => findStaticTypesInFilter(searchFilter, paramsProp),\n [searchFilter, paramsProp],\n )\n\n const [[onRetry$, onRetry]] = useState(() => observableCallback())\n const [[onFetchFullList$, onLoadFullList]] = useState(() => observableCallback())\n\n const queryResults$ = useMemo(() => {\n const listenSearchQueryArgs = {\n client,\n filter: searchFilter,\n limit: PARTIAL_PAGE_LIMIT,\n params: paramsProp,\n schema,\n perspective,\n searchQuery: searchQuery || '',\n sort: sortOrder || DEFAULT_ORDERING,\n staticTypeNames: typeNameFromFilter,\n maxFieldDepth,\n searchStrategy,\n sortByRelevance: searchSortByRelevance,\n }\n\n const partialList$ = listenSearchQuery(listenSearchQueryArgs).pipe(\n measureFirstMatch(\n (event) => event.connected,\n (durationMs, data) => {\n telemetry.log(DocumentListLoadTimeMeasured, {\n durationMs: durationMs,\n searchStringLength: (searchQuery || '').length,\n returnedDocuments: data.documents.length,\n fromCache: data.fromCache,\n })\n },\n ),\n shareReplay({refCount: true, bufferSize: 1}),\n )\n\n // we want to fetch the full list if the last result of the partial list is at the limit\n const fullList$ = onFetchFullList$.pipe(\n withLatestFrom(partialList$),\n filter(([, result]) => result?.documents.length === PARTIAL_PAGE_LIMIT),\n // we want to set up the full list listener only once\n take(1),\n mergeMap(() =>\n concat(\n of({type: 'loadFullList' as const}),\n listenSearchQuery({...listenSearchQueryArgs, limit: FULL_LIST_LIMIT}).pipe(\n map((result) => ({type: 'result' as const, result})),\n ),\n ),\n ),\n share(),\n )\n\n // The combined search results from both partial page and full list\n return merge(\n partialList$.pipe(\n map((result) => ({\n type: 'result' as const,\n result,\n })),\n // when the full list listener kicks off, we want to stop the partial list listener\n takeUntil(fullList$),\n ),\n fullList$,\n ).pipe(\n catchWithCount((lastError, retryCount, caught$) => {\n const error = safeError(lastError)\n const isOnline = window.navigator.onLine\n const canRetry = isOnline && isRetriableError(lastError)\n const autoRetry = retryCount < 10\n const retries = merge(\n isOnline ? onRetry$ : fromEvent(window, 'online'),\n isOnline && autoRetry ? timer(retryCount * 1_000) : NEVER,\n ).pipe(\n take(1),\n switchMap(() =>\n merge(\n of({\n type: 'error' as const,\n error,\n retrying: true,\n autoRetry,\n canRetry,\n retryCount,\n }),\n caught$,\n ),\n ),\n )\n return concat(\n of({\n type: 'error' as const,\n error,\n retrying: false,\n autoRetry,\n canRetry,\n retryCount,\n }),\n retries,\n )\n }),\n scan((prev, event) => {\n if (event.type === 'error') {\n return {\n ...prev,\n error: event.error,\n retryCount: event.retryCount,\n isRetrying: event.retrying,\n autoRetry: event.autoRetry,\n canRetry: event.canRetry,\n }\n }\n if (event.type === 'result') {\n return {\n ...prev,\n error: null,\n isRetrying: false,\n fromCache: event.result.fromCache,\n connected: event.result.connected,\n isLoading: false,\n items: removePublishedWithDrafts(event.result.documents),\n isLoadingFullList: false,\n }\n }\n if (event.type === 'loadFullList') {\n return {\n ...prev,\n error: null,\n isLoadingFullList: true,\n }\n }\n // @ts-expect-error - all cases should be covered\n throw new Error(`Unexpected event type: ${event.type}`)\n }, INITIAL_QUERY_STATE),\n )\n }, [\n client,\n searchFilter,\n paramsProp,\n schema,\n perspective,\n searchQuery,\n sortOrder,\n searchSortByRelevance,\n typeNameFromFilter,\n maxFieldDepth,\n searchStrategy,\n onFetchFullList$,\n onRetry$,\n telemetry,\n ])\n\n const {\n error,\n items,\n isLoading,\n fromCache,\n connected,\n canRetry,\n isLoadingFullList,\n isRetrying,\n autoRetry,\n retryCount,\n } = useObservable(queryResults$, INITIAL_QUERY_STATE)\n\n return {\n error,\n onRetry,\n isLoading,\n items,\n isRetrying,\n canRetry,\n retryCount,\n autoRetry,\n connected,\n fromCache,\n onLoadFullList,\n isLoadingFullList,\n }\n}\n\n// todo: candidate for re-use\nconst nonErrorThrownWarning = `[WARNING: This was thrown as a non-error. Only Error instances should be thrown]`\nfunction safeError(thrown: unknown): Error {\n if (thrown instanceof Error) {\n return thrown\n }\n if (typeof thrown === 'object' && thrown !== null) {\n if ('message' in thrown && typeof thrown.message === 'string') {\n return new Error(`${thrown.message} ${nonErrorThrownWarning}`)\n }\n return new Error(`${String(thrown)} ${nonErrorThrownWarning}`)\n }\n return new Error(`${String(thrown)} ${nonErrorThrownWarning}`)\n}\n","import {SearchIcon} from '@sanity/icons/Search'\nimport {SpinnerIcon} from '@sanity/icons/Spinner'\nimport {Box, Stack, TextInput} from '@sanity/ui'\nimport {memo, useCallback, useEffect, useMemo, useState} from 'react'\nimport {useObservableEvent} from 'react-rx'\nimport {debounce, map, type Observable, of, tap, timer} from 'rxjs'\nimport {\n DEFAULT_STUDIO_CLIENT_OPTIONS,\n EMPTY_ARRAY,\n type GeneralPreviewLayoutKey,\n useActiveReleases,\n useClient,\n useI18nText,\n usePerspective,\n useReconnectingToast,\n useSchema,\n useTranslation,\n useUnique,\n} from 'sanity'\nimport {keyframes, styled} from 'styled-components'\n\nimport {structureLocaleNamespace} from '../../i18n'\nimport {type BaseStructureToolPaneProps} from '../types'\nimport {DEFAULT_ORDERING, EMPTY_RECORD, FULL_LIST_LIMIT} from './constants'\nimport {DocumentListPaneContent} from './DocumentListPaneContent'\nimport {\n DocumentListPaneSearchOrdering,\n getSearchOrderingId,\n isSortOrderingMenuItem,\n RELEVANCE_ORDERING_ID,\n} from './DocumentListPaneSearchOrdering'\nimport {applyOrderingFunctions, findStaticTypesInFilter} from './helpers'\nimport {isOrderByIdsParam, reorderItemsByIdsParam} from './orderByIdsParam'\nimport {useShallowUnique} from './PaneContainer'\nimport {type LoadingVariant, type SortOrder} from './types'\nimport {useDocumentList} from './useDocumentList'\n\n/**\n * @internal\n */\nexport type DocumentListPaneProps = BaseStructureToolPaneProps<'documentList'> & {\n sortOrder?: SortOrder\n layout?: GeneralPreviewLayoutKey\n}\n\nconst rotate = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n`\n\nconst fadeIn = keyframes`\n 0% {\n opacity: 0;\n }\n 50% {\n opacity: 0.1;\n }\n 100% {\n opacity: 0.4;\n }\n`\n\nconst AnimatedSpinnerIcon = styled(SpinnerIcon)`\n animation: ${rotate} 500ms linear infinite;\n`\n\nconst SubtleSpinnerIcon = styled(SpinnerIcon)`\n animation: ${rotate} 1500ms linear infinite;\n opacity: 0.4;\n`\n\nconst DelayedSubtleSpinnerIcon = styled(SpinnerIcon)`\n animation:\n ${rotate} 1500ms linear infinite,\n ${fadeIn} 1000ms linear;\n opacity: 0.4;\n`\n\n/**\n * @internal\n */\n\nexport const DocumentListPane = memo(function DocumentListPane(props: DocumentListPaneProps) {\n const {childItemId, isActive, pane, paneKey, sortOrder: sortOrderRaw, layout} = props\n const schema = useSchema()\n const releases = useActiveReleases()\n const {perspectiveStack} = usePerspective()\n const {displayOptions, options} = pane\n const {apiVersion, filter} = options\n const params = useShallowUnique(options.params || EMPTY_RECORD)\n const typeName = useMemo(() => {\n const staticTypes = findStaticTypesInFilter(filter, params)\n if (staticTypes?.length === 1) return staticTypes[0]\n return null\n }, [filter, params])\n\n const showIcons = displayOptions?.showIcons !== false\n\n const {t} = useTranslation(structureLocaleNamespace)\n const {title} = useI18nText(pane)\n\n const [searchQuery, setSearchQuery] = useState<string>('')\n const [searchInputValue, setSearchInputValue] = useState<string>('')\n const [searchInputElement, setSearchInputElement] = useState<HTMLInputElement | null>(null)\n // The ordering applied while a search term is present. Defaults to relevance\n // ranking, and resets back to relevance whenever the search is cleared.\n const [searchOrderingId, setSearchOrderingId] = useState<string>(RELEVANCE_ORDERING_ID)\n\n // The query the list actually searches on. Whitespace-only input is treated as\n // empty, so the search-scoped UI must key off the trimmed value too.\n const trimmedSearchQuery = searchQuery.trim()\n\n const orderByIdsParam = isOrderByIdsParam(sortOrderRaw)\n\n const sortWithOrderingFn =\n typeName && sortOrderRaw\n ? applyOrderingFunctions(sortOrderRaw, schema.get(typeName) as any)\n : sortOrderRaw\n\n const sortOrder = useUnique(sortWithOrderingFn)\n\n // The sentinel ordering has no server-side meaning, so the fetch falls back to\n // the default ordering and the items are reordered client-side afterwards.\n const fetchSortOrder = orderByIdsParam ? DEFAULT_ORDERING : sortOrder\n\n // The list's configured orderings, surfaced as choices in the search sort\n // control (relevance plus these). The sentinel ordering is excluded; it isn't\n // a real sort choice the editor can apply while searching.\n const searchOrderings = useMemo(\n () =>\n (pane.menuItems || []).filter(\n (item) => isSortOrderingMenuItem(item) && !isOrderByIdsParam({by: item.params!.by}),\n ),\n [pane.menuItems],\n )\n\n // While searching, relevance ranking is the default. If the editor picks one\n // of the configured orderings instead, apply that order and disable scoring.\n const useRelevance = searchOrderingId === RELEVANCE_ORDERING_ID\n const selectedSearchOrdering = useRelevance\n ? undefined\n : searchOrderings.find((ordering) => getSearchOrderingId(ordering) === searchOrderingId)\n const searchSchemaType = typeName ? schema.get(typeName) : undefined\n const effectiveSortOrder = useUnique(\n selectedSearchOrdering?.params?.by\n ? // Run the chosen ordering through `applyOrderingFunctions` so it picks up\n // the same field mappers (e.g. `lower`, `dateTime`) the header sort menu\n // uses — otherwise the same ordering would sort differently here.\n // `applyOrderingFunctions` requires a concrete schema type, so only apply\n // it when the type is statically resolvable; otherwise fall back to the\n // raw ordering rather than passing `undefined`.\n searchSchemaType\n ? applyOrderingFunctions({by: selectedSearchOrdering.params.by}, searchSchemaType as any)\n : {by: selectedSearchOrdering.params.by}\n : fetchSortOrder,\n )\n\n const client = useClient({\n ...DEFAULT_STUDIO_CLIENT_OPTIONS,\n apiVersion: apiVersion || DEFAULT_STUDIO_CLIENT_OPTIONS.apiVersion,\n })\n\n const {\n error,\n isLoadingFullList,\n isLoading: documentListIsLoading,\n items,\n fromCache,\n isRetrying,\n autoRetry,\n canRetry,\n retryCount,\n connected,\n onLoadFullList,\n onRetry,\n } = useDocumentList({\n client,\n filter,\n perspective: perspectiveStack,\n params,\n searchQuery: trimmedSearchQuery,\n sortOrder: effectiveSortOrder,\n searchSortByRelevance: useRelevance,\n })\n\n const orderedItems = useMemo(() => {\n if (!orderByIdsParam || trimmedSearchQuery) return items\n const idsParam = Array.isArray(params.ids) ? (params.ids as string[]) : EMPTY_ARRAY\n return reorderItemsByIdsParam(items, idsParam)\n }, [orderByIdsParam, trimmedSearchQuery, items, params.ids])\n\n const isLoading = documentListIsLoading || releases.loading\n\n const handleQueryChange = useObservableEvent(\n (event$: Observable<React.ChangeEvent<HTMLInputElement>>) => {\n return event$.pipe(\n map((event) => event.target.value),\n tap(setSearchInputValue),\n debounce((value) => (value === '' ? of('') : timer(300))),\n tap(setSearchQuery),\n )\n },\n )\n\n const handleClearSearch = useCallback(() => {\n setSearchQuery('')\n setSearchInputValue('')\n }, [])\n\n const handleSearchKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Escape') {\n handleClearSearch()\n }\n },\n [handleClearSearch],\n )\n\n const [enableSearchSpinner, setEnableSearchSpinner] = useState<string | void>()\n\n useEffect(() => {\n if (!enableSearchSpinner && !isLoading) {\n // oxlint-disable-next-line react/react-compiler\n setEnableSearchSpinner(paneKey)\n }\n }, [enableSearchSpinner, isLoading, paneKey])\n\n useEffect(() => {\n // Clear search field and disable search spinner\n // when switching between panes (i.e. when paneKey changes).\n // oxlint-disable-next-line react/react-compiler\n handleClearSearch()\n setEnableSearchSpinner()\n }, [paneKey, handleClearSearch])\n\n useEffect(() => {\n // Relevance ranking is search-scoped: whenever the term is cleared (via the\n // clear button, Escape, emptying the field, or switching panes), reset the\n // applied ordering back to relevance.\n if (!trimmedSearchQuery) {\n // TODO: Refactor search ordering reset to avoid effect state updates.\n // oxlint-disable-next-line react/react-compiler\n setSearchOrderingId(RELEVANCE_ORDERING_ID)\n }\n }, [trimmedSearchQuery])\n\n const loadingVariant: LoadingVariant = useMemo(() => {\n if (connected && isLoading && enableSearchSpinner === paneKey) {\n return 'spinner'\n }\n if (connected && fromCache) {\n return 'subtle'\n }\n\n return 'initial'\n }, [connected, enableSearchSpinner, fromCache, isLoading, paneKey])\n\n const textInputIcon = useMemo(() => {\n if (loadingVariant === 'spinner') {\n return AnimatedSpinnerIcon\n }\n if (searchInputValue && loadingVariant === 'subtle') {\n return SubtleSpinnerIcon\n }\n return SearchIcon\n }, [loadingVariant, searchInputValue])\n\n useReconnectingToast(!connected)\n\n return (\n <>\n <Box paddingX={3} paddingBottom={3}>\n <Stack space={3}>\n <TextInput\n aria-label={t('panes.document-list-pane.search-input.aria-label')}\n autoComplete=\"off\"\n border={false}\n clearButton={Boolean(searchQuery)}\n fontSize={[2, 2, 1]}\n icon={textInputIcon}\n iconRight={\n !connected || (loadingVariant === 'subtle' && !searchInputValue)\n ? DelayedSubtleSpinnerIcon\n : null\n }\n onChange={handleQueryChange}\n onClear={handleClearSearch}\n onKeyDown={handleSearchKeyDown}\n padding={2}\n placeholder={t('panes.document-list-pane.search-input.placeholder')}\n radius={2}\n ref={setSearchInputElement}\n spellCheck={false}\n value={searchInputValue}\n />\n {trimmedSearchQuery && (\n <DocumentListPaneSearchOrdering\n orderings={searchOrderings}\n value={searchOrderingId}\n onChange={setSearchOrderingId}\n />\n )}\n </Stack>\n </Box>\n <DocumentListPaneContent\n key={paneKey}\n childItemId={childItemId}\n error={error}\n filterIsSimpleTypeConstraint={!!typeName}\n hasMaxItems={items.length === FULL_LIST_LIMIT}\n hasSearchQuery={Boolean(searchQuery)}\n isActive={isActive}\n isLazyLoading={isLoadingFullList}\n isLoading={isLoading}\n autoRetry={autoRetry}\n canRetry={canRetry}\n retryCount={retryCount}\n isRetrying={isRetrying}\n isConnected={connected}\n items={orderedItems}\n layout={layout}\n muted={loadingVariant === 'subtle'}\n loadingVariant={loadingVariant}\n onEndReached={onLoadFullList}\n onRetry={onRetry}\n paneTitle={title}\n searchInputElement={searchInputElement}\n showIcons={showIcons}\n sortOrder={orderByIdsParam ? DEFAULT_ORDERING : sortOrder}\n />\n </>\n )\n})\n","import {ArrowLeftIcon} from '@sanity/icons/ArrowLeft'\nimport {memo, type ReactNode, useMemo} from 'react'\nimport {type GeneralPreviewLayoutKey, type InitialValueTemplateItem} from 'sanity'\n\nimport {Button} from '../../../ui-components/button/Button'\nimport {TooltipDelayGroupProvider} from '../../../ui-components/tooltipDelayGroupProvider/TooltipDelayGroupProvider'\nimport {PaneHeader as StructurePaneHeader} from '../../components/pane/PaneHeader'\nimport {usePane} from '../../components/pane/usePane'\nimport {PaneHeaderActions} from '../../components/paneHeaderActions/PaneHeaderActions'\nimport {BackLink} from '../../components/paneRouter/BackLink'\nimport {\n type PaneMenuItem,\n type PaneMenuItemGroup,\n type StructureToolPaneActionHandler,\n} from '../../types'\nimport {useStructureTool} from '../../useStructureTool'\nimport {type SortOrder} from './types'\n\ninterface PaneHeaderProps {\n contentAfter?: ReactNode\n customMenuItemState?: Record<string, unknown>\n index: number\n initialValueTemplates?: InitialValueTemplateItem[]\n menuItemGroups?: PaneMenuItemGroup[]\n menuItems?: PaneMenuItem[]\n setLayout: (layout: GeneralPreviewLayoutKey) => void\n setSortOrder: (sortOrder: SortOrder) => void\n setCustomMenuItemState: (state: Record<string, unknown>) => void\n restoreDefaultLayout: () => void\n restoreDefaultSortOrder: () => void\n title: string\n}\n\nexport const PaneHeader = memo(\n ({\n contentAfter,\n customMenuItemState = {},\n index,\n initialValueTemplates = [],\n menuItemGroups = [],\n menuItems = [],\n setLayout,\n setSortOrder,\n setCustomMenuItemState,\n restoreDefaultLayout,\n restoreDefaultSortOrder,\n title,\n }: PaneHeaderProps) => {\n const {features} = useStructureTool()\n const {collapsed, isLast} = usePane()\n // Prevent focus if this is the last (non-collapsed) pane.\n const tabIndex = isLast && !collapsed ? -1 : 0\n\n const actionHandlers = useMemo((): Record<string, StructureToolPaneActionHandler> => {\n return {\n setLayout: ({layout: value}: {layout: GeneralPreviewLayoutKey}) => {\n setLayout(value)\n },\n setSortOrder: (sort: SortOrder) => {\n setSortOrder(sort)\n },\n restoreDefaultLayout,\n restoreDefaultSortOrder,\n setMenuItemState: (params: {_menuItemId: string; value?: unknown}) => {\n const id = params._menuItemId\n const value = params.value ?? true\n const currentValue = customMenuItemState[id]\n // Toggle behavior: if clicking the same value, remove it (deselect)\n if (currentValue === value) {\n // Remove the key from state\n const newState = Object.fromEntries(\n Object.entries(customMenuItemState).filter(([key]) => key !== id),\n )\n setCustomMenuItemState(newState)\n } else {\n setCustomMenuItemState({...customMenuItemState, [id]: value})\n }\n },\n }\n }, [\n customMenuItemState,\n setLayout,\n setSortOrder,\n setCustomMenuItemState,\n restoreDefaultLayout,\n restoreDefaultSortOrder,\n ])\n\n return (\n <TooltipDelayGroupProvider>\n <StructurePaneHeader\n actions={\n <PaneHeaderActions\n initialValueTemplateItems={initialValueTemplates}\n actionHandlers={actionHandlers}\n menuItemGroups={menuItemGroups}\n menuItems={menuItems}\n />\n }\n backButton={\n features.backButton &&\n index > 0 && (\n <Button\n as={BackLink}\n data-as=\"a\"\n icon={ArrowLeftIcon}\n mode=\"bleed\"\n tooltipProps={{content: 'Back'}}\n />\n )\n }\n contentAfter={contentAfter}\n tabIndex={tabIndex}\n title={title}\n />\n </TooltipDelayGroupProvider>\n )\n },\n)\n\nPaneHeader.displayName = 'Memo(PaneHeader)'\n","import {Card, Code} from '@sanity/ui'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {memo, useCallback, useMemo, useState} from 'react'\nimport {\n EMPTY_ARRAY,\n type GeneralDocumentListLayoutKey,\n type ObjectSchemaType,\n SourceProvider,\n useI18nText,\n useSchema,\n useSource,\n useTranslation,\n} from 'sanity'\nimport shallowEquals from 'shallow-equals'\n\nimport {Pane} from '../../components/pane/Pane'\nimport {_DEBUG} from '../../constants'\nimport {structureLocaleNamespace} from '../../i18n'\nimport {assignId} from '../../structureResolvers/assignId'\nimport {type PaneMenuItem} from '../../types'\nimport {useStructureToolSetting} from '../../useStructureToolSetting'\nimport {type BaseStructureToolPaneProps} from '../types'\nimport {DEFAULT_ORDERING, EMPTY_RECORD} from './constants'\nimport {DocumentListPane} from './DocumentListPane'\nimport {\n findStaticTypesInFilter,\n fromStaticSortOrder,\n toStaticSortOrder,\n validateSortOrder,\n} from './helpers'\nimport {PaneHeader} from './PaneHeader'\nimport {type SortOrder, type StaticSortOrder} from './types'\n\n/**\n * Type for custom menu item state storage.\n * Maps menu item IDs to their current state values.\n */\ntype CustomMenuItemState = Record<string, unknown>\n\n/**\n * Adds auto-generated IDs to menu items that don't have one.\n */\nconst addIdsToMenuItems = (menuItems?: PaneMenuItem[]): PaneMenuItem[] | undefined => {\n return menuItems?.map((item) => {\n if (item.id) return item\n return {...item, id: assignId(item)}\n })\n}\n\n/**\n * @internal exported for testing\n */\nexport const addSelectedStateToMenuItems = (options: {\n menuItems?: PaneMenuItem[]\n sortOrderRaw?: SortOrder\n layout?: GeneralDocumentListLayoutKey\n customMenuItemState?: CustomMenuItemState\n schemaType?: ObjectSchemaType\n disabledSortReason?: string\n}) => {\n const {\n menuItems,\n sortOrderRaw,\n layout,\n customMenuItemState = {},\n schemaType,\n disabledSortReason,\n } = options\n\n return menuItems?.map((item) => {\n if (item.params?.layout) {\n return {\n ...item,\n selected: layout === item.params?.layout,\n }\n }\n\n if (item?.params?.by) {\n const itemSortOrder: SortOrder = {by: item.params.by}\n\n const isInvalidSortOrder =\n validateSortOrder(itemSortOrder, schemaType, DEFAULT_ORDERING) !== itemSortOrder\n\n const staticSortBy = toStaticSortOrder({by: sortOrderRaw?.by ?? EMPTY_ARRAY}).by\n const itemSortBy = toStaticSortOrder({by: item?.params?.by ?? EMPTY_ARRAY}).by\n\n return {\n ...item,\n selected: isEqual(staticSortBy, itemSortBy),\n ...(isInvalidSortOrder && {\n disabled: {reason: disabledSortReason},\n }),\n }\n }\n\n // Check custom menu item state by id\n if (item.id && item.id in customMenuItemState) {\n const storedValue = customMenuItemState[item.id]\n const itemValue = item.params?.value ?? true\n return {\n ...item,\n selected: isEqual(storedValue, itemValue),\n }\n }\n\n // Preserve any existing selected state, default to false\n return {...item, selected: item.selected ?? false}\n })\n}\n\n/**\n * Appends restore-default items to the Sort and Layout groups. Injected at\n * render time so panes with custom `menuItems` still receive them.\n *\n * @internal exported for testing\n */\nexport const appendRestoreDefaultItems = (options: {\n menuItems?: PaneMenuItem[]\n isSortDefault: boolean\n isLayoutDefault: boolean\n restoreSortDisabledReason: string\n restoreLayoutDisabledReason: string\n suppressRestoreDefaults?: boolean\n}): PaneMenuItem[] => {\n const {\n menuItems = [],\n isSortDefault,\n isLayoutDefault,\n restoreSortDisabledReason,\n restoreLayoutDisabledReason,\n suppressRestoreDefaults,\n } = options\n\n if (suppressRestoreDefaults) return menuItems\n\n // Only attach a restore item to a group that already has items, so a pane\n // that removed them (e.g. `menuItems([])`) does not get them back.\n const hasSortItems = menuItems.some(\n (item) => item.group === 'sorting' || item.action === 'setSortOrder',\n )\n const hasLayoutItems = menuItems.some(\n (item) => item.group === 'layout' || item.action === 'setLayout',\n )\n\n const restoreDefaultSortOrderItem: PaneMenuItem = {\n group: 'sorting',\n action: 'restoreDefaultSortOrder',\n i18n: {title: {key: 'menu-items.sort-by.restore-default', ns: structureLocaleNamespace}},\n title: 'Default sort',\n params: {hideSelectionIndicator: true},\n ...(isSortDefault && {disabled: {reason: restoreSortDisabledReason}}),\n }\n\n const restoreDefaultLayoutItem: PaneMenuItem = {\n group: 'layout',\n action: 'restoreDefaultLayout',\n i18n: {title: {key: 'menu-items.layout.restore-default', ns: structureLocaleNamespace}},\n title: 'Default view',\n params: {hideSelectionIndicator: true},\n ...(isLayoutDefault && {disabled: {reason: restoreLayoutDisabledReason}}),\n }\n\n return [\n ...menuItems,\n ...(hasSortItems ? [restoreDefaultSortOrderItem] : []),\n ...(hasLayoutItems ? [restoreDefaultLayoutItem] : []),\n ]\n}\n\nexport function useShallowUnique<ValueType>(value: ValueType): ValueType {\n const [previous, setPrevious] = useState<ValueType>(value)\n if (!shallowEquals(previous, value)) {\n setPrevious(value)\n return value\n }\n return previous\n}\n\n/**\n * @internal\n */\nexport const PaneContainer = memo(function PaneContainer(\n props: BaseStructureToolPaneProps<'documentList'>,\n) {\n const {index, isSelected, pane, paneKey} = props\n const {name: parentSourceName} = useSource()\n\n const {\n defaultLayout = 'default',\n initialValueTemplates = EMPTY_ARRAY,\n menuItemGroups,\n menuItems,\n options,\n suppressRestoreDefaultMenuItems,\n } = pane\n const {defaultOrdering = EMPTY_ARRAY, filter} = options\n const params = useShallowUnique(options.params || EMPTY_RECORD)\n const sourceName = pane.source\n const typeName = useMemo(() => {\n const staticTypes = findStaticTypesInFilter(filter, params)\n if (staticTypes?.length === 1) return staticTypes[0]\n return null\n }, [filter, params])\n\n const [layout, setLayout] = useStructureToolSetting<GeneralDocumentListLayoutKey>(\n 'layout',\n typeName ?? pane.id, //pane.id for anything that is not documentTypeList\n defaultLayout,\n )\n\n const {title} = useI18nText(pane)\n\n // Ensure that we use the defaultOrdering value from structure builder if any as the default\n const defaultSortOrder = useMemo(() => {\n return defaultOrdering?.length > 0 ? {by: defaultOrdering} : DEFAULT_ORDERING\n }, [defaultOrdering])\n\n const [storedSortOrderRaw, setStoredSortOrder] = useStructureToolSetting<StaticSortOrder>(\n 'sort-order',\n typeName ?? pane.id, //pane.id for anything that is not documentTypeList\n defaultSortOrder,\n )\n\n const schema = useSchema()\n const schemaType = useMemo(\n () => (typeName ? (schema.get(typeName) as ObjectSchemaType | undefined) : undefined),\n [typeName, schema],\n )\n const {t} = useTranslation(structureLocaleNamespace)\n\n // Rehydrate the live `schemaType` onto each persisted entry. The\n // pane already knows the type via `typeName`, so no discriminator\n // is needed in storage.\n const sortOrderRaw = useMemo<SortOrder | undefined>(\n () => fromStaticSortOrder(storedSortOrderRaw, schemaType),\n [storedSortOrderRaw, schemaType],\n )\n\n const validatedSortOrder = useMemo(() => {\n if (!sortOrderRaw) return sortOrderRaw\n return validateSortOrder(sortOrderRaw, schemaType, defaultSortOrder)\n }, [sortOrderRaw, schemaType, defaultSortOrder])\n\n const handleSetSortOrder = useCallback(\n async (newSortOrder: SortOrder) => {\n const validated = validateSortOrder(newSortOrder, schemaType, defaultSortOrder)\n await setStoredSortOrder(toStaticSortOrder(validated))\n },\n [setStoredSortOrder, schemaType, defaultSortOrder],\n )\n\n // Clear the stored preference instead of writing the default: the key is\n // shared per type, so writing would leak this list's default onto its siblings.\n const handleRestoreDefaultSortOrder = useCallback(async () => {\n await setStoredSortOrder(null)\n }, [setStoredSortOrder])\n\n const handleRestoreDefaultLayout = useCallback(async () => {\n await setLayout(null)\n }, [setLayout])\n\n const [customMenuItemState, setCustomMenuItemState] = useState<CustomMenuItemState>({})\n\n const menuItemsWithIds = useMemo(() => addIdsToMenuItems(menuItems), [menuItems])\n\n const disabledSortReason = t('panes.document-list-pane.sort-order.disabled-reason')\n\n const menuItemsWithSelectedState = useMemo(\n () =>\n addSelectedStateToMenuItems({\n menuItems: menuItemsWithIds,\n sortOrderRaw: validatedSortOrder,\n layout,\n customMenuItemState,\n schemaType,\n disabledSortReason,\n }),\n [\n customMenuItemState,\n disabledSortReason,\n layout,\n menuItemsWithIds,\n schemaType,\n validatedSortOrder,\n ],\n )\n\n const isLayoutDefault = layout === defaultLayout\n // Compare the stored static order, not the hydrated validatedSortOrder.\n const isSortDefault = useMemo(\n () => isEqual(storedSortOrderRaw?.by ?? [], toStaticSortOrder(defaultSortOrder).by),\n [storedSortOrderRaw, defaultSortOrder],\n )\n\n const menuItemsWithRestoreDefaults = useMemo(\n () =>\n appendRestoreDefaultItems({\n menuItems: menuItemsWithSelectedState,\n isSortDefault,\n isLayoutDefault,\n restoreSortDisabledReason: t('menu-items.sort-by.restore-default.disabled-reason'),\n restoreLayoutDisabledReason: t('menu-items.layout.restore-default.disabled-reason'),\n suppressRestoreDefaults: suppressRestoreDefaultMenuItems,\n }),\n [\n menuItemsWithSelectedState,\n isSortDefault,\n isLayoutDefault,\n t,\n suppressRestoreDefaultMenuItems,\n ],\n )\n\n return (\n <SourceProvider name={sourceName || parentSourceName}>\n <Pane\n data-ui=\"DocumentListPane\"\n id={paneKey}\n minWidth={320}\n currentMaxWidth={350}\n maxWidth={640}\n selected={isSelected}\n >\n {_DEBUG && (\n <Card padding={4} tone=\"transparent\">\n <Code>{pane.source || '(none)'}</Code>\n </Card>\n )}\n\n <PaneHeader\n customMenuItemState={customMenuItemState}\n index={index}\n initialValueTemplates={initialValueTemplates}\n menuItemGroups={menuItemGroups}\n menuItems={menuItemsWithRestoreDefaults}\n setLayout={setLayout}\n setSortOrder={handleSetSortOrder}\n setCustomMenuItemState={setCustomMenuItemState}\n restoreDefaultLayout={handleRestoreDefaultLayout}\n restoreDefaultSortOrder={handleRestoreDefaultSortOrder}\n title={title}\n />\n <DocumentListPane {...props} sortOrder={validatedSortOrder} layout={layout} />\n </Pane>\n </SourceProvider>\n )\n})\nPaneContainer.displayName = 'Memo(PaneContainer)'\n"],"mappings":"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"}
|