diff options
Diffstat (limited to 'src/settings/components/form/PartialBlacklistForm.tsx')
-rw-r--r-- | src/settings/components/form/PartialBlacklistForm.tsx | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/settings/components/form/PartialBlacklistForm.tsx b/src/settings/components/form/PartialBlacklistForm.tsx new file mode 100644 index 0000000..0702913 --- /dev/null +++ b/src/settings/components/form/PartialBlacklistForm.tsx @@ -0,0 +1,79 @@ +import './PartialBlacklistForm.scss'; +import AddButton from '../ui/AddButton'; +import DeleteButton from '../ui/DeleteButton'; +import React from 'react'; +import Blacklist, { BlacklistItem } from '../../../shared/settings/Blacklist'; + +interface Props { + value: Blacklist; + onChange: (value: Blacklist) => void; + onBlur: () => void; +} + +class PartialBlacklistForm extends React.Component<Props> { + public static defaultProps: Props = { + value: new Blacklist([]), + onChange: () => {}, + onBlur: () => {}, + }; + + render() { + return <div className='form-partial-blacklist-form'> + <div className='form-partial-blacklist-form-header'> + <div className='column-url'>URL</div> + <div className='column-keys'>Keys</div> + </div> + { + this.props.value.items.map((item, index) => { + if (!item.partial) { + return null; + } + return <div key={index} className='form-partial-blacklist-form-row'> + <input data-index={index} type='text' name='url' + className='column-url' value={item.pattern} + onChange={this.bindValue.bind(this)} + onBlur={this.props.onBlur} + /> + <input data-index={index} type='text' name='keys' + className='column-keys' value={item.keys.join(',')} + onChange={this.bindValue.bind(this)} + onBlur={this.props.onBlur} + /> + <DeleteButton data-index={index} name='delete' + onClick={this.bindValue.bind(this)} + onBlur={this.props.onBlur} + /> + </div>; + }) + } + <AddButton name='add' style={{ float: 'right' }} + onClick={this.bindValue.bind(this)} /> + </div>; + } + + bindValue(e: any) { + let name = e.target.name; + let index = e.target.getAttribute('data-index'); + let items = this.props.value.items; + + if (name === 'url') { + let current = items[index]; + items[index] = new BlacklistItem(e.target.value, true, current.keys); + } else if (name === 'keys') { + let current = items[index]; + items[index] = new BlacklistItem( + current.pattern, true, e.target.value.split(',')); + } else if (name === 'add') { + items.push(new BlacklistItem('', true, [])); + } else if (name === 'delete') { + items.splice(index, 1); + } + + this.props.onChange(new Blacklist(items)); + if (name === 'delete') { + this.props.onBlur(); + } + } +} + +export default PartialBlacklistForm; |