大改了一通Page的相关定义

This commit is contained in:
Xu Chang 2023-02-02 16:59:19 +08:00
parent f17eb951ce
commit 44868cb150
12 changed files with 202 additions and 134 deletions

View File

@ -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
},

5
lib/page.mp.d.ts vendored
View File

@ -1,11 +1,10 @@
/// <reference types="wechat-miniprogram" />
/// <reference types="wechat-miniprogram" />
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<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>, FormedData extends Record<string, any>, IsList extends boolean, TData extends Record<string, any> = {}, TProperty extends WechatMiniprogram.Component.PropertyOption = {}, TMethod extends Record<string, Function> = {}>(option: OakComponentOption<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty, TMethod>, features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD): string;
export declare function createComponent<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>, FormedData extends Record<string, any>, IsList extends boolean, TData extends Record<string, any> = {}, TProperty extends PropertyOption = {}, TMethod extends Record<string, Function> = {}>(option: OakComponentOption<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty, TMethod>, features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD): string;

5
lib/page.web.d.ts vendored
View File

@ -1,12 +1,11 @@
/// <reference types="wechat-miniprogram" />
/// <reference types="wechat-miniprogram" />
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<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>, FormedData extends Record<string, any>, IsList extends boolean, TData extends Record<string, any> = {}, TProperty extends WechatMiniprogram.Component.PropertyOption = {}, TMethod extends Record<string, Function> = {}>(option: OakComponentOption<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty, TMethod>, features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD): React.ForwardRefExoticComponent<React.RefAttributes<unknown>>;
export declare function createComponent<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>, FormedData extends Record<string, any>, IsList extends boolean, TData extends Record<string, any> = {}, TProperty extends PropertyOption = {}, TMethod extends Record<string, Function> = {}>(option: OakComponentOption<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty, TMethod>, features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD): React.ForwardRefExoticComponent<React.RefAttributes<unknown>>;

74
lib/types/Page.d.ts vendored
View File

