Fix form options

jh-changes
Shin'ya UEOKA 5 years ago
parent 0dec6c641f
commit 8428671a0a
  1. 38
      src/settings/components/form/BlacklistForm.tsx
  2. 11
      src/settings/components/index.tsx
  3. 2
      src/settings/reducers/setting.ts
  4. 10
      src/shared/SettingData.ts
  5. 2
      src/shared/settings/Properties.ts

@ -2,10 +2,11 @@ import './BlacklistForm.scss';
import AddButton from '../ui/AddButton'; import AddButton from '../ui/AddButton';
import DeleteButton from '../ui/DeleteButton'; import DeleteButton from '../ui/DeleteButton';
import React from 'react'; import React from 'react';
import { BlacklistJSON } from '../../../shared/settings/Blacklist';
interface Props { interface Props {
value: string[]; value: BlacklistJSON;
onChange: (value: string[]) => void; onChange: (value: BlacklistJSON) => void;
onBlur: () => void; onBlur: () => void;
} }
@ -19,19 +20,24 @@ class BlacklistForm extends React.Component<Props> {
render() { render() {
return <div className='form-blacklist-form'> return <div className='form-blacklist-form'>
{ {
this.props.value.map((url, index) => { this.props.value
return <div key={index} className='form-blacklist-form-row'> .map((item, index) => {
<input data-index={index} type='text' name='url' if (typeof item !== 'string') {
className='column-url' value={url} // TODO support partial blacklist;
onChange={this.bindValue.bind(this)} return null;
onBlur={this.props.onBlur} }
/> return <div key={index} className='form-blacklist-form-row'>
<DeleteButton data-index={index} name='delete' <input data-index={index} type='text' name='url'
onClick={this.bindValue.bind(this)} className='column-url' value={item}
onBlur={this.props.onBlur} onChange={this.bindValue.bind(this)}
/> onBlur={this.props.onBlur}
</div>; />
}) <DeleteButton data-index={index} name='delete'
onClick={this.bindValue.bind(this)}
onBlur={this.props.onBlur}
/>
</div>;
})
} }
<AddButton name='add' style={{ float: 'right' }} <AddButton name='add' style={{ float: 'right' }}
onClick={this.bindValue.bind(this)} /> onClick={this.bindValue.bind(this)} />
@ -41,7 +47,7 @@ class BlacklistForm extends React.Component<Props> {
bindValue(e: any) { bindValue(e: any) {
let name = e.target.name; let name = e.target.name;
let index = e.target.getAttribute('data-index'); let index = e.target.getAttribute('data-index');
let next = this.props.value ? this.props.value.slice() : []; let next = this.props.value.slice();
if (name === 'url') { if (name === 'url') {
next[index] = e.target.value; next[index] = e.target.value;

@ -32,7 +32,7 @@ class SettingsComponent extends React.Component<Props> {
this.props.dispatch(settingActions.load()); this.props.dispatch(settingActions.load());
} }
renderFormFields(form: any) { renderFormFields(form: FormSettings) {
return <div> return <div>
<fieldset> <fieldset>
<legend>Keybindings</legend> <legend>Keybindings</legend>
@ -53,7 +53,7 @@ class SettingsComponent extends React.Component<Props> {
<fieldset> <fieldset>
<legend>Blacklist</legend> <legend>Blacklist</legend>
<BlacklistForm <BlacklistForm
value={form.blacklist} value={form.blacklist.toJSON()}
onChange={this.bindBlacklistForm.bind(this)} onChange={this.bindBlacklistForm.bind(this)}
onBlur={this.save.bind(this)} onBlur={this.save.bind(this)}
/> />
@ -62,7 +62,7 @@ class SettingsComponent extends React.Component<Props> {
<legend>Properties</legend> <legend>Properties</legend>
<PropertiesForm <PropertiesForm
types={Properties.types()} types={Properties.types()}
value={form.properties} value={form.properties.toJSON()}
onChange={this.bindPropertiesForm.bind(this)} onChange={this.bindPropertiesForm.bind(this)}
onBlur={this.save.bind(this)} onBlur={this.save.bind(this)}
/> />
@ -89,10 +89,9 @@ class SettingsComponent extends React.Component<Props> {
let fields = null; let fields = null;
let disabled = this.props.error.length > 0; let disabled = this.props.error.length > 0;
if (this.props.source === 'form') { if (this.props.source === 'form') {
fields = this.renderFormFields(this.props.form); fields = this.renderFormFields(this.props.form!!);
} else if (this.props.source === 'json') { } else if (this.props.source === 'json') {
fields = this.renderJsonFields( fields = this.renderJsonFields(this.props.json!!, this.props.error);
this.props.json as JSONTextSettings, this.props.error);
} }
return ( return (
<div> <div>

@ -2,6 +2,7 @@ import * as actions from '../actions';
import { import {
JSONTextSettings, FormSettings, SettingSource, JSONTextSettings, FormSettings, SettingSource,
} from '../../shared/SettingData'; } from '../../shared/SettingData';
import { DefaultSetting } from '../../shared/settings/Settings';
export interface State { export interface State {
source: SettingSource; source: SettingSource;
@ -13,6 +14,7 @@ export interface State {
const defaultState: State = { const defaultState: State = {
source: SettingSource.JSON, source: SettingSource.JSON,
json: JSONTextSettings.fromText(''), json: JSONTextSettings.fromText(''),
form: FormSettings.fromSettings(DefaultSetting),
error: '', error: '',
}; };

@ -141,13 +141,13 @@ export class JSONTextSettings {
} }
export class FormSettings { export class FormSettings {
private keymaps: FormKeymaps; public readonly keymaps: FormKeymaps;
private search: FormSearch; public readonly search: FormSearch;
private properties: Properties; public readonly properties: Properties;
private blacklist: Blacklist; public readonly blacklist: Blacklist;
constructor( constructor(
keymaps: FormKeymaps, keymaps: FormKeymaps,
@ -210,7 +210,7 @@ export class FormSettings {
keymaps: ReturnType<FormKeymaps['toJSON']>; keymaps: ReturnType<FormKeymaps['toJSON']>;
search: ReturnType<FormSearch['toJSON']>; search: ReturnType<FormSearch['toJSON']>;
properties: ReturnType<Properties['toJSON']>; properties: ReturnType<Properties['toJSON']>;
blacklist: string[]; blacklist: ReturnType<Blacklist['toJSON']>;
} { } {
return { return {
keymaps: this.keymaps.toJSON(), keymaps: this.keymaps.toJSON(),

@ -59,7 +59,7 @@ export default class Properties {
hintchars?: string; hintchars?: string;
smoothscroll?: boolean; smoothscroll?: boolean;
complete?: string; complete?: string;
}) { } = {}) {
this.hintchars = hintchars || defaultValues.hintchars; this.hintchars = hintchars || defaultValues.hintchars;
this.smoothscroll = smoothscroll || defaultValues.smoothscroll; this.smoothscroll = smoothscroll || defaultValues.smoothscroll;
this.complete = complete || defaultValues.complete; this.complete = complete || defaultValues.complete;