diff --git a/src/components/ThemeSelector.js b/src/components/ThemeSelector.js
index 8c05a90..863edb7 100644
--- a/src/components/ThemeSelector.js
+++ b/src/components/ThemeSelector.js
@@ -1,15 +1,16 @@
import { h } from 'preact'
-export default function ({ themeList, currentTheme, setTheme }) {
- const options = themeList.map(theme => (
+export default function ({ themeEngine }) {
+ const options = themeEngine.themes.map(theme => (
))
return (
)
}
diff --git a/src/components/player/UrlPlayer.js b/src/components/player/UrlPlayer.js
index 1df1f68..da30ba3 100644
--- a/src/components/player/UrlPlayer.js
+++ b/src/components/player/UrlPlayer.js
@@ -9,7 +9,6 @@ const INITIAL_STATUS = {
}
export default function ({url}) {
- console.log(123, url)
const [status, setStatus] = useState(INITIAL_STATUS)
const [vm, setVM] = useState(null)
diff --git a/src/index.js b/src/index.js
index 4f84a1c..5dd9aa7 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,12 +1,9 @@
import { h, render } from 'preact'
-import { useState } from 'preact/hooks'
import { Route, Router, Switch } from 'wouter-preact'
import { useHashLocation } from '~/src/utils/utils.routing'
import {
- DEFAULT_THEME,
- themeList,
- assertTheme
+ useThemeEngine
} from '~/src/themes/themes'
import HomeView from '~/src/views/HomeView'
@@ -15,26 +12,20 @@ import PlayerView from '~/src/views/PlayerView'
import '~/src/style/base.css'
function App () {
- const [currentTheme, setCurrentTheme] =
- useState(DEFAULT_THEME)
-
- const setTheme = theme =>
- setCurrentTheme(assertTheme(theme))
+ const themeEngine = useThemeEngine()
return (
-
+
{params => }
diff --git a/src/themes/themes.js b/src/themes/themes.js
index 4e6c402..60b8694 100644
--- a/src/themes/themes.js
+++ b/src/themes/themes.js
@@ -1,6 +1,8 @@
+import { useState, useCallback } from 'preact/hooks'
+
import '~/src/style/themes.css'
-export const themeList = [
+const themes = [
'default',
'default-dark',
'nord',
@@ -9,9 +11,20 @@ export const themeList = [
'_raw'
]
-export const DEFAULT_THEME = themeList[0]
+const DEFAULT_THEME = themes[0]
-export const assertTheme = theme =>
- themeList.includes(theme)
+const assertTheme = theme =>
+ themes.includes(theme)
? theme
: DEFAULT_THEME
+
+export const useThemeEngine = (defaultTheme = DEFAULT_THEME) => {
+ const [currentTheme, setCurrentTheme] =
+ useState(DEFAULT_THEME)
+
+ const setTheme = useCallback(theme => {
+ setCurrentTheme(assertTheme(theme))
+ }, [currentTheme]);
+
+ return { currentTheme, setTheme, themes };
+}
diff --git a/src/views/HomeView.js b/src/views/HomeView.js
index 1aae88a..fbaba8a 100644
--- a/src/views/HomeView.js
+++ b/src/views/HomeView.js
@@ -14,7 +14,7 @@ const playButton = (name, url, theme) => (
Play "{name}"
)
-export default function ({ themeList, currentTheme, setTheme }) {
+export default function ({ themeEngine }) {
const [targetName, setTargetName] = useState(null)
const [targetUrl, setTargetUrl] = useState(null)
@@ -28,9 +28,7 @@ export default function ({ themeList, currentTheme, setTheme }) {
-
-
@@ -47,7 +45,7 @@ export default function ({ themeList, currentTheme, setTheme }) {
{ targetUrl
- ? playButton(targetName, targetUrl, currentTheme)
+ ? playButton(targetName, targetUrl, themeEngine.currentTheme)
: null }
)
}