@ -1,5 +1,6 @@
/// <reference types="wechat-miniprogram" />
/// <reference types="react" />
/// <reference types="wechat-miniprogram" />
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<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>, FormedData extends Record<string, any>, IsList extends boolean, TProperty extends WechatMiniprogram.Component.PropertyOption = {}> {
entity?: T | (() => T);
export declare type PropertyOption = Record<string, WechatMiniprogram.Component.AllProperty | FunctionConstructor>;
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 PropertyType> = 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<T extends PropertyType> = {
/** 属性类型 */
type: T;
/** 属性初始值 */
value?: ValueType<T> | undefined;
/** 属性值被更改时的响应函数 */
observer?: string | ((newVal: ValueType<T>, oldVal: ValueType<T>, changedPath: Array<string | number>) => void) | undefined;
/** 属性的类型(可以指定多个) */
optionalTypes?: ShortProperty[] | undefined;
};
declare type AllFullProperty = FullProperty<StringConstructor> | FullProperty<NumberConstructor> | FullProperty<BooleanConstructor> | FullProperty<ArrayConstructor> | FullProperty<ObjectConstructor> | FullProperty<null>;
declare type ShortProperty = FunctionConstructor | StringConstructor | NumberConstructor | BooleanConstructor | ArrayConstructor | ObjectConstructor | null;
declare type AllProperty = AllFullProperty | ShortProperty;
declare type PropertyToData<T extends AllProperty> = T extends ShortProperty ? ValueType<T> : FullPropertyToData<Exclude<T, ShortProperty>>;
declare type FullPropertyToData<T extends AllFullProperty> = ValueType<T['type']>;
declare type PropertyOptionToData<P extends PropertyOption> = {
[name in keyof P]: PropertyToData<P[name]>;
};
interface ComponentOption<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>, FormedData extends Record<string, any>, IsList extends boolean, TData extends DataOption, TProperty extends PropertyOption> {
entity?: T | ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty>) => T);
path?: string;
isList: IsList;
projection?: ED[T]['Selection']['data'] | ((options: {
features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: Partial<WechatMiniprogram.Component.PropertyOptionToData<TProperty>>;
state: Record<string, any>;
}) => ED[T]['Selection']['data']);
projection?: ED[T]['Selection']['data'] | ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty>) => ED[T]['Selection']['data']);
append?: boolean;
pagination?: Pagination;
filters?: Array<{
filter: ED[T]['Selection']['filter'] | ((options: {
features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: Partial<WechatMiniprogram.Component.PropertyOptionToData<TProperty>>;
state: Record<string, any>;
}) => ED[T]['Selection']['filter'] | undefined);
filter: ED[T]['Selection']['filter'] | ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty>) => ED[T]['Selection']['filter'] | undefined);
'#name'?: string;
}>;
sorters?: Array<{
sorter: NonNullable<ED[T]['Selection']['sorter']>[number] | ((options: {
features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: Partial<WechatMiniprogram.Component.PropertyOptionToData<TProperty>>;
state: Record<string, any>;
}) => NonNullable<ED[T]['Selection']['sorter']>[number]);
sorter: NonNullable<ED[T]['Selection']['sorter']>[number] | ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty>) => NonNullable<ED[T]['Selection']['sorter']>[number]);
'#name'?: string;
}>;
formData?: (options: {
data: IsList extends true ? Partial<ED[T]['Schema']>[] : Partial<ED[T]['Schema']> | undefined;
features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: Partial<WechatMiniprogram.Component.PropertyOptionToData<TProperty>>;
props: Partial<PropertyOptionToData<TProperty>>;
legalActions: ED[T]['Action'][];
}) => FormedData;
}) => FormedData & ThisType<ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList>>;
ns?: T | T[];
data?: ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty>) => 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: <DetailType = any>(name: string, detail?: DetailType, options?: WechatMiniprogram.Component.TriggerEventOption) => void;
};
export declare type ComponentProps<IsList extends boolean, TProperty extends WechatMiniprogram.Component.PropertyOption> = IsList extends true ? WechatMiniprogram.Component.PropertyOptionToData<OakListComponentProperties & OakComponentProperties & TProperty> : WechatMiniprogram.Component.PropertyOptionToData<OakComponentProperties & TProperty>;
export declare type ComponentData<ED extends EntityDict & BaseEntityDict, T extends keyof ED, FormedData extends WechatMiniprogram.Component.DataOption, TData extends WechatMiniprogram.Component.DataOption> = TData & FormedData & OakComponentData<ED, T>;
export declare type ComponentPublicThisType<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>, FormedData extends Record<string, any>, IsList extends boolean, TData extends Record<string, any> = {}, TProperty extends WechatMiniprogram.Component.PropertyOption = {}, TMethod extends WechatMiniprogram.Component.MethodOption = {}> = {
export declare type ComponentProps<IsList extends boolean, TProperty extends PropertyOption> = IsList extends true ? PropertyOptionToData<OakListComponentProperties & OakComponentProperties & TProperty> : PropertyOptionToData<OakComponentProperties & TProperty>;
export declare type ComponentData<ED extends EntityDict & BaseEntityDict, T extends keyof ED, FormedData extends DataOption, TData extends DataOption> = TData & FormedData & OakComponentData<ED, T>;
export declare type ComponentPublicThisType<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>, FormedData extends Record<string, any>, IsList extends boolean, TData extends Record<string, any> = {}, TProperty extends PropertyOption = {}, TMethod extends MethodOption = {}> = {
subscribed: Array<() => void>;
features: FD & BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>>;
state: ComponentData<ED, T, FormedData, TData>;
@ -69,12 +86,7 @@ export declare type ComponentFullThisType<ED extends EntityDict & BaseEntityDict
setState: (data: Partial<OakComponentData<ED, T>>, callback?: () => void) => void;
triggerEvent: <DetailType = any>(name: string, detail?: DetailType, options?: WechatMiniprogram.Component.TriggerEventOption) => void;
} & OakCommonComponentMethods<ED, T> & OakListComponentMethods<ED, T> & OakSingleComponentMethods<ED, T>;
export declare type OakComponentOption<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>, FormedData extends Record<string, any>, IsList extends boolean, TData extends Record<string, any>, TProperty extends WechatMiniprogram.Component.PropertyOption, TMethod extends Record<string, Function>> = ComponentOption<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TProperty> & Partial<{
data?: ((option: {
features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: ComponentProps<IsList, TProperty>;
}) => TData) | TData;
properties: Record<string, FunctionConstructor | WechatMiniprogram.Component.AllProperty>;
export declare type OakComponentOption<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>, FormedData extends Record<string, any>, IsList extends boolean, TData extends Record<string, any>, TProperty extends PropertyOption, TMethod extends Record<string, Function>> = ComponentOption<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty> & Partial<{
methods: TMethod;
lifetimes: {
created?(): void;
@ -86,7 +98,7 @@ export declare type OakComponentOption<ED extends EntityDict & BaseEntityDict, T
show?(): void;
hide?(): void;
};
actions?: ED[T]['Action'][] | ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty, TMethod>) => ED[T]['Action'][]);
actions: ED[T]['Action'][] | ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty, TMethod>) => ED[T]['Action'][]);
observers: Record<string, (...args: any[]) => any>;
}> & Partial<{
wechatMp: {
@ -218,11 +230,11 @@ export declare type OakListComoponetData<ED extends EntityDict & BaseEntityDict,
oakSorters?: NonNullable<ED[T]['Selection']['sorter']>[];
oakPagination?: Pagination;
};
export declare type MakeOakComponent<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>> = <T extends keyof ED, FormedData extends WechatMiniprogram.Component.DataOption, IsList extends boolean, TData extends WechatMiniprogram.Component.DataOption, TProperty extends WechatMiniprogram.Component.PropertyOption, TMethod extends WechatMiniprogram.Component.MethodOption>(options: OakComponentOption<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty, TMethod>) => React.ComponentType<any>;
export declare type MakeOakComponent<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>, FrontCxt extends SyncContext<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>> = <T extends keyof ED, FormedData extends DataOption, IsList extends boolean, TData extends DataOption, TProperty extends PropertyOption, TMethod extends MethodOption>(options: OakComponentOption<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty, TMethod>) => React.ComponentType<any>;
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<ED extends EntityDict & BaseEntityDict, T extends keyof ED, IsList extends boolean, TData extends WechatMiniprogram.Component.DataOption = {}, TMethod extends WechatMiniprogram.Component.MethodOption = {}> = {
export declare type WebComponentProps<ED extends EntityDict & BaseEntityDict, T extends keyof ED, IsList extends boolean, TData extends DataOption = {}, TMethod extends MethodOption = {}> = {
methods: TMethod & OakCommonComponentMethods<ED, T> & OakListComponentMethods<ED, T> & OakSingleComponentMethods<ED, T>;
data: TData & OakComponentData<ED, T> & (IsList extends true ? OakListComoponetData<ED, T> : {});
};

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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,

View File

@ -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<ED, T>[] = [];
@ -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,
});

