Skip to content

Commit 3886f16

Browse files
BijinDevhrb-hub
andcommitted
Don't close snackbar if it is hovered
close #9534 Co-authored-by: hrb-hub <[email protected]>
1 parent 656f1d1 commit 3886f16

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

src/common/gui/base/SnackBar.ts

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ type SnackBarAttrs = {
2323
message: MaybeTranslation
2424
button: ButtonAttrs | null
2525
dismissButton?: IconButtonAttrs
26+
onHoverChange: (hovered: boolean) => void
2627
}
27-
type QueueItem = SnackBarAttrs & {
28+
type QueueItem = Omit<SnackBarAttrs, "onHoverChange"> & {
2829
onClose: ((timedOut: boolean) => unknown) | null
2930
onShow: (() => unknown) | null
3031
doCancel: { cancel: () => unknown }
@@ -38,11 +39,22 @@ let cancelCurrentSnackbar: (() => unknown) | null = null
3839
class SnackBar implements Component<SnackBarAttrs> {
3940
view(vnode: Vnode<SnackBarAttrs>) {
4041
// use same padding as MinimizedEditor
41-
return m(".snackbar-content.flex.flex-space-between.border-radius.plr.pb-xs.pt-xs", [
42-
m(".flex.center-vertically.smaller", lang.getTranslationText(vnode.attrs.message)),
43-
vnode.attrs.button ? m(".flex-end.center-vertically.pl", m(Button, vnode.attrs.button)) : null,
44-
vnode.attrs.dismissButton ? m(".flex.items-center.justify-right", [m(IconButton, vnode.attrs.dismissButton)]) : null,
45-
])
42+
return m(
43+
".snackbar-content.flex.flex-space-between.border-radius.plr.pb-xs.pt-xs.content-hover",
44+
{
45+
onmouseenter: () => {
46+
vnode.attrs.onHoverChange(true)
47+
},
48+
onmouseleave: () => {
49+
vnode.attrs.onHoverChange(false)
50+
},
51+
},
52+
[
53+
m(".flex.center-vertically.smaller", lang.getTranslationText(vnode.attrs.message)),
54+
vnode.attrs.button ? m(".flex-end.center-vertically.pl", m(Button, vnode.attrs.button)) : null,
55+
vnode.attrs.dismissButton ? m(".flex.items-center.justify-right", [m(IconButton, vnode.attrs.dismissButton)]) : null,
56+
],
57+
)
4658
}
4759
}
4860

@@ -161,6 +173,9 @@ function showNextNotification() {
161173
message,
162174
button,
163175
dismissButton: dismissButton,
176+
onHoverChange: (isHovered) => {
177+
hovered = isHovered
178+
},
164179
}),
165180
},
166181
"slide-bottom",
@@ -169,8 +184,14 @@ function showNextNotification() {
169184
)
170185

171186
let closed = false
187+
let hovered = false
172188

173189
const closeAndOpenNext = (timedOut: boolean) => {
190+
if (timedOut && hovered) {
191+
debounce(1000, closeAndOpenNext)(true)
192+
return
193+
}
194+
174195
closed = true
175196
cancelCurrentSnackbar = null
176197

0 commit comments

Comments
 (0)