为了适配小程序,修改了一点点formData的逻辑

This commit is contained in:
Xu Chang 2022-11-02 16:35:40 +08:00
parent b1564b3c47
commit 5361708764
10 changed files with 81 additions and 75 deletions

View File

@ -43,7 +43,7 @@ var Navigator = /** @class */ (function (_super) {
return new Promise(function (resolve, reject) {
wx.navigateTo({
url: url,
success: function () { return resolve(void ); },
success: function () { return resolve(undefined); },
fail: function (err) { return reject(err); }
});
});
@ -53,7 +53,7 @@ var Navigator = /** @class */ (function (_super) {
return new Promise(function (resolve, reject) {
wx.redirectTo({
url: url,
success: function () { return resolve(void ); },
success: function () { return resolve(undefined); },
fail: function (err) { return reject(err); }
});
});
@ -63,7 +63,7 @@ var Navigator = /** @class */ (function (_super) {
return new Promise(function (resolve, reject) {
wx.navigateBack({
delta: delta,
success: function () { return resolve(void ); },
success: function () { return resolve(undefined); },
fail: function (err) { return reject(err); }
});
});

View File

@ -8,7 +8,7 @@ export declare class Navigator extends Feature {
* @param history
*/
setHistory(history: BrowserHistory): void;
getLocation(): any;
getLocation(): import("history").Location;
navigateTo(url: string, state?: Record<string, any>): Promise<void>;
redirectTo(url: string, state?: Record<string, any>): Promise<void>;
navigateBack(delta?: number): Promise<void>;

View File

@ -10,6 +10,6 @@ import { I18nOptions } from './platforms/web/i18n';
export declare function initialize<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>>(storageSchema: StorageSchema<ED>, createFeatures: (aspectWrapper: AspectWrapper<ED, Cxt, AD>, basicFeatures: BasicFeatures<ED, Cxt, AD & CommonAspectDict<ED, Cxt>>) => FD, frontendContextBuilder: (features: FD & BasicFeatures<ED, Cxt, AD & CommonAspectDict<ED, Cxt>>) => (store: RowStore<ED, Cxt>) => Cxt, backendContextBuilder: (contextStr?: string) => (store: RowStore<ED, Cxt>) => Promise<Cxt>, aspectDict: AD, triggers?: Array<Trigger<ED, keyof ED, Cxt>>, checkers?: Array<Checker<ED, keyof ED, Cxt>>, watchers?: Array<Watcher<ED, keyof ED, Cxt>>, initialData?: {
[T in keyof ED]?: Array<ED[T]['OpSchema']>;
}, actionDict?: ActionDictOfEntityDict<ED>, i18nOptions?: I18nOptions): {
i18n: any;
i18n: import("i18next").i18n;
features: FD & BasicFeatures<ED, Cxt, AD & CommonAspectDict<ED, Cxt>>;
};

View File

@ -8,6 +8,6 @@ import { ActionDictOfEntityDict } from 'oak-domain/lib/types/Action';
import { CommonAspectDict } from 'oak-common-aspect';
import { I18nOptions } from './platforms/web/i18n';
export declare function initialize<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>, AD extends Record<string, Aspect<ED, Cxt>>, FD extends Record<string, Feature>>(storageSchema: StorageSchema<ED>, createFeatures: (aspectWrapper: AspectWrapper<ED, Cxt, AD>, basicFeatures: BasicFeatures<ED, Cxt, AD & CommonAspectDict<ED, Cxt>>) => FD, frontendContextBuilder: (features: FD & BasicFeatures<ED, Cxt, AD & CommonAspectDict<ED, Cxt>>) => (store: RowStore<ED, Cxt>) => Cxt, connector: Connector<ED, Cxt>, checkers?: Array<Checker<ED, keyof ED, Cxt>>, actionDict?: ActionDictOfEntityDict<ED>, i18nOptions?: I18nOptions): {
i18n: any;
i18n: import("i18next").i18n;
features: FD & BasicFeatures<ED, Cxt, AD & CommonAspectDict<ED, Cxt>>;
};

View File

@ -164,7 +164,7 @@ function onPathSet(option) {
exports.onPathSet = onPathSet;
function reRender(option, extra) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var features, formData, rows, oakDirty, oakLoading, oakPullDownRefreshLoading, oakLoadingMore, oakExecuting, data, _a, k, oakAllowExecuting, err_1, actions, testResult, oakLegalActions, data, _b;
var features, formData, rows, oakDirty, oakLoading, oakPullDownRefreshLoading, oakLoadingMore, oakExecuting, oakLegalActions, actions, testResult, data, _a, k, oakAllowExecuting, err_1, data, _b;
var _c;
var _this = this;
return tslib_1.__generator(this, function (_d) {
@ -181,20 +181,47 @@ function reRender(option, extra) {
oakPullDownRefreshLoading = this.pullDownRefresh && this.features.runningTree.isLoading(this.state.oakFullpath);
oakLoadingMore = this.features.runningTree.isLoadingMore(this.state.oakFullpath);
oakExecuting = this.features.runningTree.isExecuting(this.state.oakFullpath);
if (!formData) return [3 /*break*/, 3];
oakLegalActions = [];
actions = this.props.oakActions || option.actions;
if (!(actions && actions.length > 0)) return [3 /*break*/, 3];
(0, assert_1.assert)(this.props.oakId); // actions必须配合id来使用
return [4 /*yield*/, Promise.all(actions.map(function (ele) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = {
action: ele
};
return [4 /*yield*/, this.checkOperation(this.state.oakEntity, ele, { id: this.props.oakId }, ['user', 'row'])];
case 1: return [2 /*return*/, (_a.result = _b.sent(),
_a)];
}
});
}); }))];
case 2:
testResult = _d.sent();
oakLegalActions = testResult.filter(function (ele) { return ele.result; }).map(function (ele) { return ele.action; });
_d.label = 3;
case 3:
if (!formData) return [3 /*break*/, 5];
return [4 /*yield*/, formData.call(this, {
data: rows,
features: features,
props: this.props,
legalActions: oakLegalActions,
})];
case 2:
_a = _d.sent();
return [3 /*break*/, 4];
case 3:
_a = {};
_d.label = 4;
case 4:
_a = _d.sent();
return [3 /*break*/, 6];
case 5:
_a = {};
_d.label = 6;
case 6:
data = _a;
Object.assign(data, {
oakLegalActions: oakLegalActions,
});
for (k in data) {
if (data[k] === undefined) {
Object.assign(data, (_c = {},
@ -213,14 +240,14 @@ function reRender(option, extra) {
Object.assign(data, extra);
}
oakAllowExecuting = false;
_d.label = 5;
case 5:
_d.trys.push([5, 7, , 8]);
return [4 /*yield*/, this.features.runningTree.tryExecute(this.state.oakFullpath)];
case 6:
oakAllowExecuting = _d.sent();
return [3 /*break*/, 8];
_d.label = 7;
case 7:
_d.trys.push([7, 9, , 10]);
return [4 /*yield*/, this.features.runningTree.tryExecute(this.state.oakFullpath)];
case 8:
oakAllowExecuting = _d.sent();
return [3 /*break*/, 10];
case 9:
err_1 = _d.sent();
if (err_1 instanceof types_1.OakUserException) {
oakAllowExecuting = err_1;
@ -229,36 +256,11 @@ function reRender(option, extra) {
oakAllowExecuting = false;
throw err_1;
}
return [3 /*break*/, 8];
case 8:
return [3 /*break*/, 10];
case 10:
Object.assign(data, {
oakAllowExecuting: oakAllowExecuting,
});
actions = this.props.oakActions || option.actions;
if (!(actions && actions.length > 0)) return [3 /*break*/, 10];
(0, assert_1.assert)(this.props.oakId); // actions必须配合id来使用
return [4 /*yield*/, Promise.all(actions.map(function (ele) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
_a = {
action: ele
};
return [4 /*yield*/, this.checkOperation(this.state.oakEntity, ele, { id: this.props.oakId }, ['user', 'row'])];
case 1: return [2 /*return*/, (_a.result = _b.sent(),
_a)];
}
});
}); }))];
case 9:
testResult = _d.sent();
oakLegalActions = testResult.filter(function (ele) { return ele.result; }).map(function (ele) { return ele.action; });
Object.assign(data, {
oakLegalActions: oakLegalActions,
});
_d.label = 10;
case 10:
this.setState(data);
return [3 /*break*/, 15];
case 11:

View File

@ -1,4 +1,4 @@
export declare type I18nOptions = {
version?: string;
};
export declare function getI18next(options?: I18nOptions): any;
export declare function getI18next(options?: I18nOptions): import("i18next").i18n;

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

@ -41,6 +41,7 @@ interface ComponentOption<ED extends EntityDict & BaseEntityDict, T extends keyo
data: IsList extends true ? RowSelected<ED, T, Proj>[] : RowSelected<ED, T, Proj> | undefined;
features: BasicFeatures<ED, Cxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: Partial<WechatMiniprogram.Component.PropertyOptionToData<TProperty>>;
legalActions: ED[T]['Action'][];
}) => Promise<FormedData>;
ns?: T | T[];
}

View File

@ -46,7 +46,7 @@ export class Navigator extends Feature {
(resolve, reject) => {
wx.navigateTo({
url,
success: () => resolve(void),
success: () => resolve(undefined),
fail: (err) => reject(err)
})
}
@ -59,7 +59,7 @@ export class Navigator extends Feature {
(resolve, reject) => {
wx.redirectTo({
url,
success: () => resolve(void),
success: () => resolve(undefined),
fail: (err) => reject(err)
})
}
@ -71,7 +71,7 @@ export class Navigator extends Feature {
(resolve, reject) => {
wx.navigateBack({
delta,
success: () => resolve(void),
success: () => resolve(undefined),
fail: (err) => reject(err)
})
}

View File

@ -134,7 +134,7 @@ export async function onPathSet<
// 创建virtualNode
await features.runningTree.createNode({
path: oakPath2 as string,
});
});
}
await this.refresh();
}
@ -159,13 +159,36 @@ export async function reRender<
const oakLoadingMore = this.features.runningTree.isLoadingMore(this.state.oakFullpath);
const oakExecuting = this.features.runningTree.isExecuting(this.state.oakFullpath);
let oakLegalActions: ED[T]['Action'][] = [];
const actions: ED[T]['Action'][] = this.props.oakActions || option.actions;
if (actions && actions.length > 0) {
assert(this.props.oakId); // actions必须配合id来使用
const testResult = await Promise.all(
actions.map(
async ele => ({
action: ele,
result: await this.checkOperation(this.state.oakEntity, ele, { id: this.props.oakId }, ['user', 'row']),
})
)
);
oakLegalActions = testResult.filter(
ele => ele.result
).map(
ele => ele.action
);
}
const data: Record<string, any> = formData
? await formData.call(this, {
data: rows as any,
features,
props: this.props,
legalActions: oakLegalActions,
})
: {};
Object.assign(data, {
oakLegalActions,
});
for (const k in data) {
if (data[k] === undefined) {
Object.assign(data, {
@ -201,27 +224,6 @@ export async function reRender<
oakAllowExecuting,
});
const actions: ED[T]['Action'][] = this.props.oakActions || option.actions;
if (actions && actions.length > 0) {
assert(this.props.oakId); // actions必须配合id来使用
const testResult = await Promise.all(
actions.map(
async ele => ({
action: ele,
result: await this.checkOperation(this.state.oakEntity, ele, { id: this.props.oakId }, ['user', 'row']),
})
)
);
const oakLegalActions = testResult.filter(
ele => ele.result
).map(
ele => ele.action
);
Object.assign(data, {
oakLegalActions,
});
}
this.setState(data);
} else {
const data: Record<string, any> = formData
@ -290,7 +292,7 @@ export async function execute<
const fullpath = path
? `${this.state.oakFullpath}.${path}`
: this.state.oakFullpath;
const result = await this.features.runningTree.execute(fullpath, operation);
const result = await this.features.runningTree.execute(fullpath, operation);
await this.setMessage({
type: 'success',
content: '操作成功',

View File

@ -57,6 +57,7 @@ interface ComponentOption<
data: IsList extends true ? RowSelected<ED, T, Proj>[] : RowSelected<ED, T, Proj> | undefined;
features: BasicFeatures<ED, Cxt, AD & CommonAspectDict<ED, Cxt>> & FD;
props: Partial<WechatMiniprogram.Component.PropertyOptionToData<TProperty>>;
legalActions: ED[T]['Action'][];
}) => Promise<FormedData>;
ns?: T | T[];
};