;
declare type PropertyOptionToData = {
[name in keyof P]?: PropertyToData
;
};
export declare type ActionDef = {
action: ED[T]['Action'];
filter?: ED[T]['Selection']['filter'];
data?: Partial;
label?: string;
color?: string;
key?: string;
} | ED[T]['Action'];
export declare type RowWithActions = Partial & {
'#oakLegalActions': ActionDef[];
'#oakLegalCascadeActions': {
[K in keyof ED[T]['Schema']]?: ActionDef[];
};
};
interface ComponentOption, FrontCxt extends SyncContext, AD extends Record>, FD extends Record, FormedData extends Record, IsList extends boolean, TData extends DataOption, TProperty extends PropertyOption> {
entity?: T | ((this: ComponentPublicThisType) => T);
path?: string;
isList: IsList;
features?: (keyof (FD & BasicFeatures>))[];
cascadeActions?: (this: ComponentPublicThisType) => {
[K in keyof ED[T]['Schema']]?: ActionDef[];
};
actions?: ActionDef[] | ((this: ComponentPublicThisType) => ActionDef[]);
projection?: ED[T]['Selection']['data'] | ((this: ComponentPublicThisType) => ED[T]['Selection']['data']);
append?: boolean;
pagination?: Pagination;
filters?: Array<{
filter: ED[T]['Selection']['filter'] | ((this: ComponentPublicThisType) => ED[T]['Selection']['filter'] | undefined);
'#name'?: string;
}>;
sorters?: Array<{
sorter: NonNullable[number] | ((this: ComponentPublicThisType) => NonNullable[number]);
'#name'?: string;
}>;
formData?: (options: {
data: IsList extends true ? RowWithActions[] : RowWithActions | undefined;
features: BasicFeatures> & FD;
props: Partial>;
legalActions: ActionDef[];
}) => FormedData & ThisType>;
ns?: T | T[];
data?: ((this: ComponentPublicThisType) => TData) | TData;
properties?: TProperty;
}
export declare type MiniprogramStyleMethods = {
animate(selector: string, keyFrames: WechatMiniprogram.Component.KeyFrame[], duration: number, callback?: () => void): void;
clearAnimation(selector: string, options?: WechatMiniprogram.Component.ClearAnimationOptions, callback?: () => void): void;
triggerEvent: (name: string, detail?: DetailType, options?: WechatMiniprogram.Component.TriggerEventOption) => void;
};
export declare type ComponentProps = IsList extends true ? PropertyOptionToData : PropertyOptionToData;
export declare type ReactComponentProps = ComponentProps & {
className?: string;
style?: Record;
};
export declare type ComponentData = TData & FormedData & OakComponentData;
export declare type ComponentPublicThisType, FrontCxt extends SyncContext, AD extends Record>, FD extends Record, FormedData extends Record, IsList extends boolean, TData extends Record = {}, TProperty extends PropertyOption = {}, TMethod extends MethodOption = {}, EMethod extends Record = {}> = {
subscribed: Array<() => void>;
features: FD & BasicFeatures>;
state: ComponentData;
props: Readonly>;
setState: (data: Partial>, callback?: () => void) => void;
triggerEvent: (name: string, detail?: DetailType, options?: WechatMiniprogram.Component.TriggerEventOption) => void;
} & TMethod & EMethod & OakCommonComponentMethods & OakListComponentMethods & OakSingleComponentMethods;
export declare type ComponentFullThisType, FrontCxt extends SyncContext> = {
subscribed: Array<() => void>;
features: BasicFeatures>;
state: OakComponentData;
props: ComponentProps;
setState: (data: Partial>, callback?: () => void) => void;
triggerEvent: (name: string, detail?: DetailType, options?: WechatMiniprogram.Component.TriggerEventOption) => void;
} & OakCommonComponentMethods & OakListComponentMethods & OakSingleComponentMethods;
export declare type OakComponentOption, FrontCxt extends SyncContext, AD extends Record>, FD extends Record, FormedData extends Record, IsList extends boolean, TData extends Record, TProperty extends PropertyOption, TMethod extends Record, EMethod extends Record = {}> = ComponentOption & Partial<{
methods: TMethod;
lifetimes: {
created?(): void;
attached?(): void;
ready?(): void;
moved?(): void;
detached?(): void;
error?(err: Error): void;
show?(): void;
hide?(): void;
};
observers: Record, ...args: any[]) => any>;
listeners: Record, prev: Record, next: Record) => void>;
}> & Partial<{
wechatMp: {
externalClasses?: string[];
options?: Partial | undefined;
};
}> & ThisType>;
export declare type OakComponentProperties = {
oakPath: StringConstructor;
oakId: StringConstructor;
oakProjection: ObjectConstructor;
oakFrom: StringConstructor;
oakParentEntity: StringConstructor;
oakDisablePulldownRefresh: BooleanConstructor;
oakAutoUnmount: BooleanConstructor;
oakActions: ArrayConstructor;
oakCascadeActions: ObjectConstructor;
};
export declare type OakListComponentProperties = {
oakFilters: ObjectConstructor;
oakSorters: ObjectConstructor;
oakIsPicker: BooleanConstructor;
oakPagination: ObjectConstructor;
};
export declare type OakNavigateToParameters = {
oakId?: string;
oakEntity?: T;
oakPath?: string;
oakParent?: string;
oakProjection?: ED[T]['Selection']['data'];
oakSorters?: Array>;
oakFilters?: Array>;
oakIsPicker?: boolean;
[k: string]: any;
};
export declare type OakCommonComponentMethods = {
setDisablePulldownRefresh: (able: boolean) => void;
sub: (type: string, callback: Function) => void;
unsub: (type: string, callback: Function) => void;
pub: (type: string, options?: any) => void;
unsubAll: (type: string) => void;
save: (key: string, item: any) => void;
load: (key: string) => any;
clear: () => void;
resolveInput: (input: any, keys?: K[]) => {
dataset?: Record;
value?: string;
} & {
[k in K]?: any;
};
setNotification: (data: NotificationProps) => void;
consumeNotification: () => NotificationProps | undefined;
setMessage: (data: MessageProps) => void;
consumeMessage: () => MessageProps | undefined;
reRender: (extra?: Record) => void;
getFreshValue: (path?: string) => Partial[] | Partial | undefined;
navigateTo: (options: {
url: string;
} & OakNavigateToParameters, state?: Record, disableNamespace?: boolean) => Promise;
navigateBack: (delta?: number) => Promise;
redirectTo: (options: Parameters[0] & OakNavigateToParameters, state?: Record, disableNamespace?: boolean) => Promise;
clean: (path?: string) => void;
t(key: string, params?: object): string;
execute: (action?: ED[T]['Action'], messageProps?: boolean | MessageProps) => Promise;
checkOperation: (entity: T, action: ED[T]['Action'], data?: ED[T]['Update']['data'], filter?: ED[T]['Update']['filter'], checkerTypes?: CheckerType[]) => boolean;
tryExecute: (path?: string) => boolean | Error;
getOperations: (path?: string) => {
operation: ED[T]['Operation'];
entity: T;
}[] | undefined;
refresh: () => Promise;
aggregate: (aggregation: ED[T]['Aggregation']) => Promise>;
};
export declare type OakSingleComponentMethods = {
setId: (id: string) => void;
unsetId: () => void;
getId: () => string | undefined;
update: (data: ED[T]['Update']['data'], action?: ED[T]['Action'], beforeExecute?: () => Promise, afterExecute?: () => Promise, path?: string) => void;
remove: (beforeExecute?: () => Promise, afterExecute?: () => Promise, path?: string) => void;
isCreation: (path?: string) => boolean;
};
export declare type OakListComponentMethods = {
loadMore: () => Promise;
setFilters: (filters: NamedFilterItem[], path?: string) => void;
getFilters: (path?: string) => ED[T]['Selection']['filter'][] | undefined;
getFilterByName: (name: string, path?: string) => ED[T]['Selection']['filter'] | undefined;
addNamedFilter: (filter: NamedFilterItem, refresh?: boolean, path?: string) => void;
removeNamedFilter: (filter: NamedFilterItem, refresh?: boolean, path?: string) => void;
removeNamedFilterByName: (name: string, refresh?: boolean, path?: string) => void;
setNamedSorters: (sorters: NamedSorterItem[], path?: string) => void;
getSorters: (path?: string) => ED[T]['Selection']['sorter'] | undefined;
getSorterByName: (name: string, path?: string) => NonNullable[number] | undefined;
addNamedSorter: (filter: NamedSorterItem, refresh?: boolean, path?: string) => void;
removeNamedSorter: (filter: NamedSorterItem, refresh?: boolean, path?: string) => void;
removeNamedSorterByName: (name: string, refresh?: boolean, path?: string) => void;
getPagination: (path?: string) => Pagination | undefined;
setPageSize: (pageSize: number, path?: string) => void;
setCurrentPage: (current: number, path?: string) => void;
addItem: (data: Omit, beforeExecute?: () => Promise, afterExecute?: () => Promise, path?: string) => void;
removeItem: (id: string, beforeExecute?: () => Promise, afterExecute?: () => Promise, path?: string) => void;
updateItem: (data: ED[T]['Update']['data'], id: string, action?: ED[T]['Action'], beforeExecute?: () => Promise, afterExecute?: () => Promise, path?: string) => void;
recoverItem: (id: string, path?: string) => void;
resetItem: (id: string, path?: string) => void;
};
declare type ComponentOnPropsChangeOption = {
path?: string;
parent?: string;
};
export declare type OakComponentOnlyMethods = {
onPropsChanged: (options: ComponentOnPropsChangeOption) => void;
registerReRender: () => void;
setOakActions: () => void;
};
export declare type OakComponentData = {
oakExecutable: boolean | Error;
oakExecuting: boolean;
oakFocused: {
attr: string;
message: string;
};
oakDirty: boolean;
oakLoading: boolean;
oakLoadingMore: boolean;
oakPullDownRefreshLoading: boolean;
oakEntity: T;
oakFullpath: string;
oakLegalActions?: ED[T]['Action'][];
oakDisablePulldownRefresh: boolean;
};
export declare type OakListComoponetData = {
oakFilters?: NonNullable[];
oakSorters?: NonNullable[];
oakPagination?: Pagination;
};
export declare type MakeOakComponent, FrontCxt extends SyncContext, AD extends Record>, FD extends Record> = (options: OakComponentOption) => (props: ReactComponentProps) => React.ReactElement;
export declare type WebComponentCommonMethodNames = 'setNotification' | 'setMessage' | 'navigateTo' | 'navigateBack' | 'redirectTo' | 'clean' | 't' | 'execute' | 'refresh' | 'setDisablePulldownRefresh' | 'aggregate' | 'checkOperation';
export declare type WebComponentListMethodNames = 'loadMore' | 'setFilters' | 'addNamedFilter' | 'removeNamedFilter' | 'removeNamedFilterByName' | 'setNamedSorters' | 'addNamedSorter' | 'removeNamedSorter' | 'removeNamedSorterByName' | 'setPageSize' | 'setCurrentPage' | 'addItem' | 'removeItem' | 'updateItem' | 'resetItem' | 'recoverItem';
export declare type WebComponentSingleMethodNames = 'update' | 'remove' | 'isCreation';
export declare type WebComponentProps = {
methods: TMethod & OakCommonComponentMethods & OakListComponentMethods & OakSingleComponentMethods;
data: TData & OakComponentData & (IsList extends true ? OakListComoponetData : {});
};
export {};