Skip to content

Commit cf81b0f

Browse files
committed
fix(editor): remove redundant publish success callout
1 parent d97cac2 commit cf81b0f

3 files changed

Lines changed: 14 additions & 46 deletions

File tree

src/admin/pages/site/toolbar/PublishActionGroup.tsx

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { cn } from '@ui/cn'
21
import { SplitButton, type SplitButtonMenuItem } from '@ui/components/SplitButton'
32
import type { IconComponent } from 'pixel-art-icons/types'
43
import styles from './Toolbar.module.css'
@@ -23,10 +22,7 @@ interface PublishActionGroupProps {
2322
menuItems: PublishActionMenuItem[]
2423
menuLabel?: string
2524
triggerLabel?: string
26-
toast?: {
27-
tone: 'status' | 'alert'
28-
message: string
29-
} | null
25+
errorMessage?: string | null
3026
}
3127

3228
export function PublishActionGroup({
@@ -44,7 +40,7 @@ export function PublishActionGroup({
4440
menuItems,
4541
menuLabel = 'Publishing actions',
4642
triggerLabel = 'More publishing actions',
47-
toast,
43+
errorMessage,
4844
}: PublishActionGroupProps) {
4945
return (
5046
<div className={styles.publishActionGroup}>
@@ -83,15 +79,9 @@ export function PublishActionGroup({
8379
menuTestId="toolbar-publish-actions-menu"
8480
/>
8581

86-
{toast && (
87-
<div
88-
role={toast.tone === 'alert' ? 'alert' : 'status'}
89-
className={cn(
90-
styles.publishToast,
91-
toast.tone === 'status' && styles.publishToastStatus,
92-
)}
93-
>
94-
{toast.message}
82+
{errorMessage && (
83+
<div role="alert" className={styles.publishToast}>
84+
{errorMessage}
9585
</div>
9686
)}
9787
</div>

src/admin/pages/site/toolbar/PublishButton.tsx

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function PublishButton({ enabled = true, onSave, saveStatus }: PublishBut
4444
const hasUnsavedChanges = useEditorStore((s) => s.hasUnsavedChanges)
4545
const { runStepUp } = useStepUp()
4646
const [state, setState] = useState<PublishState>('idle')
47-
const [message, setMessage] = useState<string | null>(null)
47+
const [errorMessage, setErrorMessage] = useState<string | null>(null)
4848
const [isSaving, setIsSaving] = useState(false)
4949
const [scheduleDialogOpen, setScheduleDialogOpen] = useState(false)
5050
const statusTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)
@@ -67,7 +67,7 @@ export function PublishButton({ enabled = true, onSave, saveStatus }: PublishBut
6767
if (cancelled) return
6868
if (status.draftMatchesPublished) {
6969
setState('published')
70-
setMessage(null)
70+
setErrorMessage(null)
7171
}
7272
} catch (err) {
7373
console.warn('[toolbar] Failed to load publish status:', err)
@@ -84,7 +84,7 @@ export function PublishButton({ enabled = true, onSave, saveStatus }: PublishBut
8484
statusTimerRef.current = null
8585
const resetTimer = setTimeout(() => {
8686
setState('idle')
87-
setMessage(null)
87+
setErrorMessage(null)
8888
}, 0)
8989
return () => clearTimeout(resetTimer)
9090
}, [hasUnsavedChanges, state])
@@ -93,15 +93,7 @@ export function PublishButton({ enabled = true, onSave, saveStatus }: PublishBut
9393
if (statusTimerRef.current) clearTimeout(statusTimerRef.current)
9494
statusTimerRef.current = setTimeout(() => {
9595
setState('idle')
96-
setMessage(null)
97-
statusTimerRef.current = null
98-
}, 5000)
99-
}
100-
101-
const clearMessageLater = () => {
102-
if (statusTimerRef.current) clearTimeout(statusTimerRef.current)
103-
statusTimerRef.current = setTimeout(() => {
104-
setMessage(null)
96+
setErrorMessage(null)
10597
statusTimerRef.current = null
10698
}, 5000)
10799
}
@@ -115,7 +107,7 @@ export function PublishButton({ enabled = true, onSave, saveStatus }: PublishBut
115107
}
116108

117109
setState('publishing')
118-
setMessage(null)
110+
setErrorMessage(null)
119111

120112
try {
121113
await onSave?.()
@@ -125,25 +117,19 @@ export function PublishButton({ enabled = true, onSave, saveStatus }: PublishBut
125117
// blast-radius site action (one click replaces every public page),
126118
// which is why the server gates it behind a fresh step-up window
127119
// in addition to the `pages.publish` capability check.
128-
const result = await runStepUp(() => publishCmsDraft())
120+
await runStepUp(() => publishCmsDraft())
129121
setState('published')
130-
setMessage(
131-
result.publishedPages === 1
132-
? '1 page published'
133-
: `${result.publishedPages} pages published`,
134-
)
135-
clearMessageLater()
136122
} catch (err) {
137123
if (err instanceof Error && err.message === StepUpCancelledMessage) {
138124
// User dismissed the step-up dialog — return the button to its
139125
// resting state without surfacing an error message; this is the
140126
// same UX every other step-up-gated action uses.
141127
setState('idle')
142-
setMessage(null)
128+
setErrorMessage(null)
143129
return
144130
}
145131
setState('error')
146-
setMessage(getErrorMessage(err, 'Unknown publish error'))
132+
setErrorMessage(getErrorMessage(err, 'Unknown publish error'))
147133
resetErrorLater()
148134
}
149135
}
@@ -236,10 +222,7 @@ export function PublishButton({ enabled = true, onSave, saveStatus }: PublishBut
236222
publishIcon={PublishIcon}
237223
onPublish={handlePublish}
238224
menuItems={menuItems}
239-
toast={message ? {
240-
tone: state === 'error' ? 'alert' : 'status',
241-
message,
242-
} : null}
225+
errorMessage={errorMessage}
243226
/>
244227
{activePage && (
245228
<SchedulePublishDialog

src/admin/pages/site/toolbar/Toolbar.module.css

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -272,11 +272,6 @@
272272
box-shadow: 0 4px 12px var(--scrim-40);
273273
}
274274

275-
.publishToastStatus {
276-
border-color: color-mix(in srgb, var(--success) 35%, transparent);
277-
color: var(--success);
278-
}
279-
280275
@media (max-width: 760px) {
281276
.header {
282277
height: 68px;

0 commit comments

Comments
 (0)