diff options
| author | bob <bcz@cs.brown.edu> | 2019-07-30 09:41:08 -0400 |
|---|---|---|
| committer | bob <bcz@cs.brown.edu> | 2019-07-30 09:41:08 -0400 |
| commit | fe2ae4e235a12198a530672d4db3fdcd167c6e65 (patch) | |
| tree | f44fbc2b53eba3eadc51b851600b706c0e451d5a /src/client/views/collections/KeyRestrictionRow.tsx | |
| parent | 5591060e868053c8839fcc1de1ae77d4dac361ac (diff) | |
| parent | e041988b84553797699a5a232e26e72252460e01 (diff) | |
Merge branch 'master' into youtube-api-muhammed
Diffstat (limited to 'src/client/views/collections/KeyRestrictionRow.tsx')
| -rw-r--r-- | src/client/views/collections/KeyRestrictionRow.tsx | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/client/views/collections/KeyRestrictionRow.tsx b/src/client/views/collections/KeyRestrictionRow.tsx new file mode 100644 index 000000000..9baa250a6 --- /dev/null +++ b/src/client/views/collections/KeyRestrictionRow.tsx @@ -0,0 +1,51 @@ +import * as React from "react"; +import { observable, runInAction } from "mobx"; +import { observer } from "mobx-react"; +import { PastelSchemaPalette } from "../../../new_fields/SchemaHeaderField"; + +interface IKeyRestrictionProps { + contains: boolean; + script: (value: string) => void; +} + +@observer +export default class KeyRestrictionRow extends React.Component<IKeyRestrictionProps> { + @observable private _key = ""; + @observable private _value = ""; + @observable private _contains = this.props.contains; + + render() { + if (this._key && this._value) { + let parsedValue: string | number = `"${this._value}"`; + let parsed = parseInt(this._value); + let type = "string"; + if (!isNaN(parsed)) { + parsedValue = parsed; + type = "number"; + } + let scriptText = `${this._contains ? "" : "!"}((doc.${this._key} as ${type})${type === "string" ? ".includes" : "<="}(${parsedValue}))`; + this.props.script(scriptText); + } + else { + this.props.script(""); + } + + return ( + <div className="collectionViewBaseChrome-viewSpecsMenu-row"> + <input className="collectionViewBaseChrome-viewSpecsMenu-rowLeft" + value={this._key} + onChange={(e) => runInAction(() => this._key = e.target.value)} + placeholder="KEY" /> + <button className="collectionViewBaseChrome-viewSpecsMenu-rowMiddle" + style={{ background: this._contains ? "#77dd77" : "#ff6961" }} + onClick={() => runInAction(() => this._contains = !this._contains)}> + {this._contains ? "CONTAINS" : "DOES NOT CONTAIN"} + </button> + <input className="collectionViewBaseChrome-viewSpecsMenu-rowRight" + value={this._value} + onChange={(e) => runInAction(() => this._value = e.target.value)} + placeholder="VALUE" /> + </div> + ); + } +}
\ No newline at end of file |
