import {Component, html} from 'htm/preact'; import ExternalAnchor from '../components/external-anchor.js'; import SharedFooter from '../components/shared-footer.js'; import {getThemeByCssClass, setTheme, themes} from '../utilities/themes.js'; type Props = Record; type State = { selectedTheme: string; }; export default class SettingsPage extends Component { constructor(props: Props) { super(props); this.state = { selectedTheme: window.localStorage.getItem('theme') ?? themes[0].cssClass, }; } onThemeChange = (event: Event) => { const theme = getThemeByCssClass((event.target as HTMLSelectElement).value); setTheme(theme); this.setState({selectedTheme: theme.cssClass}); }; render() { document.title = 'Settings'; const {selectedTheme} = this.state; const themeOptions = themes.map( (theme) => html``, ); const moreThemesLink = html` <${ExternalAnchor} text="more themes issue" url="https://github.com/Bauke/href-plus/issues/17" /> `; return html`

Settings

Theme

If your favorite theme isn't in the list here, please make a request for it in the ${moreThemesLink}!

<${SharedFooter} page="settings" />
`; } }