@docsvision/webclient
Version:
Type definitions for DocsVision WebClient scripts and extensions.
79 lines (78 loc) • 3.31 kB
TypeScript
import { SimpleEvent } from "@docsvision/webclient/System/SimpleEvent";
/** @internal */
export interface IModalStackItem {
zIndex: number;
onUpdate: (newZIndex: number) => void;
}
/**
* Вспомогательный класс для работы с приоритетом модальных окон.
* По умолчанию он уже используется в ModalBackdrop и ModalWindow,
* поэтому интегрировать его самостоятельно обычно не требуется.
*
* Пример использования (регистрируемся при показе окна и убираем регистрацию при скрытии):
*
* export interface IModalProps {
* }
*
* export interface IModalState {
* zIndex: number;
* }
*
* export class Modal extends React.Component<IModalProps, IModalState> {
* constructor(props) {
* super(props);
*
* this.state = {
* zIndex: ModalStack.DEFAULT_ZINDEX
* }
* }
*
* componentDidMount() {
* if (this.props.visible) {
* ModalStack.register(this, newZIndex => this.setState({ zIndex: newZIndex }));
* }
* }
*
* componentWillReceiveProps(nextProps: IModalBackdropProps) {
* if (this.props.visible != nextProps.visible) {
* if (nextProps.visible) {
* ModalStack.register(this, newZIndex => this.setState({ zIndex: newZIndex }));
* } else {
* ModalStack.unregister(this);
* }
* }
* }
*
* componentWillUnmount() {
* ModalStack.unregister(this);
* }
*
* render() {
* return (
* <div style={{ zIndex: this.state.zIndex }}>Моё модальное окно</div>
* );
* }
* }
*
*/
export declare class ModalStack {
static readonly DEFAULT_ZINDEX = 1000;
static lastZIndex: number;
static data: Map<any, IModalStackItem>;
static ModalRegistered: SimpleEvent<unknown>;
static ModalUnregistered: SimpleEvent<unknown>;
/**
* Зарегистрировать модальное окно
* @param modal Модальное окно
* @param onUpdate Вызывается при перерасчёте zIndex компонента, здесь зарегистрированное модальное окно должно перерисовать себя.
* @param updateAfterRegister Вызвать ли onUpdate сразу после регистрации или самому по-другому обработать
* zIndex через вернувшееся значение из функции.
*/
static register(modal: any, onUpdate: (newZIndex: number) => void, updateAfterRegister?: boolean): number;
/**
* Удалить указанное модальное окно
* @param component Модальное окно
* @returns Удалось ли удалить модальное окно
*/
static unregister(modal: any): boolean;
}