oak-frontend-base/lib/platforms/native/router/withRouter.js

78 lines
2.7 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = tslib_1.__importDefault(require("react"));
const assert_1 = require("oak-domain/lib/utils/assert");
function getParams(params, properties) {
const props = getProps(params, properties);
return Object.assign({}, props);
}
function getProps(params, properties) {
let query = params;
if (!params || Object.keys(params).length === 0) {
return;
}
const props = {};
for (const k in query) {
if (properties && properties.hasOwnProperty(k)) {
switch (typeof properties[k]) {
case 'number': {
Object.assign(props, {
[k]: Number(query[k]),
});
break;
}
case 'boolean': {
Object.assign(props, {
[k]: Boolean(query[k]),
});
break;
}
case 'object': {
Object.assign(props, {
[k]: JSON.parse(query[k]),
});
break;
}
default: {
(0, assert_1.assert)(typeof properties[k] === 'string', '传参只能是number/boolean/object/string四种类型');
Object.assign(props, {
[k]: query[k],
});
}
}
}
else {
switch (k) {
case 'oakDisablePulldownRefresh': {
Object.assign(props, {
[k]: Boolean(query[k]),
});
break;
}
default: {
Object.assign(props, {
[k]: query[k],
});
}
}
}
}
return props;
}
const withRouter = (Component, { path, properties }) => {
const ComponentWithRouterProp = (props) => {
const navigation = props.navigation;
const route = props.route;
const { params: routeParams } = route || {};
let params = {};
if (path) {
params = Object.assign(params, getParams(routeParams, properties));
}
return (0, jsx_runtime_1.jsx)(Component, { ...props, ...params, ref: props.forwardedRef, width: "xs" });
};
return react_1.default.forwardRef((props, ref) => ((0, jsx_runtime_1.jsx)(ComponentWithRouterProp, { ...props, forwardedRef: ref })));
};
exports.default = withRouter;