import React, { useEffect, useState } from "react"; import { Button, Form } from "react-bootstrap"; import { useIntl } from "react-intl"; import { DurationInput, LoadingIndicator } from "src/components/Shared"; import { useConfiguration, useConfigureInterface } from "src/core/StashService"; import { useToast } from "src/hooks"; import { CheckboxGroup } from "./CheckboxGroup"; const allMenuItems = [ { id: "scenes", label: "Scenes" }, { id: "images", label: "Images" }, { id: "movies", label: "Movies" }, { id: "markers", label: "Markers" }, { id: "galleries", label: "Galleries" }, { id: "performers", label: "Performers" }, { id: "studios", label: "Studios" }, { id: "tags", label: "Tags" }, ]; const SECONDS_TO_MS = 1000; export const SettingsInterfacePanel: React.FC = () => { const intl = useIntl(); const Toast = useToast(); const { data: config, error, loading } = useConfiguration(); const [menuItemIds, setMenuItemIds] = useState( allMenuItems.map((item) => item.id) ); const [soundOnPreview, setSoundOnPreview] = useState(true); const [wallShowTitle, setWallShowTitle] = useState(true); const [wallPlayback, setWallPlayback] = useState("video"); const [maximumLoopDuration, setMaximumLoopDuration] = useState(0); const [autostartVideo, setAutostartVideo] = useState(false); const [slideshowDelay, setSlideshowDelay] = useState(0); const [showStudioAsText, setShowStudioAsText] = useState(false); const [css, setCSS] = useState(); const [cssEnabled, setCSSEnabled] = useState(false); const [language, setLanguage] = useState("en"); const [handyKey, setHandyKey] = useState(); const [updateInterfaceConfig] = useConfigureInterface({ menuItems: menuItemIds, soundOnPreview, wallShowTitle, wallPlayback, maximumLoopDuration, autostartVideo, showStudioAsText, css, cssEnabled, language, slideshowDelay, handyKey, }); useEffect(() => { const iCfg = config?.configuration?.interface; setMenuItemIds(iCfg?.menuItems ?? allMenuItems.map((item) => item.id)); setSoundOnPreview(iCfg?.soundOnPreview ?? true); setWallShowTitle(iCfg?.wallShowTitle ?? true); setWallPlayback(iCfg?.wallPlayback ?? "video"); setMaximumLoopDuration(iCfg?.maximumLoopDuration ?? 0); setAutostartVideo(iCfg?.autostartVideo ?? false); setShowStudioAsText(iCfg?.showStudioAsText ?? false); setCSS(iCfg?.css ?? ""); setCSSEnabled(iCfg?.cssEnabled ?? false); setLanguage(iCfg?.language ?? "en-US"); setSlideshowDelay(iCfg?.slideshowDelay ?? 5000); setHandyKey(iCfg?.handyKey ?? ""); }, [config]); async function onSave() { const prevCSS = config?.configuration.interface.css; const prevCSSenabled = config?.configuration.interface.cssEnabled; try { const result = await updateInterfaceConfig(); // eslint-disable-next-line no-console console.log(result); // Force refetch of custom css if it was changed if ( prevCSS !== result.data?.configureInterface.css || prevCSSenabled !== result.data?.configureInterface.cssEnabled ) { await fetch("/css", { cache: "reload" }); window.location.reload(); } Toast.success({ content: intl.formatMessage( { id: "toast.updated_entity" }, { entity: intl .formatMessage({ id: "configuration" }) .toLocaleLowerCase(), } ), }); } catch (e) { Toast.error(e); } } if (error) return

{error.message}

; if (loading) return ; return ( <>

{intl.formatMessage({ id: "config.ui.title" })}

{intl.formatMessage({ id: "config.ui.language.heading" })}
) => setLanguage(e.currentTarget.value) } >
{intl.formatMessage({ id: "config.ui.menu_items.heading" })}
{intl.formatMessage({ id: "config.ui.menu_items.description" })}
{intl.formatMessage({ id: "config.ui.scene_wall.heading" })}
setWallShowTitle(!wallShowTitle)} /> setSoundOnPreview(!soundOnPreview)} />
{intl.formatMessage({ id: "config.ui.preview_type.heading" })}
) => setWallPlayback(e.currentTarget.value) } > {intl.formatMessage({ id: "config.ui.preview_type.description" })}
{intl.formatMessage({ id: "config.ui.scene_list.heading" })}
{ setShowStudioAsText(!showStudioAsText); }} />
{intl.formatMessage({ id: "config.ui.scene_player.heading" })}
{ setAutostartVideo(!autostartVideo); }} />
{intl.formatMessage({ id: "config.ui.max_loop_duration.heading" })}
setMaximumLoopDuration(duration ?? 0)} /> {intl.formatMessage({ id: "config.ui.max_loop_duration.description", })}
{intl.formatMessage({ id: "config.ui.slideshow_delay.heading" })}
) => { setSlideshowDelay( Number.parseInt(e.currentTarget.value, 10) * SECONDS_TO_MS ); }} /> {intl.formatMessage({ id: "config.ui.slideshow_delay.description" })}
{intl.formatMessage({ id: "config.ui.custom_css.heading" })}
{ setCSSEnabled(!cssEnabled); }} /> ) => setCSS(e.currentTarget.value) } rows={16} className="col col-sm-6 text-input code" /> {intl.formatMessage({ id: "config.ui.custom_css.description" })}
{intl.formatMessage({ id: "config.ui.handy_connection_key" })}
) => { setHandyKey(e.currentTarget.value); }} /> {intl.formatMessage({ id: "config.ui.handy_connection_key_desc" })}

); };