大改了一通Page的相关定义
This commit is contained in:
parent
f17eb951ce
commit
44868cb150
|
|
@ -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
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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>>;
|
||||
|
|
|
|||
|
|
@ -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> : {});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<
|
||||
|
|
|
|||
|
|
@ -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> : {});
|
||||
|
|
|
|||
Loading…
Reference in New Issue