merge
This commit is contained in:
commit
e2e8efe5a5
|
|
@ -9,5 +9,8 @@ export declare class Location<ED extends EntityDict, Cxt extends Context<ED>, AD
|
|||
latitude: number;
|
||||
longitude: number;
|
||||
}>;
|
||||
refresh(): void;
|
||||
refresh(): Promise<{
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,11 +11,12 @@ var Location = /** @class */ (function (_super) {
|
|||
Location.prototype.get = function (acceptableLatency) {
|
||||
if (acceptableLatency === void 0) { acceptableLatency = 10000; }
|
||||
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
||||
var result;
|
||||
var result, getGeolocation, result;
|
||||
return tslib_1.__generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0:
|
||||
if (this.lastTimestamp && Date.now() - this.lastTimestamp < acceptableLatency) {
|
||||
if (this.lastTimestamp &&
|
||||
Date.now() - this.lastTimestamp < acceptableLatency) {
|
||||
return [2 /*return*/, {
|
||||
latitude: this.latitude,
|
||||
longitude: this.longitude,
|
||||
|
|
@ -23,7 +24,7 @@ var Location = /** @class */ (function (_super) {
|
|||
}
|
||||
if (!(process.env.OAK_PLATFORM === 'wechatMp')) return [3 /*break*/, 2];
|
||||
return [4 /*yield*/, wx.getLocation({
|
||||
type: 'gcj02'
|
||||
type: 'gcj02',
|
||||
})];
|
||||
case 1:
|
||||
result = _a.sent();
|
||||
|
|
@ -34,13 +35,68 @@ var Location = /** @class */ (function (_super) {
|
|||
latitude: this.latitude,
|
||||
longitude: this.longitude,
|
||||
}];
|
||||
case 2: throw new Error('Method not implemented.');
|
||||
case 2:
|
||||
getGeolocation = function () {
|
||||
return new Promise(function (resolve, reject) {
|
||||
if (navigator.geolocation) {
|
||||
navigator.geolocation.getCurrentPosition(function (position) {
|
||||
// 1. coords.latitude:估计纬度
|
||||
// 2. coords.longitude:估计经度
|
||||
// 3. coords.altitude:估计高度
|
||||
// 4. coords.accuracy:所提供的以米为单位的经度和纬度估计的精确度
|
||||
// 5. coords.altitudeAccuracy:所提供的以米为单位的高度估计的精确度
|
||||
// 6. coords.heading: 宿主设备当前移动的角度方向,相对于正北方向顺时针计算
|
||||
// 7. coords.speed:以米每秒为单位的设备的当前对地速度
|
||||
var coords = position.coords;
|
||||
var location = {
|
||||
accuracy: coords.accuracy,
|
||||
altitude: coords.altitude,
|
||||
altitudeAccuracy: coords.altitudeAccuracy,
|
||||
heading: coords.heading,
|
||||
latitude: coords.latitude,
|
||||
longitude: coords.longitude,
|
||||
speed: coords.speed,
|
||||
};
|
||||
resolve(location);
|
||||
}, function (error) {
|
||||
reject(error);
|
||||
}, {
|
||||
// 指示浏览器获取高精度的位置,默认为false
|
||||
enableHighAccuracy: true,
|
||||
// 指定获取地理位置的超时时间,默认不限时,单位为毫秒
|
||||
timeout: 10000,
|
||||
// 最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。
|
||||
maximumAge: 3000,
|
||||
});
|
||||
}
|
||||
else {
|
||||
reject('Your browser does not support Geolocation!');
|
||||
}
|
||||
});
|
||||
};
|
||||
return [4 /*yield*/, getGeolocation()];
|
||||
case 3:
|
||||
result = (_a.sent());
|
||||
this.lastTimestamp = Date.now();
|
||||
this.latitude = result.latitude;
|
||||
this.longitude = result.longitude;
|
||||
return [2 /*return*/, {
|
||||
latitude: this.latitude,
|
||||
longitude: this.longitude,
|
||||
}];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
Location.prototype.refresh = function () {
|
||||
throw new Error('Method not implemented.');
|
||||
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
||||
return tslib_1.__generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0: return [4 /*yield*/, this.get()];
|
||||
case 1: return [2 /*return*/, _a.sent()];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
tslib_1.__decorate([
|
||||
Feature_1.Action
|
||||
|
|
|
|||
|
|
@ -28,12 +28,12 @@ var withRouter = function (Component, isComponent, path) {
|
|||
var navigate = (0, react_router_dom_1.useNavigate)();
|
||||
var _a = (0, react_i18next_1.useTranslation)(), t = _a.t, i18n = _a.i18n;
|
||||
var width = (0, responsive_1.useWidth)();
|
||||
var forwardedRef = props.forwardedRef, rest = tslib_1.__rest(props, ["forwardedRef"]);
|
||||
var location = (0, react_router_dom_1.useLocation)();
|
||||
if (isComponent || !location.pathname.includes(path)) {
|
||||
return ((0, jsx_runtime_1.jsx)(Component, tslib_1.__assign({}, rest, { t: t, i18n: i18n, width: width, navigate: navigate, ref: forwardedRef })));
|
||||
var forwardedRef = props.forwardedRef, rest = tslib_1.__rest(props, ["forwardedRef"]);
|
||||
var params = {};
|
||||
if (!isComponent && location.pathname.includes(path)) {
|
||||
params = getParams(location);
|
||||
}
|
||||
var params = getParams(location);
|
||||
return ((0, jsx_runtime_1.jsx)(Component, tslib_1.__assign({}, rest, params, { t: t, i18n: i18n, width: width, navigate: navigate, location: location, ref: forwardedRef })));
|
||||
};
|
||||
return react_1.default.forwardRef(function (props, ref) { return (0, jsx_runtime_1.jsx)(ComponentWithRouterProp, tslib_1.__assign({}, props, { forwardedRef: ref })); });
|
||||
|
|
|
|||
|
|
@ -0,0 +1,110 @@
|
|||
var Interpreter = (function (r) {
|
||||
var o = '';
|
||||
function i(r, n) {
|
||||
return r
|
||||
? 'string' == typeof r
|
||||
? r
|
||||
: r
|
||||
.reduce(function (r, t) {
|
||||
return r.concat([
|
||||
(function (n, e) {
|
||||
if (((e = e || {}), 'string' == typeof n))
|
||||
return n;
|
||||
{
|
||||
var r, t, u;
|
||||
if (n[2] && 'object' == typeof n[2])
|
||||
return (
|
||||
(r = Object.keys(n[2]).reduce(
|
||||
function (r, t) {
|
||||
return (
|
||||
(r[t] = i(
|
||||
n[2][t],
|
||||
e
|
||||
)),
|
||||
r
|
||||
);
|
||||
},
|
||||
{}
|
||||
)),
|
||||
(t = r[e[0]]),
|
||||
void 0 !== (u = e[n[0]])
|
||||
? r[u.toString()] ||
|
||||
r.other ||
|
||||
o
|
||||
: t || r.other || o
|
||||
);
|
||||
}
|
||||
if ('object' == typeof n && 0 < n.length)
|
||||
return (function r(t, n, e) {
|
||||
void 0 === e && (e = 0);
|
||||
if (!n || !t || t.length <= 0)
|
||||
return '';
|
||||
n = n[t[e]];
|
||||
if ('string' == typeof n) return n;
|
||||
if ('number' == typeof n)
|
||||
return n.toString();
|
||||
if (!n)
|
||||
return '{'.concat(
|
||||
t.join('.'),
|
||||
'}'
|
||||
);
|
||||
return r(t, n, ++e);
|
||||
})(n[0].split('.'), e, 0);
|
||||
return '';
|
||||
})(t, n),
|
||||
]);
|
||||
}, [])
|
||||
.join('')
|
||||
: o;
|
||||
}
|
||||
function c(r, t, n) {
|
||||
return (
|
||||
('object' == typeof r &&
|
||||
((t = t).constructor && 'Array' === t.constructor
|
||||
? t
|
||||
: t
|
||||
.replace(getRegExp('\[', 'ig'), '.')
|
||||
.replace(getRegExp('\]', 'ig'), '')
|
||||
.split('.')
|
||||
).reduce(function (r, t) {
|
||||
return (r || {})[t];
|
||||
}, r)) ||
|
||||
n
|
||||
);
|
||||
}
|
||||
function f(r) {
|
||||
var t = r;
|
||||
return (t =
|
||||
r && -1 !== r.indexOf(':')
|
||||
? r.replace(getRegExp(':', 'ig'), '.')
|
||||
: t);
|
||||
}
|
||||
function g(r, t, n) {
|
||||
var e = f(n),
|
||||
r = r[t];
|
||||
return (r && (r[e] || c(r, e))) || n;
|
||||
}
|
||||
return (
|
||||
(r.getMessageInterpreter = function () {
|
||||
function u(r, t, n, e) {
|
||||
return i(
|
||||
(function (r, t, n, e) {
|
||||
var u = f(r);
|
||||
if (!(n = t[n])) return g(t, e, r);
|
||||
var o = n[u];
|
||||
return (o = o || c(n, u)) ? o : g(t, e, r);
|
||||
})(r, e, n, n),
|
||||
t
|
||||
);
|
||||
}
|
||||
return function (r, t, n, e) {
|
||||
return 3 === arguments.length
|
||||
? u(r, null, t, n)
|
||||
: 4 === arguments.length
|
||||
? u(r, t, n, e)
|
||||
: '';
|
||||
};
|
||||
}),
|
||||
r
|
||||
);
|
||||
})({});
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
},
|
||||
"scripts": {
|
||||
"clean": "rimraf lib/*",
|
||||
"copy-files": "copyfiles -u 1 src/**/*.css lib/",
|
||||
"copy-files": "copyfiles -u 1 src/**/*.css src/**/wxs.js lib/",
|
||||
"build": "tsc && npm run copy-files",
|
||||
"test": "ts-node ./test/test.ts",
|
||||
"prepare": "rimraf node_modules/react & rimraf node_modules/react-dom & rimraf node_modules/react-router"
|
||||
|
|
|
|||
|
|
@ -2,12 +2,19 @@ import { EntityDict, Aspect, Context } from 'oak-domain/lib/types';
|
|||
import { Action, Feature } from '../types/Feature';
|
||||
import { CommonAspectDict } from 'oak-common-aspect';
|
||||
|
||||
export class Location<ED extends EntityDict, Cxt extends Context<ED>, AD extends CommonAspectDict<ED, Cxt>> extends Feature<ED, Cxt, AD> {
|
||||
export class Location<
|
||||
ED extends EntityDict,
|
||||
Cxt extends Context<ED>,
|
||||
AD extends CommonAspectDict<ED, Cxt>
|
||||
> extends Feature<ED, Cxt, AD> {
|
||||
private latitude?: number;
|
||||
private longitude?: number;
|
||||
private lastTimestamp?: number;
|
||||
async get(acceptableLatency: number = 10000) {
|
||||
if (this.lastTimestamp && Date.now() - this.lastTimestamp < acceptableLatency) {
|
||||
if (
|
||||
this.lastTimestamp &&
|
||||
Date.now() - this.lastTimestamp < acceptableLatency
|
||||
) {
|
||||
return {
|
||||
latitude: this.latitude!,
|
||||
longitude: this.longitude!,
|
||||
|
|
@ -16,7 +23,7 @@ export class Location<ED extends EntityDict, Cxt extends Context<ED>, AD extends
|
|||
if (process.env.OAK_PLATFORM === 'wechatMp') {
|
||||
// 小程序平台
|
||||
const result = await wx.getLocation({
|
||||
type: 'gcj02'
|
||||
type: 'gcj02',
|
||||
});
|
||||
this.latitude = result.latitude;
|
||||
this.longitude = result.longitude;
|
||||
|
|
@ -26,14 +33,61 @@ export class Location<ED extends EntityDict, Cxt extends Context<ED>, AD extends
|
|||
latitude: this.latitude!,
|
||||
longitude: this.longitude!,
|
||||
};
|
||||
}
|
||||
else {
|
||||
throw new Error('Method not implemented.');
|
||||
} else {
|
||||
const getGeolocation = () =>
|
||||
new Promise((resolve, reject) => {
|
||||
if (navigator.geolocation) {
|
||||
navigator.geolocation.getCurrentPosition(
|
||||
(position) => {
|
||||
// 1. coords.latitude:估计纬度
|
||||
// 2. coords.longitude:估计经度
|
||||
// 3. coords.altitude:估计高度
|
||||
// 4. coords.accuracy:所提供的以米为单位的经度和纬度估计的精确度
|
||||
// 5. coords.altitudeAccuracy:所提供的以米为单位的高度估计的精确度
|
||||
// 6. coords.heading: 宿主设备当前移动的角度方向,相对于正北方向顺时针计算
|
||||
// 7. coords.speed:以米每秒为单位的设备的当前对地速度
|
||||
const coords = position.coords;
|
||||
const location = {
|
||||
accuracy: coords.accuracy,
|
||||
altitude: coords.altitude,
|
||||
altitudeAccuracy: coords.altitudeAccuracy,
|
||||
heading: coords.heading,
|
||||
latitude: coords.latitude,
|
||||
longitude: coords.longitude,
|
||||
speed: coords.speed,
|
||||
};
|
||||
resolve(location);
|
||||
},
|
||||
(error) => {
|
||||
reject(error);
|
||||
},
|
||||
{
|
||||
// 指示浏览器获取高精度的位置,默认为false
|
||||
enableHighAccuracy: true,
|
||||
// 指定获取地理位置的超时时间,默认不限时,单位为毫秒
|
||||
timeout: 10000,
|
||||
// 最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。
|
||||
maximumAge: 3000,
|
||||
}
|
||||
);
|
||||
} else {
|
||||
reject('Your browser does not support Geolocation!');
|
||||
}
|
||||
});
|
||||
|
||||
const result = (await getGeolocation()) as GeolocationCoordinates;
|
||||
this.lastTimestamp = Date.now();
|
||||
this.latitude = result.latitude!;
|
||||
this.longitude = result.longitude!;
|
||||
return {
|
||||
latitude: this.latitude!,
|
||||
longitude: this.longitude!,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@Action
|
||||
refresh() {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
async refresh() {
|
||||
return await this.get();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,22 +32,13 @@ const withRouter = (Component: React.ComponentType<any>, isComponent?: boolean,
|
|||
const navigate = useNavigate();
|
||||
const { t, i18n } = useTranslation();
|
||||
const width = useWidth();
|
||||
const { forwardedRef, ...rest } = props;
|
||||
const location = useLocation();
|
||||
const { forwardedRef, ...rest } = props;
|
||||
|
||||
if (isComponent || !location.pathname.includes(path)) {
|
||||
return (
|
||||
<Component
|
||||
{...rest}
|
||||
t={t}
|
||||
i18n={i18n}
|
||||
width={width}
|
||||
navigate={navigate}
|
||||
ref={forwardedRef}
|
||||
/>
|
||||
);
|
||||
let params = {};
|
||||
if (!isComponent && location.pathname.includes(path)) {
|
||||
params = getParams(location as Location);
|
||||
}
|
||||
const params = getParams(location as Location);
|
||||
|
||||
return (
|
||||
<Component
|
||||
|
|
|
|||
Loading…
Reference in New Issue