UNPKG

@docsvision/webclient

Version:

Type definitions for DocsVision WebClient scripts and extensions.

123 lines (122 loc) 6.75 kB
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); }