Skip to content

Commit df5380c

Browse files
committed
feat: Add automatic dark mode support
Signed-off-by: Felicitas Pojtinger <[email protected]>
1 parent 57f34aa commit df5380c

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

pkg/components/home.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77

88
type Home struct {
99
app.Compo
10+
11+
removeEventListener func()
1012
}
1113

1214
func (c *Home) Render() app.UI {
@@ -185,3 +187,44 @@ func (c *Home) Render() app.UI {
185187
},
186188
}
187189
}
190+
191+
func (c *Home) OnMount(ctx app.Context) {
192+
darkModeMediaQuery := app.Window().Call("matchMedia", "(prefers-color-scheme: dark)")
193+
194+
updateTheme := func() {
195+
app.
196+
Window().
197+
Get("document").
198+
Get("documentElement").
199+
Get("classList").
200+
Call("toggle", "pf-v6-theme-dark", darkModeMediaQuery.Get("matches"))
201+
}
202+
203+
updateThemeEventListener := app.FuncOf(func(this app.Value, args []app.Value) any {
204+
updateTheme()
205+
206+
return nil
207+
})
208+
209+
darkModeMediaQuery.Call(
210+
"addEventListener",
211+
"change",
212+
updateThemeEventListener,
213+
)
214+
215+
c.removeEventListener = func() {
216+
darkModeMediaQuery.Call(
217+
"removeEventListener",
218+
"change",
219+
updateThemeEventListener,
220+
)
221+
}
222+
223+
updateTheme()
224+
}
225+
226+
func (c *Home) OnDismount() {
227+
if c.removeEventListener != nil {
228+
c.removeEventListener()
229+
}
230+
}

0 commit comments

Comments
 (0)