aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections/KeyRestrictionRow.tsx
diff options
context:
space:
mode:
authorbob <bcz@cs.brown.edu>2019-07-30 09:41:08 -0400
committerbob <bcz@cs.brown.edu>2019-07-30 09:41:08 -0400
commitfe2ae4e235a12198a530672d4db3fdcd167c6e65 (patch)
treef44fbc2b53eba3eadc51b851600b706c0e451d5a /src/client/views/collections/KeyRestrictionRow.tsx
parent5591060e868053c8839fcc1de1ae77d4dac361ac (diff)
parente041988b84553797699a5a232e26e72252460e01 (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.tsx51
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