aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections/KeyRestrictionRow.tsx
diff options
context:
space:
mode:
authorSam Wilkins <samwilkins333@gmail.com>2019-07-29 13:21:41 -0400
committerSam Wilkins <samwilkins333@gmail.com>2019-07-29 13:21:41 -0400
commit18663c72459d551d154a555194ecb88729af574f (patch)
tree416a98cd8fe34dfb7ad9827941c13f3d4892f2c8 /src/client/views/collections/KeyRestrictionRow.tsx
parent27cafb6eebd1c6229c3377187a5c0043db25ba0a (diff)
parente7ea2028f54787d6c92fb22b789f17b7268d3793 (diff)
merged with master
Diffstat (limited to 'src/client/views/collections/KeyRestrictionRow.tsx')
-rw-r--r--src/client/views/collections/KeyRestrictionRow.tsx50
1 files changed, 50 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..9c3c9c07c
--- /dev/null
+++ b/src/client/views/collections/KeyRestrictionRow.tsx
@@ -0,0 +1,50 @@
+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: PastelSchemaPalette.get(this._contains ? "green" : "red") }}
+ 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