Skip to content

Commit 2fd1579

Browse files
authoredMar 14, 2025··
feat(sanity): refine release toasts (#8902)
feat(sanity): make release action toasts optional feat(sanity): remove redundant release archive success toast feat(sanity): remove redundant release unarchive success toast feat(sanity): remove redundant version creation success toast feat(sanity): remove redundant version discarded success toast feat(sanity): remove redundant release unscheduled success toast feat(sanity): reduce status of release scheduled success toast feat(sanity): remove redundant release publication success toast
1 parent 5ee38ad commit 2fd1579

File tree

9 files changed

+37
-109
lines changed

9 files changed

+37
-109
lines changed
 

‎packages/sanity/src/core/i18n/bundles/studio.ts

-3
Original file line numberDiff line numberDiff line change
@@ -1180,9 +1180,6 @@ export const studioLocaleStrings = defineLocalesResources('studio', {
11801180
'release.action.discard-version': 'Discard version',
11811181
/** Description for toast when version discarding failed */
11821182
'release.action.discard-version.failure': 'Failed to discard version',
1183-
/** Description for toast when version deletion is successfully discarded */
1184-
'release.action.discard-version.success':
1185-
'<strong>{{title}}</strong> version was successfully discarded',
11861183
/** Action message for when a new release is created off an existing version, draft or published document */
11871184
'release.action.new-release': 'New Release',
11881185
/** Tooltip message for not having permissions for creating new releases */

‎packages/sanity/src/core/releases/components/dialog/DiscardVersionDialog.tsx

+4-29
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import {Box, Stack, Text, useToast} from '@sanity/ui'
1+
import {Box, Stack, Text} from '@sanity/ui'
22
import {useCallback, useState} from 'react'
33

44
import {Dialog} from '../../../../ui-components'
55
import {LoadingBlock} from '../../../components'
66
import {useDocumentOperation, useSchema} from '../../../hooks'
7-
import {Translate, useTranslation} from '../../../i18n'
7+
import {useTranslation} from '../../../i18n'
88
import {usePerspective} from '../../../perspective/usePerspective'
9-
import {Preview, unstable_useValuePreview as useValuePreview} from '../../../preview'
9+
import {Preview} from '../../../preview'
1010
import {getPublishedId, getVersionFromId, isVersionId} from '../../../util/draftUtils'
1111
import {useVersionOperations} from '../../hooks'
1212
import {releasesLocaleNamespace} from '../../i18n'
@@ -23,18 +23,14 @@ export function DiscardVersionDialog(props: {
2323
}): React.JSX.Element {
2424
const {onClose, documentId, documentType} = props
2525
const {t} = useTranslation(releasesLocaleNamespace)
26-
const {t: coreT} = useTranslation()
2726
const {discardChanges} = useDocumentOperation(getPublishedId(documentId), documentType)
28-
const toast = useToast()
2927
const {selectedPerspective} = usePerspective()
3028
const {discardVersion} = useVersionOperations()
3129
const schema = useSchema()
3230
const [isDiscarding, setIsDiscarding] = useState(false)
3331

3432
const schemaType = schema.get(documentType)
3533

36-
const preview = useValuePreview({schemaType, value: {_id: documentId}})
37-
3834
const handleDiscardVersion = useCallback(async () => {
3935
setIsDiscarding(true)
4036

@@ -44,18 +40,6 @@ export function DiscardVersionDialog(props: {
4440
getReleaseIdFromReleaseDocumentId((selectedPerspective as ReleaseDocument)._id),
4541
documentId,
4642
)
47-
48-
toast.push({
49-
closable: true,
50-
status: 'success',
51-
description: (
52-
<Translate
53-
t={coreT}
54-
i18nKey={'release.action.discard-version.success'}
55-
values={{title: preview.value?.title || documentId}}
56-
/>
57-
),
58-
})
5943
} else {
6044
// on the document header you can also discard the draft
6145
discardChanges.execute()
@@ -64,16 +48,7 @@ export function DiscardVersionDialog(props: {
6448
setIsDiscarding(false)
6549

6650
onClose()
67-
}, [
68-
documentId,
69-
onClose,
70-
discardVersion,
71-
selectedPerspective,
72-
toast,
73-
coreT,
74-
preview.value?.title,
75-
discardChanges,
76-
])
51+
}, [documentId, onClose, discardVersion, selectedPerspective, discardChanges])
7752

7853
return (
7954
<Dialog

‎packages/sanity/src/core/releases/i18n/resources.ts

-10
Original file line numberDiff line numberDiff line change
@@ -328,12 +328,8 @@ const releasesLocaleStrings = {
328328
/** Header for the document table in the release tool - time */
329329
'table-header.time': 'Time',
330330

331-
/** Text for toast when release has been archived */
332-
'toast.archive.success': "The '<strong>{{title}}</strong>' release was archived.",
333331
/** Text for toast when release failed to archive */
334332
'toast.archive.error': "Failed to archive '<strong>{{title}}</strong>': {{error}}",
335-
/** Description for toast when new version of document is created in release */
336-
'toast.create-version.success': '{{documentTitle}} added to release',
337333
/** Description for toast when creating new version of document in release failed */
338334
'toast.create-version.error': 'Failed to add document to release: {{error}}',
339335
/** Description for toast when release deletion failed */
@@ -342,18 +338,12 @@ const releasesLocaleStrings = {
342338
'toast.delete.success': "The '<strong>{{title}}</strong>' release was successfully deleted",
343339
/** Text for toast when release failed to publish */
344340
'toast.publish.error': "Failed to publish '<strong>{{title}}</strong>': {{error}}",
345-
/** Text for toast when release has been published */
346-
'toast.publish.success': "The '<strong>{{title}}</strong>' release was published.",
347341
/** Text for toast when release failed to schedule */
348342
'toast.schedule.error': "Failed to schedule '<strong>{{title}}</strong>': {{error}}",
349343
/** Text for toast when release has been scheduled */
350344
'toast.schedule.success': "The '<strong>{{title}}</strong>' release was scheduled.",
351345
/** Text for toast when release failed to unschedule */
352346
'toast.unschedule.error': "Failed to unscheduled '<strong>{{title}}</strong>': {{error}}",
353-
/** Text for toast when release has been unschedule */
354-
'toast.unschedule.success': "The '<strong>{{title}}</strong>' release was unscheduled.",
355-
/** Text for toast when release has been unarchived */
356-
'toast.unarchive.success': "The '<strong>{{title}}</strong>' release was unarchived.",
357347
/** Text for toast when release failed to unarchive */
358348
'toast.unarchive.error': "Failed to unarchive '<strong>{{title}}</strong>': {{error}}",
359349
/** Description for toast when release deletion failed */

‎packages/sanity/src/core/releases/tool/components/ReleaseMenuButton/ReleaseMenuButton.tsx

+30-25
Original file line numberDiff line numberDiff line change
@@ -68,34 +68,39 @@ export const ReleaseMenuButton = ({ignoreCTA, release, documentsCount}: ReleaseM
6868
await actionLookup[action](release._id)
6969

7070
telemetry.log(actionValues.telemetry)
71-
toast.push({
72-
closable: true,
73-
status: 'success',
74-
title: (
75-
<Text muted size={1}>
76-
<Translate
77-
t={t}
78-
i18nKey={actionValues.toastSuccessI18nKey}
79-
values={{title: releaseTitle}}
80-
/>
81-
</Text>
82-
),
83-
})
71+
72+
if (typeof actionValues.toastSuccessI18nKey !== 'undefined') {
73+
toast.push({
74+
closable: true,
75+
status: 'success',
76+
title: (
77+
<Text muted size={1}>
78+
<Translate
79+
t={t}
80+
i18nKey={actionValues.toastSuccessI18nKey}
81+
values={{title: releaseTitle}}
82+
/>
83+
</Text>
84+
),
85+
})
86+
}
8487
} catch (actionError) {
8588
if (isReleaseLimitError(actionError)) return
8689

87-
toast.push({
88-
status: 'error',
89-
title: (
90-
<Text muted size={1}>
91-
<Translate
92-
t={t}
93-
i18nKey={actionValues.toastFailureI18nKey}
94-
values={{title: releaseTitle, error: actionError.toString()}}
95-
/>
96-
</Text>
97-
),
98-
})
90+
if (typeof actionValues.toastFailureI18nKey !== 'undefined') {
91+
toast.push({
92+
status: 'error',
93+
title: (
94+
<Text muted size={1}>
95+
<Translate
96+
t={t}
97+
i18nKey={actionValues.toastFailureI18nKey}
98+
values={{title: releaseTitle, error: actionError.toString()}}
99+
/>
100+
</Text>
101+
),
102+
})
103+
}
99104
console.error(actionError)
100105
} finally {
101106
setIsPerformingOperation(false)

‎packages/sanity/src/core/releases/tool/components/ReleaseMenuButton/releaseActions.ts

+2-5
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {
1111
export type ReleaseAction = 'archive' | 'unarchive' | 'delete' | 'unschedule'
1212

1313
interface BaseReleaseActionsMap {
14-
toastSuccessI18nKey: string
15-
toastFailureI18nKey: string
14+
toastSuccessI18nKey?: string
15+
toastFailureI18nKey?: string
1616
telemetry: DefinedTelemetryLog<void>
1717
}
1818

@@ -50,19 +50,16 @@ export const RELEASE_ACTION_MAP: Record<
5050
dialogConfirmButtonI18nKey: 'archive-dialog.confirm-archive-button',
5151
confirmButtonTone: 'critical',
5252
},
53-
toastSuccessI18nKey: 'toast.archive.success',
5453
toastFailureI18nKey: 'toast.archive.error',
5554
telemetry: ArchivedRelease,
5655
},
5756
unarchive: {
5857
confirmDialog: false,
59-
toastSuccessI18nKey: 'toast.unarchive.success',
6058
toastFailureI18nKey: 'toast.unarchive.error',
6159
telemetry: UnarchivedRelease,
6260
},
6361
unschedule: {
6462
confirmDialog: false,
65-
toastSuccessI18nKey: 'toast.unschedule.success',
6663
toastFailureI18nKey: 'toast.unschedule.error',
6764
telemetry: UnscheduledRelease,
6865
},

‎packages/sanity/src/core/releases/tool/components/releaseCTAButtons/ReleasePublishAllButton.tsx

-15
Original file line numberDiff line numberDiff line change
@@ -67,21 +67,6 @@ export const ReleasePublishAllButton = ({
6767
setPublishBundleStatus('publishing')
6868
await publishRelease(release._id)
6969
telemetry.log(PublishedRelease)
70-
toast.push({
71-
closable: true,
72-
status: 'success',
73-
title: (
74-
<Text muted size={1}>
75-
<Translate
76-
t={t}
77-
i18nKey="toast.publish.success"
78-
values={{
79-
title: release.metadata.title || tCore('release.placeholder-untitled-release'),
80-
}}
81-
/>
82-
</Text>
83-
),
84-
})
8570
if (
8671
isReleaseDocument(perspective.selectedPerspective) &&
8772
perspective.selectedPerspective?._id === release._id

‎packages/sanity/src/core/releases/tool/components/releaseCTAButtons/ReleaseScheduleButton.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export const ReleaseScheduleButton = ({
8989
telemetry.log(ScheduledRelease)
9090
toast.push({
9191
closable: true,
92-
status: 'success',
92+
status: 'info',
9393
title: (
9494
<Text muted size={1}>
9595
<Translate

‎packages/sanity/src/core/releases/tool/components/releaseCTAButtons/ReleaseUnscheduleButton.tsx

-15
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,6 @@ export const ReleaseUnscheduleButton = ({
3434
setStatus('unscheduling')
3535
await unschedule(release._id)
3636
telemetry.log(UnscheduledRelease)
37-
toast.push({
38-
closable: true,
39-
status: 'success',
40-
title: (
41-
<Text muted size={1}>
42-
<Translate
43-
t={t}
44-
i18nKey="toast.unschedule.success"
45-
values={{
46-
title: release.metadata.title || tCore('release.placeholder-untitled-release'),
47-
}}
48-
/>
49-
</Text>
50-
),
51-
})
5237
} catch (schedulingError) {
5338
toast.push({
5439
status: 'error',

‎packages/sanity/src/core/releases/tool/detail/ReleaseSummary.tsx

-6
Original file line numberDiff line numberDiff line change
@@ -162,12 +162,6 @@ export function ReleaseSummary(props: ReleaseSummaryProps) {
162162
if (
163163
documents.find(({document}) => `${document._id}-pending` === pendingDocument.document._id)
164164
) {
165-
toast.push({
166-
id: `add-version-to-release-${pendingDocument.document._id}`,
167-
closable: true,
168-
status: 'success',
169-
title: t('toast.create-version.success', {documentTitle: pendingDocument.document.title}),
170-
})
171165
documentsNoLongerPending.push(pendingDocument.document._id)
172166
}
173167
})

0 commit comments

Comments
 (0)
Please sign in to comment.