@docsvision/webclient
Version:
Type definitions for DocsVision WebClient scripts and extensions.
123 lines (122 loc) • 6.75 kB
TypeScript
import { EditPopover } from "@docsvision/webclient/Helpers/PopoverHelpers/EditPopover/EditPopover";
import { IEditPopoverProps } from "@docsvision/webclient/Helpers/PopoverHelpers/EditPopover/IEditPopoverProps";
import { BaseControlState } from "@docsvision/webclient/System/BaseControl";
import { BaseControlImpl } from "@docsvision/webclient/System/BaseControlImpl";
import { IDataChangedEventArgs } from "@docsvision/webclient/System/IDataChangedEventArgs";
import { InputBasedControl, InputBasedControlParams } from "@docsvision/webclient/System/InputBasedControl";
import { ICancelableEventArgs } from "@docsvision/webclient/System/ICancelableEventArgs";
import { IValidationResult } from "@docsvision/webclient/System/IValidationResult";
import React from "react";
/** Базовый класс состояния {@link InputBasedControl}. */
export interface InputBasedControlState<ModelT> extends BaseControlState, InputBasedControlParams<ModelT> {
currentValue: ModelT;
inputText: string;
inputFocused: boolean;
validationMessage: string;
hadValue: boolean;
isTooltipDisabled?: boolean;
}
/** Базовый класс реализации {@link InputBasedControl}. */
export declare abstract class InputBasedControlImpl<ModelT, PropsT extends InputBasedControlParams<ModelT>, StateT extends InputBasedControlState<ModelT>> extends BaseControlImpl<PropsT, StateT> {
editPopoverControl: InputBasedControl<ModelT, any, any>;
editPopoverParent: InputBasedControl<ModelT, any, any>;
text: HTMLElement;
/** Edit popover, that showed copy of control in edit-in-place mode */
editPopover: EditPopover;
/** Edit popover, where control currently located */
containingEditPopover: EditPopover;
input: HTMLElement;
constructor(props: PropsT, state?: StateT);
canShowEditDialog(): boolean;
/**
* Показывает диалог редактирования по месту.
*
* Внимание, в связи с изменениями в React 16, в Web-клиент начиная с версии 10 данный метод асинхронный.
*/
showEditDialog(): Promise<InputBasedControl<ModelT, PropsT, StateT>>;
hideEditDialog(): Promise<unknown>;
acceptEditDialog(): Promise<unknown>;
hasValue(): boolean;
protected onDataChanged(eventArgs: IDataChangedEventArgs): void;
protected onInPlaceEditOpening(callback?: () => void): Promise<any>;
protected onInPlaceEditOpened(): void;
protected isLeftButton(): boolean;
protected onInPlaceEditClosing(sender: any, args: ICancelableEventArgs<any>): void;
protected onInPlaceEditClosed(): void;
validate(params: any): IValidationResult;
protected get editAvailable(): boolean;
getTabIndex(): 0 | -1;
protected attachInput(elem: HTMLElement): void;
protected getInputElem(): HTMLElement;
protected attachText(textElem: any): void;
/**
* Создает и рендерит диалог редактирования по месту.
*
* Внимание, в связи с изменениями в React 16, в Web-клиент начиная с версии 10 данный метод асинхронный.
*/
protected showEditPopover(popoverOptions?: IEditPopoverProps): Promise<InputBasedControl<ModelT, PropsT, StateT>>;
protected onEditPopoverShowed(control: InputBasedControlImpl<any, PropsT, StateT>): void;
componentWillUnmount(): void;
UNSAFE_componentWillMount(): void;
protected getCssClass(): string;
protected onInputFocus(event: React.FocusEvent<any>): void;
protected onInputBlur(event: React.FocusEvent<any>): void;
protected onPlaceholderClick(event: any): void;
protected onValueClick(): void;
protected renderValidationMessage(): JSX.Element;
protected getInputTitle(): string;
protected onInputAndPlaceholderClick(): void;
protected renderInputWithPlaceholder(options?: {
hideTooltip: boolean;
}): React.ReactNode;
protected updateValidationMessage(): void;
protected editModeRender(): JSX.Element;
protected getValueTitle(): string;
protected renderWithText(): JSX.Element;
protected editInPlaceModeRender(): React.ReactNode;
protected viewModeRender(): JSX.Element;
protected simpleViewModeRender(): JSX.Element;
protected renderSimpleViewLabel(): JSX.Element;
protected renderSimpleViewValue(): JSX.Element;
renderControl(): {};
protected abstract getTextValue(): string;
/**
* При переопределении в производных классах должен рендерить контрол в соответствующий элемент.
*
* Например:
*
* protected renderInto(props: NumberParams, container: HTMLElement): void {
* ReactDOM.render(<NumberControl {...props } key={props.name} />, container);
* }
*
* Внимание! В Web-клиенте версии 9 данный метод возвращал экземпляр контрола.
* В версии 10 он не возвращает значение, т.к. в React 16 изменилась логик метода ReactDOM.render.
*
* @param props Параметры контрола
* @param container DOM-элемент, куда следует отрендерить контрол.
*/
protected abstract renderInto(props: PropsT, container: HTMLElement): void;
protected getDefaultValue(): ModelT;
protected onInputChange(event: any): void;
protected get editPopoverControlImpl(): InputBasedControlImpl<ModelT, any, any>;
protected get editPopoverParentImpl(): InputBasedControlImpl<ModelT, any, any>;
setValue(value: ModelT, redraw: boolean): void;
setValueInternal(value: ModelT): void;
getValue(): ModelT;
/** Тоже что и {@link InputBasedControlParams.value} */
get value(): ModelT;
set value(val: ModelT);
protected getEditAvailable(): boolean;
protected initEditPopover(popover: EditPopover): void;
focus(): void;
protected renderEditPopover(popover: EditPopover): Promise<InputBasedControl<ModelT, PropsT, StateT>>;
protected getCurrentPlaceholder(): string[];
protected renderPlaceholder(): JSX.Element;
protected onInputKeyDown(ev: React.KeyboardEvent<any>): void;
protected onIconKeyDown(e: React.KeyboardEvent): void;
protected getInputProps(): React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
protected renderInput(): React.ReactNode;
protected get editInPlaceAvailable(): boolean;
get defaultValue(): ModelT;
set defaultValue(value: ModelT);
}