// ============================================================================== // Copyright (C) 2019 - Philip Paquette, Steven Bocco // // This program is free software: you can redistribute it and/or modify it under // the terms of the GNU Affero General Public License as published by the Free // Software Foundation, either version 3 of the License, or (at your option) any // later version. // // This program is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS // FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more // details. // // You should have received a copy of the GNU Affero General Public License along // with this program. If not, see . // ============================================================================== import React from 'react'; import {Forms} from "../components/forms"; import {UTILS} from "../../diplomacy/utils/utils"; import PropTypes from "prop-types"; import {DipStorage} from "../utils/dipStorage"; export class ConnectionForm extends React.Component { constructor(props) { super(props); // Load fields values from local storage. const initialState = this.initState(); const savedState = DipStorage.getConnectionForm(); if (savedState) { if (savedState.hostname) initialState.hostname = savedState.hostname; if (savedState.port) initialState.port = savedState.port; if (savedState.username) initialState.username = savedState.username; if (savedState.showServerFields) initialState.showServerFields = savedState.showServerFields; } this.state = initialState; this.updateServerFieldsView = this.updateServerFieldsView.bind(this); this.onChange = this.onChange.bind(this); } initState() { return { hostname: window.location.hostname, port: (window.location.protocol.toLowerCase() === 'https:') ? 8433 : 8432, username: '', password: '', showServerFields: false }; } updateServerFieldsView() { DipStorage.setConnectionshowServerFields(!this.state.showServerFields); this.setState({showServerFields: !this.state.showServerFields}); } onChange(newState) { const initialState = this.initState(); if (newState.hostname !== initialState.hostname) DipStorage.setConnectionHostname(newState.hostname); else DipStorage.setConnectionHostname(null); if (newState.port !== initialState.port) DipStorage.setConnectionPort(newState.port); else DipStorage.setConnectionPort(null); if (newState.username !== initialState.username) DipStorage.setConnectionUsername(newState.username); else DipStorage.setConnectionUsername(null); if (this.props.onChange) this.props.onChange(newState); } render() { const onChange = Forms.createOnChangeCallback(this, this.onChange); const onSubmit = Forms.createOnSubmitCallback(this, this.props.onSubmit); return (
{Forms.createRow( Forms.createColLabel('username', 'username:'), )} {Forms.createRow( Forms.createColLabel('password', 'password:'), )}
server settings {this.state.showServerFields ? UTILS.html.UNICODE_BOTTOM_ARROW : UTILS.html.UNICODE_TOP_ARROW}
{this.state.showServerFields && (
{Forms.createRow( , )} {Forms.createRow( , )}
)}
{Forms.createRow('', Forms.createSubmit('connect', true, onSubmit))}
); } } ConnectionForm.propTypes = { onChange: PropTypes.func, onSubmit: PropTypes.func };