/**
* Turns a React component or stateless render function into a reactive component.
*/
import * as React from "react"
export type IReactComponent
=
| React.StatelessComponent
| React.ComponentClass
| React.ClassicComponentClass
/**
* Observer
*/
// Deprecated: observer with with stores (as decorator)
export function observer(stores: string[]): (clazz: T) => void
// Deprecated: observer with with stores
export function observer(stores: string[], clazz: T): T
export function observer(target: T): T
/**
* Inject
*/
export type IValueMap = { [key: string]: any }
export type IStoresToProps<
S extends IValueMap = {},
P extends IValueMap = {},
I extends IValueMap = {},
C extends IValueMap = {}
> = (stores: S, nextProps: P, context: C) => I
export type IWrappedComponent = {
wrappedComponent: IReactComponent
wrappedInstance: React.ReactInstance | undefined
}
// Ideally we would want to return React.ComponentClass>,
// but TS doesn't allow such things in decorators, like we do in the non-decorator version
// See also #256
export function inject(
...stores: string[]
): >(
target: T
) => T & (T extends IReactComponent ? IWrappedComponent : never)
export function inject(
fn: IStoresToProps
): (target: T) => T & IWrappedComponent
// Ideal implementation:
// export function inject
// (
// fn: IStoresToProps
// ):
//
(target: IReactComponent
) => IReactComponent> & IWrappedComponent>>
//
// Or even better: (but that would require type inference to work other way around)
// export function inject
// (
// fn: IStoresToProps
// ):
// (target: T) => IReactComponent & IWrappedComponent
/**
* disposeOnUnmount
*/
type Disposer = () => void
export function disposeOnUnmount(target: React.Component, propertyKey: string): void
export function disposeOnUnmount(
target: React.Component,
fn: TF
): TF
/**
* Utilities
*/
export function onError(cb: (error: Error) => void): () => void
export class Provider extends React.Component {}
export class Observer extends React.Component<
{
children?: () => React.ReactNode
render?: () => React.ReactNode
},
{}
> {}
export function useStaticRendering(value: boolean): void
/**
* Enable dev tool support, makes sure that renderReport emits events.
*/
export function trackComponents(): void
export const renderReporter: RenderReporter
export interface RenderReporter {
on(handler: (data: IRenderEvent) => void): void
}
export interface IRenderEvent {
event: "render" | "destroy"
renderTime?: number
totalTime?: number
component: React.ReactElement // Component instance
node: any // DOMNode
}
/**
* WeakMap DOMNode -> Component instance
* @deprecated
*/
export const componentByNodeRegistery: any
/**
* WeakMap DOMNode -> Component instance
*/
export const componentByNodeRegistry: any
/**
* @deprecated, use PropTypes instead
*/
export const propTypes: {
observableArray: React.Requireable
observableArrayOf: (type: React.Validator) => React.Requireable
observableMap: React.Requireable
observableObject: React.Requireable
arrayOrObservableArray: React.Requireable
arrayOrObservableArrayOf: (type: React.Validator) => React.Requireable
objectOrObservableObject: React.Requireable
}
export const PropTypes: {
observableArray: React.Requireable
observableArrayOf: (type: React.Validator) => React.Requireable
observableMap: React.Requireable
observableObject: React.Requireable
arrayOrObservableArray: React.Requireable
arrayOrObservableArrayOf: (type: React.Validator) => React.Requireable
objectOrObservableObject: React.Requireable
}