/// /// import { Aspect, EntityDict, CheckerType, AggregationResult } from "oak-domain/lib/types"; import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain'; import { CommonAspectDict } from 'oak-common-aspect'; import { Feature } from './Feature'; import { Pagination } from "./Pagination"; import { BasicFeatures } from "../features"; import { NamedFilterItem, NamedSorterItem } from './NamedCondition'; import { NotificationProps } from './Notification'; import { MessageProps } from './Message'; import { AsyncContext } from "oak-domain/lib/store/AsyncRowStore"; import { SyncContext } from "oak-domain/lib/store/SyncRowStore"; import React from "react"; export declare type PropertyOption = Record; export declare type DataOption = WechatMiniprogram.Component.DataOption; export declare type MethodOption = WechatMiniprogram.Component.MethodOption; /** * 微信的原声明中少写了FunctionConstructor,只能抄一遍 */ declare type PropertyType = FunctionConstructor | StringConstructor | NumberConstructor | BooleanConstructor | ArrayConstructor | ObjectConstructor | null; declare type ValueType = T extends null ? any : T extends StringConstructor ? string : T extends NumberConstructor ? number : T extends BooleanConstructor ? boolean : T extends ArrayConstructor ? any[] : T extends ObjectConstructor ? AnyObject : T extends FunctionConstructor ? Function : never; declare type FullProperty = { /** 属性类型 */ type: T; /** 属性初始值 */ value?: ValueType | undefined; /** 属性值被更改时的响应函数 */ observer?: string | ((newVal: ValueType, oldVal: ValueType, changedPath: Array) => void) | undefined; /** 属性的类型(可以指定多个) */ optionalTypes?: ShortProperty[] | undefined; }; declare type AllFullProperty = FullProperty | FullProperty | FullProperty | FullProperty | FullProperty | FullProperty; declare type ShortProperty = FunctionConstructor | StringConstructor | NumberConstructor | BooleanConstructor | ArrayConstructor | ObjectConstructor | null; declare type AllProperty = AllFullProperty | ShortProperty; declare type PropertyToData = T extends ShortProperty ? ValueType : FullPropertyToData>; declare type FullPropertyToData = ValueType; 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 {};