* Scaffolding for undo-redo * undo redo working Poc commit * memory performance improvements by diffing * dont run update on undo/redo" * merging widget postion update and canvas bottom row update into one dsl update. * fix tabs widget * Visible updates per undo redo action (#6838) Co-authored-by: Rahul R <rahulramesha@Rahuls-MacBook-Pro.local> * resize atomic operation * fix switch control state issue * disallow undo/redo for snipping and comment mode * disallow undo/redo for snipping and comment mode * fix color picker issue in undo/redo * add test for replayDSL * option control fix, adding logs * minor position change undo redo updates * add test cases for replayHelpers * property Upade visual change * remove unused code * global hot key jest test for undo redo * Fixing batch updates on property change.. * add tests for toggle control in property pane * unwanted utils. * add tests for text control * add tests for deletion * add tests for dropping a new widget * adding jest test for replayUtils * add move widget tests * add tests for color picker control * add analytics for undo/redo * add analytics for undo/redo * tab addition atomic * cypress tests for propertyPane, toasts and radiowidget optionControl * replayDSL end of redo stack fix * property update changes * menu option control debounce input * color picker empty undo fix * fix cypress tests * widget add/remove atomic * revert alternative approach to handle atomic operations * update replayDSL test * add some comments * addressing review comments * flash color for property pane controls * Fixing adding of tabs widget as well. * code review comments. * merging widget postion update and canvas bottom row update into one dsl update. * fix ordering of tabs property control * meta property update canvas min height. * fixing failed specs. * Fixing entity explorer update on deleting tab from entity explorer. * address review comments and minor property update changes * fixing failing tests * merge conflicts * changes to cater widget api. * fix suggested widget table issue * draggable list for undo redo * fix widget name focus * excluding canvas updates. * fixing codeEditor update on propertySection collapse * fixed failing test case Co-authored-by: Abhinav Jha <abhinav@appsmith.com> Co-authored-by: Rahul R <rahulramesha@Rahuls-MacBook-Pro.local> Co-authored-by: root <root@DESKTOP-9GENCK0.localdomain> Co-authored-by: Ashok Kumar M <35134347+marks0351@users.noreply.github.com> Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local>
127 lines
3.2 KiB
TypeScript
127 lines
3.2 KiB
TypeScript
import React, { useContext } from "react";
|
|
import BaseControl, { ControlProps } from "./BaseControl";
|
|
import { StyledDynamicInput } from "./StyledControls";
|
|
import { InputType } from "components/constants";
|
|
import CodeEditor, {
|
|
CodeEditorExpected,
|
|
} from "components/editorComponents/CodeEditor";
|
|
import {
|
|
EditorModes,
|
|
EditorSize,
|
|
EditorTheme,
|
|
TabBehaviour,
|
|
} from "components/editorComponents/CodeEditor/EditorConfig";
|
|
import { CollapseContext } from "pages/Editor/PropertyPane/PropertySection";
|
|
|
|
export function InputText(props: {
|
|
label: string;
|
|
value: string;
|
|
onChange: (event: React.ChangeEvent<HTMLTextAreaElement> | string) => void;
|
|
evaluatedValue?: any;
|
|
expected?: CodeEditorExpected;
|
|
placeholder?: string;
|
|
dataTreePath?: string;
|
|
additionalAutocomplete?: Record<string, Record<string, unknown>>;
|
|
theme?: EditorTheme;
|
|
hideEvaluatedValue?: boolean;
|
|
}) {
|
|
const {
|
|
dataTreePath,
|
|
evaluatedValue,
|
|
expected,
|
|
hideEvaluatedValue,
|
|
onChange,
|
|
placeholder,
|
|
value,
|
|
} = props;
|
|
|
|
//subscribing to context to help re-render component on Property section open or close
|
|
const isOpen = useContext(CollapseContext);
|
|
|
|
return (
|
|
<StyledDynamicInput>
|
|
<CodeEditor
|
|
additionalDynamicData={props.additionalAutocomplete}
|
|
dataTreePath={dataTreePath}
|
|
evaluatedValue={evaluatedValue}
|
|
expected={expected}
|
|
hideEvaluatedValue={hideEvaluatedValue}
|
|
input={{
|
|
value: value,
|
|
onChange: onChange,
|
|
}}
|
|
isEditorHidden={!isOpen}
|
|
mode={EditorModes.TEXT_WITH_BINDING}
|
|
placeholder={placeholder}
|
|
size={EditorSize.EXTENDED}
|
|
tabBehaviour={TabBehaviour.INDENT}
|
|
theme={props.theme || EditorTheme.LIGHT}
|
|
/>
|
|
</StyledDynamicInput>
|
|
);
|
|
}
|
|
|
|
class InputTextControl extends BaseControl<InputControlProps> {
|
|
render() {
|
|
const {
|
|
additionalAutoComplete,
|
|
dataTreePath,
|
|
defaultValue,
|
|
expected,
|
|
hideEvaluatedValue,
|
|
label,
|
|
placeholderText,
|
|
propertyValue,
|
|
} = this.props;
|
|
|
|
return (
|
|
<InputText
|
|
additionalAutocomplete={additionalAutoComplete}
|
|
dataTreePath={dataTreePath}
|
|
expected={expected}
|
|
hideEvaluatedValue={hideEvaluatedValue}
|
|
label={label}
|
|
onChange={this.onTextChange}
|
|
placeholder={placeholderText}
|
|
theme={this.props.theme}
|
|
value={propertyValue ? propertyValue : defaultValue}
|
|
/>
|
|
);
|
|
}
|
|
|
|
isNumberType(): boolean {
|
|
const { inputType } = this.props;
|
|
switch (inputType) {
|
|
case "CURRENCY":
|
|
case "INTEGER":
|
|
case "NUMBER":
|
|
case "PHONE_NUMBER":
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
onTextChange = (event: React.ChangeEvent<HTMLTextAreaElement> | string) => {
|
|
let value = event;
|
|
if (typeof event !== "string") {
|
|
value = event.target.value;
|
|
}
|
|
this.updateProperty(this.props.propertyName, value);
|
|
};
|
|
|
|
static getControlType() {
|
|
return "INPUT_TEXT";
|
|
}
|
|
}
|
|
|
|
export interface InputControlProps extends ControlProps {
|
|
placeholderText: string;
|
|
inputType: InputType;
|
|
validationMessage?: string;
|
|
isDisabled?: boolean;
|
|
defaultValue?: any;
|
|
}
|
|
|
|
export default InputTextControl;
|