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 } ) }