import React from 'react'; import {Button, Col, Form} from 'react-bootstrap'; import style from './GeneralSettings.module.css'; import GlobalInfos from '../../utils/GlobalInfos'; import InfoHeaderItem from '../../elements/InfoHeaderItem/InfoHeaderItem'; import {faArchive, faBalanceScaleLeft, faRulerVertical} from '@fortawesome/free-solid-svg-icons'; import {faAddressCard} from '@fortawesome/free-regular-svg-icons'; import {version} from '../../../package.json'; import {APINode, callAPI, setCustomBackendDomain} from '../../utils/Api'; import {SettingsTypes} from '../../types/ApiTypes'; import {GeneralSuccess} from '../../types/GeneralTypes'; interface state { passwordsupport: boolean, tmdbsupport: boolean, customapi: boolean, videopath: string, tvshowpath: string, mediacentername: string, password: string, apipath: string, videonr: number, dbsize: number, difftagnr: number, tagsadded: number } interface props {} /** * Component for Generalsettings tag on Settingspage * handles general settings of mediacenter which concerns to all pages */ class GeneralSettings extends React.Component { constructor(props: props) { super(props); this.state = { passwordsupport: false, tmdbsupport: false, customapi: false, videopath: '', tvshowpath: '', mediacentername: '', password: '', apipath: '', videonr: 0, dbsize: 0, difftagnr: 0, tagsadded: 0 }; } componentDidMount(): void { this.loadSettings(); } render(): JSX.Element { const themeStyle = GlobalInfos.getThemeStyle(); return ( <>
{ e.preventDefault(); this.saveSettings(); }}> Video Path this.setState({videopath: ee.target.value})}/> TV Show Path this.setState({tvshowpath: e.target.value})}/> { if (this.state.customapi) { setCustomBackendDomain(''); } this.setState({customapi: !this.state.customapi}); }} /> {this.state.customapi ? API Backend url { this.setState({apipath: e.target.value}); setCustomBackendDomain(e.target.value); }}/> : null} { this.setState({passwordsupport: !this.state.passwordsupport}); }} /> {this.state.passwordsupport ? Password this.setState({password: e.target.value})}/> : null } { this.setState({tmdbsupport: !this.state.tmdbsupport}); }} /> { GlobalInfos.enableDarkTheme(!GlobalInfos.isDarkTheme()); this.forceUpdate(); // todo initiate rerender }} /> The name of the Mediacenter this.setState({mediacentername: e.target.value})}/>
Version: {version}
); } /** * inital load of already specified settings from backend */ loadSettings(): void { callAPI(APINode.Settings, {action: 'loadGeneralSettings'}, (result: SettingsTypes.loadGeneralSettingsType) => { this.setState({ videopath: result.video_path, tvshowpath: result.episode_path, mediacentername: result.mediacenter_name, password: result.password, passwordsupport: result.passwordEnabled, tmdbsupport: result.TMDB_grabbing, videonr: result.videonr, dbsize: result.dbsize, difftagnr: result.difftagnr, tagsadded: result.tagsadded }); }); } /** * save the selected and typed settings to the backend */ saveSettings(): void { callAPI(APINode.Settings, { action: 'saveGeneralSettings', password: this.state.passwordsupport ? this.state.password : '-1', videopath: this.state.videopath, tvshowpath: this.state.tvshowpath, mediacentername: this.state.mediacentername, tmdbsupport: this.state.tmdbsupport, darkmodeenabled: GlobalInfos.isDarkTheme().toString() }, (result: GeneralSuccess) => { if (result.result) { console.log('successfully saved settings'); // todo 2020-07-10: popup success } else { console.log('failed to save settings'); // todo 2020-07-10: popup error } }); } } export default GeneralSettings;