Skip to content

Commit ed3a0c8

Browse files
committed
fade out toasts that are centered, and not the last one
1 parent b7140b6 commit ed3a0c8

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

packages/@react-spectrum/toast/src/ToastContainer.tsx

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,24 +106,32 @@ export function ToastContainer(props: SpectrumToastContainerProps): ReactElement
106106
let activeToastContainer = useActiveToastContainer();
107107
let state = useToastQueue(getGlobalToastQueue());
108108

109-
let placement = useMemo(() => {
110-
let placements = props.placement?.split(' ');
111-
return placements?.[placements.length - 1] || 'bottom';
109+
let {placement, isCentered} = useMemo(() => {
110+
let placements = (props.placement ?? 'bottom').split(' ');
111+
let placement = placements[placements.length - 1];
112+
let isCentered = placements.length === 1;
113+
return {placement, isCentered};
112114
}, [props.placement]);
113115

114116
if (ref === activeToastContainer && state.visibleToasts.length > 0) {
115117
return (
116118
<Toaster state={state} {...props}>
117119
<ol className={classNames(toastContainerStyles, 'spectrum-ToastContainer-list')}>
118-
{state.visibleToasts.slice().reverse().map((toast) => {
120+
{state.visibleToasts.slice().reverse().map((toast, index) => {
121+
let shouldFade = isCentered && index !== 0;
119122
return (
120123
<li
121124
key={toast.key}
122125
className={classNames(toastContainerStyles, 'spectrum-ToastContainer-listitem')}
123126
style={{
124127
// @ts-expect-error
125128
viewTransitionName: `_${toast.key.slice(2)}`,
126-
viewTransitionClass: classNames(toastContainerStyles, 'toast', placement)
129+
viewTransitionClass: classNames(
130+
toastContainerStyles,
131+
'toast',
132+
placement,
133+
{'fadeOnly': shouldFade}
134+
)
127135
}}>
128136
<Toast
129137
toast={toast}

packages/@react-spectrum/toast/src/toastContainer.css

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@
111111
}
112112
}
113113

114+
@keyframes fade-out {
115+
to {
116+
opacity: 0;
117+
}
118+
}
119+
114120
::view-transition-group(.toast) {
115121
animation-duration: 300ms;
116122
}
@@ -142,3 +148,7 @@
142148
::view-transition-old(.toast):only-child {
143149
animation-name: slide-out;
144150
}
151+
152+
::view-transition-old(.toast.fadeOnly):only-child {
153+
animation-name: fade-out;
154+
}

0 commit comments

Comments
 (0)