From babd967eb8ac62c4a6ff6734ff57e46faaa5bab6 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Mon, 17 Jul 2017 20:46:28 +0200 Subject: [web] options: make help and err permanently visible, improve perf --- web/src/js/components/Modal/Option.jsx | 121 +++++++++++++ web/src/js/components/Modal/OptionMaster.jsx | 257 --------------------------- web/src/js/components/Modal/OptionModal.jsx | 51 ++++-- web/src/js/ducks/connection.js | 2 +- web/src/js/ducks/options.js | 43 ++--- web/src/js/ducks/settings.js | 1 - web/src/js/ducks/ui/index.js | 4 +- web/src/js/ducks/ui/keyboard.js | 7 +- web/src/js/ducks/ui/option.js | 39 ---- web/src/js/ducks/ui/optionsEditor.js | 73 ++++++++ 10 files changed, 260 insertions(+), 338 deletions(-) create mode 100644 web/src/js/components/Modal/Option.jsx delete mode 100644 web/src/js/components/Modal/OptionMaster.jsx delete mode 100644 web/src/js/ducks/ui/option.js create mode 100644 web/src/js/ducks/ui/optionsEditor.js (limited to 'web/src/js') diff --git a/web/src/js/components/Modal/Option.jsx b/web/src/js/components/Modal/Option.jsx new file mode 100644 index 00000000..1aca23c2 --- /dev/null +++ b/web/src/js/components/Modal/Option.jsx @@ -0,0 +1,121 @@ +import React, { Component } from "react" +import PropTypes from "prop-types" +import { connect } from "react-redux" +import { update as updateOptions } from "../../ducks/options" +import { Key } from "../../utils" + +const stopPropagation = e => { + if (e.keyCode !== Key.ESC) { + e.stopPropagation() + } +} + +BooleanOption.PropTypes = { + value: PropTypes.bool.isRequired, + onChange: PropTypes.func.isRequired, +} +function BooleanOption({ value, onChange, ...props }) { + return ( + onChange(e.target.checked)} + {...props} + /> + ) +} + +StringOption.PropTypes = { + value: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, +} +function StringOption({ value, onChange, ...props }) { + return ( + onChange(e.target.value)} + {...props} + /> + ) +} + +NumberOption.PropTypes = { + value: PropTypes.number.isRequired, + onChange: PropTypes.func.isRequired, +} +function NumberOption({ value, onChange, ...props }) { + return ( + onChange(parseInt(e.target.value))} + {...props} + /> + ) +} + +ChoicesOption.PropTypes = { + value: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, +} +function ChoicesOption({ value, onChange, choices, ...props }) { + return ( + + ) +} + +StringSequenceOption.PropTypes = { + value: PropTypes.string.isRequired, + onChange: PropTypes.func.isRequired, +} +function StringSequenceOption({ value, onChange, ...props }) { + const height = Math.max(value.length, 1) + return