aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/EditableView.tsx
diff options
context:
space:
mode:
authoryipstanley <stanley_yip@brown.edu>2019-02-10 22:12:04 -0500
committeryipstanley <stanley_yip@brown.edu>2019-02-10 22:12:04 -0500
commit69f0b463a78c82aaf78ceb6a5162431424452311 (patch)
treea54c7129f36d307420422b3babfa6da4d85db67e /src/client/views/EditableView.tsx
parent2e930b98726a09e597106d43a6763dd36d038771 (diff)
parent099c5823f05285fc5086c5a433658cf06dc4a04b (diff)
Merge branch 'master' of https://github.com/browngraphicslab/Dash-Web into server_implementation
Diffstat (limited to 'src/client/views/EditableView.tsx')
-rw-r--r--src/client/views/EditableView.tsx39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/client/views/EditableView.tsx b/src/client/views/EditableView.tsx
new file mode 100644
index 000000000..2e784d3f9
--- /dev/null
+++ b/src/client/views/EditableView.tsx
@@ -0,0 +1,39 @@
+import React = require('react')
+import { observer } from 'mobx-react';
+import { observable, action } from 'mobx';
+
+export interface EditableProps {
+ GetValue(): string;
+ SetValue(value: string): boolean;
+ contents: any;
+}
+
+@observer
+export class EditableView extends React.Component<EditableProps> {
+ @observable
+ editing: boolean = false;
+
+ @action
+ onKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
+ if (e.key == "Enter" && !e.ctrlKey) {
+ this.props.SetValue(e.currentTarget.value);
+ this.editing = false;
+ } else if (e.key == "Escape") {
+ this.editing = false;
+ }
+ }
+
+ render() {
+ if (this.editing) {
+ return <input defaultValue={this.props.GetValue()} onKeyDown={this.onKeyDown} autoFocus onBlur={action(() => this.editing = false)}
+ style={{ width: "100%" }}></input>
+ } else {
+ return (
+ <div>
+ {this.props.contents}
+ <button onClick={action(() => this.editing = true)}>Edit</button>
+ </div>
+ )
+ }
+ }
+} \ No newline at end of file