///
import { Api, Payload } from './wrapAdaptor';
export declare type SchemaUrlPath = string;
export declare type SchemaExpression = string;
export interface SchemaApiObject {
/**
* API 发送类型
*/
method?: 'get' | 'post' | 'put' | 'delete' | 'patch';
/**
* API 发送目标地址
*/
url: SchemaUrlPath;
/**
* 用来控制携带数据. 当key 为 `&` 值为 `$$` 时, 将所有原始数据打平设置到 data 中. 当值为 $$ 将所有原始数据赋值到对应的 key 中. 当值为 $ 打头时, 将变量值设置到 key 中.
*/
data?: {
[propName: string]: any;
};
/**
* 用来做接口返回的数据映射。
*/
responseData?: {
[propName: string]: any;
};
/**
* 如果 method 为 get 的接口,设置了 data 信息。
* 默认 data 会自动附带在 query 里面发送给后端。
*
* 如果想通过 body 发送给后端,那么请把这个配置成 false。
*
* 但是,浏览器还不支持啊,设置了只是摆设。除非服务端支持 method-override
*/
attachDataToQuery?: boolean;
/**
* 发送体的格式
*/
dataType?: 'json' | 'form-data' | 'form';
/**
* 如果是文件下载接口,请配置这个。
*/
responseType?: 'blob';
/**
* 携带 headers,用法和 data 一样,可以用变量。
*/
headers?: {
[propName: string]: string | number;
};
/**
* 设置发送条件
*/
sendOn?: SchemaExpression;
/**
* 默认都是追加模式,如果想完全替换把这个配置成 true
*/
replaceData?: boolean;
/**
* 是否自动刷新,当 url 中的取值结果变化时,自动刷新数据。
*
* @default true
*/
autoRefresh?: boolean;
/**
* 当开启自动刷新的时候,默认是 api 的 url 来自动跟踪变量变化的。
* 如果你希望监控 url 外的变量,请配置 traceExpression。
*/
trackExpression?: string;
/**
* 如果设置了值,同一个接口,相同参数,指定的时间(单位:ms)内请求将直接走缓存。
*/
cache?: number;
/**
* qs 配置项
*/
qsOptions?: {
arrayFormat?: 'indices' | 'brackets' | 'repeat' | 'comma';
indices?: boolean;
allowDots?: boolean;
};
}
interface ToastConf {
}
interface Action {
}
declare const enum ToastPositionEnum {
TOP_RIGHT = "top-right",
TOP_CENTER = "top-center",
TOP_LEFT = "top-left",
BOTTOM_CENTER = "bottom-center",
BOTTOM_LEFT = "bottom-left",
BOTTOM_RIGHT = "bottom-right",
CENTER = "center"
}
export interface RendererEnv {
/**
* rootStore 挂在 window 上的名字
*/
session: string;
/**
* 接口的domain + contentPath
*/
baseURL: string;
/**
* 固顶间距,当你的有其他固顶元素时,需要设置一定的偏移量,否则会重叠。
*/
affixOffsetTop: number;
/**
* 固底间距,当你的有其他固底元素时,需要设置一定的偏移量,否则会重叠。
*/
affixOffsetBottom: number;
/**
* Toast 提示弹出位置,默认为'top-center'。 支持的属性值有:
*/
toastPosition: ToastPositionEnum;
/**
* 接口请求器,实现该函数才可以实现 ajax 发送
*/
fetcher: (api: Api, data: object, options?: object | undefined) => Promise;
/**
* axios 请求 config 拦截
*/
requestAdaptor?: (config: any) => any;
/**
* axiox 响应拦截
*/
responseAdaptor?: (api: fetcherConfig, response: any, query: object, request: fetcherConfig & {
query: object;
body: any;
}) => PayloadType;
/**
* 用来实现消息提示。
*/
notify: (type: 'error' | 'success' | 'warning' | 'info', msg: string, conf?: ToastConf) => void;
/**
* 用来实现警告提示。
*/
alert: (msg: string) => void;
/**
* 用来实现确认框。返回 boolean 值
*/
confirm: (msg: string) => boolean | Promise;
/**
* 用来实现页面跳转,因为不清楚所在环境中是否使用了 spa 模式,所以用户自己实现吧。
*/
jumpTo: (to: string, action?: Action) => void;
/**
* 地址替换,跟 jumpTo 类似。
*/
updateLocation: (location: any, replace?: boolean) => void;
/**
* 判断目标地址是否为当前页面。
*/
isCurrentUrl: (link: string) => boolean;
/**
* 用来实现内容复制
* 咱们这里默认用的 copy-to-clipboard 插件 https://www.npmjs.com/package/copy-to-clipboard
*/
copy: (contents: string, options?: any) => boolean;
/**
* 用户行为跟踪, 可做数据埋点
* TODO. 补充入参类型格式
*/
tracker: (eventTrack: any, props: any) => void;
/**
* 用来决定弹框容器。
*/
getModalContainer: () => HTMLElement;
/**
* 渲染器加载报错占位提示dom
*/
loadRenderer: (schema: any, msg?: string) => JSX.Element;
/**
* 过滤 html 标签,可用来添加 xss 保护逻辑
*/
filterHtml: (input: string) => string;
}
export interface fetcherConfig {
url: string;
method?: 'get' | 'post' | 'put' | 'patch' | 'delete';
data?: any;
config?: any;
headers?: any;
responseType?: any;
}
export interface fetcherResult {
data?: PayloadType;
status: number;
headers: object;
}
export interface PayloadType {
data: object;
status: number;
msg: string;
msgTimeout?: number;
errors?: {
[propName: string]: string;
};
type?: string;
[propName: string]: any;
}
export interface PlainObject {
[propsName: string]: any;
}
export interface ApiObject extends SchemaApiObject {
config?: {
withCredentials?: boolean;
cancelExecutor?: (cancel: Function) => void;
};
body?: PlainObject;
query?: PlainObject;
adaptor?: (payload: object, response: fetcherResult, api: ApiObject) => any;
requestAdaptor?: (api: ApiObject) => ApiObject;
}
export declare function defaultFetcher(env?: Partial): (api: fetcherConfig) => Promise;
declare const _default: (api: Api, data: object, options?: object) => Promise;
export default _default;