fastlion-amis
Version:
一种MIS页面生成工具
158 lines (157 loc) • 8.87 kB
TypeScript
/**
* @file 组件 Env,包括如何发送 ajax,如何通知,如何跳转等等。。
*/
import React from 'react';
import { RendererConfig } from './factory';
import { ThemeInstance } from './theme';
import { Action, Api, Payload, Schema } from './types';
import hoistNonReactStatic from 'hoist-non-react-statics';
import { RendererEvent, RendererEventListener } from './utils/renderer-event';
import { IScopedContext } from './Scoped';
export interface RendererEnv {
fetcher: (api: Api, data?: any, options?: object) => Promise<Payload>;
isCancel: (val: any) => boolean;
notify: (type: 'error' | 'success' | 'warning' | 'info', msg: string, conf?: {
closeButton?: boolean;
timeout?: number;
}) => void;
jumpTo: (to: string, action?: Action, ctx?: object) => void;
alert: (msg: string) => void;
confirm: (msg: string, title?: string) => Promise<boolean>;
updateLocation: (location: any, replace?: boolean) => void;
/**
* 阻止路由跳转,有时候 form 没有保存,但是路由跳转了,导致页面没有更新,
* 所以先让用户确认一下。
*
* 单页模式需要这个,如果非单页模式,不需要处理这个。
*/
blockRouting?: (fn: (targetLocation: any) => void | string) => () => void;
isCurrentUrl: (link: string, ctx?: any) => boolean | {
params?: object;
};
/**
* 监控路由变化,如果 jssdk 需要做单页跳转需要实现这个。
*/
watchRouteChange?: (fn: () => void) => () => void;
rendererResolver?: (path: string, schema: Schema, props: any) => null | RendererConfig;
copy?: (contents: string, format?: any) => void;
getModalContainer?: () => HTMLElement;
theme: ThemeInstance;
affixOffsetTop: number;
affixOffsetBottom: number;
richTextToken: string;
loadRenderer: (schema: Schema, path: string, reRender: Function) => Promise<React.ReactType> | React.ReactType | JSX.Element | void;
loadChartExtends?: () => void | Promise<void>;
useMobileUI?: boolean;
bindEvent: (context: any) => (() => void) | undefined;
dispatchEvent: (e: string | React.ClipboardEvent<any> | React.DragEvent<any> | React.ChangeEvent<any> | React.KeyboardEvent<any> | React.TouchEvent<any> | React.WheelEvent<any> | React.AnimationEvent<any> | React.TransitionEvent<any> | React.MouseEvent<any>, context: any, scoped: IScopedContext, data: any, broadcast?: RendererEvent<any>) => Promise<RendererEvent<any> | undefined>;
rendererEventListeners: RendererEventListener[];
/**
* 过滤 html 标签,可用来添加 xss 保护逻辑
*/
filterHtml: (input: string) => string;
[propName: string]: any;
}
export declare const EnvContext: React.Context<void | RendererEnv>;
export interface EnvProps {
env: RendererEnv;
}
export declare function withRendererEnv<T extends React.ComponentType<React.ComponentProps<T> & EnvProps>>(ComposedComponent: T): {
new (props: (JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}) | Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>): {
render(): JSX.Element;
context: any;
setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
forceUpdate(callback?: (() => void) | undefined): void;
readonly props: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}> & Readonly<{
children?: React.ReactNode;
}>;
state: Readonly<{}>;
refs: {
[key: string]: React.ReactInstance;
};
componentDidMount?(): void;
shouldComponentUpdate?(nextProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, nextState: Readonly<{}>, nextContext: any): boolean;
componentWillUnmount?(): void;
componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
getSnapshotBeforeUpdate?(prevProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, prevState: Readonly<{}>): any;
componentDidUpdate?(prevProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, prevState: Readonly<{}>, snapshot?: any): void;
componentWillMount?(): void;
UNSAFE_componentWillMount?(): void;
componentWillReceiveProps?(nextProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, nextContext: any): void;
UNSAFE_componentWillReceiveProps?(nextProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, nextContext: any): void;
componentWillUpdate?(nextProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, nextState: Readonly<{}>, nextContext: any): void;
UNSAFE_componentWillUpdate?(nextProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, nextState: Readonly<{}>, nextContext: any): void;
};
new (props: JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}, context: any): {
render(): JSX.Element;
context: any;
setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
forceUpdate(callback?: (() => void) | undefined): void;
readonly props: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}> & Readonly<{
children?: React.ReactNode;
}>;
state: Readonly<{}>;
refs: {
[key: string]: React.ReactInstance;
};
componentDidMount?(): void;
shouldComponentUpdate?(nextProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, nextState: Readonly<{}>, nextContext: any): boolean;
componentWillUnmount?(): void;
componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
getSnapshotBeforeUpdate?(prevProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, prevState: Readonly<{}>): any;
componentDidUpdate?(prevProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, prevState: Readonly<{}>, snapshot?: any): void;
componentWillMount?(): void;
UNSAFE_componentWillMount?(): void;
componentWillReceiveProps?(nextProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, nextContext: any): void;
UNSAFE_componentWillReceiveProps?(nextProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, nextContext: any): void;
componentWillUpdate?(nextProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, nextState: Readonly<{}>, nextContext: any): void;
UNSAFE_componentWillUpdate?(nextProps: Readonly<JSX.LibraryManagedAttributes<T, Omit<React.ComponentProps<T>, "env">> & {
env?: RendererEnv | undefined;
}>, nextState: Readonly<{}>, nextContext: any): void;
};
displayName: string;
contextType: React.Context<void | RendererEnv>;
ComposedComponent: React.ComponentType<T>;
} & hoistNonReactStatic.NonReactStatics<T, {}> & {
ComposedComponent: T;
};