diff --git a/lib/page.common.js b/lib/page.common.js index 0092bf05..665d01a4 100644 --- a/lib/page.common.js +++ b/lib/page.common.js @@ -31,11 +31,7 @@ function onPathSet(option) { filters2.push((_e = { filter: typeof filter === 'function' ? function () { - return filter.call(_this, { - features: features, - props: _this.props, - state: _this.state, - }); + return filter.call(_this); } : filter }, @@ -60,11 +56,7 @@ function onPathSet(option) { if (!proj && projection) { proj = typeof projection === 'function' ? function () { - return projection.call(_this, { - features: features, - props: _this.props, - state: _this.state, - }); + return projection.call(_this); } : projection; } @@ -80,11 +72,7 @@ function onPathSet(option) { sorters2.push((_f = { sorter: typeof sorter === 'function' ? function () { - return sorter.call(_this, { - features: features, - props: _this.props, - state: _this.state, - }); + return sorter.call(_this); } : sorter }, diff --git a/lib/page.mp.d.ts b/lib/page.mp.d.ts index 38159ecd..0f316fae 100644 --- a/lib/page.mp.d.ts +++ b/lib/page.mp.d.ts @@ -1,11 +1,10 @@ /// -/// import { CommonAspectDict } from 'oak-common-aspect'; import { Aspect, EntityDict } from 'oak-domain/lib/types'; import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain'; import { BasicFeatures } from './features'; import { Feature } from './types/Feature'; -import { OakComponentOption } from './types/Page'; +import { PropertyOption, OakComponentOption } from './types/Page'; import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore'; import { SyncContext } from 'oak-domain/lib/store/SyncRowStore'; -export declare function createComponent, FrontCxt extends SyncContext, AD extends Record>, FD extends Record, FormedData extends Record, IsList extends boolean, TData extends Record = {}, TProperty extends WechatMiniprogram.Component.PropertyOption = {}, TMethod extends Record = {}>(option: OakComponentOption, features: BasicFeatures> & FD): string; +export declare function createComponent, FrontCxt extends SyncContext, AD extends Record>, FD extends Record, FormedData extends Record, IsList extends boolean, TData extends Record = {}, TProperty extends PropertyOption = {}, TMethod extends Record = {}>(option: OakComponentOption, features: BasicFeatures> & FD): string; diff --git a/lib/page.web.d.ts b/lib/page.web.d.ts index 412c9e89..26eeaf78 100644 --- a/lib/page.web.d.ts +++ b/lib/page.web.d.ts @@ -1,12 +1,11 @@ /// -/// import React from 'react'; import { CommonAspectDict } from 'oak-common-aspect'; import { Aspect, EntityDict } from 'oak-domain/lib/types'; import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain'; import { BasicFeatures } from './features'; import { Feature } from './types/Feature'; -import { OakComponentOption } from './types/Page'; +import { PropertyOption, OakComponentOption } from './types/Page'; import { SyncContext } from 'oak-domain/lib/store/SyncRowStore'; import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore'; -export declare function createComponent, FrontCxt extends SyncContext, AD extends Record>, FD extends Record, FormedData extends Record, IsList extends boolean, TData extends Record = {}, TProperty extends WechatMiniprogram.Component.PropertyOption = {}, TMethod extends Record = {}>(option: OakComponentOption, features: BasicFeatures> & FD): React.ForwardRefExoticComponent>; +export declare function createComponent, FrontCxt extends SyncContext, AD extends Record>, FD extends Record, FormedData extends Record, IsList extends boolean, TData extends Record = {}, TProperty extends PropertyOption = {}, TMethod extends Record = {}>(option: OakComponentOption, features: BasicFeatures> & FD): React.ForwardRefExoticComponent>; diff --git a/lib/types/Page.d.ts b/lib/types/Page.d.ts index 9d0f9201..02e0daf8 100644 --- a/lib/types/Page.d.ts +++ b/lib/types/Page.d.ts @@ -1,5 +1,6 @@ /// /// +/// 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'; @@ -11,49 +12,65 @@ import { NotificationProps } from './Notification'; import { MessageProps } from './Message'; import { AsyncContext } from "oak-domain/lib/store/AsyncRowStore"; import { SyncContext } from "oak-domain/lib/store/SyncRowStore"; -interface ComponentOption, FrontCxt extends SyncContext, AD extends Record>, FD extends Record, FormedData extends Record, IsList extends boolean, TProperty extends WechatMiniprogram.Component.PropertyOption = {}> { - entity?: T | (() => T); +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; +}; +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; - projection?: ED[T]['Selection']['data'] | ((options: { - features: BasicFeatures> & FD; - props: Partial>; - state: Record; - }) => ED[T]['Selection']['data']); + projection?: ED[T]['Selection']['data'] | ((this: ComponentPublicThisType) => ED[T]['Selection']['data']); append?: boolean; pagination?: Pagination; filters?: Array<{ - filter: ED[T]['Selection']['filter'] | ((options: { - features: BasicFeatures> & FD; - props: Partial>; - state: Record; - }) => ED[T]['Selection']['filter'] | undefined); + filter: ED[T]['Selection']['filter'] | ((this: ComponentPublicThisType) => ED[T]['Selection']['filter'] | undefined); '#name'?: string; }>; sorters?: Array<{ - sorter: NonNullable[number] | ((options: { - features: BasicFeatures> & FD; - props: Partial>; - state: Record; - }) => NonNullable[number]); + sorter: NonNullable[number] | ((this: ComponentPublicThisType) => NonNullable[number]); '#name'?: string; }>; formData?: (options: { data: IsList extends true ? Partial[] : Partial | undefined; features: BasicFeatures> & FD; - props: Partial>; + props: Partial>; legalActions: ED[T]['Action'][]; - }) => FormedData; + }) => 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 ? WechatMiniprogram.Component.PropertyOptionToData : WechatMiniprogram.Component.PropertyOptionToData; -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 WechatMiniprogram.Component.PropertyOption = {}, TMethod extends WechatMiniprogram.Component.MethodOption = {}> = { +export declare type ComponentProps = IsList extends true ? PropertyOptionToData : PropertyOptionToData; +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 = {}> = { subscribed: Array<() => void>; features: FD & BasicFeatures>; state: ComponentData; @@ -69,12 +86,7 @@ export declare type ComponentFullThisType>, 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 WechatMiniprogram.Component.PropertyOption, TMethod extends Record> = ComponentOption & Partial<{ - data?: ((option: { - features: BasicFeatures> & FD; - props: ComponentProps; - }) => TData) | TData; - properties: Record; +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> = ComponentOption & Partial<{ methods: TMethod; lifetimes: { created?(): void; @@ -86,7 +98,7 @@ export declare type OakComponentOption) => ED[T]['Action'][]); + actions: ED[T]['Action'][] | ((this: ComponentPublicThisType) => ED[T]['Action'][]); observers: Record any>; }> & Partial<{ wechatMp: { @@ -218,11 +230,11 @@ export declare type OakListComoponetData[]; oakPagination?: Pagination; }; -export declare type MakeOakComponent, FrontCxt extends SyncContext, AD extends Record>, FD extends Record> = (options: OakComponentOption) => React.ComponentType; +export declare type MakeOakComponent, FrontCxt extends SyncContext, AD extends Record>, FD extends Record> = (options: OakComponentOption) => React.ComponentType; export declare type WebComponentCommonMethodNames = 'setNotification' | 'setMessage' | 'navigateTo' | 'navigateBack' | 'redirectTo' | 'clean' | 't' | 'execute' | 'refresh' | 'setDisablePulldownRefresh' | 'aggregate'; export declare type WebComponentListMethodNames = 'loadMore' | 'setFilters' | 'addNamedFilter' | 'removeNamedFilter' | 'removeNamedFilterByName' | 'setNamedSorters' | 'addNamedSorter' | 'removeNamedSorter' | 'removeNamedSorterByName' | 'setPageSize' | 'setCurrentPage' | 'addItem' | 'removeItem' | 'updateItem'; export declare type WebComponentSingleMethodNames = 'update' | 'remove'; -export declare type WebComponentProps = { +export declare type WebComponentProps = { methods: TMethod & OakCommonComponentMethods & OakListComponentMethods & OakSingleComponentMethods; data: TData & OakComponentData & (IsList extends true ? OakListComoponetData : {}); }; diff --git a/src/initialize.dev.mp.ts b/src/initialize.dev.mp.ts index c95b8bdb..07057e48 100644 --- a/src/initialize.dev.mp.ts +++ b/src/initialize.dev.mp.ts @@ -18,7 +18,11 @@ import { Feature } from './types/Feature'; import { BasicFeatures } from './features'; import { ActionDictOfEntityDict } from 'oak-domain/lib/types/Action'; import { CommonAspectDict } from 'oak-common-aspect'; -import { OakComponentOption } from './types/Page'; +import { + DataOption, + PropertyOption, + MethodOption, + OakComponentOption } from './types/Page'; import { createComponent } from './page.mp'; import { initialize as initDev } from './initialize-dev'; import { getI18next, I18nOptions } from './platforms/wechatMp/i18n'; @@ -78,11 +82,11 @@ export function initialize< Object.assign(global, { OakComponent: < T extends keyof ED, - FormedData extends WechatMiniprogram.Component.DataOption, + FormedData extends DataOption, IsList extends boolean, - TData extends WechatMiniprogram.Component.DataOption = {}, - TProperty extends WechatMiniprogram.Component.PropertyOption = {}, - TMethod extends WechatMiniprogram.Component.MethodOption = {} + TData extends DataOption = {}, + TProperty extends PropertyOption = {}, + TMethod extends MethodOption = {} >( options: OakComponentOption< ED, diff --git a/src/initialize.dev.web.ts b/src/initialize.dev.web.ts index e5b01441..a6a95f75 100644 --- a/src/initialize.dev.web.ts +++ b/src/initialize.dev.web.ts @@ -22,13 +22,17 @@ import { Feature } from './types/Feature'; import { BasicFeatures } from './features'; import { ActionDictOfEntityDict } from 'oak-domain/lib/types/Action'; import { CommonAspectDict } from 'oak-common-aspect'; -import { OakComponentOption } from './types/Page'; import { createComponent } from './page.web'; import { initialize as initDev } from './initialize-dev'; import { getI18next, I18nOptions } from './platforms/web/i18n'; import { AsyncContext, AsyncRowStore } from 'oak-domain/lib/store/AsyncRowStore'; import { SyncContext } from 'oak-domain/lib/store/SyncRowStore'; import { CacheStore } from './cacheStore/CacheStore'; +import { + DataOption, + PropertyOption, + MethodOption, + OakComponentOption } from './types/Page'; export function initialize< ED extends EntityDict & BaseEntityDict, @@ -83,11 +87,11 @@ export function initialize< Object.assign(global, { OakComponent: < T extends keyof ED, - FormedData extends WechatMiniprogram.Component.DataOption, + FormedData extends DataOption, IsList extends boolean, - TData extends WechatMiniprogram.Component.DataOption = {}, - TProperty extends WechatMiniprogram.Component.PropertyOption = {}, - TMethod extends WechatMiniprogram.Component.MethodOption = {} + TData extends DataOption = {}, + TProperty extends PropertyOption = {}, + TMethod extends MethodOption = {} >( options: OakComponentOption< ED, diff --git a/src/initialize.prod.mp.ts b/src/initialize.prod.mp.ts index 8c03e321..3a85d42b 100644 --- a/src/initialize.prod.mp.ts +++ b/src/initialize.prod.mp.ts @@ -18,13 +18,17 @@ import { Feature } from './types/Feature'; import { BasicFeatures } from './features'; import { ActionDictOfEntityDict } from 'oak-domain/lib/types/Action'; import { CommonAspectDict } from 'oak-common-aspect'; -import { OakComponentOption } from './types/Page'; import { createComponent } from './page.mp'; import { initialize as initProd } from './initialize-prod'; import { getI18next, I18nOptions } from './platforms/wechatMp/i18n'; import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore'; import { SyncContext } from 'oak-domain/lib/store/SyncRowStore'; import { CacheStore } from './cacheStore/CacheStore'; +import { + DataOption, + PropertyOption, + MethodOption, + OakComponentOption } from './types/Page'; export function initialize< ED extends EntityDict & BaseEntityDict, @@ -60,11 +64,11 @@ export function initialize< Object.assign(global, { OakComponent: < T extends keyof ED, - FormedData extends WechatMiniprogram.Component.DataOption, + FormedData extends DataOption, IsList extends boolean, - TData extends WechatMiniprogram.Component.DataOption = {}, - TProperty extends WechatMiniprogram.Component.PropertyOption = {}, - TMethod extends WechatMiniprogram.Component.MethodOption = {} + TData extends DataOption = {}, + TProperty extends PropertyOption = {}, + TMethod extends MethodOption = {} >( options: OakComponentOption< ED, diff --git a/src/initialize.prod.web.ts b/src/initialize.prod.web.ts index 55018894..f8087c7d 100644 --- a/src/initialize.prod.web.ts +++ b/src/initialize.prod.web.ts @@ -18,7 +18,11 @@ import { Feature } from './types/Feature'; import { BasicFeatures } from './features'; import { ActionDictOfEntityDict } from 'oak-domain/lib/types/Action'; import { CommonAspectDict } from 'oak-common-aspect'; -import { OakComponentOption } from './types/Page'; +import { + DataOption, + PropertyOption, + MethodOption, + OakComponentOption } from './types/Page'; import { createComponent } from './page.web'; import { initialize as initProd } from './initialize-prod'; import { getI18next, I18nOptions } from './platforms/web/i18n'; @@ -60,11 +64,11 @@ export function initialize< Object.assign(global, { OakComponent: < T extends keyof ED, - FormedData extends WechatMiniprogram.Component.DataOption, + FormedData extends DataOption, IsList extends boolean, - TData extends WechatMiniprogram.Component.DataOption = {}, - TProperty extends WechatMiniprogram.Component.PropertyOption = {}, - TMethod extends WechatMiniprogram.Component.MethodOption = {} + TData extends DataOption = {}, + TProperty extends PropertyOption = {}, + TMethod extends MethodOption = {} >( options: OakComponentOption< ED, diff --git a/src/page.common.ts b/src/page.common.ts index 71d684be..c1c80c01 100644 --- a/src/page.common.ts +++ b/src/page.common.ts @@ -43,11 +43,7 @@ export async function onPathSet< filter: typeof filter === 'function' ? () => - (filter as Function).call(this, { - features, - props: this.props, - state: this.state, - }) + (filter as Function).call(this) : filter, ['#name']: name, }); @@ -57,11 +53,7 @@ export async function onPathSet< if (!proj && projection) { proj = typeof projection === 'function' ? () => - (projection as Function).call(this, { - features, - props: this.props, - state: this.state, - }) + (projection as Function).call(this) : projection; } let sorters2: NamedSorterItem[] = []; @@ -76,11 +68,7 @@ export async function onPathSet< sorter: typeof sorter === 'function' ? () => - (sorter as Function).call(this, { - features, - props: this.props, - state: this.state, - }) + (sorter as Function).call(this) : sorter, ['#name']: name, }); diff --git a/src/page.mp.ts b/src/page.mp.ts index 014f3cb9..7563c911 100644 --- a/src/page.mp.ts +++ b/src/page.mp.ts @@ -6,6 +6,9 @@ import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain'; import { BasicFeatures } from './features'; import { Feature } from './types/Feature'; import { + DataOption, + PropertyOption, + MethodOption, ComponentProps, OakCommonComponentMethods, OakComponentOption, @@ -44,7 +47,7 @@ type ADD = Record>; type FDD = Record; type FrontCxt = SyncContext; const oakBehavior = Behavior< - WechatMiniprogram.Component.DataOption, + DataOption, WechatMiniprogram.Component.PropertyOption, OakCommonComponentMethods & OakListComponentMethods & @@ -626,7 +629,7 @@ export function createComponent< FormedData extends Record, IsList extends boolean, TData extends Record = {}, - TProperty extends WechatMiniprogram.Component.PropertyOption = {}, + TProperty extends PropertyOption = {}, TMethod extends Record = {} >( option: OakComponentOption< @@ -656,9 +659,9 @@ export function createComponent< const { options, externalClasses } = wechatMp || {}; return Component< - WechatMiniprogram.Component.DataOption, + DataOption, WechatMiniprogram.Component.PropertyOption, - WechatMiniprogram.Component.MethodOption, + MethodOption, { state: Record; props: { @@ -704,7 +707,7 @@ export function createComponent< }) : { oakFullpath: '', }, - properties: Object.assign( + properties: Object.assign( {}, properties, OakProperties diff --git a/src/page.web.tsx b/src/page.web.tsx index a7f00bb7..a5a99051 100644 --- a/src/page.web.tsx +++ b/src/page.web.tsx @@ -10,6 +10,9 @@ import { BasicFeatures } from './features'; import { NamedFilterItem, NamedSorterItem } from './types/NamedCondition'; import { Feature } from './types/Feature'; import { + DataOption, + PropertyOption, + MethodOption, ComponentData, ComponentProps, OakComponentOption, @@ -38,9 +41,9 @@ abstract class OakComponentBase< FD extends Record, FormedData extends Record, IsList extends boolean, - TData extends WechatMiniprogram.Component.DataOption, - TProperty extends WechatMiniprogram.Component.PropertyOption, - TMethod extends WechatMiniprogram.Component.MethodOption + TData extends DataOption, + TProperty extends PropertyOption, + TMethod extends MethodOption > extends React.PureComponent< ComponentProps, ComponentData @@ -617,7 +620,7 @@ export function createComponent< FormedData extends Record, IsList extends boolean, TData extends Record = {}, - TProperty extends WechatMiniprogram.Component.PropertyOption = {}, + TProperty extends PropertyOption = {}, TMethod extends Record = {} >( option: OakComponentOption< diff --git a/src/types/Page.ts b/src/types/Page.ts index 35c06443..fff717f0 100644 --- a/src/types/Page.ts +++ b/src/types/Page.ts @@ -10,6 +10,77 @@ import { MessageProps } from './Message'; import { AsyncContext } from "oak-domain/lib/store/AsyncRowStore"; import { SyncContext } from "oak-domain/lib/store/SyncRowStore"; +export type PropertyOption = Record; + +export type DataOption = WechatMiniprogram.Component.DataOption; + +export type MethodOption = WechatMiniprogram.Component.MethodOption; + +/** + * 微信的原声明中少写了FunctionConstructor,只能抄一遍 + */ +type PropertyType = + | FunctionConstructor + | StringConstructor + | NumberConstructor + | BooleanConstructor + | ArrayConstructor + | ObjectConstructor + | null +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 +type FullProperty = { + /** 属性类型 */ + type: T + /** 属性初始值 */ + value?: ValueType | undefined + /** 属性值被更改时的响应函数 */ + observer?: + | string + | (( + newVal: ValueType, + oldVal: ValueType, + changedPath: Array + ) => void) | undefined + /** 属性的类型(可以指定多个) */ + optionalTypes?: ShortProperty[] | undefined +} +type AllFullProperty = + | FullProperty + | FullProperty + | FullProperty + | FullProperty + | FullProperty + | FullProperty +type ShortProperty = + | FunctionConstructor + | StringConstructor + | NumberConstructor + | BooleanConstructor + | ArrayConstructor + | ObjectConstructor + | null +type AllProperty = AllFullProperty | ShortProperty +type PropertyToData = T extends ShortProperty + ? ValueType + : FullPropertyToData> +type FullPropertyToData = ValueType +type PropertyOptionToData

= { + [name in keyof P]: PropertyToData +}; interface ComponentOption< ED extends EntityDict & BaseEntityDict, @@ -20,41 +91,32 @@ interface ComponentOption< FD extends Record, FormedData extends Record, IsList extends boolean, - TProperty extends WechatMiniprogram.Component.PropertyOption = {}, + TData extends DataOption, + TProperty extends PropertyOption, > { - entity?: T | (() => T); + entity?: T | ((this: ComponentPublicThisType) => T); path?: string; isList: IsList; - projection?: ED[T]['Selection']['data'] | ((options: { - features: BasicFeatures> & FD; - props: Partial>; - state: Record; - }) => ED[T]['Selection']['data']); + projection?: ED[T]['Selection']['data'] | ((this: ComponentPublicThisType) => ED[T]['Selection']['data']); append?: boolean; pagination?: Pagination; filters?: Array<{ - filter: ED[T]['Selection']['filter'] | ((options: { - features: BasicFeatures> & FD; - props: Partial>; - state: Record; - }) => ED[T]['Selection']['filter'] | undefined) + filter: ED[T]['Selection']['filter'] | ((this: ComponentPublicThisType) => ED[T]['Selection']['filter'] | undefined); '#name'?: string; }>; sorters?: Array<{ - sorter: NonNullable[number] | ((options: { - features: BasicFeatures> & FD; - props: Partial>; - state: Record; - }) => NonNullable[number]) + sorter: NonNullable[number] | ((this: ComponentPublicThisType) => NonNullable[number]); '#name'?: string; }>; formData?: (options: { data: IsList extends true ? Partial[] : Partial | undefined; features: BasicFeatures> & FD; - props: Partial>; + props: Partial>; legalActions: ED[T]['Action'][]; - }) => FormedData; + }) => FormedData & ThisType>; ns?: T | T[]; + data?: ((this: ComponentPublicThisType) => TData) | TData; + properties?: TProperty; }; export type MiniprogramStyleMethods = { @@ -76,15 +138,15 @@ export type MiniprogramStyleMethods = { ) => void; } -export type ComponentProps = IsList extends true ? - WechatMiniprogram.Component.PropertyOptionToData : - WechatMiniprogram.Component.PropertyOptionToData; +export type ComponentProps = IsList extends true ? + PropertyOptionToData : + PropertyOptionToData; export type ComponentData< ED extends EntityDict & BaseEntityDict, T extends keyof ED, - FormedData extends WechatMiniprogram.Component.DataOption, - TData extends WechatMiniprogram.Component.DataOption + FormedData extends DataOption, + TData extends DataOption > = TData & FormedData & OakComponentData; export type ComponentPublicThisType< @@ -97,8 +159,8 @@ export type ComponentPublicThisType< FormedData extends Record, IsList extends boolean, TData extends Record = {}, - TProperty extends WechatMiniprogram.Component.PropertyOption = {}, - TMethod extends WechatMiniprogram.Component.MethodOption = {} + TProperty extends PropertyOption = {}, + TMethod extends MethodOption = {} > = { subscribed: Array<() => void>; features: FD & BasicFeatures>; @@ -135,7 +197,7 @@ export type ComponentFullThisType< detail?: DetailType, options?: WechatMiniprogram.Component.TriggerEventOption ) => void; - } & OakCommonComponentMethods & OakListComponentMethods & OakSingleComponentMethods; + } & OakCommonComponentMethods & OakListComponentMethods & OakSingleComponentMethods; export type OakComponentOption< ED extends EntityDict & BaseEntityDict, @@ -147,12 +209,10 @@ export type OakComponentOption< FormedData extends Record, IsList extends boolean, TData extends Record, - TProperty extends WechatMiniprogram.Component.PropertyOption, + TProperty extends PropertyOption, TMethod extends Record, - > = ComponentOption & + > = ComponentOption & Partial<{ - data?: ((option: { features: BasicFeatures> & FD, props: ComponentProps }) => TData) | TData; - properties: Record; methods: TMethod; lifetimes: { created?(): void; @@ -164,7 +224,7 @@ export type OakComponentOption< show?(): void; hide?(): void; }; - actions?: ED[T]['Action'][] | ((this: ComponentPublicThisType< + actions: ED[T]['Action'][] | ((this: ComponentPublicThisType< ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty, TMethod >) => ED[T]['Action'][]); observers: Record any>; @@ -347,11 +407,11 @@ export type MakeOakComponent< FD extends Record > = < T extends keyof ED, - FormedData extends WechatMiniprogram.Component.DataOption, + FormedData extends DataOption, IsList extends boolean, - TData extends WechatMiniprogram.Component.DataOption, - TProperty extends WechatMiniprogram.Component.PropertyOption, - TMethod extends WechatMiniprogram.Component.MethodOption + TData extends DataOption, + TProperty extends PropertyOption, + TMethod extends MethodOption >( options: OakComponentOption< ED, @@ -382,8 +442,8 @@ export type WebComponentProps< ED extends EntityDict & BaseEntityDict, T extends keyof ED, IsList extends boolean, - TData extends WechatMiniprogram.Component.DataOption = {}, - TMethod extends WechatMiniprogram.Component.MethodOption = {}> = { + TData extends DataOption = {}, + TMethod extends MethodOption = {}> = { methods: TMethod & OakCommonComponentMethods & OakListComponentMethods & OakSingleComponentMethods; data: TData & OakComponentData & (IsList extends true ? OakListComoponetData : {});