///
import * as React from 'react';
import { Observable, Subscription } from 'rxjs';
import { AnonymousSubscription, TeardownLogic } from 'rxjs/Subscription';
import { ReactSpreadRestrictedProps, ReactSpreadResult } from '../../Extensions/React';
import { Alert, Logging } from '../../Utils';
import { Command, IterableLike, Property } from '../../WebRx';
import { BaseViewModel } from './BaseViewModel';
export interface ViewModelProps {
viewModel: Readonly;
}
export declare type ReactSpreadRestrictedViewModelProps = ReactSpreadRestrictedProps & Partial>;
export declare const reactSpreadRestrictedViewModelProps: ReactSpreadRestrictedViewModelProps;
export interface BaseViewProps extends ViewModelProps, React.HTMLProps {
}
export interface ViewModelState {
viewModel: T;
}
export declare abstract class BaseView, TViewModel extends BaseViewModel> extends React.Component> implements AnonymousSubscription {
static displayName: string;
private updateSubscription;
private subscriptions;
protected readonly createAlert: typeof Alert.create;
protected readonly alertForError: typeof Alert.createForError;
protected readonly logger: Logging.Logger;
constructor(props: any);
readonly viewModel: Readonly;
private getSubscriptions();
componentWillMount(): void;
componentDidMount(): void;
componentWillReceiveProps(nextProps: Readonly, nextContext: any): void;
componentWillUpdate(nextProps: Readonly, nextState: Readonly>, nextContext: any): void;
componentDidUpdate(prevProps: Readonly, prevState: Readonly>, prevContext: any): void;
componentWillUnmount(): void;
private initializeView();
private loadedView();
private updatingView(nextProps, nextState);
private updatedView(prevProps, prevState);
private cleanupView();
protected initialize(): void;
protected loaded(): void;
protected updating(nextProps?: Readonly, nextState?: Readonly>): void;
protected updated(prevProps?: Readonly, prevState?: Readonly>): void;
protected cleanup(): void;
protected subscribeToUpdates(props: Readonly, state: Readonly>): void;
protected updateOn(viewModel: Readonly): IterableLike>;
protected getDisplayName(): string;
protected getRateLimit(): number;
protected renderView(): void;
/**
* Binds an observable to a command on the view model
*/
protected bindObservableToCommand(observable: Observable, commandSelector: (viewModel: Readonly) => Command, onNext?: (value: TInput) => void, onError?: (exception: any) => void, onCompleted?: () => void): Subscription;
/**
* Binds a DOM event to an observable property on the view model
*/
protected bindEventToProperty>(targetSelector: (viewModel: Readonly) => Property, valueSelector?: (eventKey: any, event: TEvent) => TValue): any;
/**
* Binds a DOM event to an observable command on the view model
*/
protected bindEventToCommand>(commandSelector: (viewModel: Readonly) => Command, paramSelector?: (eventKey: any, event: TEvent) => TParameter, conditionSelector?: (event: TEvent, eventKey: any) => boolean, onNext?: (value: TCommand) => void, onError?: (exception: any) => void, onCompleted?: () => void): any;
protected createStateFromProps(props: Readonly): Readonly>;
protected getViewModelFromState(state: Readonly>): Readonly;
protected addSubscription(subscription: T): T;
protected addSubscriptions(...subscriptions: T[]): T[];
unsubscribe(): void;
restProps(propsCreator?: (x: TViewProps) => T, restrictedProps?: R): ReactSpreadResult;
}