blob: aef4d0edce71bf0fa908780992768695a29b0a4e [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
import React from 'react';
import ReactDOM from 'react-dom';
import {Form, ButtonGroup, ToggleButton} from 'react-bootstrap';
export default class KeySearchFields extends React.Component {
constructor (props) {
super(props);
}
toggleByKeys () {
this.props.toggleByKeys();
}
toggleBetweenKeys () {
this.props.toggleBetweenKeys();
}
updateBetweenKeys () {
this.props.updateBetweenKeys({
startkey: this.startkey.value,
endkey: this.endkey.value,
include: this.props.betweenKeys.include
});
}
updateInclusiveEnd () {
this.props.updateBetweenKeys({
include: !this.props.betweenKeys.include,
startkey: this.props.betweenKeys.startkey,
endkey: this.props.betweenKeys.endkey
});
}
updateByKeys (e) {
this.props.updateByKeys(e.target.value);
}
render () {
let betweenKeysClass = 'row-fluid js-keys-section ';
let byKeysClass = betweenKeysClass;
let betweenKeysButtonClass = 'drop-down btn ';
let byKeysButtonClass = betweenKeysButtonClass;
if (!this.props.showByKeys) {
byKeysClass += 'hide';
} else {
byKeysButtonClass += 'active';
}
if (!this.props.showBetweenKeys) {
betweenKeysClass += 'hide';
} else {
betweenKeysButtonClass += 'active';
}
return (
<div className="row m-2 mt-0">
<div className="col-12 mb-3">
<h5>Keys</h5>
</div>
<div className="col-12 mb-3">
<ButtonGroup>
<ToggleButton
id="byKeys"
type="checkbox"
variant="cf-secondary"
onClick={this.toggleByKeys.bind(this)}
className={byKeysButtonClass}
>
By Key(s)
</ToggleButton>
<ToggleButton
id="betweenKeys"
type="checkbox"
variant="cf-secondary"
onClick={this.toggleBetweenKeys.bind(this)}
className={betweenKeysButtonClass}
>
Between Keys
</ToggleButton>
</ButtonGroup>
</div>
<div className="col-12">
<div className={byKeysClass} id="js-showKeys">
<label htmlFor="keys-input" className="form-label">A key, or an array of keys</label>
<Form.Control
value={this.props.byKeys}
onChange={this.updateByKeys.bind(this)}
id="keys-input"
className="form-control"
rows="5"
as="textarea"
placeholder='Enter either a single key ["123"] or an array of keys ["123", "456"]. A key value is the first parameter emitted in a map function. For example emit("123", 1) the key is "123".'
/>
</div>
<div className={betweenKeysClass} id="js-showStartEnd">
<div className="row">
<div className="col-12">
<label htmlFor="startkey" className="form-label">Start key</label>
<Form.Control
id="startkey"
ref={node => this.startkey = node}
type="text"
onChange={this.updateBetweenKeys.bind(this)}
value={this.props.betweenKeys.startkey}
placeholder='e.g., "1234"'
/>
</div>
</div>
<div className="row mt-2">
<div className="col-12">
<label htmlFor="endkey" className="form-label">End key</label>
<Form.Control
id="endkey"
ref={node => this.endkey = node}
type="text"
onChange={this.updateBetweenKeys.bind(this)}
value={this.props.betweenKeys.endkey}
placeholder='e.g., "1234"'
/>
</div>
</div>
<div className="row mt-2">
<div className="col-12">
<Form.Check
id="qoIncludeEndKeyInResults"
label="Include end key in results"
onChange={this.updateInclusiveEnd.bind(this)}
checked={this.props.betweenKeys.include}
type="checkbox"
/>
</div>
</div>
</div>
</div>
</div>
);
}
}