View File

@ -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<string, Aspect<EDD, Cxt>>;
type FDD = Record<string, Feature>;
type FrontCxt = SyncContext<EntityDict & BaseEntityDict>;
const oakBehavior = Behavior<
WechatMiniprogram.Component.DataOption,
DataOption,
WechatMiniprogram.Component.PropertyOption,
OakCommonComponentMethods<EDD, keyof EDD> &
OakListComponentMethods<EDD, keyof EDD> &
@ -626,7 +629,7 @@ export function createComponent<
FormedData extends Record<string, any>,
IsList extends boolean,
TData extends Record<string, any> = {},
TProperty extends WechatMiniprogram.Component.PropertyOption = {},
TProperty extends PropertyOption = {},
TMethod extends Record<string, Function> = {}
>(
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<string, any>;
props: {
@ -704,7 +707,7 @@ export function createComponent<
}) : {
oakFullpath: '',
},
properties: Object.assign(
properties: Object.assign(
{},
properties,
OakProperties

View File

@ -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<string, Feature>,
FormedData extends Record<string, any>,
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<IsList, TProperty>,
ComponentData<ED, T, FormedData, TData>
@ -617,7 +620,7 @@ export function createComponent<
FormedData extends Record<string, any>,
IsList extends boolean,
TData extends Record<string, any> = {},
TProperty extends WechatMiniprogram.Component.PropertyOption = {},
TProperty extends PropertyOption = {},
TMethod extends Record<string, Function> = {}
>(
option: OakComponentOption<

View File

@ -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<string, WechatMiniprogram.Component.AllProperty | FunctionConstructor>;
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 PropertyType> = 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<T extends PropertyType> = {
/** 属性类型 */
type: T
/** 属性初始值 */
value?: ValueType<T> | undefined
/** 属性值被更改时的响应函数 */
observer?:
| string
| ((
newVal: ValueType<T>,
oldVal: ValueType<T>,
changedPath: Array<string | number>
) => void) | undefined
/** 属性的类型(可以指定多个) */
optionalTypes?: ShortProperty[] | undefined
}
type AllFullProperty =
| FullProperty<StringConstructor>
| FullProperty<NumberConstructor>
| FullProperty<BooleanConstructor>
| FullProperty<ArrayConstructor>
| FullProperty<ObjectConstructor>
| FullProperty<null>
type ShortProperty =
| FunctionConstructor
| StringConstructor
| NumberConstructor
| BooleanConstructor
| ArrayConstructor
| ObjectConstructor
| null
type AllProperty = AllFullProperty | ShortProperty
type PropertyToData<T extends AllProperty> = T extends ShortProperty
? ValueType<T>
: FullPropertyToData<Exclude<T, ShortProperty>>
type FullPropertyToData<T extends AllFullProperty> = ValueType<T['type']>
type PropertyOptionToData<P extends PropertyOption> = {
[name in keyof P]: PropertyToData<P[name]>
};
interface ComponentOption<
ED extends EntityDict & BaseEntityDict,
@ -20,41 +91,32 @@ interface ComponentOption<
FD extends Record<string, Feature>,
FormedData extends Record<string, any>,
IsList extends boolean,
TProperty extends WechatMiniprogram.Component.PropertyOption = {},
TData extends DataOption,
TProperty extends PropertyOption,
> {
entity?: T | (() => T);
entity?: T | ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty>) => T);
path?: string;
isList: IsList;
projection?: ED[T]['Selection']['data'] | ((options: {
features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: Partial<WechatMiniprogram.Component.PropertyOptionToData<TProperty>>;
state: Record<string, any>;
}) => ED[T]['Selection']['data']);
projection?: ED[T]['Selection']['data'] | ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty>) => ED[T]['Selection']['data']);
append?: boolean;
pagination?: Pagination;
filters?: Array<{
filter: ED[T]['Selection']['filter'] | ((options: {
features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: Partial<WechatMiniprogram.Component.PropertyOptionToData<TProperty>>;
state: Record<string, any>;
}) => ED[T]['Selection']['filter'] | undefined)
filter: ED[T]['Selection']['filter'] | ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty>) => ED[T]['Selection']['filter'] | undefined);
'#name'?: string;
}>;
sorters?: Array<{
sorter: NonNullable<ED[T]['Selection']['sorter']>[number] | ((options: {
features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: Partial<WechatMiniprogram.Component.PropertyOptionToData<TProperty>>;
state: Record<string, any>;
}) => NonNullable<ED[T]['Selection']['sorter']>[number])
sorter: NonNullable<ED[T]['Selection']['sorter']>[number] | ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty>) => NonNullable<ED[T]['Selection']['sorter']>[number]);
'#name'?: string;
}>;
formData?: (options: {
data: IsList extends true ? Partial<ED[T]['Schema']>[] : Partial<ED[T]['Schema']> | undefined;
features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: Partial<WechatMiniprogram.Component.PropertyOptionToData<TProperty>>;
props: Partial<PropertyOptionToData<TProperty>>;
legalActions: ED[T]['Action'][];
}) => FormedData;
}) => FormedData & ThisType<ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList>>;
ns?: T | T[];
data?: ((this: ComponentPublicThisType<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty>) => TData) | TData;
properties?: TProperty;
};
export type MiniprogramStyleMethods = {
@ -76,15 +138,15 @@ export type MiniprogramStyleMethods = {
) => void;
}
export type ComponentProps<IsList extends boolean, TProperty extends WechatMiniprogram.Component.PropertyOption> = IsList extends true ?
WechatMiniprogram.Component.PropertyOptionToData<OakListComponentProperties & OakComponentProperties & TProperty> :
WechatMiniprogram.Component.PropertyOptionToData<OakComponentProperties & TProperty>;
export type ComponentProps<IsList extends boolean, TProperty extends PropertyOption> = IsList extends true ?
PropertyOptionToData<OakListComponentProperties & OakComponentProperties & TProperty> :
PropertyOptionToData<OakComponentProperties & TProperty>;
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<ED, T>;
export type ComponentPublicThisType<
@ -97,8 +159,8 @@ export type ComponentPublicThisType<
FormedData extends Record<string, any>,
IsList extends boolean,
TData extends Record<string, any> = {},
TProperty extends WechatMiniprogram.Component.PropertyOption = {},
TMethod extends WechatMiniprogram.Component.MethodOption = {}
TProperty extends PropertyOption = {},
TMethod extends MethodOption = {}
> = {
subscribed: Array<() => void>;
features: FD & BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>>;
@ -135,7 +197,7 @@ export type ComponentFullThisType<
detail?: DetailType,
options?: WechatMiniprogram.Component.TriggerEventOption
) => void;
} & OakCommonComponentMethods<ED, T> & OakListComponentMethods<ED, T> & OakSingleComponentMethods<ED, T>;
} & OakCommonComponentMethods<ED, T> & OakListComponentMethods<ED, T> & OakSingleComponentMethods<ED, T>;
export type OakComponentOption<
ED extends EntityDict & BaseEntityDict,
@ -147,12 +209,10 @@ export type OakComponentOption<
FormedData extends Record<string, any>,
IsList extends boolean,
TData extends Record<string, any>,
TProperty extends WechatMiniprogram.Component.PropertyOption,
TProperty extends PropertyOption,
TMethod extends Record<string, Function>,
> = ComponentOption<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TProperty> &
> = ComponentOption<ED, T, Cxt, FrontCxt, AD, FD, FormedData, IsList, TData, TProperty> &
Partial<{
data?: ((option: { features: BasicFeatures<ED, Cxt, FrontCxt, AD & CommonAspectDict<ED, Cxt>> & FD, props: ComponentProps<IsList, TProperty> }) => TData) | TData;
properties: Record<string, FunctionConstructor | WechatMiniprogram.Component.AllProperty>;
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<string, (...args: any[]) => any>;
@ -347,11 +407,11 @@ export type MakeOakComponent<
FD extends Record<string, Feature>
> = <
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<ED, T>
& OakListComponentMethods<ED, T> & OakSingleComponentMethods<ED, T>;
data: TData & OakComponentData<ED, T> & (IsList extends true ? OakListComoponetData<ED, T> : {});