import { type Accessor, createEffect, createSignal, type Setter, on } from "solid-js"; import type { AppOptions } from "../types"; import "./OptionsModal.css"; import "./Dialog.css"; import "toastify-js/src/toastify.css"; import { toast } from "../utils"; import { MediaFormat } from "music-server-shared/types"; interface OptionsModalProps { showOptions: Accessor; setShowOptions: Setter; options: Accessor; setOptions: (options: AppOptions) => void; } export default function OptionsModal(props: OptionsModalProps) { const [newOptions, setNewOptions] = createSignal(props.options()); let dialogElement!: HTMLDialogElement; let formElement!: HTMLFormElement; createEffect( on(props.showOptions, () => { if (props.showOptions()) { dialogElement.showModal(); setNewOptions({ ...props.options() }); } }), ); function handleSave() { if (!formElement.reportValidity()) return; toast("Saved changes", "success"); props.setOptions(newOptions()); handleClose(); } function handleClose() { dialogElement.close(); props.setShowOptions(false); } async function deleteServerCache() { const response = await fetch("/reset-cache", { method: "POST" }).catch(() => {}); if (!response || response.status !== 200) { toast("Clearing server cache failed", "error"); } else { toast("Server cache cleared", "info"); } } return (
Player Options

setNewOptions({ ...newOptions(), rememberDir: e.target.checked })} />
setNewOptions({ ...newOptions(), enableTranscoding: e.target.checked })} />
setNewOptions({ ...newOptions(), disableChunkedTranscoding: e.target.checked })} />
setNewOptions({ ...newOptions(), maxDownloads: e.target.valueAsNumber })} />
setNewOptions({ ...newOptions(), maxTranscodes: e.target.valueAsNumber })} />
); }