From 7db7bad21d25ad5be63810d9c4511ccb3428b2f5 Mon Sep 17 00:00:00 2001 From: Sam Wilkins Date: Fri, 5 Jul 2019 20:37:06 -0400 Subject: data doc and persistence functionality added --- .../util/Import & Export/ImportMetadataEntry.tsx | 119 +++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/client/util/Import & Export/ImportMetadataEntry.tsx (limited to 'src/client/util/Import & Export/ImportMetadataEntry.tsx') diff --git a/src/client/util/Import & Export/ImportMetadataEntry.tsx b/src/client/util/Import & Export/ImportMetadataEntry.tsx new file mode 100644 index 000000000..3b2a6ebb5 --- /dev/null +++ b/src/client/util/Import & Export/ImportMetadataEntry.tsx @@ -0,0 +1,119 @@ +import React = require("react"); +import { observer } from "mobx-react"; +import { EditableView } from "../../views/EditableView"; +import { observable, action, computed } from "mobx"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faPlus } from "@fortawesome/free-solid-svg-icons"; +import { library } from '@fortawesome/fontawesome-svg-core'; +import { Opt } from "../../../new_fields/Doc"; + +interface KeyValueProps { + remove: (self: ImportMetadataEntry) => void; + next: () => void; +} + +const keyPlaceholder = "Key"; +const valuePlaceholder = "Value"; + +@observer +export default class ImportMetadataEntry extends React.Component { + @observable public key = keyPlaceholder; + @observable public value = valuePlaceholder; + + private keyRef = React.createRef(); + private valueRef = React.createRef(); + private checkRef = React.createRef(); + + constructor(props: KeyValueProps) { + super(props); + library.add(faPlus); + } + + @computed + public get valid() { + return (this.key.length > 0 && this.key !== keyPlaceholder) && (this.value.length > 0 && this.value !== valuePlaceholder); + } + + public get onDataDoc() { + return this.checkRef.current && this.checkRef.current.checked; + } + + @action + updateKey = (newKey: string) => { + this.key = newKey; + this.keyRef.current && this.keyRef.current.setIsFocused(false); + this.valueRef.current && this.valueRef.current.setIsFocused(true); + this.key.length === 0 && (this.key = keyPlaceholder); + return true; + } + + @action + updateValue = (newValue: string, shiftDown: boolean) => { + this.value = newValue; + this.valueRef.current && this.valueRef.current.setIsFocused(false); + this.value.length > 0 && shiftDown && this.props.next(); + this.value.length === 0 && (this.value = valuePlaceholder); + return true; + } + + render() { + let keyValueStyle: React.CSSProperties = { + paddingLeft: 10, + width: "50%", + opacity: this.valid ? 1 : 0.5, + }; + return ( +
+ +
+ ""} + oneLine={true} + /> +
+
+ ""} + oneLine={true} + /> +
+
this.props.remove(this)} title={"Delete Entry"}> + +
+
+ ); + } + +} \ No newline at end of file -- cgit v1.2.3-70-g09d2