sanity 6.3.0 → 6.3.1-next.13
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/_chunks-dts/ActiveWorkspaceMatcherContext.d.ts +116 -18
- package/lib/_chunks-dts/index.d.ts +8 -2
- package/lib/_chunks-es/MenuGroup.js +2 -2
- package/lib/_chunks-es/MenuGroup.js.map +1 -1
- package/lib/_chunks-es/PostMessagePreviewSnapshots.js.map +1 -1
- package/lib/_chunks-es/PostMessageSchema.js +1 -0
- package/lib/_chunks-es/PostMessageSchema.js.map +1 -1
- package/lib/_chunks-es/PresentationToolGrantsCheck.js +2 -0
- package/lib/_chunks-es/PresentationToolGrantsCheck.js.map +1 -1
- package/lib/_chunks-es/ReleasesTool.js +4 -4
- package/lib/_chunks-es/ReleasesTool.js.map +1 -1
- package/lib/_chunks-es/StructureToolProvider.js.map +1 -1
- package/lib/_chunks-es/Table.js.map +1 -1
- package/lib/_chunks-es/Tool.js +1 -1
- package/lib/_chunks-es/Tool.js.map +1 -1
- package/lib/_chunks-es/VariantsTool.js +182 -101
- package/lib/_chunks-es/VariantsTool.js.map +1 -1
- package/lib/_chunks-es/index.js +1 -1
- package/lib/_chunks-es/index.js.map +1 -1
- package/lib/_chunks-es/index2.js +1171 -931
- package/lib/_chunks-es/index2.js.map +1 -1
- package/lib/_chunks-es/index9.js +4 -1
- package/lib/_chunks-es/index9.js.map +1 -1
- package/lib/_chunks-es/presentation.js.map +1 -1
- package/lib/_chunks-es/resources.js +12 -0
- package/lib/_chunks-es/resources.js.map +1 -1
- package/lib/_chunks-es/resources8.js +4 -0
- package/lib/_chunks-es/resources8.js.map +1 -1
- package/lib/_chunks-es/structureTool.js +559 -347
- package/lib/_chunks-es/structureTool.js.map +1 -1
- package/lib/_chunks-es/version.js +2 -2
- package/lib/_singletons.d.ts +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +10 -1
- package/lib/router.js.map +1 -1
- package/package.json +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReleasesTool.js","sources":["../../src/core/releases/tool/overview/queryParamUtils.ts","../../src/core/releases/tool/detail/events/getReleaseActivityEvents.ts","../../src/core/releases/tool/detail/events/buildReleaseEditEvents.ts","../../src/core/releases/tool/detail/events/getReleaseEditEvents.ts","../../src/core/releases/tool/detail/events/types.ts","../../src/core/releases/tool/detail/events/getReleaseEvents.ts","../../src/core/releases/tool/detail/events/useReleaseEvents.ts","../../src/core/releases/tool/components/getReleaseDocumentIntent.ts","../../src/core/releases/tool/components/ReleaseDocumentPreview.tsx","../../src/core/releases/tool/detail/ReleaseActivityListItem.tsx","../../src/core/releases/tool/detail/ReleaseActivityList.tsx","../../src/core/releases/tool/detail/ReleaseDashboardActivityPanel.tsx","../../src/core/releases/tool/detail/ArchivedReleaseBanner.tsx","../../src/core/releases/tool/detail/ReleaseDetailsEditor.tsx","../../src/core/releases/hooks/useReleaseTime.ts","../../src/core/releases/tool/components/ReleaseTime.tsx","../../src/core/releases/tool/detail/ReleaseDateInput.tsx","../../src/core/releases/tool/detail/ReleaseTypePicker.tsx","../../src/ui-components/progressIcon/ProgressIcon.tsx","../../src/core/releases/util/getDocumentValidationLoading.ts","../../src/core/releases/tool/detail/ValidationProgressIndicator.tsx","../../src/core/releases/tool/detail/ReleaseDashboardDetails.tsx","../../src/core/releases/tool/components/releaseCTAButtons/ReleasePublishAllButton.tsx","../../src/core/util/promiseWithResolvers.ts","../../src/core/releases/tool/components/releaseCTAButtons/ReleaseRevertButton/useDocumentRevertStates.ts","../../src/core/releases/tool/components/releaseCTAButtons/ReleaseRevertButton/usePostPublishTransactions.ts","../../src/core/releases/tool/components/releaseCTAButtons/ReleaseRevertButton/ReleaseRevertButton.tsx","../../src/core/releases/tool/components/releaseCTAButtons/ReleaseScheduleButton.tsx","../../src/core/releases/tool/components/releaseCTAButtons/ReleaseUnscheduleButton.tsx","../../src/core/releases/components/ReleaseActionsResolver.tsx","../../src/core/releases/hooks/useCustomReleaseActions.ts","../../src/core/releases/tool/components/ReleaseMenuButton/DuplicateReleaseToastLink.tsx","../../src/core/releases/tool/components/ReleaseMenuButton/releaseActions.ts","../../src/core/releases/tool/components/ReleaseMenuButton/ReleaseMenu.tsx","../../src/core/releases/tool/components/ReleaseMenuButton/ReleasePreviewCard.tsx","../../src/core/releases/tool/components/ReleaseMenuButton/ReleaseMenuButton.tsx","../../src/core/releases/tool/components/StatusItem.tsx","../../src/core/releases/tool/detail/ReleaseStatusItems.tsx","../../src/core/releases/tool/detail/ReleaseDashboardFooter.tsx","../../src/core/releases/tool/detail/CopyReleaseActions.tsx","../../src/core/releases/tool/detail/ReleaseDashboardHeader.tsx","../../src/core/releases/tool/detail/AddDocumentSearch.tsx","../../src/core/releases/tool/detail/releaseDocumentActions.ts","../../src/core/releases/tool/detail/components/ReleaseDocumentFilterTabs.tsx","../../src/core/releases/tool/detail/documentTable/DocumentActions.tsx","../../src/core/releases/tool/detail/documentTable/useReleaseHistory.ts","../../src/core/releases/tool/detail/documentTable/DocumentTableColumnDefs.tsx","../../src/core/releases/tool/detail/documentTable/extractSearchableText.ts","../../src/core/releases/tool/detail/documentTable/searchDocumentRelease.ts","../../src/core/releases/tool/detail/ReleaseSummary.tsx","../../src/core/releases/tool/detail/ReleaseDetail.tsx","../../src/core/releases/store/useReleasesMetadata.ts","../../src/core/releases/tool/overview/CalendarPopover.tsx","../../src/core/releases/tool/overview/CardinalityViewPicker.tsx","../../src/core/releases/tool/overview/ConfirmScheduledDraftsDialog.tsx","../../src/core/releases/tool/overview/ConfirmActiveScheduledDraftsBanner.tsx","../../src/core/releases/tool/overview/DraftsDisabledBanner.tsx","../../src/core/releases/tool/overview/useTimezoneAdjustedDateTimeRange.ts","../../src/core/releases/tool/overview/ReleaseCalendarFilter.tsx","../../src/core/releases/tool/overview/ReleaseMenuButtonWrapper.tsx","../../src/core/releases/tool/overview/ReleaseNotFoundBanner.tsx","../../src/core/releases/tool/resources/ReleaseIllustration.tsx","../../src/core/releases/tool/overview/ReleasesEmptyState.tsx","../../src/core/releases/tool/overview/columnCells/ReleaseColumnValidationLoading.tsx","../../src/core/releases/tool/overview/columnCells/ReleaseDocumentsCounter.tsx","../../src/core/releases/tool/overview/columnCells/ReleaseName.tsx","../../src/core/releases/tool/overview/ReleasesOverviewColumnDefs.tsx","../../src/core/releases/tool/overview/ScheduledDraftMenuButtonWrapper.tsx","../../src/core/releases/tool/overview/ScheduledDraftsEmptyState.tsx","../../src/core/releases/tool/overview/columnCells/ScheduledDraftDocumentPreview.tsx","../../src/core/releases/tool/overview/hooks/useReleaseCreator.ts","../../src/core/releases/tool/overview/columnCells/ScheduledDraftMetadataCell.tsx","../../src/core/releases/tool/overview/columnCells/ScheduledDraftWarningCell.tsx","../../src/core/releases/tool/overview/ScheduledDraftsOverviewColumnDefs.tsx","../../src/core/releases/tool/overview/SchedulesUpsell.tsx","../../src/core/releases/tool/overview/ReleasesOverview.tsx","../../src/core/releases/tool/ReleasesTool.tsx"],"sourcesContent":["import {format} from 'date-fns/format'\nimport {type RouterContextValue, type SearchParam} from 'sanity/router'\n\nexport type Mode = 'active' | 'paused' | 'archived'\nexport type CardinalityView = 'releases' | 'drafts'\n\nexport const GROUP_SEARCH_PARAM_KEY = 'group'\nexport const RELEASE_NOT_FOUND_SEARCH_PARAM_KEY = 'releaseNotFound'\nconst DATE_SEARCH_PARAM_KEY = 'date'\nconst VIEW_SEARCH_PARAM_KEY = 'view'\n\nconst DATE_SEARCH_PARAM_VALUE_FORMAT = 'yyyy-MM-dd'\n\nexport function getInitialReleaseNotFound(router: RouterContextValue): boolean {\n return (\n new URLSearchParams(router.state._searchParams).get(RELEASE_NOT_FOUND_SEARCH_PARAM_KEY) ===\n 'true'\n )\n}\n\nexport const getInitialFilterDate = (router: RouterContextValue) => () => {\n const activeFilterDate = new URLSearchParams(router.state._searchParams).get(\n DATE_SEARCH_PARAM_KEY,\n )\n\n return activeFilterDate ? new Date(activeFilterDate) : undefined\n}\n\nexport const getInitialReleaseGroupMode = (router: RouterContextValue) => (): Mode => {\n const activeGroupMode = new URLSearchParams(router.state._searchParams).get(\n GROUP_SEARCH_PARAM_KEY,\n )\n\n if (activeGroupMode === 'archived') return 'archived'\n if (activeGroupMode === 'paused') return 'paused'\n return 'active'\n}\n\nexport const getInitialCardinalityView =\n ({\n router,\n isScheduledDraftsEnabled,\n isReleasesEnabled,\n }: {\n router: RouterContextValue\n isScheduledDraftsEnabled: boolean\n isReleasesEnabled: boolean\n }) =>\n (): CardinalityView => {\n if (!isScheduledDraftsEnabled) {\n return 'releases'\n }\n\n if (!isReleasesEnabled) {\n return 'drafts'\n }\n\n // Both are enabled, use the query param\n const cardinalityView = new URLSearchParams(router.state._searchParams).get(\n VIEW_SEARCH_PARAM_KEY,\n )\n\n // 'drafts' is the only value we store in the query param\n // absence of the param means 'releases' (default)\n return cardinalityView === 'drafts' ? 'drafts' : 'releases'\n }\n\nexport const buildReleasesSearchParams = (\n releaseFilterDate: Date | undefined,\n releaseGroupMode: Mode,\n cardinalityView: CardinalityView,\n): SearchParam[] => {\n const params: SearchParam[] = []\n\n if (releaseFilterDate) {\n params.push([DATE_SEARCH_PARAM_KEY, format(releaseFilterDate, DATE_SEARCH_PARAM_VALUE_FORMAT)])\n } else if (releaseGroupMode !== 'active') {\n // Add group param when there's no date filter and it's not 'active' (default)\n params.push([GROUP_SEARCH_PARAM_KEY, releaseGroupMode])\n }\n\n // Only add view param when it's 'drafts' (releases is default, no param needed)\n if (cardinalityView === 'drafts') {\n params.push([VIEW_SEARCH_PARAM_KEY, 'drafts'])\n }\n\n return params\n}\n","import {type SanityClient} from '@sanity/client'\nimport {BehaviorSubject, type Observable} from 'rxjs'\nimport {catchError, map, scan, shareReplay, startWith, switchMap, tap} from 'rxjs/operators'\n\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type ReleaseEvent} from './types'\n\nexport interface ReleaseEventsObservableValue {\n events: ReleaseEvent[]\n nextCursor: string\n loading: boolean\n error: null | Error\n}\nexport const INITIAL_VALUE: ReleaseEventsObservableValue = {\n events: [],\n nextCursor: '',\n loading: true,\n error: null,\n}\n\nfunction removeDupes(prev: ReleaseEvent[], next: ReleaseEvent[]): ReleaseEvent[] {\n const noDupes = [...prev, ...next].reduce((acc, event) => {\n if (acc.has(event.id)) {\n return acc\n }\n return acc.set(event.id, event)\n }, new Map<string, ReleaseEvent>())\n return Array.from(noDupes.values())\n}\n\nexport function addEventData(event: Omit<ReleaseEvent, 'id' | 'origin'>): ReleaseEvent {\n return {...event, id: `${event.timestamp}-${event.type}`, origin: 'events'} as ReleaseEvent\n}\n\ninterface InitialFetchEventsOptions {\n client: SanityClient\n releaseId: string\n}\nexport function getReleaseActivityEvents({client, releaseId}: InitialFetchEventsOptions): {\n events$: Observable<ReleaseEventsObservableValue>\n reloadEvents: () => void\n loadMore: () => void\n} {\n const refetchEventsTrigger$ = new BehaviorSubject<{\n cursor: string | null\n origin: 'loadMore' | 'reload' | 'initial'\n }>({\n cursor: null,\n origin: 'initial',\n })\n\n const fetchEvents = ({limit, nextCursor}: {limit: number; nextCursor: string | null}) => {\n const params = new URLSearchParams({limit: limit.toString()})\n if (nextCursor) {\n params.append('nextCursor', nextCursor)\n }\n return client.observable\n .request<{\n events: Omit<ReleaseEvent, 'id' | 'origin'>[]\n nextCursor: string\n }>({\n url: `/data/history/${client.config().dataset}/events/releases/${getReleaseIdFromReleaseDocumentId(releaseId)}?${params.toString()}`,\n tag: 'get-release-events',\n })\n .pipe(\n map((response) => {\n return {\n events: response.events.map(addEventData),\n nextCursor: response.nextCursor,\n loading: false,\n error: null,\n }\n }),\n catchError((error) => {\n console.error(error)\n return [{events: [], nextCursor: '', loading: false, error}]\n }),\n )\n }\n\n let nextCursor: string = ''\n return {\n events$: refetchEventsTrigger$.pipe(\n switchMap(({cursor, origin}) => {\n return fetchEvents({\n nextCursor: cursor,\n limit: origin === 'reload' ? 10 : 100,\n }).pipe(\n map((response) => {\n return {...response, origin}\n }),\n startWith({events: [], nextCursor: '', loading: true, error: null, origin}),\n )\n }),\n scan((prev, next) => {\n const events = removeDupes(prev.events, next.events).sort(\n (a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime(),\n )\n return {\n events: events,\n // If we are reloading, we should keep the cursor as it was before.\n nextCursor: next.origin === 'reload' ? prev.nextCursor : next.nextCursor,\n loading: next.loading,\n error: next.error,\n }\n }, INITIAL_VALUE),\n tap((response) => {\n nextCursor = response.nextCursor\n }),\n shareReplay(1),\n ),\n /**\n * Loads new events for the release, fetching the latest events from the API.\n */\n reloadEvents: () => refetchEventsTrigger$.next({cursor: null, origin: 'reload'}),\n /**\n * Loads more events for the release, fetching the next batch of events from the API.\n */\n loadMore: () => {\n const lastCursorUsed = refetchEventsTrigger$.getValue().cursor\n if (nextCursor && lastCursorUsed !== nextCursor) {\n refetchEventsTrigger$.next({origin: 'loadMore', cursor: nextCursor})\n }\n },\n }\n}\n","import {type ReleaseDocument, type ReleaseType} from '@sanity/client'\nimport {type TransactionLogEventWithEffects} from '@sanity/types'\n\nimport {applyMendozaPatch} from '../../../../preview/utils/applyMendozaPatch'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type ReleaseEvent} from './types'\n\nexport function buildReleaseEditEvents(\n transactions: TransactionLogEventWithEffects[],\n release: ReleaseDocument,\n): ReleaseEvent[] {\n // Confirm we have all the events by checking the first transaction id and the release._rev, the should match.\n if (release._rev !== transactions[0]?.id) {\n console.error('Some transactions are missing, cannot calculate the edit events')\n return []\n }\n\n const releaseEditEvents: ReleaseEvent[] = []\n // We start from the last release document and apply changes in reverse order\n // Compare for each transaction what changed, if metadata.releaseType or metadata.intendedPublishAt changed build an event.\n let currentDocument = release\n for (const transaction of transactions) {\n const effect = transaction.effects[release._id]\n if (!effect) continue\n // This will apply the revert effect to the document, so we will get the document from before this change.\n const before = applyMendozaPatch(currentDocument, effect.revert, currentDocument._rev)\n const changed: {\n releaseType?: ReleaseType\n intendedPublishDate?: string\n } = {}\n\n if (before?.state !== currentDocument.state && currentDocument.state === 'archived') {\n releaseEditEvents.push({\n type: 'archiveRelease',\n timestamp: transaction.timestamp,\n author: transaction.author,\n releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n id: transaction.id,\n origin: 'translog',\n })\n }\n if (before?.state !== currentDocument.state && currentDocument.state === 'published') {\n releaseEditEvents.push({\n type: 'publishRelease',\n timestamp: transaction.timestamp,\n author: transaction.author,\n releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n id: transaction.id,\n origin: 'translog',\n })\n }\n\n if (before?.state === 'unarchiving' && currentDocument.state === 'active') {\n releaseEditEvents.push({\n type: 'unarchiveRelease',\n timestamp: transaction.timestamp,\n author: transaction.author,\n releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n id: transaction.id,\n origin: 'translog',\n })\n }\n if (before?.metadata.releaseType !== currentDocument.metadata.releaseType) {\n changed.releaseType = currentDocument.metadata.releaseType\n }\n if (before?.metadata.intendedPublishAt !== currentDocument.metadata.intendedPublishAt) {\n changed.intendedPublishDate = currentDocument.metadata.intendedPublishAt\n }\n // If the \"changed\" object has more than one key identify it as a change event\n if (Object.values(changed).length >= 1) {\n releaseEditEvents.push({\n type: before ? 'editRelease' : 'createRelease',\n origin: 'translog',\n author: transaction.author,\n change: changed,\n id: transaction.id,\n timestamp: transaction.timestamp,\n releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n })\n }\n\n if (before) {\n currentDocument = before\n }\n }\n return releaseEditEvents\n}\n","import {type ReleaseDocument, type SanityClient} from '@sanity/client'\nimport {type TransactionLogEventWithEffects} from '@sanity/types'\nimport {\n catchError,\n distinctUntilChanged,\n expand,\n filter,\n from,\n map,\n type Observable,\n of,\n reduce,\n scan,\n shareReplay,\n startWith,\n switchMap,\n tap,\n} from 'rxjs'\n\nimport {getTransactionsLogs} from '../../../../store/translog/getTransactionsLogs'\nimport {buildReleaseEditEvents} from './buildReleaseEditEvents'\nimport {type ReleaseEvent} from './types'\n\nconst TRANSLOG_ENTRY_LIMIT = 100\n\nconst documentTransactionsCache: Record<string, TransactionLogEventWithEffects[]> =\n Object.create(null)\n\nfunction removeDupes(\n newTransactions: TransactionLogEventWithEffects[],\n oldTransactions: TransactionLogEventWithEffects[],\n) {\n const seen = new Set()\n return newTransactions.concat(oldTransactions).filter((transaction) => {\n if (seen.has(transaction.id)) {\n return false\n }\n seen.add(transaction.id)\n return true\n })\n}\n\n/**\n * This will fetch all the transactions for a given release.\n * I anticipate this would be a rather small number of transactions, given the release document is \"small\" and shouldn't change much.\n *\n * We need to fetch all of them to create the correct pagination of events in the activity feed, given we need to combine this with the\n * releaseActivityEvents that will be fetched from the events api.\n */\nfunction getReleaseTransactions({\n documentId,\n client,\n toTransaction,\n}: {\n documentId: string\n client: SanityClient\n toTransaction: string\n}): Observable<TransactionLogEventWithEffects[]> {\n const cacheKey = `${documentId}`\n const cachedTransactions = documentTransactionsCache[cacheKey] || []\n if (cachedTransactions.length > 0 && cachedTransactions[0].id === toTransaction) {\n return of(cachedTransactions)\n }\n\n function fetchLogs(options: {\n fromTransaction?: string\n toTransaction: string\n }): Observable<TransactionLogEventWithEffects[]> {\n return from(\n getTransactionsLogs(client, documentId, {\n tag: 'sanity.studio.release.history',\n effectFormat: 'mendoza',\n limit: TRANSLOG_ENTRY_LIMIT,\n reverse: true,\n fromTransaction: options.fromTransaction,\n toTransaction: options.toTransaction,\n }),\n )\n }\n\n return fetchLogs({fromTransaction: cachedTransactions[0]?.id, toTransaction: toTransaction})\n .pipe(\n expand((response) => {\n // Fetch more if the transactions length is equal to the limit\n if (response.length === TRANSLOG_ENTRY_LIMIT) {\n // Continue fetching if nextCursor exists, we use the last transaction received as the cursor.\n return fetchLogs({\n fromTransaction: undefined,\n toTransaction: response[response.length - 1].id,\n })\n }\n // End recursion by emitting an empty observable\n return of()\n }),\n // Combine all batches of transactions into a single array\n reduce(\n (allTransactions, batch) => allTransactions.concat(batch),\n [] as TransactionLogEventWithEffects[],\n ),\n )\n .pipe(\n map((transactions) => removeDupes(transactions, cachedTransactions)),\n tap((transactions) => {\n documentTransactionsCache[cacheKey] = transactions\n }),\n )\n}\n\ninterface EditEventsObservableValue {\n editEvents: ReleaseEvent[]\n loading: boolean\n error: null | Error\n}\nexport const INITIAL_VALUE: EditEventsObservableValue = {\n editEvents: [],\n loading: true,\n error: null,\n}\n\ninterface getReleaseActivityEventsOpts {\n client: SanityClient\n observeDocument$: Observable<ReleaseDocument | undefined>\n}\n\nexport function getReleaseEditEvents({\n client,\n observeDocument$,\n}: getReleaseActivityEventsOpts): Observable<EditEventsObservableValue> {\n return observeDocument$.pipe(\n filter(Boolean),\n distinctUntilChanged((prev, next) => prev._rev === next._rev),\n switchMap((release) => {\n return getReleaseTransactions({\n client,\n documentId: release._id,\n toTransaction: release._rev,\n }).pipe(\n map((transactions) => {\n return {\n editEvents: buildReleaseEditEvents(transactions, release),\n loading: false,\n error: null,\n }\n }),\n catchError((error) => {\n console.error(error)\n return of({editEvents: [], loading: false, error})\n }),\n )\n }),\n startWith(INITIAL_VALUE),\n scan((acc, current) => {\n // Accumulate edit events from previous state\n const editEvents = current.loading\n ? acc.editEvents // Preserve previous events while loading\n : current.editEvents // Update with new events when available\n\n return {...current, editEvents}\n }, INITIAL_VALUE),\n shareReplay(1),\n )\n}\n","import {type ReleaseType} from '@sanity/client'\n\nexport type ReleaseEvent =\n | CreateReleaseEvent\n | ScheduleReleaseEvent\n | UnscheduleReleaseEvent\n | PublishReleaseEvent\n | ArchiveReleaseEvent\n | UnarchiveReleaseEvent\n | AddDocumentToReleaseEvent\n | DiscardDocumentFromReleaseEvent\n | EditReleaseEvent\n\nexport interface BaseEvent {\n timestamp: string\n author: string\n releaseName: string\n id: string // Added client side ${event.timestamp}-${event.type}\n origin: 'translog' | 'events' // Added client side to identify from where the event was received\n}\n\nexport interface CreateReleaseEvent extends BaseEvent {\n type: 'createRelease'\n change?: Change\n}\n\nexport interface ScheduleReleaseEvent extends BaseEvent {\n type: 'scheduleRelease'\n publishAt: string\n}\n\nexport interface UnscheduleReleaseEvent extends BaseEvent {\n type: 'unscheduleRelease'\n}\n\nexport interface PublishReleaseEvent extends BaseEvent {\n type: 'publishRelease'\n}\n\nexport interface ArchiveReleaseEvent extends BaseEvent {\n type: 'archiveRelease'\n}\n\nexport interface UnarchiveReleaseEvent extends BaseEvent {\n type: 'unarchiveRelease'\n}\n\nexport interface AddDocumentToReleaseEvent extends BaseEvent {\n type: 'addDocumentToRelease'\n documentId: string\n documentType: string\n versionId: string\n revisionId: string\n versionRevisionId: string\n}\n\nexport interface DiscardDocumentFromReleaseEvent extends BaseEvent {\n type: 'discardDocumentFromRelease'\n documentId: string\n documentType: string\n versionId: string\n versionRevisionId: string\n}\n\ninterface Change {\n intendedPublishDate?: string\n releaseType?: ReleaseType\n}\nexport interface EditReleaseEvent extends BaseEvent {\n type: 'editRelease'\n isCreationEvent?: boolean\n change: Change\n}\n\n// Type guards\nexport const isCreateReleaseEvent = (event: ReleaseEvent): event is CreateReleaseEvent =>\n event.type === 'createRelease'\nexport const isScheduleReleaseEvent = (event: ReleaseEvent): event is ScheduleReleaseEvent =>\n event.type === 'scheduleRelease'\nexport const isPublishReleaseEvent = (event: ReleaseEvent): event is PublishReleaseEvent =>\n event.type === 'publishRelease'\nexport const isArchiveReleaseEvent = (event: ReleaseEvent): event is ArchiveReleaseEvent =>\n event.type === 'archiveRelease'\nexport const isUnarchiveReleaseEvent = (event: ReleaseEvent): event is UnarchiveReleaseEvent =>\n event.type === 'unarchiveRelease'\nexport const isAddDocumentToReleaseEvent = (\n event: ReleaseEvent,\n): event is AddDocumentToReleaseEvent => event.type === 'addDocumentToRelease'\nexport const isDiscardDocumentFromReleaseEvent = (\n event: ReleaseEvent,\n): event is DiscardDocumentFromReleaseEvent => event.type === 'discardDocumentFromRelease'\nexport const isEditReleaseEvent = (event: ReleaseEvent): event is EditReleaseEvent =>\n event.type === 'editRelease'\n\nexport const isTranslogEvent = (\n event: ReleaseEvent,\n): event is EditReleaseEvent | CreateReleaseEvent => event.origin === 'translog'\n\nexport const isEventsAPIEvent = (\n event: ReleaseEvent,\n): event is Exclude<ReleaseEvent, EditReleaseEvent> => event.origin === 'events'\n","import {type ReleaseDocument, type SanityClient} from '@sanity/client'\nimport {\n combineLatest,\n distinctUntilChanged,\n filter,\n map,\n merge,\n type Observable,\n of,\n skip,\n startWith,\n tap,\n} from 'rxjs'\n\nimport {type DocumentPreviewStore} from '../../../../preview/documentPreviewStore'\nimport {type ReleasesReducerState} from '../../../store/reducer'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../util/releasesClient'\nimport {getReleaseActivityEvents} from './getReleaseActivityEvents'\nimport {getReleaseEditEvents} from './getReleaseEditEvents'\nimport {isCreateReleaseEvent, isEventsAPIEvent, isTranslogEvent, type ReleaseEvent} from './types'\n\ninterface getReleaseEventsOpts {\n client: SanityClient\n releaseId: string\n releasesState$: Observable<ReleasesReducerState>\n documentPreviewStore: DocumentPreviewStore\n eventsAPIEnabled: boolean\n}\n\nexport const EVENTS_INITIAL_VALUE = {\n events: [],\n hasMore: false,\n error: null,\n loading: true,\n}\n\nconst notEnabledActivityEvents: ReturnType<typeof getReleaseActivityEvents> = {\n events$: of({\n events: [],\n nextCursor: '',\n loading: false,\n error: null,\n }),\n reloadEvents: () => {},\n loadMore: () => {},\n}\n\n/**\n * Combines activity and edit events for a release, and adds side effects for reloading events when the release or the document changes.\n */\nexport function getReleaseEvents({\n client,\n releaseId,\n releasesState$,\n documentPreviewStore,\n eventsAPIEnabled,\n}: getReleaseEventsOpts) {\n const observeDocument$ = documentPreviewStore.unstable_observeDocument(releaseId, {\n apiVersion: RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion,\n }) as Observable<ReleaseDocument | undefined>\n\n const editEvents$ = getReleaseEditEvents({client, observeDocument$})\n\n const releaseRev$ = releasesState$.pipe(\n map((state) => state.releases.get(releaseId)?._rev),\n filter(Boolean),\n distinctUntilChanged(),\n // Emit only when rev changes, after first non null value.\n skip(1),\n )\n\n // Turn off activity events if eventsAPI is not enabled.\n const activityEvents = eventsAPIEnabled\n ? getReleaseActivityEvents({client, releaseId})\n : notEnabledActivityEvents\n\n const groqFilter = `sanity::partOfRelease($releaseId)`\n\n // Turn off document counts listener if eventsAPI is not enabled.\n const documentsCount$ = eventsAPIEnabled\n ? of(0)\n : documentPreviewStore\n .unstable_observeDocumentIdSet(\n groqFilter,\n {releaseId: getReleaseIdFromReleaseDocumentId(releaseId)},\n {\n apiVersion: RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion,\n },\n )\n .pipe(\n filter(({status}) => status === 'connected'),\n map(({documentIds}) => documentIds.length),\n distinctUntilChanged(),\n // Emit only when count changes, after first non null value.\n skip(1),\n )\n\n const sideEffects$ = merge(releaseRev$, documentsCount$).pipe(\n tap(() => {\n activityEvents.reloadEvents()\n }),\n startWith(null),\n )\n\n const events$ = combineLatest([activityEvents.events$, editEvents$, sideEffects$]).pipe(\n map(([activity, edit]) => {\n const events = [...activity.events, ...edit.editEvents]\n .sort((a, b) => Date.parse(b.timestamp) - Date.parse(a.timestamp))\n .reduce((acc: ReleaseEvent[], event) => {\n if (isCreateReleaseEvent(event)) {\n const creationEvent = acc.find(isCreateReleaseEvent)\n if (!creationEvent) acc.push(event)\n // Prefer the translog event for the creation given it has extra information.\n else if (isEventsAPIEvent(creationEvent) && isTranslogEvent(event)) {\n acc[acc.indexOf(creationEvent)] = event\n }\n } else acc.push(event)\n return acc\n }, [])\n\n return {\n events: deduplicateEvents(events),\n hasMore: Boolean(activity.nextCursor),\n error: activity.error || edit.error,\n loading: activity.loading || edit.loading,\n }\n }),\n )\n\n return {\n events$,\n loadMore: activityEvents.loadMore,\n }\n}\n\nconst deduplicateEvents = (events: ReleaseEvent[]) => {\n // Events are sorted by timestamp, compare this event with the next one, if they are the same type and timestamp, remove it.\n return events.filter((event, index) => {\n const nextEvent = events[index + 1]\n if (!nextEvent) return true\n return !(event.type === nextEvent.type && areTheSameDate(event.timestamp, nextEvent.timestamp))\n })\n}\n\n/**\n * Checks if two dates are the same date, without contemplating miliseconds.\n * The translog has miliseconds but the events api does not.\n */\nfunction areTheSameDate(date1: string, date2: string) {\n const time1 = new Date(date1).getTime()\n const time2 = new Date(date2).getTime()\n return Math.abs(time1 - time2) <= 1000\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\n\nimport {useClient} from '../../../../hooks/useClient'\nimport {useDocumentPreviewStore} from '../../../../store/datastores'\nimport {useSource} from '../../../../studio/source'\nimport {useReleasesStore} from '../../../store/useReleasesStore'\nimport {getReleaseDocumentIdFromReleaseId} from '../../../util/getReleaseDocumentIdFromReleaseId'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../util/releasesClient'\nimport {EVENTS_INITIAL_VALUE, getReleaseEvents} from './getReleaseEvents'\nimport {type ReleaseEvent} from './types'\n\nexport interface ReleaseEvents {\n events: ReleaseEvent[]\n loading: boolean\n error: null | Error\n loadMore: () => void\n hasMore: boolean\n}\n\nexport function useReleaseEvents(releaseId: string): ReleaseEvents {\n const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n const documentPreviewStore = useDocumentPreviewStore()\n const {state$: releasesState$} = useReleasesStore()\n const source = useSource()\n const eventsAPIEnabled = Boolean(source.beta?.eventsAPI?.releases)\n\n const releaseEvents = useMemo(\n () =>\n getReleaseEvents({\n client,\n releaseId: getReleaseDocumentIdFromReleaseId(releaseId),\n releasesState$,\n documentPreviewStore,\n eventsAPIEnabled,\n }),\n [releaseId, client, releasesState$, documentPreviewStore, eventsAPIEnabled],\n )\n const events = useObservable(releaseEvents.events$, EVENTS_INITIAL_VALUE)\n\n return {\n events: events.events,\n hasMore: events.hasMore,\n loading: events.loading,\n error: events.error,\n loadMore: releaseEvents.loadMore,\n }\n}\n","import {type ReleaseState} from '@sanity/client'\n\nimport {getPublishedId} from '../../../util/draftUtils'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\n\nconst isArchivedRelease = (releaseState: ReleaseState | undefined) =>\n releaseState === 'archived' || releaseState === 'archiving' || releaseState === 'unarchiving'\n\ninterface ReleaseDocumentIntentOptions {\n documentId: string\n documentTypeName: string\n releaseId: string\n releaseState?: ReleaseState\n documentRevision?: string\n isCardinalityOneRelease?: boolean\n /** Optional field path (stringified) to focus when the document opens. */\n path?: string\n}\n\n/**\n * Builds the `edit` intent params and search params used to open a document version\n * within a release perspective. Shared so that both the document preview link and the\n * validation deep-link resolve to the exact same document/perspective.\n *\n * @internal\n */\nexport function getReleaseDocumentIntent({\n documentId,\n documentTypeName,\n releaseId,\n releaseState,\n documentRevision,\n isCardinalityOneRelease,\n path,\n}: ReleaseDocumentIntentOptions): {\n params: Record<string, string | undefined>\n searchParams: [string, string][] | undefined\n} {\n const releaseName = getReleaseIdFromReleaseDocumentId(releaseId)\n\n let intentParams: Record<string, string | undefined> = {}\n if (isCardinalityOneRelease) {\n intentParams = {scheduledDraft: releaseName}\n } else if (releaseState === 'published') {\n // We are inspecting this document through the published view of the doc.\n intentParams = {\n rev: `@release:${releaseName}`,\n inspect: 'sanity/structure/history',\n }\n } else if (releaseState === 'archived') {\n // We are \"faking\" the release as if it is still valid only to render the document\n intentParams = {\n rev: '@lastEdited',\n inspect: 'sanity/structure/history',\n historyEvent: documentRevision,\n historyVersion: releaseName,\n archivedRelease: 'true',\n }\n }\n\n const searchParams: [string, string][] | undefined =\n isCardinalityOneRelease || isArchivedRelease(releaseState)\n ? undefined\n : [['perspective', releaseState === 'published' ? 'published' : releaseName]]\n\n return {\n params: {\n id: getPublishedId(documentId),\n type: documentTypeName,\n ...intentParams,\n ...(path ? {path} : {}),\n },\n searchParams,\n }\n}\n","import {type ReleaseState} from '@sanity/client'\nimport {Card} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, useMemo} from 'react'\nimport {IntentLink} from 'sanity/router'\n\nimport {type PreviewLayoutKey} from '../../../components/previews/types'\nimport {DocumentPreviewPresence} from '../../../presence'\nimport {SanityDefaultPreview} from '../../../preview/components/SanityDefaultPreview'\nimport {useDocumentPresence} from '../../../store/presence/useDocumentPresence'\nimport {useDocumentPreviewValues} from '../../../tasks/hooks/useDocumentPreviewValues'\nimport {getPublishedId} from '../../../util/draftUtils'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {getReleaseDocumentIntent} from './getReleaseDocumentIntent'\n\ninterface ReleaseDocumentPreviewProps {\n documentId: string\n documentTypeName: string\n releaseId: string\n releaseState?: ReleaseState\n documentRevision?: string\n hasValidationError?: boolean\n layout?: PreviewLayoutKey\n isGoingToBePublished?: boolean\n isCardinalityOneRelease?: boolean\n}\n\nexport function ReleaseDocumentPreview({\n documentId,\n documentTypeName,\n releaseId,\n releaseState,\n isCardinalityOneRelease,\n documentRevision,\n layout,\n isGoingToBePublished = false,\n}: ReleaseDocumentPreviewProps) {\n const documentPresence = useDocumentPresence(documentId)\n\n const {params, searchParams} = useMemo(\n () =>\n getReleaseDocumentIntent({\n documentId,\n documentTypeName,\n releaseId,\n releaseState,\n documentRevision,\n isCardinalityOneRelease,\n }),\n [\n documentId,\n documentTypeName,\n releaseId,\n releaseState,\n documentRevision,\n isCardinalityOneRelease,\n ],\n )\n\n const LinkComponent = useMemo(\n () =>\n forwardRef(function LinkComponent(linkProps, ref: ForwardedRef<HTMLAnchorElement>) {\n return (\n <IntentLink\n {...linkProps}\n intent=\"edit\"\n params={params}\n searchParams={searchParams}\n ref={ref}\n />\n )\n }),\n [params, searchParams],\n )\n\n const previewPresence = useMemo(\n () => documentPresence?.length > 0 && <DocumentPreviewPresence presence={documentPresence} />,\n [documentPresence],\n )\n\n const {isLoading: previewLoading, value: resolvedPreview} = useDocumentPreviewValues({\n documentId: isGoingToBePublished ? getPublishedId(documentId) : documentId,\n documentType: documentTypeName,\n perspectiveStack: isGoingToBePublished ? [] : [getReleaseIdFromReleaseDocumentId(releaseId)],\n })\n\n return (\n <Card tone=\"inherit\" as={LinkComponent} radius={2} data-as=\"a\">\n <SanityDefaultPreview\n {...(resolvedPreview || {})}\n status={previewPresence}\n isPlaceholder={previewLoading}\n layout={layout}\n />\n </Card>\n )\n}\n","import {Card, Flex, Stack, Text} from '@sanity/ui'\nimport {motion} from 'motion/react'\nimport {memo, type ReactNode, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {UserAvatar} from '../../../components/userAvatar/UserAvatar'\nimport {useDateTimeFormat} from '../../../hooks/useDateTimeFormat'\nimport {useRelativeTime} from '../../../hooks/useRelativeTime'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {ReleaseDocumentPreview} from '../components/ReleaseDocumentPreview'\nimport {\n type AddDocumentToReleaseEvent,\n type DiscardDocumentFromReleaseEvent,\n isAddDocumentToReleaseEvent,\n isCreateReleaseEvent,\n isDiscardDocumentFromReleaseEvent,\n isEditReleaseEvent,\n isScheduleReleaseEvent,\n type ReleaseEvent,\n} from './events/types'\n\nconst StatusText = styled(Text)`\n strong {\n font-weight: 500;\n color: var(--card-fg-color);\n }\n time {\n white-space: nowrap;\n }\n`\nconst ACTIVITY_TEXT_118N: Record<ReleaseEvent['type'], string> = {\n addDocumentToRelease: 'activity.event.add-document',\n archiveRelease: 'activity.event.archive',\n createRelease: 'activity.event.create',\n discardDocumentFromRelease: 'activity.event.discard-document',\n publishRelease: 'activity.event.publish',\n scheduleRelease: 'activity.event.schedule',\n unarchiveRelease: 'activity.event.unarchive',\n unscheduleRelease: 'activity.event.unschedule',\n editRelease: 'activity.event.edit',\n}\n\nconst ReleaseEventDocumentPreview = ({\n event,\n releaseId,\n}: {\n releaseId: string\n event: AddDocumentToReleaseEvent | DiscardDocumentFromReleaseEvent\n}) => {\n return (\n <Stack space={2}>\n <ReleaseDocumentPreview\n releaseId={releaseId}\n documentId={event.documentId}\n documentTypeName={event.documentType}\n layout=\"block\"\n />\n </Stack>\n )\n}\n\nconst ScheduleTarget = ({children, event}: {children: ReactNode; event: ReleaseEvent}) => {\n const dateTimeFormat = useDateTimeFormat({dateStyle: 'full', timeStyle: 'medium'})\n const {t} = useTranslation(releasesLocaleNamespace)\n\n const formattedDate = useMemo(() => {\n if (isEditReleaseEvent(event)) {\n if (event.change.releaseType === 'asap') return t('activity.event.edit-time-asap')\n if (event.change.releaseType === 'undecided') return t('activity.event.edit-time-undecided')\n }\n\n let dateString: string | undefined\n if (isScheduleReleaseEvent(event)) {\n dateString = event.publishAt\n } else if (isCreateReleaseEvent(event)) {\n dateString = event.change?.intendedPublishDate\n } else if (isEditReleaseEvent(event)) {\n dateString = event.change.intendedPublishDate\n }\n\n if (!dateString) return null\n return dateTimeFormat.format(new Date(dateString))\n }, [dateTimeFormat, event, t])\n\n if (!formattedDate && isCreateReleaseEvent(event)) return null\n return (\n <span>\n {children} <strong>{formattedDate || '---'}</strong>\n </span>\n )\n}\n\nconst FadeInCard = motion.create(Card)\n\nfunction ActivityTimestamp({timestamp}: {timestamp: string}) {\n const dateTimeFormat = useDateTimeFormat({\n dateStyle: 'medium',\n timeStyle: 'short',\n })\n const date = useMemo(() => new Date(timestamp), [timestamp])\n const formattedDate = useMemo(() => dateTimeFormat.format(date), [dateTimeFormat, date])\n const relativeTime = useRelativeTime(date, {useTemporalPhrase: true, minimal: true})\n\n return (\n <time dateTime={date.toISOString()} title={relativeTime}>\n {formattedDate}\n </time>\n )\n}\n\nexport const ReleaseActivityListItem = memo(\n ({\n event,\n releaseId,\n releaseTitle,\n }: {\n event: ReleaseEvent\n releaseId: string\n releaseTitle: string\n }) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n\n return (\n <FadeInCard\n paddingX={1}\n paddingTop={1}\n paddingBottom={2}\n overflow=\"hidden\"\n // This card animates on entrance when a new event is added, not for every event that is rendered.\n // So if the user is seeing the list and a new event lands, the list will animate the new event. (That is by the <AnimatePresence initial=false> component wrapping the list)\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n transition={{type: 'spring', bounce: 0, duration: 0.4}}\n >\n <Flex align=\"center\" gap={2}>\n <UserAvatar user={event.author} />\n <Stack flex={1}>\n <Flex gap={2} align=\"center\">\n <StatusText muted size={1}>\n <Translate\n t={t}\n components={{\n ScheduleTarget: ({children}) => (\n <ScheduleTarget event={event}>{children}</ScheduleTarget>\n ),\n }}\n values={{releaseTitle}}\n i18nKey={ACTIVITY_TEXT_118N[event.type]}\n />{' '}\n · <ActivityTimestamp timestamp={event.timestamp} />\n </StatusText>\n </Flex>\n {isAddDocumentToReleaseEvent(event) || isDiscardDocumentFromReleaseEvent(event) ? (\n <ReleaseEventDocumentPreview event={event} releaseId={releaseId} />\n ) : null}\n </Stack>\n </Flex>\n </FadeInCard>\n )\n },\n (prevProps, nextProps) => {\n return prevProps.event.id === nextProps.event.id && prevProps.releaseId === nextProps.releaseId\n },\n)\n\nReleaseActivityListItem.displayName = 'ReleaseActivityListItem'\n","import {Box} from '@sanity/ui'\nimport {useVirtualizer} from '@tanstack/react-virtual'\nimport {AnimatePresence} from 'motion/react'\nimport {useEffect, useMemo, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../../../components/loadingBlock/LoadingBlock'\nimport {\n isAddDocumentToReleaseEvent,\n isDiscardDocumentFromReleaseEvent,\n isEventsAPIEvent,\n isTranslogEvent,\n type ReleaseEvent,\n} from './events/types'\nimport {ReleaseActivityListItem} from './ReleaseActivityListItem'\n\nconst estimateSize = (event: ReleaseEvent | undefined) => {\n if (!event) {\n return 40 // Is the loader row\n }\n if (isAddDocumentToReleaseEvent(event) || isDiscardDocumentFromReleaseEvent(event)) {\n return 70\n }\n return 56\n}\nconst VirtualContainer = styled(Box)`\n height: 100%;\n overflow: scroll;\n`\n\ninterface ReleaseActivityListProps {\n events: ReleaseEvent[]\n releaseTitle: string\n releaseId: string\n hasMore: boolean\n loadMore: () => void\n isLoading: boolean\n}\n// oxlint-disable-next-line react/react-compiler\nexport const ReleaseActivityList = ({\n events,\n releaseTitle,\n releaseId,\n hasMore,\n loadMore,\n isLoading,\n}: ReleaseActivityListProps) => {\n const virtualizerContainerRef = useRef<HTMLDivElement | null>(null)\n\n const listEvents: ReleaseEvent[] = useMemo(() => {\n /**\n * This list combines:\n * - API events, which are loaded incrementally (paginated)\n * - Translog events, which are fully available (non-paginated)\n *\n * We want to display all events up to the oldest API event and include any translog events\n * that occurred before that API event. By doing so, as we load older batches of API events,\n * they will show at the bottom of the list\n */\n\n // If all events are loaded (no more pages) and we’re not loading, just return all events.\n if (!hasMore && !isLoading) return events\n\n const lastEventFromEventsAPI = [...events].reverse().find(isEventsAPIEvent)\n // If no API events are found (e.g., events api is not enabled) and we're not loading, return all translog events.\n if (!lastEventFromEventsAPI && !isLoading) return events\n\n // If we haven’t found any API events yet and are still loading, show nothing for now.\n if (!lastEventFromEventsAPI) return []\n\n // Include only those translog events that occur before the newest API event.\n const lastEventDate = new Date(lastEventFromEventsAPI.timestamp)\n return events.filter((event) => {\n if (isTranslogEvent(event)) {\n return new Date(event.timestamp) > lastEventDate\n }\n return true\n })\n }, [events, hasMore, isLoading])\n\n const virtualizer = useVirtualizer({\n // If we have more events, or the events are loading, we add a loader row at the end\n count: hasMore || isLoading ? listEvents.length + 1 : listEvents.length,\n getScrollElement: () => virtualizerContainerRef.current,\n estimateSize: (i) => estimateSize(events[i]),\n overscan: 10,\n paddingEnd: 24,\n })\n\n const virtualItems = virtualizer.getVirtualItems()\n\n useEffect(() => {\n const lastItem = virtualItems.at(-1)\n if (!lastItem) return\n if (lastItem.index >= listEvents.length - 1 && hasMore) {\n loadMore()\n }\n }, [listEvents.length, hasMore, loadMore, virtualItems])\n\n return (\n <VirtualContainer id=\"virtualizer-container\" ref={virtualizerContainerRef} paddingX={3}>\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: '100%',\n position: 'relative',\n }}\n >\n <AnimatePresence initial={false}>\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const event = listEvents[virtualRow.index]\n const isLoaderRow = !event\n\n return (\n <div\n key={virtualRow.key}\n data-index={virtualRow.index}\n ref={virtualizer.measureElement}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {isLoaderRow ? (\n <Box paddingY={4}>\n <LoadingBlock fill />\n </Box>\n ) : (\n <ReleaseActivityListItem\n event={event}\n releaseId={releaseId}\n releaseTitle={releaseTitle}\n />\n )}\n </div>\n )\n })}\n </AnimatePresence>\n </div>\n </VirtualContainer>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'motion/react'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../../../components/loadingBlock/LoadingBlock'\nimport {Resizable} from '../../../components/resizer/Resizable'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type ReleaseEvents} from './events/useReleaseEvents'\nimport {ReleaseActivityList} from './ReleaseActivityList'\n\ninterface ReleaseDashboardActivityPanelProps {\n events: ReleaseEvents\n release: ReleaseDocument\n show: boolean\n}\nconst MotionFlex = motion.create(Flex)\nconst FillHeight = styled.div`\n --card-border-color: transparent;\n height: 100%;\n display: flex;\n flex-direction: column;\n`\nexport function ReleaseDashboardActivityPanel({\n events,\n release,\n show,\n}: ReleaseDashboardActivityPanelProps) {\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n return (\n <AnimatePresence>\n {show && (\n <>\n <motion.div\n animate={{width: 'auto', opacity: 1}}\n initial={{width: 0, opacity: 0}}\n exit={{width: 0, opacity: 0}}\n transition={{type: 'spring', bounce: 0, duration: 0.2}}\n >\n <Resizable\n as={FillHeight}\n minWidth={320}\n maxWidth={800}\n initialWidth={320}\n resizerPosition=\"left\"\n style={{display: 'flex', flexDirection: 'column', flex: 'none', maxHeight: '100%'}}\n >\n <MotionFlex flex=\"none\" height=\"fill\" direction=\"column\">\n <Box padding={4}>\n <Text size={1} weight=\"medium\">\n {t('activity.panel.title')}\n </Text>\n </Box>\n {events.error && !events.events.length && (\n <Card padding={3} tone=\"caution\">\n <Box padding={2}>\n <Text size={0}>{t('activity.panel.error')}</Text>\n </Box>\n </Card>\n )}\n {events.loading && !events.events.length && (\n <LoadingBlock title={t('activity.panel.loading')} />\n )}\n <ReleaseActivityList\n releaseTitle={\n release.metadata.title || tCore('release.placeholder-untitled-release')\n }\n releaseId={release._id}\n events={events.events}\n hasMore={events.hasMore}\n loadMore={events.loadMore}\n isLoading={events.loading}\n />\n </MotionFlex>\n </Resizable>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {InfoOutlineIcon} from '@sanity/icons'\nimport {Card, Flex, Stack, Text} from '@sanity/ui'\nimport {addDays} from 'date-fns/addDays'\nimport {format} from 'date-fns/format'\nimport {useMemo} from 'react'\n\nimport {useProjectSubscriptions} from '../../../hooks/useProjectSubscriptions'\nimport {useTimeZone} from '../../../hooks/useTimeZone'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\nimport {releasesLocaleNamespace} from '../../i18n'\n\nexport function ArchivedReleaseBanner({release}: {release: ReleaseDocument}) {\n const {state} = release\n const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n const {projectSubscriptions} = useProjectSubscriptions()\n\n const retentionDays = projectSubscriptions?.featureTypes.retention.features[0].attributes\n .maxRetentionDays as number | undefined\n\n const {utcToCurrentZoneDate} = useTimeZone(CONTENT_RELEASES_TIME_ZONE_SCOPE)\n const removalDate = useMemo(() => {\n if (!retentionDays || !release?._updatedAt) return ''\n const _removalDate = addDays(new Date(release._updatedAt), retentionDays)\n\n return format(utcToCurrentZoneDate(_removalDate), 'PP')\n }, [retentionDays, release, utcToCurrentZoneDate])\n\n return (\n <Card padding={4} radius={4} tone=\"primary\" data-testid=\"retention-policy-card\">\n <Flex gap={3}>\n <Text size={1}>\n <InfoOutlineIcon />\n </Text>\n <Stack space={4}>\n <Text size={1} weight=\"semibold\">\n {state === 'archived' ? tRelease('archive-info.title') : tRelease('publish-info.title')}\n </Text>\n {retentionDays && (\n <Text size={1} accent>\n <Translate\n t={tRelease}\n i18nKey=\"archive-info.description\"\n values={{retentionDays, removalDate: removalDate || ''}}\n components={{\n Link: ({children}) => (\n <a\n href=\"https://www.sanity.io/docs/user-guides/history-experience\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {children}\n </a>\n ),\n }}\n />\n </Text>\n )}\n </Stack>\n </Flex>\n </Card>\n )\n}\n","import {type EditableReleaseDocument, type ReleaseDocument} from '@sanity/client'\nimport {useCallback, useEffect, useRef, useState} from 'react'\n\nimport {getIsReleaseOpen, TitleDescriptionForm} from '../../components/dialog/TitleDescriptionForm'\nimport {useReleaseOperations} from '../../index'\nimport {useReleasePermissions} from '../../store/useReleasePermissions'\n\nexport function ReleaseDetailsEditor({release}: {release: ReleaseDocument}): React.JSX.Element {\n const {updateRelease} = useReleaseOperations()\n const [timer, setTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n\n const {checkWithPermissionGuard} = useReleasePermissions()\n const [hasUpdatePermission, setHasUpdatePermission] = useState<boolean | null>(null)\n\n const handleOnChange = useCallback(\n (changedValue: EditableReleaseDocument) => {\n clearTimeout(timer)\n\n /** @todo I wasn't able to get this working with the debouncer that we use in other parts */\n const newTimer = setTimeout(() => {\n if (hasUpdatePermission) {\n void updateRelease(changedValue)\n }\n }, 200)\n\n setTimer(newTimer)\n },\n [hasUpdatePermission, timer, updateRelease],\n )\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n\n if (getIsReleaseOpen(release)) {\n // title and description will be readOnly if release is not 'open'\n // so only need to check permission to edit if release is 'open'\n void checkWithPermissionGuard(updateRelease, release).then((hasPermission) => {\n if (isMounted.current) setHasUpdatePermission(hasPermission)\n })\n }\n\n return () => {\n isMounted.current = false\n }\n }, [checkWithPermissionGuard, release, release._id, updateRelease])\n\n return (\n <TitleDescriptionForm\n key={release._id}\n release={release}\n onChange={handleOnChange}\n disabled={Boolean(!hasUpdatePermission)}\n />\n )\n}\n","import {format} from 'date-fns/format'\nimport {useCallback} from 'react'\n\nimport {useTimeZone} from '../../hooks/useTimeZone'\nimport {type TableRelease} from '../tool/overview/ReleasesOverview'\nimport {getPublishDateFromRelease} from '../util/util'\n\nexport const useReleaseTime = (): ((release: TableRelease) => string | null) => {\n const {timeZone, utcToCurrentZoneDate, getLocalTimeZone} = useTimeZone({\n type: 'contentReleases',\n } as const)\n const {abbreviation: localeTimeZoneAbbreviation} = getLocalTimeZone()\n\n const getTimezoneAbbreviation = useCallback(\n () =>\n timeZone.abbreviation === localeTimeZoneAbbreviation ? '' : `(${timeZone.abbreviation})`,\n [localeTimeZoneAbbreviation, timeZone.abbreviation],\n )\n\n return useCallback(\n (release: TableRelease) => {\n const publishDate = getPublishDateFromRelease(release)\n\n return publishDate\n ? `${format(utcToCurrentZoneDate(publishDate), 'PPpp')} ${getTimezoneAbbreviation()}`\n : null\n },\n [getTimezoneAbbreviation, utcToCurrentZoneDate],\n )\n}\n","import {LockIcon} from '@sanity/icons'\nimport {Box, Flex, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../i18n'\nimport {useReleaseTime} from '../../hooks/useReleaseTime'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {ARCHIVED_RELEASE_STATES} from '../../util/const'\nimport {isReleaseScheduledOrScheduling} from '../../util/util'\nimport {type TableRelease} from '../overview/ReleasesOverview'\n\nexport const ReleaseTime: React.FC<{release: TableRelease}> = ({release}) => {\n const {t} = useTranslation()\n const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n const getReleaseTime = useReleaseTime()\n\n const {metadata} = release\n\n if (metadata.releaseType === 'asap') {\n return (\n <Text size={1} muted weight=\"medium\">\n {t('release.type.asap')}\n </Text>\n )\n }\n if (metadata.releaseType === 'undecided') {\n return (\n <Text size={1} muted weight=\"medium\" style={{opacity: 0.5}}>\n {t('release.type.undecided')}\n </Text>\n )\n }\n\n // For scheduled releases:\n\n const isScheduledOrScheduling = isReleaseScheduledOrScheduling(release)\n const isInArchivedView = ARCHIVED_RELEASE_STATES.includes(release.state)\n\n return (\n <Flex gap={1} align=\"center\" wrap=\"wrap\">\n {isScheduledOrScheduling && (\n <Box paddingY={1}>\n <Text size={1} muted>\n <LockIcon data-testid=\"release-lock-icon\" />\n </Text>\n </Box>\n )}\n {!isInArchivedView && (\n <>\n <Box paddingY={1}>\n <Text size={1} muted>\n {isScheduledOrScheduling ? tRelease('time.scheduled') : tRelease('time.estimated')}\n </Text>\n </Box>\n <Box paddingY={1}>\n <Text size={1} muted>\n {'·'}\n </Text>\n </Box>\n </>\n )}\n <Box paddingY={1}>\n <Text size={1} weight=\"medium\">\n {getReleaseTime(release)}\n </Text>\n </Box>\n </Flex>\n )\n}\n","import {format} from 'date-fns/format'\nimport {isBefore} from 'date-fns/isBefore'\nimport {isValid} from 'date-fns/isValid'\nimport {parse} from 'date-fns/parse'\nimport {startOfMinute} from 'date-fns/startOfMinute'\nimport {useCallback} from 'react'\n\nimport {LazyTextInput} from '../../../components/inputs/DateInputs/LazyTextInput'\nimport {useTimeZone} from '../../../hooks/useTimeZone'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\n\nconst dateInputFormat = 'PP HH:mm'\n\nexport function ReleaseDateInput(props: {\n setIsIntendedScheduleDateInPast: (isIntendedScheduleDateInPast: boolean) => void\n setIntendedPublishAt: (intendedPublishAt: Date) => void\n intendedPublishAt: Date | undefined\n}): React.JSX.Element {\n const {setIsIntendedScheduleDateInPast, intendedPublishAt, setIntendedPublishAt} = props\n\n const {utcToCurrentZoneDate, zoneDateToUtc} = useTimeZone(CONTENT_RELEASES_TIME_ZONE_SCOPE)\n\n const intendedPublishAtTimezoneAdjusted = intendedPublishAt\n ? utcToCurrentZoneDate(intendedPublishAt)\n : intendedPublishAt\n\n const handlePublishAtInputChange = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n const parsedDate = zoneDateToUtc(\n parse(event.currentTarget.value, dateInputFormat, new Date()),\n )\n\n if (isValid(parsedDate)) {\n setIsIntendedScheduleDateInPast(isBefore(parsedDate, new Date()))\n\n setIntendedPublishAt(startOfMinute(parsedDate))\n }\n },\n [zoneDateToUtc, setIsIntendedScheduleDateInPast, setIntendedPublishAt],\n )\n\n return (\n <LazyTextInput\n data-testid=\"date-input\"\n value={\n intendedPublishAtTimezoneAdjusted\n ? format(intendedPublishAtTimezoneAdjusted, dateInputFormat)\n : undefined\n }\n onChange={handlePublishAtInputChange}\n />\n )\n}\n","import {type ReleaseType} from '@sanity/client'\nimport {PublishIcon} from '@sanity/icons'\nimport {Card, Flex, Spinner, Stack, TabList, Text, useClickOutsideEvent, useToast} from '@sanity/ui'\nimport {isBefore} from 'date-fns/isBefore'\nimport {startOfMinute} from 'date-fns/startOfMinute'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {useCallback, useMemo, useRef, useState} from 'react'\n\nimport {Button, Popover, Tab} from '../../../../ui-components'\nimport {MONTH_PICKER_VARIANT} from '../../../components/inputs/DateInputs/calendar/Calendar'\nimport {type CalendarLabels} from '../../../components/inputs/DateInputs/calendar/types'\nimport {DatePicker} from '../../../components/inputs/DateInputs/DatePicker'\nimport {getCalendarLabels} from '../../../form/inputs/DateInputs/utils'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\nimport {ReleaseAvatar} from '../../components/ReleaseAvatar'\nimport {useReleaseTime} from '../../hooks/useReleaseTime'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {getIsScheduledDateInPast} from '../../util/getIsScheduledDateInPast'\nimport {getReleaseTone} from '../../util/getReleaseTone'\nimport {\n getPublishDateFromRelease,\n isReleaseScheduledOrScheduling,\n type NotArchivedRelease,\n} from '../../util/util'\nimport {ReleaseTime} from '../components/ReleaseTime'\nimport {ReleaseDateInput} from './ReleaseDateInput'\n\nexport function ReleaseTypePicker(props: {release: NotArchivedRelease}): React.JSX.Element {\n const {release} = props\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const datePickerRef = useRef<HTMLDivElement | null>(null)\n\n const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n const {t} = useTranslation()\n const {updateRelease} = useReleaseOperations()\n const toast = useToast()\n const getReleaseTime = useReleaseTime()\n\n const [open, setOpen] = useState(false)\n const [releaseType, setReleaseType] = useState<ReleaseType>(release.metadata.releaseType)\n const publishDate = useMemo(() => getPublishDateFromRelease(release), [release])\n const [isUpdating, setIsUpdating] = useState(false)\n const [isIntendedScheduleDateInPast, setIsIntendedScheduleDateInPast] = useState(\n publishDate && isBefore(new Date(publishDate), new Date()),\n )\n\n const [intendedPublishAt, setIntendedPublishAt] = useState<Date | undefined>(\n publishDate ? new Date(publishDate) : undefined,\n )\n const updatedDate = intendedPublishAt?.toISOString()\n\n const calendarLabels: CalendarLabels = useMemo(() => getCalendarLabels(t), [t])\n\n const close = useCallback(() => {\n // a bit of a hack to make sure the timezone dialog is not immediately closed on out\n // the dialog itself is in the Calendar component who is basically unrealted to this one\n const dialog = document.querySelector('#time-zone')\n\n if (open && !dialog) {\n const newRelease = {\n ...release,\n metadata: {\n ...release.metadata,\n releaseType,\n ...(typeof updatedDate === 'undefined' || releaseType !== 'scheduled'\n ? {}\n : {\n intendedPublishAt: updatedDate,\n }),\n },\n }\n\n if (!isEqual(newRelease, release)) {\n /**\n * If in past, the reset type and intendedPublish to the actual release values\n * and discard the changes made\n */\n if (getIsScheduledDateInPast(newRelease)) {\n setReleaseType(release.metadata.releaseType)\n setIntendedPublishAt(\n release.metadata.intendedPublishAt\n ? new Date(release.metadata.intendedPublishAt)\n : undefined,\n )\n\n toast.push({\n closable: true,\n status: 'warning',\n title: t('release.schedule-dialog.publish-date-in-past-warning'),\n })\n } else {\n setIsUpdating(true)\n void updateRelease(newRelease).finally(() => {\n setIsUpdating(false)\n })\n }\n }\n\n setOpen(false)\n }\n }, [open, release, updatedDate, releaseType, toast, t, updateRelease])\n\n useClickOutsideEvent(close, () => [\n popoverRef.current,\n buttonRef.current,\n inputRef.current,\n datePickerRef.current,\n ])\n\n const isPublishDateInPast = !!publishDate && isBefore(new Date(publishDate), new Date())\n const isReleaseScheduled = isReleaseScheduledOrScheduling(release)\n\n const publishDateLabel = useMemo(() => {\n if (release.state === 'published') {\n if (isPublishDateInPast && publishDate)\n return tRelease('dashboard.details.published-on', {\n date: getReleaseTime(release),\n })\n\n return tRelease('dashboard.details.published-asap')\n }\n\n return <ReleaseTime release={release} />\n }, [getReleaseTime, isPublishDateInPast, publishDate, release, tRelease])\n\n const handleButtonReleaseTypeChange = useCallback(\n (pickedReleaseType: ReleaseType) => {\n setReleaseType(pickedReleaseType)\n const nextPublishAt =\n pickedReleaseType === 'scheduled'\n ? (publishDate ?? startOfMinute(new Date()))\n : (publishDate ?? undefined)\n setIntendedPublishAt(nextPublishAt)\n setIsIntendedScheduleDateInPast(true)\n },\n [publishDate],\n )\n\n const handlePublishAtCalendarChange = useCallback((date: Date | null) => {\n if (!date) return\n\n const cleanDate = startOfMinute(new Date(date))\n setIsIntendedScheduleDateInPast(isBefore(cleanDate, new Date()))\n setIntendedPublishAt(cleanDate)\n }, [])\n\n const handleOnPickerClick = () => {\n if (open) close()\n else setOpen(true)\n }\n\n const tone = release.state === 'published' ? 'positive' : getReleaseTone(release)\n\n const releaseTypeIcon = useMemo(() => {\n if (isUpdating) return <Spinner size={1} data-testid=\"updating-release-spinner\" />\n if (release.state === 'published') return <PublishIcon />\n\n return <ReleaseAvatar release={release} padding={0} />\n }, [isUpdating, release])\n\n const labelContent = useMemo(\n () => (\n <Flex flex={1} gap={2} align={'center'}>\n {releaseTypeIcon}\n <span data-testid=\"release-type-label\">{publishDateLabel}</span>\n </Flex>\n ),\n [publishDateLabel, releaseTypeIcon],\n )\n\n return (\n <Popover\n content={\n <Stack space={1}>\n <TabList space={0.5}>\n <Tab\n aria-controls=\"release-timing-asap\"\n id=\"release-timing-asap-tab\"\n onClick={() => handleButtonReleaseTypeChange('asap')}\n label={t('release.type.asap')}\n selected={releaseType === 'asap'}\n />\n <Tab\n aria-controls=\"release-timing-at-time\"\n id=\"release-timing-at-time-tab\"\n onClick={() => handleButtonReleaseTypeChange('scheduled')}\n selected={releaseType === 'scheduled'}\n label={t('release.type.scheduled')}\n />\n <Tab\n aria-controls=\"release-timing-undecided\"\n id=\"release-timing-undecided-tab\"\n onClick={() => handleButtonReleaseTypeChange('undecided')}\n selected={releaseType === 'undecided'}\n label={t('release.type.undecided')}\n />\n </TabList>\n {releaseType === 'scheduled' && (\n <>\n {isIntendedScheduleDateInPast && (\n <Card margin={1} padding={2} radius={2} shadow={1} tone=\"critical\">\n <Text size={1}>{t('release.schedule-dialog.publish-date-in-past-warning')}</Text>\n </Card>\n )}\n <ReleaseDateInput\n setIsIntendedScheduleDateInPast={setIsIntendedScheduleDateInPast}\n setIntendedPublishAt={setIntendedPublishAt}\n intendedPublishAt={intendedPublishAt}\n />\n <DatePicker\n ref={datePickerRef}\n monthPickerVariant={MONTH_PICKER_VARIANT.carousel}\n calendarLabels={calendarLabels}\n selectTime\n padding={0}\n value={intendedPublishAt}\n onChange={handlePublishAtCalendarChange}\n isPastDisabled\n showTimeZone\n timeZoneScope={CONTENT_RELEASES_TIME_ZONE_SCOPE}\n />\n </>\n )}\n </Stack>\n }\n open={open}\n padding={1}\n placement=\"bottom-start\"\n ref={popoverRef}\n >\n {release.state === 'published' ? (\n <Card\n tone=\"default\"\n data-testid=\"published-release-type-label\"\n padding={2}\n style={{borderRadius: '999px'}}\n >\n {labelContent}\n </Card>\n ) : (\n <Button\n disabled={isReleaseScheduled}\n mode=\"bleed\"\n onClick={handleOnPickerClick}\n ref={buttonRef}\n tooltipProps={{\n placement: 'bottom',\n content: isReleaseScheduled && tRelease('type-picker.tooltip.scheduled'),\n }}\n selected={open}\n tone={tone}\n style={{borderRadius: '999px'}}\n data-testid=\"release-type-picker\"\n >\n {labelContent}\n </Button>\n )}\n </Popover>\n )\n}\n","const degreesToRadians = (degrees: number) => (degrees * Math.PI) / 180\n\n/**\n * This is a component that renders a progress icon based on the progress percentage\n * @param progress - The progress percentage (0-100)\n * @returns The progress icon based on the progress percentage\n */\nexport function ProgressIcon(props: {progress: number}) {\n const {progress, ...rest} = props\n\n const circlePath = partialCircle(\n 12.5,\n 12.5,\n 4.5,\n degreesToRadians(-90),\n degreesToRadians(progress * 360 - 90),\n )\n\n const d =\n circlePath.length > 0\n ? `${circlePath.map((vs) => vs.join(' ')).join(' ')} L 12.5 12.5 Z`\n : undefined\n\n return (\n <svg\n data-sanity-icon=\"progress-50\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n {d && (\n <path\n d={d}\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n )}\n <path\n d=\"M12.5 20.5C16.9183 20.5 20.5 16.9183 20.5 12.5C20.5 8.08172 16.9183 4.5 12.5 4.5C8.08172 4.5 4.5 8.08172 4.5 12.5C4.5 16.9183 8.08172 20.5 12.5 20.5Z\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nfunction partialCircle(cx: number, cy: number, r: number, start: number, end: number) {\n const length = end - start\n if (length === 0) return []\n\n const fromX = r * Math.cos(start) + cx\n const fromY = r * Math.sin(start) + cy\n const toX = r * Math.cos(end) + cx\n const toY = r * Math.sin(end) + cy\n const large = Math.abs(length) <= Math.PI ? '0' : '1'\n const sweep = length < 0 ? '0' : '1'\n\n return [\n ['M', fromX, fromY],\n ['A', r, r, 0, large, sweep, toX, toY],\n ]\n}\n","import {type DocumentInRelease} from '../tool/detail/useBundleDocuments'\nimport {isGoingToUnpublish} from './isGoingToUnpublish'\n\n/**\n * This function is used to get a cleaner and quicker validation loading state and error status for a list of documents\n * @param documents - The list of documents to get the validation loading state for\n * @returns\n */\nexport const getDocumentValidationLoading = (documents: DocumentInRelease[]) => {\n let hasError = false\n let isValidating = false\n let validatedCount = 0\n documents.forEach((doc) => {\n if (isGoingToUnpublish(doc.document)) {\n validatedCount += 1\n } else {\n const isValidated = !doc.validation.isValidating\n hasError = hasError || doc.validation.hasError\n isValidating = isValidating || doc.validation.isValidating\n if (isValidated) {\n validatedCount += 1\n }\n }\n })\n return {\n hasError,\n isValidating,\n validatedCount,\n }\n}\n","import {CheckmarkCircleIcon, ErrorOutlineIcon} from '@sanity/icons'\nimport {Card, type CardTone, Flex, Text} from '@sanity/ui'\nimport {useEffect, useMemo, useState} from 'react'\n\nimport {ProgressIcon} from '../../../../ui-components/progressIcon'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {getDocumentValidationLoading} from '../../util/getDocumentValidationLoading'\nimport {type DocumentInRelease} from './useBundleDocuments'\n\nexport function ValidationProgressIndicator({\n documents,\n layout = 'default',\n}: {\n documents: DocumentInRelease[]\n layout?: 'default' | 'minimal'\n}) {\n const totalCount = documents.length\n const {validatedCount, isValidating, hasError} = getDocumentValidationLoading(documents)\n const [showCheckmark, setShowCheckmark] = useState(false)\n // in order if the caching has already happened once and the object is already at minimal,\n // We don't want to show the whole thing again - instead we want to keep the minimal layout\n const [hasFinishedOnce, setHasFinishedOnce] = useState(false)\n const {t} = useTranslation(releasesLocaleNamespace)\n\n const isFinished = useMemo(\n () => validatedCount === totalCount && validatedCount !== 0,\n [validatedCount, totalCount],\n )\n\n // Use minimal layout if explicitly set OR if validation has finished once\n const isMinimal = layout === 'minimal' || hasFinishedOnce\n\n // Add delay when validation is finished\n // so that we can show that it's finished but then show the checkmark\n // without the text\n useEffect(() => {\n if (isFinished) {\n const timer = setTimeout(() => {\n setShowCheckmark(true)\n setHasFinishedOnce(true)\n }, 2500)\n\n return () => clearTimeout(timer)\n }\n return undefined\n }, [isFinished, showCheckmark])\n\n useEffect(() => {\n // If it's not validating, we should not be showing the checkmark\n // it is only shown after a delay set by the previous useEffect\n if (isValidating) {\n // oxlint-disable-next-line react/react-compiler\n setShowCheckmark(false)\n }\n }, [isValidating])\n\n // If it's not finished and not validating, we should not be showing anything\n // usually this happens when the release detail is first opened\n if (!isFinished && !isValidating) {\n return null\n }\n\n const tone: CardTone = isValidating\n ? 'neutral'\n : isFinished && showCheckmark && !hasError\n ? 'transparent'\n : hasError\n ? 'critical'\n : 'positive'\n\n const cardBackground = isFinished && showCheckmark && !hasError ? 'transparent' : undefined\n\n return (\n <Card\n padding={isMinimal ? 0 : 2}\n radius=\"full\"\n tone={tone}\n style={{\n background: cardBackground,\n }}\n >\n <Flex gap={2}>\n <Text size={1}>\n {isValidating ? (\n <ProgressIcon progress={validatedCount / totalCount} />\n ) : (\n <Tooltip\n content={hasError ? t('summary.errors-found') : t('summary.all-documents-validated')}\n >\n {hasError ? <ErrorOutlineIcon /> : <CheckmarkCircleIcon />}\n </Tooltip>\n )}\n </Text>\n {!showCheckmark && !isMinimal && (\n <Text muted size={1}>\n {isValidating\n ? t('summary.validating-documents', {validatedCount, totalCount})\n : hasError\n ? t('summary.all-documents-errors-found')\n : t('summary.all-documents-validated')}\n </Text>\n )}\n </Flex>\n </Card>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {ErrorOutlineIcon, PinFilledIcon, PinIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Container, Flex, Stack, Text} from '@sanity/ui'\nimport {useCallback, useEffect, useRef, useState} from 'react'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {ToneIcon} from '../../../../ui-components/toneIcon/ToneIcon'\nimport {TextWithTone} from '../../../components/textWithTone/TextWithTone'\nimport {Details} from '../../../form/components/Details'\nimport {useTranslation} from '../../../i18n'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../perspective/useSetPerspective'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../store/useReleasePermissions'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {isNotArchivedRelease} from '../../util/util'\nimport {ArchivedReleaseBanner} from './ArchivedReleaseBanner'\nimport {ReleaseDetailsEditor} from './ReleaseDetailsEditor'\nimport {ReleaseTypePicker} from './ReleaseTypePicker'\nimport {type DocumentInRelease} from './useBundleDocuments'\nimport {ValidationProgressIndicator} from './ValidationProgressIndicator'\n\nexport function ReleaseDashboardDetails({\n release,\n documents,\n}: {\n release: ReleaseDocument\n documents: DocumentInRelease[]\n}) {\n const {state} = release\n\n const releaseId = getReleaseIdFromReleaseDocumentId(release._id)\n const {checkWithPermissionGuard} = useReleasePermissions()\n const {publishRelease, schedule} = useReleaseOperations()\n\n const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const {selectedReleaseId} = usePerspective()\n const setPerspective = useSetPerspective()\n\n const isSelected = releaseId === selectedReleaseId\n const releaseFullTitle = release.metadata.title || tCore('release.placeholder-untitled-release')\n const isAtTimeRelease = release?.metadata?.releaseType === 'scheduled'\n const isReleaseOpen = state !== 'archived' && state !== 'published'\n const isActive = release.state === 'active'\n const shouldDisplayError = isActive && typeof release.error !== 'undefined'\n const [shouldDisplayPermissionWarning, setShouldDisplayPermissionWarning] = useState(false)\n const shouldDisplayWarnings = isActive && shouldDisplayPermissionWarning\n const isMounted = useRef(false)\n const {document} = useWorkspace()\n const {\n drafts: {enabled: isDraftModelEnabled},\n } = document\n useEffect(() => {\n isMounted.current = true\n\n // only run if the release is active\n if (isActive) {\n void checkWithPermissionGuard(publishRelease, release._id).then((hasPermission) => {\n if (isMounted.current) setShouldDisplayPermissionWarning(!hasPermission)\n return null\n })\n\n // if it's a release that can be scheduled, check if it can be scheduled\n if (release.metadata.intendedPublishAt && isAtTimeRelease) {\n void checkWithPermissionGuard(schedule, release._id, new Date()).then((hasPermission) => {\n if (isMounted.current) setShouldDisplayPermissionWarning(!hasPermission)\n return null\n })\n }\n }\n return () => {\n isMounted.current = false\n }\n }, [\n checkWithPermissionGuard,\n isActive,\n isAtTimeRelease,\n publishRelease,\n release._id,\n release.metadata.intendedPublishAt,\n schedule,\n ])\n\n const handlePinRelease = useCallback(() => {\n if (isSelected) {\n setPerspective(isDraftModelEnabled ? 'drafts' : 'published')\n } else {\n setPerspective(releaseId)\n }\n }, [isDraftModelEnabled, isSelected, releaseId, setPerspective])\n\n return (\n <Container width={3}>\n <Stack padding={3} paddingY={[3, 3, 4, 5]}>\n <Flex gap={1} align=\"center\">\n {isReleaseOpen && (\n <Button\n icon={isSelected ? PinFilledIcon : PinIcon}\n tooltipProps={{\n placement: 'top',\n content: isSelected\n ? tRelease('dashboard.details.unpin-release')\n : tRelease('dashboard.details.pin-release'),\n }}\n mode=\"bleed\"\n onClick={handlePinRelease}\n radius=\"full\"\n selected={isSelected}\n aria-label={\n isSelected\n ? `${tRelease('dashboard.details.unpin-release')}: \"${releaseFullTitle}\"`\n : `${tRelease('dashboard.details.pin-release')}: \"${releaseFullTitle}\"`\n }\n aria-live=\"assertive\"\n />\n )}\n {isNotArchivedRelease(release) && <ReleaseTypePicker release={release} />}\n <ValidationProgressIndicator documents={documents} />\n {shouldDisplayError && (\n <Flex gap={2} padding={2} data-testid=\"release-error-details\">\n <Text size={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n </Text>\n <TextWithTone size={1} tone=\"critical\">\n {isAtTimeRelease\n ? tRelease('failed-schedule-title')\n : tRelease('failed-publish-title')}\n </TextWithTone>\n </Flex>\n )}\n {shouldDisplayWarnings && (\n <Flex gap={2} padding={2} data-testid=\"release-permission-error-details\">\n <Text size={1}>\n <ToneIcon icon={WarningOutlineIcon} tone=\"caution\" />\n </Text>\n <TextWithTone size={1} tone=\"caution\">\n {tRelease('permission-missing-title')}\n </TextWithTone>\n </Flex>\n )}\n </Flex>\n <Box padding={2}>\n <ReleaseDetailsEditor release={release} />\n </Box>\n {shouldDisplayError && (\n <Card padding={4} radius={4} tone=\"critical\">\n <Flex gap={3}>\n <Text size={1}>\n <ErrorOutlineIcon />\n </Text>\n <Stack space={4}>\n <Text size={1} weight=\"semibold\">\n {isAtTimeRelease\n ? tRelease('failed-schedule-title')\n : tRelease('failed-publish-title')}\n </Text>\n <Details title={tRelease('error-details-title')}>\n <Text size={1} accent>\n <code>{release.error?.message}</code>\n </Text>\n </Details>\n </Stack>\n </Flex>\n </Card>\n )}\n\n {shouldDisplayWarnings && (\n <Card padding={4} radius={4} tone=\"caution\">\n <Flex gap={3}>\n <Text size={1}>\n <WarningOutlineIcon />\n </Text>\n <Stack space={3}>\n <Text size={1}>{tRelease('permission-missing-title')}</Text>\n <Text size={1} muted>\n {tRelease('permission-missing-description')}\n </Text>\n </Stack>\n </Flex>\n </Card>\n )}\n\n {!isReleaseOpen && <ArchivedReleaseBanner release={release} />}\n </Stack>\n </Container>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {ErrorOutlineIcon, PublishIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {Button, Dialog, MenuItem, type TooltipProps} from '../../../../../ui-components'\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../../perspective/useSetPerspective'\nimport {useWorkspace} from '../../../../studio/workspace'\nimport {PublishedRelease} from '../../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isReleaseDocument} from '../../../index'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../../store/useReleasePermissions'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\n\ninterface ReleasePublishAllButtonProps {\n release: ReleaseDocument\n documents: DocumentInRelease[]\n disabled?: boolean\n isMenuItem?: boolean\n onConfirmDialogOpen?: () => void\n onConfirmDialogClose?: () => void\n}\n\nexport const ReleasePublishAllButton = ({\n release,\n documents,\n disabled,\n isMenuItem = false,\n onConfirmDialogOpen,\n onConfirmDialogClose,\n}: ReleasePublishAllButtonProps) => {\n const toast = useToast()\n const {publishRelease} = useReleaseOperations()\n const {checkWithPermissionGuard} = useReleasePermissions()\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const perspective = usePerspective()\n const setPerspective = useSetPerspective()\n const telemetry = useTelemetry()\n const {document} = useWorkspace()\n const {\n drafts: {enabled: isDraftModelEnabled},\n } = document\n\n const [publishBundleStatus, setPublishBundleStatus] = useState<'idle' | 'confirm' | 'publishing'>(\n 'idle',\n )\n\n const [publishPermission, setPublishPermission] = useState<boolean>(false)\n\n const isValidatingDocuments = documents.some(({validation}) => validation.isValidating)\n const hasDocumentValidationErrors = documents.some(({validation}) => validation.hasError)\n\n const isPublishButtonDisabled =\n disabled || isValidatingDocuments || hasDocumentValidationErrors || !publishPermission\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n\n void checkWithPermissionGuard(publishRelease, release._id).then((hasPermission) => {\n if (isMounted.current) setPublishPermission(hasPermission)\n })\n\n return () => {\n isMounted.current = false\n }\n }, [checkWithPermissionGuard, publishRelease, release._id, release.metadata.intendedPublishAt])\n\n const handleConfirmPublishAll = useCallback(async () => {\n if (!release) return\n\n // Workaround for React Compiler not yet fully supporting try/catch/finally syntax\n const run = async () => {\n setPublishBundleStatus('publishing')\n await publishRelease(release._id)\n telemetry.log(PublishedRelease)\n if (\n isReleaseDocument(perspective.selectedPerspective) &&\n perspective.selectedPerspective?._id === release._id\n ) {\n setPerspective(isDraftModelEnabled ? 'drafts' : 'published')\n }\n }\n try {\n await run()\n } catch (publishingError) {\n toast.push({\n status: 'error',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"toast.publish.error\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n error: publishingError.message,\n }}\n />\n </Text>\n ),\n })\n console.error(publishingError)\n }\n onConfirmDialogClose?.()\n setPublishBundleStatus('idle')\n }, [\n release,\n publishRelease,\n telemetry,\n perspective.selectedPerspective,\n setPerspective,\n isDraftModelEnabled,\n toast,\n t,\n tCore,\n onConfirmDialogClose,\n ])\n\n const confirmPublishDialog = useMemo(() => {\n if (publishBundleStatus === 'idle') return null\n\n return (\n <Dialog\n id=\"confirm-publish-dialog\"\n data-testid=\"confirm-publish-dialog\"\n header={t('publish-dialog.confirm-publish.title')}\n onClose={() => {\n onConfirmDialogClose?.()\n setPublishBundleStatus('idle')\n }}\n footer={{\n confirmButton: {\n text: t('action.publish-all-documents'),\n tone: 'positive',\n onClick: handleConfirmPublishAll,\n loading: publishBundleStatus === 'publishing',\n disabled: publishBundleStatus === 'publishing',\n },\n }}\n >\n <Text muted size={1}>\n {\n <Translate\n t={t}\n i18nKey=\"publish-dialog.confirm-publish-description\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n releaseDocumentsLength: documents.length,\n count: documents.length,\n }}\n />\n }\n </Text>\n </Dialog>\n )\n }, [\n publishBundleStatus,\n t,\n handleConfirmPublishAll,\n release.metadata.title,\n tCore,\n documents.length,\n onConfirmDialogClose,\n ])\n\n const publishTooltipContent = useMemo(() => {\n if (!hasDocumentValidationErrors && !isValidatingDocuments && publishPermission) return null\n\n const tooltipText = () => {\n if (documents.length === 0) {\n return t('publish-action.validation.no-documents')\n }\n\n if (!publishPermission) {\n return t('publish-dialog.validation.no-permission')\n }\n\n if (isValidatingDocuments) {\n return t('publish-dialog.validation.loading')\n }\n\n if (hasDocumentValidationErrors) {\n return t('publish-dialog.validation.error')\n }\n\n return null\n }\n\n // TODO: this is a duplicate of logic in ReleaseScheduleButton\n return (\n <Text muted size={1}>\n <Flex align=\"center\" gap={3} padding={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone={isValidatingDocuments ? 'default' : 'critical'} />\n {tooltipText()}\n </Flex>\n </Text>\n )\n }, [documents.length, hasDocumentValidationErrors, isValidatingDocuments, publishPermission, t])\n\n const handleInitialPublish = useCallback(() => {\n setPublishBundleStatus('confirm')\n onConfirmDialogOpen?.()\n }, [onConfirmDialogOpen])\n\n const sharedProps = useMemo(\n () => ({\n icon: PublishIcon,\n disabled:\n isPublishButtonDisabled || publishBundleStatus === 'publishing' || documents.length === 0,\n text: t('action.publish-all-documents'),\n handleOnClick: handleInitialPublish,\n tooltipProps: {\n disabled: !isPublishButtonDisabled,\n content: publishTooltipContent,\n placement: 'bottom',\n } as Partial<TooltipProps>,\n }),\n [\n documents.length,\n handleInitialPublish,\n isPublishButtonDisabled,\n publishBundleStatus,\n publishTooltipContent,\n t,\n ],\n )\n\n return (\n <>\n {isMenuItem ? (\n <MenuItem\n tooltipProps={sharedProps.tooltipProps}\n icon={sharedProps.icon}\n disabled={sharedProps.disabled}\n text={sharedProps.text}\n onClick={sharedProps.handleOnClick}\n data-testid=\"publish-all-button-menu-item\"\n />\n ) : (\n <Button\n tooltipProps={sharedProps.tooltipProps}\n icon={sharedProps.icon}\n disabled={sharedProps.disabled}\n text={sharedProps.text}\n onClick={sharedProps.handleOnClick}\n loading={publishBundleStatus === 'publishing'}\n data-testid=\"publish-all-button\"\n tone=\"positive\"\n />\n )}\n {confirmPublishDialog}\n </>\n )\n}\n","/**\n * Polyfill for `Promise.withResolvers()`, which is not yet widely supported.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers\n * @returns An object containing the promise, resolve, and reject functions.\n * @internal\n */\nexport function promiseWithResolvers<T>() {\n let resolve!: (value: T | PromiseLike<T>) => void\n let reject!: (reason?: unknown) => void\n const promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n return {promise, resolve, reject}\n}\n","import {type SanityDocument} from '@sanity/types'\nimport {useCallback, useEffect, useMemo, useRef} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, forkJoin, from, map, type Observable, of, switchMap} from 'rxjs'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {getTransactionsLogs} from '../../../../../store/translog/getTransactionsLogs'\nimport {getPublishedId} from '../../../../../util/draftUtils'\nimport {promiseWithResolvers} from '../../../../../util/promiseWithResolvers'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../../util/releasesClient'\nimport {type DocumentInRelease} from '../../../detail/useBundleDocuments'\n\nexport type RevertDocument = SanityDocument & {\n _system?: {\n delete: true\n }\n}\n\ntype RevertDocuments = RevertDocument[]\n\ntype DocumentRevertStates = RevertDocuments | null | undefined\n\nexport const useDocumentRevertStates = (releaseDocuments: DocumentInRelease[]) => {\n const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n const observableClient = client.observable\n const transactionId = releaseDocuments[0]?.document._rev\n const {dataset} = client.config()\n\n const resultPromiseRef = useRef<Promise<DocumentRevertStates> | null>(null)\n const resolvedDocumentRevertStatesPromiseRef = useRef<\n ((value: DocumentRevertStates) => void) | null\n >(null)\n const resolvedDocumentRevertStatesResultRef = useRef<DocumentRevertStates | null>(null)\n\n useEffect(() => {\n if (!resultPromiseRef.current) {\n const {promise, resolve} = promiseWithResolvers<DocumentRevertStates>()\n\n resultPromiseRef.current = promise\n resolvedDocumentRevertStatesPromiseRef.current = resolve\n }\n }, [])\n\n const memoDocumentRevertStates = useMemo(() => {\n if (!releaseDocuments.length) return of(undefined)\n\n const publishedDocuments = releaseDocuments.map(({document}) => ({\n ...document,\n _id: getPublishedId(document._id),\n }))\n\n const documentRevertStates$: Observable<RevertDocuments | null | undefined> = from(\n getTransactionsLogs(\n client,\n publishedDocuments.map((document) => document._id),\n {\n toTransaction: transactionId,\n // reverse order so most recent publish before release is second element\n // (first is the release publish itself)\n reverse: true,\n },\n ),\n ).pipe(\n map((transactions) => {\n const getDocumentTransaction = (docId: string) =>\n transactions.find(({documentIDs}) => documentIDs.includes(docId))?.id\n\n return publishedDocuments.map((document) => ({\n docId: document._id,\n revisionId: getDocumentTransaction(document._id),\n }))\n }),\n switchMap((docRevisionPairs) => {\n if (!docRevisionPairs) return of(undefined)\n\n return forkJoin(\n docRevisionPairs.map(({docId, revisionId}) => {\n if (!revisionId) {\n const {publishedDocumentExists, ...unpublishDocument} =\n publishedDocuments.find((document) => document._id === docId) || {}\n\n return of({\n ...unpublishDocument,\n _system: {delete: true},\n } as RevertDocument)\n }\n\n return observableClient\n .request<{\n documents: RevertDocuments\n }>({\n url: `/data/history/${dataset}/documents/${docId}?revision=${revisionId}`,\n })\n .pipe(\n map(({documents: [revertDocument]}) => revertDocument),\n catchError((err) => {\n console.error(`Error fetching document ${docId}:`, err)\n return of(undefined)\n }),\n )\n }),\n )\n }),\n map((results) => results?.filter((result) => result !== undefined)),\n catchError((err) => {\n console.error('Error in document revert states pipeline:', err)\n return of(undefined)\n }),\n )\n\n return documentRevertStates$\n }, [client, releaseDocuments, transactionId, observableClient, dataset])\n\n const documentRevertStatesResult = useObservable(memoDocumentRevertStates, null)\n\n useEffect(() => {\n if (documentRevertStatesResult !== null) {\n resolvedDocumentRevertStatesResultRef.current = documentRevertStatesResult\n\n // Resolve promise if it exists\n if (resolvedDocumentRevertStatesPromiseRef.current) {\n resolvedDocumentRevertStatesPromiseRef.current(documentRevertStatesResult)\n resolvedDocumentRevertStatesPromiseRef.current = null\n resultPromiseRef.current = null // Reset resultPromiseRef for future fetches\n }\n }\n }, [documentRevertStatesResult])\n\n return useCallback(() => {\n if (resolvedDocumentRevertStatesResultRef.current) {\n // Return resolved value immediately if available\n return Promise.resolve(resolvedDocumentRevertStatesResultRef.current)\n }\n\n return resultPromiseRef.current\n }, [])\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, from, map, of} from 'rxjs'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {getTransactionsLogs} from '../../../../../store/translog/getTransactionsLogs'\nimport {getPublishedId} from '../../../../../util/draftUtils'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../../util/releasesClient'\nimport {type DocumentInRelease} from '../../../detail/useBundleDocuments'\n\nexport const usePostPublishTransactions = (documents: DocumentInRelease[]) => {\n const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n const transactionId = documents[0]?.document._rev\n\n const memoHasPostPublishTransactions = useMemo(() => {\n if (!documents.length) return of(false)\n\n return from(\n getTransactionsLogs(\n client,\n documents.map(({document}) => getPublishedId(document._id)),\n {\n fromTransaction: transactionId,\n // publish transaction + at least one post publish transaction\n limit: 2,\n },\n ),\n ).pipe(\n // the transaction of published is also returned\n // so post publish transactions will result in more than 1 transaction\n map((transactions) => transactions.length > 1),\n catchError(() => of(null)),\n )\n }, [client, documents, transactionId])\n\n return useObservable(memoHasPostPublishTransactions, null)\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {RestoreIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Box, Card, Checkbox, Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback, useEffect, useRef, useState} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button} from '../../../../../../ui-components/button/Button'\nimport {Dialog} from '../../../../../../ui-components/dialog'\nimport {Translate, useTranslation} from '../../../../../i18n'\nimport {RevertRelease} from '../../../../__telemetry__/releases.telemetry'\nimport {useReleasesUpsell} from '../../../../contexts/upsell/useReleasesUpsell'\nimport {releasesLocaleNamespace} from '../../../../i18n'\nimport {isReleaseLimitError} from '../../../../store/isReleaseLimitError'\nimport {useReleaseOperations} from '../../../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../../../store/useReleasePermissions'\nimport {createReleaseId} from '../../../../util/createReleaseId'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../../util/getReleaseIdFromReleaseDocumentId'\nimport {getReleaseDefaults} from '../../../../util/util'\nimport {type DocumentInRelease} from '../../../detail/useBundleDocuments'\nimport {useDocumentRevertStates} from './useDocumentRevertStates'\nimport {usePostPublishTransactions} from './usePostPublishTransactions'\n\ninterface ReleasePublishAllButtonProps {\n release: ReleaseDocument\n documents: DocumentInRelease[]\n disabled?: boolean\n}\n\ntype RevertReleaseStatus = 'idle' | 'confirm' | 'reverting'\n\nconst ConfirmReleaseDialog = ({\n revertReleaseStatus,\n documents,\n setRevertReleaseStatus,\n release,\n}: {\n revertReleaseStatus: RevertReleaseStatus\n documents: DocumentInRelease[]\n setRevertReleaseStatus: (status: RevertReleaseStatus) => void\n release: ReleaseDocument\n}) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const releaseDisplayTitle =\n release.metadata.title || tCore('release.placeholder-untitled-release')\n const hasPostPublishTransactions = usePostPublishTransactions(documents)\n const getDocumentRevertStates = useDocumentRevertStates(documents)\n const [stageNewRevertRelease, setStageNewRevertRelease] = useState(true)\n const toast = useToast()\n const telemetry = useTelemetry()\n const {revertRelease} = useReleaseOperations()\n const router = useRouter()\n\n const navigateToRevertRelease = useCallback(\n (revertReleaseId: string) => () =>\n router.navigate({releaseId: getReleaseIdFromReleaseDocumentId(revertReleaseId)}),\n [router],\n )\n\n const handleRevertRelease = useCallback(async () => {\n setRevertReleaseStatus('reverting')\n const documentRevertStates = await getDocumentRevertStates()\n\n const revertReleaseId = createReleaseId()\n\n // The run().catch().finally() syntax instead of try/catch/finally is because of the React Compiler not fully supporting the syntax yet\n const run = async () => {\n if (!documentRevertStates) {\n throw new Error('Unable to find documents to revert')\n }\n\n await revertRelease(\n revertReleaseId,\n documentRevertStates,\n {\n title: t('revert-release.title', {\n title: releaseDisplayTitle,\n }),\n description: t('revert-release.description', {\n title: releaseDisplayTitle,\n }),\n releaseType: 'asap',\n },\n stageNewRevertRelease ? 'staged' : 'immediate',\n )\n\n if (stageNewRevertRelease) {\n telemetry.log(RevertRelease, {revertType: 'staged'})\n toast.push({\n closable: true,\n status: 'success',\n title: (\n <Text muted size={1}>\n <Translate\n components={{\n Link: () => (\n <Text\n size={1}\n weight=\"medium\"\n data-as=\"a\"\n onClick={navigateToRevertRelease(revertReleaseId)}\n style={{\n cursor: 'pointer',\n marginBottom: '0.5rem',\n display: 'flex',\n }}\n data-testid=\"revert-stage-success-link\"\n >\n {t('toast.revert-stage.success-link')}\n </Text>\n ),\n }}\n t={t}\n i18nKey=\"toast.revert-stage.success\"\n values={{\n title: releaseDisplayTitle,\n }}\n />\n </Text>\n ),\n })\n } else {\n telemetry.log(RevertRelease, {revertType: 'immediate'})\n\n toast.push({\n closable: true,\n status: 'success',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"toast.immediate-revert.success\"\n values={{\n title: releaseDisplayTitle,\n }}\n />\n </Text>\n ),\n })\n }\n }\n await run()\n .catch((revertError) => {\n if (isReleaseLimitError(revertError)) return\n\n toast.push({\n status: 'error',\n title: (\n <Text muted size={1}>\n <Translate t={t} i18nKey=\"toast.revert.error\" values={{error: revertError.message}} />\n </Text>\n ),\n })\n console.error(revertError)\n })\n .finally(() => {\n setRevertReleaseStatus('idle')\n })\n }, [\n setRevertReleaseStatus,\n getDocumentRevertStates,\n revertRelease,\n t,\n releaseDisplayTitle,\n stageNewRevertRelease,\n telemetry,\n toast,\n navigateToRevertRelease,\n ])\n\n const description =\n documents.length > 1\n ? 'revert-dialog.confirm-revert-description_other'\n : 'revert-dialog.confirm-revert-description_one'\n\n return (\n <Dialog\n id=\"confirm-revert-dialog\"\n header={t('revert-dialog.confirm-revert.title', {\n title: releaseDisplayTitle,\n })}\n onClose={() => setRevertReleaseStatus('idle')}\n footer={{\n confirmButton: {\n text: t(\n stageNewRevertRelease\n ? 'action.create-revert-release'\n : 'action.immediate-revert-release',\n ),\n tone: 'positive',\n onClick: handleRevertRelease,\n loading: revertReleaseStatus === 'reverting',\n disabled: revertReleaseStatus === 'reverting',\n },\n }}\n >\n <Text muted size={1}>\n {\n <Translate\n t={t}\n i18nKey={description}\n values={{\n releaseDocumentsLength: documents.length,\n }}\n />\n }\n </Text>\n <Flex align=\"center\" paddingTop={4}>\n <Checkbox\n onChange={() => setStageNewRevertRelease((current) => !current)}\n id=\"immediate-revert-release\"\n style={{display: 'block'}}\n checked={!stageNewRevertRelease}\n />\n <Box flex={1} paddingLeft={3}>\n <Text muted size={1}>\n <label htmlFor=\"immediate-revert-release\">\n {t('revert-dialog.confirm-revert.stage-revert-checkbox-label')}\n </label>\n </Text>\n </Box>\n </Flex>\n {hasPostPublishTransactions && !stageNewRevertRelease && (\n <Card marginTop={4} padding={3} radius={2} shadow={1} tone=\"critical\">\n <Text muted size={1}>\n {t('revert-dialog.confirm-revert.warning-card')}\n </Text>\n </Card>\n )}\n </Dialog>\n )\n}\n\nexport const ReleaseRevertButton = ({\n release,\n documents,\n disabled,\n}: ReleasePublishAllButtonProps) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const {guardWithReleaseLimitUpsell} = useReleasesUpsell()\n const [revertReleaseStatus, setRevertReleaseStatus] = useState<RevertReleaseStatus>('idle')\n const [isPendingGuardResponse, setIsPendingGuardResponse] = useState<boolean>(false)\n const {createRelease} = useReleaseOperations()\n const {checkWithPermissionGuard} = useReleasePermissions()\n const [hasCreatePermission, setHasCreatePermission] = useState<boolean | null>(null)\n\n const handleMoveToConfirmStatus = useCallback(async () => {\n setIsPendingGuardResponse(true)\n await guardWithReleaseLimitUpsell(() => setRevertReleaseStatus('confirm'))\n setIsPendingGuardResponse(false)\n }, [guardWithReleaseLimitUpsell])\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n void checkWithPermissionGuard(createRelease, getReleaseDefaults()).then((hasPermissions) => {\n if (isMounted.current) setHasCreatePermission(hasPermissions)\n })\n\n return () => {\n isMounted.current = false\n }\n }, [checkWithPermissionGuard, createRelease])\n\n return (\n <>\n <Button\n icon={RestoreIcon}\n onClick={handleMoveToConfirmStatus}\n text={t('action.revert')}\n tone=\"critical\"\n tooltipProps={{\n disabled: hasCreatePermission === true,\n content: tCore('release.action.permission.error'),\n }}\n /**\n * This is an immature assertion of permissions\n * The permissions needed to revert are:\n * Permissions to create a request (implemented)\n * @todo Permissions to create each schema type within the release (not implemented)\n */\n disabled={isPendingGuardResponse || !hasCreatePermission || disabled}\n data-testid=\"revert-button\"\n />\n {revertReleaseStatus !== 'idle' && (\n <ConfirmReleaseDialog\n release={release}\n documents={documents}\n revertReleaseStatus={revertReleaseStatus}\n setRevertReleaseStatus={setRevertReleaseStatus}\n />\n )}\n </>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {ClockIcon, ErrorOutlineIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Card, Flex, Stack, Text, useToast} from '@sanity/ui'\nimport {format} from 'date-fns/format'\nimport {isBefore} from 'date-fns/isBefore'\nimport {isValid} from 'date-fns/isValid'\nimport {parse} from 'date-fns/parse'\nimport {startOfMinute} from 'date-fns/startOfMinute'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {Button, Dialog, MenuItem, type TooltipProps} from '../../../../../ui-components'\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {MONTH_PICKER_VARIANT} from '../../../../components/inputs/DateInputs/calendar/Calendar'\nimport {type CalendarLabels} from '../../../../components/inputs/DateInputs/calendar/types'\nimport {DateTimeInput} from '../../../../components/inputs/DateInputs/DateTimeInput'\nimport {TimeZoneButton} from '../../../../components/timeZone/timeZoneButton/TimeZoneButton'\nimport TimeZoneButtonElementQuery from '../../../../components/timeZone/timeZoneButton/TimeZoneButtonElementQuery'\nimport {getCalendarLabels} from '../../../../form/inputs/DateInputs/utils'\nimport {useTimeZone} from '../../../../hooks/useTimeZone'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../../studio/constants'\nimport {ScheduledRelease} from '../../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isReleaseScheduledOrScheduling} from '../../../index'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../../store/useReleasePermissions'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\n\ninterface ReleaseScheduleButtonProps {\n release: ReleaseDocument\n documents: DocumentInRelease[]\n disabled?: boolean\n isMenuItem?: boolean\n onConfirmDialogOpen?: () => void\n onConfirmDialogClose?: () => void\n}\n\nexport const ReleaseScheduleButton = ({\n release,\n disabled,\n documents,\n isMenuItem = false,\n onConfirmDialogOpen,\n onConfirmDialogClose,\n}: ReleaseScheduleButtonProps) => {\n const toast = useToast()\n const {schedule, updateRelease} = useReleaseOperations()\n const {checkWithPermissionGuard} = useReleasePermissions()\n\n const [schedulePermission, setSchedulePermission] = useState<boolean>(false)\n\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const telemetry = useTelemetry()\n // in the releases tool we want timezone to be saved for releases\n const {utcToCurrentZoneDate, zoneDateToUtc, timeZone} = useTimeZone(\n CONTENT_RELEASES_TIME_ZONE_SCOPE,\n )\n const [status, setStatus] = useState<'idle' | 'confirm' | 'scheduling'>('idle')\n const [publishAt, setPublishAt] = useState<Date | undefined>()\n /**\n * This state supports the scenario of:\n * publishAt is set to a valid future date; but at time of submit it is in the past\n * Without an update on this state, ReleaseScheduledButton would not rerender\n * and so date in past warning ui elements wouldn't show\n */\n const [rerenderDialog, setRerenderDialog] = useState(0)\n\n const timeZoneAdjustedPublishAt = publishAt ? utcToCurrentZoneDate(publishAt) : undefined\n\n const isValidatingDocuments = documents.some(({validation}) => validation.isValidating)\n const hasDocumentValidationErrors = documents.some(({validation}) => validation.hasError)\n const isScheduleButtonDisabled =\n disabled || isValidatingDocuments || !schedulePermission || hasDocumentValidationErrors\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n\n void checkWithPermissionGuard(schedule, release._id, new Date()).then((hasPermission) => {\n if (isMounted.current) setSchedulePermission(hasPermission)\n })\n\n return () => {\n isMounted.current = false\n }\n }, [checkWithPermissionGuard, release._id, release.metadata.intendedPublishAt, schedule])\n\n const isScheduledDateInPast = useCallback(() => {\n return isBefore(zoneDateToUtc(publishAt || new Date()), new Date())\n }, [publishAt, zoneDateToUtc])\n\n const handleConfirmSchedule = useCallback(async () => {\n if (!publishAt) return\n\n // this means that it will linely need to change the releaseType to scheduled\n if (isMenuItem) {\n const newRelease = {\n ...release,\n metadata: {\n ...release.metadata,\n releaseType: 'scheduled' as const,\n\n intendedPublishAt: publishAt.toISOString(),\n },\n }\n\n if (!isEqual(newRelease, release)) {\n void updateRelease(newRelease)\n }\n }\n\n if (isScheduledDateInPast()) {\n // rerender dialog to recalculate isScheduledDateInPast\n setRerenderDialog((cur) => cur + 1)\n return\n }\n\n // Workaround for React Compiler not yet fully supporting try/catch/finally syntax\n const run = async () => {\n setStatus('scheduling')\n await schedule(release._id, publishAt)\n telemetry.log(ScheduledRelease)\n toast.push({\n closable: true,\n status: 'info',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"toast.schedule.success\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n }}\n />\n </Text>\n ),\n })\n }\n try {\n await run()\n } catch (schedulingError) {\n toast.push({\n status: 'error',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"toast.schedule.error\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n error: schedulingError.message,\n }}\n />\n </Text>\n ),\n })\n console.error(schedulingError)\n }\n onConfirmDialogClose?.()\n setStatus('idle')\n }, [\n publishAt,\n isMenuItem,\n isScheduledDateInPast,\n release,\n updateRelease,\n schedule,\n telemetry,\n toast,\n t,\n tCore,\n onConfirmDialogClose,\n ])\n\n const calendarLabels: CalendarLabels = useMemo(() => getCalendarLabels(tCore), [tCore])\n\n const handleBundlePublishAtCalendarChange = useCallback((date: Date | null) => {\n if (!date) return\n\n setPublishAt(startOfMinute(date))\n }, [])\n\n const handleBundleInputChange = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n const date = event.currentTarget.value\n const parsedDate = zoneDateToUtc(parse(date, 'PP HH:mm', new Date()))\n\n if (isValid(parsedDate)) {\n setPublishAt(parsedDate)\n }\n },\n [zoneDateToUtc],\n )\n\n const handleOnDialogClose = useCallback(() => {\n onConfirmDialogClose?.()\n if (status !== 'scheduling') {\n setStatus('idle')\n }\n }, [onConfirmDialogClose, status])\n\n const confirmScheduleDialog = useMemo(() => {\n if (status === 'idle') return null\n\n const _isScheduledDateInPast = isScheduledDateInPast()\n\n return (\n <Dialog\n /**\n * rerenderDialog should force this function to rerun\n * since the selected scheduled date was in the future when selected\n * but at time of submit it is in the past\n */\n key={rerenderDialog}\n id=\"confirm-schedule-dialog\"\n data-testid=\"confirm-schedule-dialog\"\n header={t('schedule-dialog.confirm-title', {\n documentsLength: documents.length,\n count: documents.length,\n })}\n onClose={handleOnDialogClose}\n footer={{\n confirmButton: {\n text: t('schedule-dialog.confirm-button'),\n tone: 'default',\n onClick: handleConfirmSchedule,\n loading: status === 'scheduling',\n disabled: _isScheduledDateInPast || status === 'scheduling',\n },\n cancelButton: {\n disabled: status === 'scheduling',\n },\n }}\n >\n <Stack space={3}>\n {_isScheduledDateInPast && (\n <Card marginBottom={1} padding={2} radius={2} shadow={1} tone=\"critical\">\n <Text size={1}>{tCore('release.schedule-dialog.publish-date-in-past-warning')}</Text>\n </Card>\n )}\n <Stack space={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={2}>\n <label>\n <Text size={1} weight=\"semibold\">\n {tCore('release.schedule-dialog.select-publish-date-label')}\n </Text>\n </label>\n <TimeZoneButtonElementQuery>\n <TimeZoneButton\n tooltipContent={\n <Translate\n t={tCore}\n i18nKey={'time-zone.time-zone-tooltip-input'}\n values={{\n title: tCore('release.schedule-dialog.select-publish-date-label'),\n alternativeName: timeZone.alternativeName,\n offset: timeZone.offset,\n }}\n />\n }\n allowTimeZoneSwitch\n useElementQueries\n timeZoneScope={CONTENT_RELEASES_TIME_ZONE_SCOPE}\n />\n </TimeZoneButtonElementQuery>\n </Flex>\n <DateTimeInput\n selectTime\n monthPickerVariant={MONTH_PICKER_VARIANT.carousel}\n onChange={handleBundlePublishAtCalendarChange}\n onInputChange={handleBundleInputChange}\n value={publishAt}\n calendarLabels={calendarLabels}\n inputValue={\n timeZoneAdjustedPublishAt ? format(timeZoneAdjustedPublishAt, 'PP HH:mm') : ''\n }\n constrainSize={false}\n isPastDisabled\n timeZoneScope={CONTENT_RELEASES_TIME_ZONE_SCOPE}\n />\n </Stack>\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"schedule-dialog.confirm-description\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n count: documents.length,\n }}\n />\n </Text>\n </Stack>\n </Dialog>\n )\n }, [\n status,\n isScheduledDateInPast,\n rerenderDialog,\n t,\n publishAt,\n documents.length,\n handleOnDialogClose,\n handleConfirmSchedule,\n handleBundlePublishAtCalendarChange,\n handleBundleInputChange,\n timeZoneAdjustedPublishAt,\n calendarLabels,\n release.metadata.title,\n tCore,\n timeZone,\n ])\n\n const handleOnInitialSchedule = useCallback(() => {\n setPublishAt(\n release.metadata.intendedPublishAt\n ? new Date(release.metadata.intendedPublishAt)\n : new Date(),\n )\n setStatus('confirm')\n onConfirmDialogOpen?.()\n }, [onConfirmDialogOpen, release.metadata.intendedPublishAt])\n\n const tooltipText = useMemo(() => {\n if (documents.length === 0) {\n return t('schedule-action.validation.no-documents')\n }\n\n if (!schedulePermission) {\n return t('schedule-button-tooltip.validation.no-permission')\n }\n\n if (isValidatingDocuments) {\n return t('schedule-button-tooltip.validation.loading')\n }\n\n if (hasDocumentValidationErrors) {\n return t('schedule-button-tooltip.validation.error')\n }\n\n if (isReleaseScheduledOrScheduling(release)) {\n return t('schedule-button-tooltip.already-scheduled')\n }\n return null\n }, [\n documents.length,\n hasDocumentValidationErrors,\n isValidatingDocuments,\n release,\n schedulePermission,\n t,\n ])\n\n // TODO: this is a duplicate of logic in ReleasePublishAllButton\n const scheduleTooltipContent = useMemo(() => {\n return (\n <Text muted size={1}>\n <Flex align=\"center\" gap={3} padding={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone={isValidatingDocuments ? 'default' : 'critical'} />\n {tooltipText}\n </Flex>\n </Text>\n )\n }, [isValidatingDocuments, tooltipText])\n\n const sharedProps = useMemo(\n () => ({\n icon: ClockIcon,\n disabled: isScheduleButtonDisabled || status === 'scheduling' || documents.length === 0,\n text: t('action.schedule'),\n handleOnClick: handleOnInitialSchedule,\n tooltipProps: {\n disabled: !tooltipText,\n content: scheduleTooltipContent,\n placement: 'bottom',\n } as Partial<TooltipProps>,\n }),\n [\n documents.length,\n handleOnInitialSchedule,\n isScheduleButtonDisabled,\n scheduleTooltipContent,\n status,\n t,\n tooltipText,\n ],\n )\n\n return (\n <>\n {isMenuItem ? (\n <MenuItem\n tooltipProps={sharedProps.tooltipProps}\n icon={sharedProps.icon}\n disabled={sharedProps.disabled}\n text={sharedProps.text}\n onClick={sharedProps.handleOnClick}\n data-testid=\"schedule-button-menu-item\"\n />\n ) : (\n <Button\n tooltipProps={sharedProps.tooltipProps}\n tone=\"primary\"\n icon={sharedProps.icon}\n disabled={sharedProps.disabled}\n text={sharedProps.text}\n onClick={sharedProps.handleOnClick}\n loading={status === 'scheduling'}\n data-testid=\"schedule-button\"\n />\n )}\n {confirmScheduleDialog}\n </>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {CloseCircleIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Text, useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {Button, Dialog} from '../../../../../ui-components'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {UnscheduledRelease} from '../../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\n\ninterface ReleaseScheduleButtonProps {\n release: ReleaseDocument\n documents: DocumentInRelease[]\n disabled?: boolean\n}\n\nexport const ReleaseUnscheduleButton = ({\n release,\n disabled,\n documents,\n}: ReleaseScheduleButtonProps) => {\n const toast = useToast()\n const {unschedule} = useReleaseOperations()\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const telemetry = useTelemetry()\n const [status, setStatus] = useState<'idle' | 'confirm' | 'unscheduling'>('idle')\n\n const handleConfirmSchedule = useCallback(async () => {\n // The run().catch().finally() syntax instead of try/catch/finally is because of the React Compiler not fully supporting the syntax yet\n const run = async () => {\n setStatus('unscheduling')\n await unschedule(release._id)\n telemetry.log(UnscheduledRelease)\n }\n await run()\n .catch((schedulingError) => {\n toast.push({\n status: 'error',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"toast.unschedule.error\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n error: schedulingError.message,\n }}\n />\n </Text>\n ),\n })\n console.error(schedulingError)\n })\n .finally(() => {\n setStatus('idle')\n })\n }, [unschedule, release._id, release.metadata.title, telemetry, toast, t, tCore])\n\n const confirmScheduleDialog = useMemo(() => {\n if (status === 'idle') return null\n\n return (\n <Dialog\n id=\"confirm-unschedule-dialog\"\n header={t('unschedule-dialog.confirm-title')}\n onClose={() => status !== 'unscheduling' && setStatus('idle')}\n footer={{\n confirmButton: {\n text: t('action.unschedule'),\n tone: 'default',\n onClick: handleConfirmSchedule,\n loading: status === 'unscheduling',\n disabled: status === 'unscheduling',\n },\n cancelButton: {\n disabled: status === 'unscheduling',\n },\n }}\n >\n <Text muted size={1}>\n {\n <Translate\n t={t}\n i18nKey=\"unschedule-dialog.confirm-description\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n documentsLength: documents.length,\n count: documents.length,\n }}\n />\n }\n </Text>\n </Dialog>\n )\n }, [release.metadata.title, documents.length, handleConfirmSchedule, status, t, tCore])\n\n return (\n <>\n <Button\n icon={CloseCircleIcon}\n disabled={disabled || status === 'unscheduling'}\n text={t('action.unschedule')}\n onClick={() => setStatus('confirm')}\n loading={status === 'unscheduling'}\n data-testid=\"schedule-button\"\n />\n {confirmScheduleDialog}\n </>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {memo, type ReactNode, useEffect} from 'react'\n\nimport {GetHookCollectionState} from '../../components/hookCollection'\nimport {\n type ReleaseActionComponent,\n type ReleaseActionDescription,\n} from '../../config/releases/actions'\nimport {type DocumentInRelease} from '../tool/detail/useBundleDocuments'\n\nexport interface ReleaseActionsResolverProps {\n actions: ReleaseActionComponent[]\n release: ReleaseDocument\n documents: DocumentInRelease[]\n onActions: (actions: ReleaseActionDescription[]) => void\n children?: (props: {states: ReleaseActionDescription[]}) => ReactNode\n}\n\nconst ReleaseActionsStateHandler = memo(function ReleaseActionsStateHandler({\n states,\n onActions,\n renderChildren,\n}: {\n states: ReleaseActionDescription[]\n onActions: (actions: ReleaseActionDescription[]) => void\n renderChildren?: (props: {states: ReleaseActionDescription[]}) => ReactNode\n}) {\n useEffect(() => {\n onActions(states)\n }, [states, onActions])\n\n return renderChildren ? renderChildren({states}) : null\n})\n\n/**\n * The `ReleaseActionsResolver` component is responsible for resolving the actions for a given release.\n *\n * This component uses the `GetHookCollectionState` pattern to efficiently manage action hook states,\n * providing performance optimizations and consistent behaviour with document actions.\n *\n * @internal\n */\nexport const ReleaseActionsResolver = memo(function ReleaseActionsResolver(\n props: ReleaseActionsResolverProps,\n) {\n const {actions, release, documents, onActions, children} = props\n\n const actionProps = {\n release,\n documents,\n }\n\n return (\n <GetHookCollectionState<typeof actionProps, ReleaseActionDescription>\n hooks={actions}\n args={actionProps}\n >\n {({states}) => (\n <ReleaseActionsStateHandler\n states={states}\n onActions={onActions}\n renderChildren={children}\n />\n )}\n </GetHookCollectionState>\n )\n})\n","import {type ReleaseDocument} from '@sanity/client'\nimport {useMemo} from 'react'\n\nimport {type ReleaseActionComponent} from '../../config/releases/actions'\nimport {useSource} from '../../studio'\nimport {type DocumentInRelease} from '../tool/detail/useBundleDocuments'\n\n/**\n * Hook to get custom/configured release actions for a release\n *\n * @internal\n */\nexport function useCustomReleaseActions(\n release: ReleaseDocument,\n documents: DocumentInRelease[] = [],\n): ReleaseActionComponent[] {\n const source = useSource()\n\n const customReleaseActions = useMemo(() => {\n if (!source.releases?.actions) {\n return []\n }\n\n return source.releases.actions({\n release,\n documents,\n })\n }, [source, release, documents])\n\n return customReleaseActions\n}\n","import {Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {useTranslation} from '../../../../i18n'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type ActionResult} from './ReleaseMenuButton'\n\nexport const DuplicateReleaseToastLink = ({actionResult}: {actionResult: ActionResult}) => {\n const router = useRouter()\n const {t} = useTranslation(releasesLocaleNamespace)\n\n const navigateToDuplicateRelease = useCallback(() => {\n if (!actionResult || !('releaseId' in actionResult)) return\n\n router.navigate({releaseId: getReleaseIdFromReleaseDocumentId(actionResult.releaseId)})\n }, [actionResult, router])\n\n return (\n <Text\n size={1}\n weight=\"medium\"\n data-as=\"a\"\n onClick={navigateToDuplicateRelease}\n style={{\n cursor: 'pointer',\n marginBottom: '0.5rem',\n display: 'flex',\n }}\n data-testid=\"duplicate-release-success-link\"\n >\n {t('toast.duplicate.success-link')}\n </Text>\n )\n}\n","import {type DefinedTelemetryLog} from '@sanity/telemetry/react'\nimport {type ButtonTone} from '@sanity/ui'\n\nimport {\n ArchivedRelease,\n DeletedRelease,\n DuplicatedRelease,\n UnarchivedRelease,\n UnscheduledRelease,\n} from '../../../__telemetry__/releases.telemetry'\n\nexport type ReleaseAction =\n | 'archive'\n | 'unarchive'\n | 'delete'\n | 'unschedule'\n | 'publish'\n | 'schedule'\n | 'duplicate'\n\ninterface BaseReleaseActionsMap {\n toastSuccessI18nKey?: string\n toastFailureI18nKey?: string\n telemetry: DefinedTelemetryLog<void>\n}\n\ninterface DialogActionsMap extends BaseReleaseActionsMap {\n confirmDialog: {\n dialogId: string\n dialogHeaderI18nKey: string\n dialogDescriptionI18nKey: string\n dialogConfirmButtonI18nKey: string\n confirmButtonTone: ButtonTone\n }\n}\n\nexport const RELEASE_ACTION_MAP: Record<\n Exclude<ReleaseAction, 'schedule' | 'publish'>,\n DialogActionsMap | (BaseReleaseActionsMap & {confirmDialog: false})\n> = {\n delete: {\n confirmDialog: {\n dialogId: 'confirm-delete-dialog',\n dialogHeaderI18nKey: 'delete-dialog.confirm-delete.header',\n dialogDescriptionI18nKey: 'delete-dialog.confirm-delete-description',\n dialogConfirmButtonI18nKey: 'delete-dialog.confirm-delete-button',\n confirmButtonTone: 'critical',\n },\n toastSuccessI18nKey: 'toast.delete.success',\n toastFailureI18nKey: 'toast.delete.error',\n telemetry: DeletedRelease,\n },\n archive: {\n confirmDialog: {\n dialogId: 'confirm-archive-dialog',\n dialogHeaderI18nKey: 'archive-dialog.confirm-archive-header',\n dialogDescriptionI18nKey: 'archive-dialog.confirm-archive-description',\n dialogConfirmButtonI18nKey: 'archive-dialog.confirm-archive-button',\n confirmButtonTone: 'critical',\n },\n toastFailureI18nKey: 'toast.archive.error',\n telemetry: ArchivedRelease,\n },\n unarchive: {\n confirmDialog: false,\n toastFailureI18nKey: 'toast.unarchive.error',\n telemetry: UnarchivedRelease,\n },\n unschedule: {\n confirmDialog: false,\n toastFailureI18nKey: 'toast.unschedule.error',\n telemetry: UnscheduledRelease,\n },\n duplicate: {\n confirmDialog: {\n dialogId: 'confirm-duplicate-dialog',\n dialogHeaderI18nKey: 'duplicate-dialog.confirm-duplicate-header',\n dialogDescriptionI18nKey: 'duplicate-dialog.confirm-duplicate-description',\n dialogConfirmButtonI18nKey: 'duplicate-dialog.confirm-duplicate-button',\n confirmButtonTone: 'primary',\n },\n toastSuccessI18nKey: 'toast.duplicate.success',\n toastFailureI18nKey: 'toast.duplicate.error',\n telemetry: DuplicatedRelease,\n },\n}\n","import {ArchiveIcon, CloseCircleIcon, CopyIcon, TrashIcon, UnarchiveIcon} from '@sanity/icons'\nimport {\n type Dispatch,\n type MouseEventHandler,\n type SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {useReleaseOperations} from '../../../store'\nimport {useReleasePermissions} from '../../../store/useReleasePermissions'\nimport {getReleaseDefaults} from '../../../util/util'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\nimport {ReleasePublishAllButton} from '../releaseCTAButtons/ReleasePublishAllButton'\nimport {ReleaseScheduleButton} from '../releaseCTAButtons/ReleaseScheduleButton'\nimport {type ReleaseAction} from './releaseActions'\nimport {type ReleaseMenuButtonProps} from './ReleaseMenuButton'\n\nexport type ReleaseMenuProps = Omit<ReleaseMenuButtonProps, 'documentsCount'> & {\n disabled: boolean\n setSelectedAction: Dispatch<SetStateAction<ReleaseAction | undefined>>\n documents: DocumentInRelease[]\n}\n\nexport const ReleaseMenu = ({\n ignoreCTA,\n disabled,\n release,\n setSelectedAction,\n documents,\n}: ReleaseMenuProps) => {\n const releaseMenuDisabled = !release || disabled\n const {t} = useTranslation(releasesLocaleNamespace)\n const {archive, unarchive, deleteRelease, publishRelease, schedule, createRelease} =\n useReleaseOperations()\n const {checkWithPermissionGuard} = useReleasePermissions()\n const [hasArchivePermission, setHasArchivePermission] = useState<boolean | null>(null)\n const [hasUnarchivePermission, setHasUnarchivePermission] = useState<boolean | null>(null)\n const [hasDeletePermission, setHasDeletePermission] = useState<boolean | null>(null)\n const [hasPublishPermission, setHasPublishPermission] = useState<boolean | null>(null)\n const [hasSchedulePermission, setHasSchedulePermission] = useState<boolean | null>(null)\n const [hasDuplicatePermission, setHasDuplicatePermission] = useState<boolean | null>(null)\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n\n if (!releaseMenuDisabled) {\n if (release.state !== 'published') {\n if (release.state === 'archived') {\n void checkWithPermissionGuard(unarchive, release._id).then((hasPermission) => {\n if (isMounted.current) setHasUnarchivePermission(hasPermission)\n })\n } else {\n void checkWithPermissionGuard(archive, release._id).then((hasPermission) => {\n if (isMounted.current) setHasArchivePermission(hasPermission)\n })\n\n void checkWithPermissionGuard(publishRelease, release._id).then((hasPermission) => {\n if (isMounted.current) setHasPublishPermission(hasPermission)\n })\n void checkWithPermissionGuard(schedule, release._id, new Date()).then((hasPermission) => {\n if (isMounted.current) setHasSchedulePermission(hasPermission)\n })\n }\n void checkWithPermissionGuard(createRelease, getReleaseDefaults()).then((hasPermission) => {\n if (isMounted.current) setHasDuplicatePermission(hasPermission)\n })\n }\n\n if (release.state === 'archived' || release.state == 'published') {\n void checkWithPermissionGuard(deleteRelease, release._id).then((hasPermission) => {\n if (isMounted.current) setHasDeletePermission(hasPermission)\n })\n }\n }\n\n return () => {\n isMounted.current = false\n }\n }, [\n release._id,\n releaseMenuDisabled,\n release.state,\n checkWithPermissionGuard,\n unarchive,\n archive,\n deleteRelease,\n release.metadata.releaseType,\n publishRelease,\n schedule,\n createRelease,\n ])\n\n const handleOnInitiateAction = useCallback<MouseEventHandler<HTMLDivElement>>(\n (event) => {\n const action = event.currentTarget.getAttribute('data-value') as ReleaseAction\n\n setSelectedAction(action)\n },\n [setSelectedAction],\n )\n\n const archiveUnarchiveMenuItem = useMemo(() => {\n if (release.state === 'published') return null\n\n if (release.state === 'archived')\n return (\n <MenuItem\n key=\"unarchive\"\n data-value=\"unarchive\"\n disabled={releaseMenuDisabled || !hasUnarchivePermission}\n onClick={handleOnInitiateAction}\n icon={UnarchiveIcon}\n text={t('action.unarchive')}\n data-testid=\"unarchive-release-menu-item\"\n tooltipProps={{\n content: !hasUnarchivePermission && t('permissions.error.unarchive'),\n }}\n />\n )\n\n return (\n <MenuItem\n key=\"archive\"\n tooltipProps={{\n disabled: hasArchivePermission\n ? !['scheduled', 'scheduling'].includes(release.state) || disabled\n : false,\n content: hasArchivePermission\n ? t('action.archive.tooltip')\n : t('permissions.error.archive'),\n }}\n data-value=\"archive\"\n onClick={handleOnInitiateAction}\n icon={ArchiveIcon}\n text={t('action.archive')}\n data-testid=\"archive-release-menu-item\"\n disabled={\n releaseMenuDisabled ||\n ['scheduled', 'scheduling'].includes(release.state) ||\n !hasArchivePermission\n }\n />\n )\n }, [\n release.state,\n releaseMenuDisabled,\n hasUnarchivePermission,\n handleOnInitiateAction,\n t,\n hasArchivePermission,\n disabled,\n ])\n\n const deleteMenuItem = useMemo(() => {\n if (release.state !== 'archived' && release.state !== 'published') return null\n\n return (\n <MenuItem\n key=\"delete\"\n data-value=\"delete\"\n onClick={handleOnInitiateAction}\n disabled={releaseMenuDisabled || !hasDeletePermission}\n icon={TrashIcon}\n text={t('action.delete-release')}\n data-testid=\"delete-release-menu-item\"\n tooltipProps={{\n content: !hasDeletePermission && t('permissions.error.delete'),\n }}\n />\n )\n }, [handleOnInitiateAction, hasDeletePermission, release.state, releaseMenuDisabled, t])\n\n const unscheduleMenuItem = useMemo(() => {\n if (ignoreCTA || (release.state !== 'scheduled' && release.state !== 'scheduling')) return null\n\n return (\n <MenuItem\n key=\"unschedule\"\n data-value=\"unschedule\"\n onClick={handleOnInitiateAction}\n disabled={releaseMenuDisabled}\n icon={CloseCircleIcon}\n text={t('action.unschedule')}\n data-testid=\"unschedule-release-menu-item\"\n />\n )\n }, [handleOnInitiateAction, ignoreCTA, release.state, releaseMenuDisabled, t])\n\n const scheduleMenuItem = useMemo(() => {\n // will not return the action for scheduled releases since the main action is already schedule\n if (release.state !== 'active' || (ignoreCTA && release.metadata.releaseType === 'scheduled'))\n return null\n\n return (\n <ReleaseScheduleButton\n key=\"schedule\"\n disabled={releaseMenuDisabled || !hasSchedulePermission}\n release={release}\n documents={documents}\n isMenuItem\n onConfirmDialogClose={() => setSelectedAction(undefined)}\n onConfirmDialogOpen={() => setSelectedAction('schedule')}\n />\n )\n }, [documents, hasSchedulePermission, ignoreCTA, release, releaseMenuDisabled, setSelectedAction])\n\n const publishMenuItem = useMemo(() => {\n if (release.state !== 'active' || (ignoreCTA && release.metadata.releaseType !== 'scheduled'))\n return null\n\n return (\n <ReleasePublishAllButton\n key=\"publish\"\n release={release}\n documents={documents}\n disabled={releaseMenuDisabled || !hasPublishPermission}\n isMenuItem\n onConfirmDialogClose={() => setSelectedAction(undefined)}\n onConfirmDialogOpen={() => setSelectedAction('publish')}\n />\n )\n }, [documents, hasPublishPermission, ignoreCTA, release, releaseMenuDisabled, setSelectedAction])\n\n const duplicateMenuItem = useMemo(() => {\n if (release.state === 'published' || release.state === 'archived') {\n return null\n }\n\n return (\n <MenuItem\n key=\"duplicate\"\n data-value=\"duplicate\"\n onClick={handleOnInitiateAction}\n disabled={releaseMenuDisabled || !hasDuplicatePermission}\n icon={CopyIcon}\n text={t('action.duplicate-release')}\n data-testid=\"duplicate-release-menu-item\"\n tooltipProps={{\n content: !hasDuplicatePermission && t('permissions.error.duplicate'),\n }}\n />\n )\n }, [handleOnInitiateAction, hasDuplicatePermission, release.state, releaseMenuDisabled, t])\n\n const ActionsOrder = useMemo(() => {\n if (release.metadata.releaseType === 'scheduled') {\n return [scheduleMenuItem, publishMenuItem]\n }\n\n return [publishMenuItem, scheduleMenuItem]\n }, [release.metadata.releaseType, publishMenuItem, scheduleMenuItem])\n\n return [\n unscheduleMenuItem,\n ...ActionsOrder,\n duplicateMenuItem,\n archiveUnarchiveMenuItem,\n deleteMenuItem,\n ]\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {Card, Flex, Stack, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {ReleaseAvatar, ReleaseTitle} from '../../../components'\nimport {ReleaseTime} from '../ReleaseTime'\n\nexport function ReleasePreviewCard({release}: {release: ReleaseDocument}) {\n const {t} = useTranslation()\n\n return (\n <Card border padding={1} radius={2}>\n <Flex gap={3} padding={3}>\n <ReleaseAvatar release={release} padding={0} />\n <Stack space={2}>\n <ReleaseTitle\n title={release.metadata.title}\n fallback={t('release.placeholder-untitled-release')}\n textProps={{weight: 'medium', size: 1}}\n />\n <Text muted size={1}>\n <ReleaseTime release={release} />\n </Text>\n </Stack>\n </Flex>\n </Card>\n )\n}\n","import {type ReleaseDocument, type SingleActionResult} from '@sanity/client'\nimport {EllipsisHorizontalIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Menu, MenuDivider, Spinner, Stack, Text, useClickOutsideEvent, useToast} from '@sanity/ui'\nimport {type SetStateAction, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {RouterContext, useRouter} from 'sanity/router'\n\nimport {Button, Dialog, MenuItem, Popover} from '../../../../../ui-components'\nimport {type ReleaseActionDescription} from '../../../../config/releases/actions'\nimport {Translate, type TranslateComponentMap, useTranslation} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../../perspective/useSetPerspective'\nimport {useWorkspace} from '../../../../studio/workspace'\nimport {ReleaseActionsResolver} from '../../../components/ReleaseActionsResolver'\nimport {useReleasesUpsell} from '../../../contexts/upsell/useReleasesUpsell'\nimport {useCustomReleaseActions} from '../../../hooks/useCustomReleaseActions'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isReleaseLimitError} from '../../../store/isReleaseLimitError'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {createReleaseId} from '../../../util/createReleaseId'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\nimport {DuplicateReleaseToastLink} from './DuplicateReleaseToastLink'\nimport {RELEASE_ACTION_MAP, type ReleaseAction} from './releaseActions'\nimport {ReleaseMenu} from './ReleaseMenu'\nimport {ReleasePreviewCard} from './ReleasePreviewCard'\n\nexport type ActionResult =\n | false\n | void\n | SingleActionResult\n | {\n releaseId: string\n }\n\nconst toastActionComponents: Partial<\n Record<ReleaseAction, (actionResult: ActionResult) => TranslateComponentMap>\n> = {\n duplicate: (actionResult) => ({\n Link: () => <DuplicateReleaseToastLink actionResult={actionResult} />,\n }),\n}\n\nexport type ReleaseMenuButtonProps = {\n /** defaults to false\n * set true if release primary CTA options should not\n * be shown in the menu eg. unschedule, publish\n */\n ignoreCTA?: boolean\n release: ReleaseDocument\n documentsCount: number\n documents?: DocumentInRelease[]\n}\n\nexport const ReleaseMenuButton = ({\n ignoreCTA,\n release,\n documentsCount,\n documents,\n}: ReleaseMenuButtonProps) => {\n const toast = useToast()\n const router = useRouter()\n const {archive, unarchive, deleteRelease, unschedule, duplicateRelease} = useReleaseOperations()\n\n const [isPerformingOperation, setIsPerformingOperation] = useState(false)\n const [selectedAction, setSelectedAction] = useState<ReleaseAction>()\n const {selectedReleaseId} = usePerspective()\n const setPerspective = useSetPerspective()\n\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const releaseMenuRef = useRef<HTMLDivElement | null>(null)\n const [openPopover, setOpenPopover] = useState(false)\n\n const customActions = useCustomReleaseActions(release, documents ?? [])\n const [customActionDescriptions, setCustomActionDescriptions] = useState<\n ReleaseActionDescription[]\n >([])\n\n const handleCustomActionsUpdate = useCallback(\n (actions: Array<ReleaseActionDescription | null>) => {\n setCustomActionDescriptions(actions.filter(Boolean) as ReleaseActionDescription[])\n },\n [],\n )\n\n const releaseMenuDisabled = !release\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const telemetry = useTelemetry()\n const {guardWithReleaseLimitUpsell} = useReleasesUpsell()\n const releaseTitle = release.metadata.title || tCore('release.placeholder-untitled-release')\n const isActionPublishOrSchedule = selectedAction === 'publish' || selectedAction === 'schedule'\n const {document} = useWorkspace()\n const {\n drafts: {enabled: isDraftModelEnabled},\n } = document\n\n const handleDelete = useCallback(async () => {\n await deleteRelease(release._id)\n\n // return to release overview list now that release is deleted\n router.navigate({})\n }, [deleteRelease, release._id, router])\n\n const handleUnarchive = useCallback(async () => {\n return guardWithReleaseLimitUpsell(() => unarchive(release._id), true)\n }, [guardWithReleaseLimitUpsell, release._id, unarchive])\n\n const handleDuplicate = useCallback(async () => {\n const duplicateReleaseId = createReleaseId()\n\n await guardWithReleaseLimitUpsell(async () => {\n const releaseDocuments = documents?.map((doc) => doc.document)\n const duplicatedMetadata = {\n ...release.metadata,\n title: `${release.metadata.title} (${t('copy-suffix')})`,\n }\n return duplicateRelease(duplicateReleaseId, duplicatedMetadata, releaseDocuments)\n }, true)\n\n return {releaseId: duplicateReleaseId}\n }, [guardWithReleaseLimitUpsell, duplicateRelease, documents, release.metadata, t])\n\n const handleAction = useCallback(\n async (action: ReleaseAction) => {\n if (action === 'publish' || action === 'schedule') return\n if (releaseMenuDisabled) return\n\n const actionLookup = {\n delete: handleDelete,\n archive,\n unarchive: handleUnarchive,\n unschedule,\n duplicate: handleDuplicate,\n }\n const actionValues = RELEASE_ACTION_MAP[action]\n\n // The .catch/.finally syntax instead of try/catch/finally is because of the React Compiler not fully supporting the syntax yet\n const run = async () => {\n if (\n (action === 'archive' || action === 'delete') &&\n selectedReleaseId === getReleaseIdFromReleaseDocumentId(release._id)\n ) {\n // Reset the perspective to drafts when the release is archived or deleted\n // To avoid showing the release archived / deleted toast.\n setPerspective(isDraftModelEnabled ? 'drafts' : 'published')\n }\n setIsPerformingOperation(true)\n const actionResult = await actionLookup[action](release._id)\n\n telemetry.log(actionValues.telemetry)\n\n if (typeof actionValues.toastSuccessI18nKey !== 'undefined') {\n const toastComponents = toastActionComponents[action]?.(actionResult)\n\n toast.push({\n closable: true,\n status: 'success',\n title: (\n // toast children need access to the router\n <RouterContext.Provider value={router}>\n <Text muted size={1}>\n <Translate\n t={t}\n components={toastComponents}\n i18nKey={actionValues.toastSuccessI18nKey}\n values={{title: releaseTitle}}\n />\n </Text>\n </RouterContext.Provider>\n ),\n })\n }\n }\n await run()\n .catch((actionError) => {\n if (isReleaseLimitError(actionError)) return\n\n if (typeof actionValues.toastFailureI18nKey !== 'undefined') {\n toast.push({\n status: 'error',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey={actionValues.toastFailureI18nKey}\n values={{title: releaseTitle, error: actionError.toString()}}\n />\n </Text>\n ),\n })\n }\n console.error(actionError)\n })\n .finally(() => {\n setIsPerformingOperation(false)\n setSelectedAction(undefined)\n })\n },\n [\n releaseMenuDisabled,\n handleDelete,\n archive,\n handleUnarchive,\n unschedule,\n handleDuplicate,\n selectedReleaseId,\n release._id,\n telemetry,\n setPerspective,\n isDraftModelEnabled,\n toast,\n router,\n t,\n releaseTitle,\n ],\n )\n\n /** in some instances, immediately execute the action without requiring confirmation */\n useEffect(() => {\n if (!selectedAction || isActionPublishOrSchedule) return\n\n if (!RELEASE_ACTION_MAP[selectedAction].confirmDialog) void handleAction(selectedAction)\n }, [documentsCount, handleAction, isActionPublishOrSchedule, selectedAction])\n\n const confirmActionDialog = useMemo(() => {\n if (!selectedAction || isActionPublishOrSchedule) return null\n\n const {confirmDialog} = RELEASE_ACTION_MAP[selectedAction]\n\n if (!confirmDialog) return null\n\n return (\n <Dialog\n id={confirmDialog.dialogId}\n data-testid={confirmDialog.dialogId}\n header={t(confirmDialog.dialogHeaderI18nKey)}\n onClose={() => !isPerformingOperation && setSelectedAction(undefined)}\n padding={false}\n footer={{\n confirmButton: {\n text: t(confirmDialog.dialogConfirmButtonI18nKey),\n tone: confirmDialog.confirmButtonTone,\n onClick: () => handleAction(selectedAction),\n loading: isPerformingOperation,\n disabled: isPerformingOperation,\n },\n cancelButton: {\n disabled: isPerformingOperation,\n },\n }}\n >\n <Stack space={4} paddingX={4} paddingBottom={4}>\n <ReleasePreviewCard release={release} />\n {!!documentsCount && (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey={confirmDialog.dialogDescriptionI18nKey}\n values={{\n count: documentsCount,\n }}\n />\n </Text>\n )}\n </Stack>\n </Dialog>\n )\n }, [\n selectedAction,\n isActionPublishOrSchedule,\n t,\n isPerformingOperation,\n release,\n documentsCount,\n handleAction,\n ])\n\n const closePopover = useCallback(() => {\n setOpenPopover(false)\n }, [])\n\n const handleOnButtonClick = useCallback(() => {\n if (openPopover) closePopover()\n else setOpenPopover(true)\n }, [closePopover, openPopover])\n\n useClickOutsideEvent(\n () => {\n if (!isActionPublishOrSchedule) {\n closePopover()\n }\n },\n () => [popoverRef.current, releaseMenuRef.current],\n )\n\n const handleSetSelectedAction = useCallback(\n (action: SetStateAction<ReleaseAction | undefined>) => {\n if (!action) closePopover()\n setSelectedAction(action)\n },\n [closePopover],\n )\n\n // Create menu items for custom actions\n const customActionMenuItems = useMemo(() => {\n const handleOnActionClick = (action: ReleaseActionDescription) => () => {\n if (action.onHandle) {\n action.onHandle()\n closePopover()\n }\n }\n\n return customActionDescriptions.map((action, index) => (\n <MenuItem\n key={`custom-action-${index}`}\n icon={action.icon}\n text={action.label}\n disabled={action.disabled || isPerformingOperation}\n onClick={handleOnActionClick(action)}\n tooltipProps={action.title ? {content: action.title} : undefined}\n />\n ))\n }, [customActionDescriptions, isPerformingOperation, closePopover])\n\n const hasCustomActions = customActions.length > 0\n\n return (\n <>\n {hasCustomActions && (\n <ReleaseActionsResolver\n actions={customActions}\n release={release}\n documents={documents ?? []}\n onActions={handleCustomActionsUpdate}\n />\n )}\n <Popover\n content={\n <Menu ref={releaseMenuRef}>\n <ReleaseMenu\n ignoreCTA={ignoreCTA}\n release={release}\n setSelectedAction={handleSetSelectedAction}\n disabled={isPerformingOperation}\n documents={documents ?? []}\n />\n {hasCustomActions && (\n <>\n <MenuDivider />\n {customActionMenuItems}\n </>\n )}\n </Menu>\n }\n open={openPopover}\n ref={popoverRef}\n constrainSize={false}\n fallbackPlacements={['top-end']}\n portal\n tone=\"default\"\n placement=\"bottom\"\n >\n <Button\n disabled={releaseMenuDisabled || isPerformingOperation}\n icon={isPerformingOperation ? Spinner : EllipsisHorizontalIcon}\n mode=\"bleed\"\n tooltipProps={{content: t('menu.tooltip')}}\n aria-label={t('menu.label')}\n data-testid=\"release-menu-button\"\n onClick={handleOnButtonClick}\n />\n </Popover>\n {confirmActionDialog}\n </>\n )\n}\n","import {Box, Card, Flex, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\n\nexport function StatusItem(props: {avatar?: ReactNode; text: ReactNode; testId?: string}) {\n const {avatar, text, testId} = props\n\n return (\n <Card data-testid={testId}>\n <Flex>\n {avatar && (\n <Box padding={1}>\n <div style={{margin: -1}}>{avatar}</div>\n </Box>\n )}\n <Box padding={2} paddingLeft={avatar ? 1 : undefined}>\n <Text muted size={1}>\n {text}\n </Text>\n </Box>\n </Flex>\n </Card>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {AvatarSkeleton, RelativeTime, UserAvatar} from '../../../components'\nimport {useTranslation} from '../../../i18n'\nimport {isNonNullable} from '../../../util/isNonNullable'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {StatusItem} from '../components/StatusItem'\nimport {\n isArchiveReleaseEvent,\n isCreateReleaseEvent,\n isPublishReleaseEvent,\n isUnarchiveReleaseEvent,\n type ReleaseEvent,\n} from './events/types'\n\nconst STATUS_TITLE_I18N = {\n createRelease: 'footer.status.created',\n publishRelease: 'footer.status.published',\n archiveRelease: 'footer.status.archived',\n unarchiveRelease: 'footer.status.unarchived',\n}\nexport function ReleaseStatusItems({\n events,\n release,\n}: {\n events: ReleaseEvent[]\n release: ReleaseDocument\n}) {\n const {t} = useTranslation(releasesLocaleNamespace)\n const footerEvents = useMemo(() => {\n const createEvent = events.find(isCreateReleaseEvent)\n const extraEvent = events.find(\n (event) =>\n isPublishReleaseEvent(event) ||\n isArchiveReleaseEvent(event) ||\n isUnarchiveReleaseEvent(event),\n )\n return [createEvent, extraEvent].filter(isNonNullable)\n }, [events])\n\n if (!footerEvents.length) {\n return (\n <Flex flex={1} gap={1}>\n <StatusItem\n avatar={<AvatarSkeleton $size={0} />}\n text={\n <>\n {t(STATUS_TITLE_I18N.createRelease)}{' '}\n <RelativeTime time={release._createdAt} useTemporalPhrase minimal />\n </>\n }\n />\n </Flex>\n )\n }\n return (\n <Flex flex={1} gap={1}>\n {footerEvents.map((event) => (\n <StatusItem\n key={event.id}\n testId={`status-${event.type}`}\n avatar={event.author && <UserAvatar size={0} user={event.author} />}\n text={\n <>\n {t(STATUS_TITLE_I18N[event.type])}{' '}\n <RelativeTime time={event.timestamp} useTemporalPhrase minimal />\n </>\n }\n />\n ))}\n </Flex>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {Card, Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {isReleaseScheduledOrScheduling} from '../../index'\nimport {ReleasePublishAllButton} from '../components/releaseCTAButtons/ReleasePublishAllButton'\nimport {ReleaseRevertButton} from '../components/releaseCTAButtons/ReleaseRevertButton/ReleaseRevertButton'\nimport {ReleaseScheduleButton} from '../components/releaseCTAButtons/ReleaseScheduleButton'\nimport {ReleaseUnscheduleButton} from '../components/releaseCTAButtons/ReleaseUnscheduleButton'\nimport {ReleaseMenuButton} from '../components/ReleaseMenuButton/ReleaseMenuButton'\nimport {type ReleaseEvent} from './events/types'\nimport {ReleaseStatusItems} from './ReleaseStatusItems'\nimport {type DocumentInRelease} from './useBundleDocuments'\n\nexport function ReleaseDashboardFooter(props: {\n documents: DocumentInRelease[]\n release: ReleaseDocument\n events: ReleaseEvent[]\n}) {\n const {documents, release, events} = props\n\n const releaseActionButton = useMemo(() => {\n if (release.state === 'archived') return null\n\n if (isReleaseScheduledOrScheduling(release)) {\n return (\n <ReleaseUnscheduleButton\n release={release}\n documents={documents}\n disabled={!documents.length}\n />\n )\n }\n\n if (release.state === 'active') {\n if (release.metadata.releaseType === 'scheduled') {\n return (\n <ReleaseScheduleButton\n release={release}\n documents={documents}\n disabled={!documents.length}\n />\n )\n }\n\n if (release.metadata.releaseType === 'asap') {\n return (\n <ReleasePublishAllButton\n release={release}\n documents={documents}\n disabled={!documents.length}\n />\n )\n }\n }\n\n if (release.state === 'published') {\n return (\n <ReleaseRevertButton release={release} documents={documents} disabled={!documents.length} />\n )\n }\n\n return null\n }, [documents, release])\n\n return (\n <Card flex=\"none\">\n <Card borderTop marginX={2} style={{opacity: 0.6}} />\n\n <Flex padding={3}>\n <Flex flex={1} gap={1}>\n <ReleaseStatusItems events={events} release={release} />\n </Flex>\n\n <Flex flex=\"none\" gap={1} data-testid=\"release-dashboard-footer-actions\">\n {releaseActionButton}\n <ReleaseMenuButton\n release={release}\n documentsCount={documents.length}\n documents={documents}\n ignoreCTA={release.metadata.releaseType !== 'undecided'}\n />\n </Flex>\n </Flex>\n </Card>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {LinkIcon, ShareIcon, TargetIcon, TextIcon} from '@sanity/icons'\nimport {type DefinedTelemetryLog, useTelemetry} from '@sanity/telemetry/react'\nimport {Menu, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button, MenuButton, MenuItem} from '../../../../ui-components'\nimport {useStudioUrl} from '../../../hooks/useStudioUrl'\nimport {useTranslation} from '../../../i18n'\nimport {\n ReleaseIdCopied,\n ReleaseLinkCopied,\n ReleaseTitleCopied,\n} from '../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\n\ninterface CopyReleaseActionsProps {\n release: ReleaseDocument\n}\n\nexport function CopyReleaseActions(props: CopyReleaseActionsProps) {\n const {release} = props\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const telemetry = useTelemetry()\n const toast = useToast()\n const {resolvePathFromState} = useRouter()\n const {buildIntentUrl} = useStudioUrl()\n\n const releaseId = getReleaseIdFromReleaseDocumentId(release._id)\n const title = release.metadata.title || tCore('release.placeholder-untitled-release')\n\n const copyToClipboard = useCallback(\n async (text: string, event: DefinedTelemetryLog<void>, toastKey: string) => {\n await navigator.clipboard.writeText(text)\n telemetry.log(event)\n toast.push({\n id: toastKey,\n status: 'info',\n title: t(`toast.${toastKey}.success`),\n })\n },\n [t, telemetry, toast],\n )\n\n const handleCopyReleaseLink = useCallback(async () => {\n const releasePath = resolvePathFromState({releaseId})\n const url = buildIntentUrl(releasePath)\n\n await copyToClipboard(url, ReleaseLinkCopied, 'copy-release-link')\n }, [buildIntentUrl, copyToClipboard, releaseId, resolvePathFromState])\n\n const handleCopyReleaseId = useCallback(async () => {\n await copyToClipboard(releaseId, ReleaseIdCopied, 'copy-release-id')\n }, [copyToClipboard, releaseId])\n\n const handleCopyReleaseTitle = useCallback(async () => {\n await copyToClipboard(title, ReleaseTitleCopied, 'copy-release-title')\n }, [copyToClipboard, title])\n\n return (\n <MenuButton\n id=\"copy-release-actions\"\n button={\n <Button\n data-testid=\"copy-release-actions-button\"\n icon={ShareIcon}\n mode=\"bleed\"\n tooltipProps={{content: t('action.copy-release.label')}}\n />\n }\n menu={\n <Menu>\n <MenuItem\n icon={LinkIcon}\n onClick={handleCopyReleaseLink}\n text={t('action.copy-release-link.label')}\n />\n <MenuItem\n icon={TargetIcon}\n onClick={handleCopyReleaseId}\n text={t('action.copy-release-id.label')}\n />\n <MenuItem\n icon={TextIcon}\n onClick={handleCopyReleaseTitle}\n text={t('action.copy-release-title.label')}\n />\n </Menu>\n }\n popover={{placement: 'bottom-end'}}\n />\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {ChevronRightIcon, RestoreIcon} from '@sanity/icons'\nimport {\n Box,\n // oxlint-disable-next-line no-restricted-imports\n Button, // Custom button with a different textWeight, consider adding textWeight to the shared\n Flex,\n Text,\n} from '@sanity/ui'\nimport {type Dispatch, type SetStateAction, useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {GROUP_SEARCH_PARAM_KEY} from '../overview/queryParamUtils'\nimport {CopyReleaseActions} from './CopyReleaseActions'\nimport {type ReleaseInspector} from './ReleaseDetail'\n\nexport function ReleaseDashboardHeader(props: {\n inspector: ReleaseInspector | undefined\n release: ReleaseDocument\n setInspector: Dispatch<SetStateAction<ReleaseInspector | undefined>>\n}) {\n const {inspector, release, setInspector} = props\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const title = release.metadata.title || tCore('release.placeholder-untitled-release')\n const router = useRouter()\n\n const handleNavigateToReleasesList = useCallback(() => {\n const isReleaseOpen = release.state !== 'archived' && release.state !== 'published'\n\n router.navigate({\n _searchParams: isReleaseOpen ? undefined : [[GROUP_SEARCH_PARAM_KEY, 'archived']],\n })\n }, [release.state, router])\n\n const handleActivityClick = useCallback(() => {\n setInspector((prev) => (prev === 'activity' ? undefined : 'activity'))\n }, [setInspector])\n\n return (\n <Flex align=\"flex-start\">\n <Flex flex={1} align=\"center\" style={{minWidth: 0}}>\n <Flex flex=\"none\">\n <Button\n mode=\"bleed\"\n onClick={handleNavigateToReleasesList}\n text={t('overview.title')}\n textWeight=\"regular\"\n padding={2}\n data-testid=\"back-to-releases-button\"\n />\n </Flex>\n <Box paddingY={2} flex=\"none\">\n <Text size={1}>\n <ChevronRightIcon />\n </Text>\n </Box>\n <Box padding={2} style={{minWidth: 0, maxWidth: '300px'}}>\n <Text\n size={1}\n weight=\"semibold\"\n textOverflow=\"ellipsis\"\n style={release.metadata.title ? undefined : {opacity: 0.5}}\n >\n {title}\n </Text>\n </Box>\n </Flex>\n\n <Flex flex=\"none\" gap={2}>\n <CopyReleaseActions release={release} />\n <Button\n icon={RestoreIcon}\n mode=\"bleed\"\n onClick={handleActivityClick}\n padding={2}\n selected={inspector === 'activity'}\n space={2}\n text={t('dashboard.details.activity')}\n />\n </Flex>\n </Flex>\n )\n}\n","import {type SanityDocument} from '@sanity/client'\nimport {LayerProvider, PortalProvider} from '@sanity/ui'\n\nimport {SearchPopover} from '../../../studio/components/navbar/search/components/SearchPopover'\nimport {SearchProvider} from '../../../studio/components/navbar/search/contexts/search/SearchProvider'\n\nexport type AddedDocument = Pick<SanityDocument, '_id' | '_type' | 'title'> &\n Partial<SanityDocument>\n\nexport function AddDocumentSearch({\n open,\n onClose,\n releaseId,\n idsInRelease,\n}: {\n open: boolean\n onClose: (document?: AddedDocument) => void\n releaseId: string\n idsInRelease: string[]\n}): React.JSX.Element {\n return (\n <LayerProvider zOffset={1}>\n <SearchProvider disabledDocumentIds={idsInRelease} canDisableAction>\n <PortalProvider>\n <SearchPopover\n onClose={onClose}\n onItemSelect={onClose}\n open={open}\n previewPerspective={[releaseId]}\n disableIntentLink\n />\n </PortalProvider>\n </SearchProvider>\n </LayerProvider>\n )\n}\n","import {isGoingToUnpublish} from '../../util/isGoingToUnpublish'\nimport {type BundleDocumentRow} from './ReleaseSummary'\nimport {type DocumentInRelease} from './useBundleDocuments'\n\nexport type DocumentFilterType = 'all' | 'added' | 'changed' | 'unpublished' | 'errors'\n\nexport interface DocumentActionConfig {\n key: 'added' | 'changed' | 'unpublished'\n tone: 'positive' | 'caution' | 'critical'\n labelKey: string\n}\n\nexport interface FilterTabConfig {\n key: DocumentFilterType\n labelKey: string\n tone: 'default' | 'positive' | 'caution' | 'critical'\n}\n\nconst DOCUMENT_ACTION_CONFIGS: DocumentActionConfig[] = [\n {\n key: 'added',\n tone: 'positive',\n labelKey: 'table-body.action.add',\n },\n {\n key: 'changed',\n tone: 'caution',\n labelKey: 'table-body.action.change',\n },\n {\n key: 'unpublished',\n tone: 'critical',\n labelKey: 'table-body.action.unpublish',\n },\n]\n\nexport const FILTER_TAB_CONFIGS: FilterTabConfig[] = [\n {key: 'all', labelKey: 'filter-tab.all', tone: 'default'},\n ...DOCUMENT_ACTION_CONFIGS,\n {key: 'errors', labelKey: 'filter-tab.errors', tone: 'critical'},\n]\n\nexport type ActionCounts = Record<'added' | 'changed' | 'unpublished' | 'errors', number>\n\n/**\n * Counts documents by their action type and validation errors\n */\nexport function countDocumentsByAction(\n documents: (DocumentInRelease | BundleDocumentRow)[],\n): ActionCounts {\n return documents.reduce<ActionCounts>(\n (acc, doc) => {\n const actionType = getDocumentActionType(doc)\n if (actionType) {\n acc[actionType]++\n }\n if (doc.validation.hasError && !doc.isPending) {\n acc.errors++\n }\n return acc\n },\n {added: 0, changed: 0, unpublished: 0, errors: 0},\n )\n}\n\n/**\n * Checks if a document matches the given filter type\n */\nexport function documentMatchesFilter(\n doc: DocumentInRelease | BundleDocumentRow,\n filter: DocumentFilterType,\n): boolean {\n if (filter === 'all') return true\n if (filter === 'errors') return doc.validation.hasError && !doc.isPending\n return getDocumentActionType(doc) === filter\n}\n\n/**\n * Determines the action type for a document based on its state\n */\nexport function getDocumentActionType(\n document: DocumentInRelease | BundleDocumentRow,\n): DocumentActionConfig['key'] | null {\n if (!document.document || document.isPending) {\n return null\n }\n\n const willBeUnpublished = isGoingToUnpublish(document.document)\n if (willBeUnpublished) {\n return 'unpublished'\n }\n\n if (document.document.publishedDocumentExists) {\n return 'changed'\n }\n\n return 'added'\n}\n\nexport function getReleaseDocumentActionConfig(\n actionType: DocumentActionConfig['key'],\n): DocumentActionConfig | undefined {\n return DOCUMENT_ACTION_CONFIGS.find(({key}) => key === actionType)\n}\n","import {type ReleaseState} from '@sanity/client'\nimport {Box, Container, Flex, Skeleton, TabList} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {Tab} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {\n countDocumentsByAction,\n type DocumentFilterType,\n FILTER_TAB_CONFIGS,\n type FilterTabConfig,\n} from '../releaseDocumentActions'\nimport {type DocumentInRelease} from '../useBundleDocuments'\n\ninterface ReleaseDocumentFilterTabsProps {\n documents: DocumentInRelease[]\n releaseState: ReleaseState\n isLoading?: boolean\n activeFilter: DocumentFilterType\n onFilterChange: (filter: DocumentFilterType) => void\n}\n\nexport function ReleaseDocumentFilterTabs({\n documents,\n releaseState,\n isLoading = false,\n activeFilter,\n onFilterChange,\n}: ReleaseDocumentFilterTabsProps) {\n const {t} = useTranslation(releasesLocaleNamespace)\n\n // Hide filter tabs for archived and published releases (early return for perf)\n if (releaseState === 'archived' || releaseState === 'published') {\n return null\n }\n\n if (isLoading) {\n return (\n <Container width={3}>\n <Box padding={3}>\n <Flex align=\"center\" gap={2}>\n {FILTER_TAB_CONFIGS.filter((config) => config.key !== 'errors').map((config) => (\n <Skeleton\n key={`loading-skeleton-${config.key}`}\n animated\n style={{width: '70px', height: '32px'}}\n radius={2}\n />\n ))}\n </Flex>\n </Box>\n </Container>\n )\n }\n\n if (documents.length === 0) {\n return null\n }\n\n return (\n <ReleaseDocumentFilterTabsInner\n documents={documents}\n activeFilter={activeFilter}\n onFilterChange={onFilterChange}\n t={t}\n />\n )\n}\n\ninterface ReleaseDocumentFilterTabsInnerProps {\n documents: DocumentInRelease[]\n activeFilter: DocumentFilterType\n onFilterChange: (filter: DocumentFilterType) => void\n t: ReturnType<typeof useTranslation>['t']\n}\n\nfunction ReleaseDocumentFilterTabsInner({\n documents,\n activeFilter,\n onFilterChange,\n t,\n}: ReleaseDocumentFilterTabsInnerProps) {\n const counts = useMemo(() => countDocumentsByAction(documents), [documents])\n\n const getTabLabel = (config: FilterTabConfig): string => {\n const label = t(config.labelKey)\n if (config.key === 'all') {\n return label\n }\n const count = counts[config.key]\n return `${label} (${count})`\n }\n\n const getTabTone = (config: FilterTabConfig): 'default' | 'positive' | 'caution' | 'critical' => {\n // Errors tab always uses critical tone for visibility (both selected and unselected)\n if (config.key === 'errors') {\n return 'critical'\n }\n // Only apply action-specific tones when selected\n if (activeFilter === config.key) {\n return config.tone\n }\n return 'default'\n }\n\n return (\n <Container width={3}>\n <Box padding={3}>\n <TabList space={1}>\n {FILTER_TAB_CONFIGS.map((config) => {\n const isSelected = activeFilter === config.key\n\n // Hide tabs with zero counts (except \"All\")\n if (config.key !== 'all' && counts[config.key] === 0) {\n return null\n }\n\n return (\n <Tab\n key={config.key}\n id={`filter-tab-${config.key}`}\n aria-controls=\"document-table-card\"\n label={getTabLabel(config)}\n onClick={() => onFilterChange(config.key)}\n selected={isSelected}\n tone={getTabTone(config)}\n />\n )\n })}\n </TabList>\n </Box>\n </Container>\n )\n}\n","import {CloseIcon, UnpublishIcon} from '@sanity/icons'\nimport {Box, Card, Label, Menu, MenuDivider} from '@sanity/ui'\nimport {memo, useMemo, useState} from 'react'\n\nimport {MenuButton, MenuItem} from '../../../../../ui-components'\nimport {ContextMenuButton} from '../../../../components/contextMenuButton'\nimport {useSchema} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {useDocumentPairPermissions} from '../../../../store/grants/documentPairPermissions'\nimport {getPublishedId, getVersionFromId} from '../../../../util/draftUtils'\nimport {DiscardVersionDialog} from '../../../components'\nimport {UnpublishVersionDialog} from '../../../components/dialog/UnpublishVersionDialog'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isGoingToUnpublish} from '../../../util/isGoingToUnpublish'\nimport {type BundleDocumentRow} from '../ReleaseSummary'\n\nconst DocumentActionsInner = memo(\n function DocumentActionsInner({\n document,\n releaseTitle,\n }: {\n document: BundleDocumentRow\n releaseTitle: string | undefined\n }) {\n const [showDiscardDialog, setShowDiscardDialog] = useState(false)\n const [showUnpublishDialog, setShowUnpublishDialog] = useState(false)\n const {t: coreT} = useTranslation()\n const {t} = useTranslation(releasesLocaleNamespace)\n const isAlreadyUnpublished = isGoingToUnpublish(document.document)\n\n const publishedId = getPublishedId(document.document._id)\n const type = document.document._type\n const version = getVersionFromId(document.document._id)\n\n const [discardVersionPermission, isDiscardVersionPermissionsLoading] =\n useDocumentPairPermissions({\n id: publishedId,\n type,\n version,\n permission: 'discardVersion',\n })\n const [unpublishPermission, isUnpublishPermissionsLoading] = useDocumentPairPermissions({\n id: publishedId,\n type,\n version,\n permission: 'unpublish',\n })\n\n const isDiscardVersionActionDisabled =\n !discardVersionPermission?.granted || isDiscardVersionPermissionsLoading\n const noPermissionToUnpublish = !unpublishPermission?.granted || isUnpublishPermissionsLoading\n\n const unPublishTooltipContent = useMemo(() => {\n if (noPermissionToUnpublish) {\n return t('permissions.error.unpublish')\n }\n if (!document.document.publishedDocumentExists) {\n return t('unpublish.no-published-version')\n }\n if (isAlreadyUnpublished) {\n return t('unpublish.already-unpublished')\n }\n\n return null\n }, [\n document.document.publishedDocumentExists,\n isAlreadyUnpublished,\n noPermissionToUnpublish,\n t,\n ])\n\n const isUnpublishActionDisabled =\n noPermissionToUnpublish || !document.document.publishedDocumentExists || isAlreadyUnpublished\n\n return (\n <>\n <Card tone=\"default\" display=\"flex\">\n <MenuButton\n id=\"document-actions\"\n button={<ContextMenuButton />}\n menu={\n <Menu>\n <MenuItem\n text={coreT('release.action.discard-version')}\n icon={CloseIcon}\n onClick={() => setShowDiscardDialog(true)}\n disabled={isDiscardVersionActionDisabled}\n tooltipProps={{\n disabled: !isDiscardVersionActionDisabled,\n content: t('permissions.error.discard-version'),\n }}\n />\n <MenuDivider />\n <Box padding={3} paddingBottom={2}>\n <Label size={1}>{t('menu.group.when-releasing')}</Label>\n </Box>\n <MenuItem\n text={t('action.unpublish')}\n icon={UnpublishIcon}\n disabled={isUnpublishActionDisabled}\n tooltipProps={{\n disabled: !isUnpublishActionDisabled,\n content: unPublishTooltipContent,\n }}\n onClick={() => setShowUnpublishDialog(true)}\n />\n </Menu>\n }\n />\n </Card>\n {showDiscardDialog && (\n <DiscardVersionDialog\n isGoingToUnpublish={isGoingToUnpublish(document.document)}\n onClose={() => setShowDiscardDialog(false)}\n documentId={document.document._id}\n documentType={document.document._type}\n fromPerspective={releaseTitle || t('release-placeholder.title')}\n />\n )}\n {showUnpublishDialog && (\n <UnpublishVersionDialog\n onClose={() => setShowUnpublishDialog(false)}\n documentVersionId={document.document._id}\n documentType={document.document._type}\n />\n )}\n </>\n )\n },\n (prev, next) => prev.document.memoKey === next.document.memoKey,\n)\n\nexport const DocumentActions = memo(function GuardedDocumentActions(props: {\n document: BundleDocumentRow\n releaseTitle: string | undefined\n}) {\n const schema = useSchema()\n const type = schema.get(props.document.document._type)\n const {t} = useTranslation()\n if (!type) {\n return (\n <ContextMenuButton\n disabled\n tooltipProps={{\n content: t('document.type.not-found', {type: props.document.document._type}),\n }}\n />\n )\n }\n\n return <DocumentActionsInner {...props} />\n})\n","import {type TransactionLogEventWithEffects} from '@sanity/types'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {useClient} from '../../../../hooks'\nimport {getTransactionsLogs} from '../../../../store/translog/getTransactionsLogs'\nimport {getVersionId} from '../../../../util'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../util/releasesClient'\n\nconst historyCache: Record<string, {transactions: TransactionLogEventWithEffects[]}> =\n Object.create(null)\n\nexport type DocumentHistory = {\n history: TransactionLogEventWithEffects[]\n createdBy: string\n lastEditedBy: string\n editors: string[]\n}\n\n// Add as a concurrency limiter to avoid 429s when many rows mount at once\n// This happens in incredibly large releases with many documents\n// 10 was the highest number I was able to run before getting consistent 429s\nlet activeHistoryStreams = 0\nconst pendingHistoryResolvers: Array<() => void> = []\nasync function acquireHistorySlot(maxConcurrent = 10): Promise<void> {\n if (activeHistoryStreams >= maxConcurrent) {\n await new Promise<void>((resolve) => pendingHistoryResolvers.push(resolve))\n }\n activeHistoryStreams += 1\n}\nfunction releaseHistorySlot(): void {\n activeHistoryStreams = Math.max(0, activeHistoryStreams - 1)\n const next = pendingHistoryResolvers.shift()\n if (next) next()\n}\n\n// Fetch history for a single document version within a release\nexport function useReleaseHistory(\n releaseDocumentId: string | undefined,\n releaseId: string,\n documentRevision?: string,\n): {\n documentHistory?: DocumentHistory\n collaborators: string[]\n loading: boolean\n} {\n const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n const [history, setHistory] = useState<TransactionLogEventWithEffects[] | null>(null)\n\n const versionId = useMemo(() => {\n if (!releaseDocumentId || !releaseId) return ''\n return getVersionId(releaseDocumentId, releaseId)\n }, [releaseDocumentId, releaseId])\n\n const cancelledRef = useRef(false)\n\n const fetchAndParse = useCallback(async (): Promise<void> => {\n if (!versionId) {\n setHistory(null)\n return\n }\n\n const cacheKey = `${releaseDocumentId}-${documentRevision}`\n\n const cached = historyCache[cacheKey]\n if (cached) {\n setHistory(cached.transactions)\n return\n }\n\n await acquireHistorySlot()\n // The run().catch().finally() syntax instead of try/catch/finally is because of the React Compiler not fully supporting the syntax yet\n const run = async () => {\n const transactions = await getTransactionsLogs(client, versionId, {\n tag: 'sanity.studio.releases.documents.history',\n effectFormat: 'mendoza',\n excludeContent: true,\n includeIdentifiedDocumentsOnly: true,\n limit: 1,\n reverse: true,\n })\n\n if (!cancelledRef.current) {\n setHistory(transactions)\n\n historyCache[cacheKey] = {\n transactions,\n }\n }\n }\n await run()\n .catch((error) => {\n console.error('Failed to fetch or parse document history:', error)\n if (!cancelledRef.current) setHistory([])\n })\n .finally(() => {\n releaseHistorySlot()\n })\n }, [versionId, releaseDocumentId, documentRevision, client])\n\n useEffect(() => {\n cancelledRef.current = false\n // oxlint-disable-next-line react/react-compiler\n void fetchAndParse()\n return () => {\n cancelledRef.current = true\n }\n }, [fetchAndParse])\n\n return useMemo(() => {\n const collaborators: string[] = []\n if (!history || history.length === 0) {\n return {documentHistory: undefined, collaborators, loading: true}\n }\n\n const aggregated: DocumentHistory = {\n history: [],\n createdBy: '',\n lastEditedBy: '',\n editors: [],\n }\n\n history.forEach((item) => {\n const author = item.author\n if (!collaborators.includes(author)) collaborators.push(author)\n\n if (aggregated.history.length === 0) {\n aggregated.createdBy = author\n }\n\n // @ts-expect-error TransactionLogEventWithEffects has no property 'mutations' but it's returned from the API\n const isCreate = item.mutations?.some((mutation) => 'create' in mutation)\n if (isCreate) aggregated.createdBy = author\n\n if (!aggregated.editors.includes(author)) aggregated.editors.push(author)\n aggregated.lastEditedBy = author\n aggregated.history.push(item)\n })\n\n return {documentHistory: aggregated, collaborators, loading: false}\n }, [history])\n}\n","import {type ReleaseState} from '@sanity/client'\nimport {ErrorOutlineIcon} from '@sanity/icons'\nimport {Badge, Box, Flex, Text} from '@sanity/ui'\nimport {toString as pathToString} from '@sanity/util/paths'\n// oxlint-disable-next-line @sanity/i18n/no-i18next-import -- figure out how to have the linter be fine with importing types-only\nimport {type TFunction} from 'i18next'\nimport {memo, useCallback, useEffect, useRef, useState} from 'react'\nimport {IntentLink} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../../../ui-components/tooltip'\nimport {AvatarSkeleton, UserAvatar} from '../../../../components'\nimport {RelativeTime} from '../../../../components/RelativeTime'\nimport {useSchema} from '../../../../hooks'\nimport {SanityDefaultPreview} from '../../../../preview/components/SanityDefaultPreview'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {isGoingToUnpublish} from '../../../util/isGoingToUnpublish'\nimport {getReleaseDocumentIntent} from '../../components/getReleaseDocumentIntent'\nimport {ReleaseDocumentPreview} from '../../components/ReleaseDocumentPreview'\nimport {Headers} from '../../components/Table/TableHeader'\nimport {type Column, type InjectedTableProps} from '../../components/Table/types'\nimport {getDocumentActionType, getReleaseDocumentActionConfig} from '../releaseDocumentActions'\nimport {type BundleDocumentRow} from '../ReleaseSummary'\nimport {type DocumentInRelease} from '../useBundleDocuments'\nimport {useReleaseHistory} from './useReleaseHistory'\n\nconst MemoReleaseDocumentPreview = memo(\n function MemoReleaseDocumentPreview({\n item,\n releaseId,\n releaseState,\n documentRevision,\n }: {\n item: DocumentInRelease\n releaseId: string\n releaseState?: ReleaseState\n documentRevision?: string\n }) {\n const isGoingToBePublished = isGoingToUnpublish(item.document)\n\n return (\n <ReleaseDocumentPreview\n documentId={item.document._id}\n documentTypeName={item.document._type}\n releaseId={releaseId}\n releaseState={releaseState}\n documentRevision={documentRevision}\n isGoingToBePublished={isGoingToBePublished}\n />\n )\n },\n (prev, next) => prev.item.memoKey === next.item.memoKey && prev.releaseId === next.releaseId,\n)\n\n// Carries its own overflow CSS because @sanity/ui's `textOverflow` prop is inert here.\nconst TruncatedSpan = styled.span`\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`\n\n/** @internal - exported for unit testing only */\nexport function DocumentType({type}: {type: string}) {\n const schema = useSchema()\n const title = schema.get(type)?.title || 'Not found'\n\n const elementRef = useRef<HTMLSpanElement | null>(null)\n const [isTruncated, setIsTruncated] = useState(false)\n\n const checkTruncation = useCallback(() => {\n const element = elementRef.current\n if (element) setIsTruncated(element.scrollWidth > element.clientWidth)\n }, [])\n\n // A callback ref measures on attach, avoiding the race where a useEffect fires before the\n // ref is populated. The returned cleanup runs when the node detaches.\n const measureRef = useCallback(\n (element: HTMLSpanElement | null) => {\n elementRef.current = element\n if (!element) return undefined\n\n checkTruncation()\n\n const observer = new ResizeObserver(checkTruncation)\n observer.observe(element)\n\n // The late font swap widens the text but not the column-locked box, so the\n // ResizeObserver never fires - re-measure once fonts settle.\n let cancelled = false\n void document.fonts?.ready?.then(() => {\n if (!cancelled) checkTruncation()\n })\n\n return () => {\n cancelled = true\n observer.disconnect()\n elementRef.current = null\n }\n },\n [checkTruncation],\n )\n\n // A title change rewrites the text without resizing the box, so re-measure on title change.\n useEffect(() => {\n checkTruncation()\n }, [title, checkTruncation])\n\n const textElement = (\n <Text size={1}>\n <TruncatedSpan ref={measureRef}>{title}</TruncatedSpan>\n </Text>\n )\n\n if (isTruncated) {\n return (\n <Tooltip portal content={<Text size={1}>{title}</Text>}>\n {textElement}\n </Tooltip>\n )\n }\n\n return textElement\n}\n\nconst MemoDocumentType = memo(DocumentType, (prev, next) => prev.type === next.type)\n\nconst documentActionColumn: (t: TFunction<'releases'>) => Column<BundleDocumentRow> = (t) => ({\n id: 'action',\n width: null,\n style: {minWidth: 100},\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.BasicHeader text={t('table-header.action')} />\n </Flex>\n ),\n cell: ({cellProps, datum}) => {\n const actionBadge = () => {\n const actionType = getDocumentActionType(datum)\n if (!actionType) return null\n\n const documentActionConfig = getReleaseDocumentActionConfig(actionType)\n if (!documentActionConfig) return null\n\n return (\n <Badge\n radius={2}\n tone={documentActionConfig.tone}\n data-testid={`${actionType}-badge-${datum.document._id}`}\n >\n {t(documentActionConfig.labelKey)}\n </Badge>\n )\n }\n\n return (\n <Flex align=\"center\" {...cellProps}>\n <Box paddingX={2}>{actionBadge()}</Box>\n </Flex>\n )\n },\n})\n\nexport const getDocumentTableColumnDefs: (\n releaseId: string,\n releaseState: ReleaseState,\n t: TFunction<'releases'>,\n) => Column<BundleDocumentRow>[] = (releaseId, releaseState, t) => [\n /**\n * Hiding action for archived and published releases of v1.0\n * This will be added once Events API has reverse order lookup supported\n */\n ...(releaseState === 'archived' || releaseState === 'published' ? [] : [documentActionColumn(t)]),\n {\n id: 'document._type',\n // Header and body rows are independent flexboxes, so a content-sized column (width: null)\n // settles at different widths in each and misaligns. A fixed width keeps them in sync.\n width: 150,\n sorting: true,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.type')} {...props} />\n </Flex>\n ),\n cell: ({cellProps, datum}) => (\n <Flex align=\"center\" {...cellProps}>\n <Box paddingX={2} style={{minWidth: 0}}>\n {!datum.isLoading && <MemoDocumentType type={datum.document._type} />}\n </Box>\n </Flex>\n ),\n },\n {\n id: 'search',\n width: null,\n style: {minWidth: 'min(50%, calc(100vw - 80px))', maxWidth: 'min(50%, calc(100vw - 80px))'},\n sortTransform(value) {\n return (\n String(\n value.document?.title || value.document?.name || value.document?._id,\n ).toLowerCase() || 0\n )\n },\n header: (props) => (\n <Headers.TableHeaderSearch {...props} placeholder={t('search-documents-placeholder')} />\n ),\n cell: ({cellProps, datum}) => (\n <Box {...cellProps} flex={1} padding={1} paddingRight={2} sizing=\"border\">\n {datum.isPending || datum.isLoading ? (\n <SanityDefaultPreview isPlaceholder />\n ) : (\n <MemoReleaseDocumentPreview\n item={datum}\n releaseId={releaseId}\n releaseState={releaseState}\n documentRevision={datum.document._rev}\n />\n )}\n </Box>\n ),\n },\n {\n id: 'document._updatedAt',\n sorting: true,\n width: 130,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.edited')} {...props} />\n </Flex>\n ),\n cell: (props) => <UpdatedAtCell {...props} releaseDocumentId={releaseId} />,\n },\n\n {\n id: 'validation',\n sorting: false,\n width: 50,\n header: ({headerProps}) => (\n <Flex {...headerProps} paddingY={3} sizing=\"border\">\n <Headers.BasicHeader text={''} />\n </Flex>\n ),\n cell: ({cellProps, datum}) => {\n if (datum.isLoading) return null\n\n const errors = datum.validation.validation.filter(\n (validation) => validation.level === 'error',\n )\n const validationErrorCount = errors.length\n\n // Deep-link to the first field-level error (fall back to the first error). The\n // existing params.path -> field-focus plumbing in DocumentPaneProvider scrolls to\n // and focuses the field when the document opens.\n const firstError = errors.find((error) => error.path.length > 0) ?? errors[0]\n const focusPath = firstError ? pathToString(firstError.path) : undefined\n const intent = getReleaseDocumentIntent({\n documentId: datum.document._id,\n documentTypeName: datum.document._type,\n releaseId,\n releaseState,\n documentRevision: datum.document._rev,\n path: focusPath,\n })\n const errorLabel = t(\n validationErrorCount === 1\n ? 'document-validation.error_one'\n : 'document-validation.error_other',\n {count: validationErrorCount},\n )\n\n return (\n <Flex {...cellProps} flex={1} padding={1} justify=\"center\" align=\"center\" sizing=\"border\">\n {datum.validation.hasError && (\n <Tooltip\n portal\n placement=\"bottom-end\"\n content={\n <Text muted size={1}>\n <Flex align={'center'} gap={3} padding={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n {errorLabel}\n </Flex>\n </Text>\n }\n >\n <Text size={1}>\n <IntentLink\n intent=\"edit\"\n params={intent.params}\n searchParams={intent.searchParams}\n aria-label={errorLabel}\n data-testid={`validation-error-link-${datum.document._id}`}\n >\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n </IntentLink>\n </Text>\n </Tooltip>\n )}\n </Flex>\n )\n },\n },\n]\n\nfunction UpdatedAtCell({\n cellProps,\n datum,\n releaseDocumentId,\n}: {\n cellProps: InjectedTableProps\n datum: BundleDocumentRow & {isLoading?: boolean}\n releaseDocumentId: string\n}) {\n const {document, isLoading} = datum\n const bundleId = getReleaseIdFromReleaseDocumentId(releaseDocumentId)\n const historyDocumentId =\n datum.isPending || document?._id?.endsWith('-pending') ? undefined : document?._id\n const {documentHistory} = useReleaseHistory(historyDocumentId, bundleId, document?._rev)\n\n return (\n <Flex\n {...cellProps}\n align=\"center\"\n paddingX={2}\n paddingY={3}\n style={{minWidth: 130}}\n sizing=\"border\"\n >\n <Flex align=\"center\" gap={2}>\n {(isLoading || !documentHistory?.lastEditedBy) && <AvatarSkeleton $size={0} animated />}\n {!isLoading && document._updatedAt && (\n <>\n {documentHistory?.lastEditedBy && (\n <UserAvatar size={0} user={documentHistory.lastEditedBy} />\n )}\n <Text muted size={1}>\n <RelativeTime time={document._updatedAt} useTemporalPhrase minimal />\n </Text>\n </>\n )}\n </Flex>\n </Flex>\n )\n}\n","/**\n * Extracts a searchable string from a field value, handling various data types\n * @param value - The field value to extract text from\n * @param depth - Current recursion depth\n * @param visited - Array of visited objects thath ave been proceeded so far\n * @returns A string representation suitable for search\n */\nexport function extractSearchableText(\n value: unknown,\n depth: number = 0,\n visited: Array<unknown> = [],\n): string {\n if (typeof value === 'undefined' || value === null) return ''\n\n // Limit recursion depth to avoid going too deeply into a nested structure\n if (depth > 3) return ''\n\n // Handle primitive types\n if (typeof value === 'string') return value\n if (typeof value === 'number') return value.toString()\n\n // Handle Portable Text\n if (Array.isArray(value)) {\n return value\n .map((item) => {\n if (typeof item === 'object' && item.children && item._type === 'block') {\n return item.children\n .map((child: {text: string}) => child.text)\n .join(' ')\n .trim()\n }\n // If there are nested arrays, then we need to extract the text from the nested arrays\n if (Array.isArray(item)) {\n return extractSearchableText(item, depth + 1, visited)\n }\n\n // Handle other types (numbers, string)\n return item.toString().trim()\n })\n .filter(Boolean)\n .join(' ')\n }\n\n // Handle objects\n if (typeof value === 'object' && value !== null) {\n // Limit the number of items proceeded through the search as to avoid too deep recursion\n // that impacts performance. If the object has already been visited, then there is no need to proceed further.\n if (visited.includes(value)) return ''\n visited.push(value)\n\n // Handle localized objects (common pattern: {en: \"title\", no: \"tittel\"})\n // However, make sure that the values are not internal Sanity keys (starting with _)\n const entries = Object.entries(value)\n if (\n entries.length > 0 &&\n entries.every(([key, val]) => typeof val !== 'boolean' && !key.startsWith('_'))\n ) {\n return entries\n .map(([, val]) => extractSearchableText(val, depth + 1, visited))\n .filter(Boolean)\n .join(' ')\n }\n\n // Handle objects with specific properties (like {title: \"value\"})\n const title =\n 'title' in value && typeof value.title === 'string'\n ? value.title.toString().trim()\n : undefined\n const name =\n 'name' in value && typeof value.name === 'string' ? value.name.toString().trim() : undefined\n const text =\n 'text' in value && typeof value.text === 'string' ? value.text.toString().trim() : undefined\n\n if (title || name || text) {\n return [title, name, text].filter(Boolean).join(' ')\n }\n\n // Generic object handling - extract all string/number values\n return entries\n .filter(([key]) => !key.startsWith('_')) // Skip metadata keys\n .map(([, val]) => extractSearchableText(val, depth + 1, visited))\n .filter(Boolean)\n .join(' ')\n }\n\n return ''\n}\n","import {type SanityDocument} from '@sanity/types'\n\nimport {extractSearchableText} from './extractSearchableText'\n\n/**\n * This is a temporary way of doing the search without the previews\n * until we have it moved to the server side\n *\n * @param document - The document to search\n * @param searchTerm - The search term\n * @returns True if the document matches the search term, false otherwise\n */\nexport function searchDocumentRelease(\n document: SanityDocument & {\n publishedDocumentExists: boolean\n },\n searchTerm: string,\n) {\n // if there is no search term or the document has no title or name, return false\n if (!searchTerm || searchTerm.trim().length === 0 || (!document.title && !document.name)) {\n return false\n }\n\n const title = extractSearchableText(document.title)\n const name = extractSearchableText(document.name)\n\n const normalizedSearchTerm = searchTerm.toLowerCase().trim()\n const normalizedTitle = title.toLowerCase()\n const normalizedName = name.toLowerCase()\n\n const hasTitle = normalizedTitle.trim().length > 0\n const hasName = normalizedName.trim().length > 0\n\n // Create a combined searchable text from both title and name\n const combinedText = `${normalizedTitle} ${normalizedName}`\n\n // Split search term into words for more flexible matching\n const searchWords = normalizedSearchTerm.split(/\\s+/).filter((word) => word.length > 0)\n\n // Check if all search words are found in either title, name, or combined text\n const allWordsMatch = searchWords.every(\n (word) =>\n (hasTitle && normalizedTitle.includes(word)) ||\n (hasName && normalizedName.includes(word)) ||\n combinedText.includes(word),\n )\n\n // Also check if the document name/title is contained within the search term\n const documentInSearchTerm =\n (hasName && normalizedSearchTerm.includes(normalizedName)) ||\n (hasTitle && normalizedSearchTerm.includes(normalizedTitle))\n\n return allWordsMatch || documentInSearchTerm\n}\n","import {type ReleaseDocument, type SanityDocument} from '@sanity/client'\nimport {AddIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Card, Container, Flex, Stack, Text, useToast} from '@sanity/ui'\nimport {type CSSProperties, useCallback, useEffect, useMemo, useState} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {getVersionId} from '../../../util/draftUtils'\nimport {getDocumentVariantType} from '../../../util/getDocumentVariantType'\nimport {isCardinalityOneRelease} from '../../../util/releaseUtils'\nimport {AddedVersion} from '../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {Table} from '../components/Table/Table'\nimport {AddDocumentSearch, type AddedDocument} from './AddDocumentSearch'\nimport {ReleaseDocumentFilterTabs} from './components/ReleaseDocumentFilterTabs'\nimport {DocumentActions} from './documentTable/DocumentActions'\nimport {getDocumentTableColumnDefs} from './documentTable/DocumentTableColumnDefs'\nimport {searchDocumentRelease} from './documentTable/searchDocumentRelease'\nimport {type DocumentFilterType, documentMatchesFilter} from './releaseDocumentActions'\nimport {type DocumentInRelease} from './useBundleDocuments'\n\nexport type DocumentInReleaseDetail = DocumentInRelease & {\n // TODO: Get this value from the document, it can be calculated by checking if there is a corresponding document with no version attached\n isAdded?: boolean\n}\nexport type BundleDocumentRow = DocumentInReleaseDetail\n\nexport interface ReleaseSummaryProps {\n documents: DocumentInRelease[]\n release: ReleaseDocument\n isLoading?: boolean\n}\n\nconst FULL_HEIGHT_STYLE: CSSProperties = {height: '100%'}\n\nconst SCROLL_CONTAINER_STYLE: CSSProperties = {\n overflow: 'auto',\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n}\n\nconst FIT_CONTENT_STYLE: CSSProperties = {minWidth: 'fit-content', height: '100%'}\n\nconst isBundleDocumentRow = (\n maybeBundleDocumentRow: unknown,\n): maybeBundleDocumentRow is BundleDocumentRow =>\n !!maybeBundleDocumentRow &&\n typeof maybeBundleDocumentRow === 'object' &&\n 'memoKey' in maybeBundleDocumentRow &&\n 'document' in maybeBundleDocumentRow &&\n 'validation' in maybeBundleDocumentRow\n\nexport function ReleaseSummary(props: ReleaseSummaryProps) {\n const {documents, isLoading = false, release} = props\n const [scrollContainerRef, setScrollContainerRef] = useState<HTMLDivElement | null>(null)\n const toast = useToast()\n const {createVersion} = useReleaseOperations()\n const telemetry = useTelemetry()\n\n const [openAddDocumentDialog, setAddDocumentDialog] = useState(false)\n const [pendingAddedDocument, setPendingAddedDocument] = useState<BundleDocumentRow[]>([])\n const [activeFilter, setActiveFilter] = useState<DocumentFilterType>('all')\n\n const {t} = useTranslation(releasesLocaleNamespace)\n\n const releaseId = getReleaseIdFromReleaseDocumentId(release._id)\n\n const renderRowActions = useCallback(\n (rowProps: {datum: BundleDocumentRow | unknown}) => {\n if (release.state !== 'active') return null\n if (!isBundleDocumentRow(rowProps.datum)) return null\n if (rowProps.datum.isPending) return null\n\n return <DocumentActions document={rowProps.datum} releaseTitle={release.metadata.title} />\n },\n [release.metadata.title, release.state],\n )\n\n const documentTableColumnDefs = useMemo(\n () => getDocumentTableColumnDefs(release._id, release.state, t),\n [release._id, release.state, t],\n )\n\n const handleAddDocumentClick = useCallback(() => setAddDocumentDialog(true), [])\n\n const filterRows = useCallback(\n (data: DocumentInRelease[], searchTerm: string) => {\n // this is a temporary way of doing the search without the previews\n // until we have it moved to the server side\n return data.filter((doc) => {\n const matchesSearch = searchTerm ? searchDocumentRelease(doc.document, searchTerm) : true\n return matchesSearch && documentMatchesFilter(doc, activeFilter)\n })\n },\n [activeFilter],\n )\n\n const closeAddDialog = useCallback(\n async (documentToAdd?: AddedDocument) => {\n setAddDocumentDialog(false)\n if (!documentToAdd) return\n\n const versionDocumentId = getVersionId(documentToAdd._id, releaseId)\n const pendingAddedDocumentId = `${versionDocumentId}-pending`\n\n const pendingDocumentRow: DocumentInReleaseDetail = {\n memoKey: versionDocumentId,\n validation: {\n isValidating: false,\n validation: [],\n hasError: false,\n },\n document: {\n ...(documentToAdd as SanityDocument),\n _id: pendingAddedDocumentId,\n publishedDocumentExists: false,\n },\n isPending: true,\n }\n\n setPendingAddedDocument((prev) => [...prev, pendingDocumentRow])\n\n try {\n await createVersion(releaseId, documentToAdd._id)\n\n const origin = getDocumentVariantType(documentToAdd._id)\n\n telemetry.log(AddedVersion, {\n documentOrigin: origin,\n })\n } catch (error) {\n setPendingAddedDocument((prev) =>\n prev.filter(({document}) => document._id !== pendingAddedDocumentId),\n )\n\n toast.push({\n id: `add-version-to-release-${versionDocumentId}`,\n closable: true,\n status: 'error',\n title: t('toast.create-version.error', {error: error.message}),\n })\n }\n },\n [createVersion, releaseId, t, telemetry, toast],\n )\n\n useEffect(() => {\n const documentsNoLongerPending: string[] = []\n\n pendingAddedDocument?.forEach((pendingDocument) => {\n // once pending added document has been received by bundle store\n if (\n documents.find(({document}) => `${document._id}-pending` === pendingDocument.document._id)\n ) {\n documentsNoLongerPending.push(pendingDocument.document._id)\n }\n })\n\n if (documentsNoLongerPending.length)\n // cleanup all resolved added documents\n // oxlint-disable-next-line react/react-compiler\n setPendingAddedDocument((prev) =>\n prev.filter(({document}) => !documentsNoLongerPending.includes(document._id)),\n )\n }, [documents, pendingAddedDocument, t, toast])\n\n const tableData = useMemo(\n () => (pendingAddedDocument.length ? [...documents, ...pendingAddedDocument] : documents),\n [documents, pendingAddedDocument],\n )\n\n const isCardinalityOne = isCardinalityOneRelease(release)\n const hasNoDocuments = !isLoading && documents.length === 0\n\n if (isCardinalityOne && hasNoDocuments) {\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n padding={5}\n style={FULL_HEIGHT_STYLE}\n data-testid=\"cardinality-one-empty-state\"\n >\n <Stack space={3} style={{textAlign: 'center', maxWidth: '300px'}}>\n <Text size={1} weight=\"semibold\">\n {t('summary.no-documents-cardinality-one.title')}\n </Text>\n <Text size={1} muted>\n {t('summary.no-documents-cardinality-one.description')}\n </Text>\n </Stack>\n </Flex>\n )\n }\n\n return (\n <Flex direction=\"column\" style={FULL_HEIGHT_STYLE}>\n <ReleaseDocumentFilterTabs\n documents={tableData}\n releaseState={release.state}\n isLoading={isLoading}\n activeFilter={activeFilter}\n onFilterChange={setActiveFilter}\n />\n <Card\n ref={setScrollContainerRef}\n data-testid=\"document-table-card\"\n flex={1}\n borderTop\n style={SCROLL_CONTAINER_STYLE}\n >\n <div style={FIT_CONTENT_STYLE}>\n <Table<DocumentInReleaseDetail>\n loading={isLoading}\n data={tableData}\n emptyState={t('summary.no-documents')}\n // oxlint-disable-next-line @sanity/i18n/no-attribute-string-literals\n rowId=\"document._id\"\n columnDefs={documentTableColumnDefs}\n rowActions={renderRowActions}\n searchFilter={filterRows}\n scrollContainerRef={scrollContainerRef}\n defaultSort={{column: 'search', direction: 'asc'}}\n />\n </div>\n </Card>\n {release.state === 'active' && (\n <Container width={3}>\n <Card padding={3}>\n <Button\n icon={AddIcon}\n disabled={isLoading}\n mode=\"bleed\"\n onClick={handleAddDocumentClick}\n text={t('action.add-document')}\n />\n </Card>\n </Container>\n )}\n <AddDocumentSearch\n open={openAddDocumentDialog}\n onClose={closeAddDialog}\n releaseId={releaseId}\n idsInRelease={documents.map(({document}) => document._id)}\n />\n </Flex>\n )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {motion} from 'motion/react'\nimport {useEffect, useMemo, useState} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {LoadingBlock} from '../../../components'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {useArchivedReleases} from '../../store/useArchivedReleases'\nimport {type ReleasesRouterState} from '../../types/router'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {RELEASE_NOT_FOUND_SEARCH_PARAM_KEY} from '../overview/queryParamUtils'\nimport {useReleaseEvents} from './events/useReleaseEvents'\nimport {ReleaseDashboardActivityPanel} from './ReleaseDashboardActivityPanel'\nimport {ReleaseDashboardDetails} from './ReleaseDashboardDetails'\nimport {ReleaseDashboardFooter} from './ReleaseDashboardFooter'\nimport {ReleaseDashboardHeader} from './ReleaseDashboardHeader'\nimport {ReleaseSummary} from './ReleaseSummary'\nimport {useBundleDocuments} from './useBundleDocuments'\n\nexport type ReleaseInspector = 'activity'\nconst MotionCard = motion.create(Card)\n\nexport function ReleaseDetail() {\n const router = useRouter()\n const [inspector, setInspector] = useState<ReleaseInspector | undefined>(undefined)\n const {t} = useTranslation(releasesLocaleNamespace)\n const {releaseId: releaseIdRaw}: ReleasesRouterState = router.state\n const releaseId = decodeURIComponent(releaseIdRaw || '')\n const {data, loading} = useActiveReleases()\n const {data: archivedReleases} = useArchivedReleases()\n\n const {\n loading: documentsLoading,\n results,\n error: bundleDocumentsError,\n } = useBundleDocuments(releaseId)\n const releaseEvents = useReleaseEvents(releaseId)\n\n const releaseInDetail = data\n .concat(archivedReleases)\n .find((candidate) => getReleaseIdFromReleaseDocumentId(candidate._id) === releaseId)\n\n const isNotFound = !loading && !releaseInDetail\n\n useEffect(() => {\n if (isNotFound) {\n router.navigate({\n _searchParams: [[RELEASE_NOT_FOUND_SEARCH_PARAM_KEY, 'true']],\n })\n }\n }, [isNotFound, router])\n\n const detailContent = useMemo(() => {\n if (bundleDocumentsError) {\n return (\n <Box padding={3}>\n <MotionCard\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n tone=\"critical\"\n padding={4}\n radius={4}\n >\n <Flex gap={3}>\n <Text size={1}>\n <ErrorOutlineIcon />\n </Text>\n <Stack space={4}>\n <Text size={1} weight=\"semibold\">\n {t('loading-release-documents.error.title')}\n </Text>\n <Text size={1}>{t('loading-release-documents.error.description')}</Text>\n </Stack>\n </Flex>\n </MotionCard>\n </Box>\n )\n }\n if (!releaseInDetail) return null\n\n return (\n <ReleaseSummary isLoading={documentsLoading} documents={results} release={releaseInDetail} />\n )\n }, [bundleDocumentsError, documentsLoading, releaseInDetail, results, t])\n\n if (loading) {\n return (\n <LoadingBlock\n title={t('loading-release')}\n fill\n data-testid=\"release-documents-table-loader\"\n />\n )\n }\n\n if (releaseInDetail) {\n return (\n <Flex direction=\"column\" flex={1} height=\"fill\" overflow=\"hidden\">\n <Card flex=\"none\" padding={3}>\n <ReleaseDashboardHeader\n release={releaseInDetail}\n inspector={inspector}\n setInspector={setInspector}\n />\n </Card>\n\n <Flex flex={1}>\n <Flex direction=\"column\" flex={1} height=\"fill\">\n <Card flex={1} overflow=\"auto\">\n <ReleaseDashboardDetails release={releaseInDetail} documents={results} />\n {detailContent}\n </Card>\n\n <ReleaseDashboardFooter\n documents={results}\n release={releaseInDetail}\n events={releaseEvents.events}\n />\n </Flex>\n\n <ReleaseDashboardActivityPanel\n events={releaseEvents}\n release={releaseInDetail}\n show={inspector === 'activity'}\n />\n </Flex>\n </Flex>\n )\n }\n\n return null\n}\n","import {useEffect} from 'react'\n\nimport {useReleasesMetadataProvider} from '../contexts/ReleasesMetadataProvider'\n\nexport interface ReleasesMetadata {\n /**\n * The number of documents with the release version as a prefix\n */\n documentCount: number\n /**\n * The last time a document in the release was edited\n */\n updatedAt: string | null\n}\n\nexport const useReleasesMetadata = (releaseIds: string[]) => {\n const {\n addReleaseIdsToListener: addBundleIdsToListener,\n removeReleaseIdsFromListener: removeBundleIdsFromListener,\n state,\n } = useReleasesMetadataProvider()\n\n useEffect(() => {\n if (releaseIds.length) addBundleIdsToListener([...new Set(releaseIds)])\n\n return () => removeBundleIdsFromListener([...new Set(releaseIds)])\n }, [addBundleIdsToListener, releaseIds, removeBundleIdsFromListener])\n\n const {data, loading} = state\n\n let responseData = null\n\n if (data) {\n const hasUpdatedMetadata =\n !responseData || Object.entries(responseData).some(([key, value]) => value !== data[key])\n\n if (hasUpdatedMetadata) {\n responseData = Object.fromEntries(releaseIds.map((releaseId) => [releaseId, data[releaseId]]))\n }\n }\n\n return {\n error: state.error,\n // loading is only for initial load\n // changing listened to release IDs will not cause a re-load\n loading,\n data: responseData,\n }\n}\n","import {FilterIcon} from '@sanity/icons'\n// oxlint-disable-next-line no-restricted-imports\nimport {Button, useClickOutsideEvent} from '@sanity/ui'\nimport {type ReactNode, useRef, useState} from 'react'\n\nimport {Dialog} from '../../../../ui-components/dialog/Dialog'\nimport {Popover} from '../../../../ui-components/popover/Popover'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {releasesLocaleNamespace} from '../../i18n'\n\nexport function CalendarPopover({content, asDialog}: {content: ReactNode; asDialog?: boolean}) {\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [isCalendarOpen, setIsCalendarOpen] = useState(false)\n const {t} = useTranslation(releasesLocaleNamespace)\n\n useClickOutsideEvent(\n () => {\n if (!asDialog) setIsCalendarOpen(false)\n },\n () => [buttonRef.current, popoverRef.current],\n )\n\n const triggerButton = (\n <Tooltip content={t('overview.calendar.tooltip')}>\n <Button\n name=\"calendar\"\n data-as=\"a\"\n icon={FilterIcon}\n mode=\"bleed\"\n padding={2}\n radius=\"full\"\n selected={isCalendarOpen}\n onClick={() => setIsCalendarOpen((prev) => !prev)}\n ref={buttonRef}\n space={2}\n />\n </Tooltip>\n )\n\n if (asDialog) {\n return (\n <>\n {triggerButton}\n {isCalendarOpen && (\n <Dialog\n id=\"calendar-filter-dialog\"\n header={t('overview.calendar.tooltip')}\n onClose={() => setIsCalendarOpen(false)}\n onClickOutside={() => setIsCalendarOpen(false)}\n width={1}\n padding={false}\n >\n {content}\n </Dialog>\n )}\n </>\n )\n }\n\n return (\n <Popover content={content} placement=\"bottom\" open={isCalendarOpen} ref={popoverRef}>\n {triggerButton}\n </Popover>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {CalendarIcon, ChevronDownIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Flex, Menu, Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {MenuButton} from '../../../../ui-components/menuButton'\nimport {MenuItem} from '../../../../ui-components/menuItem'\nimport {useTranslation} from '../../../i18n'\nimport {isCardinalityOneRelease} from '../../../util/releaseUtils'\nimport {\n NavigatedToReleasesOverview,\n NavigatedToScheduledDrafts,\n} from '../../__telemetry__/navigation.telemetry'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type CardinalityView} from './queryParamUtils'\n\ninterface CardinalityViewPickerProps {\n cardinalityView: CardinalityView\n loading: boolean\n isScheduledDraftsEnabled: boolean\n isDraftModelEnabled: boolean\n isReleasesEnabled: boolean\n allReleases: ReleaseDocument[]\n onCardinalityViewChange: (view: CardinalityView) => () => void\n}\n\nconst getPickerView = ({\n hasSingleDocRelease,\n isScheduledDraftsEnabled,\n isReleasesEnabled,\n cardinalityView,\n isDraftModelEnabled,\n}: {\n hasSingleDocRelease: boolean\n isScheduledDraftsEnabled: boolean\n isReleasesEnabled: boolean\n cardinalityView: CardinalityView\n isDraftModelEnabled: boolean\n}): 'contentReleases' | 'singleDocReleases' | 'both' => {\n if (isReleasesEnabled) {\n if (hasSingleDocRelease || (isScheduledDraftsEnabled && isDraftModelEnabled)) return 'both'\n return cardinalityView === 'drafts' ? 'both' : 'contentReleases'\n }\n\n return cardinalityView === 'releases' ? 'both' : 'singleDocReleases'\n}\n\nexport const CardinalityViewPicker = ({\n cardinalityView,\n loading,\n isScheduledDraftsEnabled,\n isReleasesEnabled,\n isDraftModelEnabled,\n allReleases,\n onCardinalityViewChange,\n}: CardinalityViewPickerProps) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const telemetry = useTelemetry()\n\n const hasSingleDocRelease = useMemo(\n () => allReleases.some(isCardinalityOneRelease),\n [allReleases],\n )\n\n const pickerView = getPickerView({\n hasSingleDocRelease,\n isScheduledDraftsEnabled,\n isReleasesEnabled,\n cardinalityView,\n isDraftModelEnabled,\n })\n\n const handleViewChange = useCallback(\n (view: CardinalityView) => () => {\n const telemetryEvent =\n view === 'releases' ? NavigatedToReleasesOverview : NavigatedToScheduledDrafts\n telemetry.log(telemetryEvent, {source: 'view-picker'})\n\n onCardinalityViewChange(view)()\n },\n [telemetry, onCardinalityViewChange],\n )\n\n // If only one is enabled, show the label\n if (pickerView === 'contentReleases' || pickerView === 'singleDocReleases') {\n return (\n <Flex align=\"center\" gap={2}>\n <CalendarIcon />\n <Text size={1} weight=\"semibold\">\n {pickerView === 'contentReleases' ? t('action.releases') : t('action.drafts')}\n </Text>\n </Flex>\n )\n }\n\n // If both are enabled, show the menu button\n return (\n <MenuButton\n id=\"cardinality-view-menu\"\n button={\n <Button\n mode=\"bleed\"\n paddingY={2}\n text={cardinalityView === 'releases' ? t('action.releases') : t('action.drafts')}\n icon={CalendarIcon}\n iconRight={ChevronDownIcon}\n disabled={loading}\n style={{fontWeight: 600}}\n />\n }\n menu={\n <Menu>\n <MenuItem\n text={t('action.releases')}\n selected={cardinalityView === 'releases'}\n onClick={handleViewChange('releases')}\n />\n <MenuItem\n text={t('action.drafts')}\n selected={cardinalityView === 'drafts'}\n onClick={handleViewChange('drafts')}\n />\n </Menu>\n }\n />\n )\n}\n","import {type ReleaseDocument, type ScheduleReleaseAction} from '@sanity/client'\nimport {Stack, Text, useToast} from '@sanity/ui'\nimport {isPast} from 'date-fns/isPast'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {Dialog} from '../../../../ui-components'\nimport {useClient} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../util/releasesClient'\n\ninterface ConfirmScheduledDraftsDialogProps {\n activeScheduledDrafts: ReleaseDocument[]\n onClose: () => void\n}\n\n/**\n * Batches all schedule actions into a single server action\n */\nfunction useScheduleActiveDrafts() {\n const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n\n const scheduleActiveDrafts = useCallback(\n async (releases: ReleaseDocument[]) => {\n const scheduleActions: ScheduleReleaseAction[] = releases.flatMap((release) => {\n if (!release.metadata.intendedPublishAt) return []\n\n return [\n {\n actionType: 'sanity.action.release.schedule',\n releaseId: getReleaseIdFromReleaseDocumentId(release._id),\n publishAt: new Date(release.metadata.intendedPublishAt).toISOString(),\n },\n ]\n })\n\n await client.action(scheduleActions)\n },\n [client],\n )\n\n return {scheduleActiveDrafts}\n}\n\nexport function ConfirmScheduledDraftsDialog({\n activeScheduledDrafts,\n onClose,\n}: ConfirmScheduledDraftsDialogProps) {\n const {t} = useTranslation(releasesLocaleNamespace)\n const toast = useToast()\n const {scheduleActiveDrafts} = useScheduleActiveDrafts()\n const [isScheduling, setIsScheduling] = useState(false)\n\n const hasPastDates = useMemo(\n () =>\n activeScheduledDrafts.some(\n (release) =>\n release.metadata.intendedPublishAt &&\n isPast(new Date(release.metadata.intendedPublishAt)),\n ),\n [activeScheduledDrafts],\n )\n\n const handleConfirmSchedules = useCallback(async () => {\n setIsScheduling(true)\n\n try {\n await scheduleActiveDrafts(activeScheduledDrafts)\n onClose()\n } catch (error) {\n toast.push({\n status: 'error',\n title: t('toast.confirm-active-scheduled-drafts.error', {error: error.message}),\n })\n }\n setIsScheduling(false)\n }, [activeScheduledDrafts, scheduleActiveDrafts, onClose, toast, t])\n\n return (\n <Dialog\n id=\"confirm-active-scheduled-drafts-dialog\"\n header={t('confirm-active-scheduled-drafts-dialog.title')}\n onClose={onClose}\n width={0}\n footer={{\n confirmButton: {\n text: t('confirm-active-scheduled-drafts-dialog.confirm-button'),\n tone: 'primary',\n onClick: handleConfirmSchedules,\n loading: isScheduling,\n disabled: isScheduling,\n },\n }}\n >\n <Stack space={3}>\n <Text size={1} muted>\n {t('confirm-active-scheduled-drafts-dialog.description')}\n </Text>\n {hasPastDates && (\n <Text size={1} muted>\n {t('confirm-active-scheduled-drafts-dialog.past-dates-warning')}\n </Text>\n )}\n </Stack>\n </Dialog>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {isCardinalityOneRelease} from '../../../util/releaseUtils'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {ConfirmScheduledDraftsDialog} from './ConfirmScheduledDraftsDialog'\nimport {type Mode} from './queryParamUtils'\n\ninterface ConfirmActiveScheduledDraftsBannerProps {\n releases: ReleaseDocument[]\n releaseGroupMode: Mode\n hasDateFilter: boolean\n onNavigateToPaused: () => void\n}\n\n/**\n * Active drafts are those with state='active' and cardinality='one'\n */\nexport function ConfirmActiveScheduledDraftsBanner({\n releases,\n releaseGroupMode,\n hasDateFilter,\n onNavigateToPaused,\n}: ConfirmActiveScheduledDraftsBannerProps) {\n const {t} = useTranslation(releasesLocaleNamespace)\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n\n const activeScheduledDrafts = useMemo(\n () =>\n releases.filter((release) => release.state === 'active' && isCardinalityOneRelease(release)),\n [releases],\n )\n\n const shouldOpenDialog = releaseGroupMode === 'paused' && !hasDateFilter\n\n const handleCloseDialog = useCallback(() => {\n setIsDialogOpen(false)\n }, [])\n\n const handleClick = useCallback(\n () => (shouldOpenDialog ? setIsDialogOpen(true) : onNavigateToPaused()),\n [shouldOpenDialog, onNavigateToPaused],\n )\n\n if (activeScheduledDrafts.length === 0) {\n return null\n }\n\n const buttonText = shouldOpenDialog\n ? t('banner.confirm-active-scheduled-drafts.button-paused')\n : t('banner.confirm-active-scheduled-drafts.button')\n\n return (\n <>\n <Box flex=\"none\" padding={1} marginBottom={4}>\n <Card radius={3} paddingX={2} paddingY={2} tone=\"caution\">\n <Flex align=\"center\" gap={3} paddingX={2}>\n <Text size={0}>\n <WarningOutlineIcon />\n </Text>\n <Flex align=\"center\" flex={1} gap={2} paddingY={2}>\n <Text size={1} weight=\"medium\">\n <Translate\n t={t}\n i18nKey=\"banner.confirm-active-scheduled-drafts\"\n values={{count: activeScheduledDrafts.length}}\n />\n </Text>\n </Flex>\n <Flex flex=\"none\">\n <Button text={buttonText} mode=\"bleed\" tone=\"caution\" onClick={handleClick} />\n </Flex>\n </Flex>\n </Card>\n </Box>\n\n {isDialogOpen && (\n <ConfirmScheduledDraftsDialog\n activeScheduledDrafts={activeScheduledDrafts}\n onClose={handleCloseDialog}\n />\n )}\n </>\n )\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {isCardinalityOneRelease, type ReleaseDocument} from '../../..'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\n\ninterface DraftsDisabledBannerProps {\n isDraftModelEnabled: boolean\n isScheduledDraftsEnabled: boolean\n allReleases: ReleaseDocument[]\n}\n\n/**\n * Banner that shows when viewing drafts but either drafts mode or scheduled drafts are disabled\n */\nexport const DraftsDisabledBanner = ({\n isDraftModelEnabled,\n isScheduledDraftsEnabled,\n allReleases,\n}: DraftsDisabledBannerProps) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const hasSingleDocRelease = useMemo(\n () => allReleases.some(isCardinalityOneRelease),\n [allReleases],\n )\n const shouldShowBanner =\n (!isDraftModelEnabled || !isScheduledDraftsEnabled) && hasSingleDocRelease\n\n if (!shouldShowBanner) return null\n\n const getBannerMessage = () =>\n isScheduledDraftsEnabled\n ? t('banner.drafts-mode-disabled')\n : t('banner.scheduled-drafts-disabled')\n\n return (\n <Box padding={1} marginBottom={4}>\n <Card radius={3} paddingX={2} paddingY={2} tone=\"caution\">\n <Flex align=\"center\" gap={3} paddingX={2}>\n <Text size={0}>\n <WarningOutlineIcon />\n </Text>\n <Flex align=\"center\" flex={1} gap={2} paddingY={2}>\n <Text size={1} weight=\"medium\">\n {getBannerMessage()}\n </Text>\n </Flex>\n </Flex>\n </Card>\n </Box>\n )\n}\n","import {endOfDay} from 'date-fns/endOfDay'\nimport {startOfDay} from 'date-fns/startOfDay'\nimport {useCallback} from 'react'\n\nimport {useTimeZone} from '../../../hooks/useTimeZone'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\n\nexport const useTimezoneAdjustedDateTimeRange = (): ((date: Date) => [Date, Date]) => {\n const {zoneDateToUtc} = useTimeZone(CONTENT_RELEASES_TIME_ZONE_SCOPE)\n\n return useCallback(\n (date: Date) => [startOfDay(date), endOfDay(date)].map(zoneDateToUtc) as [Date, Date],\n [zoneDateToUtc],\n )\n}\n","import {CloseIcon} from '@sanity/icons'\nimport {format} from 'date-fns/format'\nimport {AnimatePresence, motion} from 'motion/react'\nimport {useMemo, useState} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {\n CalendarDay,\n type CalendarDayProps,\n} from '../../../components/inputs/DateFilters/calendar/CalendarDay'\nimport {type CalendarProps} from '../../../components/inputs/DateFilters/calendar/CalendarFilter'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {shouldShowReleaseInView} from '../../util/util'\nimport {type CardinalityView} from './queryParamUtils'\nimport {useTimezoneAdjustedDateTimeRange} from './useTimezoneAdjustedDateTimeRange'\n\nconst ReleaseCalendarFilterDayWithCardinality = (\n props: CalendarDayProps & {\n cardinalityView: CardinalityView\n },\n): React.ReactNode => {\n const {data: allReleases} = useActiveReleases()\n const getTimezoneAdjustedDateTimeRange = useTimezoneAdjustedDateTimeRange()\n\n const {date, cardinalityView, ...calendarDayProps} = props\n\n const [startOfDayForTimeZone, endOfDayForTimeZone] = getTimezoneAdjustedDateTimeRange(date)\n\n const releases = allReleases?.filter(shouldShowReleaseInView(cardinalityView))\n\n const dayHasReleases = releases?.some((release) => {\n const releasePublishAt = release.publishAt || release.metadata.intendedPublishAt\n if (!releasePublishAt) return false\n\n const publishDateUTC = new Date(releasePublishAt)\n\n return (\n release.metadata.releaseType === 'scheduled' &&\n publishDateUTC >= startOfDayForTimeZone &&\n publishDateUTC <= endOfDayForTimeZone\n )\n })\n\n return (\n <CalendarDay\n {...calendarDayProps}\n date={date}\n dateStyles={dayHasReleases ? {fontWeight: 700} : {}}\n />\n )\n}\n\nexport const createReleaseCalendarFilterDay = (\n cardinalityView: CardinalityView,\n): CalendarProps['renderCalendarDay'] => {\n const ReleaseCalendarFilterDayComponent = (props: CalendarDayProps) => (\n <ReleaseCalendarFilterDayWithCardinality {...props} cardinalityView={cardinalityView} />\n )\n ReleaseCalendarFilterDayComponent.displayName = 'ReleaseCalendarFilterDayComponent'\n return ReleaseCalendarFilterDayComponent\n}\n\nconst MotionButton = motion.create(Button)\n\nexport const DateFilterButton = ({\n filterDate,\n onClear,\n}: {\n filterDate: Date\n onClear: () => void\n}) => {\n const [isExiting, setIsExiting] = useState(false)\n\n const handleOnExitComplete = useMemo(\n () => () => {\n setIsExiting(false)\n onClear()\n },\n [onClear],\n )\n\n if (!filterDate) return null\n\n return (\n <AnimatePresence onExitComplete={handleOnExitComplete}>\n {!isExiting && (\n <MotionButton\n data-testid=\"selected-date-filter\"\n initial={{width: 0, opacity: 0}}\n animate={{width: 'auto', opacity: 1}}\n exit={{width: 0, opacity: 0}}\n transition={{duration: 0.35, ease: 'easeInOut'}}\n iconRight={CloseIcon}\n mode=\"bleed\"\n onClick={() => setIsExiting(true)}\n selected\n text={format(filterDate, 'PPP')}\n />\n )}\n </AnimatePresence>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\n\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {ReleaseMenuButton} from '../components/ReleaseMenuButton/ReleaseMenuButton'\nimport {useBundleDocuments} from '../detail/useBundleDocuments'\n\nexport const ReleaseMenuButtonWrapper = ({\n release,\n documentsCount,\n}: {\n release: ReleaseDocument\n documentsCount: number\n}) => {\n const {results: documents} = useBundleDocuments(getReleaseIdFromReleaseDocumentId(release._id))\n\n return (\n <ReleaseMenuButton release={release} documentsCount={documentsCount} documents={documents} />\n )\n}\n","import {CloseIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\n\ninterface ReleaseNotFoundBannerProps {\n onDismiss: () => void\n}\n\nexport function ReleaseNotFoundBanner({onDismiss}: ReleaseNotFoundBannerProps) {\n const {t} = useTranslation(releasesLocaleNamespace)\n\n return (\n <Box flex=\"none\" padding={1} marginBottom={4}>\n <Card radius={3} paddingX={2} paddingY={2} tone=\"caution\">\n <Flex align=\"center\" gap={3} paddingX={2}>\n <Text size={0}>\n <WarningOutlineIcon />\n </Text>\n <Box flex={1} paddingY={2}>\n <Text size={1} weight=\"medium\">\n {t('banner.release-not-found')}\n </Text>\n </Box>\n <Button\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={onDismiss}\n tooltipProps={{content: t('banner.release-not-found.dismiss')}}\n />\n </Flex>\n </Card>\n </Box>\n )\n}\n","export const ReleaseIllustration = () => {\n return (\n <svg\n data-testid=\"release-illustration\"\n width=\"248\"\n height=\"201\"\n viewBox=\"0 0 248 201\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity=\"0.2\"\n d=\"M175.4 29.8262V98.1738C175.4 103.823 181.346 107.498 186.399 104.971L222.399 86.9714C224.974 85.684 226.6 83.0524 226.6 80.1738V11.8262C226.6 6.17654 220.654 2.50197 215.601 5.02859L179.601 23.0286C177.026 24.316 175.4 26.9476 175.4 29.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M183.4 33.8262V102.174C183.4 107.823 189.346 111.498 194.399 108.971L230.399 90.9714C232.974 89.684 234.6 87.0524 234.6 84.1738V15.8262C234.6 10.1765 228.654 6.50197 223.601 9.02859L187.601 27.0286C185.026 28.316 183.4 30.9476 183.4 33.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M195.4 39.8262V108.174C195.4 113.823 201.346 117.498 206.399 114.971L242.399 96.9714C244.974 95.684 246.6 93.0524 246.6 90.1738V21.8262C246.6 16.1765 240.654 12.502 235.601 15.0286L199.601 33.0286C197.026 34.316 195.4 36.9476 195.4 39.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.6\"\n d=\"M109.4 50.8262V119.174C109.4 124.823 115.346 128.498 120.399 125.971L156.399 107.971C158.974 106.684 160.6 104.052 160.6 101.174V32.8262C160.6 27.1765 154.654 23.502 149.601 26.0286L113.601 44.0286C111.026 45.316 109.4 47.9476 109.4 50.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.9\"\n d=\"M118 123.174V54.8262C118 52.1748 119.498 49.751 121.87 48.5653L157.87 30.5652C162.524 28.2381 168 31.6226 168 36.8262V105.174C168 107.825 166.502 110.249 164.131 111.435L128.13 129.435C123.476 131.762 118 128.377 118 123.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M121.4 56.8262V125.174C121.4 130.823 127.346 134.498 132.399 131.971L168.399 113.971C170.974 112.684 172.6 110.052 172.6 107.174V38.8262C172.6 33.1765 166.654 29.502 161.601 32.0286L125.601 50.0286C123.026 51.316 121.4 53.9476 121.4 56.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M125.4 58.8262V127.174C125.4 132.823 131.346 136.498 136.399 133.971L172.399 115.971C174.974 114.684 176.6 112.052 176.6 109.174V40.8262C176.6 35.1765 170.654 31.502 165.601 34.0286L129.601 52.0286C127.026 53.316 125.4 55.9476 125.4 58.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M137.4 64.8262V133.174C137.4 138.823 143.346 142.498 148.399 139.971L184.399 121.971C186.974 120.684 188.6 118.052 188.6 115.174V46.8262C188.6 41.1765 182.654 37.502 177.601 40.0286L141.601 58.0286C139.026 59.316 137.4 61.9476 137.4 64.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M145.4 68.8262V137.174C145.4 142.823 151.346 146.498 156.399 143.971L192.399 125.971C194.974 124.684 196.6 122.052 196.6 119.174V50.8262C196.6 45.1765 190.654 41.502 185.601 44.0286L149.601 62.0286C147.026 63.316 145.4 65.9476 145.4 68.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.6\"\n d=\"M1.4 104.826V173.174C1.4 178.823 7.34557 182.498 12.3988 179.971L48.3988 161.971C50.9736 160.684 52.6 158.052 52.6 155.174V86.8262C52.6 81.1765 46.6544 77.502 41.6012 80.0286L5.60117 98.0286C3.02641 99.316 1.4 101.948 1.4 104.826Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.6\"\n d=\"M56.6 146.174V77.8262C56.6 75.4021 57.9696 73.186 60.1378 72.1019L96.1378 54.1019C100.393 51.9742 105.4 55.0686 105.4 59.8262V128.174C105.4 130.598 104.03 132.814 101.862 133.898L65.8622 151.898C61.6068 154.026 56.6 150.931 56.6 146.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.8\"\n d=\"M60.6 148.174V79.8262C60.6 77.4021 61.9696 75.186 64.1378 74.1019L100.138 56.1019C104.393 53.9742 109.4 57.0686 109.4 61.8262V130.174C109.4 132.598 108.03 134.814 105.862 135.898L69.8622 153.898C65.6068 156.026 60.6 152.931 60.6 148.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.9\"\n d=\"M64 150.174V81.8262C64 79.1748 65.498 76.751 67.8695 75.5653L103.87 57.5652C108.524 55.2381 114 58.6226 114 63.8262V132.174C114 134.825 112.502 137.249 110.131 138.435L74.1305 156.435C69.4762 158.762 64 155.377 64 150.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M72.6 154.174V85.8262C72.6 83.4021 73.9696 81.186 76.1378 80.1019L112.138 62.1019C116.393 59.9742 121.4 63.0686 121.4 67.8262V136.174C121.4 138.598 120.03 140.814 117.862 141.898L81.8622 159.898C77.6068 162.026 72.6 158.931 72.6 154.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M76.6 156.174V87.8262C76.6 85.4021 77.9696 83.186 80.1378 82.1019L116.138 64.1019C120.393 61.9742 125.4 65.0686 125.4 69.8262V138.174C125.4 140.598 124.03 142.814 121.862 143.898L85.8622 161.898C81.6068 164.026 76.6 160.931 76.6 156.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M84.6 160.174V91.8262C84.6 89.4021 85.9696 87.186 88.1378 86.1019L124.138 68.1019C128.393 65.9742 133.4 69.0686 133.4 73.8262V142.174C133.4 144.598 132.03 146.814 129.862 147.898L93.8622 165.898C89.6068 168.026 84.6 164.931 84.6 160.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M88.6 162.174V93.8262C88.6 91.4021 89.9696 89.186 92.1378 88.1019L128.138 70.1019C132.393 67.9742 137.4 71.0686 137.4 75.8262V144.174C137.4 146.598 136.03 148.814 133.862 149.898L97.8622 167.898C93.6068 170.026 88.6 166.931 88.6 162.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M92.6 164.174V95.8262C92.6 93.4021 93.9696 91.186 96.1378 90.1019L132.138 72.1019C136.393 69.9742 141.4 73.0686 141.4 77.8262V146.174C141.4 148.598 140.03 150.814 137.862 151.898L101.862 169.898C97.6068 172.026 92.6 168.931 92.6 164.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M96.6 166.174V97.8262C96.6 95.4021 97.9696 93.186 100.138 92.1019L136.138 74.1019C140.393 71.9742 145.4 75.0686 145.4 79.8262V148.174C145.4 150.598 144.03 152.814 141.862 153.898L105.862 171.898C101.607 174.026 96.6 170.931 96.6 166.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M104.6 170.174V101.826C104.6 99.4021 105.97 97.186 108.138 96.1019L144.138 78.1019C148.393 75.9742 153.4 79.0686 153.4 83.8262V152.174C153.4 154.598 152.03 156.814 149.862 157.898L113.862 175.898C109.607 178.026 104.6 174.931 104.6 170.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.8\"\n d=\"M5.4 106.826V175.174C5.4 180.823 11.3456 184.498 16.3988 181.971L52.3988 163.971C54.9736 162.684 56.6 160.052 56.6 157.174V88.8262C56.6 83.1765 50.6544 79.502 45.6012 82.0286L9.60117 100.029C7.02641 101.316 5.4 103.948 5.4 106.826Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.9\"\n d=\"M10 177.174V108.826C10 106.175 11.498 103.751 13.8695 102.565L49.8695 84.5652C54.5238 82.2381 60 85.6226 60 90.8262V159.174C60 161.825 58.502 164.249 56.1305 165.435L20.1305 183.435C15.4762 185.762 10 182.377 10 177.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M13.4 110.826V179.174C13.4 184.823 19.3456 188.498 24.3988 185.971L60.3988 167.971C62.9736 166.684 64.6 164.052 64.6 161.174V92.8262C64.6 87.1765 58.6544 83.502 53.6012 86.0286L17.6012 104.029C15.0264 105.316 13.4 107.948 13.4 110.826Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M29.4 118.826V187.174C29.4 192.823 35.3456 196.498 40.3988 193.971L76.3988 175.971C78.9736 174.684 80.6 172.052 80.6 169.174V100.826C80.6 95.1765 74.6544 91.502 69.6012 94.0286L33.6012 112.029C31.0264 113.316 29.4 115.948 29.4 118.826Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M33.4 120.826V189.174C33.4 194.823 39.3456 198.498 44.3988 195.971L80.3988 177.971C82.9736 176.684 84.6 174.052 84.6 171.174V102.826C84.6 97.1765 78.6544 93.502 73.6012 96.0286L37.6012 114.029C35.0264 115.316 33.4 117.948 33.4 120.826Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n </svg>\n )\n}\n","import {Flex, Inline, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {useReleasesUpsell} from '../../contexts/upsell/useReleasesUpsell'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {ReleaseIllustration} from '../resources/ReleaseIllustration'\n\ninterface ReleasesEmptyStateProps {\n createReleaseButton?: React.ReactNode\n}\n\nexport const ReleasesEmptyState = ({createReleaseButton}: ReleasesEmptyStateProps) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const {mode} = useReleasesUpsell()\n\n if (mode === 'upsell') {\n return null\n }\n\n return (\n <Flex direction=\"column\" flex={1} justify={'center'} align={'center'}>\n <Flex gap={3} direction=\"column\" align=\"center\" style={{maxWidth: '300px'}}>\n <ReleaseIllustration />\n <Text as=\"h1\" size={1} weight=\"semibold\" data-testid=\"no-releases-info-text\">\n {t('overview.title')}\n </Text>\n <Text size={1} muted style={{textAlign: 'center'}}>\n {t('overview.description')}\n </Text>\n <Inline space={2}>\n {createReleaseButton}\n <Button\n as=\"a\"\n href=\"https://www.sanity.io/docs/content-releases\"\n target=\"_blank\"\n mode=\"ghost\"\n text={t('overview.action.documentation')}\n />\n </Inline>\n </Flex>\n </Flex>\n )\n}\n","import {Spinner} from '@sanity/ui'\n\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {useBundleDocuments} from '../../detail/useBundleDocuments'\nimport {ValidationProgressIndicator} from '../../detail/ValidationProgressIndicator'\n\nexport function ReleaseColumnValidationLoading({releaseId}: {releaseId: string}) {\n const rId = getReleaseIdFromReleaseDocumentId(releaseId)\n const {results: documents, loading} = useBundleDocuments(rId)\n\n return loading ? (\n <Spinner size={1} muted />\n ) : (\n <ValidationProgressIndicator layout=\"minimal\" documents={documents} />\n )\n}\n","import {Text} from '@sanity/ui'\n\ntype Props = {\n documentCount: number | undefined\n}\n\nexport const ReleaseDocumentsCounter = ({documentCount}: Props) => (\n <Text muted size={1}>\n {documentCount || '-'}\n </Text>\n)\n","import {PinFilledIcon, PinIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Skeleton, Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button, Tooltip} from '../../../../../ui-components'\nimport {PREVIEW_SIZES} from '../../../../components/previews/constants'\nimport {TitleSkeleton} from '../../../../components/previews/general/DetailPreview.styled'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../../perspective/useSetPerspective'\nimport {useWorkspace} from '../../../../studio/workspace'\nimport {ReleaseAvatar} from '../../../components/ReleaseAvatar'\nimport {ReleaseTitle} from '../../../components/ReleaseTitle'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type TableRowProps} from '../../components/Table/Table'\nimport {type VisibleColumn} from '../../components/Table/types'\nimport {type TableRelease} from '../ReleasesOverview'\n\nexport const ReleaseNameCell: VisibleColumn<TableRelease>['cell'] = ({\n cellProps,\n datum: release,\n}) => {\n const router = useRouter()\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const {selectedReleaseId} = usePerspective()\n const setPerspective = useSetPerspective()\n const {state} = release\n const releaseId = release.isLoading ? 'loading' : getReleaseIdFromReleaseDocumentId(release._id)\n const isArchived = state === 'archived'\n const isReleasePinned = releaseId === selectedReleaseId\n const {document} = useWorkspace()\n const {\n drafts: {enabled: isDraftModelEnabled},\n } = document\n\n const handlePinRelease = useCallback(() => {\n if (isReleasePinned) {\n setPerspective(isDraftModelEnabled ? 'drafts' : 'published')\n } else {\n setPerspective(releaseId)\n }\n }, [isDraftModelEnabled, isReleasePinned, releaseId, setPerspective])\n\n if (release.isLoading) {\n return (\n <Box {...cellProps} paddingLeft={3} flex={1} paddingY={1} paddingRight={2} sizing=\"border\">\n <Flex align=\"center\" gap={2}>\n <Skeleton animated radius={1} style={PREVIEW_SIZES.default.media} />\n <TitleSkeleton />\n </Flex>\n </Box>\n )\n }\n\n const cardProps: TableRowProps = release.isDeleted\n ? {tone: 'transparent'}\n : {\n as: 'a',\n // navigate to release detail\n onClick: () => router.navigate({releaseId: releaseId}),\n tone: 'inherit',\n }\n\n const pinButtonIcon = isReleasePinned ? PinFilledIcon : PinIcon\n const releaseTitle = release.metadata.title || tCore('release.placeholder-untitled-release')\n\n return (\n <Box {...cellProps} paddingLeft={3} flex={1} paddingY={1} paddingRight={2} sizing=\"border\">\n <Tooltip\n disabled={!release.isDeleted}\n content={\n <Text size={1}>\n <Translate t={t} i18nKey=\"deleted-release\" values={{title: releaseTitle}} />\n </Text>\n }\n >\n <Flex align=\"center\" gap={3}>\n <Button\n tooltipProps={{\n disabled: isArchived || release.state === 'published',\n content: isReleasePinned\n ? t('dashboard.details.unpin-release')\n : t('dashboard.details.pin-release'),\n }}\n disabled={isArchived || release.state === 'published'}\n icon={pinButtonIcon}\n mode=\"bleed\"\n data-testid=\"pin-release-button\"\n onClick={handlePinRelease}\n radius=\"full\"\n selected={isReleasePinned}\n aria-label={\n isReleasePinned\n ? `${t('dashboard.details.unpin-release')}: \"${releaseTitle}\"`\n : `${t('dashboard.details.pin-release')}: \"${releaseTitle}\"`\n }\n aria-live=\"assertive\"\n />\n <Card {...cardProps} padding={2} radius={2} flex={1}>\n <Flex align=\"center\" gap={2}>\n <Box flex=\"none\">\n <ReleaseAvatar release={release} />\n </Box>\n <Stack flex={1} space={2}>\n <Flex align=\"center\" gap={2} style={{minWidth: 0}}>\n <ReleaseTitle\n title={release.metadata.title}\n fallback={tCore('release.placeholder-untitled-release')}\n textProps={{size: 1, weight: 'medium', style: {minWidth: 0}}}\n />\n </Flex>\n </Stack>\n </Flex>\n </Card>\n </Flex>\n </Tooltip>\n </Box>\n )\n}\n","import {CheckmarkCircleIcon, ErrorOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Card, Flex, Text} from '@sanity/ui'\n// oxlint-disable-next-line @sanity/i18n/no-i18next-import -- figure out how to have the linter be fine with importing types-only\nimport {type TFunction} from 'i18next'\n\nimport {ToneIcon} from '../../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {RelativeTime} from '../../../components'\nimport {getIsScheduledDateInPast} from '../../util/getIsScheduledDateInPast'\nimport {getPublishDateFromRelease} from '../../util/util'\nimport {ReleaseTime} from '../components/ReleaseTime'\nimport {Headers} from '../components/Table/TableHeader'\nimport {type Column} from '../components/Table/types'\nimport {ReleaseColumnValidationLoading} from './columnCells/ReleaseColumnValidationLoading'\nimport {ReleaseDocumentsCounter} from './columnCells/ReleaseDocumentsCounter'\nimport {ReleaseNameCell} from './columnCells/ReleaseName'\nimport {type Mode} from './queryParamUtils'\nimport {type TableRelease} from './ReleasesOverview'\n\nconst enableColumnFormMode =\n (currentMode: Mode) => (column: Column<TableRelease>, expectedMode: Mode | 'all') => {\n if (!currentMode) throw new Error('currentMode is required')\n if (expectedMode === 'all' || expectedMode === currentMode) {\n return column\n }\n return undefined\n }\n\nexport const releasesOverviewColumnDefs: (\n t: TFunction<'releases'>,\n releaseGroupMode: Mode,\n) => Column<TableRelease>[] = (t, releaseGroupMode) => {\n const checkColumnMode = enableColumnFormMode(releaseGroupMode)\n return [\n checkColumnMode(\n {\n id: 'metadata.title',\n sorting: true,\n width: null,\n style: {minWidth: 'min(50%, calc(100vw - 80px))', maxWidth: 'min(50%, calc(100vw - 80px))'},\n header: (props) => (\n <Flex\n {...props.headerProps}\n flex={1}\n paddingLeft={6}\n width={3}\n paddingRight={2}\n paddingY={3}\n sizing=\"border\"\n >\n <Headers.SortHeaderButton {...props} text={t('table-header.title')} />\n </Flex>\n ),\n cell: ReleaseNameCell,\n },\n 'all',\n ),\n checkColumnMode(\n {\n id: 'publishAt',\n sorting: true,\n sortTransform: (release) => {\n if (release.metadata.releaseType === 'undecided') return Infinity\n\n const publishDate = getPublishDateFromRelease(release)\n\n if (release.metadata.releaseType === 'asap' || !publishDate) return 0\n return new Date(publishDate).getTime()\n },\n width: 280,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.when')} {...props} />\n </Flex>\n ),\n cell: ({cellProps, datum: release}) => {\n if (release.isLoading) return null\n\n return (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} gap={2} sizing=\"border\">\n <ReleaseTime release={release} />\n </Flex>\n )\n },\n },\n 'active',\n ),\n // This is a hidden column only used for sorting when\n // no other sort column is selected (the default state)\n checkColumnMode(\n {\n id: 'lastActivity',\n hidden: true,\n sorting: true,\n width: 100,\n sortTransform: ({publishedAt, _updatedAt}) => {\n // the default sort is always descending, so -Infinity pushes missing values to end\n const lastActivity = publishedAt ?? _updatedAt\n\n return lastActivity ? new Date(lastActivity).getTime() : -Infinity\n },\n },\n 'archived',\n ),\n checkColumnMode(\n {\n id: 'publishedAt',\n sorting: true,\n sortTransform: (release, direction) => {\n if (release.state !== 'published') {\n if (direction === 'asc') return Infinity\n return -Infinity\n }\n if (!release.publishedAt) return release._updatedAt\n return new Date(release.publishedAt).getTime()\n },\n width: 250,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.published-at')} {...props} />\n </Flex>\n ),\n cell: ({cellProps, datum: release}) => (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} gap={2} sizing=\"border\">\n <Text muted size={1}>\n {release.publishedAt ? (\n // Assuming releases are not updated after archiving.\n // If we realize this is miss leading for customers and they have edited the release after archiving\n // we can use the history endpoint to get the archived change.\n <RelativeTime time={release.publishedAt} useTemporalPhrase minimal />\n ) : (\n '-'\n )}\n </Text>\n </Flex>\n ),\n },\n 'archived',\n ),\n checkColumnMode(\n {\n id: '_updatedAt',\n sorting: true,\n sortTransform: (release, direction) => {\n if (release.state !== 'archived') {\n if (direction === 'asc') return Infinity\n return -Infinity\n }\n\n return new Date(release._updatedAt).getTime()\n },\n width: 250,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.archivedAt')} {...props} />\n </Flex>\n ),\n cell: ({cellProps, datum: release}) => (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} gap={2} sizing=\"border\">\n <Text muted size={1}>\n {release.state === 'archived' ? (\n // Assuming releases are not updated after archiving.\n // If we later realize this is miss leading for customers and they have edited the release after archiving\n // we can use the history endpoint to get the archived change.\n <RelativeTime time={release._updatedAt} useTemporalPhrase minimal />\n ) : (\n '-'\n )}\n </Text>\n </Flex>\n ),\n },\n 'archived',\n ),\n checkColumnMode(\n {\n id: 'documentsMetadata.updatedAt',\n sorting: true,\n width: 150,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.edited')} {...props} />\n </Flex>\n ),\n cell: ({datum: {documentsMetadata, _updatedAt}, cellProps}) => {\n const updatedAtDate = documentsMetadata?.updatedAt ?? _updatedAt\n return (\n <Flex {...cellProps} align=\"center\" gap={2} paddingX={2} paddingY={3} sizing=\"border\">\n <Text muted size={1}>\n {updatedAtDate ? (\n <RelativeTime time={updatedAtDate} useTemporalPhrase minimal />\n ) : (\n '-'\n )}\n </Text>\n </Flex>\n )\n },\n },\n 'active',\n ),\n checkColumnMode(\n {\n id: 'error',\n sorting: false,\n width: 40,\n header: ({headerProps}) => <Flex {...headerProps} paddingY={3} sizing=\"border\" />,\n cell: ({datum, cellProps}) => {\n const {error, state} = datum\n const hasError = typeof error !== 'undefined' && state === 'active'\n const hasWarning = state === 'active' && getIsScheduledDateInPast(datum)\n\n return (\n <Flex\n {...cellProps}\n align=\"center\"\n gap={2}\n paddingX={2}\n paddingY={3}\n sizing=\"border\"\n data-testid=\"error-indicator\"\n >\n {hasError && (\n <Tooltip content={<Text size={1}>{t('failed-publish-title')}</Text>} portal>\n <Text size={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n </Text>\n </Tooltip>\n )}\n {hasWarning && (\n <Tooltip content={<Text size={1}>{t('passed-intended-publish-date')}</Text>} portal>\n <Text size={1}>\n <ToneIcon icon={WarningOutlineIcon} tone=\"caution\" />\n </Text>\n </Tooltip>\n )}\n </Flex>\n )\n },\n },\n 'all',\n ),\n checkColumnMode(\n {\n id: 'documentCount',\n sorting: false,\n width: 120,\n header: ({headerProps}) => (\n <Flex {...headerProps} paddingY={3} sizing=\"border\">\n <Headers.BasicHeader text={t('table-header.documents')} />\n </Flex>\n ),\n cell: ({\n datum: {isDeleted, state, finalDocumentStates, documentsMetadata, _id},\n cellProps,\n }) => {\n return (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} sizing=\"border\" gap={2}>\n {state === 'active' && <ReleaseColumnValidationLoading releaseId={_id} />}\n\n {/**\n * Show a checkmark for scheduled releases\n * A scheduled release can't be anything other than valid\n * Since it can't be edited via the API or the UI\n * However we should still gives a visual indicator of that instead of showing nothing\n */}\n {state === 'scheduled' && (\n <Card\n padding={0}\n radius=\"full\"\n tone=\"neutral\"\n style={{\n background: 'transparent',\n }}\n >\n <Flex gap={2}>\n <Text size={1}>\n <Tooltip content={t('summary.all-documents-validated')}>\n <CheckmarkCircleIcon />\n </Tooltip>\n </Text>\n </Flex>\n </Card>\n )}\n\n {!isDeleted && (\n <>\n <ReleaseDocumentsCounter\n documentCount={\n state === 'archived' || state === 'published'\n ? finalDocumentStates?.length\n : documentsMetadata?.documentCount\n }\n />\n </>\n )}\n </Flex>\n )\n },\n },\n 'all',\n ),\n ].filter(filterNull)\n}\n\n// type guard to filter out undefined and null values\nfunction filterNull<T>(value: T | undefined | null): value is T {\n return Boolean(value)\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {EllipsisHorizontalIcon} from '@sanity/icons'\nimport {Menu, Spinner, useClickOutsideEvent} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button, MenuItem, Popover} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {useScheduledDraftDocument} from '../../../singleDocRelease/hooks/useScheduledDraftDocument'\nimport {useScheduledDraftMenuActions} from '../../../singleDocRelease/hooks/useScheduledDraftMenuActions'\nimport {getPublishedId} from '../../../util/draftUtils'\nimport {isPausedCardinalityOneRelease} from '../../../util/releaseUtils'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\n\nexport const ScheduledDraftMenuButtonWrapper = ({release}: {release: ReleaseDocument}) => {\n const {t} = useTranslation()\n const router = useRouter()\n const popoverRef = useRef<HTMLDivElement>(null)\n const scheduledDraftMenuRef = useRef<HTMLDivElement>(null)\n const [openPopover, setOpenPopover] = useState(false)\n\n const {firstDocument: scheduledDraftDocument} = useScheduledDraftDocument(release._id)\n\n const handleActionComplete = useCallback(() => {\n if (!scheduledDraftDocument) return\n\n router.navigateIntent('edit', {\n id: getPublishedId(scheduledDraftDocument._id),\n type: scheduledDraftDocument._type,\n scheduledDraft: getReleaseIdFromReleaseDocumentId(release._id),\n })\n }, [router, scheduledDraftDocument, release._id])\n\n const {actions, dialogs, isPerformingOperation} = useScheduledDraftMenuActions({\n release,\n documentType: scheduledDraftDocument?._type,\n documentId: scheduledDraftDocument?._id,\n disabled: !scheduledDraftDocument,\n onActionComplete: handleActionComplete,\n })\n\n const displayedMenuItems = useMemo(() => {\n if (release.state === 'archived' || release.state === 'published') {\n return [<MenuItem key={'delete-schedule'} {...actions.deleteSchedule} />]\n }\n\n if (isPausedCardinalityOneRelease(release)) {\n return [\n <MenuItem key={'publish-now'} {...actions.publishNow} />,\n <MenuItem key={'schedule-publish'} {...actions.schedulePublish} />,\n <MenuItem key={'delete-schedule'} {...actions.deleteSchedule} />,\n ]\n }\n\n return [\n <MenuItem key={'publish-now'} {...actions.publishNow} />,\n <MenuItem key={'edit-schedule'} {...actions.editSchedule} />,\n <MenuItem key={'delete-schedule'} {...actions.deleteSchedule} />,\n ]\n }, [release, actions])\n\n const canPerformActions = Boolean(scheduledDraftDocument)\n\n const handleOnButtonClick = useCallback(() => {\n setOpenPopover((prev) => !prev)\n }, [])\n\n useClickOutsideEvent(\n () => setOpenPopover(false),\n () => [popoverRef.current, scheduledDraftMenuRef.current],\n )\n\n if (!canPerformActions) {\n return null\n }\n\n return (\n <>\n <Popover\n content={<Menu ref={scheduledDraftMenuRef}>{displayedMenuItems}</Menu>}\n open={openPopover}\n ref={popoverRef}\n constrainSize={false}\n fallbackPlacements={['top-end']}\n portal\n tone=\"default\"\n placement=\"bottom\"\n >\n <Button\n disabled={!canPerformActions || isPerformingOperation}\n icon={isPerformingOperation ? Spinner : EllipsisHorizontalIcon}\n mode=\"bleed\"\n tooltipProps={{content: t('release.menu.tooltip')}}\n aria-label={t('release.menu.label')}\n data-testid=\"scheduled-draft-menu-button\"\n onClick={handleOnButtonClick}\n />\n </Popover>\n {dialogs}\n </>\n )\n}\n","import {Flex, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {useTranslation} from '../../../i18n'\nimport {useSingleDocReleaseEnabled} from '../../../singleDocRelease/context/SingleDocReleaseEnabledProvider'\nimport {singleDocReleaseNamespace} from '../../../singleDocRelease/i18n'\nimport {ReleaseIllustration} from '../resources/ReleaseIllustration'\n\nexport const ScheduledDraftsEmptyState = () => {\n const {t} = useTranslation(singleDocReleaseNamespace)\n const {mode} = useSingleDocReleaseEnabled()\n if (mode === 'upsell') {\n return null\n }\n return (\n <Flex direction=\"column\" flex={1} justify={'center'} align={'center'}>\n <Flex gap={3} direction=\"column\" align=\"center\" style={{maxWidth: '300px'}}>\n <ReleaseIllustration />\n <Text as=\"h1\" size={1} weight=\"semibold\" data-testid=\"no-releases-info-text\">\n {t('empty-state.title')}\n </Text>\n <Text size={1} muted style={{textAlign: 'center'}}>\n {t('empty-state.description')}\n </Text>\n\n <Button\n as=\"a\"\n href=\"https://www.sanity.io/docs/studio/scheduled-drafts-user-guide\"\n target=\"_blank\"\n mode=\"ghost\"\n text={t('empty-state.action.documentation')}\n />\n </Flex>\n </Flex>\n )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Skeleton, Text} from '@sanity/ui'\n\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../../../ui-components/tooltip'\nimport {useTranslation} from '../../../../i18n'\nimport {useScheduledDraftDocument} from '../../../../singleDocRelease/hooks/useScheduledDraftDocument'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {ReleaseDocumentPreview} from '../../components/ReleaseDocumentPreview'\nimport {type VisibleColumn} from '../../components/Table/types'\nimport {type TableRelease} from '../ReleasesOverview'\n\nexport const ScheduledDraftDocumentPreview: VisibleColumn<TableRelease>['cell'] = ({\n datum: release,\n cellProps,\n}) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const {\n firstDocument,\n firstDocumentValidation,\n loading: documentsLoading,\n } = useScheduledDraftDocument(release._id && !release.isLoading ? release._id : undefined)\n\n const isLoading = release.isLoading || documentsLoading || !firstDocument\n\n if (isLoading) {\n return (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} sizing=\"border\">\n <Skeleton animated radius={2} style={{height: '32px', width: '100%'}} />\n </Flex>\n )\n }\n\n const validationErrorCount =\n firstDocumentValidation?.filter((validation) => validation.level === 'error').length || 0\n\n return (\n <Box {...cellProps} flex={1} padding={1} paddingLeft={2} paddingRight={2} sizing=\"border\">\n <Card tone={validationErrorCount ? 'critical' : 'inherit'} radius={2}>\n <Flex align=\"center\" gap={2}>\n <Box flex={1}>\n <ReleaseDocumentPreview\n documentId={firstDocument._id}\n documentTypeName={firstDocument._type}\n releaseId={release._id}\n releaseState={release.state}\n isCardinalityOneRelease\n documentRevision={firstDocument._rev}\n layout=\"default\"\n />\n </Box>\n {validationErrorCount > 0 && (\n <Box paddingRight={3}>\n <Tooltip\n portal\n placement=\"bottom-end\"\n content={\n <Text muted size={1}>\n <Flex align=\"center\" gap={3} padding={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n {t('document-validation.error', {count: validationErrorCount})}\n </Flex>\n </Text>\n }\n >\n <Text size={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n </Text>\n </Tooltip>\n </Box>\n )}\n </Flex>\n </Card>\n </Box>\n )\n}\n","import {useScheduledDraftDocument} from '../../../../singleDocRelease/hooks/useScheduledDraftDocument'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {useReleaseHistory} from '../../detail/documentTable/useReleaseHistory'\n\n/**\n * @internal\n */\nexport function useReleaseCreator(\n releaseDocumentId: string | undefined,\n isLoading: boolean = false,\n): {\n createdBy: string | undefined\n loading: boolean\n} {\n const releaseId =\n releaseDocumentId && !isLoading ? getReleaseIdFromReleaseDocumentId(releaseDocumentId) : ''\n\n const {firstDocument, loading: documentsLoading} = useScheduledDraftDocument(releaseDocumentId)\n const {documentHistory, loading: historyLoading} = useReleaseHistory(\n firstDocument?._id,\n releaseId,\n )\n\n if (!releaseDocumentId || isLoading) {\n return {createdBy: undefined, loading: false}\n }\n\n if (documentsLoading || historyLoading) {\n return {createdBy: undefined, loading: true}\n }\n\n return {\n createdBy: documentHistory?.createdBy,\n loading: false,\n }\n}\n","import {Flex, Skeleton, Stack} from '@sanity/ui'\n\nimport {AvatarSkeleton, UserAvatar} from '../../../../components'\nimport {ReleaseTime} from '../../components/ReleaseTime'\nimport {type VisibleColumn} from '../../components/Table/types'\nimport {useReleaseCreator} from '../hooks/useReleaseCreator'\nimport {type TableRelease} from '../ReleasesOverview'\n\nexport const ScheduledDraftMetadataCell: VisibleColumn<TableRelease>['cell'] = ({\n datum,\n cellProps,\n}) => {\n // Skeleton IDs don't start with _.releases\n // so pass undefined in loading cases\n const {createdBy, loading: creatorLoading} = useReleaseCreator(\n datum.isLoading ? undefined : datum._id,\n datum.isLoading,\n )\n\n if (datum.isLoading || !datum.metadata) {\n return (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} sizing=\"border\">\n <Skeleton animated radius={2} style={{height: '40px', width: '150px'}} />\n </Flex>\n )\n }\n\n return (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} sizing=\"border\">\n <Flex align=\"center\" gap={3}>\n {creatorLoading && <AvatarSkeleton $size={1} animated />}\n {!creatorLoading && createdBy && <UserAvatar user={createdBy} size={1} />}\n <Stack space={1}>\n <ReleaseTime release={datum} />\n </Stack>\n </Flex>\n </Flex>\n )\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Flex, Text} from '@sanity/ui'\n\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../../../ui-components/tooltip/Tooltip'\nimport {useTranslation} from '../../../../i18n'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {getIsScheduledDateInPast} from '../../../util/getIsScheduledDateInPast'\nimport {type VisibleColumn} from '../../components/Table/types'\nimport {type TableRelease} from '../ReleasesOverview'\n\nexport const ScheduledDraftWarningCell: VisibleColumn<TableRelease>['cell'] = ({\n datum,\n cellProps,\n}) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const hasWarning = datum.state === 'active' && getIsScheduledDateInPast(datum)\n\n return (\n <Flex\n {...cellProps}\n align=\"center\"\n gap={2}\n paddingX={2}\n paddingY={3}\n sizing=\"border\"\n data-testid=\"warning-indicator\"\n >\n {hasWarning && (\n <Tooltip content={<Text size={1}>{t('passed-intended-publish-date-draft')}</Text>} portal>\n <Text size={1}>\n <ToneIcon icon={WarningOutlineIcon} tone=\"caution\" />\n </Text>\n </Tooltip>\n )}\n </Flex>\n )\n}\n","import {Flex} from '@sanity/ui'\n// oxlint-disable-next-line @sanity/i18n/no-i18next-import -- figure out how to have the linter be fine with importing types-only\nimport {type TFunction} from 'i18next'\n\nimport {Headers} from '../components/Table/TableHeader'\nimport {type Column} from '../components/Table/types'\nimport {ScheduledDraftDocumentPreview} from './columnCells/ScheduledDraftDocumentPreview'\nimport {ScheduledDraftMetadataCell} from './columnCells/ScheduledDraftMetadataCell'\nimport {ScheduledDraftWarningCell} from './columnCells/ScheduledDraftWarningCell'\nimport {type Mode} from './queryParamUtils'\nimport {type TableRelease} from './ReleasesOverview'\n\nexport const scheduledDraftsOverviewColumnDefs: (\n t: TFunction<'releases'>,\n releaseGroupMode: Mode,\n) => Column<TableRelease>[] = (t, releaseGroupMode) => {\n return [\n {\n id: 'documentPreview',\n sorting: false,\n width: null,\n style: {flex: 1},\n header: (props) => (\n <Flex {...props.headerProps} paddingLeft={2} paddingRight={2} paddingY={3} sizing=\"border\">\n <Headers.BasicHeader text={t('table-header.document')} />\n </Flex>\n ),\n cell: ScheduledDraftDocumentPreview,\n },\n {\n id: 'publishAt',\n sorting: true,\n width: 300,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} paddingX={2} sizing=\"border\">\n <Headers.SortHeaderButton\n {...props}\n text={\n releaseGroupMode === 'archived'\n ? t('table-header.scheduled-draft.published-at')\n : releaseGroupMode === 'paused'\n ? t('table-header.intended-for')\n : t('table-header.scheduled-for')\n }\n />\n </Flex>\n ),\n cell: ScheduledDraftMetadataCell,\n },\n {\n id: 'warning',\n sorting: false,\n width: 40,\n header: ({headerProps}) => <Flex {...headerProps} paddingY={3} sizing=\"border\" />,\n cell: ScheduledDraftWarningCell,\n },\n ]\n}\n","import {Box, Container, Flex} from '@sanity/ui'\nimport {motion} from 'motion/react'\nimport {useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useSingleDocReleaseEnabled} from '../../../singleDocRelease/context/SingleDocReleaseEnabledProvider'\nimport {useSingleDocReleaseUpsell} from '../../../singleDocRelease/context/SingleDocReleaseUpsellProvider'\nimport {UpsellPanel} from '../../../studio/upsell/UpsellPanel'\nimport {useReleasesUpsell} from '../../contexts/upsell/useReleasesUpsell'\nimport {ReleaseIllustration} from '../resources/ReleaseIllustration'\nimport {type CardinalityView} from './queryParamUtils'\n\nconst Panel = styled(Container)`\n width: auto;\n flex-shrink: 0;\n`\n\nconst SingleDocReleasesUpsell = () => {\n const {mode} = useSingleDocReleaseEnabled()\n const {upsellData, telemetryLogs} = useSingleDocReleaseUpsell()\n const handlePrimaryClick = useCallback(() => {\n telemetryLogs.panelPrimaryClicked()\n }, [telemetryLogs])\n\n const handleSecondaryClick = useCallback(() => {\n telemetryLogs.panelSecondaryClicked()\n }, [telemetryLogs])\n\n if (mode !== 'upsell' || !upsellData) {\n return null\n }\n return (\n <Flex direction=\"column\" flex={1} justify={'center'} align={'center'}>\n <motion.div\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n transition={{duration: 0.3, ease: 'easeInOut'}}\n >\n <Panel width={0} padding={4} paddingY={1}>\n <Flex align={'center'} direction=\"column\">\n <ReleaseIllustration />\n <Box paddingTop={2}>\n <UpsellPanel\n align=\"center\"\n layout=\"vertical\"\n data={{...upsellData, image: null}}\n border={false}\n onPrimaryClick={handlePrimaryClick}\n onSecondaryClick={handleSecondaryClick}\n />\n </Box>\n </Flex>\n </Panel>\n </motion.div>\n </Flex>\n )\n}\n\nconst ReleasesUpsell = () => {\n const {upsellData, telemetryLogs, mode} = useReleasesUpsell()\n const handlePrimaryClick = useCallback(() => {\n telemetryLogs.panelPrimaryClicked()\n }, [telemetryLogs])\n\n const handleSecondaryClick = useCallback(() => {\n telemetryLogs.panelSecondaryClicked()\n }, [telemetryLogs])\n\n if (!upsellData || mode === 'default') {\n return null\n }\n return (\n <Flex direction=\"column\" flex={1} justify={'center'} align={'center'}>\n <motion.div\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n transition={{duration: 0.3, ease: 'easeInOut'}}\n >\n <Panel width={0} padding={4} paddingY={1}>\n <Flex align={'center'} direction=\"column\">\n <ReleaseIllustration />\n <Box paddingTop={2}>\n <UpsellPanel\n align=\"center\"\n layout=\"vertical\"\n data={{...upsellData, image: null}}\n border={false}\n onPrimaryClick={handlePrimaryClick}\n onSecondaryClick={handleSecondaryClick}\n />\n </Box>\n </Flex>\n </Panel>\n </motion.div>\n </Flex>\n )\n}\n\nexport function SchedulesUpsell({cardinalityView}: {cardinalityView: CardinalityView}) {\n if (cardinalityView === 'drafts') {\n return <SingleDocReleasesUpsell />\n }\n if (cardinalityView === 'releases') {\n return <ReleasesUpsell />\n }\n return null\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {AddIcon, ChevronDownIcon, EarthGlobeIcon} from '@sanity/icons'\nimport {Box, type ButtonMode, Card, Flex, Inline, useMediaIndex} from '@sanity/ui'\nimport {isSameDay} from 'date-fns/isSameDay'\nimport {AnimatePresence, motion} from 'motion/react'\nimport {\n type CSSProperties,\n type MouseEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {Button} from '../../../../ui-components/button/Button'\nimport {CalendarFilter} from '../../../components/inputs/DateFilters/calendar/CalendarFilter'\nimport useDialogTimeZone from '../../../hooks/useDialogTimeZone'\nimport {useTimeZone} from '../../../hooks/useTimeZone'\nimport {useTranslation} from '../../../i18n'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {useSingleDocReleaseEnabled} from '../../../singleDocRelease/context/SingleDocReleaseEnabledProvider'\nimport {useScheduledDraftsEnabled} from '../../../singleDocRelease/hooks/useScheduledDraftsEnabled'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {isCardinalityOneRelease, isPausedCardinalityOneRelease} from '../../../util/releaseUtils'\nimport {CreateReleaseDialog} from '../../components/dialog/CreateReleaseDialog'\nimport {useReleasesUpsell} from '../../contexts/upsell/useReleasesUpsell'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {isReleaseDocument} from '../../store/types'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {useArchivedReleases} from '../../store/useArchivedReleases'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../store/useReleasePermissions'\nimport {type ReleasesMetadata, useReleasesMetadata} from '../../store/useReleasesMetadata'\nimport {getIsScheduledDateInPast} from '../../util/getIsScheduledDateInPast'\nimport {getReleaseTone} from '../../util/getReleaseTone'\nimport {\n filterReleasesForOverview,\n getReleaseDefaults,\n shouldShowReleaseInView,\n} from '../../util/util'\nimport {Table, type TableRowProps} from '../components/Table/Table'\nimport {type TableSort} from '../components/Table/TableProvider'\nimport {CalendarPopover} from './CalendarPopover'\nimport {CardinalityViewPicker} from './CardinalityViewPicker'\nimport {ConfirmActiveScheduledDraftsBanner} from './ConfirmActiveScheduledDraftsBanner'\nimport {DraftsDisabledBanner} from './DraftsDisabledBanner'\nimport {\n buildReleasesSearchParams,\n type CardinalityView,\n getInitialCardinalityView,\n getInitialFilterDate,\n getInitialReleaseGroupMode,\n getInitialReleaseNotFound,\n type Mode,\n} from './queryParamUtils'\nimport {createReleaseCalendarFilterDay, DateFilterButton} from './ReleaseCalendarFilter'\nimport {ReleaseMenuButtonWrapper} from './ReleaseMenuButtonWrapper'\nimport {ReleaseNotFoundBanner} from './ReleaseNotFoundBanner'\nimport {ReleasesEmptyState} from './ReleasesEmptyState'\nimport {releasesOverviewColumnDefs} from './ReleasesOverviewColumnDefs'\nimport {ScheduledDraftMenuButtonWrapper} from './ScheduledDraftMenuButtonWrapper'\nimport {ScheduledDraftsEmptyState} from './ScheduledDraftsEmptyState'\nimport {scheduledDraftsOverviewColumnDefs} from './ScheduledDraftsOverviewColumnDefs'\nimport {SchedulesUpsell} from './SchedulesUpsell'\nimport {useTimezoneAdjustedDateTimeRange} from './useTimezoneAdjustedDateTimeRange'\n\nconst MotionButton = motion.create(Button)\n\nexport interface TableRelease extends ReleaseDocument {\n documentsMetadata?: ReleasesMetadata\n isDeleted?: boolean\n}\n\nconst DEFAULT_RELEASES_OVERVIEW_SORT: TableSort = {column: 'publishAt', direction: 'asc'}\nconst DEFAULT_ARCHIVED_RELEASES_OVERVIEW_SORT: TableSort = {\n column: 'lastActivity',\n direction: 'desc',\n}\n\nfunction toLocalDateComponents(utcDate: Date, utcToZoneDate: (date: Date) => Date): Date {\n const tz = utcToZoneDate(utcDate)\n return new Date(tz.getFullYear(), tz.getMonth(), tz.getDate())\n}\n\nexport function ReleasesOverview() {\n const {data: allReleases, loading: loadingReleases} = useActiveReleases()\n const {data: allArchivedReleases} = useArchivedReleases()\n const {mode: releasesUpsellMode, handleOpenDialog: handleOpenReleasesUpsellDialog} =\n useReleasesUpsell()\n const {mode: scheduledDraftsMode} = useSingleDocReleaseEnabled()\n const isScheduledDraftsEnabled = useScheduledDraftsEnabled()\n const {document, releases: releasesConfig} = useWorkspace()\n const isReleasesEnabled = Boolean(releasesConfig?.enabled)\n const isDraftModelEnabled = document?.drafts?.enabled\n\n const router = useRouter()\n const navigateRef = useRef(router.navigate)\n const [releaseGroupMode, setReleaseGroupMode] = useState<Mode>(getInitialReleaseGroupMode(router))\n\n const cardinalityView = useMemo(\n () => getInitialCardinalityView({router, isScheduledDraftsEnabled, isReleasesEnabled})(),\n [router, isScheduledDraftsEnabled, isReleasesEnabled],\n )\n\n const [releaseFilterDate, setReleaseFilterDate] = useState<Date | undefined>(\n getInitialFilterDate(router),\n )\n const [showReleaseNotFound, setShowReleaseNotFound] = useState<boolean>(() =>\n getInitialReleaseNotFound(router),\n )\n const [isCreateReleaseDialogOpen, setIsCreateReleaseDialogOpen] = useState(false)\n\n // Filter releases based on cardinality view\n // 'releases' view shows releases with cardinality 'many' or undefined\n // 'drafts' view shows releases with cardinality 'one'\n const releases = useMemo(\n () => allReleases.filter(shouldShowReleaseInView(cardinalityView)),\n [allReleases, cardinalityView],\n )\n\n const archivedReleases = useMemo(\n () => allArchivedReleases.filter(shouldShowReleaseInView(cardinalityView)),\n [allArchivedReleases, cardinalityView],\n )\n\n const pausedReleases = useMemo(\n () =>\n cardinalityView === 'drafts'\n ? releases.filter((release) => isPausedCardinalityOneRelease(release))\n : [],\n [releases, cardinalityView],\n )\n\n const releaseIds = useMemo(() => releases.map((release) => release._id), [releases])\n const {data: releasesMetadata, loading: loadingReleasesMetadata} = useReleasesMetadata(releaseIds)\n const loading = loadingReleases || (loadingReleasesMetadata && !releasesMetadata)\n const loadingTableData = loading || (!releasesMetadata && Boolean(releaseIds.length))\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const timeZoneScope = CONTENT_RELEASES_TIME_ZONE_SCOPE\n const {timeZone, utcToCurrentZoneDate} = useTimeZone(timeZoneScope)\n const {selectedPerspective} = usePerspective()\n const {DialogTimeZone, dialogProps, dialogTimeZoneShow} = useDialogTimeZone(timeZoneScope)\n const getTimezoneAdjustedDateTimeRange = useTimezoneAdjustedDateTimeRange()\n\n const {createRelease} = useReleaseOperations()\n const {checkWithPermissionGuard} = useReleasePermissions()\n const [hasCreatePermission, setHasCreatePermission] = useState<boolean | null>(null)\n\n const mediaIndex = useMediaIndex()\n const isNarrowViewport = mediaIndex < 2\n\n const narrowFilterStyle: CSSProperties | undefined = isNarrowViewport\n ? {minWidth: '100%', order: 3}\n : undefined\n const narrowTimezoneStyle: CSSProperties | undefined = isNarrowViewport\n ? {marginLeft: 'auto'}\n : undefined\n const timeZoneLabel = `${timeZone.abbreviation} (${timeZone.namePretty})`\n const timeZoneButtonProps = isNarrowViewport\n ? {tooltipProps: {content: timeZoneLabel}}\n : {iconRight: ChevronDownIcon, text: timeZoneLabel}\n\n const getRowProps = useCallback(\n (datum: TableRelease): Partial<TableRowProps> => {\n if (datum.isDeleted) {\n return {tone: 'transparent'}\n }\n\n if (isReleaseDocument(selectedPerspective) && selectedPerspective._id === datum._id) {\n return {tone: getReleaseTone(datum)}\n }\n\n if (datum.state === 'active' && getIsScheduledDateInPast(datum)) {\n return {tone: 'caution'}\n }\n\n return {tone: 'default'}\n },\n [selectedPerspective],\n )\n\n const [scrollContainerRef, setScrollContainerRef] = useState<HTMLDivElement | null>(null)\n\n const hasReleases = releases.length > 0 || archivedReleases.length > 0\n // banner that shows when drafts mode is disabled, or scheduled drafts are disabled\n // but there are still scheduled drafts\n const showDraftsDisabledBanner =\n cardinalityView === 'drafts' && (!isDraftModelEnabled || !isScheduledDraftsEnabled)\n const loadingOrHasReleases = loading || hasReleases\n const hasNoReleases = !loading && !hasReleases\n\n const tableReleases = useMemo<TableRelease[]>(() => {\n if (!hasReleases || !releasesMetadata) return []\n return releases.map((release) => ({\n ...release,\n publishAt: release.publishAt || release.metadata.intendedPublishAt,\n documentsMetadata: releasesMetadata[release._id] || {},\n }))\n }, [hasReleases, releasesMetadata, releases])\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n void checkWithPermissionGuard(createRelease, getReleaseDefaults()).then((hasPermissions) => {\n if (isMounted.current) setHasCreatePermission(hasPermissions)\n })\n\n return () => {\n isMounted.current = false\n }\n }, [checkWithPermissionGuard, createRelease])\n\n // switch to open mode if on archived mode and there are no archived releases\n if (releaseGroupMode === 'archived' && !loadingReleases && !archivedReleases.length) {\n setReleaseGroupMode('active')\n }\n\n // switch to open mode if on paused mode and there are no paused releases\n if (releaseGroupMode === 'paused' && !loadingReleases && !pausedReleases.length) {\n setReleaseGroupMode('active')\n }\n\n const handleDismissReleaseNotFound = useCallback(() => {\n setShowReleaseNotFound(false)\n }, [])\n\n const handleReleaseGroupModeChange = useCallback<MouseEventHandler<HTMLButtonElement>>(\n ({currentTarget: {value: groupMode}}) => {\n setReleaseGroupMode(groupMode as Mode)\n },\n [],\n )\n\n const handleCardinalityViewChange = useCallback(\n (view: CardinalityView) => () => {\n router.navigate({\n _searchParams: buildReleasesSearchParams(releaseFilterDate, releaseGroupMode, view),\n })\n },\n [router, releaseFilterDate, releaseGroupMode],\n )\n\n const handleSelectFilterDate = useCallback(\n (date?: Date) =>\n setReleaseFilterDate((prevFilterDate) => {\n if (!date) return undefined\n const normalized = toLocalDateComponents(date, utcToCurrentZoneDate)\n return prevFilterDate && isSameDay(prevFilterDate, normalized) ? undefined : normalized\n }),\n [utcToCurrentZoneDate],\n )\n\n const clearFilterDate = useCallback(() => {\n setReleaseFilterDate(undefined)\n setReleaseGroupMode('active')\n }, [])\n\n const handleNavigateToPaused = useCallback(() => {\n setReleaseFilterDate(undefined)\n setReleaseGroupMode('paused')\n }, [])\n\n useEffect(() => {\n navigateRef.current = router.navigate\n })\n\n // Sync filter/group state to URL, preserving the current cardinality view\n useEffect(() => {\n navigateRef.current({\n _searchParams: buildReleasesSearchParams(\n releaseFilterDate,\n releaseGroupMode,\n isScheduledDraftsEnabled ? cardinalityView : 'releases',\n ),\n })\n }, [releaseFilterDate, releaseGroupMode, cardinalityView, isScheduledDraftsEnabled])\n\n const [hasMounted, setHasMounted] = useState(false)\n\n useEffect(() => {\n // oxlint-disable-next-line react/react-compiler\n setHasMounted(true)\n }, [])\n\n const showCalendar = mediaIndex > 2\n\n const currentArchivedPicker = useMemo(() => {\n const groupModeButtonBaseProps = {\n disabled: loading || !hasReleases,\n mode: 'bleed' as ButtonMode,\n padding: 2,\n ...(hasMounted\n ? {\n initial: {opacity: 0},\n animate: {opacity: 1},\n transition: {duration: 0.4, ease: 'easeInOut' as const},\n }\n : {}),\n }\n return (\n <AnimatePresence>\n <MotionButton\n key=\"open-group\"\n {...groupModeButtonBaseProps}\n onClick={handleReleaseGroupModeChange}\n selected={releaseGroupMode === 'active'}\n text={t('action.open')}\n value=\"active\"\n />\n {cardinalityView === 'drafts' && (\n <Tooltip\n disabled={pausedReleases.length !== 0}\n content={t('no-paused-release')}\n placement=\"bottom\"\n >\n <div>\n <MotionButton\n key=\"paused-group\"\n {...groupModeButtonBaseProps}\n disabled={groupModeButtonBaseProps.disabled || !pausedReleases.length}\n onClick={handleReleaseGroupModeChange}\n selected={releaseGroupMode === 'paused'}\n text={t('action.paused')}\n value=\"paused\"\n />\n </div>\n </Tooltip>\n )}\n <Tooltip\n disabled={archivedReleases.length !== 0}\n content={t('no-archived-release')}\n placement=\"bottom\"\n >\n <div>\n <MotionButton\n key=\"archived-group\"\n {...groupModeButtonBaseProps}\n disabled={groupModeButtonBaseProps.disabled || !archivedReleases.length}\n onClick={handleReleaseGroupModeChange}\n selected={releaseGroupMode === 'archived'}\n text={t('action.archived')}\n value=\"archived\"\n />\n </div>\n </Tooltip>\n </AnimatePresence>\n )\n }, [\n loading,\n hasReleases,\n hasMounted,\n handleReleaseGroupModeChange,\n releaseGroupMode,\n t,\n archivedReleases.length,\n pausedReleases.length,\n cardinalityView,\n ])\n\n const handleOnClickCreateRelease = useCallback(() => {\n if (releasesUpsellMode === 'upsell') {\n handleOpenReleasesUpsellDialog()\n return\n }\n setIsCreateReleaseDialogOpen(true)\n }, [releasesUpsellMode, handleOpenReleasesUpsellDialog])\n\n const createReleaseButton = useMemo(() => {\n if (isScheduledDraftsEnabled && cardinalityView === 'drafts') return null\n\n return (\n <Button\n icon={AddIcon}\n disabled={!hasCreatePermission || isCreateReleaseDialogOpen}\n onClick={handleOnClickCreateRelease}\n text={tCore('release.action.create-new')}\n tooltipProps={{\n disabled: hasCreatePermission === true,\n content: tCore('release.action.permission.error'),\n }}\n />\n )\n }, [\n cardinalityView,\n hasCreatePermission,\n isCreateReleaseDialogOpen,\n handleOnClickCreateRelease,\n tCore,\n isScheduledDraftsEnabled,\n ])\n\n const handleOnCreateRelease = useCallback(\n (createdReleaseId: string) => {\n setIsCreateReleaseDialogOpen(false)\n\n router.navigate(\n {releaseId: createdReleaseId},\n {\n stickyParams: {\n excludedPerspectives: null,\n perspective: createdReleaseId,\n },\n },\n )\n },\n [router],\n )\n\n const renderRowActions = useCallback(\n ({datum}: {datum: TableRelease | unknown}) => {\n const release = datum as TableRelease\n\n if (release.isDeleted || release.isLoading) return null\n\n if (cardinalityView === 'drafts') {\n return <ScheduledDraftMenuButtonWrapper release={release} />\n }\n\n const documentsCount =\n (releaseGroupMode === 'active'\n ? release.documentsMetadata?.documentCount\n : release.finalDocumentStates?.length) ?? 0\n\n return <ReleaseMenuButtonWrapper release={release} documentsCount={documentsCount} />\n },\n [releaseGroupMode, cardinalityView],\n )\n\n const filteredReleases = useMemo(() => {\n const dateFilter = releaseFilterDate\n ? {\n filterDate: releaseFilterDate,\n getTimezoneAdjustedDateTimeRange,\n }\n : undefined\n\n return filterReleasesForOverview({\n releases: tableReleases,\n archivedReleases,\n cardinalityView,\n releaseGroupMode,\n dateFilter,\n })\n }, [\n tableReleases,\n archivedReleases,\n cardinalityView,\n releaseGroupMode,\n releaseFilterDate,\n getTimezoneAdjustedDateTimeRange,\n ])\n\n const showConfirmActiveScheduledDraftsBanner =\n cardinalityView === 'drafts' &&\n releases.some((release) => release.state === 'active' && isCardinalityOneRelease(release))\n\n const calendarFilterContent = useMemo(\n () => (\n <CalendarFilter\n disabled={loading || releases.length === 0}\n renderCalendarDay={createReleaseCalendarFilterDay(cardinalityView)}\n selectedDate={releaseFilterDate}\n onSelect={handleSelectFilterDate}\n timeZoneScope={CONTENT_RELEASES_TIME_ZONE_SCOPE}\n />\n ),\n [loading, releases, releaseFilterDate, handleSelectFilterDate, cardinalityView],\n )\n\n const renderCalendarFilter = useMemo(\n () => (\n <Flex flex=\"none\">\n <Card borderRight flex=\"none\" disabled>\n {calendarFilterContent}\n </Card>\n </Flex>\n ),\n [calendarFilterContent],\n )\n\n const tableColumns = useMemo(() => {\n if (cardinalityView === 'drafts') {\n return scheduledDraftsOverviewColumnDefs(t, releaseGroupMode)\n }\n return releasesOverviewColumnDefs(t, releaseGroupMode)\n }, [cardinalityView, releaseGroupMode, t])\n\n const hasBannerAboveTable =\n showReleaseNotFound || showDraftsDisabledBanner || showConfirmActiveScheduledDraftsBanner\n\n const isArchivedReleasesView = releaseGroupMode === 'archived' && cardinalityView === 'releases'\n const defaultTableSort = isArchivedReleasesView\n ? DEFAULT_ARCHIVED_RELEASES_OVERVIEW_SORT\n : DEFAULT_RELEASES_OVERVIEW_SORT\n\n const releasesEmptyStateComponent = useCallback(\n () => <ReleasesEmptyState createReleaseButton={createReleaseButton} />,\n [createReleaseButton],\n )\n\n const tableEmptyState = useMemo(() => {\n if (cardinalityView === 'releases' && releaseGroupMode === 'active') {\n return releasesEmptyStateComponent\n }\n // Use specific text for drafts view\n if (cardinalityView === 'drafts') {\n return t('no-scheduled-drafts')\n }\n // Use default text empty state for other cases (archived, etc.)\n return t('no-releases')\n }, [cardinalityView, releaseGroupMode, releasesEmptyStateComponent, t])\n\n function renderNoReleasesEmptyState() {\n const isUpsell =\n (cardinalityView === 'releases' && releasesUpsellMode === 'upsell') ||\n (cardinalityView === 'drafts' && scheduledDraftsMode === 'upsell')\n\n if (isUpsell) {\n return <SchedulesUpsell cardinalityView={cardinalityView} />\n }\n\n if (cardinalityView === 'drafts') {\n return <ScheduledDraftsEmptyState />\n }\n\n return <ReleasesEmptyState createReleaseButton={createReleaseButton} />\n }\n\n return (\n <Flex direction=\"row\" flex={1} style={{height: '100%'}}>\n <Flex flex={1}>\n {showCalendar && renderCalendarFilter}\n\n <Flex direction=\"column\" flex={1} style={{position: 'relative'}}>\n <Card flex=\"none\" padding={3}>\n <Flex align=\"center\" flex={1} gap={3} wrap=\"wrap\">\n <Inline>\n {!showCalendar && (\n <CalendarPopover content={calendarFilterContent} asDialog={isNarrowViewport} />\n )}\n <CardinalityViewPicker\n cardinalityView={cardinalityView}\n loading={loading}\n onCardinalityViewChange={handleCardinalityViewChange}\n isScheduledDraftsEnabled={isScheduledDraftsEnabled}\n allReleases={allReleases}\n isReleasesEnabled={isReleasesEnabled}\n isDraftModelEnabled={isDraftModelEnabled}\n />\n </Inline>\n\n <Flex flex={1} gap={1} style={narrowFilterStyle}>\n {loadingOrHasReleases &&\n (releaseFilterDate ? (\n <DateFilterButton filterDate={releaseFilterDate} onClear={clearFilterDate} />\n ) : (\n currentArchivedPicker\n ))}\n </Flex>\n <Flex flex=\"none\" gap={2} style={narrowTimezoneStyle}>\n <Button\n icon={EarthGlobeIcon}\n mode=\"bleed\"\n onClick={dialogTimeZoneShow}\n {...timeZoneButtonProps}\n />\n {DialogTimeZone && <DialogTimeZone {...dialogProps} />}\n {loadingOrHasReleases && createReleaseButton}\n </Flex>\n </Flex>\n </Card>\n {showReleaseNotFound && (\n <ReleaseNotFoundBanner onDismiss={handleDismissReleaseNotFound} />\n )}\n {showDraftsDisabledBanner && (\n <DraftsDisabledBanner\n isDraftModelEnabled={isDraftModelEnabled}\n isScheduledDraftsEnabled={isScheduledDraftsEnabled}\n allReleases={allReleases}\n />\n )}\n {showConfirmActiveScheduledDraftsBanner && (\n <ConfirmActiveScheduledDraftsBanner\n releases={releases}\n releaseGroupMode={releaseGroupMode}\n hasDateFilter={Boolean(releaseFilterDate)}\n onNavigateToPaused={handleNavigateToPaused}\n />\n )}\n\n {hasNoReleases ? (\n renderNoReleasesEmptyState()\n ) : (\n <Box\n ref={setScrollContainerRef}\n marginTop={hasBannerAboveTable ? 0 : 3}\n overflow=\"auto\"\n >\n <Table<TableRelease>\n // for resetting filter and sort on table when filer changed\n key={releaseFilterDate ? 'by_date' : releaseGroupMode}\n defaultSort={defaultTableSort}\n loading={loadingTableData}\n data={filteredReleases}\n columnDefs={tableColumns}\n emptyState={tableEmptyState}\n // oxlint-disable-next-line @sanity/i18n/no-attribute-string-literals\n rowId=\"_id\"\n rowActions={renderRowActions}\n rowProps={getRowProps}\n scrollContainerRef={scrollContainerRef}\n hideTableInlinePadding\n />\n </Box>\n )}\n </Flex>\n </Flex>\n {isCreateReleaseDialogOpen && (\n <CreateReleaseDialog\n onCancel={() => setIsCreateReleaseDialogOpen(false)}\n onSubmit={handleOnCreateRelease}\n origin=\"release-plugin\"\n />\n )}\n </Flex>\n )\n}\n","import {useRouter} from 'sanity/router'\n\nimport {ReleaseDetail} from './detail/ReleaseDetail'\nimport {ReleasesOverview} from './overview/ReleasesOverview'\n\nexport function ReleasesTool() {\n const router = useRouter()\n\n const {releaseId} = router.state as {releaseId?: string}\n if (releaseId) return <ReleaseDetail key={releaseId} />\n\n return <ReleasesOverview />\n}\n"],"names":["GROUP_SEARCH_PARAM_KEY","RELEASE_NOT_FOUND_SEARCH_PARAM_KEY","DATE_SEARCH_PARAM_KEY","VIEW_SEARCH_PARAM_KEY","DATE_SEARCH_PARAM_VALUE_FORMAT","getInitialReleaseNotFound","router","URLSearchParams","state","_searchParams","get","getInitialFilterDate","activeFilterDate","Date","undefined","getInitialReleaseGroupMode","activeGroupMode","getInitialCardinalityView","isScheduledDraftsEnabled","isReleasesEnabled","buildReleasesSearchParams","releaseFilterDate","releaseGroupMode","cardinalityView","params","push","format","INITIAL_VALUE","events","nextCursor","loading","error","removeDupes","prev","next","noDupes","reduce","acc","event","has","id","set","Map","Array","from","values","addEventData","timestamp","type","origin","getReleaseActivityEvents","client","releaseId","refetchEventsTrigger$","BehaviorSubject","cursor","fetchEvents","limit","toString","append","observable","request","url","config","dataset","getReleaseIdFromReleaseDocumentId","tag","pipe","map","response","catchError","console","events$","switchMap","startWith","scan","sort","a","b","getTime","tap","shareReplay","reloadEvents","loadMore","lastCursorUsed","getValue","buildReleaseEditEvents","transactions","release","_rev","releaseEditEvents","currentDocument","transaction","effect","effects","_id","before","applyMendozaPatch","revert","changed","author","releaseName","metadata","releaseType","intendedPublishAt","intendedPublishDate","Object","length","change","TRANSLOG_ENTRY_LIMIT","documentTransactionsCache","create","newTransactions","oldTransactions","seen","Set","concat","filter","add","getReleaseTransactions","documentId","toTransaction","cacheKey","cachedTransactions","of","fetchLogs","options","getTransactionsLogs","effectFormat","reverse","fromTransaction","expand","allTransactions","batch","editEvents","getReleaseEditEvents","observeDocument$","Boolean","distinctUntilChanged","current","isCreateReleaseEvent","isScheduleReleaseEvent","isPublishReleaseEvent","isArchiveReleaseEvent","isUnarchiveReleaseEvent","isAddDocumentToReleaseEvent","isDiscardDocumentFromReleaseEvent","isEditReleaseEvent","isTranslogEvent","isEventsAPIEvent","EVENTS_INITIAL_VALUE","hasMore","notEnabledActivityEvents","getReleaseEvents","releasesState$","documentPreviewStore","eventsAPIEnabled","unstable_observeDocument","apiVersion","RELEASES_STUDIO_CLIENT_OPTIONS","editEvents$","releaseRev$","releases","skip","activityEvents","documentsCount$","unstable_observeDocumentIdSet","status","documentIds","sideEffects$","merge","combineLatest","activity","edit","parse","creationEvent","find","indexOf","deduplicateEvents","index","nextEvent","areTheSameDate","date1","date2","time1","time2","Math","abs","useReleaseEvents","$","_c","useClient","useDocumentPreviewStore","state$","useReleasesStore","useSource","beta","eventsAPI","t0","getReleaseDocumentIdFromReleaseId","releaseEvents","useObservable","t1","isArchivedRelease","releaseState","getReleaseDocumentIntent","documentTypeName","documentRevision","isCardinalityOneRelease","path","intentParams","scheduledDraft","rev","inspect","historyEvent","historyVersion","archivedRelease","searchParams","getPublishedId","ReleaseDocumentPreview","layout","isGoingToBePublished","documentPresence","useDocumentPresence","t2","t3","forwardRef","linkProps","ref","LinkComponent","t4","previewPresence","t5","t6","t7","documentType","perspectiveStack","isLoading","previewLoading","value","resolvedPreview","useDocumentPreviewValues","t8","t9","t10","StatusText","styled","Text","withConfig","displayName","componentId","ACTIVITY_TEXT_118N","addDocumentToRelease","archiveRelease","createRelease","discardDocumentFromRelease","publishRelease","scheduleRelease","unarchiveRelease","unscheduleRelease","editRelease","ReleaseEventDocumentPreview","ScheduleTarget","children","for","dateStyle","timeStyle","dateTimeFormat","useDateTimeFormat","t","useTranslation","releasesLocaleNamespace","bb0","dateString","publishAt","formattedDate","FadeInCard","motion","Card","ActivityTimestamp","date","useTemporalPhrase","minimal","relativeTime","useRelativeTime","toISOString","ReleaseActivityListItem","memo","releaseTitle","opacity","bounce","duration","t11","t12","t13","prevProps","nextProps","estimateSize","VirtualContainer","Box","ReleaseActivityList","virtualizerContainerRef","useRef","listEvents","useMemo","lastEventFromEventsAPI","lastEventDate","virtualizer","useVirtualizer","count","getScrollElement","i","overscan","paddingEnd","virtualItems","getVirtualItems","useEffect","lastItem","at","height","getTotalSize","width","position","virtualRow","isLoaderRow","measureElement","top","left","transform","start","key","MotionFlex","Flex","FillHeight","div","ReleaseDashboardActivityPanel","show","tCore","display","flexDirection","flex","maxHeight","title","ArchivedReleaseBanner","tRelease","projectSubscriptions","useProjectSubscriptions","retentionDays","featureTypes","retention","features","attributes","maxRetentionDays","utcToCurrentZoneDate","useTimeZone","CONTENT_RELEASES_TIME_ZONE_SCOPE","_updatedAt","_removalDate","addDays","removalDate","Symbol","Link","_temp","ReleaseDetailsEditor","updateRelease","useReleaseOperations","timer","setTimer","useState","checkWithPermissionGuard","useReleasePermissions","hasUpdatePermission","setHasUpdatePermission","changedValue","clearTimeout","newTimer","setTimeout","handleOnChange","isMounted","getIsReleaseOpen","then","hasPermission","useReleaseTime","timeZone","getLocalTimeZone","abbreviation","localeTimeZoneAbbreviation","getTimezoneAbbreviation","publishDate","getPublishDateFromRelease","ReleaseTime","getReleaseTime","isReleaseScheduledOrScheduling","isScheduledOrScheduling","ARCHIVED_RELEASE_STATES","includes","isInArchivedView","dateInputFormat","ReleaseDateInput","props","setIsIntendedScheduleDateInPast","setIntendedPublishAt","zoneDateToUtc","intendedPublishAtTimezoneAdjusted","parsedDate","currentTarget","isValid","isBefore","startOfMinute","handlePublishAtInputChange","ReleaseTypePicker","popoverRef","buttonRef","inputRef","datePickerRef","toast","useToast","open","setOpen","setReleaseType","isUpdating","setIsUpdating","isIntendedScheduleDateInPast","updatedDate","getCalendarLabels","calendarLabels","dialog","document","querySelector","newRelease","isEqual","getIsScheduledDateInPast","closable","finally","close","useClickOutsideEvent","isPublishDateInPast","isReleaseScheduled","publishDateLabel","pickedReleaseType","nextPublishAt","handleButtonReleaseTypeChange","cleanDate","handlePublishAtCalendarChange","handleOnPickerClick","getReleaseTone","tone","bb1","t14","releaseTypeIcon","t15","labelContent","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","MONTH_PICKER_VARIANT","carousel","t30","t31","borderRadius","placement","content","t32","degreesToRadians","degrees","PI","ProgressIcon","progress","rest","circlePath","partialCircle","join","d","vs","cx","cy","r","end","fromX","cos","fromY","sin","toX","toY","large","sweep","getDocumentValidationLoading","documents","hasError","isValidating","validatedCount","forEach","doc","isGoingToUnpublish","isValidated","validation","ValidationProgressIndicator","totalCount","showCheckmark","setShowCheckmark","hasFinishedOnce","setHasFinishedOnce","isFinished","isMinimal","cardBackground","background","ReleaseDashboardDetails","schedule","selectedReleaseId","usePerspective","setPerspective","useSetPerspective","isSelected","releaseFullTitle","isAtTimeRelease","isReleaseOpen","isActive","shouldDisplayError","shouldDisplayPermissionWarning","setShouldDisplayPermissionWarning","shouldDisplayWarnings","useWorkspace","drafts","enabled","isDraftModelEnabled","hasPermission_0","handlePinRelease","PinFilledIcon","PinIcon","isNotArchivedRelease","ErrorOutlineIcon","WarningOutlineIcon","message","ReleasePublishAllButton","disabled","isMenuItem","onConfirmDialogOpen","onConfirmDialogClose","perspective","telemetry","useTelemetry","publishBundleStatus","setPublishBundleStatus","publishPermission","setPublishPermission","some","isValidatingDocuments","_temp2","hasDocumentValidationErrors","isPublishButtonDisabled","selectedPerspective","run","log","PublishedRelease","isReleaseDocument","publishingError","handleConfirmPublishAll","confirmButton","text","onClick","releaseDocumentsLength","confirmPublishDialog","tooltipText","publishTooltipContent","handleInitialPublish","icon","PublishIcon","handleOnClick","tooltipProps","sharedProps","validation_0","promiseWithResolvers","resolve","reject","promise","Promise","res","rej","useDocumentRevertStates","releaseDocuments","observableClient","transactionId","resultPromiseRef","resolvedDocumentRevertStatesPromiseRef","resolvedDocumentRevertStatesResultRef","publishedDocuments","getDocumentTransaction","docId","documentIDs","document_1","revisionId","docRevisionPairs","forkJoin","docId_0","publishedDocumentExists","unpublishDocument","document_2","_system","delete","_temp3","err","_temp5","_temp6","documentRevertStatesResult","document_0","revertDocument","_temp4","result","results","err_0","usePostPublishTransactions","ConfirmReleaseDialog","revertReleaseStatus","setRevertReleaseStatus","releaseDisplayTitle","hasPostPublishTransactions","getDocumentRevertStates","stageNewRevertRelease","setStageNewRevertRelease","revertRelease","useRouter","revertReleaseId","navigate","navigateToRevertRelease","documentRevertStates","revertReleaseId_0","createReleaseId","Error","description","RevertRelease","revertType","marginBottom","catch","revertError","isReleaseLimitError","handleRevertRelease","ReleaseRevertButton","guardWithReleaseLimitUpsell","useReleasesUpsell","isPendingGuardResponse","setIsPendingGuardResponse","hasCreatePermission","setHasCreatePermission","handleMoveToConfirmStatus","getReleaseDefaults","hasPermissions","RestoreIcon","ReleaseScheduleButton","schedulePermission","setSchedulePermission","setStatus","setPublishAt","rerenderDialog","setRerenderDialog","timeZoneAdjustedPublishAt","isScheduleButtonDisabled","isScheduledDateInPast","ScheduledRelease","schedulingError","handleConfirmSchedule","handleBundlePublishAtCalendarChange","date_0","handleBundleInputChange","handleOnDialogClose","_isScheduledDateInPast","documentsLength","cancelButton","alternativeName","offset","t33","t34","t35","t36","t37","confirmScheduleDialog","handleOnInitialSchedule","scheduleTooltipContent","ClockIcon","cur","ReleaseUnscheduleButton","unschedule","UnscheduledRelease","CloseCircleIcon","ReleaseActionsStateHandler","states","onActions","renderChildren","ReleaseActionsResolver","actions","actionProps","useCustomReleaseActions","source","DuplicateReleaseToastLink","actionResult","navigateToDuplicateRelease","RELEASE_ACTION_MAP","confirmDialog","dialogId","dialogHeaderI18nKey","dialogDescriptionI18nKey","dialogConfirmButtonI18nKey","confirmButtonTone","toastSuccessI18nKey","toastFailureI18nKey","DeletedRelease","archive","ArchivedRelease","unarchive","UnarchivedRelease","duplicate","DuplicatedRelease","ReleaseMenu","ignoreCTA","setSelectedAction","releaseMenuDisabled","deleteRelease","hasArchivePermission","setHasArchivePermission","hasUnarchivePermission","setHasUnarchivePermission","hasDeletePermission","setHasDeletePermission","hasPublishPermission","setHasPublishPermission","hasSchedulePermission","setHasSchedulePermission","hasDuplicatePermission","setHasDuplicatePermission","hasPermission_1","hasPermission_2","hasPermission_3","hasPermission_4","action","getAttribute","handleOnInitiateAction","UnarchiveIcon","ArchiveIcon","archiveUnarchiveMenuItem","TrashIcon","deleteMenuItem","bb2","unscheduleMenuItem","bb3","scheduleMenuItem","bb4","publishMenuItem","bb5","CopyIcon","duplicateMenuItem","bb6","ActionsOrder","ReleasePreviewCard","weight","size","toastActionComponents","ReleaseMenuButton","documentsCount","duplicateRelease","isPerformingOperation","setIsPerformingOperation","selectedAction","releaseMenuRef","openPopover","setOpenPopover","customActions","customActionDescriptions","setCustomActionDescriptions","handleCustomActionsUpdate","isActionPublishOrSchedule","handleDelete","handleUnarchive","duplicateReleaseId","duplicatedMetadata","handleDuplicate","actionLookup","actionValues","toastComponents","actionError","handleAction","confirmActionDialog","closePopover","handleOnButtonClick","action_0","handleSetSelectedAction","action_1","onHandle","handleOnActionClick","action_2","label","customActionMenuItems","hasCustomActions","Spinner","EllipsisHorizontalIcon","StatusItem","avatar","testId","margin","STATUS_TITLE_I18N","ReleaseStatusItems","createEvent","extraEvent","isNonNullable","footerEvents","_createdAt","event_0","ReleaseDashboardFooter","releaseActionButton","CopyReleaseActions","resolvePathFromState","buildIntentUrl","useStudioUrl","toastKey","navigator","clipboard","writeText","copyToClipboard","releasePath","ReleaseLinkCopied","handleCopyReleaseLink","ReleaseIdCopied","handleCopyReleaseId","ReleaseTitleCopied","handleCopyReleaseTitle","ShareIcon","LinkIcon","TargetIcon","TextIcon","ReleaseDashboardHeader","inspector","setInspector","handleNavigateToReleasesList","handleActivityClick","minWidth","Button","maxWidth","AddDocumentSearch","onClose","idsInRelease","DOCUMENT_ACTION_CONFIGS","labelKey","FILTER_TAB_CONFIGS","countDocumentsByAction","actionType","getDocumentActionType","isPending","errors","added","unpublished","documentMatchesFilter","getReleaseDocumentActionConfig","ReleaseDocumentFilterTabs","activeFilter","onFilterChange","config_0","ReleaseDocumentFilterTabsInner","counts","getTabLabel","getTabTone","config_1","DocumentActionsInner","showDiscardDialog","setShowDiscardDialog","showUnpublishDialog","setShowUnpublishDialog","coreT","isAlreadyUnpublished","publishedId","_type","getVersionFromId","version","permission","discardVersionPermission","isDiscardVersionPermissionsLoading","useDocumentPairPermissions","unpublishPermission","isUnpublishPermissionsLoading","isDiscardVersionActionDisabled","granted","noPermissionToUnpublish","unPublishTooltipContent","isUnpublishActionDisabled","CloseIcon","UnpublishIcon","memoKey","DocumentActions","useSchema","historyCache","activeHistoryStreams","pendingHistoryResolvers","acquireHistorySlot","maxConcurrent","releaseHistorySlot","max","shift","useReleaseHistory","releaseDocumentId","history","setHistory","getVersionId","versionId","cancelledRef","cached","excludeContent","includeIdentifiedDocumentsOnly","fetchAndParse","collaborators","documentHistory","aggregated","createdBy","lastEditedBy","editors","item","mutations","mutation","MemoReleaseDocumentPreview","TruncatedSpan","span","DocumentType","schema","elementRef","isTruncated","setIsTruncated","element","scrollWidth","clientWidth","checkTruncation","element_0","observer","ResizeObserver","observe","cancelled","fonts","ready","disconnect","measureRef","textElement","MemoDocumentType","documentActionColumn","style","header","headerProps","cell","cellProps","datum","actionBadge","documentActionConfig","getDocumentTableColumnDefs","sorting","sortTransform","String","name","toLowerCase","level","validationErrorCount","firstError","focusPath","pathToString","intent","errorLabel","UpdatedAtCell","bundleId","historyDocumentId","endsWith","extractSearchableText","depth","visited","isArray","child","trim","entries","every","val","startsWith","searchDocumentRelease","searchTerm","normalizedSearchTerm","normalizedTitle","normalizedName","hasTitle","hasName","combinedText","allWordsMatch","split","word","documentInSearchTerm","FULL_HEIGHT_STYLE","SCROLL_CONTAINER_STYLE","overflow","scrollbarWidth","msOverflowStyle","FIT_CONTENT_STYLE","isBundleDocumentRow","maybeBundleDocumentRow","ReleaseSummary","scrollContainerRef","setScrollContainerRef","createVersion","openAddDocumentDialog","setAddDocumentDialog","pendingAddedDocument","setPendingAddedDocument","setActiveFilter","rowProps","renderRowActions","documentTableColumnDefs","handleAddDocumentClick","data","filterRows","documentToAdd","versionDocumentId","pendingAddedDocumentId","pendingDocumentRow","getDocumentVariantType","AddedVersion","documentOrigin","prev_0","closeAddDialog","documentsNoLongerPending","pendingDocument","prev_1","tableData","isCardinalityOne","hasNoDocuments","textAlign","column","direction","AddIcon","MotionCard","ReleaseDetail","releaseIdRaw","decodeURIComponent","useActiveReleases","archivedReleases","useArchivedReleases","documentsLoading","bundleDocumentsError","useBundleDocuments","candidate","releaseInDetail","isNotFound","detailContent","useReleasesMetadata","releaseIds","addReleaseIdsToListener","addBundleIdsToListener","removeReleaseIdsFromListener","removeBundleIdsFromListener","useReleasesMetadataProvider","responseData","fromEntries","CalendarPopover","asDialog","isCalendarOpen","setIsCalendarOpen","FilterIcon","triggerButton","getPickerView","hasSingleDocRelease","CardinalityViewPicker","allReleases","onCardinalityViewChange","pickerView","view","telemetryEvent","NavigatedToReleasesOverview","NavigatedToScheduledDrafts","handleViewChange","fontWeight","CalendarIcon","ChevronDownIcon","useScheduleActiveDrafts","scheduleActions","flatMap","scheduleActiveDrafts","ConfirmScheduledDraftsDialog","activeScheduledDrafts","isScheduling","setIsScheduling","hasPastDates","handleConfirmSchedules","isPast","ConfirmActiveScheduledDraftsBanner","hasDateFilter","onNavigateToPaused","isDialogOpen","setIsDialogOpen","shouldOpenDialog","handleCloseDialog","handleClick","buttonText","DraftsDisabledBanner","getBannerMessage","useTimezoneAdjustedDateTimeRange","startOfDay","endOfDay","ReleaseCalendarFilterDayWithCardinality","getTimezoneAdjustedDateTimeRange","calendarDayProps","startOfDayForTimeZone","endOfDayForTimeZone","shouldShowReleaseInView","releasePublishAt","publishDateUTC","dayHasReleases","createReleaseCalendarFilterDay","ReleaseCalendarFilterDayComponent","MotionButton","DateFilterButton","filterDate","onClear","isExiting","setIsExiting","handleOnExitComplete","ease","ReleaseMenuButtonWrapper","ReleaseNotFoundBanner","onDismiss","ReleaseIllustration","ReleasesEmptyState","createReleaseButton","mode","ReleaseColumnValidationLoading","rId","ReleaseDocumentsCounter","documentCount","ReleaseNameCell","isArchived","isReleasePinned","PREVIEW_SIZES","default","media","isDeleted","as","cardProps","pinButtonIcon","enableColumnFormMode","currentMode","expectedMode","releasesOverviewColumnDefs","checkColumnMode","Infinity","hidden","publishedAt","lastActivity","documentsMetadata","updatedAtDate","updatedAt","hasWarning","finalDocumentStates","filterNull","ScheduledDraftMenuButtonWrapper","scheduledDraftMenuRef","firstDocument","scheduledDraftDocument","useScheduledDraftDocument","navigateIntent","handleActionComplete","onActionComplete","dialogs","useScheduledDraftMenuActions","deleteSchedule","isPausedCardinalityOneRelease","publishNow","schedulePublish","editSchedule","displayedMenuItems","canPerformActions","ScheduledDraftsEmptyState","singleDocReleaseNamespace","useSingleDocReleaseEnabled","ScheduledDraftDocumentPreview","firstDocumentValidation","T0","T1","T2","useReleaseCreator","historyLoading","ScheduledDraftMetadataCell","creatorLoading","ScheduledDraftWarningCell","scheduledDraftsOverviewColumnDefs","Panel","Container","SingleDocReleasesUpsell","upsellData","telemetryLogs","useSingleDocReleaseUpsell","panelPrimaryClicked","handlePrimaryClick","panelSecondaryClicked","handleSecondaryClick","image","ReleasesUpsell","SchedulesUpsell","DEFAULT_RELEASES_OVERVIEW_SORT","DEFAULT_ARCHIVED_RELEASES_OVERVIEW_SORT","toLocalDateComponents","utcDate","utcToZoneDate","tz","getFullYear","getMonth","getDate","ReleasesOverview","loadingReleases","allArchivedReleases","releasesUpsellMode","handleOpenDialog","handleOpenReleasesUpsellDialog","scheduledDraftsMode","useScheduledDraftsEnabled","releasesConfig","navigateRef","setReleaseGroupMode","setReleaseFilterDate","showReleaseNotFound","setShowReleaseNotFound","isCreateReleaseDialogOpen","setIsCreateReleaseDialogOpen","pausedReleases","releasesMetadata","loadingReleasesMetadata","loadingTableData","DialogTimeZone","dialogProps","dialogTimeZoneShow","useDialogTimeZone","mediaIndex","useMediaIndex","isNarrowViewport","order","narrowFilterStyle","marginLeft","narrowTimezoneStyle","timeZoneLabel","namePretty","iconRight","timeZoneButtonProps","getRowProps","hasReleases","showDraftsDisabledBanner","loadingOrHasReleases","hasNoReleases","release_1","tableReleases","handleDismissReleaseNotFound","groupMode","handleReleaseGroupModeChange","handleCardinalityViewChange","prevFilterDate","normalized","isSameDay","handleSelectFilterDate","clearFilterDate","handleNavigateToPaused","hasMounted","setHasMounted","showCalendar","initial","animate","transition","padding","groupModeButtonBaseProps","t38","t39","t40","currentArchivedPicker","t41","handleOnClickCreateRelease","t42","t43","t44","t45","t46","t47","t48","createdReleaseId","stickyParams","excludedPerspectives","handleOnCreateRelease","datum_0","release_2","filterReleasesForOverview","dateFilter","filteredReleases","showConfirmActiveScheduledDraftsBanner","t49","calendarFilterContent","t50","renderCalendarFilter","t51","t52","tableColumns","hasBannerAboveTable","defaultTableSort","releasesEmptyStateComponent","t53","t54","tableEmptyState","renderNoReleasesEmptyState","t55","t56","t57","t58","t59","t60","t61","t62","t63","EarthGlobeIcon","t64","t65","t66","t67","t68","t69","t70","t71","t72","t73","t74","t75","release_3","release_0","ReleasesTool"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ReleasesTool.js","sources":["../../src/core/releases/tool/overview/queryParamUtils.ts","../../src/core/releases/tool/detail/events/getReleaseActivityEvents.ts","../../src/core/releases/tool/detail/events/buildReleaseEditEvents.ts","../../src/core/releases/tool/detail/events/getReleaseEditEvents.ts","../../src/core/releases/tool/detail/events/types.ts","../../src/core/releases/tool/detail/events/getReleaseEvents.ts","../../src/core/releases/tool/detail/events/useReleaseEvents.ts","../../src/core/releases/tool/components/getReleaseDocumentIntent.ts","../../src/core/releases/tool/components/ReleaseDocumentPreview.tsx","../../src/core/releases/tool/detail/ReleaseActivityListItem.tsx","../../src/core/releases/tool/detail/ReleaseActivityList.tsx","../../src/core/releases/tool/detail/ReleaseDashboardActivityPanel.tsx","../../src/core/releases/tool/detail/ArchivedReleaseBanner.tsx","../../src/core/releases/tool/detail/ReleaseDetailsEditor.tsx","../../src/core/releases/hooks/useReleaseTime.ts","../../src/core/releases/tool/components/ReleaseTime.tsx","../../src/core/releases/tool/detail/ReleaseDateInput.tsx","../../src/core/releases/tool/detail/ReleaseTypePicker.tsx","../../src/ui-components/progressIcon/ProgressIcon.tsx","../../src/core/releases/util/getDocumentValidationLoading.ts","../../src/core/releases/tool/detail/ValidationProgressIndicator.tsx","../../src/core/releases/tool/detail/ReleaseDashboardDetails.tsx","../../src/core/releases/tool/components/releaseCTAButtons/ReleasePublishAllButton.tsx","../../src/core/util/promiseWithResolvers.ts","../../src/core/releases/tool/components/releaseCTAButtons/ReleaseRevertButton/useDocumentRevertStates.ts","../../src/core/releases/tool/components/releaseCTAButtons/ReleaseRevertButton/usePostPublishTransactions.ts","../../src/core/releases/tool/components/releaseCTAButtons/ReleaseRevertButton/ReleaseRevertButton.tsx","../../src/core/releases/tool/components/releaseCTAButtons/ReleaseScheduleButton.tsx","../../src/core/releases/tool/components/releaseCTAButtons/ReleaseUnscheduleButton.tsx","../../src/core/releases/components/ReleaseActionsResolver.tsx","../../src/core/releases/hooks/useCustomReleaseActions.ts","../../src/core/releases/tool/components/ReleaseMenuButton/DuplicateReleaseToastLink.tsx","../../src/core/releases/tool/components/ReleaseMenuButton/releaseActions.ts","../../src/core/releases/tool/components/ReleaseMenuButton/ReleaseMenu.tsx","../../src/core/releases/tool/components/ReleaseMenuButton/ReleasePreviewCard.tsx","../../src/core/releases/tool/components/ReleaseMenuButton/ReleaseMenuButton.tsx","../../src/core/releases/tool/components/StatusItem.tsx","../../src/core/releases/tool/detail/ReleaseStatusItems.tsx","../../src/core/releases/tool/detail/ReleaseDashboardFooter.tsx","../../src/core/releases/tool/detail/CopyReleaseActions.tsx","../../src/core/releases/tool/detail/ReleaseDashboardHeader.tsx","../../src/core/releases/tool/detail/AddDocumentSearch.tsx","../../src/core/releases/tool/detail/releaseDocumentActions.ts","../../src/core/releases/tool/detail/components/ReleaseDocumentFilterTabs.tsx","../../src/core/releases/tool/detail/documentTable/DocumentActions.tsx","../../src/core/releases/tool/detail/documentTable/useReleaseHistory.ts","../../src/core/releases/tool/detail/documentTable/DocumentTableColumnDefs.tsx","../../src/core/releases/tool/detail/documentTable/extractSearchableText.ts","../../src/core/releases/tool/detail/documentTable/searchDocumentRelease.ts","../../src/core/releases/tool/detail/ReleaseSummary.tsx","../../src/core/releases/tool/detail/ReleaseDetail.tsx","../../src/core/releases/store/useReleasesMetadata.ts","../../src/core/releases/tool/overview/CalendarPopover.tsx","../../src/core/releases/tool/overview/CardinalityViewPicker.tsx","../../src/core/releases/tool/overview/ConfirmScheduledDraftsDialog.tsx","../../src/core/releases/tool/overview/ConfirmActiveScheduledDraftsBanner.tsx","../../src/core/releases/tool/overview/DraftsDisabledBanner.tsx","../../src/core/releases/tool/overview/useTimezoneAdjustedDateTimeRange.ts","../../src/core/releases/tool/overview/ReleaseCalendarFilter.tsx","../../src/core/releases/tool/overview/ReleaseMenuButtonWrapper.tsx","../../src/core/releases/tool/overview/ReleaseNotFoundBanner.tsx","../../src/core/releases/tool/resources/ReleaseIllustration.tsx","../../src/core/releases/tool/overview/ReleasesEmptyState.tsx","../../src/core/releases/tool/overview/columnCells/ReleaseColumnValidationLoading.tsx","../../src/core/releases/tool/overview/columnCells/ReleaseDocumentsCounter.tsx","../../src/core/releases/tool/overview/columnCells/ReleaseName.tsx","../../src/core/releases/tool/overview/ReleasesOverviewColumnDefs.tsx","../../src/core/releases/tool/overview/ScheduledDraftMenuButtonWrapper.tsx","../../src/core/releases/tool/overview/ScheduledDraftsEmptyState.tsx","../../src/core/releases/tool/overview/columnCells/ScheduledDraftDocumentPreview.tsx","../../src/core/releases/tool/overview/hooks/useReleaseCreator.ts","../../src/core/releases/tool/overview/columnCells/ScheduledDraftMetadataCell.tsx","../../src/core/releases/tool/overview/columnCells/ScheduledDraftWarningCell.tsx","../../src/core/releases/tool/overview/ScheduledDraftsOverviewColumnDefs.tsx","../../src/core/releases/tool/overview/SchedulesUpsell.tsx","../../src/core/releases/tool/overview/ReleasesOverview.tsx","../../src/core/releases/tool/ReleasesTool.tsx"],"sourcesContent":["import {format} from 'date-fns/format'\nimport {type RouterContextValue, type SearchParam} from 'sanity/router'\n\nexport type Mode = 'active' | 'paused' | 'archived'\nexport type CardinalityView = 'releases' | 'drafts'\n\nexport const GROUP_SEARCH_PARAM_KEY = 'group'\nexport const RELEASE_NOT_FOUND_SEARCH_PARAM_KEY = 'releaseNotFound'\nconst DATE_SEARCH_PARAM_KEY = 'date'\nconst VIEW_SEARCH_PARAM_KEY = 'view'\n\nconst DATE_SEARCH_PARAM_VALUE_FORMAT = 'yyyy-MM-dd'\n\nexport function getInitialReleaseNotFound(router: RouterContextValue): boolean {\n return (\n new URLSearchParams(router.state._searchParams).get(RELEASE_NOT_FOUND_SEARCH_PARAM_KEY) ===\n 'true'\n )\n}\n\nexport const getInitialFilterDate = (router: RouterContextValue) => () => {\n const activeFilterDate = new URLSearchParams(router.state._searchParams).get(\n DATE_SEARCH_PARAM_KEY,\n )\n\n return activeFilterDate ? new Date(activeFilterDate) : undefined\n}\n\nexport const getInitialReleaseGroupMode = (router: RouterContextValue) => (): Mode => {\n const activeGroupMode = new URLSearchParams(router.state._searchParams).get(\n GROUP_SEARCH_PARAM_KEY,\n )\n\n if (activeGroupMode === 'archived') return 'archived'\n if (activeGroupMode === 'paused') return 'paused'\n return 'active'\n}\n\nexport const getInitialCardinalityView =\n ({\n router,\n isScheduledDraftsEnabled,\n isReleasesEnabled,\n }: {\n router: RouterContextValue\n isScheduledDraftsEnabled: boolean\n isReleasesEnabled: boolean\n }) =>\n (): CardinalityView => {\n if (!isScheduledDraftsEnabled) {\n return 'releases'\n }\n\n if (!isReleasesEnabled) {\n return 'drafts'\n }\n\n // Both are enabled, use the query param\n const cardinalityView = new URLSearchParams(router.state._searchParams).get(\n VIEW_SEARCH_PARAM_KEY,\n )\n\n // 'drafts' is the only value we store in the query param\n // absence of the param means 'releases' (default)\n return cardinalityView === 'drafts' ? 'drafts' : 'releases'\n }\n\nexport const buildReleasesSearchParams = (\n releaseFilterDate: Date | undefined,\n releaseGroupMode: Mode,\n cardinalityView: CardinalityView,\n): SearchParam[] => {\n const params: SearchParam[] = []\n\n if (releaseFilterDate) {\n params.push([DATE_SEARCH_PARAM_KEY, format(releaseFilterDate, DATE_SEARCH_PARAM_VALUE_FORMAT)])\n } else if (releaseGroupMode !== 'active') {\n // Add group param when there's no date filter and it's not 'active' (default)\n params.push([GROUP_SEARCH_PARAM_KEY, releaseGroupMode])\n }\n\n // Only add view param when it's 'drafts' (releases is default, no param needed)\n if (cardinalityView === 'drafts') {\n params.push([VIEW_SEARCH_PARAM_KEY, 'drafts'])\n }\n\n return params\n}\n","import {type SanityClient} from '@sanity/client'\nimport {BehaviorSubject, type Observable} from 'rxjs'\nimport {catchError, map, scan, shareReplay, startWith, switchMap, tap} from 'rxjs/operators'\n\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type ReleaseEvent} from './types'\n\nexport interface ReleaseEventsObservableValue {\n events: ReleaseEvent[]\n nextCursor: string\n loading: boolean\n error: null | Error\n}\nexport const INITIAL_VALUE: ReleaseEventsObservableValue = {\n events: [],\n nextCursor: '',\n loading: true,\n error: null,\n}\n\nfunction removeDupes(prev: ReleaseEvent[], next: ReleaseEvent[]): ReleaseEvent[] {\n const noDupes = [...prev, ...next].reduce((acc, event) => {\n if (acc.has(event.id)) {\n return acc\n }\n return acc.set(event.id, event)\n }, new Map<string, ReleaseEvent>())\n return Array.from(noDupes.values())\n}\n\nexport function addEventData(event: Omit<ReleaseEvent, 'id' | 'origin'>): ReleaseEvent {\n return {...event, id: `${event.timestamp}-${event.type}`, origin: 'events'} as ReleaseEvent\n}\n\ninterface InitialFetchEventsOptions {\n client: SanityClient\n releaseId: string\n}\nexport function getReleaseActivityEvents({client, releaseId}: InitialFetchEventsOptions): {\n events$: Observable<ReleaseEventsObservableValue>\n reloadEvents: () => void\n loadMore: () => void\n} {\n const refetchEventsTrigger$ = new BehaviorSubject<{\n cursor: string | null\n origin: 'loadMore' | 'reload' | 'initial'\n }>({\n cursor: null,\n origin: 'initial',\n })\n\n const fetchEvents = ({limit, nextCursor}: {limit: number; nextCursor: string | null}) => {\n const params = new URLSearchParams({limit: limit.toString()})\n if (nextCursor) {\n params.append('nextCursor', nextCursor)\n }\n return client.observable\n .request<{\n events: Omit<ReleaseEvent, 'id' | 'origin'>[]\n nextCursor: string\n }>({\n url: `/data/history/${client.config().dataset}/events/releases/${getReleaseIdFromReleaseDocumentId(releaseId)}?${params.toString()}`,\n tag: 'get-release-events',\n })\n .pipe(\n map((response) => {\n return {\n events: response.events.map(addEventData),\n nextCursor: response.nextCursor,\n loading: false,\n error: null,\n }\n }),\n catchError((error) => {\n console.error(error)\n return [{events: [], nextCursor: '', loading: false, error}]\n }),\n )\n }\n\n let nextCursor: string = ''\n return {\n events$: refetchEventsTrigger$.pipe(\n switchMap(({cursor, origin}) => {\n return fetchEvents({\n nextCursor: cursor,\n limit: origin === 'reload' ? 10 : 100,\n }).pipe(\n map((response) => {\n return {...response, origin}\n }),\n startWith({events: [], nextCursor: '', loading: true, error: null, origin}),\n )\n }),\n scan((prev, next) => {\n const events = removeDupes(prev.events, next.events).sort(\n (a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime(),\n )\n return {\n events: events,\n // If we are reloading, we should keep the cursor as it was before.\n nextCursor: next.origin === 'reload' ? prev.nextCursor : next.nextCursor,\n loading: next.loading,\n error: next.error,\n }\n }, INITIAL_VALUE),\n tap((response) => {\n nextCursor = response.nextCursor\n }),\n shareReplay(1),\n ),\n /**\n * Loads new events for the release, fetching the latest events from the API.\n */\n reloadEvents: () => refetchEventsTrigger$.next({cursor: null, origin: 'reload'}),\n /**\n * Loads more events for the release, fetching the next batch of events from the API.\n */\n loadMore: () => {\n const lastCursorUsed = refetchEventsTrigger$.getValue().cursor\n if (nextCursor && lastCursorUsed !== nextCursor) {\n refetchEventsTrigger$.next({origin: 'loadMore', cursor: nextCursor})\n }\n },\n }\n}\n","import {type ReleaseDocument, type ReleaseType} from '@sanity/client'\nimport {type TransactionLogEventWithEffects} from '@sanity/types'\n\nimport {applyMendozaPatch} from '../../../../preview/utils/applyMendozaPatch'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type ReleaseEvent} from './types'\n\nexport function buildReleaseEditEvents(\n transactions: TransactionLogEventWithEffects[],\n release: ReleaseDocument,\n): ReleaseEvent[] {\n // Confirm we have all the events by checking the first transaction id and the release._rev, the should match.\n if (release._rev !== transactions[0]?.id) {\n console.error('Some transactions are missing, cannot calculate the edit events')\n return []\n }\n\n const releaseEditEvents: ReleaseEvent[] = []\n // We start from the last release document and apply changes in reverse order\n // Compare for each transaction what changed, if metadata.releaseType or metadata.intendedPublishAt changed build an event.\n let currentDocument = release\n for (const transaction of transactions) {\n const effect = transaction.effects[release._id]\n if (!effect) continue\n // This will apply the revert effect to the document, so we will get the document from before this change.\n const before = applyMendozaPatch(currentDocument, effect.revert, currentDocument._rev)\n const changed: {\n releaseType?: ReleaseType\n intendedPublishDate?: string\n } = {}\n\n if (before?.state !== currentDocument.state && currentDocument.state === 'archived') {\n releaseEditEvents.push({\n type: 'archiveRelease',\n timestamp: transaction.timestamp,\n author: transaction.author,\n releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n id: transaction.id,\n origin: 'translog',\n })\n }\n if (before?.state !== currentDocument.state && currentDocument.state === 'published') {\n releaseEditEvents.push({\n type: 'publishRelease',\n timestamp: transaction.timestamp,\n author: transaction.author,\n releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n id: transaction.id,\n origin: 'translog',\n })\n }\n\n if (before?.state === 'unarchiving' && currentDocument.state === 'active') {\n releaseEditEvents.push({\n type: 'unarchiveRelease',\n timestamp: transaction.timestamp,\n author: transaction.author,\n releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n id: transaction.id,\n origin: 'translog',\n })\n }\n if (before?.metadata.releaseType !== currentDocument.metadata.releaseType) {\n changed.releaseType = currentDocument.metadata.releaseType\n }\n if (before?.metadata.intendedPublishAt !== currentDocument.metadata.intendedPublishAt) {\n changed.intendedPublishDate = currentDocument.metadata.intendedPublishAt\n }\n // If the \"changed\" object has more than one key identify it as a change event\n if (Object.values(changed).length >= 1) {\n releaseEditEvents.push({\n type: before ? 'editRelease' : 'createRelease',\n origin: 'translog',\n author: transaction.author,\n change: changed,\n id: transaction.id,\n timestamp: transaction.timestamp,\n releaseName: getReleaseIdFromReleaseDocumentId(release._id),\n })\n }\n\n if (before) {\n currentDocument = before\n }\n }\n return releaseEditEvents\n}\n","import {type ReleaseDocument, type SanityClient} from '@sanity/client'\nimport {type TransactionLogEventWithEffects} from '@sanity/types'\nimport {\n catchError,\n distinctUntilChanged,\n expand,\n filter,\n from,\n map,\n type Observable,\n of,\n reduce,\n scan,\n shareReplay,\n startWith,\n switchMap,\n tap,\n} from 'rxjs'\n\nimport {getTransactionsLogs} from '../../../../store/translog/getTransactionsLogs'\nimport {buildReleaseEditEvents} from './buildReleaseEditEvents'\nimport {type ReleaseEvent} from './types'\n\nconst TRANSLOG_ENTRY_LIMIT = 100\n\nconst documentTransactionsCache: Record<string, TransactionLogEventWithEffects[]> =\n Object.create(null)\n\nfunction removeDupes(\n newTransactions: TransactionLogEventWithEffects[],\n oldTransactions: TransactionLogEventWithEffects[],\n) {\n const seen = new Set()\n return newTransactions.concat(oldTransactions).filter((transaction) => {\n if (seen.has(transaction.id)) {\n return false\n }\n seen.add(transaction.id)\n return true\n })\n}\n\n/**\n * This will fetch all the transactions for a given release.\n * I anticipate this would be a rather small number of transactions, given the release document is \"small\" and shouldn't change much.\n *\n * We need to fetch all of them to create the correct pagination of events in the activity feed, given we need to combine this with the\n * releaseActivityEvents that will be fetched from the events api.\n */\nfunction getReleaseTransactions({\n documentId,\n client,\n toTransaction,\n}: {\n documentId: string\n client: SanityClient\n toTransaction: string\n}): Observable<TransactionLogEventWithEffects[]> {\n const cacheKey = `${documentId}`\n const cachedTransactions = documentTransactionsCache[cacheKey] || []\n if (cachedTransactions.length > 0 && cachedTransactions[0].id === toTransaction) {\n return of(cachedTransactions)\n }\n\n function fetchLogs(options: {\n fromTransaction?: string\n toTransaction: string\n }): Observable<TransactionLogEventWithEffects[]> {\n return from(\n getTransactionsLogs(client, documentId, {\n tag: 'sanity.studio.release.history',\n effectFormat: 'mendoza',\n limit: TRANSLOG_ENTRY_LIMIT,\n reverse: true,\n fromTransaction: options.fromTransaction,\n toTransaction: options.toTransaction,\n }),\n )\n }\n\n return fetchLogs({fromTransaction: cachedTransactions[0]?.id, toTransaction: toTransaction})\n .pipe(\n expand((response) => {\n // Fetch more if the transactions length is equal to the limit\n if (response.length === TRANSLOG_ENTRY_LIMIT) {\n // Continue fetching if nextCursor exists, we use the last transaction received as the cursor.\n return fetchLogs({\n fromTransaction: undefined,\n toTransaction: response[response.length - 1].id,\n })\n }\n // End recursion by emitting an empty observable\n return of()\n }),\n // Combine all batches of transactions into a single array\n reduce(\n (allTransactions, batch) => allTransactions.concat(batch),\n [] as TransactionLogEventWithEffects[],\n ),\n )\n .pipe(\n map((transactions) => removeDupes(transactions, cachedTransactions)),\n tap((transactions) => {\n documentTransactionsCache[cacheKey] = transactions\n }),\n )\n}\n\ninterface EditEventsObservableValue {\n editEvents: ReleaseEvent[]\n loading: boolean\n error: null | Error\n}\nexport const INITIAL_VALUE: EditEventsObservableValue = {\n editEvents: [],\n loading: true,\n error: null,\n}\n\ninterface getReleaseActivityEventsOpts {\n client: SanityClient\n observeDocument$: Observable<ReleaseDocument | undefined>\n}\n\nexport function getReleaseEditEvents({\n client,\n observeDocument$,\n}: getReleaseActivityEventsOpts): Observable<EditEventsObservableValue> {\n return observeDocument$.pipe(\n filter(Boolean),\n distinctUntilChanged((prev, next) => prev._rev === next._rev),\n switchMap((release) => {\n return getReleaseTransactions({\n client,\n documentId: release._id,\n toTransaction: release._rev,\n }).pipe(\n map((transactions) => {\n return {\n editEvents: buildReleaseEditEvents(transactions, release),\n loading: false,\n error: null,\n }\n }),\n catchError((error) => {\n console.error(error)\n return of({editEvents: [], loading: false, error})\n }),\n )\n }),\n startWith(INITIAL_VALUE),\n scan((acc, current) => {\n // Accumulate edit events from previous state\n const editEvents = current.loading\n ? acc.editEvents // Preserve previous events while loading\n : current.editEvents // Update with new events when available\n\n return {...current, editEvents}\n }, INITIAL_VALUE),\n shareReplay(1),\n )\n}\n","import {type ReleaseType} from '@sanity/client'\n\nexport type ReleaseEvent =\n | CreateReleaseEvent\n | ScheduleReleaseEvent\n | UnscheduleReleaseEvent\n | PublishReleaseEvent\n | ArchiveReleaseEvent\n | UnarchiveReleaseEvent\n | AddDocumentToReleaseEvent\n | DiscardDocumentFromReleaseEvent\n | EditReleaseEvent\n\nexport interface BaseEvent {\n timestamp: string\n author: string\n releaseName: string\n id: string // Added client side ${event.timestamp}-${event.type}\n origin: 'translog' | 'events' // Added client side to identify from where the event was received\n}\n\nexport interface CreateReleaseEvent extends BaseEvent {\n type: 'createRelease'\n change?: Change\n}\n\nexport interface ScheduleReleaseEvent extends BaseEvent {\n type: 'scheduleRelease'\n publishAt: string\n}\n\nexport interface UnscheduleReleaseEvent extends BaseEvent {\n type: 'unscheduleRelease'\n}\n\nexport interface PublishReleaseEvent extends BaseEvent {\n type: 'publishRelease'\n}\n\nexport interface ArchiveReleaseEvent extends BaseEvent {\n type: 'archiveRelease'\n}\n\nexport interface UnarchiveReleaseEvent extends BaseEvent {\n type: 'unarchiveRelease'\n}\n\nexport interface AddDocumentToReleaseEvent extends BaseEvent {\n type: 'addDocumentToRelease'\n documentId: string\n documentType: string\n versionId: string\n revisionId: string\n versionRevisionId: string\n}\n\nexport interface DiscardDocumentFromReleaseEvent extends BaseEvent {\n type: 'discardDocumentFromRelease'\n documentId: string\n documentType: string\n versionId: string\n versionRevisionId: string\n}\n\ninterface Change {\n intendedPublishDate?: string\n releaseType?: ReleaseType\n}\nexport interface EditReleaseEvent extends BaseEvent {\n type: 'editRelease'\n isCreationEvent?: boolean\n change: Change\n}\n\n// Type guards\nexport const isCreateReleaseEvent = (event: ReleaseEvent): event is CreateReleaseEvent =>\n event.type === 'createRelease'\nexport const isScheduleReleaseEvent = (event: ReleaseEvent): event is ScheduleReleaseEvent =>\n event.type === 'scheduleRelease'\nexport const isPublishReleaseEvent = (event: ReleaseEvent): event is PublishReleaseEvent =>\n event.type === 'publishRelease'\nexport const isArchiveReleaseEvent = (event: ReleaseEvent): event is ArchiveReleaseEvent =>\n event.type === 'archiveRelease'\nexport const isUnarchiveReleaseEvent = (event: ReleaseEvent): event is UnarchiveReleaseEvent =>\n event.type === 'unarchiveRelease'\nexport const isAddDocumentToReleaseEvent = (\n event: ReleaseEvent,\n): event is AddDocumentToReleaseEvent => event.type === 'addDocumentToRelease'\nexport const isDiscardDocumentFromReleaseEvent = (\n event: ReleaseEvent,\n): event is DiscardDocumentFromReleaseEvent => event.type === 'discardDocumentFromRelease'\nexport const isEditReleaseEvent = (event: ReleaseEvent): event is EditReleaseEvent =>\n event.type === 'editRelease'\n\nexport const isTranslogEvent = (\n event: ReleaseEvent,\n): event is EditReleaseEvent | CreateReleaseEvent => event.origin === 'translog'\n\nexport const isEventsAPIEvent = (\n event: ReleaseEvent,\n): event is Exclude<ReleaseEvent, EditReleaseEvent> => event.origin === 'events'\n","import {type ReleaseDocument, type SanityClient} from '@sanity/client'\nimport {\n combineLatest,\n distinctUntilChanged,\n filter,\n map,\n merge,\n type Observable,\n of,\n skip,\n startWith,\n tap,\n} from 'rxjs'\n\nimport {type DocumentPreviewStore} from '../../../../preview/documentPreviewStore'\nimport {type ReleasesReducerState} from '../../../store/reducer'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../util/releasesClient'\nimport {getReleaseActivityEvents} from './getReleaseActivityEvents'\nimport {getReleaseEditEvents} from './getReleaseEditEvents'\nimport {isCreateReleaseEvent, isEventsAPIEvent, isTranslogEvent, type ReleaseEvent} from './types'\n\ninterface getReleaseEventsOpts {\n client: SanityClient\n releaseId: string\n releasesState$: Observable<ReleasesReducerState>\n documentPreviewStore: DocumentPreviewStore\n eventsAPIEnabled: boolean\n}\n\nexport const EVENTS_INITIAL_VALUE = {\n events: [],\n hasMore: false,\n error: null,\n loading: true,\n}\n\nconst notEnabledActivityEvents: ReturnType<typeof getReleaseActivityEvents> = {\n events$: of({\n events: [],\n nextCursor: '',\n loading: false,\n error: null,\n }),\n reloadEvents: () => {},\n loadMore: () => {},\n}\n\n/**\n * Combines activity and edit events for a release, and adds side effects for reloading events when the release or the document changes.\n */\nexport function getReleaseEvents({\n client,\n releaseId,\n releasesState$,\n documentPreviewStore,\n eventsAPIEnabled,\n}: getReleaseEventsOpts) {\n const observeDocument$ = documentPreviewStore.unstable_observeDocument(releaseId, {\n apiVersion: RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion,\n }) as Observable<ReleaseDocument | undefined>\n\n const editEvents$ = getReleaseEditEvents({client, observeDocument$})\n\n const releaseRev$ = releasesState$.pipe(\n map((state) => state.releases.get(releaseId)?._rev),\n filter(Boolean),\n distinctUntilChanged(),\n // Emit only when rev changes, after first non null value.\n skip(1),\n )\n\n // Turn off activity events if eventsAPI is not enabled.\n const activityEvents = eventsAPIEnabled\n ? getReleaseActivityEvents({client, releaseId})\n : notEnabledActivityEvents\n\n const groqFilter = `sanity::partOfRelease($releaseId)`\n\n // Turn off document counts listener if eventsAPI is not enabled.\n const documentsCount$ = eventsAPIEnabled\n ? of(0)\n : documentPreviewStore\n .unstable_observeDocumentIdSet(\n groqFilter,\n {releaseId: getReleaseIdFromReleaseDocumentId(releaseId)},\n {\n apiVersion: RELEASES_STUDIO_CLIENT_OPTIONS.apiVersion,\n },\n )\n .pipe(\n filter(({status}) => status === 'connected'),\n map(({documentIds}) => documentIds.length),\n distinctUntilChanged(),\n // Emit only when count changes, after first non null value.\n skip(1),\n )\n\n const sideEffects$ = merge(releaseRev$, documentsCount$).pipe(\n tap(() => {\n activityEvents.reloadEvents()\n }),\n startWith(null),\n )\n\n const events$ = combineLatest([activityEvents.events$, editEvents$, sideEffects$]).pipe(\n map(([activity, edit]) => {\n const events = [...activity.events, ...edit.editEvents]\n .sort((a, b) => Date.parse(b.timestamp) - Date.parse(a.timestamp))\n .reduce((acc: ReleaseEvent[], event) => {\n if (isCreateReleaseEvent(event)) {\n const creationEvent = acc.find(isCreateReleaseEvent)\n if (!creationEvent) acc.push(event)\n // Prefer the translog event for the creation given it has extra information.\n else if (isEventsAPIEvent(creationEvent) && isTranslogEvent(event)) {\n acc[acc.indexOf(creationEvent)] = event\n }\n } else acc.push(event)\n return acc\n }, [])\n\n return {\n events: deduplicateEvents(events),\n hasMore: Boolean(activity.nextCursor),\n error: activity.error || edit.error,\n loading: activity.loading || edit.loading,\n }\n }),\n )\n\n return {\n events$,\n loadMore: activityEvents.loadMore,\n }\n}\n\nconst deduplicateEvents = (events: ReleaseEvent[]) => {\n // Events are sorted by timestamp, compare this event with the next one, if they are the same type and timestamp, remove it.\n return events.filter((event, index) => {\n const nextEvent = events[index + 1]\n if (!nextEvent) return true\n return !(event.type === nextEvent.type && areTheSameDate(event.timestamp, nextEvent.timestamp))\n })\n}\n\n/**\n * Checks if two dates are the same date, without contemplating miliseconds.\n * The translog has miliseconds but the events api does not.\n */\nfunction areTheSameDate(date1: string, date2: string) {\n const time1 = new Date(date1).getTime()\n const time2 = new Date(date2).getTime()\n return Math.abs(time1 - time2) <= 1000\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\n\nimport {useClient} from '../../../../hooks/useClient'\nimport {useDocumentPreviewStore} from '../../../../store/datastores'\nimport {useSource} from '../../../../studio/source'\nimport {useReleasesStore} from '../../../store/useReleasesStore'\nimport {getReleaseDocumentIdFromReleaseId} from '../../../util/getReleaseDocumentIdFromReleaseId'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../util/releasesClient'\nimport {EVENTS_INITIAL_VALUE, getReleaseEvents} from './getReleaseEvents'\nimport {type ReleaseEvent} from './types'\n\nexport interface ReleaseEvents {\n events: ReleaseEvent[]\n loading: boolean\n error: null | Error\n loadMore: () => void\n hasMore: boolean\n}\n\nexport function useReleaseEvents(releaseId: string): ReleaseEvents {\n const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n const documentPreviewStore = useDocumentPreviewStore()\n const {state$: releasesState$} = useReleasesStore()\n const source = useSource()\n const eventsAPIEnabled = Boolean(source.beta?.eventsAPI?.releases)\n\n const releaseEvents = useMemo(\n () =>\n getReleaseEvents({\n client,\n releaseId: getReleaseDocumentIdFromReleaseId(releaseId),\n releasesState$,\n documentPreviewStore,\n eventsAPIEnabled,\n }),\n [releaseId, client, releasesState$, documentPreviewStore, eventsAPIEnabled],\n )\n const events = useObservable(releaseEvents.events$, EVENTS_INITIAL_VALUE)\n\n return {\n events: events.events,\n hasMore: events.hasMore,\n loading: events.loading,\n error: events.error,\n loadMore: releaseEvents.loadMore,\n }\n}\n","import {type ReleaseState} from '@sanity/client'\n\nimport {getPublishedId} from '../../../util/draftUtils'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\n\nconst isArchivedRelease = (releaseState: ReleaseState | undefined) =>\n releaseState === 'archived' || releaseState === 'archiving' || releaseState === 'unarchiving'\n\ninterface ReleaseDocumentIntentOptions {\n documentId: string\n documentTypeName: string\n releaseId: string\n releaseState?: ReleaseState\n documentRevision?: string\n isCardinalityOneRelease?: boolean\n /** Optional field path (stringified) to focus when the document opens. */\n path?: string\n}\n\n/**\n * Builds the `edit` intent params and search params used to open a document version\n * within a release perspective. Shared so that both the document preview link and the\n * validation deep-link resolve to the exact same document/perspective.\n *\n * @internal\n */\nexport function getReleaseDocumentIntent({\n documentId,\n documentTypeName,\n releaseId,\n releaseState,\n documentRevision,\n isCardinalityOneRelease,\n path,\n}: ReleaseDocumentIntentOptions): {\n params: Record<string, string | undefined>\n searchParams: [string, string][] | undefined\n} {\n const releaseName = getReleaseIdFromReleaseDocumentId(releaseId)\n\n let intentParams: Record<string, string | undefined> = {}\n if (isCardinalityOneRelease) {\n intentParams = {scheduledDraft: releaseName}\n } else if (releaseState === 'published') {\n // We are inspecting this document through the published view of the doc.\n intentParams = {\n rev: `@release:${releaseName}`,\n inspect: 'sanity/structure/history',\n }\n } else if (releaseState === 'archived') {\n // We are \"faking\" the release as if it is still valid only to render the document\n intentParams = {\n rev: '@lastEdited',\n inspect: 'sanity/structure/history',\n historyEvent: documentRevision,\n historyVersion: releaseName,\n archivedRelease: 'true',\n }\n }\n\n const searchParams: [string, string][] | undefined =\n isCardinalityOneRelease || isArchivedRelease(releaseState)\n ? undefined\n : [['perspective', releaseState === 'published' ? 'published' : releaseName]]\n\n return {\n params: {\n id: getPublishedId(documentId),\n type: documentTypeName,\n ...intentParams,\n ...(path ? {path} : {}),\n },\n searchParams,\n }\n}\n","import {type ReleaseState} from '@sanity/client'\nimport {Card} from '@sanity/ui'\nimport {type ForwardedRef, forwardRef, useMemo} from 'react'\nimport {IntentLink} from 'sanity/router'\n\nimport {type PreviewLayoutKey} from '../../../components/previews/types'\nimport {DocumentPreviewPresence} from '../../../presence'\nimport {SanityDefaultPreview} from '../../../preview/components/SanityDefaultPreview'\nimport {useDocumentPresence} from '../../../store/presence/useDocumentPresence'\nimport {useDocumentPreviewValues} from '../../../tasks/hooks/useDocumentPreviewValues'\nimport {getPublishedId} from '../../../util/draftUtils'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {getReleaseDocumentIntent} from './getReleaseDocumentIntent'\n\ninterface ReleaseDocumentPreviewProps {\n documentId: string\n documentTypeName: string\n releaseId: string\n releaseState?: ReleaseState\n documentRevision?: string\n hasValidationError?: boolean\n layout?: PreviewLayoutKey\n isGoingToBePublished?: boolean\n isCardinalityOneRelease?: boolean\n}\n\nexport function ReleaseDocumentPreview({\n documentId,\n documentTypeName,\n releaseId,\n releaseState,\n isCardinalityOneRelease,\n documentRevision,\n layout,\n isGoingToBePublished = false,\n}: ReleaseDocumentPreviewProps) {\n const documentPresence = useDocumentPresence(documentId)\n\n const {params, searchParams} = useMemo(\n () =>\n getReleaseDocumentIntent({\n documentId,\n documentTypeName,\n releaseId,\n releaseState,\n documentRevision,\n isCardinalityOneRelease,\n }),\n [\n documentId,\n documentTypeName,\n releaseId,\n releaseState,\n documentRevision,\n isCardinalityOneRelease,\n ],\n )\n\n const LinkComponent = useMemo(\n () =>\n forwardRef(function LinkComponent(\n linkProps: React.ComponentPropsWithoutRef<'a'>,\n ref: ForwardedRef<HTMLAnchorElement>,\n ) {\n return (\n <IntentLink\n {...linkProps}\n intent=\"edit\"\n params={params}\n searchParams={searchParams}\n ref={ref}\n />\n )\n }),\n [params, searchParams],\n )\n\n const previewPresence = useMemo(\n () => documentPresence?.length > 0 && <DocumentPreviewPresence presence={documentPresence} />,\n [documentPresence],\n )\n\n const {isLoading: previewLoading, value: resolvedPreview} = useDocumentPreviewValues({\n documentId: isGoingToBePublished ? getPublishedId(documentId) : documentId,\n documentType: documentTypeName,\n perspectiveStack: isGoingToBePublished ? [] : [getReleaseIdFromReleaseDocumentId(releaseId)],\n })\n\n return (\n <Card tone=\"inherit\" as={LinkComponent} radius={2} data-as=\"a\">\n <SanityDefaultPreview\n {...(resolvedPreview || {})}\n status={previewPresence}\n isPlaceholder={previewLoading}\n layout={layout}\n />\n </Card>\n )\n}\n","import {Card, Flex, Stack, Text} from '@sanity/ui'\nimport {motion} from 'motion/react'\nimport {memo, type ReactNode, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {UserAvatar} from '../../../components/userAvatar/UserAvatar'\nimport {useDateTimeFormat} from '../../../hooks/useDateTimeFormat'\nimport {useRelativeTime} from '../../../hooks/useRelativeTime'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {ReleaseDocumentPreview} from '../components/ReleaseDocumentPreview'\nimport {\n type AddDocumentToReleaseEvent,\n type DiscardDocumentFromReleaseEvent,\n isAddDocumentToReleaseEvent,\n isCreateReleaseEvent,\n isDiscardDocumentFromReleaseEvent,\n isEditReleaseEvent,\n isScheduleReleaseEvent,\n type ReleaseEvent,\n} from './events/types'\n\nconst StatusText = styled(Text)`\n strong {\n font-weight: 500;\n color: var(--card-fg-color);\n }\n time {\n white-space: nowrap;\n }\n`\nconst ACTIVITY_TEXT_118N: Record<ReleaseEvent['type'], string> = {\n addDocumentToRelease: 'activity.event.add-document',\n archiveRelease: 'activity.event.archive',\n createRelease: 'activity.event.create',\n discardDocumentFromRelease: 'activity.event.discard-document',\n publishRelease: 'activity.event.publish',\n scheduleRelease: 'activity.event.schedule',\n unarchiveRelease: 'activity.event.unarchive',\n unscheduleRelease: 'activity.event.unschedule',\n editRelease: 'activity.event.edit',\n}\n\nconst ReleaseEventDocumentPreview = ({\n event,\n releaseId,\n}: {\n releaseId: string\n event: AddDocumentToReleaseEvent | DiscardDocumentFromReleaseEvent\n}) => {\n return (\n <Stack space={2}>\n <ReleaseDocumentPreview\n releaseId={releaseId}\n documentId={event.documentId}\n documentTypeName={event.documentType}\n layout=\"block\"\n />\n </Stack>\n )\n}\n\nconst ScheduleTarget = ({children, event}: {children: ReactNode; event: ReleaseEvent}) => {\n const dateTimeFormat = useDateTimeFormat({dateStyle: 'full', timeStyle: 'medium'})\n const {t} = useTranslation(releasesLocaleNamespace)\n\n const formattedDate = useMemo(() => {\n if (isEditReleaseEvent(event)) {\n if (event.change.releaseType === 'asap') return t('activity.event.edit-time-asap')\n if (event.change.releaseType === 'undecided') return t('activity.event.edit-time-undecided')\n }\n\n let dateString: string | undefined\n if (isScheduleReleaseEvent(event)) {\n dateString = event.publishAt\n } else if (isCreateReleaseEvent(event)) {\n dateString = event.change?.intendedPublishDate\n } else if (isEditReleaseEvent(event)) {\n dateString = event.change.intendedPublishDate\n }\n\n if (!dateString) return null\n return dateTimeFormat.format(new Date(dateString))\n }, [dateTimeFormat, event, t])\n\n if (!formattedDate && isCreateReleaseEvent(event)) return null\n return (\n <span>\n {children} <strong>{formattedDate || '---'}</strong>\n </span>\n )\n}\n\nconst FadeInCard = motion.create(Card)\n\nfunction ActivityTimestamp({timestamp}: {timestamp: string}) {\n const dateTimeFormat = useDateTimeFormat({\n dateStyle: 'medium',\n timeStyle: 'short',\n })\n const date = useMemo(() => new Date(timestamp), [timestamp])\n const formattedDate = useMemo(() => dateTimeFormat.format(date), [dateTimeFormat, date])\n const relativeTime = useRelativeTime(date, {useTemporalPhrase: true, minimal: true})\n\n return (\n <time dateTime={date.toISOString()} title={relativeTime}>\n {formattedDate}\n </time>\n )\n}\n\nexport const ReleaseActivityListItem = memo(\n ({\n event,\n releaseId,\n releaseTitle,\n }: {\n event: ReleaseEvent\n releaseId: string\n releaseTitle: string\n }) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n\n return (\n <FadeInCard\n paddingX={1}\n paddingTop={1}\n paddingBottom={2}\n overflow=\"hidden\"\n // This card animates on entrance when a new event is added, not for every event that is rendered.\n // So if the user is seeing the list and a new event lands, the list will animate the new event. (That is by the <AnimatePresence initial=false> component wrapping the list)\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n transition={{type: 'spring', bounce: 0, duration: 0.4}}\n >\n <Flex align=\"center\" gap={2}>\n <UserAvatar user={event.author} />\n <Stack flex={1}>\n <Flex gap={2} align=\"center\">\n <StatusText muted size={1}>\n <Translate\n t={t}\n components={{\n ScheduleTarget: ({children}) => (\n <ScheduleTarget event={event}>{children}</ScheduleTarget>\n ),\n }}\n values={{releaseTitle}}\n i18nKey={ACTIVITY_TEXT_118N[event.type]}\n />{' '}\n · <ActivityTimestamp timestamp={event.timestamp} />\n </StatusText>\n </Flex>\n {isAddDocumentToReleaseEvent(event) || isDiscardDocumentFromReleaseEvent(event) ? (\n <ReleaseEventDocumentPreview event={event} releaseId={releaseId} />\n ) : null}\n </Stack>\n </Flex>\n </FadeInCard>\n )\n },\n (prevProps, nextProps) => {\n return prevProps.event.id === nextProps.event.id && prevProps.releaseId === nextProps.releaseId\n },\n)\n\nReleaseActivityListItem.displayName = 'ReleaseActivityListItem'\n","import {Box} from '@sanity/ui'\nimport {useVirtualizer} from '@tanstack/react-virtual'\nimport {AnimatePresence} from 'motion/react'\nimport {useEffect, useMemo, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../../../components/loadingBlock/LoadingBlock'\nimport {\n isAddDocumentToReleaseEvent,\n isDiscardDocumentFromReleaseEvent,\n isEventsAPIEvent,\n isTranslogEvent,\n type ReleaseEvent,\n} from './events/types'\nimport {ReleaseActivityListItem} from './ReleaseActivityListItem'\n\nconst estimateSize = (event: ReleaseEvent | undefined) => {\n if (!event) {\n return 40 // Is the loader row\n }\n if (isAddDocumentToReleaseEvent(event) || isDiscardDocumentFromReleaseEvent(event)) {\n return 70\n }\n return 56\n}\nconst VirtualContainer = styled(Box)`\n height: 100%;\n overflow: scroll;\n`\n\ninterface ReleaseActivityListProps {\n events: ReleaseEvent[]\n releaseTitle: string\n releaseId: string\n hasMore: boolean\n loadMore: () => void\n isLoading: boolean\n}\n// oxlint-disable-next-line react/react-compiler\nexport const ReleaseActivityList = ({\n events,\n releaseTitle,\n releaseId,\n hasMore,\n loadMore,\n isLoading,\n}: ReleaseActivityListProps) => {\n const virtualizerContainerRef = useRef<HTMLDivElement | null>(null)\n\n const listEvents: ReleaseEvent[] = useMemo(() => {\n /**\n * This list combines:\n * - API events, which are loaded incrementally (paginated)\n * - Translog events, which are fully available (non-paginated)\n *\n * We want to display all events up to the oldest API event and include any translog events\n * that occurred before that API event. By doing so, as we load older batches of API events,\n * they will show at the bottom of the list\n */\n\n // If all events are loaded (no more pages) and we’re not loading, just return all events.\n if (!hasMore && !isLoading) return events\n\n const lastEventFromEventsAPI = [...events].reverse().find(isEventsAPIEvent)\n // If no API events are found (e.g., events api is not enabled) and we're not loading, return all translog events.\n if (!lastEventFromEventsAPI && !isLoading) return events\n\n // If we haven’t found any API events yet and are still loading, show nothing for now.\n if (!lastEventFromEventsAPI) return []\n\n // Include only those translog events that occur before the newest API event.\n const lastEventDate = new Date(lastEventFromEventsAPI.timestamp)\n return events.filter((event) => {\n if (isTranslogEvent(event)) {\n return new Date(event.timestamp) > lastEventDate\n }\n return true\n })\n }, [events, hasMore, isLoading])\n\n const virtualizer = useVirtualizer({\n // If we have more events, or the events are loading, we add a loader row at the end\n count: hasMore || isLoading ? listEvents.length + 1 : listEvents.length,\n getScrollElement: () => virtualizerContainerRef.current,\n estimateSize: (i) => estimateSize(events[i]),\n overscan: 10,\n paddingEnd: 24,\n })\n\n const virtualItems = virtualizer.getVirtualItems()\n\n useEffect(() => {\n const lastItem = virtualItems.at(-1)\n if (!lastItem) return\n if (lastItem.index >= listEvents.length - 1 && hasMore) {\n loadMore()\n }\n }, [listEvents.length, hasMore, loadMore, virtualItems])\n\n return (\n <VirtualContainer id=\"virtualizer-container\" ref={virtualizerContainerRef} paddingX={3}>\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: '100%',\n position: 'relative',\n }}\n >\n <AnimatePresence initial={false}>\n {virtualizer.getVirtualItems().map((virtualRow) => {\n const event = listEvents[virtualRow.index]\n const isLoaderRow = !event\n\n return (\n <div\n key={virtualRow.key}\n data-index={virtualRow.index}\n ref={virtualizer.measureElement}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {isLoaderRow ? (\n <Box paddingY={4}>\n <LoadingBlock fill />\n </Box>\n ) : (\n <ReleaseActivityListItem\n event={event}\n releaseId={releaseId}\n releaseTitle={releaseTitle}\n />\n )}\n </div>\n )\n })}\n </AnimatePresence>\n </div>\n </VirtualContainer>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'motion/react'\nimport {styled} from 'styled-components'\n\nimport {LoadingBlock} from '../../../components/loadingBlock/LoadingBlock'\nimport {Resizable} from '../../../components/resizer/Resizable'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type ReleaseEvents} from './events/useReleaseEvents'\nimport {ReleaseActivityList} from './ReleaseActivityList'\n\ninterface ReleaseDashboardActivityPanelProps {\n events: ReleaseEvents\n release: ReleaseDocument\n show: boolean\n}\nconst MotionFlex = motion.create(Flex)\nconst FillHeight = styled.div`\n --card-border-color: transparent;\n height: 100%;\n display: flex;\n flex-direction: column;\n`\nexport function ReleaseDashboardActivityPanel({\n events,\n release,\n show,\n}: ReleaseDashboardActivityPanelProps) {\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n return (\n <AnimatePresence>\n {show && (\n <>\n <motion.div\n animate={{width: 'auto', opacity: 1}}\n initial={{width: 0, opacity: 0}}\n exit={{width: 0, opacity: 0}}\n transition={{type: 'spring', bounce: 0, duration: 0.2}}\n >\n <Resizable\n as={FillHeight}\n minWidth={320}\n maxWidth={800}\n initialWidth={320}\n resizerPosition=\"left\"\n style={{display: 'flex', flexDirection: 'column', flex: 'none', maxHeight: '100%'}}\n >\n <MotionFlex flex=\"none\" height=\"fill\" direction=\"column\">\n <Box padding={4}>\n <Text size={1} weight=\"medium\">\n {t('activity.panel.title')}\n </Text>\n </Box>\n {events.error && !events.events.length && (\n <Card padding={3} tone=\"caution\">\n <Box padding={2}>\n <Text size={0}>{t('activity.panel.error')}</Text>\n </Box>\n </Card>\n )}\n {events.loading && !events.events.length && (\n <LoadingBlock title={t('activity.panel.loading')} />\n )}\n <ReleaseActivityList\n releaseTitle={\n release.metadata.title || tCore('release.placeholder-untitled-release')\n }\n releaseId={release._id}\n events={events.events}\n hasMore={events.hasMore}\n loadMore={events.loadMore}\n isLoading={events.loading}\n />\n </MotionFlex>\n </Resizable>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {InfoOutlineIcon} from '@sanity/icons'\nimport {Card, Flex, Stack, Text} from '@sanity/ui'\nimport {addDays} from 'date-fns/addDays'\nimport {format} from 'date-fns/format'\nimport {useMemo} from 'react'\n\nimport {useProjectSubscriptions} from '../../../hooks/useProjectSubscriptions'\nimport {useTimeZone} from '../../../hooks/useTimeZone'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\nimport {releasesLocaleNamespace} from '../../i18n'\n\nexport function ArchivedReleaseBanner({release}: {release: ReleaseDocument}) {\n const {state} = release\n const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n const {projectSubscriptions} = useProjectSubscriptions()\n\n const retentionDays = projectSubscriptions?.featureTypes.retention.features[0].attributes\n .maxRetentionDays as number | undefined\n\n const {utcToCurrentZoneDate} = useTimeZone(CONTENT_RELEASES_TIME_ZONE_SCOPE)\n const removalDate = useMemo(() => {\n if (!retentionDays || !release?._updatedAt) return ''\n const _removalDate = addDays(new Date(release._updatedAt), retentionDays)\n\n return format(utcToCurrentZoneDate(_removalDate), 'PP')\n }, [retentionDays, release, utcToCurrentZoneDate])\n\n return (\n <Card padding={4} radius={4} tone=\"primary\" data-testid=\"retention-policy-card\">\n <Flex gap={3}>\n <Text size={1}>\n <InfoOutlineIcon />\n </Text>\n <Stack space={4}>\n <Text size={1} weight=\"semibold\">\n {state === 'archived' ? tRelease('archive-info.title') : tRelease('publish-info.title')}\n </Text>\n {retentionDays && (\n <Text size={1} accent>\n <Translate\n t={tRelease}\n i18nKey=\"archive-info.description\"\n values={{retentionDays, removalDate: removalDate || ''}}\n components={{\n Link: ({children}) => (\n <a\n href=\"https://www.sanity.io/docs/user-guides/history-experience\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {children}\n </a>\n ),\n }}\n />\n </Text>\n )}\n </Stack>\n </Flex>\n </Card>\n )\n}\n","import {type EditableReleaseDocument, type ReleaseDocument} from '@sanity/client'\nimport {useCallback, useEffect, useRef, useState} from 'react'\n\nimport {getIsReleaseOpen, TitleDescriptionForm} from '../../components/dialog/TitleDescriptionForm'\nimport {useReleaseOperations} from '../../index'\nimport {useReleasePermissions} from '../../store/useReleasePermissions'\n\nexport function ReleaseDetailsEditor({release}: {release: ReleaseDocument}): React.JSX.Element {\n const {updateRelease} = useReleaseOperations()\n const [timer, setTimer] = useState<NodeJS.Timeout | undefined>(undefined)\n\n const {checkWithPermissionGuard} = useReleasePermissions()\n const [hasUpdatePermission, setHasUpdatePermission] = useState<boolean | null>(null)\n\n const handleOnChange = useCallback(\n (changedValue: EditableReleaseDocument) => {\n clearTimeout(timer)\n\n /** @todo I wasn't able to get this working with the debouncer that we use in other parts */\n const newTimer = setTimeout(() => {\n if (hasUpdatePermission) {\n void updateRelease(changedValue)\n }\n }, 200)\n\n setTimer(newTimer)\n },\n [hasUpdatePermission, timer, updateRelease],\n )\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n\n if (getIsReleaseOpen(release)) {\n // title and description will be readOnly if release is not 'open'\n // so only need to check permission to edit if release is 'open'\n void checkWithPermissionGuard(updateRelease, release).then((hasPermission) => {\n if (isMounted.current) setHasUpdatePermission(hasPermission)\n })\n }\n\n return () => {\n isMounted.current = false\n }\n }, [checkWithPermissionGuard, release, release._id, updateRelease])\n\n return (\n <TitleDescriptionForm\n key={release._id}\n release={release}\n onChange={handleOnChange}\n disabled={Boolean(!hasUpdatePermission)}\n />\n )\n}\n","import {format} from 'date-fns/format'\nimport {useCallback} from 'react'\n\nimport {useTimeZone} from '../../hooks/useTimeZone'\nimport {type TableRelease} from '../tool/overview/ReleasesOverview'\nimport {getPublishDateFromRelease} from '../util/util'\n\nexport const useReleaseTime = (): ((release: TableRelease) => string | null) => {\n const {timeZone, utcToCurrentZoneDate, getLocalTimeZone} = useTimeZone({\n type: 'contentReleases',\n } as const)\n const {abbreviation: localeTimeZoneAbbreviation} = getLocalTimeZone()\n\n const getTimezoneAbbreviation = useCallback(\n () =>\n timeZone.abbreviation === localeTimeZoneAbbreviation ? '' : `(${timeZone.abbreviation})`,\n [localeTimeZoneAbbreviation, timeZone.abbreviation],\n )\n\n return useCallback(\n (release: TableRelease) => {\n const publishDate = getPublishDateFromRelease(release)\n\n return publishDate\n ? `${format(utcToCurrentZoneDate(publishDate), 'PPpp')} ${getTimezoneAbbreviation()}`\n : null\n },\n [getTimezoneAbbreviation, utcToCurrentZoneDate],\n )\n}\n","import {LockIcon} from '@sanity/icons'\nimport {Box, Flex, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../i18n'\nimport {useReleaseTime} from '../../hooks/useReleaseTime'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {ARCHIVED_RELEASE_STATES} from '../../util/const'\nimport {isReleaseScheduledOrScheduling} from '../../util/util'\nimport {type TableRelease} from '../overview/ReleasesOverview'\n\nexport const ReleaseTime: React.FC<{release: TableRelease}> = ({release}) => {\n const {t} = useTranslation()\n const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n const getReleaseTime = useReleaseTime()\n\n const {metadata} = release\n\n if (metadata.releaseType === 'asap') {\n return (\n <Text size={1} muted weight=\"medium\">\n {t('release.type.asap')}\n </Text>\n )\n }\n if (metadata.releaseType === 'undecided') {\n return (\n <Text size={1} muted weight=\"medium\" style={{opacity: 0.5}}>\n {t('release.type.undecided')}\n </Text>\n )\n }\n\n // For scheduled releases:\n\n const isScheduledOrScheduling = isReleaseScheduledOrScheduling(release)\n const isInArchivedView = ARCHIVED_RELEASE_STATES.includes(release.state)\n\n return (\n <Flex gap={1} align=\"center\" wrap=\"wrap\">\n {isScheduledOrScheduling && (\n <Box paddingY={1}>\n <Text size={1} muted>\n <LockIcon data-testid=\"release-lock-icon\" />\n </Text>\n </Box>\n )}\n {!isInArchivedView && (\n <>\n <Box paddingY={1}>\n <Text size={1} muted>\n {isScheduledOrScheduling ? tRelease('time.scheduled') : tRelease('time.estimated')}\n </Text>\n </Box>\n <Box paddingY={1}>\n <Text size={1} muted>\n {'·'}\n </Text>\n </Box>\n </>\n )}\n <Box paddingY={1}>\n <Text size={1} weight=\"medium\">\n {getReleaseTime(release)}\n </Text>\n </Box>\n </Flex>\n )\n}\n","import {format} from 'date-fns/format'\nimport {isBefore} from 'date-fns/isBefore'\nimport {isValid} from 'date-fns/isValid'\nimport {parse} from 'date-fns/parse'\nimport {startOfMinute} from 'date-fns/startOfMinute'\nimport {useCallback} from 'react'\n\nimport {LazyTextInput} from '../../../components/inputs/DateInputs/LazyTextInput'\nimport {useTimeZone} from '../../../hooks/useTimeZone'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\n\nconst dateInputFormat = 'PP HH:mm'\n\nexport function ReleaseDateInput(props: {\n setIsIntendedScheduleDateInPast: (isIntendedScheduleDateInPast: boolean) => void\n setIntendedPublishAt: (intendedPublishAt: Date) => void\n intendedPublishAt: Date | undefined\n}): React.JSX.Element {\n const {setIsIntendedScheduleDateInPast, intendedPublishAt, setIntendedPublishAt} = props\n\n const {utcToCurrentZoneDate, zoneDateToUtc} = useTimeZone(CONTENT_RELEASES_TIME_ZONE_SCOPE)\n\n const intendedPublishAtTimezoneAdjusted = intendedPublishAt\n ? utcToCurrentZoneDate(intendedPublishAt)\n : intendedPublishAt\n\n const handlePublishAtInputChange = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n const parsedDate = zoneDateToUtc(\n parse(event.currentTarget.value, dateInputFormat, new Date()),\n )\n\n if (isValid(parsedDate)) {\n setIsIntendedScheduleDateInPast(isBefore(parsedDate, new Date()))\n\n setIntendedPublishAt(startOfMinute(parsedDate))\n }\n },\n [zoneDateToUtc, setIsIntendedScheduleDateInPast, setIntendedPublishAt],\n )\n\n return (\n <LazyTextInput\n data-testid=\"date-input\"\n value={\n intendedPublishAtTimezoneAdjusted\n ? format(intendedPublishAtTimezoneAdjusted, dateInputFormat)\n : undefined\n }\n onChange={handlePublishAtInputChange}\n />\n )\n}\n","import {type ReleaseType} from '@sanity/client'\nimport {PublishIcon} from '@sanity/icons'\nimport {Card, Flex, Spinner, Stack, TabList, Text, useClickOutsideEvent, useToast} from '@sanity/ui'\nimport {isBefore} from 'date-fns/isBefore'\nimport {startOfMinute} from 'date-fns/startOfMinute'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {useCallback, useMemo, useRef, useState} from 'react'\n\nimport {Button, Popover, Tab} from '../../../../ui-components'\nimport {MONTH_PICKER_VARIANT} from '../../../components/inputs/DateInputs/calendar/Calendar'\nimport {type CalendarLabels} from '../../../components/inputs/DateInputs/calendar/types'\nimport {DatePicker} from '../../../components/inputs/DateInputs/DatePicker'\nimport {getCalendarLabels} from '../../../form/inputs/DateInputs/utils'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\nimport {ReleaseAvatar} from '../../components/ReleaseAvatar'\nimport {useReleaseTime} from '../../hooks/useReleaseTime'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {getIsScheduledDateInPast} from '../../util/getIsScheduledDateInPast'\nimport {getReleaseTone} from '../../util/getReleaseTone'\nimport {\n getPublishDateFromRelease,\n isReleaseScheduledOrScheduling,\n type NotArchivedRelease,\n} from '../../util/util'\nimport {ReleaseTime} from '../components/ReleaseTime'\nimport {ReleaseDateInput} from './ReleaseDateInput'\n\nexport function ReleaseTypePicker(props: {release: NotArchivedRelease}): React.JSX.Element {\n const {release} = props\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const datePickerRef = useRef<HTMLDivElement | null>(null)\n\n const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n const {t} = useTranslation()\n const {updateRelease} = useReleaseOperations()\n const toast = useToast()\n const getReleaseTime = useReleaseTime()\n\n const [open, setOpen] = useState(false)\n const [releaseType, setReleaseType] = useState<ReleaseType>(release.metadata.releaseType)\n const publishDate = useMemo(() => getPublishDateFromRelease(release), [release])\n const [isUpdating, setIsUpdating] = useState(false)\n const [isIntendedScheduleDateInPast, setIsIntendedScheduleDateInPast] = useState(\n publishDate && isBefore(new Date(publishDate), new Date()),\n )\n\n const [intendedPublishAt, setIntendedPublishAt] = useState<Date | undefined>(\n publishDate ? new Date(publishDate) : undefined,\n )\n const updatedDate = intendedPublishAt?.toISOString()\n\n const calendarLabels: CalendarLabels = useMemo(() => getCalendarLabels(t), [t])\n\n const close = useCallback(() => {\n // a bit of a hack to make sure the timezone dialog is not immediately closed on out\n // the dialog itself is in the Calendar component who is basically unrealted to this one\n const dialog = document.querySelector('#time-zone')\n\n if (open && !dialog) {\n const newRelease = {\n ...release,\n metadata: {\n ...release.metadata,\n releaseType,\n ...(typeof updatedDate === 'undefined' || releaseType !== 'scheduled'\n ? {}\n : {\n intendedPublishAt: updatedDate,\n }),\n },\n }\n\n if (!isEqual(newRelease, release)) {\n /**\n * If in past, the reset type and intendedPublish to the actual release values\n * and discard the changes made\n */\n if (getIsScheduledDateInPast(newRelease)) {\n setReleaseType(release.metadata.releaseType)\n setIntendedPublishAt(\n release.metadata.intendedPublishAt\n ? new Date(release.metadata.intendedPublishAt)\n : undefined,\n )\n\n toast.push({\n closable: true,\n status: 'warning',\n title: t('release.schedule-dialog.publish-date-in-past-warning'),\n })\n } else {\n setIsUpdating(true)\n void updateRelease(newRelease).finally(() => {\n setIsUpdating(false)\n })\n }\n }\n\n setOpen(false)\n }\n }, [open, release, updatedDate, releaseType, toast, t, updateRelease])\n\n useClickOutsideEvent(close, () => [\n popoverRef.current,\n buttonRef.current,\n inputRef.current,\n datePickerRef.current,\n ])\n\n const isPublishDateInPast = !!publishDate && isBefore(new Date(publishDate), new Date())\n const isReleaseScheduled = isReleaseScheduledOrScheduling(release)\n\n const publishDateLabel = useMemo(() => {\n if (release.state === 'published') {\n if (isPublishDateInPast && publishDate)\n return tRelease('dashboard.details.published-on', {\n date: getReleaseTime(release),\n })\n\n return tRelease('dashboard.details.published-asap')\n }\n\n return <ReleaseTime release={release} />\n }, [getReleaseTime, isPublishDateInPast, publishDate, release, tRelease])\n\n const handleButtonReleaseTypeChange = useCallback(\n (pickedReleaseType: ReleaseType) => {\n setReleaseType(pickedReleaseType)\n const nextPublishAt =\n pickedReleaseType === 'scheduled'\n ? (publishDate ?? startOfMinute(new Date()))\n : (publishDate ?? undefined)\n setIntendedPublishAt(nextPublishAt)\n setIsIntendedScheduleDateInPast(true)\n },\n [publishDate],\n )\n\n const handlePublishAtCalendarChange = useCallback((date: Date | null) => {\n if (!date) return\n\n const cleanDate = startOfMinute(new Date(date))\n setIsIntendedScheduleDateInPast(isBefore(cleanDate, new Date()))\n setIntendedPublishAt(cleanDate)\n }, [])\n\n const handleOnPickerClick = () => {\n if (open) close()\n else setOpen(true)\n }\n\n const tone = release.state === 'published' ? 'positive' : getReleaseTone(release)\n\n const releaseTypeIcon = useMemo(() => {\n if (isUpdating) return <Spinner size={1} data-testid=\"updating-release-spinner\" />\n if (release.state === 'published') return <PublishIcon />\n\n return <ReleaseAvatar release={release} padding={0} />\n }, [isUpdating, release])\n\n const labelContent = useMemo(\n () => (\n <Flex flex={1} gap={2} align={'center'}>\n {releaseTypeIcon}\n <span data-testid=\"release-type-label\">{publishDateLabel}</span>\n </Flex>\n ),\n [publishDateLabel, releaseTypeIcon],\n )\n\n return (\n <Popover\n content={\n <Stack space={1}>\n <TabList space={0.5}>\n <Tab\n aria-controls=\"release-timing-asap\"\n id=\"release-timing-asap-tab\"\n onClick={() => handleButtonReleaseTypeChange('asap')}\n label={t('release.type.asap')}\n selected={releaseType === 'asap'}\n />\n <Tab\n aria-controls=\"release-timing-at-time\"\n id=\"release-timing-at-time-tab\"\n onClick={() => handleButtonReleaseTypeChange('scheduled')}\n selected={releaseType === 'scheduled'}\n label={t('release.type.scheduled')}\n />\n <Tab\n aria-controls=\"release-timing-undecided\"\n id=\"release-timing-undecided-tab\"\n onClick={() => handleButtonReleaseTypeChange('undecided')}\n selected={releaseType === 'undecided'}\n label={t('release.type.undecided')}\n />\n </TabList>\n {releaseType === 'scheduled' && (\n <>\n {isIntendedScheduleDateInPast && (\n <Card margin={1} padding={2} radius={2} shadow={1} tone=\"critical\">\n <Text size={1}>{t('release.schedule-dialog.publish-date-in-past-warning')}</Text>\n </Card>\n )}\n <ReleaseDateInput\n setIsIntendedScheduleDateInPast={setIsIntendedScheduleDateInPast}\n setIntendedPublishAt={setIntendedPublishAt}\n intendedPublishAt={intendedPublishAt}\n />\n <DatePicker\n ref={datePickerRef}\n monthPickerVariant={MONTH_PICKER_VARIANT.carousel}\n calendarLabels={calendarLabels}\n selectTime\n padding={0}\n value={intendedPublishAt}\n onChange={handlePublishAtCalendarChange}\n isPastDisabled\n showTimeZone\n timeZoneScope={CONTENT_RELEASES_TIME_ZONE_SCOPE}\n />\n </>\n )}\n </Stack>\n }\n open={open}\n padding={1}\n placement=\"bottom-start\"\n ref={popoverRef}\n >\n {release.state === 'published' ? (\n <Card\n tone=\"default\"\n data-testid=\"published-release-type-label\"\n padding={2}\n style={{borderRadius: '999px'}}\n >\n {labelContent}\n </Card>\n ) : (\n <Button\n disabled={isReleaseScheduled}\n mode=\"bleed\"\n onClick={handleOnPickerClick}\n ref={buttonRef}\n tooltipProps={{\n placement: 'bottom',\n content: isReleaseScheduled && tRelease('type-picker.tooltip.scheduled'),\n }}\n selected={open}\n tone={tone}\n style={{borderRadius: '999px'}}\n data-testid=\"release-type-picker\"\n >\n {labelContent}\n </Button>\n )}\n </Popover>\n )\n}\n","const degreesToRadians = (degrees: number) => (degrees * Math.PI) / 180\n\n/**\n * This is a component that renders a progress icon based on the progress percentage\n * @param progress - The progress percentage (0-100)\n * @returns The progress icon based on the progress percentage\n */\nexport function ProgressIcon(props: {progress: number}) {\n const {progress, ...rest} = props\n\n const circlePath = partialCircle(\n 12.5,\n 12.5,\n 4.5,\n degreesToRadians(-90),\n degreesToRadians(progress * 360 - 90),\n )\n\n const d =\n circlePath.length > 0\n ? `${circlePath.map((vs) => vs.join(' ')).join(' ')} L 12.5 12.5 Z`\n : undefined\n\n return (\n <svg\n data-sanity-icon=\"progress-50\"\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n {...rest}\n >\n {d && (\n <path\n d={d}\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n )}\n <path\n d=\"M12.5 20.5C16.9183 20.5 20.5 16.9183 20.5 12.5C20.5 8.08172 16.9183 4.5 12.5 4.5C8.08172 4.5 4.5 8.08172 4.5 12.5C4.5 16.9183 8.08172 20.5 12.5 20.5Z\"\n stroke=\"currentColor\"\n strokeWidth={1.2}\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nfunction partialCircle(cx: number, cy: number, r: number, start: number, end: number) {\n const length = end - start\n if (length === 0) return []\n\n const fromX = r * Math.cos(start) + cx\n const fromY = r * Math.sin(start) + cy\n const toX = r * Math.cos(end) + cx\n const toY = r * Math.sin(end) + cy\n const large = Math.abs(length) <= Math.PI ? '0' : '1'\n const sweep = length < 0 ? '0' : '1'\n\n return [\n ['M', fromX, fromY],\n ['A', r, r, 0, large, sweep, toX, toY],\n ]\n}\n","import {type DocumentInRelease} from '../tool/detail/useBundleDocuments'\nimport {isGoingToUnpublish} from './isGoingToUnpublish'\n\n/**\n * This function is used to get a cleaner and quicker validation loading state and error status for a list of documents\n * @param documents - The list of documents to get the validation loading state for\n * @returns\n */\nexport const getDocumentValidationLoading = (documents: DocumentInRelease[]) => {\n let hasError = false\n let isValidating = false\n let validatedCount = 0\n documents.forEach((doc) => {\n if (isGoingToUnpublish(doc.document)) {\n validatedCount += 1\n } else {\n const isValidated = !doc.validation.isValidating\n hasError = hasError || doc.validation.hasError\n isValidating = isValidating || doc.validation.isValidating\n if (isValidated) {\n validatedCount += 1\n }\n }\n })\n return {\n hasError,\n isValidating,\n validatedCount,\n }\n}\n","import {CheckmarkCircleIcon, ErrorOutlineIcon} from '@sanity/icons'\nimport {Card, type CardTone, Flex, Text} from '@sanity/ui'\nimport {useEffect, useMemo, useState} from 'react'\n\nimport {ProgressIcon} from '../../../../ui-components/progressIcon'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {getDocumentValidationLoading} from '../../util/getDocumentValidationLoading'\nimport {type DocumentInRelease} from './useBundleDocuments'\n\nexport function ValidationProgressIndicator({\n documents,\n layout = 'default',\n}: {\n documents: DocumentInRelease[]\n layout?: 'default' | 'minimal'\n}) {\n const totalCount = documents.length\n const {validatedCount, isValidating, hasError} = getDocumentValidationLoading(documents)\n const [showCheckmark, setShowCheckmark] = useState(false)\n // in order if the caching has already happened once and the object is already at minimal,\n // We don't want to show the whole thing again - instead we want to keep the minimal layout\n const [hasFinishedOnce, setHasFinishedOnce] = useState(false)\n const {t} = useTranslation(releasesLocaleNamespace)\n\n const isFinished = useMemo(\n () => validatedCount === totalCount && validatedCount !== 0,\n [validatedCount, totalCount],\n )\n\n // Use minimal layout if explicitly set OR if validation has finished once\n const isMinimal = layout === 'minimal' || hasFinishedOnce\n\n // Add delay when validation is finished\n // so that we can show that it's finished but then show the checkmark\n // without the text\n useEffect(() => {\n if (isFinished) {\n const timer = setTimeout(() => {\n setShowCheckmark(true)\n setHasFinishedOnce(true)\n }, 2500)\n\n return () => clearTimeout(timer)\n }\n return undefined\n }, [isFinished, showCheckmark])\n\n useEffect(() => {\n // If it's not validating, we should not be showing the checkmark\n // it is only shown after a delay set by the previous useEffect\n if (isValidating) {\n // oxlint-disable-next-line react/react-compiler\n setShowCheckmark(false)\n }\n }, [isValidating])\n\n // If it's not finished and not validating, we should not be showing anything\n // usually this happens when the release detail is first opened\n if (!isFinished && !isValidating) {\n return null\n }\n\n const tone: CardTone = isValidating\n ? 'neutral'\n : isFinished && showCheckmark && !hasError\n ? 'transparent'\n : hasError\n ? 'critical'\n : 'positive'\n\n const cardBackground = isFinished && showCheckmark && !hasError ? 'transparent' : undefined\n\n return (\n <Card\n padding={isMinimal ? 0 : 2}\n radius=\"full\"\n tone={tone}\n style={{\n background: cardBackground,\n }}\n >\n <Flex gap={2}>\n <Text size={1}>\n {isValidating ? (\n <ProgressIcon progress={validatedCount / totalCount} />\n ) : (\n <Tooltip\n content={hasError ? t('summary.errors-found') : t('summary.all-documents-validated')}\n >\n {hasError ? <ErrorOutlineIcon /> : <CheckmarkCircleIcon />}\n </Tooltip>\n )}\n </Text>\n {!showCheckmark && !isMinimal && (\n <Text muted size={1}>\n {isValidating\n ? t('summary.validating-documents', {validatedCount, totalCount})\n : hasError\n ? t('summary.all-documents-errors-found')\n : t('summary.all-documents-validated')}\n </Text>\n )}\n </Flex>\n </Card>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {ErrorOutlineIcon, PinFilledIcon, PinIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Container, Flex, Stack, Text} from '@sanity/ui'\nimport {useCallback, useEffect, useRef, useState} from 'react'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {ToneIcon} from '../../../../ui-components/toneIcon/ToneIcon'\nimport {TextWithTone} from '../../../components/textWithTone/TextWithTone'\nimport {Details} from '../../../form/components/Details'\nimport {useTranslation} from '../../../i18n'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../perspective/useSetPerspective'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../store/useReleasePermissions'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {isNotArchivedRelease} from '../../util/util'\nimport {ArchivedReleaseBanner} from './ArchivedReleaseBanner'\nimport {ReleaseDetailsEditor} from './ReleaseDetailsEditor'\nimport {ReleaseTypePicker} from './ReleaseTypePicker'\nimport {type DocumentInRelease} from './useBundleDocuments'\nimport {ValidationProgressIndicator} from './ValidationProgressIndicator'\n\nexport function ReleaseDashboardDetails({\n release,\n documents,\n}: {\n release: ReleaseDocument\n documents: DocumentInRelease[]\n}) {\n const {state} = release\n\n const releaseId = getReleaseIdFromReleaseDocumentId(release._id)\n const {checkWithPermissionGuard} = useReleasePermissions()\n const {publishRelease, schedule} = useReleaseOperations()\n\n const {t: tRelease} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const {selectedReleaseId} = usePerspective()\n const setPerspective = useSetPerspective()\n\n const isSelected = releaseId === selectedReleaseId\n const releaseFullTitle = release.metadata.title || tCore('release.placeholder-untitled-release')\n const isAtTimeRelease = release?.metadata?.releaseType === 'scheduled'\n const isReleaseOpen = state !== 'archived' && state !== 'published'\n const isActive = release.state === 'active'\n const shouldDisplayError = isActive && typeof release.error !== 'undefined'\n const [shouldDisplayPermissionWarning, setShouldDisplayPermissionWarning] = useState(false)\n const shouldDisplayWarnings = isActive && shouldDisplayPermissionWarning\n const isMounted = useRef(false)\n const {document} = useWorkspace()\n const {\n drafts: {enabled: isDraftModelEnabled},\n } = document\n useEffect(() => {\n isMounted.current = true\n\n // only run if the release is active\n if (isActive) {\n void checkWithPermissionGuard(publishRelease, release._id).then((hasPermission) => {\n if (isMounted.current) setShouldDisplayPermissionWarning(!hasPermission)\n return null\n })\n\n // if it's a release that can be scheduled, check if it can be scheduled\n if (release.metadata.intendedPublishAt && isAtTimeRelease) {\n void checkWithPermissionGuard(schedule, release._id, new Date()).then((hasPermission) => {\n if (isMounted.current) setShouldDisplayPermissionWarning(!hasPermission)\n return null\n })\n }\n }\n return () => {\n isMounted.current = false\n }\n }, [\n checkWithPermissionGuard,\n isActive,\n isAtTimeRelease,\n publishRelease,\n release._id,\n release.metadata.intendedPublishAt,\n schedule,\n ])\n\n const handlePinRelease = useCallback(() => {\n if (isSelected) {\n setPerspective(isDraftModelEnabled ? 'drafts' : 'published')\n } else {\n setPerspective(releaseId)\n }\n }, [isDraftModelEnabled, isSelected, releaseId, setPerspective])\n\n return (\n <Container width={3}>\n <Stack padding={3} paddingY={[3, 3, 4, 5]}>\n <Flex gap={1} align=\"center\">\n {isReleaseOpen && (\n <Button\n icon={isSelected ? PinFilledIcon : PinIcon}\n tooltipProps={{\n placement: 'top',\n content: isSelected\n ? tRelease('dashboard.details.unpin-release')\n : tRelease('dashboard.details.pin-release'),\n }}\n mode=\"bleed\"\n onClick={handlePinRelease}\n radius=\"full\"\n selected={isSelected}\n aria-label={\n isSelected\n ? `${tRelease('dashboard.details.unpin-release')}: \"${releaseFullTitle}\"`\n : `${tRelease('dashboard.details.pin-release')}: \"${releaseFullTitle}\"`\n }\n aria-live=\"assertive\"\n />\n )}\n {isNotArchivedRelease(release) && <ReleaseTypePicker release={release} />}\n <ValidationProgressIndicator documents={documents} />\n {shouldDisplayError && (\n <Flex gap={2} padding={2} data-testid=\"release-error-details\">\n <Text size={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n </Text>\n <TextWithTone size={1} tone=\"critical\">\n {isAtTimeRelease\n ? tRelease('failed-schedule-title')\n : tRelease('failed-publish-title')}\n </TextWithTone>\n </Flex>\n )}\n {shouldDisplayWarnings && (\n <Flex gap={2} padding={2} data-testid=\"release-permission-error-details\">\n <Text size={1}>\n <ToneIcon icon={WarningOutlineIcon} tone=\"caution\" />\n </Text>\n <TextWithTone size={1} tone=\"caution\">\n {tRelease('permission-missing-title')}\n </TextWithTone>\n </Flex>\n )}\n </Flex>\n <Box padding={2}>\n <ReleaseDetailsEditor release={release} />\n </Box>\n {shouldDisplayError && (\n <Card padding={4} radius={4} tone=\"critical\">\n <Flex gap={3}>\n <Text size={1}>\n <ErrorOutlineIcon />\n </Text>\n <Stack space={4}>\n <Text size={1} weight=\"semibold\">\n {isAtTimeRelease\n ? tRelease('failed-schedule-title')\n : tRelease('failed-publish-title')}\n </Text>\n <Details title={tRelease('error-details-title')}>\n <Text size={1} accent>\n <code>{release.error?.message}</code>\n </Text>\n </Details>\n </Stack>\n </Flex>\n </Card>\n )}\n\n {shouldDisplayWarnings && (\n <Card padding={4} radius={4} tone=\"caution\">\n <Flex gap={3}>\n <Text size={1}>\n <WarningOutlineIcon />\n </Text>\n <Stack space={3}>\n <Text size={1}>{tRelease('permission-missing-title')}</Text>\n <Text size={1} muted>\n {tRelease('permission-missing-description')}\n </Text>\n </Stack>\n </Flex>\n </Card>\n )}\n\n {!isReleaseOpen && <ArchivedReleaseBanner release={release} />}\n </Stack>\n </Container>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {ErrorOutlineIcon, PublishIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {Button, Dialog, MenuItem, type TooltipProps} from '../../../../../ui-components'\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../../perspective/useSetPerspective'\nimport {useWorkspace} from '../../../../studio/workspace'\nimport {PublishedRelease} from '../../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isReleaseDocument} from '../../../index'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../../store/useReleasePermissions'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\n\ninterface ReleasePublishAllButtonProps {\n release: ReleaseDocument\n documents: DocumentInRelease[]\n disabled?: boolean\n isMenuItem?: boolean\n onConfirmDialogOpen?: () => void\n onConfirmDialogClose?: () => void\n}\n\nexport const ReleasePublishAllButton = ({\n release,\n documents,\n disabled,\n isMenuItem = false,\n onConfirmDialogOpen,\n onConfirmDialogClose,\n}: ReleasePublishAllButtonProps) => {\n const toast = useToast()\n const {publishRelease} = useReleaseOperations()\n const {checkWithPermissionGuard} = useReleasePermissions()\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const perspective = usePerspective()\n const setPerspective = useSetPerspective()\n const telemetry = useTelemetry()\n const {document} = useWorkspace()\n const {\n drafts: {enabled: isDraftModelEnabled},\n } = document\n\n const [publishBundleStatus, setPublishBundleStatus] = useState<'idle' | 'confirm' | 'publishing'>(\n 'idle',\n )\n\n const [publishPermission, setPublishPermission] = useState<boolean>(false)\n\n const isValidatingDocuments = documents.some(({validation}) => validation.isValidating)\n const hasDocumentValidationErrors = documents.some(({validation}) => validation.hasError)\n\n const isPublishButtonDisabled =\n disabled || isValidatingDocuments || hasDocumentValidationErrors || !publishPermission\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n\n void checkWithPermissionGuard(publishRelease, release._id).then((hasPermission) => {\n if (isMounted.current) setPublishPermission(hasPermission)\n })\n\n return () => {\n isMounted.current = false\n }\n }, [checkWithPermissionGuard, publishRelease, release._id, release.metadata.intendedPublishAt])\n\n const handleConfirmPublishAll = useCallback(async () => {\n if (!release) return\n\n // Workaround for React Compiler not yet fully supporting try/catch/finally syntax\n const run = async () => {\n setPublishBundleStatus('publishing')\n await publishRelease(release._id)\n telemetry.log(PublishedRelease)\n if (\n isReleaseDocument(perspective.selectedPerspective) &&\n perspective.selectedPerspective?._id === release._id\n ) {\n setPerspective(isDraftModelEnabled ? 'drafts' : 'published')\n }\n }\n try {\n await run()\n } catch (publishingError) {\n toast.push({\n status: 'error',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"toast.publish.error\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n error: publishingError.message,\n }}\n />\n </Text>\n ),\n })\n console.error(publishingError)\n }\n onConfirmDialogClose?.()\n setPublishBundleStatus('idle')\n }, [\n release,\n publishRelease,\n telemetry,\n perspective.selectedPerspective,\n setPerspective,\n isDraftModelEnabled,\n toast,\n t,\n tCore,\n onConfirmDialogClose,\n ])\n\n const confirmPublishDialog = useMemo(() => {\n if (publishBundleStatus === 'idle') return null\n\n return (\n <Dialog\n id=\"confirm-publish-dialog\"\n data-testid=\"confirm-publish-dialog\"\n header={t('publish-dialog.confirm-publish.title')}\n onClose={() => {\n onConfirmDialogClose?.()\n setPublishBundleStatus('idle')\n }}\n footer={{\n confirmButton: {\n text: t('action.publish-all-documents'),\n tone: 'positive',\n onClick: handleConfirmPublishAll,\n loading: publishBundleStatus === 'publishing',\n disabled: publishBundleStatus === 'publishing',\n },\n }}\n >\n <Text muted size={1}>\n {\n <Translate\n t={t}\n i18nKey=\"publish-dialog.confirm-publish-description\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n releaseDocumentsLength: documents.length,\n count: documents.length,\n }}\n />\n }\n </Text>\n </Dialog>\n )\n }, [\n publishBundleStatus,\n t,\n handleConfirmPublishAll,\n release.metadata.title,\n tCore,\n documents.length,\n onConfirmDialogClose,\n ])\n\n const publishTooltipContent = useMemo(() => {\n if (!hasDocumentValidationErrors && !isValidatingDocuments && publishPermission) return null\n\n const tooltipText = () => {\n if (documents.length === 0) {\n return t('publish-action.validation.no-documents')\n }\n\n if (!publishPermission) {\n return t('publish-dialog.validation.no-permission')\n }\n\n if (isValidatingDocuments) {\n return t('publish-dialog.validation.loading')\n }\n\n if (hasDocumentValidationErrors) {\n return t('publish-dialog.validation.error')\n }\n\n return null\n }\n\n // TODO: this is a duplicate of logic in ReleaseScheduleButton\n return (\n <Text muted size={1}>\n <Flex align=\"center\" gap={3} padding={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone={isValidatingDocuments ? 'default' : 'critical'} />\n {tooltipText()}\n </Flex>\n </Text>\n )\n }, [documents.length, hasDocumentValidationErrors, isValidatingDocuments, publishPermission, t])\n\n const handleInitialPublish = useCallback(() => {\n setPublishBundleStatus('confirm')\n onConfirmDialogOpen?.()\n }, [onConfirmDialogOpen])\n\n const sharedProps = useMemo(\n () => ({\n icon: PublishIcon,\n disabled:\n isPublishButtonDisabled || publishBundleStatus === 'publishing' || documents.length === 0,\n text: t('action.publish-all-documents'),\n handleOnClick: handleInitialPublish,\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion\n tooltipProps: {\n disabled: !isPublishButtonDisabled,\n content: publishTooltipContent,\n placement: 'bottom',\n } as Partial<TooltipProps>,\n }),\n [\n documents.length,\n handleInitialPublish,\n isPublishButtonDisabled,\n publishBundleStatus,\n publishTooltipContent,\n t,\n ],\n )\n\n return (\n <>\n {isMenuItem ? (\n <MenuItem\n tooltipProps={sharedProps.tooltipProps}\n icon={sharedProps.icon}\n disabled={sharedProps.disabled}\n text={sharedProps.text}\n onClick={sharedProps.handleOnClick}\n data-testid=\"publish-all-button-menu-item\"\n />\n ) : (\n <Button\n tooltipProps={sharedProps.tooltipProps}\n icon={sharedProps.icon}\n disabled={sharedProps.disabled}\n text={sharedProps.text}\n onClick={sharedProps.handleOnClick}\n loading={publishBundleStatus === 'publishing'}\n data-testid=\"publish-all-button\"\n tone=\"positive\"\n />\n )}\n {confirmPublishDialog}\n </>\n )\n}\n","/**\n * Polyfill for `Promise.withResolvers()`, which is not yet widely supported.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/withResolvers\n * @returns An object containing the promise, resolve, and reject functions.\n * @internal\n */\nexport function promiseWithResolvers<T>() {\n let resolve!: (value: T | PromiseLike<T>) => void\n let reject!: (reason?: unknown) => void\n const promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n return {promise, resolve, reject}\n}\n","import {type SanityDocument} from '@sanity/types'\nimport {useCallback, useEffect, useMemo, useRef} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, forkJoin, from, map, type Observable, of, switchMap} from 'rxjs'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {getTransactionsLogs} from '../../../../../store/translog/getTransactionsLogs'\nimport {getPublishedId} from '../../../../../util/draftUtils'\nimport {promiseWithResolvers} from '../../../../../util/promiseWithResolvers'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../../util/releasesClient'\nimport {type DocumentInRelease} from '../../../detail/useBundleDocuments'\n\nexport type RevertDocument = SanityDocument & {\n _system?: {\n delete: true\n }\n}\n\ntype RevertDocuments = RevertDocument[]\n\ntype DocumentRevertStates = RevertDocuments | null | undefined\n\nexport const useDocumentRevertStates = (releaseDocuments: DocumentInRelease[]) => {\n const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n const observableClient = client.observable\n const transactionId = releaseDocuments[0]?.document._rev\n const {dataset} = client.config()\n\n const resultPromiseRef = useRef<Promise<DocumentRevertStates> | null>(null)\n const resolvedDocumentRevertStatesPromiseRef = useRef<\n ((value: DocumentRevertStates) => void) | null\n >(null)\n const resolvedDocumentRevertStatesResultRef = useRef<DocumentRevertStates | null>(null)\n\n useEffect(() => {\n if (!resultPromiseRef.current) {\n const {promise, resolve} = promiseWithResolvers<DocumentRevertStates>()\n\n resultPromiseRef.current = promise\n resolvedDocumentRevertStatesPromiseRef.current = resolve\n }\n }, [])\n\n const memoDocumentRevertStates = useMemo(() => {\n if (!releaseDocuments.length) return of(undefined)\n\n const publishedDocuments = releaseDocuments.map(({document}) => ({\n ...document,\n _id: getPublishedId(document._id),\n }))\n\n const documentRevertStates$: Observable<RevertDocuments | null | undefined> = from(\n getTransactionsLogs(\n client,\n publishedDocuments.map((document) => document._id),\n {\n toTransaction: transactionId,\n // reverse order so most recent publish before release is second element\n // (first is the release publish itself)\n reverse: true,\n },\n ),\n ).pipe(\n map((transactions) => {\n const getDocumentTransaction = (docId: string) =>\n transactions.find(({documentIDs}) => documentIDs.includes(docId))?.id\n\n return publishedDocuments.map((document) => ({\n docId: document._id,\n revisionId: getDocumentTransaction(document._id),\n }))\n }),\n switchMap((docRevisionPairs) => {\n if (!docRevisionPairs) return of(undefined)\n\n return forkJoin(\n docRevisionPairs.map(({docId, revisionId}) => {\n if (!revisionId) {\n const {publishedDocumentExists, ...unpublishDocument} =\n publishedDocuments.find((document) => document._id === docId) || {}\n\n return of({\n ...unpublishDocument,\n _system: {delete: true},\n } as RevertDocument)\n }\n\n return observableClient\n .request<{\n documents: RevertDocuments\n }>({\n url: `/data/history/${dataset}/documents/${docId}?revision=${revisionId}`,\n })\n .pipe(\n map(({documents: [revertDocument]}) => revertDocument),\n catchError((err) => {\n console.error(`Error fetching document ${docId}:`, err)\n return of(undefined)\n }),\n )\n }),\n )\n }),\n map((results) => results?.filter((result) => result !== undefined)),\n catchError((err) => {\n console.error('Error in document revert states pipeline:', err)\n return of(undefined)\n }),\n )\n\n return documentRevertStates$\n }, [client, releaseDocuments, transactionId, observableClient, dataset])\n\n const documentRevertStatesResult = useObservable(memoDocumentRevertStates, null)\n\n useEffect(() => {\n if (documentRevertStatesResult !== null) {\n resolvedDocumentRevertStatesResultRef.current = documentRevertStatesResult\n\n // Resolve promise if it exists\n if (resolvedDocumentRevertStatesPromiseRef.current) {\n resolvedDocumentRevertStatesPromiseRef.current(documentRevertStatesResult)\n resolvedDocumentRevertStatesPromiseRef.current = null\n resultPromiseRef.current = null // Reset resultPromiseRef for future fetches\n }\n }\n }, [documentRevertStatesResult])\n\n return useCallback(() => {\n if (resolvedDocumentRevertStatesResultRef.current) {\n // Return resolved value immediately if available\n return Promise.resolve(resolvedDocumentRevertStatesResultRef.current)\n }\n\n return resultPromiseRef.current\n }, [])\n}\n","import {useMemo} from 'react'\nimport {useObservable} from 'react-rx'\nimport {catchError, from, map, of} from 'rxjs'\n\nimport {useClient} from '../../../../../hooks/useClient'\nimport {getTransactionsLogs} from '../../../../../store/translog/getTransactionsLogs'\nimport {getPublishedId} from '../../../../../util/draftUtils'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../../util/releasesClient'\nimport {type DocumentInRelease} from '../../../detail/useBundleDocuments'\n\nexport const usePostPublishTransactions = (documents: DocumentInRelease[]) => {\n const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n const transactionId = documents[0]?.document._rev\n\n const memoHasPostPublishTransactions = useMemo(() => {\n if (!documents.length) return of(false)\n\n return from(\n getTransactionsLogs(\n client,\n documents.map(({document}) => getPublishedId(document._id)),\n {\n fromTransaction: transactionId,\n // publish transaction + at least one post publish transaction\n limit: 2,\n },\n ),\n ).pipe(\n // the transaction of published is also returned\n // so post publish transactions will result in more than 1 transaction\n map((transactions) => transactions.length > 1),\n catchError(() => of(null)),\n )\n }, [client, documents, transactionId])\n\n return useObservable(memoHasPostPublishTransactions, null)\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {RestoreIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Box, Card, Checkbox, Flex, Text, useToast} from '@sanity/ui'\nimport {useCallback, useEffect, useRef, useState} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button} from '../../../../../../ui-components/button/Button'\nimport {Dialog} from '../../../../../../ui-components/dialog'\nimport {Translate, useTranslation} from '../../../../../i18n'\nimport {RevertRelease} from '../../../../__telemetry__/releases.telemetry'\nimport {useReleasesUpsell} from '../../../../contexts/upsell/useReleasesUpsell'\nimport {releasesLocaleNamespace} from '../../../../i18n'\nimport {isReleaseLimitError} from '../../../../store/isReleaseLimitError'\nimport {useReleaseOperations} from '../../../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../../../store/useReleasePermissions'\nimport {createReleaseId} from '../../../../util/createReleaseId'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../../util/getReleaseIdFromReleaseDocumentId'\nimport {getReleaseDefaults} from '../../../../util/util'\nimport {type DocumentInRelease} from '../../../detail/useBundleDocuments'\nimport {useDocumentRevertStates} from './useDocumentRevertStates'\nimport {usePostPublishTransactions} from './usePostPublishTransactions'\n\ninterface ReleasePublishAllButtonProps {\n release: ReleaseDocument\n documents: DocumentInRelease[]\n disabled?: boolean\n}\n\ntype RevertReleaseStatus = 'idle' | 'confirm' | 'reverting'\n\nconst ConfirmReleaseDialog = ({\n revertReleaseStatus,\n documents,\n setRevertReleaseStatus,\n release,\n}: {\n revertReleaseStatus: RevertReleaseStatus\n documents: DocumentInRelease[]\n setRevertReleaseStatus: (status: RevertReleaseStatus) => void\n release: ReleaseDocument\n}) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const releaseDisplayTitle =\n release.metadata.title || tCore('release.placeholder-untitled-release')\n const hasPostPublishTransactions = usePostPublishTransactions(documents)\n const getDocumentRevertStates = useDocumentRevertStates(documents)\n const [stageNewRevertRelease, setStageNewRevertRelease] = useState(true)\n const toast = useToast()\n const telemetry = useTelemetry()\n const {revertRelease} = useReleaseOperations()\n const router = useRouter()\n\n const navigateToRevertRelease = useCallback(\n (revertReleaseId: string) => () =>\n router.navigate({releaseId: getReleaseIdFromReleaseDocumentId(revertReleaseId)}),\n [router],\n )\n\n const handleRevertRelease = useCallback(async () => {\n setRevertReleaseStatus('reverting')\n const documentRevertStates = await getDocumentRevertStates()\n\n const revertReleaseId = createReleaseId()\n\n // The run().catch().finally() syntax instead of try/catch/finally is because of the React Compiler not fully supporting the syntax yet\n const run = async () => {\n if (!documentRevertStates) {\n throw new Error('Unable to find documents to revert')\n }\n\n await revertRelease(\n revertReleaseId,\n documentRevertStates,\n {\n title: t('revert-release.title', {\n title: releaseDisplayTitle,\n }),\n description: t('revert-release.description', {\n title: releaseDisplayTitle,\n }),\n releaseType: 'asap',\n },\n stageNewRevertRelease ? 'staged' : 'immediate',\n )\n\n if (stageNewRevertRelease) {\n telemetry.log(RevertRelease, {revertType: 'staged'})\n toast.push({\n closable: true,\n status: 'success',\n title: (\n <Text muted size={1}>\n <Translate\n components={{\n Link: () => (\n <Text\n size={1}\n weight=\"medium\"\n data-as=\"a\"\n onClick={navigateToRevertRelease(revertReleaseId)}\n style={{\n cursor: 'pointer',\n marginBottom: '0.5rem',\n display: 'flex',\n }}\n data-testid=\"revert-stage-success-link\"\n >\n {t('toast.revert-stage.success-link')}\n </Text>\n ),\n }}\n t={t}\n i18nKey=\"toast.revert-stage.success\"\n values={{\n title: releaseDisplayTitle,\n }}\n />\n </Text>\n ),\n })\n } else {\n telemetry.log(RevertRelease, {revertType: 'immediate'})\n\n toast.push({\n closable: true,\n status: 'success',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"toast.immediate-revert.success\"\n values={{\n title: releaseDisplayTitle,\n }}\n />\n </Text>\n ),\n })\n }\n }\n await run()\n .catch((revertError) => {\n if (isReleaseLimitError(revertError)) return\n\n toast.push({\n status: 'error',\n title: (\n <Text muted size={1}>\n <Translate t={t} i18nKey=\"toast.revert.error\" values={{error: revertError.message}} />\n </Text>\n ),\n })\n console.error(revertError)\n })\n .finally(() => {\n setRevertReleaseStatus('idle')\n })\n }, [\n setRevertReleaseStatus,\n getDocumentRevertStates,\n revertRelease,\n t,\n releaseDisplayTitle,\n stageNewRevertRelease,\n telemetry,\n toast,\n navigateToRevertRelease,\n ])\n\n const description =\n documents.length > 1\n ? 'revert-dialog.confirm-revert-description_other'\n : 'revert-dialog.confirm-revert-description_one'\n\n return (\n <Dialog\n id=\"confirm-revert-dialog\"\n header={t('revert-dialog.confirm-revert.title', {\n title: releaseDisplayTitle,\n })}\n onClose={() => setRevertReleaseStatus('idle')}\n footer={{\n confirmButton: {\n text: t(\n stageNewRevertRelease\n ? 'action.create-revert-release'\n : 'action.immediate-revert-release',\n ),\n tone: 'positive',\n onClick: handleRevertRelease,\n loading: revertReleaseStatus === 'reverting',\n disabled: revertReleaseStatus === 'reverting',\n },\n }}\n >\n <Text muted size={1}>\n {\n <Translate\n t={t}\n i18nKey={description}\n values={{\n releaseDocumentsLength: documents.length,\n }}\n />\n }\n </Text>\n <Flex align=\"center\" paddingTop={4}>\n <Checkbox\n onChange={() => setStageNewRevertRelease((current) => !current)}\n id=\"immediate-revert-release\"\n style={{display: 'block'}}\n checked={!stageNewRevertRelease}\n />\n <Box flex={1} paddingLeft={3}>\n <Text muted size={1}>\n <label htmlFor=\"immediate-revert-release\">\n {t('revert-dialog.confirm-revert.stage-revert-checkbox-label')}\n </label>\n </Text>\n </Box>\n </Flex>\n {hasPostPublishTransactions && !stageNewRevertRelease && (\n <Card marginTop={4} padding={3} radius={2} shadow={1} tone=\"critical\">\n <Text muted size={1}>\n {t('revert-dialog.confirm-revert.warning-card')}\n </Text>\n </Card>\n )}\n </Dialog>\n )\n}\n\nexport const ReleaseRevertButton = ({\n release,\n documents,\n disabled,\n}: ReleasePublishAllButtonProps) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const {guardWithReleaseLimitUpsell} = useReleasesUpsell()\n const [revertReleaseStatus, setRevertReleaseStatus] = useState<RevertReleaseStatus>('idle')\n const [isPendingGuardResponse, setIsPendingGuardResponse] = useState<boolean>(false)\n const {createRelease} = useReleaseOperations()\n const {checkWithPermissionGuard} = useReleasePermissions()\n const [hasCreatePermission, setHasCreatePermission] = useState<boolean | null>(null)\n\n const handleMoveToConfirmStatus = useCallback(async () => {\n setIsPendingGuardResponse(true)\n await guardWithReleaseLimitUpsell(() => setRevertReleaseStatus('confirm'))\n setIsPendingGuardResponse(false)\n }, [guardWithReleaseLimitUpsell])\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n void checkWithPermissionGuard(createRelease, getReleaseDefaults()).then((hasPermissions) => {\n if (isMounted.current) setHasCreatePermission(hasPermissions)\n })\n\n return () => {\n isMounted.current = false\n }\n }, [checkWithPermissionGuard, createRelease])\n\n return (\n <>\n <Button\n icon={RestoreIcon}\n onClick={handleMoveToConfirmStatus}\n text={t('action.revert')}\n tone=\"critical\"\n tooltipProps={{\n disabled: hasCreatePermission === true,\n content: tCore('release.action.permission.error'),\n }}\n /**\n * This is an immature assertion of permissions\n * The permissions needed to revert are:\n * Permissions to create a request (implemented)\n * @todo Permissions to create each schema type within the release (not implemented)\n */\n disabled={isPendingGuardResponse || !hasCreatePermission || disabled}\n data-testid=\"revert-button\"\n />\n {revertReleaseStatus !== 'idle' && (\n <ConfirmReleaseDialog\n release={release}\n documents={documents}\n revertReleaseStatus={revertReleaseStatus}\n setRevertReleaseStatus={setRevertReleaseStatus}\n />\n )}\n </>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {ClockIcon, ErrorOutlineIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Card, Flex, Stack, Text, useToast} from '@sanity/ui'\nimport {format} from 'date-fns/format'\nimport {isBefore} from 'date-fns/isBefore'\nimport {isValid} from 'date-fns/isValid'\nimport {parse} from 'date-fns/parse'\nimport {startOfMinute} from 'date-fns/startOfMinute'\nimport isEqual from 'lodash-es/isEqual.js'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {Button, Dialog, MenuItem, type TooltipProps} from '../../../../../ui-components'\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {MONTH_PICKER_VARIANT} from '../../../../components/inputs/DateInputs/calendar/Calendar'\nimport {type CalendarLabels} from '../../../../components/inputs/DateInputs/calendar/types'\nimport {DateTimeInput} from '../../../../components/inputs/DateInputs/DateTimeInput'\nimport {TimeZoneButton} from '../../../../components/timeZone/timeZoneButton/TimeZoneButton'\nimport TimeZoneButtonElementQuery from '../../../../components/timeZone/timeZoneButton/TimeZoneButtonElementQuery'\nimport {getCalendarLabels} from '../../../../form/inputs/DateInputs/utils'\nimport {useTimeZone} from '../../../../hooks/useTimeZone'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../../studio/constants'\nimport {ScheduledRelease} from '../../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isReleaseScheduledOrScheduling} from '../../../index'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../../store/useReleasePermissions'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\n\ninterface ReleaseScheduleButtonProps {\n release: ReleaseDocument\n documents: DocumentInRelease[]\n disabled?: boolean\n isMenuItem?: boolean\n onConfirmDialogOpen?: () => void\n onConfirmDialogClose?: () => void\n}\n\nexport const ReleaseScheduleButton = ({\n release,\n disabled,\n documents,\n isMenuItem = false,\n onConfirmDialogOpen,\n onConfirmDialogClose,\n}: ReleaseScheduleButtonProps) => {\n const toast = useToast()\n const {schedule, updateRelease} = useReleaseOperations()\n const {checkWithPermissionGuard} = useReleasePermissions()\n\n const [schedulePermission, setSchedulePermission] = useState<boolean>(false)\n\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const telemetry = useTelemetry()\n // in the releases tool we want timezone to be saved for releases\n const {utcToCurrentZoneDate, zoneDateToUtc, timeZone} = useTimeZone(\n CONTENT_RELEASES_TIME_ZONE_SCOPE,\n )\n const [status, setStatus] = useState<'idle' | 'confirm' | 'scheduling'>('idle')\n const [publishAt, setPublishAt] = useState<Date | undefined>()\n /**\n * This state supports the scenario of:\n * publishAt is set to a valid future date; but at time of submit it is in the past\n * Without an update on this state, ReleaseScheduledButton would not rerender\n * and so date in past warning ui elements wouldn't show\n */\n const [rerenderDialog, setRerenderDialog] = useState(0)\n\n const timeZoneAdjustedPublishAt = publishAt ? utcToCurrentZoneDate(publishAt) : undefined\n\n const isValidatingDocuments = documents.some(({validation}) => validation.isValidating)\n const hasDocumentValidationErrors = documents.some(({validation}) => validation.hasError)\n const isScheduleButtonDisabled =\n disabled || isValidatingDocuments || !schedulePermission || hasDocumentValidationErrors\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n\n void checkWithPermissionGuard(schedule, release._id, new Date()).then((hasPermission) => {\n if (isMounted.current) setSchedulePermission(hasPermission)\n })\n\n return () => {\n isMounted.current = false\n }\n }, [checkWithPermissionGuard, release._id, release.metadata.intendedPublishAt, schedule])\n\n const isScheduledDateInPast = useCallback(() => {\n return isBefore(zoneDateToUtc(publishAt || new Date()), new Date())\n }, [publishAt, zoneDateToUtc])\n\n const handleConfirmSchedule = useCallback(async () => {\n if (!publishAt) return\n\n // this means that it will linely need to change the releaseType to scheduled\n if (isMenuItem) {\n const newRelease = {\n ...release,\n metadata: {\n ...release.metadata,\n releaseType: 'scheduled' as const,\n\n intendedPublishAt: publishAt.toISOString(),\n },\n }\n\n if (!isEqual(newRelease, release)) {\n void updateRelease(newRelease)\n }\n }\n\n if (isScheduledDateInPast()) {\n // rerender dialog to recalculate isScheduledDateInPast\n setRerenderDialog((cur) => cur + 1)\n return\n }\n\n // Workaround for React Compiler not yet fully supporting try/catch/finally syntax\n const run = async () => {\n setStatus('scheduling')\n await schedule(release._id, publishAt)\n telemetry.log(ScheduledRelease)\n toast.push({\n closable: true,\n status: 'info',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"toast.schedule.success\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n }}\n />\n </Text>\n ),\n })\n }\n try {\n await run()\n } catch (schedulingError) {\n toast.push({\n status: 'error',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"toast.schedule.error\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n error: schedulingError.message,\n }}\n />\n </Text>\n ),\n })\n console.error(schedulingError)\n }\n onConfirmDialogClose?.()\n setStatus('idle')\n }, [\n publishAt,\n isMenuItem,\n isScheduledDateInPast,\n release,\n updateRelease,\n schedule,\n telemetry,\n toast,\n t,\n tCore,\n onConfirmDialogClose,\n ])\n\n const calendarLabels: CalendarLabels = useMemo(() => getCalendarLabels(tCore), [tCore])\n\n const handleBundlePublishAtCalendarChange = useCallback((date: Date | null) => {\n if (!date) return\n\n setPublishAt(startOfMinute(date))\n }, [])\n\n const handleBundleInputChange = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n const date = event.currentTarget.value\n const parsedDate = zoneDateToUtc(parse(date, 'PP HH:mm', new Date()))\n\n if (isValid(parsedDate)) {\n setPublishAt(parsedDate)\n }\n },\n [zoneDateToUtc],\n )\n\n const handleOnDialogClose = useCallback(() => {\n onConfirmDialogClose?.()\n if (status !== 'scheduling') {\n setStatus('idle')\n }\n }, [onConfirmDialogClose, status])\n\n const confirmScheduleDialog = useMemo(() => {\n if (status === 'idle') return null\n\n const _isScheduledDateInPast = isScheduledDateInPast()\n\n return (\n <Dialog\n /**\n * rerenderDialog should force this function to rerun\n * since the selected scheduled date was in the future when selected\n * but at time of submit it is in the past\n */\n key={rerenderDialog}\n id=\"confirm-schedule-dialog\"\n data-testid=\"confirm-schedule-dialog\"\n header={t('schedule-dialog.confirm-title', {\n documentsLength: documents.length,\n count: documents.length,\n })}\n onClose={handleOnDialogClose}\n footer={{\n confirmButton: {\n text: t('schedule-dialog.confirm-button'),\n tone: 'default',\n onClick: handleConfirmSchedule,\n loading: status === 'scheduling',\n disabled: _isScheduledDateInPast || status === 'scheduling',\n },\n cancelButton: {\n disabled: status === 'scheduling',\n },\n }}\n >\n <Stack space={3}>\n {_isScheduledDateInPast && (\n <Card marginBottom={1} padding={2} radius={2} shadow={1} tone=\"critical\">\n <Text size={1}>{tCore('release.schedule-dialog.publish-date-in-past-warning')}</Text>\n </Card>\n )}\n <Stack space={3}>\n <Flex align=\"center\" justify=\"space-between\" gap={2}>\n <label>\n <Text size={1} weight=\"semibold\">\n {tCore('release.schedule-dialog.select-publish-date-label')}\n </Text>\n </label>\n <TimeZoneButtonElementQuery>\n <TimeZoneButton\n tooltipContent={\n <Translate\n t={tCore}\n i18nKey={'time-zone.time-zone-tooltip-input'}\n values={{\n title: tCore('release.schedule-dialog.select-publish-date-label'),\n alternativeName: timeZone.alternativeName,\n offset: timeZone.offset,\n }}\n />\n }\n allowTimeZoneSwitch\n useElementQueries\n timeZoneScope={CONTENT_RELEASES_TIME_ZONE_SCOPE}\n />\n </TimeZoneButtonElementQuery>\n </Flex>\n <DateTimeInput\n selectTime\n monthPickerVariant={MONTH_PICKER_VARIANT.carousel}\n onChange={handleBundlePublishAtCalendarChange}\n onInputChange={handleBundleInputChange}\n value={publishAt}\n calendarLabels={calendarLabels}\n inputValue={\n timeZoneAdjustedPublishAt ? format(timeZoneAdjustedPublishAt, 'PP HH:mm') : ''\n }\n constrainSize={false}\n isPastDisabled\n timeZoneScope={CONTENT_RELEASES_TIME_ZONE_SCOPE}\n />\n </Stack>\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"schedule-dialog.confirm-description\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n count: documents.length,\n }}\n />\n </Text>\n </Stack>\n </Dialog>\n )\n }, [\n status,\n isScheduledDateInPast,\n rerenderDialog,\n t,\n publishAt,\n documents.length,\n handleOnDialogClose,\n handleConfirmSchedule,\n handleBundlePublishAtCalendarChange,\n handleBundleInputChange,\n timeZoneAdjustedPublishAt,\n calendarLabels,\n release.metadata.title,\n tCore,\n timeZone,\n ])\n\n const handleOnInitialSchedule = useCallback(() => {\n setPublishAt(\n release.metadata.intendedPublishAt\n ? new Date(release.metadata.intendedPublishAt)\n : new Date(),\n )\n setStatus('confirm')\n onConfirmDialogOpen?.()\n }, [onConfirmDialogOpen, release.metadata.intendedPublishAt])\n\n const tooltipText = useMemo(() => {\n if (documents.length === 0) {\n return t('schedule-action.validation.no-documents')\n }\n\n if (!schedulePermission) {\n return t('schedule-button-tooltip.validation.no-permission')\n }\n\n if (isValidatingDocuments) {\n return t('schedule-button-tooltip.validation.loading')\n }\n\n if (hasDocumentValidationErrors) {\n return t('schedule-button-tooltip.validation.error')\n }\n\n if (isReleaseScheduledOrScheduling(release)) {\n return t('schedule-button-tooltip.already-scheduled')\n }\n return null\n }, [\n documents.length,\n hasDocumentValidationErrors,\n isValidatingDocuments,\n release,\n schedulePermission,\n t,\n ])\n\n // TODO: this is a duplicate of logic in ReleasePublishAllButton\n const scheduleTooltipContent = useMemo(() => {\n return (\n <Text muted size={1}>\n <Flex align=\"center\" gap={3} padding={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone={isValidatingDocuments ? 'default' : 'critical'} />\n {tooltipText}\n </Flex>\n </Text>\n )\n }, [isValidatingDocuments, tooltipText])\n\n const sharedProps = useMemo(\n () => ({\n icon: ClockIcon,\n disabled: isScheduleButtonDisabled || status === 'scheduling' || documents.length === 0,\n text: t('action.schedule'),\n handleOnClick: handleOnInitialSchedule,\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion\n tooltipProps: {\n disabled: !tooltipText,\n content: scheduleTooltipContent,\n placement: 'bottom',\n } as Partial<TooltipProps>,\n }),\n [\n documents.length,\n handleOnInitialSchedule,\n isScheduleButtonDisabled,\n scheduleTooltipContent,\n status,\n t,\n tooltipText,\n ],\n )\n\n return (\n <>\n {isMenuItem ? (\n <MenuItem\n tooltipProps={sharedProps.tooltipProps}\n icon={sharedProps.icon}\n disabled={sharedProps.disabled}\n text={sharedProps.text}\n onClick={sharedProps.handleOnClick}\n data-testid=\"schedule-button-menu-item\"\n />\n ) : (\n <Button\n tooltipProps={sharedProps.tooltipProps}\n tone=\"primary\"\n icon={sharedProps.icon}\n disabled={sharedProps.disabled}\n text={sharedProps.text}\n onClick={sharedProps.handleOnClick}\n loading={status === 'scheduling'}\n data-testid=\"schedule-button\"\n />\n )}\n {confirmScheduleDialog}\n </>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {CloseCircleIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Text, useToast} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {Button, Dialog} from '../../../../../ui-components'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {UnscheduledRelease} from '../../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\n\ninterface ReleaseScheduleButtonProps {\n release: ReleaseDocument\n documents: DocumentInRelease[]\n disabled?: boolean\n}\n\nexport const ReleaseUnscheduleButton = ({\n release,\n disabled,\n documents,\n}: ReleaseScheduleButtonProps) => {\n const toast = useToast()\n const {unschedule} = useReleaseOperations()\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const telemetry = useTelemetry()\n const [status, setStatus] = useState<'idle' | 'confirm' | 'unscheduling'>('idle')\n\n const handleConfirmSchedule = useCallback(async () => {\n // The run().catch().finally() syntax instead of try/catch/finally is because of the React Compiler not fully supporting the syntax yet\n const run = async () => {\n setStatus('unscheduling')\n await unschedule(release._id)\n telemetry.log(UnscheduledRelease)\n }\n await run()\n .catch((schedulingError) => {\n toast.push({\n status: 'error',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey=\"toast.unschedule.error\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n error: schedulingError.message,\n }}\n />\n </Text>\n ),\n })\n console.error(schedulingError)\n })\n .finally(() => {\n setStatus('idle')\n })\n }, [unschedule, release._id, release.metadata.title, telemetry, toast, t, tCore])\n\n const confirmScheduleDialog = useMemo(() => {\n if (status === 'idle') return null\n\n return (\n <Dialog\n id=\"confirm-unschedule-dialog\"\n header={t('unschedule-dialog.confirm-title')}\n onClose={() => status !== 'unscheduling' && setStatus('idle')}\n footer={{\n confirmButton: {\n text: t('action.unschedule'),\n tone: 'default',\n onClick: handleConfirmSchedule,\n loading: status === 'unscheduling',\n disabled: status === 'unscheduling',\n },\n cancelButton: {\n disabled: status === 'unscheduling',\n },\n }}\n >\n <Text muted size={1}>\n {\n <Translate\n t={t}\n i18nKey=\"unschedule-dialog.confirm-description\"\n values={{\n title: release.metadata.title || tCore('release.placeholder-untitled-release'),\n documentsLength: documents.length,\n count: documents.length,\n }}\n />\n }\n </Text>\n </Dialog>\n )\n }, [release.metadata.title, documents.length, handleConfirmSchedule, status, t, tCore])\n\n return (\n <>\n <Button\n icon={CloseCircleIcon}\n disabled={disabled || status === 'unscheduling'}\n text={t('action.unschedule')}\n onClick={() => setStatus('confirm')}\n loading={status === 'unscheduling'}\n data-testid=\"schedule-button\"\n />\n {confirmScheduleDialog}\n </>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {memo, type ReactNode, useEffect} from 'react'\n\nimport {GetHookCollectionState} from '../../components/hookCollection'\nimport {\n type ReleaseActionComponent,\n type ReleaseActionDescription,\n} from '../../config/releases/actions'\nimport {type DocumentInRelease} from '../tool/detail/useBundleDocuments'\n\nexport interface ReleaseActionsResolverProps {\n actions: ReleaseActionComponent[]\n release: ReleaseDocument\n documents: DocumentInRelease[]\n onActions: (actions: ReleaseActionDescription[]) => void\n children?: (props: {states: ReleaseActionDescription[]}) => ReactNode\n}\n\nconst ReleaseActionsStateHandler = memo(function ReleaseActionsStateHandler({\n states,\n onActions,\n renderChildren,\n}: {\n states: ReleaseActionDescription[]\n onActions: (actions: ReleaseActionDescription[]) => void\n renderChildren?: (props: {states: ReleaseActionDescription[]}) => ReactNode\n}) {\n useEffect(() => {\n onActions(states)\n }, [states, onActions])\n\n return renderChildren ? renderChildren({states}) : null\n})\n\n/**\n * The `ReleaseActionsResolver` component is responsible for resolving the actions for a given release.\n *\n * This component uses the `GetHookCollectionState` pattern to efficiently manage action hook states,\n * providing performance optimizations and consistent behaviour with document actions.\n *\n * @internal\n */\nexport const ReleaseActionsResolver = memo(function ReleaseActionsResolver(\n props: ReleaseActionsResolverProps,\n) {\n const {actions, release, documents, onActions, children} = props\n\n const actionProps = {\n release,\n documents,\n }\n\n return (\n <GetHookCollectionState<typeof actionProps, ReleaseActionDescription>\n hooks={actions}\n args={actionProps}\n >\n {({states}) => (\n <ReleaseActionsStateHandler\n states={states}\n onActions={onActions}\n renderChildren={children}\n />\n )}\n </GetHookCollectionState>\n )\n})\n","import {type ReleaseDocument} from '@sanity/client'\nimport {useMemo} from 'react'\n\nimport {type ReleaseActionComponent} from '../../config/releases/actions'\nimport {useSource} from '../../studio'\nimport {type DocumentInRelease} from '../tool/detail/useBundleDocuments'\n\n/**\n * Hook to get custom/configured release actions for a release\n *\n * @internal\n */\nexport function useCustomReleaseActions(\n release: ReleaseDocument,\n documents: DocumentInRelease[] = [],\n): ReleaseActionComponent[] {\n const source = useSource()\n\n const customReleaseActions = useMemo(() => {\n if (!source.releases?.actions) {\n return []\n }\n\n return source.releases.actions({\n release,\n documents,\n })\n }, [source, release, documents])\n\n return customReleaseActions\n}\n","import {Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {useTranslation} from '../../../../i18n'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type ActionResult} from './ReleaseMenuButton'\n\nexport const DuplicateReleaseToastLink = ({actionResult}: {actionResult: ActionResult}) => {\n const router = useRouter()\n const {t} = useTranslation(releasesLocaleNamespace)\n\n const navigateToDuplicateRelease = useCallback(() => {\n if (!actionResult || !('releaseId' in actionResult)) return\n\n router.navigate({releaseId: getReleaseIdFromReleaseDocumentId(actionResult.releaseId)})\n }, [actionResult, router])\n\n return (\n <Text\n size={1}\n weight=\"medium\"\n data-as=\"a\"\n onClick={navigateToDuplicateRelease}\n style={{\n cursor: 'pointer',\n marginBottom: '0.5rem',\n display: 'flex',\n }}\n data-testid=\"duplicate-release-success-link\"\n >\n {t('toast.duplicate.success-link')}\n </Text>\n )\n}\n","import {type DefinedTelemetryLog} from '@sanity/telemetry/react'\nimport {type ButtonTone} from '@sanity/ui'\n\nimport {\n ArchivedRelease,\n DeletedRelease,\n DuplicatedRelease,\n UnarchivedRelease,\n UnscheduledRelease,\n} from '../../../__telemetry__/releases.telemetry'\n\nexport type ReleaseAction =\n | 'archive'\n | 'unarchive'\n | 'delete'\n | 'unschedule'\n | 'publish'\n | 'schedule'\n | 'duplicate'\n\ninterface BaseReleaseActionsMap {\n toastSuccessI18nKey?: string\n toastFailureI18nKey?: string\n telemetry: DefinedTelemetryLog<void>\n}\n\ninterface DialogActionsMap extends BaseReleaseActionsMap {\n confirmDialog: {\n dialogId: string\n dialogHeaderI18nKey: string\n dialogDescriptionI18nKey: string\n dialogConfirmButtonI18nKey: string\n confirmButtonTone: ButtonTone\n }\n}\n\nexport const RELEASE_ACTION_MAP: Record<\n Exclude<ReleaseAction, 'schedule' | 'publish'>,\n DialogActionsMap | (BaseReleaseActionsMap & {confirmDialog: false})\n> = {\n delete: {\n confirmDialog: {\n dialogId: 'confirm-delete-dialog',\n dialogHeaderI18nKey: 'delete-dialog.confirm-delete.header',\n dialogDescriptionI18nKey: 'delete-dialog.confirm-delete-description',\n dialogConfirmButtonI18nKey: 'delete-dialog.confirm-delete-button',\n confirmButtonTone: 'critical',\n },\n toastSuccessI18nKey: 'toast.delete.success',\n toastFailureI18nKey: 'toast.delete.error',\n telemetry: DeletedRelease,\n },\n archive: {\n confirmDialog: {\n dialogId: 'confirm-archive-dialog',\n dialogHeaderI18nKey: 'archive-dialog.confirm-archive-header',\n dialogDescriptionI18nKey: 'archive-dialog.confirm-archive-description',\n dialogConfirmButtonI18nKey: 'archive-dialog.confirm-archive-button',\n confirmButtonTone: 'critical',\n },\n toastFailureI18nKey: 'toast.archive.error',\n telemetry: ArchivedRelease,\n },\n unarchive: {\n confirmDialog: false,\n toastFailureI18nKey: 'toast.unarchive.error',\n telemetry: UnarchivedRelease,\n },\n unschedule: {\n confirmDialog: false,\n toastFailureI18nKey: 'toast.unschedule.error',\n telemetry: UnscheduledRelease,\n },\n duplicate: {\n confirmDialog: {\n dialogId: 'confirm-duplicate-dialog',\n dialogHeaderI18nKey: 'duplicate-dialog.confirm-duplicate-header',\n dialogDescriptionI18nKey: 'duplicate-dialog.confirm-duplicate-description',\n dialogConfirmButtonI18nKey: 'duplicate-dialog.confirm-duplicate-button',\n confirmButtonTone: 'primary',\n },\n toastSuccessI18nKey: 'toast.duplicate.success',\n toastFailureI18nKey: 'toast.duplicate.error',\n telemetry: DuplicatedRelease,\n },\n}\n","import {ArchiveIcon, CloseCircleIcon, CopyIcon, TrashIcon, UnarchiveIcon} from '@sanity/icons'\nimport {\n type Dispatch,\n type MouseEventHandler,\n type SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\n\nimport {MenuItem} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {useReleaseOperations} from '../../../store'\nimport {useReleasePermissions} from '../../../store/useReleasePermissions'\nimport {getReleaseDefaults} from '../../../util/util'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\nimport {ReleasePublishAllButton} from '../releaseCTAButtons/ReleasePublishAllButton'\nimport {ReleaseScheduleButton} from '../releaseCTAButtons/ReleaseScheduleButton'\nimport {type ReleaseAction} from './releaseActions'\nimport {type ReleaseMenuButtonProps} from './ReleaseMenuButton'\n\nexport type ReleaseMenuProps = Omit<ReleaseMenuButtonProps, 'documentsCount'> & {\n disabled: boolean\n setSelectedAction: Dispatch<SetStateAction<ReleaseAction | undefined>>\n documents: DocumentInRelease[]\n}\n\nexport const ReleaseMenu = ({\n ignoreCTA,\n disabled,\n release,\n setSelectedAction,\n documents,\n}: ReleaseMenuProps) => {\n const releaseMenuDisabled = !release || disabled\n const {t} = useTranslation(releasesLocaleNamespace)\n const {archive, unarchive, deleteRelease, publishRelease, schedule, createRelease} =\n useReleaseOperations()\n const {checkWithPermissionGuard} = useReleasePermissions()\n const [hasArchivePermission, setHasArchivePermission] = useState<boolean | null>(null)\n const [hasUnarchivePermission, setHasUnarchivePermission] = useState<boolean | null>(null)\n const [hasDeletePermission, setHasDeletePermission] = useState<boolean | null>(null)\n const [hasPublishPermission, setHasPublishPermission] = useState<boolean | null>(null)\n const [hasSchedulePermission, setHasSchedulePermission] = useState<boolean | null>(null)\n const [hasDuplicatePermission, setHasDuplicatePermission] = useState<boolean | null>(null)\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n\n if (!releaseMenuDisabled) {\n if (release.state !== 'published') {\n if (release.state === 'archived') {\n void checkWithPermissionGuard(unarchive, release._id).then((hasPermission) => {\n if (isMounted.current) setHasUnarchivePermission(hasPermission)\n })\n } else {\n void checkWithPermissionGuard(archive, release._id).then((hasPermission) => {\n if (isMounted.current) setHasArchivePermission(hasPermission)\n })\n\n void checkWithPermissionGuard(publishRelease, release._id).then((hasPermission) => {\n if (isMounted.current) setHasPublishPermission(hasPermission)\n })\n void checkWithPermissionGuard(schedule, release._id, new Date()).then((hasPermission) => {\n if (isMounted.current) setHasSchedulePermission(hasPermission)\n })\n }\n void checkWithPermissionGuard(createRelease, getReleaseDefaults()).then((hasPermission) => {\n if (isMounted.current) setHasDuplicatePermission(hasPermission)\n })\n }\n\n if (release.state === 'archived' || release.state == 'published') {\n void checkWithPermissionGuard(deleteRelease, release._id).then((hasPermission) => {\n if (isMounted.current) setHasDeletePermission(hasPermission)\n })\n }\n }\n\n return () => {\n isMounted.current = false\n }\n }, [\n release._id,\n releaseMenuDisabled,\n release.state,\n checkWithPermissionGuard,\n unarchive,\n archive,\n deleteRelease,\n release.metadata.releaseType,\n publishRelease,\n schedule,\n createRelease,\n ])\n\n const handleOnInitiateAction = useCallback<MouseEventHandler<HTMLDivElement>>(\n (event) => {\n const action = event.currentTarget.getAttribute('data-value') as ReleaseAction\n\n setSelectedAction(action)\n },\n [setSelectedAction],\n )\n\n const archiveUnarchiveMenuItem = useMemo(() => {\n if (release.state === 'published') return null\n\n if (release.state === 'archived')\n return (\n <MenuItem\n key=\"unarchive\"\n data-value=\"unarchive\"\n disabled={releaseMenuDisabled || !hasUnarchivePermission}\n onClick={handleOnInitiateAction}\n icon={UnarchiveIcon}\n text={t('action.unarchive')}\n data-testid=\"unarchive-release-menu-item\"\n tooltipProps={{\n content: !hasUnarchivePermission && t('permissions.error.unarchive'),\n }}\n />\n )\n\n return (\n <MenuItem\n key=\"archive\"\n tooltipProps={{\n disabled: hasArchivePermission\n ? !['scheduled', 'scheduling'].includes(release.state) || disabled\n : false,\n content: hasArchivePermission\n ? t('action.archive.tooltip')\n : t('permissions.error.archive'),\n }}\n data-value=\"archive\"\n onClick={handleOnInitiateAction}\n icon={ArchiveIcon}\n text={t('action.archive')}\n data-testid=\"archive-release-menu-item\"\n disabled={\n releaseMenuDisabled ||\n ['scheduled', 'scheduling'].includes(release.state) ||\n !hasArchivePermission\n }\n />\n )\n }, [\n release.state,\n releaseMenuDisabled,\n hasUnarchivePermission,\n handleOnInitiateAction,\n t,\n hasArchivePermission,\n disabled,\n ])\n\n const deleteMenuItem = useMemo(() => {\n if (release.state !== 'archived' && release.state !== 'published') return null\n\n return (\n <MenuItem\n key=\"delete\"\n data-value=\"delete\"\n onClick={handleOnInitiateAction}\n disabled={releaseMenuDisabled || !hasDeletePermission}\n icon={TrashIcon}\n text={t('action.delete-release')}\n data-testid=\"delete-release-menu-item\"\n tooltipProps={{\n content: !hasDeletePermission && t('permissions.error.delete'),\n }}\n />\n )\n }, [handleOnInitiateAction, hasDeletePermission, release.state, releaseMenuDisabled, t])\n\n const unscheduleMenuItem = useMemo(() => {\n if (ignoreCTA || (release.state !== 'scheduled' && release.state !== 'scheduling')) return null\n\n return (\n <MenuItem\n key=\"unschedule\"\n data-value=\"unschedule\"\n onClick={handleOnInitiateAction}\n disabled={releaseMenuDisabled}\n icon={CloseCircleIcon}\n text={t('action.unschedule')}\n data-testid=\"unschedule-release-menu-item\"\n />\n )\n }, [handleOnInitiateAction, ignoreCTA, release.state, releaseMenuDisabled, t])\n\n const scheduleMenuItem = useMemo(() => {\n // will not return the action for scheduled releases since the main action is already schedule\n if (release.state !== 'active' || (ignoreCTA && release.metadata.releaseType === 'scheduled'))\n return null\n\n return (\n <ReleaseScheduleButton\n key=\"schedule\"\n disabled={releaseMenuDisabled || !hasSchedulePermission}\n release={release}\n documents={documents}\n isMenuItem\n onConfirmDialogClose={() => setSelectedAction(undefined)}\n onConfirmDialogOpen={() => setSelectedAction('schedule')}\n />\n )\n }, [documents, hasSchedulePermission, ignoreCTA, release, releaseMenuDisabled, setSelectedAction])\n\n const publishMenuItem = useMemo(() => {\n if (release.state !== 'active' || (ignoreCTA && release.metadata.releaseType !== 'scheduled'))\n return null\n\n return (\n <ReleasePublishAllButton\n key=\"publish\"\n release={release}\n documents={documents}\n disabled={releaseMenuDisabled || !hasPublishPermission}\n isMenuItem\n onConfirmDialogClose={() => setSelectedAction(undefined)}\n onConfirmDialogOpen={() => setSelectedAction('publish')}\n />\n )\n }, [documents, hasPublishPermission, ignoreCTA, release, releaseMenuDisabled, setSelectedAction])\n\n const duplicateMenuItem = useMemo(() => {\n if (release.state === 'published' || release.state === 'archived') {\n return null\n }\n\n return (\n <MenuItem\n key=\"duplicate\"\n data-value=\"duplicate\"\n onClick={handleOnInitiateAction}\n disabled={releaseMenuDisabled || !hasDuplicatePermission}\n icon={CopyIcon}\n text={t('action.duplicate-release')}\n data-testid=\"duplicate-release-menu-item\"\n tooltipProps={{\n content: !hasDuplicatePermission && t('permissions.error.duplicate'),\n }}\n />\n )\n }, [handleOnInitiateAction, hasDuplicatePermission, release.state, releaseMenuDisabled, t])\n\n const ActionsOrder = useMemo(() => {\n if (release.metadata.releaseType === 'scheduled') {\n return [scheduleMenuItem, publishMenuItem]\n }\n\n return [publishMenuItem, scheduleMenuItem]\n }, [release.metadata.releaseType, publishMenuItem, scheduleMenuItem])\n\n return [\n unscheduleMenuItem,\n ...ActionsOrder,\n duplicateMenuItem,\n archiveUnarchiveMenuItem,\n deleteMenuItem,\n ]\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {Card, Flex, Stack, Text} from '@sanity/ui'\n\nimport {useTranslation} from '../../../../i18n/hooks/useTranslation'\nimport {ReleaseAvatar, ReleaseTitle} from '../../../components'\nimport {ReleaseTime} from '../ReleaseTime'\n\nexport function ReleasePreviewCard({release}: {release: ReleaseDocument}) {\n const {t} = useTranslation()\n\n return (\n <Card border padding={1} radius={2}>\n <Flex gap={3} padding={3}>\n <ReleaseAvatar release={release} padding={0} />\n <Stack space={2}>\n <ReleaseTitle\n title={release.metadata.title}\n fallback={t('release.placeholder-untitled-release')}\n textProps={{weight: 'medium', size: 1}}\n />\n <Text muted size={1}>\n <ReleaseTime release={release} />\n </Text>\n </Stack>\n </Flex>\n </Card>\n )\n}\n","import {type ReleaseDocument, type SingleActionResult} from '@sanity/client'\nimport {EllipsisHorizontalIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Menu, MenuDivider, Spinner, Stack, Text, useClickOutsideEvent, useToast} from '@sanity/ui'\nimport {type SetStateAction, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {RouterContext, useRouter} from 'sanity/router'\n\nimport {Button, Dialog, MenuItem, Popover} from '../../../../../ui-components'\nimport {type ReleaseActionDescription} from '../../../../config/releases/actions'\nimport {Translate, type TranslateComponentMap, useTranslation} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../../perspective/useSetPerspective'\nimport {useWorkspace} from '../../../../studio/workspace'\nimport {ReleaseActionsResolver} from '../../../components/ReleaseActionsResolver'\nimport {useReleasesUpsell} from '../../../contexts/upsell/useReleasesUpsell'\nimport {useCustomReleaseActions} from '../../../hooks/useCustomReleaseActions'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isReleaseLimitError} from '../../../store/isReleaseLimitError'\nimport {useReleaseOperations} from '../../../store/useReleaseOperations'\nimport {createReleaseId} from '../../../util/createReleaseId'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type DocumentInRelease} from '../../detail/useBundleDocuments'\nimport {DuplicateReleaseToastLink} from './DuplicateReleaseToastLink'\nimport {RELEASE_ACTION_MAP, type ReleaseAction} from './releaseActions'\nimport {ReleaseMenu} from './ReleaseMenu'\nimport {ReleasePreviewCard} from './ReleasePreviewCard'\n\nexport type ActionResult =\n | false\n | void\n | SingleActionResult\n | {\n releaseId: string\n }\n\nconst toastActionComponents: Partial<\n Record<ReleaseAction, (actionResult: ActionResult) => TranslateComponentMap>\n> = {\n duplicate: (actionResult) => ({\n Link: () => <DuplicateReleaseToastLink actionResult={actionResult} />,\n }),\n}\n\nexport type ReleaseMenuButtonProps = {\n /** defaults to false\n * set true if release primary CTA options should not\n * be shown in the menu eg. unschedule, publish\n */\n ignoreCTA?: boolean\n release: ReleaseDocument\n documentsCount: number\n documents?: DocumentInRelease[]\n}\n\nexport const ReleaseMenuButton = ({\n ignoreCTA,\n release,\n documentsCount,\n documents,\n}: ReleaseMenuButtonProps) => {\n const toast = useToast()\n const router = useRouter()\n const {archive, unarchive, deleteRelease, unschedule, duplicateRelease} = useReleaseOperations()\n\n const [isPerformingOperation, setIsPerformingOperation] = useState(false)\n const [selectedAction, setSelectedAction] = useState<ReleaseAction>()\n const {selectedReleaseId} = usePerspective()\n const setPerspective = useSetPerspective()\n\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const releaseMenuRef = useRef<HTMLDivElement | null>(null)\n const [openPopover, setOpenPopover] = useState(false)\n\n const customActions = useCustomReleaseActions(release, documents ?? [])\n const [customActionDescriptions, setCustomActionDescriptions] = useState<\n ReleaseActionDescription[]\n >([])\n\n const handleCustomActionsUpdate = useCallback(\n (actions: Array<ReleaseActionDescription | null>) => {\n setCustomActionDescriptions(actions.filter(Boolean) as ReleaseActionDescription[])\n },\n [],\n )\n\n const releaseMenuDisabled = !release\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const telemetry = useTelemetry()\n const {guardWithReleaseLimitUpsell} = useReleasesUpsell()\n const releaseTitle = release.metadata.title || tCore('release.placeholder-untitled-release')\n const isActionPublishOrSchedule = selectedAction === 'publish' || selectedAction === 'schedule'\n const {document} = useWorkspace()\n const {\n drafts: {enabled: isDraftModelEnabled},\n } = document\n\n const handleDelete = useCallback(async () => {\n await deleteRelease(release._id)\n\n // return to release overview list now that release is deleted\n router.navigate({})\n }, [deleteRelease, release._id, router])\n\n const handleUnarchive = useCallback(async () => {\n return guardWithReleaseLimitUpsell(() => unarchive(release._id), true)\n }, [guardWithReleaseLimitUpsell, release._id, unarchive])\n\n const handleDuplicate = useCallback(async () => {\n const duplicateReleaseId = createReleaseId()\n\n await guardWithReleaseLimitUpsell(async () => {\n const releaseDocuments = documents?.map((doc) => doc.document)\n const duplicatedMetadata = {\n ...release.metadata,\n title: `${release.metadata.title} (${t('copy-suffix')})`,\n }\n return duplicateRelease(duplicateReleaseId, duplicatedMetadata, releaseDocuments)\n }, true)\n\n return {releaseId: duplicateReleaseId}\n }, [guardWithReleaseLimitUpsell, duplicateRelease, documents, release.metadata, t])\n\n const handleAction = useCallback(\n async (action: ReleaseAction) => {\n if (action === 'publish' || action === 'schedule') return\n if (releaseMenuDisabled) return\n\n const actionLookup = {\n delete: handleDelete,\n archive,\n unarchive: handleUnarchive,\n unschedule,\n duplicate: handleDuplicate,\n }\n const actionValues = RELEASE_ACTION_MAP[action]\n\n // The .catch/.finally syntax instead of try/catch/finally is because of the React Compiler not fully supporting the syntax yet\n const run = async () => {\n if (\n (action === 'archive' || action === 'delete') &&\n selectedReleaseId === getReleaseIdFromReleaseDocumentId(release._id)\n ) {\n // Reset the perspective to drafts when the release is archived or deleted\n // To avoid showing the release archived / deleted toast.\n setPerspective(isDraftModelEnabled ? 'drafts' : 'published')\n }\n setIsPerformingOperation(true)\n const actionResult = await actionLookup[action](release._id)\n\n telemetry.log(actionValues.telemetry)\n\n if (typeof actionValues.toastSuccessI18nKey !== 'undefined') {\n const toastComponents = toastActionComponents[action]?.(actionResult)\n\n toast.push({\n closable: true,\n status: 'success',\n title: (\n // toast children need access to the router\n <RouterContext.Provider value={router}>\n <Text muted size={1}>\n <Translate\n t={t}\n components={toastComponents}\n i18nKey={actionValues.toastSuccessI18nKey}\n values={{title: releaseTitle}}\n />\n </Text>\n </RouterContext.Provider>\n ),\n })\n }\n }\n await run()\n .catch((actionError) => {\n if (isReleaseLimitError(actionError)) return\n\n if (typeof actionValues.toastFailureI18nKey !== 'undefined') {\n toast.push({\n status: 'error',\n title: (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey={actionValues.toastFailureI18nKey}\n values={{title: releaseTitle, error: actionError.toString()}}\n />\n </Text>\n ),\n })\n }\n console.error(actionError)\n })\n .finally(() => {\n setIsPerformingOperation(false)\n setSelectedAction(undefined)\n })\n },\n [\n releaseMenuDisabled,\n handleDelete,\n archive,\n handleUnarchive,\n unschedule,\n handleDuplicate,\n selectedReleaseId,\n release._id,\n telemetry,\n setPerspective,\n isDraftModelEnabled,\n toast,\n router,\n t,\n releaseTitle,\n ],\n )\n\n /** in some instances, immediately execute the action without requiring confirmation */\n useEffect(() => {\n if (!selectedAction || isActionPublishOrSchedule) return\n\n if (!RELEASE_ACTION_MAP[selectedAction].confirmDialog) void handleAction(selectedAction)\n }, [documentsCount, handleAction, isActionPublishOrSchedule, selectedAction])\n\n const confirmActionDialog = useMemo(() => {\n if (!selectedAction || isActionPublishOrSchedule) return null\n\n const {confirmDialog} = RELEASE_ACTION_MAP[selectedAction]\n\n if (!confirmDialog) return null\n\n return (\n <Dialog\n id={confirmDialog.dialogId}\n data-testid={confirmDialog.dialogId}\n header={t(confirmDialog.dialogHeaderI18nKey)}\n onClose={() => !isPerformingOperation && setSelectedAction(undefined)}\n padding={false}\n footer={{\n confirmButton: {\n text: t(confirmDialog.dialogConfirmButtonI18nKey),\n tone: confirmDialog.confirmButtonTone,\n onClick: () => handleAction(selectedAction),\n loading: isPerformingOperation,\n disabled: isPerformingOperation,\n },\n cancelButton: {\n disabled: isPerformingOperation,\n },\n }}\n >\n <Stack space={4} paddingX={4} paddingBottom={4}>\n <ReleasePreviewCard release={release} />\n {!!documentsCount && (\n <Text muted size={1}>\n <Translate\n t={t}\n i18nKey={confirmDialog.dialogDescriptionI18nKey}\n values={{\n count: documentsCount,\n }}\n />\n </Text>\n )}\n </Stack>\n </Dialog>\n )\n }, [\n selectedAction,\n isActionPublishOrSchedule,\n t,\n isPerformingOperation,\n release,\n documentsCount,\n handleAction,\n ])\n\n const closePopover = useCallback(() => {\n setOpenPopover(false)\n }, [])\n\n const handleOnButtonClick = useCallback(() => {\n if (openPopover) closePopover()\n else setOpenPopover(true)\n }, [closePopover, openPopover])\n\n useClickOutsideEvent(\n () => {\n if (!isActionPublishOrSchedule) {\n closePopover()\n }\n },\n () => [popoverRef.current, releaseMenuRef.current],\n )\n\n const handleSetSelectedAction = useCallback(\n (action: SetStateAction<ReleaseAction | undefined>) => {\n if (!action) closePopover()\n setSelectedAction(action)\n },\n [closePopover],\n )\n\n // Create menu items for custom actions\n const customActionMenuItems = useMemo(() => {\n const handleOnActionClick = (action: ReleaseActionDescription) => () => {\n if (action.onHandle) {\n action.onHandle()\n closePopover()\n }\n }\n\n return customActionDescriptions.map((action, index) => (\n <MenuItem\n key={`custom-action-${index}`}\n icon={action.icon}\n text={action.label}\n disabled={action.disabled || isPerformingOperation}\n onClick={handleOnActionClick(action)}\n tooltipProps={action.title ? {content: action.title} : undefined}\n />\n ))\n }, [customActionDescriptions, isPerformingOperation, closePopover])\n\n const hasCustomActions = customActions.length > 0\n\n return (\n <>\n {hasCustomActions && (\n <ReleaseActionsResolver\n actions={customActions}\n release={release}\n documents={documents ?? []}\n onActions={handleCustomActionsUpdate}\n />\n )}\n <Popover\n content={\n <Menu ref={releaseMenuRef}>\n <ReleaseMenu\n ignoreCTA={ignoreCTA}\n release={release}\n setSelectedAction={handleSetSelectedAction}\n disabled={isPerformingOperation}\n documents={documents ?? []}\n />\n {hasCustomActions && (\n <>\n <MenuDivider />\n {customActionMenuItems}\n </>\n )}\n </Menu>\n }\n open={openPopover}\n ref={popoverRef}\n constrainSize={false}\n fallbackPlacements={['top-end']}\n portal\n tone=\"default\"\n placement=\"bottom\"\n >\n <Button\n disabled={releaseMenuDisabled || isPerformingOperation}\n icon={isPerformingOperation ? Spinner : EllipsisHorizontalIcon}\n mode=\"bleed\"\n tooltipProps={{content: t('menu.tooltip')}}\n aria-label={t('menu.label')}\n data-testid=\"release-menu-button\"\n onClick={handleOnButtonClick}\n />\n </Popover>\n {confirmActionDialog}\n </>\n )\n}\n","import {Box, Card, Flex, Text} from '@sanity/ui'\nimport {type ReactNode} from 'react'\n\nexport function StatusItem(props: {avatar?: ReactNode; text: ReactNode; testId?: string}) {\n const {avatar, text, testId} = props\n\n return (\n <Card data-testid={testId}>\n <Flex>\n {avatar && (\n <Box padding={1}>\n <div style={{margin: -1}}>{avatar}</div>\n </Box>\n )}\n <Box padding={2} paddingLeft={avatar ? 1 : undefined}>\n <Text muted size={1}>\n {text}\n </Text>\n </Box>\n </Flex>\n </Card>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {AvatarSkeleton, RelativeTime, UserAvatar} from '../../../components'\nimport {useTranslation} from '../../../i18n'\nimport {isNonNullable} from '../../../util/isNonNullable'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {StatusItem} from '../components/StatusItem'\nimport {\n isArchiveReleaseEvent,\n isCreateReleaseEvent,\n isPublishReleaseEvent,\n isUnarchiveReleaseEvent,\n type ReleaseEvent,\n} from './events/types'\n\nconst STATUS_TITLE_I18N = {\n createRelease: 'footer.status.created',\n publishRelease: 'footer.status.published',\n archiveRelease: 'footer.status.archived',\n unarchiveRelease: 'footer.status.unarchived',\n}\nexport function ReleaseStatusItems({\n events,\n release,\n}: {\n events: ReleaseEvent[]\n release: ReleaseDocument\n}) {\n const {t} = useTranslation(releasesLocaleNamespace)\n const footerEvents = useMemo(() => {\n const createEvent = events.find(isCreateReleaseEvent)\n const extraEvent = events.find(\n (event) =>\n isPublishReleaseEvent(event) ||\n isArchiveReleaseEvent(event) ||\n isUnarchiveReleaseEvent(event),\n )\n return [createEvent, extraEvent].filter(isNonNullable)\n }, [events])\n\n if (!footerEvents.length) {\n return (\n <Flex flex={1} gap={1}>\n <StatusItem\n avatar={<AvatarSkeleton $size={0} />}\n text={\n <>\n {t(STATUS_TITLE_I18N.createRelease)}{' '}\n <RelativeTime time={release._createdAt} useTemporalPhrase minimal />\n </>\n }\n />\n </Flex>\n )\n }\n return (\n <Flex flex={1} gap={1}>\n {footerEvents.map((event) => (\n <StatusItem\n key={event.id}\n testId={`status-${event.type}`}\n avatar={event.author && <UserAvatar size={0} user={event.author} />}\n text={\n <>\n {t(STATUS_TITLE_I18N[event.type])}{' '}\n <RelativeTime time={event.timestamp} useTemporalPhrase minimal />\n </>\n }\n />\n ))}\n </Flex>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {Card, Flex} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {isReleaseScheduledOrScheduling} from '../../index'\nimport {ReleasePublishAllButton} from '../components/releaseCTAButtons/ReleasePublishAllButton'\nimport {ReleaseRevertButton} from '../components/releaseCTAButtons/ReleaseRevertButton/ReleaseRevertButton'\nimport {ReleaseScheduleButton} from '../components/releaseCTAButtons/ReleaseScheduleButton'\nimport {ReleaseUnscheduleButton} from '../components/releaseCTAButtons/ReleaseUnscheduleButton'\nimport {ReleaseMenuButton} from '../components/ReleaseMenuButton/ReleaseMenuButton'\nimport {type ReleaseEvent} from './events/types'\nimport {ReleaseStatusItems} from './ReleaseStatusItems'\nimport {type DocumentInRelease} from './useBundleDocuments'\n\nexport function ReleaseDashboardFooter(props: {\n documents: DocumentInRelease[]\n release: ReleaseDocument\n events: ReleaseEvent[]\n}) {\n const {documents, release, events} = props\n\n const releaseActionButton = useMemo(() => {\n if (release.state === 'archived') return null\n\n if (isReleaseScheduledOrScheduling(release)) {\n return (\n <ReleaseUnscheduleButton\n release={release}\n documents={documents}\n disabled={!documents.length}\n />\n )\n }\n\n if (release.state === 'active') {\n if (release.metadata.releaseType === 'scheduled') {\n return (\n <ReleaseScheduleButton\n release={release}\n documents={documents}\n disabled={!documents.length}\n />\n )\n }\n\n if (release.metadata.releaseType === 'asap') {\n return (\n <ReleasePublishAllButton\n release={release}\n documents={documents}\n disabled={!documents.length}\n />\n )\n }\n }\n\n if (release.state === 'published') {\n return (\n <ReleaseRevertButton release={release} documents={documents} disabled={!documents.length} />\n )\n }\n\n return null\n }, [documents, release])\n\n return (\n <Card flex=\"none\">\n <Card borderTop marginX={2} style={{opacity: 0.6}} />\n\n <Flex padding={3}>\n <Flex flex={1} gap={1}>\n <ReleaseStatusItems events={events} release={release} />\n </Flex>\n\n <Flex flex=\"none\" gap={1} data-testid=\"release-dashboard-footer-actions\">\n {releaseActionButton}\n <ReleaseMenuButton\n release={release}\n documentsCount={documents.length}\n documents={documents}\n ignoreCTA={release.metadata.releaseType !== 'undecided'}\n />\n </Flex>\n </Flex>\n </Card>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {LinkIcon, ShareIcon, TargetIcon, TextIcon} from '@sanity/icons'\nimport {type DefinedTelemetryLog, useTelemetry} from '@sanity/telemetry/react'\nimport {Menu, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button, MenuButton, MenuItem} from '../../../../ui-components'\nimport {useStudioUrl} from '../../../hooks/useStudioUrl'\nimport {useTranslation} from '../../../i18n'\nimport {\n ReleaseIdCopied,\n ReleaseLinkCopied,\n ReleaseTitleCopied,\n} from '../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\n\ninterface CopyReleaseActionsProps {\n release: ReleaseDocument\n}\n\nexport function CopyReleaseActions(props: CopyReleaseActionsProps) {\n const {release} = props\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const telemetry = useTelemetry()\n const toast = useToast()\n const {resolvePathFromState} = useRouter()\n const {buildIntentUrl} = useStudioUrl()\n\n const releaseId = getReleaseIdFromReleaseDocumentId(release._id)\n const title = release.metadata.title || tCore('release.placeholder-untitled-release')\n\n const copyToClipboard = useCallback(\n async (text: string, event: DefinedTelemetryLog<void>, toastKey: string) => {\n await navigator.clipboard.writeText(text)\n telemetry.log(event)\n toast.push({\n id: toastKey,\n status: 'info',\n title: t(`toast.${toastKey}.success`),\n })\n },\n [t, telemetry, toast],\n )\n\n const handleCopyReleaseLink = useCallback(async () => {\n const releasePath = resolvePathFromState({releaseId})\n const url = buildIntentUrl(releasePath)\n\n await copyToClipboard(url, ReleaseLinkCopied, 'copy-release-link')\n }, [buildIntentUrl, copyToClipboard, releaseId, resolvePathFromState])\n\n const handleCopyReleaseId = useCallback(async () => {\n await copyToClipboard(releaseId, ReleaseIdCopied, 'copy-release-id')\n }, [copyToClipboard, releaseId])\n\n const handleCopyReleaseTitle = useCallback(async () => {\n await copyToClipboard(title, ReleaseTitleCopied, 'copy-release-title')\n }, [copyToClipboard, title])\n\n return (\n <MenuButton\n id=\"copy-release-actions\"\n button={\n <Button\n data-testid=\"copy-release-actions-button\"\n icon={ShareIcon}\n mode=\"bleed\"\n tooltipProps={{content: t('action.copy-release.label')}}\n />\n }\n menu={\n <Menu>\n <MenuItem\n icon={LinkIcon}\n onClick={handleCopyReleaseLink}\n text={t('action.copy-release-link.label')}\n />\n <MenuItem\n icon={TargetIcon}\n onClick={handleCopyReleaseId}\n text={t('action.copy-release-id.label')}\n />\n <MenuItem\n icon={TextIcon}\n onClick={handleCopyReleaseTitle}\n text={t('action.copy-release-title.label')}\n />\n </Menu>\n }\n popover={{placement: 'bottom-end'}}\n />\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {ChevronRightIcon, RestoreIcon} from '@sanity/icons'\nimport {\n Box,\n // oxlint-disable-next-line no-restricted-imports\n Button, // Custom button with a different textWeight, consider adding textWeight to the shared\n Flex,\n Text,\n} from '@sanity/ui'\nimport {type Dispatch, type SetStateAction, useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {GROUP_SEARCH_PARAM_KEY} from '../overview/queryParamUtils'\nimport {CopyReleaseActions} from './CopyReleaseActions'\nimport {type ReleaseInspector} from './ReleaseDetail'\n\nexport function ReleaseDashboardHeader(props: {\n inspector: ReleaseInspector | undefined\n release: ReleaseDocument\n setInspector: Dispatch<SetStateAction<ReleaseInspector | undefined>>\n}) {\n const {inspector, release, setInspector} = props\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const title = release.metadata.title || tCore('release.placeholder-untitled-release')\n const router = useRouter()\n\n const handleNavigateToReleasesList = useCallback(() => {\n const isReleaseOpen = release.state !== 'archived' && release.state !== 'published'\n\n router.navigate({\n _searchParams: isReleaseOpen ? undefined : [[GROUP_SEARCH_PARAM_KEY, 'archived']],\n })\n }, [release.state, router])\n\n const handleActivityClick = useCallback(() => {\n setInspector((prev) => (prev === 'activity' ? undefined : 'activity'))\n }, [setInspector])\n\n return (\n <Flex align=\"flex-start\">\n <Flex flex={1} align=\"center\" style={{minWidth: 0}}>\n <Flex flex=\"none\">\n <Button\n mode=\"bleed\"\n onClick={handleNavigateToReleasesList}\n text={t('overview.title')}\n textWeight=\"regular\"\n padding={2}\n data-testid=\"back-to-releases-button\"\n />\n </Flex>\n <Box paddingY={2} flex=\"none\">\n <Text size={1}>\n <ChevronRightIcon />\n </Text>\n </Box>\n <Box padding={2} style={{minWidth: 0, maxWidth: '300px'}}>\n <Text\n size={1}\n weight=\"semibold\"\n textOverflow=\"ellipsis\"\n style={release.metadata.title ? undefined : {opacity: 0.5}}\n >\n {title}\n </Text>\n </Box>\n </Flex>\n\n <Flex flex=\"none\" gap={2}>\n <CopyReleaseActions release={release} />\n <Button\n icon={RestoreIcon}\n mode=\"bleed\"\n onClick={handleActivityClick}\n padding={2}\n selected={inspector === 'activity'}\n space={2}\n text={t('dashboard.details.activity')}\n />\n </Flex>\n </Flex>\n )\n}\n","import {type SanityDocument} from '@sanity/client'\nimport {LayerProvider, PortalProvider} from '@sanity/ui'\n\nimport {SearchPopover} from '../../../studio/components/navbar/search/components/SearchPopover'\nimport {SearchProvider} from '../../../studio/components/navbar/search/contexts/search/SearchProvider'\n\nexport type AddedDocument = Pick<SanityDocument, '_id' | '_type' | 'title'> &\n Partial<SanityDocument>\n\nexport function AddDocumentSearch({\n open,\n onClose,\n releaseId,\n idsInRelease,\n}: {\n open: boolean\n onClose: (document?: AddedDocument) => void\n releaseId: string\n idsInRelease: string[]\n}): React.JSX.Element {\n return (\n <LayerProvider zOffset={1}>\n <SearchProvider disabledDocumentIds={idsInRelease} canDisableAction>\n <PortalProvider>\n <SearchPopover\n onClose={onClose}\n onItemSelect={onClose}\n open={open}\n previewPerspective={[releaseId]}\n disableIntentLink\n />\n </PortalProvider>\n </SearchProvider>\n </LayerProvider>\n )\n}\n","import {isGoingToUnpublish} from '../../util/isGoingToUnpublish'\nimport {type BundleDocumentRow} from './ReleaseSummary'\nimport {type DocumentInRelease} from './useBundleDocuments'\n\nexport type DocumentFilterType = 'all' | 'added' | 'changed' | 'unpublished' | 'errors'\n\nexport interface DocumentActionConfig {\n key: 'added' | 'changed' | 'unpublished'\n tone: 'positive' | 'caution' | 'critical'\n labelKey: string\n}\n\nexport interface FilterTabConfig {\n key: DocumentFilterType\n labelKey: string\n tone: 'default' | 'positive' | 'caution' | 'critical'\n}\n\nconst DOCUMENT_ACTION_CONFIGS: DocumentActionConfig[] = [\n {\n key: 'added',\n tone: 'positive',\n labelKey: 'table-body.action.add',\n },\n {\n key: 'changed',\n tone: 'caution',\n labelKey: 'table-body.action.change',\n },\n {\n key: 'unpublished',\n tone: 'critical',\n labelKey: 'table-body.action.unpublish',\n },\n]\n\nexport const FILTER_TAB_CONFIGS: FilterTabConfig[] = [\n {key: 'all', labelKey: 'filter-tab.all', tone: 'default'},\n ...DOCUMENT_ACTION_CONFIGS,\n {key: 'errors', labelKey: 'filter-tab.errors', tone: 'critical'},\n]\n\nexport type ActionCounts = Record<'added' | 'changed' | 'unpublished' | 'errors', number>\n\n/**\n * Counts documents by their action type and validation errors\n */\nexport function countDocumentsByAction(\n documents: (DocumentInRelease | BundleDocumentRow)[],\n): ActionCounts {\n return documents.reduce<ActionCounts>(\n (acc, doc) => {\n const actionType = getDocumentActionType(doc)\n if (actionType) {\n acc[actionType]++\n }\n if (doc.validation.hasError && !doc.isPending) {\n acc.errors++\n }\n return acc\n },\n {added: 0, changed: 0, unpublished: 0, errors: 0},\n )\n}\n\n/**\n * Checks if a document matches the given filter type\n */\nexport function documentMatchesFilter(\n doc: DocumentInRelease | BundleDocumentRow,\n filter: DocumentFilterType,\n): boolean {\n if (filter === 'all') return true\n if (filter === 'errors') return doc.validation.hasError && !doc.isPending\n return getDocumentActionType(doc) === filter\n}\n\n/**\n * Determines the action type for a document based on its state\n */\nexport function getDocumentActionType(\n document: DocumentInRelease | BundleDocumentRow,\n): DocumentActionConfig['key'] | null {\n if (!document.document || document.isPending) {\n return null\n }\n\n const willBeUnpublished = isGoingToUnpublish(document.document)\n if (willBeUnpublished) {\n return 'unpublished'\n }\n\n if (document.document.publishedDocumentExists) {\n return 'changed'\n }\n\n return 'added'\n}\n\nexport function getReleaseDocumentActionConfig(\n actionType: DocumentActionConfig['key'],\n): DocumentActionConfig | undefined {\n return DOCUMENT_ACTION_CONFIGS.find(({key}) => key === actionType)\n}\n","import {type ReleaseState} from '@sanity/client'\nimport {Box, Container, Flex, Skeleton, TabList} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {Tab} from '../../../../../ui-components'\nimport {useTranslation} from '../../../../i18n'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {\n countDocumentsByAction,\n type DocumentFilterType,\n FILTER_TAB_CONFIGS,\n type FilterTabConfig,\n} from '../releaseDocumentActions'\nimport {type DocumentInRelease} from '../useBundleDocuments'\n\ninterface ReleaseDocumentFilterTabsProps {\n documents: DocumentInRelease[]\n releaseState: ReleaseState\n isLoading?: boolean\n activeFilter: DocumentFilterType\n onFilterChange: (filter: DocumentFilterType) => void\n}\n\nexport function ReleaseDocumentFilterTabs({\n documents,\n releaseState,\n isLoading = false,\n activeFilter,\n onFilterChange,\n}: ReleaseDocumentFilterTabsProps) {\n const {t} = useTranslation(releasesLocaleNamespace)\n\n // Hide filter tabs for archived and published releases (early return for perf)\n if (releaseState === 'archived' || releaseState === 'published') {\n return null\n }\n\n if (isLoading) {\n return (\n <Container width={3}>\n <Box padding={3}>\n <Flex align=\"center\" gap={2}>\n {FILTER_TAB_CONFIGS.filter((config) => config.key !== 'errors').map((config) => (\n <Skeleton\n key={`loading-skeleton-${config.key}`}\n animated\n style={{width: '70px', height: '32px'}}\n radius={2}\n />\n ))}\n </Flex>\n </Box>\n </Container>\n )\n }\n\n if (documents.length === 0) {\n return null\n }\n\n return (\n <ReleaseDocumentFilterTabsInner\n documents={documents}\n activeFilter={activeFilter}\n onFilterChange={onFilterChange}\n t={t}\n />\n )\n}\n\ninterface ReleaseDocumentFilterTabsInnerProps {\n documents: DocumentInRelease[]\n activeFilter: DocumentFilterType\n onFilterChange: (filter: DocumentFilterType) => void\n t: ReturnType<typeof useTranslation>['t']\n}\n\nfunction ReleaseDocumentFilterTabsInner({\n documents,\n activeFilter,\n onFilterChange,\n t,\n}: ReleaseDocumentFilterTabsInnerProps) {\n const counts = useMemo(() => countDocumentsByAction(documents), [documents])\n\n const getTabLabel = (config: FilterTabConfig): string => {\n const label = t(config.labelKey)\n if (config.key === 'all') {\n return label\n }\n const count = counts[config.key]\n return `${label} (${count})`\n }\n\n const getTabTone = (config: FilterTabConfig): 'default' | 'positive' | 'caution' | 'critical' => {\n // Errors tab always uses critical tone for visibility (both selected and unselected)\n if (config.key === 'errors') {\n return 'critical'\n }\n // Only apply action-specific tones when selected\n if (activeFilter === config.key) {\n return config.tone\n }\n return 'default'\n }\n\n return (\n <Container width={3}>\n <Box padding={3}>\n <TabList space={1}>\n {FILTER_TAB_CONFIGS.map((config) => {\n const isSelected = activeFilter === config.key\n\n // Hide tabs with zero counts (except \"All\")\n if (config.key !== 'all' && counts[config.key] === 0) {\n return null\n }\n\n return (\n <Tab\n key={config.key}\n id={`filter-tab-${config.key}`}\n aria-controls=\"document-table-card\"\n label={getTabLabel(config)}\n onClick={() => onFilterChange(config.key)}\n selected={isSelected}\n tone={getTabTone(config)}\n />\n )\n })}\n </TabList>\n </Box>\n </Container>\n )\n}\n","import {CloseIcon, UnpublishIcon} from '@sanity/icons'\nimport {Box, Card, Label, Menu, MenuDivider} from '@sanity/ui'\nimport {memo, useMemo, useState} from 'react'\n\nimport {MenuButton, MenuItem} from '../../../../../ui-components'\nimport {ContextMenuButton} from '../../../../components/contextMenuButton'\nimport {useSchema} from '../../../../hooks'\nimport {useTranslation} from '../../../../i18n'\nimport {useDocumentPairPermissions} from '../../../../store/grants/documentPairPermissions'\nimport {getPublishedId, getVersionFromId} from '../../../../util/draftUtils'\nimport {DiscardVersionDialog} from '../../../components'\nimport {UnpublishVersionDialog} from '../../../components/dialog/UnpublishVersionDialog'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {isGoingToUnpublish} from '../../../util/isGoingToUnpublish'\nimport {type BundleDocumentRow} from '../ReleaseSummary'\n\nconst DocumentActionsInner = memo(\n function DocumentActionsInner({\n document,\n releaseTitle,\n }: {\n document: BundleDocumentRow\n releaseTitle: string | undefined\n }) {\n const [showDiscardDialog, setShowDiscardDialog] = useState(false)\n const [showUnpublishDialog, setShowUnpublishDialog] = useState(false)\n const {t: coreT} = useTranslation()\n const {t} = useTranslation(releasesLocaleNamespace)\n const isAlreadyUnpublished = isGoingToUnpublish(document.document)\n\n const publishedId = getPublishedId(document.document._id)\n const type = document.document._type\n const version = getVersionFromId(document.document._id)\n\n const [discardVersionPermission, isDiscardVersionPermissionsLoading] =\n useDocumentPairPermissions({\n id: publishedId,\n type,\n version,\n permission: 'discardVersion',\n })\n const [unpublishPermission, isUnpublishPermissionsLoading] = useDocumentPairPermissions({\n id: publishedId,\n type,\n version,\n permission: 'unpublish',\n })\n\n const isDiscardVersionActionDisabled =\n !discardVersionPermission?.granted || isDiscardVersionPermissionsLoading\n const noPermissionToUnpublish = !unpublishPermission?.granted || isUnpublishPermissionsLoading\n\n const unPublishTooltipContent = useMemo(() => {\n if (noPermissionToUnpublish) {\n return t('permissions.error.unpublish')\n }\n if (!document.document.publishedDocumentExists) {\n return t('unpublish.no-published-version')\n }\n if (isAlreadyUnpublished) {\n return t('unpublish.already-unpublished')\n }\n\n return null\n }, [\n document.document.publishedDocumentExists,\n isAlreadyUnpublished,\n noPermissionToUnpublish,\n t,\n ])\n\n const isUnpublishActionDisabled =\n noPermissionToUnpublish || !document.document.publishedDocumentExists || isAlreadyUnpublished\n\n return (\n <>\n <Card tone=\"default\" display=\"flex\">\n <MenuButton\n id=\"document-actions\"\n button={<ContextMenuButton />}\n menu={\n <Menu>\n <MenuItem\n text={coreT('release.action.discard-version')}\n icon={CloseIcon}\n onClick={() => setShowDiscardDialog(true)}\n disabled={isDiscardVersionActionDisabled}\n tooltipProps={{\n disabled: !isDiscardVersionActionDisabled,\n content: t('permissions.error.discard-version'),\n }}\n />\n <MenuDivider />\n <Box padding={3} paddingBottom={2}>\n <Label size={1}>{t('menu.group.when-releasing')}</Label>\n </Box>\n <MenuItem\n text={t('action.unpublish')}\n icon={UnpublishIcon}\n disabled={isUnpublishActionDisabled}\n tooltipProps={{\n disabled: !isUnpublishActionDisabled,\n content: unPublishTooltipContent,\n }}\n onClick={() => setShowUnpublishDialog(true)}\n />\n </Menu>\n }\n />\n </Card>\n {showDiscardDialog && (\n <DiscardVersionDialog\n isGoingToUnpublish={isGoingToUnpublish(document.document)}\n onClose={() => setShowDiscardDialog(false)}\n documentId={document.document._id}\n documentType={document.document._type}\n fromPerspective={releaseTitle || t('release-placeholder.title')}\n />\n )}\n {showUnpublishDialog && (\n <UnpublishVersionDialog\n onClose={() => setShowUnpublishDialog(false)}\n documentVersionId={document.document._id}\n documentType={document.document._type}\n />\n )}\n </>\n )\n },\n (prev, next) => prev.document.memoKey === next.document.memoKey,\n)\n\nexport const DocumentActions = memo(function GuardedDocumentActions(props: {\n document: BundleDocumentRow\n releaseTitle: string | undefined\n}) {\n const schema = useSchema()\n const type = schema.get(props.document.document._type)\n const {t} = useTranslation()\n if (!type) {\n return (\n <ContextMenuButton\n disabled\n tooltipProps={{\n content: t('document.type.not-found', {type: props.document.document._type}),\n }}\n />\n )\n }\n\n return <DocumentActionsInner {...props} />\n})\n","import {type TransactionLogEventWithEffects} from '@sanity/types'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\n\nimport {useClient} from '../../../../hooks'\nimport {getTransactionsLogs} from '../../../../store/translog/getTransactionsLogs'\nimport {getVersionId} from '../../../../util'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../../util/releasesClient'\n\nconst historyCache: Record<string, {transactions: TransactionLogEventWithEffects[]}> =\n Object.create(null)\n\nexport type DocumentHistory = {\n history: TransactionLogEventWithEffects[]\n createdBy: string\n lastEditedBy: string\n editors: string[]\n}\n\n// Add as a concurrency limiter to avoid 429s when many rows mount at once\n// This happens in incredibly large releases with many documents\n// 10 was the highest number I was able to run before getting consistent 429s\nlet activeHistoryStreams = 0\nconst pendingHistoryResolvers: Array<() => void> = []\nasync function acquireHistorySlot(maxConcurrent = 10): Promise<void> {\n if (activeHistoryStreams >= maxConcurrent) {\n await new Promise<void>((resolve) => pendingHistoryResolvers.push(resolve))\n }\n activeHistoryStreams += 1\n}\nfunction releaseHistorySlot(): void {\n activeHistoryStreams = Math.max(0, activeHistoryStreams - 1)\n const next = pendingHistoryResolvers.shift()\n if (next) next()\n}\n\n// Fetch history for a single document version within a release\nexport function useReleaseHistory(\n releaseDocumentId: string | undefined,\n releaseId: string,\n documentRevision?: string,\n): {\n documentHistory?: DocumentHistory\n collaborators: string[]\n loading: boolean\n} {\n const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n const [history, setHistory] = useState<TransactionLogEventWithEffects[] | null>(null)\n\n const versionId = useMemo(() => {\n if (!releaseDocumentId || !releaseId) return ''\n return getVersionId(releaseDocumentId, releaseId)\n }, [releaseDocumentId, releaseId])\n\n const cancelledRef = useRef(false)\n\n const fetchAndParse = useCallback(async (): Promise<void> => {\n if (!versionId) {\n setHistory(null)\n return\n }\n\n const cacheKey = `${releaseDocumentId}-${documentRevision}`\n\n const cached = historyCache[cacheKey]\n if (cached) {\n setHistory(cached.transactions)\n return\n }\n\n await acquireHistorySlot()\n // The run().catch().finally() syntax instead of try/catch/finally is because of the React Compiler not fully supporting the syntax yet\n const run = async () => {\n const transactions = await getTransactionsLogs(client, versionId, {\n tag: 'sanity.studio.releases.documents.history',\n effectFormat: 'mendoza',\n excludeContent: true,\n includeIdentifiedDocumentsOnly: true,\n limit: 1,\n reverse: true,\n })\n\n if (!cancelledRef.current) {\n setHistory(transactions)\n\n historyCache[cacheKey] = {\n transactions,\n }\n }\n }\n await run()\n .catch((error) => {\n console.error('Failed to fetch or parse document history:', error)\n if (!cancelledRef.current) setHistory([])\n })\n .finally(() => {\n releaseHistorySlot()\n })\n }, [versionId, releaseDocumentId, documentRevision, client])\n\n useEffect(() => {\n cancelledRef.current = false\n // oxlint-disable-next-line react/react-compiler\n void fetchAndParse()\n return () => {\n cancelledRef.current = true\n }\n }, [fetchAndParse])\n\n return useMemo(() => {\n const collaborators: string[] = []\n if (!history || history.length === 0) {\n return {documentHistory: undefined, collaborators, loading: true}\n }\n\n const aggregated: DocumentHistory = {\n history: [],\n createdBy: '',\n lastEditedBy: '',\n editors: [],\n }\n\n history.forEach((item) => {\n const author = item.author\n if (!collaborators.includes(author)) collaborators.push(author)\n\n if (aggregated.history.length === 0) {\n aggregated.createdBy = author\n }\n\n // @ts-expect-error TransactionLogEventWithEffects has no property 'mutations' but it's returned from the API\n const isCreate = item.mutations?.some((mutation) => 'create' in mutation)\n if (isCreate) aggregated.createdBy = author\n\n if (!aggregated.editors.includes(author)) aggregated.editors.push(author)\n aggregated.lastEditedBy = author\n aggregated.history.push(item)\n })\n\n return {documentHistory: aggregated, collaborators, loading: false}\n }, [history])\n}\n","import {type ReleaseState} from '@sanity/client'\nimport {ErrorOutlineIcon} from '@sanity/icons'\nimport {Badge, Box, Flex, Text} from '@sanity/ui'\nimport {toString as pathToString} from '@sanity/util/paths'\n// oxlint-disable-next-line @sanity/i18n/no-i18next-import -- figure out how to have the linter be fine with importing types-only\nimport {type TFunction} from 'i18next'\nimport {memo, useCallback, useEffect, useRef, useState} from 'react'\nimport {IntentLink} from 'sanity/router'\nimport {styled} from 'styled-components'\n\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../../../ui-components/tooltip'\nimport {AvatarSkeleton, UserAvatar} from '../../../../components'\nimport {RelativeTime} from '../../../../components/RelativeTime'\nimport {useSchema} from '../../../../hooks'\nimport {SanityDefaultPreview} from '../../../../preview/components/SanityDefaultPreview'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {isGoingToUnpublish} from '../../../util/isGoingToUnpublish'\nimport {getReleaseDocumentIntent} from '../../components/getReleaseDocumentIntent'\nimport {ReleaseDocumentPreview} from '../../components/ReleaseDocumentPreview'\nimport {Headers} from '../../components/Table/TableHeader'\nimport {type Column, type InjectedTableProps} from '../../components/Table/types'\nimport {getDocumentActionType, getReleaseDocumentActionConfig} from '../releaseDocumentActions'\nimport {type BundleDocumentRow} from '../ReleaseSummary'\nimport {type DocumentInRelease} from '../useBundleDocuments'\nimport {useReleaseHistory} from './useReleaseHistory'\n\nconst MemoReleaseDocumentPreview = memo(\n function MemoReleaseDocumentPreview({\n item,\n releaseId,\n releaseState,\n documentRevision,\n }: {\n item: DocumentInRelease\n releaseId: string\n releaseState?: ReleaseState\n documentRevision?: string\n }) {\n const isGoingToBePublished = isGoingToUnpublish(item.document)\n\n return (\n <ReleaseDocumentPreview\n documentId={item.document._id}\n documentTypeName={item.document._type}\n releaseId={releaseId}\n releaseState={releaseState}\n documentRevision={documentRevision}\n isGoingToBePublished={isGoingToBePublished}\n />\n )\n },\n (prev, next) => prev.item.memoKey === next.item.memoKey && prev.releaseId === next.releaseId,\n)\n\n// Carries its own overflow CSS because @sanity/ui's `textOverflow` prop is inert here.\nconst TruncatedSpan = styled.span`\n display: block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`\n\n/** @internal - exported for unit testing only */\nexport function DocumentType({type}: {type: string}) {\n const schema = useSchema()\n const title = schema.get(type)?.title || 'Not found'\n\n const elementRef = useRef<HTMLSpanElement | null>(null)\n const [isTruncated, setIsTruncated] = useState(false)\n\n const checkTruncation = useCallback(() => {\n const element = elementRef.current\n if (element) setIsTruncated(element.scrollWidth > element.clientWidth)\n }, [])\n\n // A callback ref measures on attach, avoiding the race where a useEffect fires before the\n // ref is populated. The returned cleanup runs when the node detaches.\n const measureRef = useCallback(\n (element: HTMLSpanElement | null) => {\n elementRef.current = element\n if (!element) return undefined\n\n checkTruncation()\n\n const observer = new ResizeObserver(checkTruncation)\n observer.observe(element)\n\n // The late font swap widens the text but not the column-locked box, so the\n // ResizeObserver never fires - re-measure once fonts settle.\n let cancelled = false\n void document.fonts?.ready?.then(() => {\n if (!cancelled) checkTruncation()\n })\n\n return () => {\n cancelled = true\n observer.disconnect()\n elementRef.current = null\n }\n },\n [checkTruncation],\n )\n\n // A title change rewrites the text without resizing the box, so re-measure on title change.\n useEffect(() => {\n checkTruncation()\n }, [title, checkTruncation])\n\n const textElement = (\n <Text size={1}>\n <TruncatedSpan ref={measureRef}>{title}</TruncatedSpan>\n </Text>\n )\n\n if (isTruncated) {\n return (\n <Tooltip portal content={<Text size={1}>{title}</Text>}>\n {textElement}\n </Tooltip>\n )\n }\n\n return textElement\n}\n\nconst MemoDocumentType = memo(DocumentType, (prev, next) => prev.type === next.type)\n\nconst documentActionColumn: (t: TFunction<'releases'>) => Column<BundleDocumentRow> = (t) => ({\n id: 'action',\n width: null,\n style: {minWidth: 100},\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.BasicHeader text={t('table-header.action')} />\n </Flex>\n ),\n cell: ({cellProps, datum}) => {\n const actionBadge = () => {\n const actionType = getDocumentActionType(datum)\n if (!actionType) return null\n\n const documentActionConfig = getReleaseDocumentActionConfig(actionType)\n if (!documentActionConfig) return null\n\n return (\n <Badge\n radius={2}\n tone={documentActionConfig.tone}\n data-testid={`${actionType}-badge-${datum.document._id}`}\n >\n {t(documentActionConfig.labelKey)}\n </Badge>\n )\n }\n\n return (\n <Flex align=\"center\" {...cellProps}>\n <Box paddingX={2}>{actionBadge()}</Box>\n </Flex>\n )\n },\n})\n\nexport const getDocumentTableColumnDefs: (\n releaseId: string,\n releaseState: ReleaseState,\n t: TFunction<'releases'>,\n) => Column<BundleDocumentRow>[] = (releaseId, releaseState, t) => [\n /**\n * Hiding action for archived and published releases of v1.0\n * This will be added once Events API has reverse order lookup supported\n */\n ...(releaseState === 'archived' || releaseState === 'published' ? [] : [documentActionColumn(t)]),\n {\n id: 'document._type',\n // Header and body rows are independent flexboxes, so a content-sized column (width: null)\n // settles at different widths in each and misaligns. A fixed width keeps them in sync.\n width: 150,\n sorting: true,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.type')} {...props} />\n </Flex>\n ),\n cell: ({cellProps, datum}) => (\n <Flex align=\"center\" {...cellProps}>\n <Box paddingX={2} style={{minWidth: 0}}>\n {!datum.isLoading && <MemoDocumentType type={datum.document._type} />}\n </Box>\n </Flex>\n ),\n },\n {\n id: 'search',\n width: null,\n style: {minWidth: 'min(50%, calc(100vw - 80px))', maxWidth: 'min(50%, calc(100vw - 80px))'},\n sortTransform(value) {\n return (\n String(\n value.document?.title || value.document?.name || value.document?._id,\n ).toLowerCase() || 0\n )\n },\n header: (props) => (\n <Headers.TableHeaderSearch {...props} placeholder={t('search-documents-placeholder')} />\n ),\n cell: ({cellProps, datum}) => (\n <Box {...cellProps} flex={1} padding={1} paddingRight={2} sizing=\"border\">\n {datum.isPending || datum.isLoading ? (\n <SanityDefaultPreview isPlaceholder />\n ) : (\n <MemoReleaseDocumentPreview\n item={datum}\n releaseId={releaseId}\n releaseState={releaseState}\n documentRevision={datum.document._rev}\n />\n )}\n </Box>\n ),\n },\n {\n id: 'document._updatedAt',\n sorting: true,\n width: 130,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.edited')} {...props} />\n </Flex>\n ),\n cell: (props) => <UpdatedAtCell {...props} releaseDocumentId={releaseId} />,\n },\n\n {\n id: 'validation',\n sorting: false,\n width: 50,\n header: ({headerProps}) => (\n <Flex {...headerProps} paddingY={3} sizing=\"border\">\n <Headers.BasicHeader text={''} />\n </Flex>\n ),\n cell: ({cellProps, datum}) => {\n if (datum.isLoading) return null\n\n const errors = datum.validation.validation.filter(\n (validation) => validation.level === 'error',\n )\n const validationErrorCount = errors.length\n\n // Deep-link to the first field-level error (fall back to the first error). The\n // existing params.path -> field-focus plumbing in DocumentPaneProvider scrolls to\n // and focuses the field when the document opens.\n const firstError = errors.find((error) => error.path.length > 0) ?? errors[0]\n const focusPath = firstError ? pathToString(firstError.path) : undefined\n const intent = getReleaseDocumentIntent({\n documentId: datum.document._id,\n documentTypeName: datum.document._type,\n releaseId,\n releaseState,\n documentRevision: datum.document._rev,\n path: focusPath,\n })\n const errorLabel = t(\n validationErrorCount === 1\n ? 'document-validation.error_one'\n : 'document-validation.error_other',\n {count: validationErrorCount},\n )\n\n return (\n <Flex {...cellProps} flex={1} padding={1} justify=\"center\" align=\"center\" sizing=\"border\">\n {datum.validation.hasError && (\n <Tooltip\n portal\n placement=\"bottom-end\"\n content={\n <Text muted size={1}>\n <Flex align={'center'} gap={3} padding={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n {errorLabel}\n </Flex>\n </Text>\n }\n >\n <Text size={1}>\n <IntentLink\n intent=\"edit\"\n params={intent.params}\n searchParams={intent.searchParams}\n aria-label={errorLabel}\n data-testid={`validation-error-link-${datum.document._id}`}\n >\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n </IntentLink>\n </Text>\n </Tooltip>\n )}\n </Flex>\n )\n },\n },\n]\n\nfunction UpdatedAtCell({\n cellProps,\n datum,\n releaseDocumentId,\n}: {\n cellProps: InjectedTableProps\n datum: BundleDocumentRow & {isLoading?: boolean}\n releaseDocumentId: string\n}) {\n const {document, isLoading} = datum\n const bundleId = getReleaseIdFromReleaseDocumentId(releaseDocumentId)\n const historyDocumentId =\n datum.isPending || document?._id?.endsWith('-pending') ? undefined : document?._id\n const {documentHistory} = useReleaseHistory(historyDocumentId, bundleId, document?._rev)\n\n return (\n <Flex\n {...cellProps}\n align=\"center\"\n paddingX={2}\n paddingY={3}\n style={{minWidth: 130}}\n sizing=\"border\"\n >\n <Flex align=\"center\" gap={2}>\n {(isLoading || !documentHistory?.lastEditedBy) && <AvatarSkeleton $size={0} animated />}\n {!isLoading && document._updatedAt && (\n <>\n {documentHistory?.lastEditedBy && (\n <UserAvatar size={0} user={documentHistory.lastEditedBy} />\n )}\n <Text muted size={1}>\n <RelativeTime time={document._updatedAt} useTemporalPhrase minimal />\n </Text>\n </>\n )}\n </Flex>\n </Flex>\n )\n}\n","/**\n * Extracts a searchable string from a field value, handling various data types\n * @param value - The field value to extract text from\n * @param depth - Current recursion depth\n * @param visited - Array of visited objects thath ave been proceeded so far\n * @returns A string representation suitable for search\n */\nexport function extractSearchableText(\n value: unknown,\n depth: number = 0,\n visited: Array<unknown> = [],\n): string {\n if (typeof value === 'undefined' || value === null) return ''\n\n // Limit recursion depth to avoid going too deeply into a nested structure\n if (depth > 3) return ''\n\n // Handle primitive types\n if (typeof value === 'string') return value\n if (typeof value === 'number') return value.toString()\n\n // Handle Portable Text\n if (Array.isArray(value)) {\n return value\n .map((item) => {\n if (typeof item === 'object' && item.children && item._type === 'block') {\n return item.children\n .map((child: {text: string}) => child.text)\n .join(' ')\n .trim()\n }\n // If there are nested arrays, then we need to extract the text from the nested arrays\n if (Array.isArray(item)) {\n return extractSearchableText(item, depth + 1, visited)\n }\n\n // Handle other types (numbers, string)\n return item.toString().trim()\n })\n .filter(Boolean)\n .join(' ')\n }\n\n // Handle objects\n if (typeof value === 'object' && value !== null) {\n // Limit the number of items proceeded through the search as to avoid too deep recursion\n // that impacts performance. If the object has already been visited, then there is no need to proceed further.\n if (visited.includes(value)) return ''\n visited.push(value)\n\n // Handle localized objects (common pattern: {en: \"title\", no: \"tittel\"})\n // However, make sure that the values are not internal Sanity keys (starting with _)\n const entries = Object.entries(value)\n if (\n entries.length > 0 &&\n entries.every(([key, val]) => typeof val !== 'boolean' && !key.startsWith('_'))\n ) {\n return entries\n .map(([, val]) => extractSearchableText(val, depth + 1, visited))\n .filter(Boolean)\n .join(' ')\n }\n\n // Handle objects with specific properties (like {title: \"value\"})\n const title =\n 'title' in value && typeof value.title === 'string'\n ? value.title.toString().trim()\n : undefined\n const name =\n 'name' in value && typeof value.name === 'string' ? value.name.toString().trim() : undefined\n const text =\n 'text' in value && typeof value.text === 'string' ? value.text.toString().trim() : undefined\n\n if (title || name || text) {\n return [title, name, text].filter(Boolean).join(' ')\n }\n\n // Generic object handling - extract all string/number values\n return entries\n .filter(([key]) => !key.startsWith('_')) // Skip metadata keys\n .map(([, val]) => extractSearchableText(val, depth + 1, visited))\n .filter(Boolean)\n .join(' ')\n }\n\n return ''\n}\n","import {type SanityDocument} from '@sanity/types'\n\nimport {extractSearchableText} from './extractSearchableText'\n\n/**\n * This is a temporary way of doing the search without the previews\n * until we have it moved to the server side\n *\n * @param document - The document to search\n * @param searchTerm - The search term\n * @returns True if the document matches the search term, false otherwise\n */\nexport function searchDocumentRelease(\n document: SanityDocument & {\n publishedDocumentExists: boolean\n },\n searchTerm: string,\n) {\n // if there is no search term or the document has no title or name, return false\n if (!searchTerm || searchTerm.trim().length === 0 || (!document.title && !document.name)) {\n return false\n }\n\n const title = extractSearchableText(document.title)\n const name = extractSearchableText(document.name)\n\n const normalizedSearchTerm = searchTerm.toLowerCase().trim()\n const normalizedTitle = title.toLowerCase()\n const normalizedName = name.toLowerCase()\n\n const hasTitle = normalizedTitle.trim().length > 0\n const hasName = normalizedName.trim().length > 0\n\n // Create a combined searchable text from both title and name\n const combinedText = `${normalizedTitle} ${normalizedName}`\n\n // Split search term into words for more flexible matching\n const searchWords = normalizedSearchTerm.split(/\\s+/).filter((word) => word.length > 0)\n\n // Check if all search words are found in either title, name, or combined text\n const allWordsMatch = searchWords.every(\n (word) =>\n (hasTitle && normalizedTitle.includes(word)) ||\n (hasName && normalizedName.includes(word)) ||\n combinedText.includes(word),\n )\n\n // Also check if the document name/title is contained within the search term\n const documentInSearchTerm =\n (hasName && normalizedSearchTerm.includes(normalizedName)) ||\n (hasTitle && normalizedSearchTerm.includes(normalizedTitle))\n\n return allWordsMatch || documentInSearchTerm\n}\n","import {type ReleaseDocument, type SanityDocument} from '@sanity/client'\nimport {AddIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Card, Container, Flex, Stack, Text, useToast} from '@sanity/ui'\nimport {type CSSProperties, useCallback, useEffect, useMemo, useState} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {getVersionId} from '../../../util/draftUtils'\nimport {getDocumentVariantType} from '../../../util/getDocumentVariantType'\nimport {isCardinalityOneRelease} from '../../../util/releaseUtils'\nimport {AddedVersion} from '../../__telemetry__/releases.telemetry'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {Table} from '../components/Table/Table'\nimport {AddDocumentSearch, type AddedDocument} from './AddDocumentSearch'\nimport {ReleaseDocumentFilterTabs} from './components/ReleaseDocumentFilterTabs'\nimport {DocumentActions} from './documentTable/DocumentActions'\nimport {getDocumentTableColumnDefs} from './documentTable/DocumentTableColumnDefs'\nimport {searchDocumentRelease} from './documentTable/searchDocumentRelease'\nimport {type DocumentFilterType, documentMatchesFilter} from './releaseDocumentActions'\nimport {type DocumentInRelease} from './useBundleDocuments'\n\nexport type DocumentInReleaseDetail = DocumentInRelease & {\n // TODO: Get this value from the document, it can be calculated by checking if there is a corresponding document with no version attached\n isAdded?: boolean\n}\nexport type BundleDocumentRow = DocumentInReleaseDetail\n\nexport interface ReleaseSummaryProps {\n documents: DocumentInRelease[]\n release: ReleaseDocument\n isLoading?: boolean\n}\n\nconst FULL_HEIGHT_STYLE: CSSProperties = {height: '100%'}\n\nconst SCROLL_CONTAINER_STYLE: CSSProperties = {\n overflow: 'auto',\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n}\n\nconst FIT_CONTENT_STYLE: CSSProperties = {minWidth: 'fit-content', height: '100%'}\n\nconst isBundleDocumentRow = (\n maybeBundleDocumentRow: unknown,\n): maybeBundleDocumentRow is BundleDocumentRow =>\n !!maybeBundleDocumentRow &&\n typeof maybeBundleDocumentRow === 'object' &&\n 'memoKey' in maybeBundleDocumentRow &&\n 'document' in maybeBundleDocumentRow &&\n 'validation' in maybeBundleDocumentRow\n\nexport function ReleaseSummary(props: ReleaseSummaryProps) {\n const {documents, isLoading = false, release} = props\n const [scrollContainerRef, setScrollContainerRef] = useState<HTMLDivElement | null>(null)\n const toast = useToast()\n const {createVersion} = useReleaseOperations()\n const telemetry = useTelemetry()\n\n const [openAddDocumentDialog, setAddDocumentDialog] = useState(false)\n const [pendingAddedDocument, setPendingAddedDocument] = useState<BundleDocumentRow[]>([])\n const [activeFilter, setActiveFilter] = useState<DocumentFilterType>('all')\n\n const {t} = useTranslation(releasesLocaleNamespace)\n\n const releaseId = getReleaseIdFromReleaseDocumentId(release._id)\n\n const renderRowActions = useCallback(\n (rowProps: {datum: BundleDocumentRow | unknown}) => {\n if (release.state !== 'active') return null\n if (!isBundleDocumentRow(rowProps.datum)) return null\n if (rowProps.datum.isPending) return null\n\n return <DocumentActions document={rowProps.datum} releaseTitle={release.metadata.title} />\n },\n [release.metadata.title, release.state],\n )\n\n const documentTableColumnDefs = useMemo(\n () => getDocumentTableColumnDefs(release._id, release.state, t),\n [release._id, release.state, t],\n )\n\n const handleAddDocumentClick = useCallback(() => setAddDocumentDialog(true), [])\n\n const filterRows = useCallback(\n (data: DocumentInRelease[], searchTerm: string) => {\n // this is a temporary way of doing the search without the previews\n // until we have it moved to the server side\n return data.filter((doc) => {\n const matchesSearch = searchTerm ? searchDocumentRelease(doc.document, searchTerm) : true\n return matchesSearch && documentMatchesFilter(doc, activeFilter)\n })\n },\n [activeFilter],\n )\n\n const closeAddDialog = useCallback(\n async (documentToAdd?: AddedDocument) => {\n setAddDocumentDialog(false)\n if (!documentToAdd) return\n\n const versionDocumentId = getVersionId(documentToAdd._id, releaseId)\n const pendingAddedDocumentId = `${versionDocumentId}-pending`\n\n const pendingDocumentRow: DocumentInReleaseDetail = {\n memoKey: versionDocumentId,\n validation: {\n isValidating: false,\n validation: [],\n hasError: false,\n },\n document: {\n ...(documentToAdd as SanityDocument),\n _id: pendingAddedDocumentId,\n publishedDocumentExists: false,\n },\n isPending: true,\n }\n\n setPendingAddedDocument((prev) => [...prev, pendingDocumentRow])\n\n try {\n await createVersion(releaseId, documentToAdd._id)\n\n const origin = getDocumentVariantType(documentToAdd._id)\n\n telemetry.log(AddedVersion, {\n documentOrigin: origin,\n })\n } catch (error) {\n setPendingAddedDocument((prev) =>\n prev.filter(({document}) => document._id !== pendingAddedDocumentId),\n )\n\n toast.push({\n id: `add-version-to-release-${versionDocumentId}`,\n closable: true,\n status: 'error',\n title: t('toast.create-version.error', {error: error.message}),\n })\n }\n },\n [createVersion, releaseId, t, telemetry, toast],\n )\n\n useEffect(() => {\n const documentsNoLongerPending: string[] = []\n\n pendingAddedDocument?.forEach((pendingDocument) => {\n // once pending added document has been received by bundle store\n if (\n documents.find(({document}) => `${document._id}-pending` === pendingDocument.document._id)\n ) {\n documentsNoLongerPending.push(pendingDocument.document._id)\n }\n })\n\n if (documentsNoLongerPending.length)\n // cleanup all resolved added documents\n // oxlint-disable-next-line react/react-compiler\n setPendingAddedDocument((prev) =>\n prev.filter(({document}) => !documentsNoLongerPending.includes(document._id)),\n )\n }, [documents, pendingAddedDocument, t, toast])\n\n const tableData = useMemo(\n () => (pendingAddedDocument.length ? [...documents, ...pendingAddedDocument] : documents),\n [documents, pendingAddedDocument],\n )\n\n const isCardinalityOne = isCardinalityOneRelease(release)\n const hasNoDocuments = !isLoading && documents.length === 0\n\n if (isCardinalityOne && hasNoDocuments) {\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n padding={5}\n style={FULL_HEIGHT_STYLE}\n data-testid=\"cardinality-one-empty-state\"\n >\n <Stack space={3} style={{textAlign: 'center', maxWidth: '300px'}}>\n <Text size={1} weight=\"semibold\">\n {t('summary.no-documents-cardinality-one.title')}\n </Text>\n <Text size={1} muted>\n {t('summary.no-documents-cardinality-one.description')}\n </Text>\n </Stack>\n </Flex>\n )\n }\n\n return (\n <Flex direction=\"column\" style={FULL_HEIGHT_STYLE}>\n <ReleaseDocumentFilterTabs\n documents={tableData}\n releaseState={release.state}\n isLoading={isLoading}\n activeFilter={activeFilter}\n onFilterChange={setActiveFilter}\n />\n <Card\n ref={setScrollContainerRef}\n data-testid=\"document-table-card\"\n flex={1}\n borderTop\n style={SCROLL_CONTAINER_STYLE}\n >\n <div style={FIT_CONTENT_STYLE}>\n <Table<DocumentInReleaseDetail>\n loading={isLoading}\n data={tableData}\n emptyState={t('summary.no-documents')}\n // oxlint-disable-next-line @sanity/i18n/no-attribute-string-literals\n rowId=\"document._id\"\n columnDefs={documentTableColumnDefs}\n rowActions={renderRowActions}\n searchFilter={filterRows}\n scrollContainerRef={scrollContainerRef}\n defaultSort={{column: 'search', direction: 'asc'}}\n />\n </div>\n </Card>\n {release.state === 'active' && (\n <Container width={3}>\n <Card padding={3}>\n <Button\n icon={AddIcon}\n disabled={isLoading}\n mode=\"bleed\"\n onClick={handleAddDocumentClick}\n text={t('action.add-document')}\n />\n </Card>\n </Container>\n )}\n <AddDocumentSearch\n open={openAddDocumentDialog}\n onClose={closeAddDialog}\n releaseId={releaseId}\n idsInRelease={documents.map(({document}) => document._id)}\n />\n </Flex>\n )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Stack, Text} from '@sanity/ui'\nimport {motion} from 'motion/react'\nimport {useEffect, useMemo, useState} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {LoadingBlock} from '../../../components'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {useArchivedReleases} from '../../store/useArchivedReleases'\nimport {type ReleasesRouterState} from '../../types/router'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {RELEASE_NOT_FOUND_SEARCH_PARAM_KEY} from '../overview/queryParamUtils'\nimport {useReleaseEvents} from './events/useReleaseEvents'\nimport {ReleaseDashboardActivityPanel} from './ReleaseDashboardActivityPanel'\nimport {ReleaseDashboardDetails} from './ReleaseDashboardDetails'\nimport {ReleaseDashboardFooter} from './ReleaseDashboardFooter'\nimport {ReleaseDashboardHeader} from './ReleaseDashboardHeader'\nimport {ReleaseSummary} from './ReleaseSummary'\nimport {useReleaseDocuments} from './useReleaseDocuments'\n\nexport type ReleaseInspector = 'activity'\nconst MotionCard = motion.create(Card)\n\nexport function ReleaseDetail() {\n const router = useRouter()\n const [inspector, setInspector] = useState<ReleaseInspector | undefined>(undefined)\n const {t} = useTranslation(releasesLocaleNamespace)\n const {releaseId: releaseIdRaw}: ReleasesRouterState = router.state\n const releaseId = decodeURIComponent(releaseIdRaw || '')\n const {data, loading} = useActiveReleases()\n const {data: archivedReleases} = useArchivedReleases()\n\n const {\n loading: documentsLoading,\n results,\n error: bundleDocumentsError,\n } = useReleaseDocuments(releaseId)\n const releaseEvents = useReleaseEvents(releaseId)\n\n const releaseInDetail = data\n .concat(archivedReleases)\n .find((candidate) => getReleaseIdFromReleaseDocumentId(candidate._id) === releaseId)\n\n const isNotFound = !loading && !releaseInDetail\n\n useEffect(() => {\n if (isNotFound) {\n router.navigate({\n _searchParams: [[RELEASE_NOT_FOUND_SEARCH_PARAM_KEY, 'true']],\n })\n }\n }, [isNotFound, router])\n\n const detailContent = useMemo(() => {\n if (bundleDocumentsError) {\n return (\n <Box padding={3}>\n <MotionCard\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n tone=\"critical\"\n padding={4}\n radius={4}\n >\n <Flex gap={3}>\n <Text size={1}>\n <ErrorOutlineIcon />\n </Text>\n <Stack space={4}>\n <Text size={1} weight=\"semibold\">\n {t('loading-release-documents.error.title')}\n </Text>\n <Text size={1}>{t('loading-release-documents.error.description')}</Text>\n </Stack>\n </Flex>\n </MotionCard>\n </Box>\n )\n }\n if (!releaseInDetail) return null\n\n return (\n <ReleaseSummary isLoading={documentsLoading} documents={results} release={releaseInDetail} />\n )\n }, [bundleDocumentsError, documentsLoading, releaseInDetail, results, t])\n\n if (loading) {\n return (\n <LoadingBlock\n title={t('loading-release')}\n fill\n data-testid=\"release-documents-table-loader\"\n />\n )\n }\n\n if (releaseInDetail) {\n return (\n <Flex direction=\"column\" flex={1} height=\"fill\" overflow=\"hidden\">\n <Card flex=\"none\" padding={3}>\n <ReleaseDashboardHeader\n release={releaseInDetail}\n inspector={inspector}\n setInspector={setInspector}\n />\n </Card>\n\n <Flex flex={1}>\n <Flex direction=\"column\" flex={1} height=\"fill\">\n <Card flex={1} overflow=\"auto\">\n <ReleaseDashboardDetails release={releaseInDetail} documents={results} />\n {detailContent}\n </Card>\n\n <ReleaseDashboardFooter\n documents={results}\n release={releaseInDetail}\n events={releaseEvents.events}\n />\n </Flex>\n\n <ReleaseDashboardActivityPanel\n events={releaseEvents}\n release={releaseInDetail}\n show={inspector === 'activity'}\n />\n </Flex>\n </Flex>\n )\n }\n\n return null\n}\n","import {useEffect} from 'react'\n\nimport {useReleasesMetadataProvider} from '../contexts/ReleasesMetadataProvider'\n\nexport interface ReleasesMetadata {\n /**\n * The number of documents with the release version as a prefix\n */\n documentCount: number\n /**\n * The last time a document in the release was edited\n */\n updatedAt: string | null\n}\n\nexport const useReleasesMetadata = (releaseIds: string[]) => {\n const {\n addReleaseIdsToListener: addBundleIdsToListener,\n removeReleaseIdsFromListener: removeBundleIdsFromListener,\n state,\n } = useReleasesMetadataProvider()\n\n useEffect(() => {\n if (releaseIds.length) addBundleIdsToListener([...new Set(releaseIds)])\n\n return () => removeBundleIdsFromListener([...new Set(releaseIds)])\n }, [addBundleIdsToListener, releaseIds, removeBundleIdsFromListener])\n\n const {data, loading} = state\n\n let responseData = null\n\n if (data) {\n const hasUpdatedMetadata =\n !responseData || Object.entries(responseData).some(([key, value]) => value !== data[key])\n\n if (hasUpdatedMetadata) {\n responseData = Object.fromEntries(releaseIds.map((releaseId) => [releaseId, data[releaseId]]))\n }\n }\n\n return {\n error: state.error,\n // loading is only for initial load\n // changing listened to release IDs will not cause a re-load\n loading,\n data: responseData,\n }\n}\n","import {FilterIcon} from '@sanity/icons'\n// oxlint-disable-next-line no-restricted-imports\nimport {Button, useClickOutsideEvent} from '@sanity/ui'\nimport {type ReactNode, useRef, useState} from 'react'\n\nimport {Dialog} from '../../../../ui-components/dialog/Dialog'\nimport {Popover} from '../../../../ui-components/popover/Popover'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {useTranslation} from '../../../i18n/hooks/useTranslation'\nimport {releasesLocaleNamespace} from '../../i18n'\n\nexport function CalendarPopover({content, asDialog}: {content: ReactNode; asDialog?: boolean}) {\n const buttonRef = useRef<HTMLButtonElement | null>(null)\n const popoverRef = useRef<HTMLDivElement | null>(null)\n const [isCalendarOpen, setIsCalendarOpen] = useState(false)\n const {t} = useTranslation(releasesLocaleNamespace)\n\n useClickOutsideEvent(\n () => {\n if (!asDialog) setIsCalendarOpen(false)\n },\n () => [buttonRef.current, popoverRef.current],\n )\n\n const triggerButton = (\n <Tooltip content={t('overview.calendar.tooltip')}>\n <Button\n name=\"calendar\"\n data-as=\"a\"\n icon={FilterIcon}\n mode=\"bleed\"\n padding={2}\n radius=\"full\"\n selected={isCalendarOpen}\n onClick={() => setIsCalendarOpen((prev) => !prev)}\n ref={buttonRef}\n space={2}\n />\n </Tooltip>\n )\n\n if (asDialog) {\n return (\n <>\n {triggerButton}\n {isCalendarOpen && (\n <Dialog\n id=\"calendar-filter-dialog\"\n header={t('overview.calendar.tooltip')}\n onClose={() => setIsCalendarOpen(false)}\n onClickOutside={() => setIsCalendarOpen(false)}\n width={1}\n padding={false}\n >\n {content}\n </Dialog>\n )}\n </>\n )\n }\n\n return (\n <Popover content={content} placement=\"bottom\" open={isCalendarOpen} ref={popoverRef}>\n {triggerButton}\n </Popover>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {CalendarIcon, ChevronDownIcon} from '@sanity/icons'\nimport {useTelemetry} from '@sanity/telemetry/react'\nimport {Flex, Menu, Text} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {MenuButton} from '../../../../ui-components/menuButton'\nimport {MenuItem} from '../../../../ui-components/menuItem'\nimport {useTranslation} from '../../../i18n'\nimport {isCardinalityOneRelease} from '../../../util/releaseUtils'\nimport {\n NavigatedToReleasesOverview,\n NavigatedToScheduledDrafts,\n} from '../../__telemetry__/navigation.telemetry'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {type CardinalityView} from './queryParamUtils'\n\ninterface CardinalityViewPickerProps {\n cardinalityView: CardinalityView\n loading: boolean\n isScheduledDraftsEnabled: boolean\n isDraftModelEnabled: boolean\n isReleasesEnabled: boolean\n allReleases: ReleaseDocument[]\n onCardinalityViewChange: (view: CardinalityView) => () => void\n}\n\nconst getPickerView = ({\n hasSingleDocRelease,\n isScheduledDraftsEnabled,\n isReleasesEnabled,\n cardinalityView,\n isDraftModelEnabled,\n}: {\n hasSingleDocRelease: boolean\n isScheduledDraftsEnabled: boolean\n isReleasesEnabled: boolean\n cardinalityView: CardinalityView\n isDraftModelEnabled: boolean\n}): 'contentReleases' | 'singleDocReleases' | 'both' => {\n if (isReleasesEnabled) {\n if (hasSingleDocRelease || (isScheduledDraftsEnabled && isDraftModelEnabled)) return 'both'\n return cardinalityView === 'drafts' ? 'both' : 'contentReleases'\n }\n\n return cardinalityView === 'releases' ? 'both' : 'singleDocReleases'\n}\n\nexport const CardinalityViewPicker = ({\n cardinalityView,\n loading,\n isScheduledDraftsEnabled,\n isReleasesEnabled,\n isDraftModelEnabled,\n allReleases,\n onCardinalityViewChange,\n}: CardinalityViewPickerProps) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const telemetry = useTelemetry()\n\n const hasSingleDocRelease = useMemo(\n () => allReleases.some(isCardinalityOneRelease),\n [allReleases],\n )\n\n const pickerView = getPickerView({\n hasSingleDocRelease,\n isScheduledDraftsEnabled,\n isReleasesEnabled,\n cardinalityView,\n isDraftModelEnabled,\n })\n\n const handleViewChange = useCallback(\n (view: CardinalityView) => () => {\n const telemetryEvent =\n view === 'releases' ? NavigatedToReleasesOverview : NavigatedToScheduledDrafts\n telemetry.log(telemetryEvent, {source: 'view-picker'})\n\n onCardinalityViewChange(view)()\n },\n [telemetry, onCardinalityViewChange],\n )\n\n // If only one is enabled, show the label\n if (pickerView === 'contentReleases' || pickerView === 'singleDocReleases') {\n return (\n <Flex align=\"center\" gap={2}>\n <CalendarIcon />\n <Text size={1} weight=\"semibold\">\n {pickerView === 'contentReleases' ? t('action.releases') : t('action.drafts')}\n </Text>\n </Flex>\n )\n }\n\n // If both are enabled, show the menu button\n return (\n <MenuButton\n id=\"cardinality-view-menu\"\n button={\n <Button\n mode=\"bleed\"\n paddingY={2}\n text={cardinalityView === 'releases' ? t('action.releases') : t('action.drafts')}\n icon={CalendarIcon}\n iconRight={ChevronDownIcon}\n disabled={loading}\n style={{fontWeight: 600}}\n />\n }\n menu={\n <Menu>\n <MenuItem\n text={t('action.releases')}\n selected={cardinalityView === 'releases'}\n onClick={handleViewChange('releases')}\n />\n <MenuItem\n text={t('action.drafts')}\n selected={cardinalityView === 'drafts'}\n onClick={handleViewChange('drafts')}\n />\n </Menu>\n }\n />\n )\n}\n","import {type ReleaseDocument, type ScheduleReleaseAction} from '@sanity/client'\nimport {Stack, Text, useToast} from '@sanity/ui'\nimport {isPast} from 'date-fns/isPast'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {Dialog} from '../../../../ui-components'\nimport {useClient} from '../../../hooks'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {RELEASES_STUDIO_CLIENT_OPTIONS} from '../../util/releasesClient'\n\ninterface ConfirmScheduledDraftsDialogProps {\n activeScheduledDrafts: ReleaseDocument[]\n onClose: () => void\n}\n\n/**\n * Batches all schedule actions into a single server action\n */\nfunction useScheduleActiveDrafts() {\n const client = useClient(RELEASES_STUDIO_CLIENT_OPTIONS)\n\n const scheduleActiveDrafts = useCallback(\n async (releases: ReleaseDocument[]) => {\n const scheduleActions: ScheduleReleaseAction[] = releases.flatMap((release) => {\n if (!release.metadata.intendedPublishAt) return []\n\n return [\n {\n actionType: 'sanity.action.release.schedule',\n releaseId: getReleaseIdFromReleaseDocumentId(release._id),\n publishAt: new Date(release.metadata.intendedPublishAt).toISOString(),\n },\n ]\n })\n\n await client.action(scheduleActions)\n },\n [client],\n )\n\n return {scheduleActiveDrafts}\n}\n\nexport function ConfirmScheduledDraftsDialog({\n activeScheduledDrafts,\n onClose,\n}: ConfirmScheduledDraftsDialogProps) {\n const {t} = useTranslation(releasesLocaleNamespace)\n const toast = useToast()\n const {scheduleActiveDrafts} = useScheduleActiveDrafts()\n const [isScheduling, setIsScheduling] = useState(false)\n\n const hasPastDates = useMemo(\n () =>\n activeScheduledDrafts.some(\n (release) =>\n release.metadata.intendedPublishAt &&\n isPast(new Date(release.metadata.intendedPublishAt)),\n ),\n [activeScheduledDrafts],\n )\n\n const handleConfirmSchedules = useCallback(async () => {\n setIsScheduling(true)\n\n try {\n await scheduleActiveDrafts(activeScheduledDrafts)\n onClose()\n } catch (error) {\n toast.push({\n status: 'error',\n title: t('toast.confirm-active-scheduled-drafts.error', {error: error.message}),\n })\n }\n setIsScheduling(false)\n }, [activeScheduledDrafts, scheduleActiveDrafts, onClose, toast, t])\n\n return (\n <Dialog\n id=\"confirm-active-scheduled-drafts-dialog\"\n header={t('confirm-active-scheduled-drafts-dialog.title')}\n onClose={onClose}\n width={0}\n footer={{\n confirmButton: {\n text: t('confirm-active-scheduled-drafts-dialog.confirm-button'),\n tone: 'primary',\n onClick: handleConfirmSchedules,\n loading: isScheduling,\n disabled: isScheduling,\n },\n }}\n >\n <Stack space={3}>\n <Text size={1} muted>\n {t('confirm-active-scheduled-drafts-dialog.description')}\n </Text>\n {hasPastDates && (\n <Text size={1} muted>\n {t('confirm-active-scheduled-drafts-dialog.past-dates-warning')}\n </Text>\n )}\n </Stack>\n </Dialog>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {useCallback, useMemo, useState} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {Translate, useTranslation} from '../../../i18n'\nimport {isCardinalityOneRelease} from '../../../util/releaseUtils'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {ConfirmScheduledDraftsDialog} from './ConfirmScheduledDraftsDialog'\nimport {type Mode} from './queryParamUtils'\n\ninterface ConfirmActiveScheduledDraftsBannerProps {\n releases: ReleaseDocument[]\n releaseGroupMode: Mode\n hasDateFilter: boolean\n onNavigateToPaused: () => void\n}\n\n/**\n * Active drafts are those with state='active' and cardinality='one'\n */\nexport function ConfirmActiveScheduledDraftsBanner({\n releases,\n releaseGroupMode,\n hasDateFilter,\n onNavigateToPaused,\n}: ConfirmActiveScheduledDraftsBannerProps) {\n const {t} = useTranslation(releasesLocaleNamespace)\n const [isDialogOpen, setIsDialogOpen] = useState(false)\n\n const activeScheduledDrafts = useMemo(\n () =>\n releases.filter((release) => release.state === 'active' && isCardinalityOneRelease(release)),\n [releases],\n )\n\n const shouldOpenDialog = releaseGroupMode === 'paused' && !hasDateFilter\n\n const handleCloseDialog = useCallback(() => {\n setIsDialogOpen(false)\n }, [])\n\n const handleClick = useCallback(\n () => (shouldOpenDialog ? setIsDialogOpen(true) : onNavigateToPaused()),\n [shouldOpenDialog, onNavigateToPaused],\n )\n\n if (activeScheduledDrafts.length === 0) {\n return null\n }\n\n const buttonText = shouldOpenDialog\n ? t('banner.confirm-active-scheduled-drafts.button-paused')\n : t('banner.confirm-active-scheduled-drafts.button')\n\n return (\n <>\n <Box flex=\"none\" padding={1} marginBottom={4}>\n <Card radius={3} paddingX={2} paddingY={2} tone=\"caution\">\n <Flex align=\"center\" gap={3} paddingX={2}>\n <Text size={0}>\n <WarningOutlineIcon />\n </Text>\n <Flex align=\"center\" flex={1} gap={2} paddingY={2}>\n <Text size={1} weight=\"medium\">\n <Translate\n t={t}\n i18nKey=\"banner.confirm-active-scheduled-drafts\"\n values={{count: activeScheduledDrafts.length}}\n />\n </Text>\n </Flex>\n <Flex flex=\"none\">\n <Button text={buttonText} mode=\"bleed\" tone=\"caution\" onClick={handleClick} />\n </Flex>\n </Flex>\n </Card>\n </Box>\n\n {isDialogOpen && (\n <ConfirmScheduledDraftsDialog\n activeScheduledDrafts={activeScheduledDrafts}\n onClose={handleCloseDialog}\n />\n )}\n </>\n )\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {isCardinalityOneRelease, type ReleaseDocument} from '../../..'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\n\ninterface DraftsDisabledBannerProps {\n isDraftModelEnabled: boolean\n isScheduledDraftsEnabled: boolean\n allReleases: ReleaseDocument[]\n}\n\n/**\n * Banner that shows when viewing drafts but either drafts mode or scheduled drafts are disabled\n */\nexport const DraftsDisabledBanner = ({\n isDraftModelEnabled,\n isScheduledDraftsEnabled,\n allReleases,\n}: DraftsDisabledBannerProps) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const hasSingleDocRelease = useMemo(\n () => allReleases.some(isCardinalityOneRelease),\n [allReleases],\n )\n const shouldShowBanner =\n (!isDraftModelEnabled || !isScheduledDraftsEnabled) && hasSingleDocRelease\n\n if (!shouldShowBanner) return null\n\n const getBannerMessage = () =>\n isScheduledDraftsEnabled\n ? t('banner.drafts-mode-disabled')\n : t('banner.scheduled-drafts-disabled')\n\n return (\n <Box padding={1} marginBottom={4}>\n <Card radius={3} paddingX={2} paddingY={2} tone=\"caution\">\n <Flex align=\"center\" gap={3} paddingX={2}>\n <Text size={0}>\n <WarningOutlineIcon />\n </Text>\n <Flex align=\"center\" flex={1} gap={2} paddingY={2}>\n <Text size={1} weight=\"medium\">\n {getBannerMessage()}\n </Text>\n </Flex>\n </Flex>\n </Card>\n </Box>\n )\n}\n","import {endOfDay} from 'date-fns/endOfDay'\nimport {startOfDay} from 'date-fns/startOfDay'\nimport {useCallback} from 'react'\n\nimport {useTimeZone} from '../../../hooks/useTimeZone'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\n\nexport const useTimezoneAdjustedDateTimeRange = (): ((date: Date) => [Date, Date]) => {\n const {zoneDateToUtc} = useTimeZone(CONTENT_RELEASES_TIME_ZONE_SCOPE)\n\n return useCallback(\n (date: Date) => [startOfDay(date), endOfDay(date)].map(zoneDateToUtc) as [Date, Date],\n [zoneDateToUtc],\n )\n}\n","import {CloseIcon} from '@sanity/icons'\nimport {format} from 'date-fns/format'\nimport {AnimatePresence, motion} from 'motion/react'\nimport {useMemo, useState} from 'react'\n\nimport {Button} from '../../../../ui-components'\nimport {\n CalendarDay,\n type CalendarDayProps,\n} from '../../../components/inputs/DateFilters/calendar/CalendarDay'\nimport {type CalendarProps} from '../../../components/inputs/DateFilters/calendar/CalendarFilter'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {shouldShowReleaseInView} from '../../util/util'\nimport {type CardinalityView} from './queryParamUtils'\nimport {useTimezoneAdjustedDateTimeRange} from './useTimezoneAdjustedDateTimeRange'\n\nconst ReleaseCalendarFilterDayWithCardinality = (\n props: CalendarDayProps & {\n cardinalityView: CardinalityView\n },\n): React.ReactNode => {\n const {data: allReleases} = useActiveReleases()\n const getTimezoneAdjustedDateTimeRange = useTimezoneAdjustedDateTimeRange()\n\n const {date, cardinalityView, ...calendarDayProps} = props\n\n const [startOfDayForTimeZone, endOfDayForTimeZone] = getTimezoneAdjustedDateTimeRange(date)\n\n const releases = allReleases?.filter(shouldShowReleaseInView(cardinalityView))\n\n const dayHasReleases = releases?.some((release) => {\n const releasePublishAt = release.publishAt || release.metadata.intendedPublishAt\n if (!releasePublishAt) return false\n\n const publishDateUTC = new Date(releasePublishAt)\n\n return (\n release.metadata.releaseType === 'scheduled' &&\n publishDateUTC >= startOfDayForTimeZone &&\n publishDateUTC <= endOfDayForTimeZone\n )\n })\n\n return (\n <CalendarDay\n {...calendarDayProps}\n date={date}\n dateStyles={dayHasReleases ? {fontWeight: 700} : {}}\n />\n )\n}\n\nexport const createReleaseCalendarFilterDay = (\n cardinalityView: CardinalityView,\n): CalendarProps['renderCalendarDay'] => {\n const ReleaseCalendarFilterDayComponent = (props: CalendarDayProps) => (\n <ReleaseCalendarFilterDayWithCardinality {...props} cardinalityView={cardinalityView} />\n )\n ReleaseCalendarFilterDayComponent.displayName = 'ReleaseCalendarFilterDayComponent'\n return ReleaseCalendarFilterDayComponent\n}\n\nconst MotionButton = motion.create(Button)\n\nexport const DateFilterButton = ({\n filterDate,\n onClear,\n}: {\n filterDate: Date\n onClear: () => void\n}) => {\n const [isExiting, setIsExiting] = useState(false)\n\n const handleOnExitComplete = useMemo(\n () => () => {\n setIsExiting(false)\n onClear()\n },\n [onClear],\n )\n\n if (!filterDate) return null\n\n return (\n <AnimatePresence onExitComplete={handleOnExitComplete}>\n {!isExiting && (\n <MotionButton\n data-testid=\"selected-date-filter\"\n initial={{width: 0, opacity: 0}}\n animate={{width: 'auto', opacity: 1}}\n exit={{width: 0, opacity: 0}}\n transition={{duration: 0.35, ease: 'easeInOut'}}\n iconRight={CloseIcon}\n mode=\"bleed\"\n onClick={() => setIsExiting(true)}\n selected\n text={format(filterDate, 'PPP')}\n />\n )}\n </AnimatePresence>\n )\n}\n","import {type ReleaseDocument} from '@sanity/client'\n\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\nimport {ReleaseMenuButton} from '../components/ReleaseMenuButton/ReleaseMenuButton'\nimport {useReleaseDocuments} from '../detail/useReleaseDocuments'\n\nexport const ReleaseMenuButtonWrapper = ({\n release,\n documentsCount,\n}: {\n release: ReleaseDocument\n documentsCount: number\n}) => {\n const {results: documents} = useReleaseDocuments(getReleaseIdFromReleaseDocumentId(release._id))\n\n return (\n <ReleaseMenuButton release={release} documentsCount={documentsCount} documents={documents} />\n )\n}\n","import {CloseIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {releasesLocaleNamespace} from '../../i18n'\n\ninterface ReleaseNotFoundBannerProps {\n onDismiss: () => void\n}\n\nexport function ReleaseNotFoundBanner({onDismiss}: ReleaseNotFoundBannerProps) {\n const {t} = useTranslation(releasesLocaleNamespace)\n\n return (\n <Box flex=\"none\" padding={1} marginBottom={4}>\n <Card radius={3} paddingX={2} paddingY={2} tone=\"caution\">\n <Flex align=\"center\" gap={3} paddingX={2}>\n <Text size={0}>\n <WarningOutlineIcon />\n </Text>\n <Box flex={1} paddingY={2}>\n <Text size={1} weight=\"medium\">\n {t('banner.release-not-found')}\n </Text>\n </Box>\n <Button\n icon={CloseIcon}\n mode=\"bleed\"\n onClick={onDismiss}\n tooltipProps={{content: t('banner.release-not-found.dismiss')}}\n />\n </Flex>\n </Card>\n </Box>\n )\n}\n","export const ReleaseIllustration = () => {\n return (\n <svg\n data-testid=\"release-illustration\"\n width=\"248\"\n height=\"201\"\n viewBox=\"0 0 248 201\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity=\"0.2\"\n d=\"M175.4 29.8262V98.1738C175.4 103.823 181.346 107.498 186.399 104.971L222.399 86.9714C224.974 85.684 226.6 83.0524 226.6 80.1738V11.8262C226.6 6.17654 220.654 2.50197 215.601 5.02859L179.601 23.0286C177.026 24.316 175.4 26.9476 175.4 29.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M183.4 33.8262V102.174C183.4 107.823 189.346 111.498 194.399 108.971L230.399 90.9714C232.974 89.684 234.6 87.0524 234.6 84.1738V15.8262C234.6 10.1765 228.654 6.50197 223.601 9.02859L187.601 27.0286C185.026 28.316 183.4 30.9476 183.4 33.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M195.4 39.8262V108.174C195.4 113.823 201.346 117.498 206.399 114.971L242.399 96.9714C244.974 95.684 246.6 93.0524 246.6 90.1738V21.8262C246.6 16.1765 240.654 12.502 235.601 15.0286L199.601 33.0286C197.026 34.316 195.4 36.9476 195.4 39.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.6\"\n d=\"M109.4 50.8262V119.174C109.4 124.823 115.346 128.498 120.399 125.971L156.399 107.971C158.974 106.684 160.6 104.052 160.6 101.174V32.8262C160.6 27.1765 154.654 23.502 149.601 26.0286L113.601 44.0286C111.026 45.316 109.4 47.9476 109.4 50.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.9\"\n d=\"M118 123.174V54.8262C118 52.1748 119.498 49.751 121.87 48.5653L157.87 30.5652C162.524 28.2381 168 31.6226 168 36.8262V105.174C168 107.825 166.502 110.249 164.131 111.435L128.13 129.435C123.476 131.762 118 128.377 118 123.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M121.4 56.8262V125.174C121.4 130.823 127.346 134.498 132.399 131.971L168.399 113.971C170.974 112.684 172.6 110.052 172.6 107.174V38.8262C172.6 33.1765 166.654 29.502 161.601 32.0286L125.601 50.0286C123.026 51.316 121.4 53.9476 121.4 56.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M125.4 58.8262V127.174C125.4 132.823 131.346 136.498 136.399 133.971L172.399 115.971C174.974 114.684 176.6 112.052 176.6 109.174V40.8262C176.6 35.1765 170.654 31.502 165.601 34.0286L129.601 52.0286C127.026 53.316 125.4 55.9476 125.4 58.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M137.4 64.8262V133.174C137.4 138.823 143.346 142.498 148.399 139.971L184.399 121.971C186.974 120.684 188.6 118.052 188.6 115.174V46.8262C188.6 41.1765 182.654 37.502 177.601 40.0286L141.601 58.0286C139.026 59.316 137.4 61.9476 137.4 64.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M145.4 68.8262V137.174C145.4 142.823 151.346 146.498 156.399 143.971L192.399 125.971C194.974 124.684 196.6 122.052 196.6 119.174V50.8262C196.6 45.1765 190.654 41.502 185.601 44.0286L149.601 62.0286C147.026 63.316 145.4 65.9476 145.4 68.8262Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.6\"\n d=\"M1.4 104.826V173.174C1.4 178.823 7.34557 182.498 12.3988 179.971L48.3988 161.971C50.9736 160.684 52.6 158.052 52.6 155.174V86.8262C52.6 81.1765 46.6544 77.502 41.6012 80.0286L5.60117 98.0286C3.02641 99.316 1.4 101.948 1.4 104.826Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.6\"\n d=\"M56.6 146.174V77.8262C56.6 75.4021 57.9696 73.186 60.1378 72.1019L96.1378 54.1019C100.393 51.9742 105.4 55.0686 105.4 59.8262V128.174C105.4 130.598 104.03 132.814 101.862 133.898L65.8622 151.898C61.6068 154.026 56.6 150.931 56.6 146.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.8\"\n d=\"M60.6 148.174V79.8262C60.6 77.4021 61.9696 75.186 64.1378 74.1019L100.138 56.1019C104.393 53.9742 109.4 57.0686 109.4 61.8262V130.174C109.4 132.598 108.03 134.814 105.862 135.898L69.8622 153.898C65.6068 156.026 60.6 152.931 60.6 148.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.9\"\n d=\"M64 150.174V81.8262C64 79.1748 65.498 76.751 67.8695 75.5653L103.87 57.5652C108.524 55.2381 114 58.6226 114 63.8262V132.174C114 134.825 112.502 137.249 110.131 138.435L74.1305 156.435C69.4762 158.762 64 155.377 64 150.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M72.6 154.174V85.8262C72.6 83.4021 73.9696 81.186 76.1378 80.1019L112.138 62.1019C116.393 59.9742 121.4 63.0686 121.4 67.8262V136.174C121.4 138.598 120.03 140.814 117.862 141.898L81.8622 159.898C77.6068 162.026 72.6 158.931 72.6 154.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M76.6 156.174V87.8262C76.6 85.4021 77.9696 83.186 80.1378 82.1019L116.138 64.1019C120.393 61.9742 125.4 65.0686 125.4 69.8262V138.174C125.4 140.598 124.03 142.814 121.862 143.898L85.8622 161.898C81.6068 164.026 76.6 160.931 76.6 156.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M84.6 160.174V91.8262C84.6 89.4021 85.9696 87.186 88.1378 86.1019L124.138 68.1019C128.393 65.9742 133.4 69.0686 133.4 73.8262V142.174C133.4 144.598 132.03 146.814 129.862 147.898L93.8622 165.898C89.6068 168.026 84.6 164.931 84.6 160.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M88.6 162.174V93.8262C88.6 91.4021 89.9696 89.186 92.1378 88.1019L128.138 70.1019C132.393 67.9742 137.4 71.0686 137.4 75.8262V144.174C137.4 146.598 136.03 148.814 133.862 149.898L97.8622 167.898C93.6068 170.026 88.6 166.931 88.6 162.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M92.6 164.174V95.8262C92.6 93.4021 93.9696 91.186 96.1378 90.1019L132.138 72.1019C136.393 69.9742 141.4 73.0686 141.4 77.8262V146.174C141.4 148.598 140.03 150.814 137.862 151.898L101.862 169.898C97.6068 172.026 92.6 168.931 92.6 164.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M96.6 166.174V97.8262C96.6 95.4021 97.9696 93.186 100.138 92.1019L136.138 74.1019C140.393 71.9742 145.4 75.0686 145.4 79.8262V148.174C145.4 150.598 144.03 152.814 141.862 153.898L105.862 171.898C101.607 174.026 96.6 170.931 96.6 166.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M104.6 170.174V101.826C104.6 99.4021 105.97 97.186 108.138 96.1019L144.138 78.1019C148.393 75.9742 153.4 79.0686 153.4 83.8262V152.174C153.4 154.598 152.03 156.814 149.862 157.898L113.862 175.898C109.607 178.026 104.6 174.931 104.6 170.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.8\"\n d=\"M5.4 106.826V175.174C5.4 180.823 11.3456 184.498 16.3988 181.971L52.3988 163.971C54.9736 162.684 56.6 160.052 56.6 157.174V88.8262C56.6 83.1765 50.6544 79.502 45.6012 82.0286L9.60117 100.029C7.02641 101.316 5.4 103.948 5.4 106.826Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.9\"\n d=\"M10 177.174V108.826C10 106.175 11.498 103.751 13.8695 102.565L49.8695 84.5652C54.5238 82.2381 60 85.6226 60 90.8262V159.174C60 161.825 58.502 164.249 56.1305 165.435L20.1305 183.435C15.4762 185.762 10 182.377 10 177.174Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M13.4 110.826V179.174C13.4 184.823 19.3456 188.498 24.3988 185.971L60.3988 167.971C62.9736 166.684 64.6 164.052 64.6 161.174V92.8262C64.6 87.1765 58.6544 83.502 53.6012 86.0286L17.6012 104.029C15.0264 105.316 13.4 107.948 13.4 110.826Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M29.4 118.826V187.174C29.4 192.823 35.3456 196.498 40.3988 193.971L76.3988 175.971C78.9736 174.684 80.6 172.052 80.6 169.174V100.826C80.6 95.1765 74.6544 91.502 69.6012 94.0286L33.6012 112.029C31.0264 113.316 29.4 115.948 29.4 118.826Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n <path\n opacity=\"0.2\"\n d=\"M33.4 120.826V189.174C33.4 194.823 39.3456 198.498 44.3988 195.971L80.3988 177.971C82.9736 176.684 84.6 174.052 84.6 171.174V102.826C84.6 97.1765 78.6544 93.502 73.6012 96.0286L37.6012 114.029C35.0264 115.316 33.4 117.948 33.4 120.826Z\"\n fill=\"var(--card-muted-bg-color)\"\n stroke=\"var(--card-muted-fg-color)\"\n strokeWidth=\"1.2\"\n />\n </svg>\n )\n}\n","import {Flex, Inline, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {useReleasesUpsell} from '../../contexts/upsell/useReleasesUpsell'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {ReleaseIllustration} from '../resources/ReleaseIllustration'\n\ninterface ReleasesEmptyStateProps {\n createReleaseButton?: React.ReactNode\n}\n\nexport const ReleasesEmptyState = ({createReleaseButton}: ReleasesEmptyStateProps) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const {mode} = useReleasesUpsell()\n\n if (mode === 'upsell') {\n return null\n }\n\n return (\n <Flex direction=\"column\" flex={1} justify={'center'} align={'center'}>\n <Flex gap={3} direction=\"column\" align=\"center\" style={{maxWidth: '300px'}}>\n <ReleaseIllustration />\n <Text as=\"h1\" size={1} weight=\"semibold\" data-testid=\"no-releases-info-text\">\n {t('overview.title')}\n </Text>\n <Text size={1} muted style={{textAlign: 'center'}}>\n {t('overview.description')}\n </Text>\n <Inline space={2}>\n {createReleaseButton}\n <Button\n as=\"a\"\n href=\"https://www.sanity.io/docs/content-releases\"\n target=\"_blank\"\n mode=\"ghost\"\n text={t('overview.action.documentation')}\n />\n </Inline>\n </Flex>\n </Flex>\n )\n}\n","import {Spinner} from '@sanity/ui'\n\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {useReleaseDocuments} from '../../detail/useReleaseDocuments'\nimport {ValidationProgressIndicator} from '../../detail/ValidationProgressIndicator'\n\nexport function ReleaseColumnValidationLoading({releaseId}: {releaseId: string}) {\n const rId = getReleaseIdFromReleaseDocumentId(releaseId)\n const {results: documents, loading} = useReleaseDocuments(rId)\n\n return loading ? (\n <Spinner size={1} muted />\n ) : (\n <ValidationProgressIndicator layout=\"minimal\" documents={documents} />\n )\n}\n","import {Text} from '@sanity/ui'\n\ntype Props = {\n documentCount: number | undefined\n}\n\nexport const ReleaseDocumentsCounter = ({documentCount}: Props) => (\n <Text muted size={1}>\n {documentCount || '-'}\n </Text>\n)\n","import {PinFilledIcon, PinIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Skeleton, Stack, Text} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button, Tooltip} from '../../../../../ui-components'\nimport {PREVIEW_SIZES} from '../../../../components/previews/constants'\nimport {TitleSkeleton} from '../../../../components/previews/general/DetailPreview.styled'\nimport {Translate, useTranslation} from '../../../../i18n'\nimport {usePerspective} from '../../../../perspective/usePerspective'\nimport {useSetPerspective} from '../../../../perspective/useSetPerspective'\nimport {useWorkspace} from '../../../../studio/workspace'\nimport {ReleaseAvatar} from '../../../components/ReleaseAvatar'\nimport {ReleaseTitle} from '../../../components/ReleaseTitle'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {type TableRowProps} from '../../components/Table/Table'\nimport {type VisibleColumn} from '../../components/Table/types'\nimport {type TableRelease} from '../ReleasesOverview'\n\nexport const ReleaseNameCell: VisibleColumn<TableRelease>['cell'] = ({\n cellProps,\n datum: release,\n}) => {\n const router = useRouter()\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const {selectedReleaseId} = usePerspective()\n const setPerspective = useSetPerspective()\n const {state} = release\n const releaseId = release.isLoading ? 'loading' : getReleaseIdFromReleaseDocumentId(release._id)\n const isArchived = state === 'archived'\n const isReleasePinned = releaseId === selectedReleaseId\n const {document} = useWorkspace()\n const {\n drafts: {enabled: isDraftModelEnabled},\n } = document\n\n const handlePinRelease = useCallback(() => {\n if (isReleasePinned) {\n setPerspective(isDraftModelEnabled ? 'drafts' : 'published')\n } else {\n setPerspective(releaseId)\n }\n }, [isDraftModelEnabled, isReleasePinned, releaseId, setPerspective])\n\n if (release.isLoading) {\n return (\n <Box {...cellProps} paddingLeft={3} flex={1} paddingY={1} paddingRight={2} sizing=\"border\">\n <Flex align=\"center\" gap={2}>\n <Skeleton animated radius={1} style={PREVIEW_SIZES.default.media} />\n <TitleSkeleton />\n </Flex>\n </Box>\n )\n }\n\n const cardProps: TableRowProps = release.isDeleted\n ? {tone: 'transparent'}\n : {\n as: 'a',\n // navigate to release detail\n onClick: () => router.navigate({releaseId: releaseId}),\n tone: 'inherit',\n }\n\n const pinButtonIcon = isReleasePinned ? PinFilledIcon : PinIcon\n const releaseTitle = release.metadata.title || tCore('release.placeholder-untitled-release')\n\n return (\n <Box {...cellProps} paddingLeft={3} flex={1} paddingY={1} paddingRight={2} sizing=\"border\">\n <Tooltip\n disabled={!release.isDeleted}\n content={\n <Text size={1}>\n <Translate t={t} i18nKey=\"deleted-release\" values={{title: releaseTitle}} />\n </Text>\n }\n >\n <Flex align=\"center\" gap={3}>\n <Button\n tooltipProps={{\n disabled: isArchived || release.state === 'published',\n content: isReleasePinned\n ? t('dashboard.details.unpin-release')\n : t('dashboard.details.pin-release'),\n }}\n disabled={isArchived || release.state === 'published'}\n icon={pinButtonIcon}\n mode=\"bleed\"\n data-testid=\"pin-release-button\"\n onClick={handlePinRelease}\n radius=\"full\"\n selected={isReleasePinned}\n aria-label={\n isReleasePinned\n ? `${t('dashboard.details.unpin-release')}: \"${releaseTitle}\"`\n : `${t('dashboard.details.pin-release')}: \"${releaseTitle}\"`\n }\n aria-live=\"assertive\"\n />\n <Card {...cardProps} padding={2} radius={2} flex={1}>\n <Flex align=\"center\" gap={2}>\n <Box flex=\"none\">\n <ReleaseAvatar release={release} />\n </Box>\n <Stack flex={1} space={2}>\n <Flex align=\"center\" gap={2} style={{minWidth: 0}}>\n <ReleaseTitle\n title={release.metadata.title}\n fallback={tCore('release.placeholder-untitled-release')}\n textProps={{size: 1, weight: 'medium', style: {minWidth: 0}}}\n />\n </Flex>\n </Stack>\n </Flex>\n </Card>\n </Flex>\n </Tooltip>\n </Box>\n )\n}\n","import {CheckmarkCircleIcon, ErrorOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Card, Flex, Text} from '@sanity/ui'\n// oxlint-disable-next-line @sanity/i18n/no-i18next-import -- figure out how to have the linter be fine with importing types-only\nimport {type TFunction} from 'i18next'\n\nimport {ToneIcon} from '../../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../../ui-components/tooltip/Tooltip'\nimport {RelativeTime} from '../../../components'\nimport {getIsScheduledDateInPast} from '../../util/getIsScheduledDateInPast'\nimport {getPublishDateFromRelease} from '../../util/util'\nimport {ReleaseTime} from '../components/ReleaseTime'\nimport {Headers} from '../components/Table/TableHeader'\nimport {type Column} from '../components/Table/types'\nimport {ReleaseColumnValidationLoading} from './columnCells/ReleaseColumnValidationLoading'\nimport {ReleaseDocumentsCounter} from './columnCells/ReleaseDocumentsCounter'\nimport {ReleaseNameCell} from './columnCells/ReleaseName'\nimport {type Mode} from './queryParamUtils'\nimport {type TableRelease} from './ReleasesOverview'\n\nconst enableColumnFormMode =\n (currentMode: Mode) => (column: Column<TableRelease>, expectedMode: Mode | 'all') => {\n if (!currentMode) throw new Error('currentMode is required')\n if (expectedMode === 'all' || expectedMode === currentMode) {\n return column\n }\n return undefined\n }\n\nexport const releasesOverviewColumnDefs: (\n t: TFunction<'releases'>,\n releaseGroupMode: Mode,\n) => Column<TableRelease>[] = (t, releaseGroupMode) => {\n const checkColumnMode = enableColumnFormMode(releaseGroupMode)\n return [\n checkColumnMode(\n {\n id: 'metadata.title',\n sorting: true,\n width: null,\n style: {minWidth: 'min(50%, calc(100vw - 80px))', maxWidth: 'min(50%, calc(100vw - 80px))'},\n header: (props) => (\n <Flex\n {...props.headerProps}\n flex={1}\n paddingLeft={6}\n width={3}\n paddingRight={2}\n paddingY={3}\n sizing=\"border\"\n >\n <Headers.SortHeaderButton {...props} text={t('table-header.title')} />\n </Flex>\n ),\n cell: ReleaseNameCell,\n },\n 'all',\n ),\n checkColumnMode(\n {\n id: 'publishAt',\n sorting: true,\n sortTransform: (release) => {\n if (release.metadata.releaseType === 'undecided') return Infinity\n\n const publishDate = getPublishDateFromRelease(release)\n\n if (release.metadata.releaseType === 'asap' || !publishDate) return 0\n return new Date(publishDate).getTime()\n },\n width: 280,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.when')} {...props} />\n </Flex>\n ),\n cell: ({cellProps, datum: release}) => {\n if (release.isLoading) return null\n\n return (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} gap={2} sizing=\"border\">\n <ReleaseTime release={release} />\n </Flex>\n )\n },\n },\n 'active',\n ),\n // This is a hidden column only used for sorting when\n // no other sort column is selected (the default state)\n checkColumnMode(\n {\n id: 'lastActivity',\n hidden: true,\n sorting: true,\n width: 100,\n sortTransform: ({publishedAt, _updatedAt}) => {\n // the default sort is always descending, so -Infinity pushes missing values to end\n const lastActivity = publishedAt ?? _updatedAt\n\n return lastActivity ? new Date(lastActivity).getTime() : -Infinity\n },\n },\n 'archived',\n ),\n checkColumnMode(\n {\n id: 'publishedAt',\n sorting: true,\n sortTransform: (release, direction) => {\n if (release.state !== 'published') {\n if (direction === 'asc') return Infinity\n return -Infinity\n }\n if (!release.publishedAt) return release._updatedAt\n return new Date(release.publishedAt).getTime()\n },\n width: 250,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.published-at')} {...props} />\n </Flex>\n ),\n cell: ({cellProps, datum: release}) => (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} gap={2} sizing=\"border\">\n <Text muted size={1}>\n {release.publishedAt ? (\n // Assuming releases are not updated after archiving.\n // If we realize this is miss leading for customers and they have edited the release after archiving\n // we can use the history endpoint to get the archived change.\n <RelativeTime time={release.publishedAt} useTemporalPhrase minimal />\n ) : (\n '-'\n )}\n </Text>\n </Flex>\n ),\n },\n 'archived',\n ),\n checkColumnMode(\n {\n id: '_updatedAt',\n sorting: true,\n sortTransform: (release, direction) => {\n if (release.state !== 'archived') {\n if (direction === 'asc') return Infinity\n return -Infinity\n }\n\n return new Date(release._updatedAt).getTime()\n },\n width: 250,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.archivedAt')} {...props} />\n </Flex>\n ),\n cell: ({cellProps, datum: release}) => (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} gap={2} sizing=\"border\">\n <Text muted size={1}>\n {release.state === 'archived' ? (\n // Assuming releases are not updated after archiving.\n // If we later realize this is miss leading for customers and they have edited the release after archiving\n // we can use the history endpoint to get the archived change.\n <RelativeTime time={release._updatedAt} useTemporalPhrase minimal />\n ) : (\n '-'\n )}\n </Text>\n </Flex>\n ),\n },\n 'archived',\n ),\n checkColumnMode(\n {\n id: 'documentsMetadata.updatedAt',\n sorting: true,\n width: 150,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} sizing=\"border\">\n <Headers.SortHeaderButton text={t('table-header.edited')} {...props} />\n </Flex>\n ),\n cell: ({datum: {documentsMetadata, _updatedAt}, cellProps}) => {\n const updatedAtDate = documentsMetadata?.updatedAt ?? _updatedAt\n return (\n <Flex {...cellProps} align=\"center\" gap={2} paddingX={2} paddingY={3} sizing=\"border\">\n <Text muted size={1}>\n {updatedAtDate ? (\n <RelativeTime time={updatedAtDate} useTemporalPhrase minimal />\n ) : (\n '-'\n )}\n </Text>\n </Flex>\n )\n },\n },\n 'active',\n ),\n checkColumnMode(\n {\n id: 'error',\n sorting: false,\n width: 40,\n header: ({headerProps}) => <Flex {...headerProps} paddingY={3} sizing=\"border\" />,\n cell: ({datum, cellProps}) => {\n const {error, state} = datum\n const hasError = typeof error !== 'undefined' && state === 'active'\n const hasWarning = state === 'active' && getIsScheduledDateInPast(datum)\n\n return (\n <Flex\n {...cellProps}\n align=\"center\"\n gap={2}\n paddingX={2}\n paddingY={3}\n sizing=\"border\"\n data-testid=\"error-indicator\"\n >\n {hasError && (\n <Tooltip content={<Text size={1}>{t('failed-publish-title')}</Text>} portal>\n <Text size={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n </Text>\n </Tooltip>\n )}\n {hasWarning && (\n <Tooltip content={<Text size={1}>{t('passed-intended-publish-date')}</Text>} portal>\n <Text size={1}>\n <ToneIcon icon={WarningOutlineIcon} tone=\"caution\" />\n </Text>\n </Tooltip>\n )}\n </Flex>\n )\n },\n },\n 'all',\n ),\n checkColumnMode(\n {\n id: 'documentCount',\n sorting: false,\n width: 120,\n header: ({headerProps}) => (\n <Flex {...headerProps} paddingY={3} sizing=\"border\">\n <Headers.BasicHeader text={t('table-header.documents')} />\n </Flex>\n ),\n cell: ({\n datum: {isDeleted, state, finalDocumentStates, documentsMetadata, _id},\n cellProps,\n }) => {\n return (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} sizing=\"border\" gap={2}>\n {state === 'active' && <ReleaseColumnValidationLoading releaseId={_id} />}\n\n {/**\n * Show a checkmark for scheduled releases\n * A scheduled release can't be anything other than valid\n * Since it can't be edited via the API or the UI\n * However we should still gives a visual indicator of that instead of showing nothing\n */}\n {state === 'scheduled' && (\n <Card\n padding={0}\n radius=\"full\"\n tone=\"neutral\"\n style={{\n background: 'transparent',\n }}\n >\n <Flex gap={2}>\n <Text size={1}>\n <Tooltip content={t('summary.all-documents-validated')}>\n <CheckmarkCircleIcon />\n </Tooltip>\n </Text>\n </Flex>\n </Card>\n )}\n\n {!isDeleted && (\n <>\n <ReleaseDocumentsCounter\n documentCount={\n state === 'archived' || state === 'published'\n ? finalDocumentStates?.length\n : documentsMetadata?.documentCount\n }\n />\n </>\n )}\n </Flex>\n )\n },\n },\n 'all',\n ),\n ].filter(filterNull)\n}\n\n// type guard to filter out undefined and null values\nfunction filterNull<T>(value: T | undefined | null): value is T {\n return Boolean(value)\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {EllipsisHorizontalIcon} from '@sanity/icons'\nimport {Menu, Spinner, useClickOutsideEvent} from '@sanity/ui'\nimport {useCallback, useMemo, useRef, useState} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Button, MenuItem, Popover} from '../../../../ui-components'\nimport {useTranslation} from '../../../i18n'\nimport {useScheduledDraftDocument} from '../../../singleDocRelease/hooks/useScheduledDraftDocument'\nimport {useScheduledDraftMenuActions} from '../../../singleDocRelease/hooks/useScheduledDraftMenuActions'\nimport {getPublishedId} from '../../../util/draftUtils'\nimport {isPausedCardinalityOneRelease} from '../../../util/releaseUtils'\nimport {getReleaseIdFromReleaseDocumentId} from '../../util/getReleaseIdFromReleaseDocumentId'\n\nexport const ScheduledDraftMenuButtonWrapper = ({release}: {release: ReleaseDocument}) => {\n const {t} = useTranslation()\n const router = useRouter()\n const popoverRef = useRef<HTMLDivElement>(null)\n const scheduledDraftMenuRef = useRef<HTMLDivElement>(null)\n const [openPopover, setOpenPopover] = useState(false)\n\n const {firstDocument: scheduledDraftDocument} = useScheduledDraftDocument(release._id)\n\n const handleActionComplete = useCallback(() => {\n if (!scheduledDraftDocument) return\n\n router.navigateIntent('edit', {\n id: getPublishedId(scheduledDraftDocument._id),\n type: scheduledDraftDocument._type,\n scheduledDraft: getReleaseIdFromReleaseDocumentId(release._id),\n })\n }, [router, scheduledDraftDocument, release._id])\n\n const {actions, dialogs, isPerformingOperation} = useScheduledDraftMenuActions({\n release,\n documentType: scheduledDraftDocument?._type,\n documentId: scheduledDraftDocument?._id,\n disabled: !scheduledDraftDocument,\n onActionComplete: handleActionComplete,\n })\n\n const displayedMenuItems = useMemo(() => {\n if (release.state === 'archived' || release.state === 'published') {\n return [<MenuItem key={'delete-schedule'} {...actions.deleteSchedule} />]\n }\n\n if (isPausedCardinalityOneRelease(release)) {\n return [\n <MenuItem key={'publish-now'} {...actions.publishNow} />,\n <MenuItem key={'schedule-publish'} {...actions.schedulePublish} />,\n <MenuItem key={'delete-schedule'} {...actions.deleteSchedule} />,\n ]\n }\n\n return [\n <MenuItem key={'publish-now'} {...actions.publishNow} />,\n <MenuItem key={'edit-schedule'} {...actions.editSchedule} />,\n <MenuItem key={'delete-schedule'} {...actions.deleteSchedule} />,\n ]\n }, [release, actions])\n\n const canPerformActions = Boolean(scheduledDraftDocument)\n\n const handleOnButtonClick = useCallback(() => {\n setOpenPopover((prev) => !prev)\n }, [])\n\n useClickOutsideEvent(\n () => setOpenPopover(false),\n () => [popoverRef.current, scheduledDraftMenuRef.current],\n )\n\n if (!canPerformActions) {\n return null\n }\n\n return (\n <>\n <Popover\n content={<Menu ref={scheduledDraftMenuRef}>{displayedMenuItems}</Menu>}\n open={openPopover}\n ref={popoverRef}\n constrainSize={false}\n fallbackPlacements={['top-end']}\n portal\n tone=\"default\"\n placement=\"bottom\"\n >\n <Button\n disabled={!canPerformActions || isPerformingOperation}\n icon={isPerformingOperation ? Spinner : EllipsisHorizontalIcon}\n mode=\"bleed\"\n tooltipProps={{content: t('release.menu.tooltip')}}\n aria-label={t('release.menu.label')}\n data-testid=\"scheduled-draft-menu-button\"\n onClick={handleOnButtonClick}\n />\n </Popover>\n {dialogs}\n </>\n )\n}\n","import {Flex, Text} from '@sanity/ui'\n\nimport {Button} from '../../../../ui-components/button/Button'\nimport {useTranslation} from '../../../i18n'\nimport {useSingleDocReleaseEnabled} from '../../../singleDocRelease/context/SingleDocReleaseEnabledProvider'\nimport {singleDocReleaseNamespace} from '../../../singleDocRelease/i18n'\nimport {ReleaseIllustration} from '../resources/ReleaseIllustration'\n\nexport const ScheduledDraftsEmptyState = () => {\n const {t} = useTranslation(singleDocReleaseNamespace)\n const {mode} = useSingleDocReleaseEnabled()\n if (mode === 'upsell') {\n return null\n }\n return (\n <Flex direction=\"column\" flex={1} justify={'center'} align={'center'}>\n <Flex gap={3} direction=\"column\" align=\"center\" style={{maxWidth: '300px'}}>\n <ReleaseIllustration />\n <Text as=\"h1\" size={1} weight=\"semibold\" data-testid=\"no-releases-info-text\">\n {t('empty-state.title')}\n </Text>\n <Text size={1} muted style={{textAlign: 'center'}}>\n {t('empty-state.description')}\n </Text>\n\n <Button\n as=\"a\"\n href=\"https://www.sanity.io/docs/studio/scheduled-drafts-user-guide\"\n target=\"_blank\"\n mode=\"ghost\"\n text={t('empty-state.action.documentation')}\n />\n </Flex>\n </Flex>\n )\n}\n","import {ErrorOutlineIcon} from '@sanity/icons'\nimport {Box, Card, Flex, Skeleton, Text} from '@sanity/ui'\n\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../../../ui-components/tooltip'\nimport {useTranslation} from '../../../../i18n'\nimport {useScheduledDraftDocument} from '../../../../singleDocRelease/hooks/useScheduledDraftDocument'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {ReleaseDocumentPreview} from '../../components/ReleaseDocumentPreview'\nimport {type VisibleColumn} from '../../components/Table/types'\nimport {type TableRelease} from '../ReleasesOverview'\n\nexport const ScheduledDraftDocumentPreview: VisibleColumn<TableRelease>['cell'] = ({\n datum: release,\n cellProps,\n}) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const {\n firstDocument,\n firstDocumentValidation,\n loading: documentsLoading,\n } = useScheduledDraftDocument(release._id && !release.isLoading ? release._id : undefined)\n\n const isLoading = release.isLoading || documentsLoading || !firstDocument\n\n if (isLoading) {\n return (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} sizing=\"border\">\n <Skeleton animated radius={2} style={{height: '32px', width: '100%'}} />\n </Flex>\n )\n }\n\n const validationErrorCount =\n firstDocumentValidation?.filter((validation) => validation.level === 'error').length || 0\n\n return (\n <Box {...cellProps} flex={1} padding={1} paddingLeft={2} paddingRight={2} sizing=\"border\">\n <Card tone={validationErrorCount ? 'critical' : 'inherit'} radius={2}>\n <Flex align=\"center\" gap={2}>\n <Box flex={1}>\n <ReleaseDocumentPreview\n documentId={firstDocument._id}\n documentTypeName={firstDocument._type}\n releaseId={release._id}\n releaseState={release.state}\n isCardinalityOneRelease\n documentRevision={firstDocument._rev}\n layout=\"default\"\n />\n </Box>\n {validationErrorCount > 0 && (\n <Box paddingRight={3}>\n <Tooltip\n portal\n placement=\"bottom-end\"\n content={\n <Text muted size={1}>\n <Flex align=\"center\" gap={3} padding={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n {t('document-validation.error', {count: validationErrorCount})}\n </Flex>\n </Text>\n }\n >\n <Text size={1}>\n <ToneIcon icon={ErrorOutlineIcon} tone=\"critical\" />\n </Text>\n </Tooltip>\n </Box>\n )}\n </Flex>\n </Card>\n </Box>\n )\n}\n","import {useScheduledDraftDocument} from '../../../../singleDocRelease/hooks/useScheduledDraftDocument'\nimport {getReleaseIdFromReleaseDocumentId} from '../../../util/getReleaseIdFromReleaseDocumentId'\nimport {useReleaseHistory} from '../../detail/documentTable/useReleaseHistory'\n\n/**\n * @internal\n */\nexport function useReleaseCreator(\n releaseDocumentId: string | undefined,\n isLoading: boolean = false,\n): {\n createdBy: string | undefined\n loading: boolean\n} {\n const releaseId =\n releaseDocumentId && !isLoading ? getReleaseIdFromReleaseDocumentId(releaseDocumentId) : ''\n\n const {firstDocument, loading: documentsLoading} = useScheduledDraftDocument(releaseDocumentId)\n const {documentHistory, loading: historyLoading} = useReleaseHistory(\n firstDocument?._id,\n releaseId,\n )\n\n if (!releaseDocumentId || isLoading) {\n return {createdBy: undefined, loading: false}\n }\n\n if (documentsLoading || historyLoading) {\n return {createdBy: undefined, loading: true}\n }\n\n return {\n createdBy: documentHistory?.createdBy,\n loading: false,\n }\n}\n","import {Flex, Skeleton, Stack} from '@sanity/ui'\n\nimport {AvatarSkeleton, UserAvatar} from '../../../../components'\nimport {ReleaseTime} from '../../components/ReleaseTime'\nimport {type VisibleColumn} from '../../components/Table/types'\nimport {useReleaseCreator} from '../hooks/useReleaseCreator'\nimport {type TableRelease} from '../ReleasesOverview'\n\nexport const ScheduledDraftMetadataCell: VisibleColumn<TableRelease>['cell'] = ({\n datum,\n cellProps,\n}) => {\n // Skeleton IDs don't start with _.releases\n // so pass undefined in loading cases\n const {createdBy, loading: creatorLoading} = useReleaseCreator(\n datum.isLoading ? undefined : datum._id,\n datum.isLoading,\n )\n\n if (datum.isLoading || !datum.metadata) {\n return (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} sizing=\"border\">\n <Skeleton animated radius={2} style={{height: '40px', width: '150px'}} />\n </Flex>\n )\n }\n\n return (\n <Flex {...cellProps} align=\"center\" paddingX={2} paddingY={3} sizing=\"border\">\n <Flex align=\"center\" gap={3}>\n {creatorLoading && <AvatarSkeleton $size={1} animated />}\n {!creatorLoading && createdBy && <UserAvatar user={createdBy} size={1} />}\n <Stack space={1}>\n <ReleaseTime release={datum} />\n </Stack>\n </Flex>\n </Flex>\n )\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Flex, Text} from '@sanity/ui'\n\nimport {ToneIcon} from '../../../../../ui-components/toneIcon/ToneIcon'\nimport {Tooltip} from '../../../../../ui-components/tooltip/Tooltip'\nimport {useTranslation} from '../../../../i18n'\nimport {releasesLocaleNamespace} from '../../../i18n'\nimport {getIsScheduledDateInPast} from '../../../util/getIsScheduledDateInPast'\nimport {type VisibleColumn} from '../../components/Table/types'\nimport {type TableRelease} from '../ReleasesOverview'\n\nexport const ScheduledDraftWarningCell: VisibleColumn<TableRelease>['cell'] = ({\n datum,\n cellProps,\n}) => {\n const {t} = useTranslation(releasesLocaleNamespace)\n const hasWarning = datum.state === 'active' && getIsScheduledDateInPast(datum)\n\n return (\n <Flex\n {...cellProps}\n align=\"center\"\n gap={2}\n paddingX={2}\n paddingY={3}\n sizing=\"border\"\n data-testid=\"warning-indicator\"\n >\n {hasWarning && (\n <Tooltip content={<Text size={1}>{t('passed-intended-publish-date-draft')}</Text>} portal>\n <Text size={1}>\n <ToneIcon icon={WarningOutlineIcon} tone=\"caution\" />\n </Text>\n </Tooltip>\n )}\n </Flex>\n )\n}\n","import {Flex} from '@sanity/ui'\n// oxlint-disable-next-line @sanity/i18n/no-i18next-import -- figure out how to have the linter be fine with importing types-only\nimport {type TFunction} from 'i18next'\n\nimport {Headers} from '../components/Table/TableHeader'\nimport {type Column} from '../components/Table/types'\nimport {ScheduledDraftDocumentPreview} from './columnCells/ScheduledDraftDocumentPreview'\nimport {ScheduledDraftMetadataCell} from './columnCells/ScheduledDraftMetadataCell'\nimport {ScheduledDraftWarningCell} from './columnCells/ScheduledDraftWarningCell'\nimport {type Mode} from './queryParamUtils'\nimport {type TableRelease} from './ReleasesOverview'\n\nexport const scheduledDraftsOverviewColumnDefs: (\n t: TFunction<'releases'>,\n releaseGroupMode: Mode,\n) => Column<TableRelease>[] = (t, releaseGroupMode) => {\n return [\n {\n id: 'documentPreview',\n sorting: false,\n width: null,\n style: {flex: 1},\n header: (props) => (\n <Flex {...props.headerProps} paddingLeft={2} paddingRight={2} paddingY={3} sizing=\"border\">\n <Headers.BasicHeader text={t('table-header.document')} />\n </Flex>\n ),\n cell: ScheduledDraftDocumentPreview,\n },\n {\n id: 'publishAt',\n sorting: true,\n width: 300,\n header: (props) => (\n <Flex {...props.headerProps} paddingY={3} paddingX={2} sizing=\"border\">\n <Headers.SortHeaderButton\n {...props}\n text={\n releaseGroupMode === 'archived'\n ? t('table-header.scheduled-draft.published-at')\n : releaseGroupMode === 'paused'\n ? t('table-header.intended-for')\n : t('table-header.scheduled-for')\n }\n />\n </Flex>\n ),\n cell: ScheduledDraftMetadataCell,\n },\n {\n id: 'warning',\n sorting: false,\n width: 40,\n header: ({headerProps}) => <Flex {...headerProps} paddingY={3} sizing=\"border\" />,\n cell: ScheduledDraftWarningCell,\n },\n ]\n}\n","import {Box, Container, Flex} from '@sanity/ui'\nimport {motion} from 'motion/react'\nimport {useCallback} from 'react'\nimport {styled} from 'styled-components'\n\nimport {useSingleDocReleaseEnabled} from '../../../singleDocRelease/context/SingleDocReleaseEnabledProvider'\nimport {useSingleDocReleaseUpsell} from '../../../singleDocRelease/context/SingleDocReleaseUpsellProvider'\nimport {UpsellPanel} from '../../../studio/upsell/UpsellPanel'\nimport {useReleasesUpsell} from '../../contexts/upsell/useReleasesUpsell'\nimport {ReleaseIllustration} from '../resources/ReleaseIllustration'\nimport {type CardinalityView} from './queryParamUtils'\n\nconst Panel = styled(Container)`\n width: auto;\n flex-shrink: 0;\n`\n\nconst SingleDocReleasesUpsell = () => {\n const {mode} = useSingleDocReleaseEnabled()\n const {upsellData, telemetryLogs} = useSingleDocReleaseUpsell()\n const handlePrimaryClick = useCallback(() => {\n telemetryLogs.panelPrimaryClicked()\n }, [telemetryLogs])\n\n const handleSecondaryClick = useCallback(() => {\n telemetryLogs.panelSecondaryClicked()\n }, [telemetryLogs])\n\n if (mode !== 'upsell' || !upsellData) {\n return null\n }\n return (\n <Flex direction=\"column\" flex={1} justify={'center'} align={'center'}>\n <motion.div\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n transition={{duration: 0.3, ease: 'easeInOut'}}\n >\n <Panel width={0} padding={4} paddingY={1}>\n <Flex align={'center'} direction=\"column\">\n <ReleaseIllustration />\n <Box paddingTop={2}>\n <UpsellPanel\n align=\"center\"\n layout=\"vertical\"\n data={{...upsellData, image: null}}\n border={false}\n onPrimaryClick={handlePrimaryClick}\n onSecondaryClick={handleSecondaryClick}\n />\n </Box>\n </Flex>\n </Panel>\n </motion.div>\n </Flex>\n )\n}\n\nconst ReleasesUpsell = () => {\n const {upsellData, telemetryLogs, mode} = useReleasesUpsell()\n const handlePrimaryClick = useCallback(() => {\n telemetryLogs.panelPrimaryClicked()\n }, [telemetryLogs])\n\n const handleSecondaryClick = useCallback(() => {\n telemetryLogs.panelSecondaryClicked()\n }, [telemetryLogs])\n\n if (!upsellData || mode === 'default') {\n return null\n }\n return (\n <Flex direction=\"column\" flex={1} justify={'center'} align={'center'}>\n <motion.div\n initial={{opacity: 0}}\n animate={{opacity: 1}}\n transition={{duration: 0.3, ease: 'easeInOut'}}\n >\n <Panel width={0} padding={4} paddingY={1}>\n <Flex align={'center'} direction=\"column\">\n <ReleaseIllustration />\n <Box paddingTop={2}>\n <UpsellPanel\n align=\"center\"\n layout=\"vertical\"\n data={{...upsellData, image: null}}\n border={false}\n onPrimaryClick={handlePrimaryClick}\n onSecondaryClick={handleSecondaryClick}\n />\n </Box>\n </Flex>\n </Panel>\n </motion.div>\n </Flex>\n )\n}\n\nexport function SchedulesUpsell({cardinalityView}: {cardinalityView: CardinalityView}) {\n if (cardinalityView === 'drafts') {\n return <SingleDocReleasesUpsell />\n }\n if (cardinalityView === 'releases') {\n return <ReleasesUpsell />\n }\n return null\n}\n","import {type ReleaseDocument} from '@sanity/client'\nimport {AddIcon, ChevronDownIcon, EarthGlobeIcon} from '@sanity/icons'\nimport {Box, type ButtonMode, Card, Flex, Inline, useMediaIndex} from '@sanity/ui'\nimport {isSameDay} from 'date-fns/isSameDay'\nimport {AnimatePresence, motion} from 'motion/react'\nimport {\n type CSSProperties,\n type MouseEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {useRouter} from 'sanity/router'\n\nimport {Tooltip} from '../../../../ui-components'\nimport {Button} from '../../../../ui-components/button/Button'\nimport {CalendarFilter} from '../../../components/inputs/DateFilters/calendar/CalendarFilter'\nimport useDialogTimeZone from '../../../hooks/useDialogTimeZone'\nimport {useTimeZone} from '../../../hooks/useTimeZone'\nimport {useTranslation} from '../../../i18n'\nimport {usePerspective} from '../../../perspective/usePerspective'\nimport {useSingleDocReleaseEnabled} from '../../../singleDocRelease/context/SingleDocReleaseEnabledProvider'\nimport {useScheduledDraftsEnabled} from '../../../singleDocRelease/hooks/useScheduledDraftsEnabled'\nimport {CONTENT_RELEASES_TIME_ZONE_SCOPE} from '../../../studio/constants'\nimport {useWorkspace} from '../../../studio/workspace'\nimport {isCardinalityOneRelease, isPausedCardinalityOneRelease} from '../../../util/releaseUtils'\nimport {CreateReleaseDialog} from '../../components/dialog/CreateReleaseDialog'\nimport {useReleasesUpsell} from '../../contexts/upsell/useReleasesUpsell'\nimport {releasesLocaleNamespace} from '../../i18n'\nimport {isReleaseDocument} from '../../store/types'\nimport {useActiveReleases} from '../../store/useActiveReleases'\nimport {useArchivedReleases} from '../../store/useArchivedReleases'\nimport {useReleaseOperations} from '../../store/useReleaseOperations'\nimport {useReleasePermissions} from '../../store/useReleasePermissions'\nimport {type ReleasesMetadata, useReleasesMetadata} from '../../store/useReleasesMetadata'\nimport {getIsScheduledDateInPast} from '../../util/getIsScheduledDateInPast'\nimport {getReleaseTone} from '../../util/getReleaseTone'\nimport {\n filterReleasesForOverview,\n getReleaseDefaults,\n shouldShowReleaseInView,\n} from '../../util/util'\nimport {Table, type TableRowProps} from '../components/Table/Table'\nimport {type TableSort} from '../components/Table/TableProvider'\nimport {CalendarPopover} from './CalendarPopover'\nimport {CardinalityViewPicker} from './CardinalityViewPicker'\nimport {ConfirmActiveScheduledDraftsBanner} from './ConfirmActiveScheduledDraftsBanner'\nimport {DraftsDisabledBanner} from './DraftsDisabledBanner'\nimport {\n buildReleasesSearchParams,\n type CardinalityView,\n getInitialCardinalityView,\n getInitialFilterDate,\n getInitialReleaseGroupMode,\n getInitialReleaseNotFound,\n type Mode,\n} from './queryParamUtils'\nimport {createReleaseCalendarFilterDay, DateFilterButton} from './ReleaseCalendarFilter'\nimport {ReleaseMenuButtonWrapper} from './ReleaseMenuButtonWrapper'\nimport {ReleaseNotFoundBanner} from './ReleaseNotFoundBanner'\nimport {ReleasesEmptyState} from './ReleasesEmptyState'\nimport {releasesOverviewColumnDefs} from './ReleasesOverviewColumnDefs'\nimport {ScheduledDraftMenuButtonWrapper} from './ScheduledDraftMenuButtonWrapper'\nimport {ScheduledDraftsEmptyState} from './ScheduledDraftsEmptyState'\nimport {scheduledDraftsOverviewColumnDefs} from './ScheduledDraftsOverviewColumnDefs'\nimport {SchedulesUpsell} from './SchedulesUpsell'\nimport {useTimezoneAdjustedDateTimeRange} from './useTimezoneAdjustedDateTimeRange'\n\nconst MotionButton = motion.create(Button)\n\nexport interface TableRelease extends ReleaseDocument {\n documentsMetadata?: ReleasesMetadata\n isDeleted?: boolean\n}\n\nconst DEFAULT_RELEASES_OVERVIEW_SORT: TableSort = {column: 'publishAt', direction: 'asc'}\nconst DEFAULT_ARCHIVED_RELEASES_OVERVIEW_SORT: TableSort = {\n column: 'lastActivity',\n direction: 'desc',\n}\n\nfunction toLocalDateComponents(utcDate: Date, utcToZoneDate: (date: Date) => Date): Date {\n const tz = utcToZoneDate(utcDate)\n return new Date(tz.getFullYear(), tz.getMonth(), tz.getDate())\n}\n\nexport function ReleasesOverview() {\n const {data: allReleases, loading: loadingReleases} = useActiveReleases()\n const {data: allArchivedReleases} = useArchivedReleases()\n const {mode: releasesUpsellMode, handleOpenDialog: handleOpenReleasesUpsellDialog} =\n useReleasesUpsell()\n const {mode: scheduledDraftsMode} = useSingleDocReleaseEnabled()\n const isScheduledDraftsEnabled = useScheduledDraftsEnabled()\n const {document, releases: releasesConfig} = useWorkspace()\n const isReleasesEnabled = Boolean(releasesConfig?.enabled)\n const isDraftModelEnabled = document?.drafts?.enabled\n\n const router = useRouter()\n const navigateRef = useRef(router.navigate)\n const [releaseGroupMode, setReleaseGroupMode] = useState<Mode>(getInitialReleaseGroupMode(router))\n\n const cardinalityView = useMemo(\n () => getInitialCardinalityView({router, isScheduledDraftsEnabled, isReleasesEnabled})(),\n [router, isScheduledDraftsEnabled, isReleasesEnabled],\n )\n\n const [releaseFilterDate, setReleaseFilterDate] = useState<Date | undefined>(\n getInitialFilterDate(router),\n )\n const [showReleaseNotFound, setShowReleaseNotFound] = useState<boolean>(() =>\n getInitialReleaseNotFound(router),\n )\n const [isCreateReleaseDialogOpen, setIsCreateReleaseDialogOpen] = useState(false)\n\n // Filter releases based on cardinality view\n // 'releases' view shows releases with cardinality 'many' or undefined\n // 'drafts' view shows releases with cardinality 'one'\n const releases = useMemo(\n () => allReleases.filter(shouldShowReleaseInView(cardinalityView)),\n [allReleases, cardinalityView],\n )\n\n const archivedReleases = useMemo(\n () => allArchivedReleases.filter(shouldShowReleaseInView(cardinalityView)),\n [allArchivedReleases, cardinalityView],\n )\n\n const pausedReleases = useMemo(\n () =>\n cardinalityView === 'drafts'\n ? releases.filter((release) => isPausedCardinalityOneRelease(release))\n : [],\n [releases, cardinalityView],\n )\n\n const releaseIds = useMemo(() => releases.map((release) => release._id), [releases])\n const {data: releasesMetadata, loading: loadingReleasesMetadata} = useReleasesMetadata(releaseIds)\n const loading = loadingReleases || (loadingReleasesMetadata && !releasesMetadata)\n const loadingTableData = loading || (!releasesMetadata && Boolean(releaseIds.length))\n const {t} = useTranslation(releasesLocaleNamespace)\n const {t: tCore} = useTranslation()\n const timeZoneScope = CONTENT_RELEASES_TIME_ZONE_SCOPE\n const {timeZone, utcToCurrentZoneDate} = useTimeZone(timeZoneScope)\n const {selectedPerspective} = usePerspective()\n const {DialogTimeZone, dialogProps, dialogTimeZoneShow} = useDialogTimeZone(timeZoneScope)\n const getTimezoneAdjustedDateTimeRange = useTimezoneAdjustedDateTimeRange()\n\n const {createRelease} = useReleaseOperations()\n const {checkWithPermissionGuard} = useReleasePermissions()\n const [hasCreatePermission, setHasCreatePermission] = useState<boolean | null>(null)\n\n const mediaIndex = useMediaIndex()\n const isNarrowViewport = mediaIndex < 2\n\n const narrowFilterStyle: CSSProperties | undefined = isNarrowViewport\n ? {minWidth: '100%', order: 3}\n : undefined\n const narrowTimezoneStyle: CSSProperties | undefined = isNarrowViewport\n ? {marginLeft: 'auto'}\n : undefined\n const timeZoneLabel = `${timeZone.abbreviation} (${timeZone.namePretty})`\n const timeZoneButtonProps = isNarrowViewport\n ? {tooltipProps: {content: timeZoneLabel}}\n : {iconRight: ChevronDownIcon, text: timeZoneLabel}\n\n const getRowProps = useCallback(\n (datum: TableRelease): Partial<TableRowProps> => {\n if (datum.isDeleted) {\n return {tone: 'transparent'}\n }\n\n if (isReleaseDocument(selectedPerspective) && selectedPerspective._id === datum._id) {\n return {tone: getReleaseTone(datum)}\n }\n\n if (datum.state === 'active' && getIsScheduledDateInPast(datum)) {\n return {tone: 'caution'}\n }\n\n return {tone: 'default'}\n },\n [selectedPerspective],\n )\n\n const [scrollContainerRef, setScrollContainerRef] = useState<HTMLDivElement | null>(null)\n\n const hasReleases = releases.length > 0 || archivedReleases.length > 0\n // banner that shows when drafts mode is disabled, or scheduled drafts are disabled\n // but there are still scheduled drafts\n const showDraftsDisabledBanner =\n cardinalityView === 'drafts' && (!isDraftModelEnabled || !isScheduledDraftsEnabled)\n const loadingOrHasReleases = loading || hasReleases\n const hasNoReleases = !loading && !hasReleases\n\n const tableReleases = useMemo<TableRelease[]>(() => {\n if (!hasReleases || !releasesMetadata) return []\n return releases.map((release) => ({\n ...release,\n publishAt: release.publishAt || release.metadata.intendedPublishAt,\n documentsMetadata: releasesMetadata[release._id] || {},\n }))\n }, [hasReleases, releasesMetadata, releases])\n\n const isMounted = useRef(false)\n useEffect(() => {\n isMounted.current = true\n void checkWithPermissionGuard(createRelease, getReleaseDefaults()).then((hasPermissions) => {\n if (isMounted.current) setHasCreatePermission(hasPermissions)\n })\n\n return () => {\n isMounted.current = false\n }\n }, [checkWithPermissionGuard, createRelease])\n\n // switch to open mode if on archived mode and there are no archived releases\n if (releaseGroupMode === 'archived' && !loadingReleases && !archivedReleases.length) {\n setReleaseGroupMode('active')\n }\n\n // switch to open mode if on paused mode and there are no paused releases\n if (releaseGroupMode === 'paused' && !loadingReleases && !pausedReleases.length) {\n setReleaseGroupMode('active')\n }\n\n const handleDismissReleaseNotFound = useCallback(() => {\n setShowReleaseNotFound(false)\n }, [])\n\n const handleReleaseGroupModeChange = useCallback<MouseEventHandler<HTMLButtonElement>>(\n ({currentTarget: {value: groupMode}}) => {\n setReleaseGroupMode(groupMode as Mode)\n },\n [],\n )\n\n const handleCardinalityViewChange = useCallback(\n (view: CardinalityView) => () => {\n router.navigate({\n _searchParams: buildReleasesSearchParams(releaseFilterDate, releaseGroupMode, view),\n })\n },\n [router, releaseFilterDate, releaseGroupMode],\n )\n\n const handleSelectFilterDate = useCallback(\n (date?: Date) =>\n setReleaseFilterDate((prevFilterDate) => {\n if (!date) return undefined\n const normalized = toLocalDateComponents(date, utcToCurrentZoneDate)\n return prevFilterDate && isSameDay(prevFilterDate, normalized) ? undefined : normalized\n }),\n [utcToCurrentZoneDate],\n )\n\n const clearFilterDate = useCallback(() => {\n setReleaseFilterDate(undefined)\n setReleaseGroupMode('active')\n }, [])\n\n const handleNavigateToPaused = useCallback(() => {\n setReleaseFilterDate(undefined)\n setReleaseGroupMode('paused')\n }, [])\n\n useEffect(() => {\n navigateRef.current = router.navigate\n })\n\n // Sync filter/group state to URL, preserving the current cardinality view\n useEffect(() => {\n navigateRef.current({\n _searchParams: buildReleasesSearchParams(\n releaseFilterDate,\n releaseGroupMode,\n isScheduledDraftsEnabled ? cardinalityView : 'releases',\n ),\n })\n }, [releaseFilterDate, releaseGroupMode, cardinalityView, isScheduledDraftsEnabled])\n\n const [hasMounted, setHasMounted] = useState(false)\n\n useEffect(() => {\n // oxlint-disable-next-line react/react-compiler\n setHasMounted(true)\n }, [])\n\n const showCalendar = mediaIndex > 2\n\n const currentArchivedPicker = useMemo(() => {\n const groupModeButtonBaseProps = {\n disabled: loading || !hasReleases,\n mode: 'bleed' as ButtonMode,\n padding: 2,\n ...(hasMounted\n ? {\n initial: {opacity: 0},\n animate: {opacity: 1},\n transition: {duration: 0.4, ease: 'easeInOut' as const},\n }\n : {}),\n }\n return (\n <AnimatePresence>\n <MotionButton\n key=\"open-group\"\n {...groupModeButtonBaseProps}\n onClick={handleReleaseGroupModeChange}\n selected={releaseGroupMode === 'active'}\n text={t('action.open')}\n value=\"active\"\n />\n {cardinalityView === 'drafts' && (\n <Tooltip\n disabled={pausedReleases.length !== 0}\n content={t('no-paused-release')}\n placement=\"bottom\"\n >\n <div>\n <MotionButton\n key=\"paused-group\"\n {...groupModeButtonBaseProps}\n disabled={groupModeButtonBaseProps.disabled || !pausedReleases.length}\n onClick={handleReleaseGroupModeChange}\n selected={releaseGroupMode === 'paused'}\n text={t('action.paused')}\n value=\"paused\"\n />\n </div>\n </Tooltip>\n )}\n <Tooltip\n disabled={archivedReleases.length !== 0}\n content={t('no-archived-release')}\n placement=\"bottom\"\n >\n <div>\n <MotionButton\n key=\"archived-group\"\n {...groupModeButtonBaseProps}\n disabled={groupModeButtonBaseProps.disabled || !archivedReleases.length}\n onClick={handleReleaseGroupModeChange}\n selected={releaseGroupMode === 'archived'}\n text={t('action.archived')}\n value=\"archived\"\n />\n </div>\n </Tooltip>\n </AnimatePresence>\n )\n }, [\n loading,\n hasReleases,\n hasMounted,\n handleReleaseGroupModeChange,\n releaseGroupMode,\n t,\n archivedReleases.length,\n pausedReleases.length,\n cardinalityView,\n ])\n\n const handleOnClickCreateRelease = useCallback(() => {\n if (releasesUpsellMode === 'upsell') {\n handleOpenReleasesUpsellDialog()\n return\n }\n setIsCreateReleaseDialogOpen(true)\n }, [releasesUpsellMode, handleOpenReleasesUpsellDialog])\n\n const createReleaseButton = useMemo(() => {\n if (isScheduledDraftsEnabled && cardinalityView === 'drafts') return null\n\n return (\n <Button\n icon={AddIcon}\n disabled={!hasCreatePermission || isCreateReleaseDialogOpen}\n onClick={handleOnClickCreateRelease}\n text={tCore('release.action.create-new')}\n tooltipProps={{\n disabled: hasCreatePermission === true,\n content: tCore('release.action.permission.error'),\n }}\n />\n )\n }, [\n cardinalityView,\n hasCreatePermission,\n isCreateReleaseDialogOpen,\n handleOnClickCreateRelease,\n tCore,\n isScheduledDraftsEnabled,\n ])\n\n const handleOnCreateRelease = useCallback(\n (createdReleaseId: string) => {\n setIsCreateReleaseDialogOpen(false)\n\n router.navigate(\n {releaseId: createdReleaseId},\n {\n stickyParams: {\n excludedPerspectives: null,\n perspective: createdReleaseId,\n },\n },\n )\n },\n [router],\n )\n\n const renderRowActions = useCallback(\n ({datum}: {datum: TableRelease | unknown}) => {\n const release = datum as TableRelease\n\n if (release.isDeleted || release.isLoading) return null\n\n if (cardinalityView === 'drafts') {\n return <ScheduledDraftMenuButtonWrapper release={release} />\n }\n\n const documentsCount =\n (releaseGroupMode === 'active'\n ? release.documentsMetadata?.documentCount\n : release.finalDocumentStates?.length) ?? 0\n\n return <ReleaseMenuButtonWrapper release={release} documentsCount={documentsCount} />\n },\n [releaseGroupMode, cardinalityView],\n )\n\n const filteredReleases = useMemo(() => {\n const dateFilter = releaseFilterDate\n ? {\n filterDate: releaseFilterDate,\n getTimezoneAdjustedDateTimeRange,\n }\n : undefined\n\n return filterReleasesForOverview({\n releases: tableReleases,\n archivedReleases,\n cardinalityView,\n releaseGroupMode,\n dateFilter,\n })\n }, [\n tableReleases,\n archivedReleases,\n cardinalityView,\n releaseGroupMode,\n releaseFilterDate,\n getTimezoneAdjustedDateTimeRange,\n ])\n\n const showConfirmActiveScheduledDraftsBanner =\n cardinalityView === 'drafts' &&\n releases.some((release) => release.state === 'active' && isCardinalityOneRelease(release))\n\n const calendarFilterContent = useMemo(\n () => (\n <CalendarFilter\n disabled={loading || releases.length === 0}\n renderCalendarDay={createReleaseCalendarFilterDay(cardinalityView)}\n selectedDate={releaseFilterDate}\n onSelect={handleSelectFilterDate}\n timeZoneScope={CONTENT_RELEASES_TIME_ZONE_SCOPE}\n />\n ),\n [loading, releases, releaseFilterDate, handleSelectFilterDate, cardinalityView],\n )\n\n const renderCalendarFilter = useMemo(\n () => (\n <Flex flex=\"none\">\n <Card borderRight flex=\"none\" disabled>\n {calendarFilterContent}\n </Card>\n </Flex>\n ),\n [calendarFilterContent],\n )\n\n const tableColumns = useMemo(() => {\n if (cardinalityView === 'drafts') {\n return scheduledDraftsOverviewColumnDefs(t, releaseGroupMode)\n }\n return releasesOverviewColumnDefs(t, releaseGroupMode)\n }, [cardinalityView, releaseGroupMode, t])\n\n const hasBannerAboveTable =\n showReleaseNotFound || showDraftsDisabledBanner || showConfirmActiveScheduledDraftsBanner\n\n const isArchivedReleasesView = releaseGroupMode === 'archived' && cardinalityView === 'releases'\n const defaultTableSort = isArchivedReleasesView\n ? DEFAULT_ARCHIVED_RELEASES_OVERVIEW_SORT\n : DEFAULT_RELEASES_OVERVIEW_SORT\n\n const releasesEmptyStateComponent = useCallback(\n () => <ReleasesEmptyState createReleaseButton={createReleaseButton} />,\n [createReleaseButton],\n )\n\n const tableEmptyState = useMemo(() => {\n if (cardinalityView === 'releases' && releaseGroupMode === 'active') {\n return releasesEmptyStateComponent\n }\n // Use specific text for drafts view\n if (cardinalityView === 'drafts') {\n return t('no-scheduled-drafts')\n }\n // Use default text empty state for other cases (archived, etc.)\n return t('no-releases')\n }, [cardinalityView, releaseGroupMode, releasesEmptyStateComponent, t])\n\n function renderNoReleasesEmptyState() {\n const isUpsell =\n (cardinalityView === 'releases' && releasesUpsellMode === 'upsell') ||\n (cardinalityView === 'drafts' && scheduledDraftsMode === 'upsell')\n\n if (isUpsell) {\n return <SchedulesUpsell cardinalityView={cardinalityView} />\n }\n\n if (cardinalityView === 'drafts') {\n return <ScheduledDraftsEmptyState />\n }\n\n return <ReleasesEmptyState createReleaseButton={createReleaseButton} />\n }\n\n return (\n <Flex direction=\"row\" flex={1} style={{height: '100%'}}>\n <Flex flex={1}>\n {showCalendar && renderCalendarFilter}\n\n <Flex direction=\"column\" flex={1} style={{position: 'relative'}}>\n <Card flex=\"none\" padding={3}>\n <Flex align=\"center\" flex={1} gap={3} wrap=\"wrap\">\n <Inline>\n {!showCalendar && (\n <CalendarPopover content={calendarFilterContent} asDialog={isNarrowViewport} />\n )}\n <CardinalityViewPicker\n cardinalityView={cardinalityView}\n loading={loading}\n onCardinalityViewChange={handleCardinalityViewChange}\n isScheduledDraftsEnabled={isScheduledDraftsEnabled}\n allReleases={allReleases}\n isReleasesEnabled={isReleasesEnabled}\n isDraftModelEnabled={isDraftModelEnabled}\n />\n </Inline>\n\n <Flex flex={1} gap={1} style={narrowFilterStyle}>\n {loadingOrHasReleases &&\n (releaseFilterDate ? (\n <DateFilterButton filterDate={releaseFilterDate} onClear={clearFilterDate} />\n ) : (\n currentArchivedPicker\n ))}\n </Flex>\n <Flex flex=\"none\" gap={2} style={narrowTimezoneStyle}>\n <Button\n icon={EarthGlobeIcon}\n mode=\"bleed\"\n onClick={dialogTimeZoneShow}\n {...timeZoneButtonProps}\n />\n {DialogTimeZone && <DialogTimeZone {...dialogProps} />}\n {loadingOrHasReleases && createReleaseButton}\n </Flex>\n </Flex>\n </Card>\n {showReleaseNotFound && (\n <ReleaseNotFoundBanner onDismiss={handleDismissReleaseNotFound} />\n )}\n {showDraftsDisabledBanner && (\n <DraftsDisabledBanner\n isDraftModelEnabled={isDraftModelEnabled}\n isScheduledDraftsEnabled={isScheduledDraftsEnabled}\n allReleases={allReleases}\n />\n )}\n {showConfirmActiveScheduledDraftsBanner && (\n <ConfirmActiveScheduledDraftsBanner\n releases={releases}\n releaseGroupMode={releaseGroupMode}\n hasDateFilter={Boolean(releaseFilterDate)}\n onNavigateToPaused={handleNavigateToPaused}\n />\n )}\n\n {hasNoReleases ? (\n renderNoReleasesEmptyState()\n ) : (\n <Box\n ref={setScrollContainerRef}\n marginTop={hasBannerAboveTable ? 0 : 3}\n overflow=\"auto\"\n >\n <Table<TableRelease>\n // for resetting filter and sort on table when filer changed\n key={releaseFilterDate ? 'by_date' : releaseGroupMode}\n defaultSort={defaultTableSort}\n loading={loadingTableData}\n data={filteredReleases}\n columnDefs={tableColumns}\n emptyState={tableEmptyState}\n // oxlint-disable-next-line @sanity/i18n/no-attribute-string-literals\n rowId=\"_id\"\n rowActions={renderRowActions}\n rowProps={getRowProps}\n scrollContainerRef={scrollContainerRef}\n hideTableInlinePadding\n />\n </Box>\n )}\n </Flex>\n </Flex>\n {isCreateReleaseDialogOpen && (\n <CreateReleaseDialog\n onCancel={() => setIsCreateReleaseDialogOpen(false)}\n onSubmit={handleOnCreateRelease}\n origin=\"release-plugin\"\n />\n )}\n </Flex>\n )\n}\n","import {useRouter} from 'sanity/router'\n\nimport {ReleaseDetail} from './detail/ReleaseDetail'\nimport {ReleasesOverview} from './overview/ReleasesOverview'\n\nexport function ReleasesTool() {\n const router = useRouter()\n\n const {releaseId} = router.state as {releaseId?: string}\n if (releaseId) return <ReleaseDetail key={releaseId} />\n\n return <ReleasesOverview />\n}\n"],"names":["GROUP_SEARCH_PARAM_KEY","RELEASE_NOT_FOUND_SEARCH_PARAM_KEY","DATE_SEARCH_PARAM_KEY","VIEW_SEARCH_PARAM_KEY","DATE_SEARCH_PARAM_VALUE_FORMAT","getInitialReleaseNotFound","router","URLSearchParams","state","_searchParams","get","getInitialFilterDate","activeFilterDate","Date","undefined","getInitialReleaseGroupMode","activeGroupMode","getInitialCardinalityView","isScheduledDraftsEnabled","isReleasesEnabled","buildReleasesSearchParams","releaseFilterDate","releaseGroupMode","cardinalityView","params","push","format","INITIAL_VALUE","events","nextCursor","loading","error","removeDupes","prev","next","noDupes","reduce","acc","event","has","id","set","Map","Array","from","values","addEventData","timestamp","type","origin","getReleaseActivityEvents","client","releaseId","refetchEventsTrigger$","BehaviorSubject","cursor","fetchEvents","limit","toString","append","observable","request","url","config","dataset","getReleaseIdFromReleaseDocumentId","tag","pipe","map","response","catchError","console","events$","switchMap","startWith","scan","sort","a","b","getTime","tap","shareReplay","reloadEvents","loadMore","lastCursorUsed","getValue","buildReleaseEditEvents","transactions","release","_rev","releaseEditEvents","currentDocument","transaction","effect","effects","_id","before","applyMendozaPatch","revert","changed","author","releaseName","metadata","releaseType","intendedPublishAt","intendedPublishDate","Object","length","change","TRANSLOG_ENTRY_LIMIT","documentTransactionsCache","create","newTransactions","oldTransactions","seen","Set","concat","filter","add","getReleaseTransactions","documentId","toTransaction","cacheKey","cachedTransactions","of","fetchLogs","options","getTransactionsLogs","effectFormat","reverse","fromTransaction","expand","allTransactions","batch","editEvents","getReleaseEditEvents","observeDocument$","Boolean","distinctUntilChanged","current","isCreateReleaseEvent","isScheduleReleaseEvent","isPublishReleaseEvent","isArchiveReleaseEvent","isUnarchiveReleaseEvent","isAddDocumentToReleaseEvent","isDiscardDocumentFromReleaseEvent","isEditReleaseEvent","isTranslogEvent","isEventsAPIEvent","EVENTS_INITIAL_VALUE","hasMore","notEnabledActivityEvents","getReleaseEvents","releasesState$","documentPreviewStore","eventsAPIEnabled","unstable_observeDocument","apiVersion","RELEASES_STUDIO_CLIENT_OPTIONS","editEvents$","releaseRev$","releases","skip","activityEvents","documentsCount$","unstable_observeDocumentIdSet","status","documentIds","sideEffects$","merge","combineLatest","activity","edit","parse","creationEvent","find","indexOf","deduplicateEvents","index","nextEvent","areTheSameDate","date1","date2","time1","time2","Math","abs","useReleaseEvents","$","_c","useClient","useDocumentPreviewStore","state$","useReleasesStore","useSource","beta","eventsAPI","t0","getReleaseDocumentIdFromReleaseId","releaseEvents","useObservable","t1","isArchivedRelease","releaseState","getReleaseDocumentIntent","documentTypeName","documentRevision","isCardinalityOneRelease","path","intentParams","scheduledDraft","rev","inspect","historyEvent","historyVersion","archivedRelease","searchParams","getPublishedId","ReleaseDocumentPreview","layout","isGoingToBePublished","documentPresence","useDocumentPresence","t2","t3","forwardRef","linkProps","ref","LinkComponent","t4","previewPresence","t5","t6","t7","documentType","perspectiveStack","isLoading","previewLoading","value","resolvedPreview","useDocumentPreviewValues","t8","t9","t10","StatusText","styled","Text","withConfig","displayName","componentId","ACTIVITY_TEXT_118N","addDocumentToRelease","archiveRelease","createRelease","discardDocumentFromRelease","publishRelease","scheduleRelease","unarchiveRelease","unscheduleRelease","editRelease","ReleaseEventDocumentPreview","ScheduleTarget","children","for","dateStyle","timeStyle","dateTimeFormat","useDateTimeFormat","t","useTranslation","releasesLocaleNamespace","bb0","dateString","publishAt","formattedDate","FadeInCard","motion","Card","ActivityTimestamp","date","useTemporalPhrase","minimal","relativeTime","useRelativeTime","toISOString","ReleaseActivityListItem","memo","releaseTitle","opacity","bounce","duration","t11","t12","t13","prevProps","nextProps","estimateSize","VirtualContainer","Box","ReleaseActivityList","virtualizerContainerRef","useRef","listEvents","useMemo","lastEventFromEventsAPI","lastEventDate","virtualizer","useVirtualizer","count","getScrollElement","i","overscan","paddingEnd","virtualItems","getVirtualItems","useEffect","lastItem","at","height","getTotalSize","width","position","virtualRow","isLoaderRow","measureElement","top","left","transform","start","key","MotionFlex","Flex","FillHeight","div","ReleaseDashboardActivityPanel","show","tCore","display","flexDirection","flex","maxHeight","title","ArchivedReleaseBanner","tRelease","projectSubscriptions","useProjectSubscriptions","retentionDays","featureTypes","retention","features","attributes","maxRetentionDays","utcToCurrentZoneDate","useTimeZone","CONTENT_RELEASES_TIME_ZONE_SCOPE","_updatedAt","_removalDate","addDays","removalDate","Symbol","Link","_temp","ReleaseDetailsEditor","updateRelease","useReleaseOperations","timer","setTimer","useState","checkWithPermissionGuard","useReleasePermissions","hasUpdatePermission","setHasUpdatePermission","changedValue","clearTimeout","newTimer","setTimeout","handleOnChange","isMounted","getIsReleaseOpen","then","hasPermission","useReleaseTime","timeZone","getLocalTimeZone","abbreviation","localeTimeZoneAbbreviation","getTimezoneAbbreviation","publishDate","getPublishDateFromRelease","ReleaseTime","getReleaseTime","isReleaseScheduledOrScheduling","isScheduledOrScheduling","ARCHIVED_RELEASE_STATES","includes","isInArchivedView","dateInputFormat","ReleaseDateInput","props","setIsIntendedScheduleDateInPast","setIntendedPublishAt","zoneDateToUtc","intendedPublishAtTimezoneAdjusted","parsedDate","currentTarget","isValid","isBefore","startOfMinute","handlePublishAtInputChange","ReleaseTypePicker","popoverRef","buttonRef","inputRef","datePickerRef","toast","useToast","open","setOpen","setReleaseType","isUpdating","setIsUpdating","isIntendedScheduleDateInPast","updatedDate","getCalendarLabels","calendarLabels","dialog","document","querySelector","newRelease","isEqual","getIsScheduledDateInPast","closable","finally","close","useClickOutsideEvent","isPublishDateInPast","isReleaseScheduled","publishDateLabel","pickedReleaseType","nextPublishAt","handleButtonReleaseTypeChange","cleanDate","handlePublishAtCalendarChange","handleOnPickerClick","getReleaseTone","tone","bb1","t14","releaseTypeIcon","t15","labelContent","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","MONTH_PICKER_VARIANT","carousel","t30","t31","borderRadius","placement","content","t32","degreesToRadians","degrees","PI","ProgressIcon","progress","rest","circlePath","partialCircle","join","d","vs","cx","cy","r","end","fromX","cos","fromY","sin","toX","toY","large","sweep","getDocumentValidationLoading","documents","hasError","isValidating","validatedCount","forEach","doc","isGoingToUnpublish","isValidated","validation","ValidationProgressIndicator","totalCount","showCheckmark","setShowCheckmark","hasFinishedOnce","setHasFinishedOnce","isFinished","isMinimal","cardBackground","background","ReleaseDashboardDetails","schedule","selectedReleaseId","usePerspective","setPerspective","useSetPerspective","isSelected","releaseFullTitle","isAtTimeRelease","isReleaseOpen","isActive","shouldDisplayError","shouldDisplayPermissionWarning","setShouldDisplayPermissionWarning","shouldDisplayWarnings","useWorkspace","drafts","enabled","isDraftModelEnabled","hasPermission_0","handlePinRelease","PinFilledIcon","PinIcon","isNotArchivedRelease","ErrorOutlineIcon","WarningOutlineIcon","message","ReleasePublishAllButton","disabled","isMenuItem","onConfirmDialogOpen","onConfirmDialogClose","perspective","telemetry","useTelemetry","publishBundleStatus","setPublishBundleStatus","publishPermission","setPublishPermission","some","isValidatingDocuments","_temp2","hasDocumentValidationErrors","isPublishButtonDisabled","selectedPerspective","run","log","PublishedRelease","isReleaseDocument","publishingError","handleConfirmPublishAll","confirmButton","text","onClick","releaseDocumentsLength","confirmPublishDialog","tooltipText","publishTooltipContent","handleInitialPublish","icon","PublishIcon","handleOnClick","tooltipProps","sharedProps","validation_0","promiseWithResolvers","resolve","reject","promise","Promise","res","rej","useDocumentRevertStates","releaseDocuments","observableClient","transactionId","resultPromiseRef","resolvedDocumentRevertStatesPromiseRef","resolvedDocumentRevertStatesResultRef","publishedDocuments","getDocumentTransaction","docId","documentIDs","document_1","revisionId","docRevisionPairs","forkJoin","docId_0","publishedDocumentExists","unpublishDocument","document_2","_system","delete","_temp3","err","_temp5","_temp6","documentRevertStatesResult","document_0","revertDocument","_temp4","result","results","err_0","usePostPublishTransactions","ConfirmReleaseDialog","revertReleaseStatus","setRevertReleaseStatus","releaseDisplayTitle","hasPostPublishTransactions","getDocumentRevertStates","stageNewRevertRelease","setStageNewRevertRelease","revertRelease","useRouter","revertReleaseId","navigate","navigateToRevertRelease","documentRevertStates","revertReleaseId_0","createReleaseId","Error","description","RevertRelease","revertType","marginBottom","catch","revertError","isReleaseLimitError","handleRevertRelease","ReleaseRevertButton","guardWithReleaseLimitUpsell","useReleasesUpsell","isPendingGuardResponse","setIsPendingGuardResponse","hasCreatePermission","setHasCreatePermission","handleMoveToConfirmStatus","getReleaseDefaults","hasPermissions","RestoreIcon","ReleaseScheduleButton","schedulePermission","setSchedulePermission","setStatus","setPublishAt","rerenderDialog","setRerenderDialog","timeZoneAdjustedPublishAt","isScheduleButtonDisabled","isScheduledDateInPast","ScheduledRelease","schedulingError","handleConfirmSchedule","handleBundlePublishAtCalendarChange","date_0","handleBundleInputChange","handleOnDialogClose","_isScheduledDateInPast","documentsLength","cancelButton","alternativeName","offset","t33","t34","t35","t36","t37","confirmScheduleDialog","handleOnInitialSchedule","scheduleTooltipContent","ClockIcon","cur","ReleaseUnscheduleButton","unschedule","UnscheduledRelease","CloseCircleIcon","ReleaseActionsStateHandler","states","onActions","renderChildren","ReleaseActionsResolver","actions","actionProps","useCustomReleaseActions","source","DuplicateReleaseToastLink","actionResult","navigateToDuplicateRelease","RELEASE_ACTION_MAP","confirmDialog","dialogId","dialogHeaderI18nKey","dialogDescriptionI18nKey","dialogConfirmButtonI18nKey","confirmButtonTone","toastSuccessI18nKey","toastFailureI18nKey","DeletedRelease","archive","ArchivedRelease","unarchive","UnarchivedRelease","duplicate","DuplicatedRelease","ReleaseMenu","ignoreCTA","setSelectedAction","releaseMenuDisabled","deleteRelease","hasArchivePermission","setHasArchivePermission","hasUnarchivePermission","setHasUnarchivePermission","hasDeletePermission","setHasDeletePermission","hasPublishPermission","setHasPublishPermission","hasSchedulePermission","setHasSchedulePermission","hasDuplicatePermission","setHasDuplicatePermission","hasPermission_1","hasPermission_2","hasPermission_3","hasPermission_4","action","getAttribute","handleOnInitiateAction","UnarchiveIcon","ArchiveIcon","archiveUnarchiveMenuItem","TrashIcon","deleteMenuItem","bb2","unscheduleMenuItem","bb3","scheduleMenuItem","bb4","publishMenuItem","bb5","CopyIcon","duplicateMenuItem","bb6","ActionsOrder","ReleasePreviewCard","weight","size","toastActionComponents","ReleaseMenuButton","documentsCount","duplicateRelease","isPerformingOperation","setIsPerformingOperation","selectedAction","releaseMenuRef","openPopover","setOpenPopover","customActions","customActionDescriptions","setCustomActionDescriptions","handleCustomActionsUpdate","isActionPublishOrSchedule","handleDelete","handleUnarchive","duplicateReleaseId","duplicatedMetadata","handleDuplicate","actionLookup","actionValues","toastComponents","actionError","handleAction","confirmActionDialog","closePopover","handleOnButtonClick","action_0","handleSetSelectedAction","action_1","onHandle","handleOnActionClick","action_2","label","customActionMenuItems","hasCustomActions","Spinner","EllipsisHorizontalIcon","StatusItem","avatar","testId","margin","STATUS_TITLE_I18N","ReleaseStatusItems","createEvent","extraEvent","isNonNullable","footerEvents","_createdAt","event_0","ReleaseDashboardFooter","releaseActionButton","CopyReleaseActions","resolvePathFromState","buildIntentUrl","useStudioUrl","toastKey","navigator","clipboard","writeText","copyToClipboard","releasePath","ReleaseLinkCopied","handleCopyReleaseLink","ReleaseIdCopied","handleCopyReleaseId","ReleaseTitleCopied","handleCopyReleaseTitle","ShareIcon","LinkIcon","TargetIcon","TextIcon","ReleaseDashboardHeader","inspector","setInspector","handleNavigateToReleasesList","handleActivityClick","minWidth","Button","maxWidth","AddDocumentSearch","onClose","idsInRelease","DOCUMENT_ACTION_CONFIGS","labelKey","FILTER_TAB_CONFIGS","countDocumentsByAction","actionType","getDocumentActionType","isPending","errors","added","unpublished","documentMatchesFilter","getReleaseDocumentActionConfig","ReleaseDocumentFilterTabs","activeFilter","onFilterChange","config_0","ReleaseDocumentFilterTabsInner","counts","getTabLabel","getTabTone","config_1","DocumentActionsInner","showDiscardDialog","setShowDiscardDialog","showUnpublishDialog","setShowUnpublishDialog","coreT","isAlreadyUnpublished","publishedId","_type","getVersionFromId","version","permission","discardVersionPermission","isDiscardVersionPermissionsLoading","useDocumentPairPermissions","unpublishPermission","isUnpublishPermissionsLoading","isDiscardVersionActionDisabled","granted","noPermissionToUnpublish","unPublishTooltipContent","isUnpublishActionDisabled","CloseIcon","UnpublishIcon","memoKey","DocumentActions","useSchema","historyCache","activeHistoryStreams","pendingHistoryResolvers","acquireHistorySlot","maxConcurrent","releaseHistorySlot","max","shift","useReleaseHistory","releaseDocumentId","history","setHistory","getVersionId","versionId","cancelledRef","cached","excludeContent","includeIdentifiedDocumentsOnly","fetchAndParse","collaborators","documentHistory","aggregated","createdBy","lastEditedBy","editors","item","mutations","mutation","MemoReleaseDocumentPreview","TruncatedSpan","span","DocumentType","schema","elementRef","isTruncated","setIsTruncated","element","scrollWidth","clientWidth","checkTruncation","element_0","observer","ResizeObserver","observe","cancelled","fonts","ready","disconnect","measureRef","textElement","MemoDocumentType","documentActionColumn","style","header","headerProps","cell","cellProps","datum","actionBadge","documentActionConfig","getDocumentTableColumnDefs","sorting","sortTransform","String","name","toLowerCase","level","validationErrorCount","firstError","focusPath","pathToString","intent","errorLabel","UpdatedAtCell","bundleId","historyDocumentId","endsWith","extractSearchableText","depth","visited","isArray","child","trim","entries","every","val","startsWith","searchDocumentRelease","searchTerm","normalizedSearchTerm","normalizedTitle","normalizedName","hasTitle","hasName","combinedText","allWordsMatch","split","word","documentInSearchTerm","FULL_HEIGHT_STYLE","SCROLL_CONTAINER_STYLE","overflow","scrollbarWidth","msOverflowStyle","FIT_CONTENT_STYLE","isBundleDocumentRow","maybeBundleDocumentRow","ReleaseSummary","scrollContainerRef","setScrollContainerRef","createVersion","openAddDocumentDialog","setAddDocumentDialog","pendingAddedDocument","setPendingAddedDocument","setActiveFilter","rowProps","renderRowActions","documentTableColumnDefs","handleAddDocumentClick","data","filterRows","documentToAdd","versionDocumentId","pendingAddedDocumentId","pendingDocumentRow","getDocumentVariantType","AddedVersion","documentOrigin","prev_0","closeAddDialog","documentsNoLongerPending","pendingDocument","prev_1","tableData","isCardinalityOne","hasNoDocuments","textAlign","column","direction","AddIcon","MotionCard","ReleaseDetail","releaseIdRaw","decodeURIComponent","useActiveReleases","archivedReleases","useArchivedReleases","documentsLoading","bundleDocumentsError","useReleaseDocuments","candidate","releaseInDetail","isNotFound","detailContent","useReleasesMetadata","releaseIds","addReleaseIdsToListener","addBundleIdsToListener","removeReleaseIdsFromListener","removeBundleIdsFromListener","useReleasesMetadataProvider","responseData","fromEntries","CalendarPopover","asDialog","isCalendarOpen","setIsCalendarOpen","FilterIcon","triggerButton","getPickerView","hasSingleDocRelease","CardinalityViewPicker","allReleases","onCardinalityViewChange","pickerView","view","telemetryEvent","NavigatedToReleasesOverview","NavigatedToScheduledDrafts","handleViewChange","fontWeight","CalendarIcon","ChevronDownIcon","useScheduleActiveDrafts","scheduleActions","flatMap","scheduleActiveDrafts","ConfirmScheduledDraftsDialog","activeScheduledDrafts","isScheduling","setIsScheduling","hasPastDates","handleConfirmSchedules","isPast","ConfirmActiveScheduledDraftsBanner","hasDateFilter","onNavigateToPaused","isDialogOpen","setIsDialogOpen","shouldOpenDialog","handleCloseDialog","handleClick","buttonText","DraftsDisabledBanner","getBannerMessage","useTimezoneAdjustedDateTimeRange","startOfDay","endOfDay","ReleaseCalendarFilterDayWithCardinality","getTimezoneAdjustedDateTimeRange","calendarDayProps","startOfDayForTimeZone","endOfDayForTimeZone","shouldShowReleaseInView","releasePublishAt","publishDateUTC","dayHasReleases","createReleaseCalendarFilterDay","ReleaseCalendarFilterDayComponent","MotionButton","DateFilterButton","filterDate","onClear","isExiting","setIsExiting","handleOnExitComplete","ease","ReleaseMenuButtonWrapper","ReleaseNotFoundBanner","onDismiss","ReleaseIllustration","ReleasesEmptyState","createReleaseButton","mode","ReleaseColumnValidationLoading","rId","ReleaseDocumentsCounter","documentCount","ReleaseNameCell","isArchived","isReleasePinned","PREVIEW_SIZES","default","media","isDeleted","as","cardProps","pinButtonIcon","enableColumnFormMode","currentMode","expectedMode","releasesOverviewColumnDefs","checkColumnMode","Infinity","hidden","publishedAt","lastActivity","documentsMetadata","updatedAtDate","updatedAt","hasWarning","finalDocumentStates","filterNull","ScheduledDraftMenuButtonWrapper","scheduledDraftMenuRef","firstDocument","scheduledDraftDocument","useScheduledDraftDocument","navigateIntent","handleActionComplete","onActionComplete","dialogs","useScheduledDraftMenuActions","deleteSchedule","isPausedCardinalityOneRelease","publishNow","schedulePublish","editSchedule","displayedMenuItems","canPerformActions","ScheduledDraftsEmptyState","singleDocReleaseNamespace","useSingleDocReleaseEnabled","ScheduledDraftDocumentPreview","firstDocumentValidation","T0","T1","T2","useReleaseCreator","historyLoading","ScheduledDraftMetadataCell","creatorLoading","ScheduledDraftWarningCell","scheduledDraftsOverviewColumnDefs","Panel","Container","SingleDocReleasesUpsell","upsellData","telemetryLogs","useSingleDocReleaseUpsell","panelPrimaryClicked","handlePrimaryClick","panelSecondaryClicked","handleSecondaryClick","image","ReleasesUpsell","SchedulesUpsell","DEFAULT_RELEASES_OVERVIEW_SORT","DEFAULT_ARCHIVED_RELEASES_OVERVIEW_SORT","toLocalDateComponents","utcDate","utcToZoneDate","tz","getFullYear","getMonth","getDate","ReleasesOverview","loadingReleases","allArchivedReleases","releasesUpsellMode","handleOpenDialog","handleOpenReleasesUpsellDialog","scheduledDraftsMode","useScheduledDraftsEnabled","releasesConfig","navigateRef","setReleaseGroupMode","setReleaseFilterDate","showReleaseNotFound","setShowReleaseNotFound","isCreateReleaseDialogOpen","setIsCreateReleaseDialogOpen","pausedReleases","releasesMetadata","loadingReleasesMetadata","loadingTableData","DialogTimeZone","dialogProps","dialogTimeZoneShow","useDialogTimeZone","mediaIndex","useMediaIndex","isNarrowViewport","order","narrowFilterStyle","marginLeft","narrowTimezoneStyle","timeZoneLabel","namePretty","iconRight","timeZoneButtonProps","getRowProps","hasReleases","showDraftsDisabledBanner","loadingOrHasReleases","hasNoReleases","release_1","tableReleases","handleDismissReleaseNotFound","groupMode","handleReleaseGroupModeChange","handleCardinalityViewChange","prevFilterDate","normalized","isSameDay","handleSelectFilterDate","clearFilterDate","handleNavigateToPaused","hasMounted","setHasMounted","showCalendar","initial","animate","transition","padding","groupModeButtonBaseProps","t38","t39","t40","currentArchivedPicker","t41","handleOnClickCreateRelease","t42","t43","t44","t45","t46","t47","t48","createdReleaseId","stickyParams","excludedPerspectives","handleOnCreateRelease","datum_0","release_2","filterReleasesForOverview","dateFilter","filteredReleases","showConfirmActiveScheduledDraftsBanner","t49","calendarFilterContent","t50","renderCalendarFilter","t51","t52","tableColumns","hasBannerAboveTable","defaultTableSort","releasesEmptyStateComponent","t53","t54","tableEmptyState","renderNoReleasesEmptyState","t55","t56","t57","t58","t59","t60","t61","t62","t63","EarthGlobeIcon","t64","t65","t66","t67","t68","t69","t70","t71","t72","t73","t74","t75","release_3","release_0","ReleasesTool"],"mappings":"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"}
|