amis/src/types.ts

155 lines
3.2 KiB
TypeScript

export interface ApiObject {
url: string;
method: 'get' | 'post' | 'put' | 'patch' | 'delete';
data?: object;
headers?: PlainObject;
config?: {
withCredentials?: boolean;
cancelExecutor?: (cancel: Function) => void;
};
reload?: string;
sendOn?: string;
adaptor?: (payload: object, response: fetcherResult, api: ApiObject) => any;
requestAdaptor?: (api: ApiObject) => ApiObject;
cache?: number;
qsOptions?: any;
dataType?: 'json' | 'form-data' | 'form';
replaceData?: boolean;
}
export type ApiString = string;
export type Api = ApiString | ApiObject;
export interface fetcherResult {
data?: {
data: object;
status: number;
msg: string;
msgTimeout?: number;
errors?: {
[propName: string]: string;
};
};
status: number;
headers: object;
}
export interface fetchOptions {
method?: 'get' | 'post' | 'put' | 'patch' | 'delete';
successMessage?: string;
errorMessage?: string;
autoAppend?: boolean;
beforeSend?: (data: any) => any;
onSuccess?: (json: Payload) => any;
silent?: boolean;
[propName: string]: any;
}
export interface Payload {
ok: boolean;
msg: string;
msgTimeout?: number;
data: any;
status: number;
errors?: {
[propName: string]: string;
};
}
export interface Schema {
type: string;
detectField?: string;
visibleOn?: string;
hiddenOn?: string;
children?: JSX.Element | ((props: any, schema?: any) => JSX.Element) | null;
definitions?: Definitions;
[propName: string]: any;
}
export interface Button {
type: 'submit' | 'button' | 'reset';
label?: string;
icon?: string;
size?: string;
disabled?: boolean;
className?: string;
}
export type SchemaNode = number | string | Schema | SchemaArray;
export interface SchemaArray extends Array<SchemaNode> {}
export interface Definitions {
[propName: string]: SchemaNode;
}
export interface Action extends Button {
actionType?:
| 'submit'
| 'copy'
| 'reload'
| 'ajax'
| 'dialog'
| 'drawer'
| 'jump'
| 'link'
| 'url'
| 'close'
| 'confirm'
| 'add'
| 'remove'
| 'delete'
| 'edit'
| 'cancel'
| 'close'
| 'next'
| 'prev';
api?: Api;
asyncApi?: Api;
payload?: any;
dialog?: SchemaNode;
to?: string;
target?: string;
link?: string;
url?: string;
mergeData?: boolean;
reload?: string;
messages?: {
success?: string;
failed?: string;
};
feedback?: any;
required?: Array<string>;
[propName: string]: any;
}
export interface Location {
pathname: string;
search: string;
state: any;
hash: string;
key?: string;
query?: any;
}
export interface PlainObject {
[propsName: string]: any;
}
export interface RendererData {
[propsName: string]: any;
__prev?: RendererDataAlis;
__super?: RendererData;
}
type RendererDataAlis = RendererData;
export type FunctionPropertyNames<T> = {
[K in keyof T]: T[K] extends Function ? K : never
}[keyof T];
export interface JSONSchema {
[propsName: string]: any;
}
export type Omit<T, K extends keyof T & any> = Pick<T, Exclude<keyof T, K>>;
export type Override<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;
export type ExtractProps<
TComponentOrTProps
> = TComponentOrTProps extends React.ComponentType<infer P> ? P : never;