/// 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;