import { type Accessor, createEffect, type Setter, on, createSignal, Switch, Match } from "solid-js"; import { FileDisplay, 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"; import { createStore } from "solid-js/store"; interface OptionsModalProps { showOptions: Accessor; setShowOptions: Setter; options: AppOptions; setOptions: (options: AppOptions) => void; } export default function OptionsModal(props: OptionsModalProps) { //clone, otherwise it shares the reference const [newOptions, setNewOptions] = createStore({ ...props.options }); const [optionsPage, setOptionsPage] = createSignal(1); let dialogElement!: HTMLDialogElement; let formElement!: HTMLFormElement; createEffect( on(props.showOptions, () => { if (props.showOptions()) { dialogElement.showModal(); setNewOptions(props.options); setOptionsPage(1); } }), ); function handleSave(e: Event) { e.preventDefault(); 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", credentials: "same-origin" }).catch(() => {}); if (!response || response.status !== 200) { toast("Clearing server cache failed", "error"); } else { toast("Server cache cleared", "info"); } } return ( e.target.nodeName === "DIALOG" && handleClose()}>
Player Options

setNewOptions("enableTranscoding", e.target.checked)} />
setNewOptions("disableChunkedTranscoding", e.target.checked)} disabled={!newOptions.enableTranscoding} />
setNewOptions("maxTranscodes", e.target.valueAsNumber)} />
setNewOptions("maxDownloads", e.target.valueAsNumber)} />
setNewOptions("transcodeCovers", e.target.checked)} />
setNewOptions("hideVolume", e.target.checked)} />
setNewOptions("hideCover", e.target.checked)} />
setNewOptions("hidePlaylistCover", e.target.checked)} />
setNewOptions("progressBarHeight", e.target.valueAsNumber)} />
setNewOptions("rememberDir", e.target.checked)} />
setNewOptions("duplicateWarning", e.target.checked)} />
); }