|
@@ -1,62 +0,0 @@
|
|
|
-import "./TextInput.scss";
|
|
|
-
|
|
|
-import React, { Component } from "react";
|
|
|
-import { selectNode, removeSelection } from "../utils";
|
|
|
-
|
|
|
-type Props = {
|
|
|
- value: string;
|
|
|
- onChange: (value: string) => void;
|
|
|
- label: string;
|
|
|
-};
|
|
|
-
|
|
|
-export class ProjectName extends Component<Props> {
|
|
|
- private handleFocus = (event: React.FocusEvent<HTMLElement>) => {
|
|
|
- selectNode(event.currentTarget);
|
|
|
- };
|
|
|
-
|
|
|
- private handleBlur = (event: React.FocusEvent<HTMLElement>) => {
|
|
|
- const value = event.currentTarget.innerText.trim();
|
|
|
- if (value !== this.props.value) {
|
|
|
- this.props.onChange(value);
|
|
|
- }
|
|
|
- removeSelection();
|
|
|
- };
|
|
|
-
|
|
|
- private handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {
|
|
|
- if (event.key === "Enter") {
|
|
|
- event.preventDefault();
|
|
|
- if (event.nativeEvent.isComposing || event.keyCode === 229) {
|
|
|
- return;
|
|
|
- }
|
|
|
- event.currentTarget.blur();
|
|
|
- }
|
|
|
- };
|
|
|
- private makeEditable = (editable: HTMLSpanElement | null) => {
|
|
|
- if (!editable) {
|
|
|
- return;
|
|
|
- }
|
|
|
- try {
|
|
|
- editable.contentEditable = "plaintext-only";
|
|
|
- } catch {
|
|
|
- editable.contentEditable = "true";
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- public render() {
|
|
|
- return (
|
|
|
- <span
|
|
|
- suppressContentEditableWarning
|
|
|
- ref={this.makeEditable}
|
|
|
- data-type="wysiwyg"
|
|
|
- className="TextInput"
|
|
|
- role="textbox"
|
|
|
- aria-label={this.props.label}
|
|
|
- onBlur={this.handleBlur}
|
|
|
- onKeyDown={this.handleKeyDown}
|
|
|
- onFocus={this.handleFocus}
|
|
|
- >
|
|
|
- {this.props.value}
|
|
|
- </span>
|
|
|
- );
|
|
|
- }
|
|
|
-}
|