@moxb/stellar-router-react
Version:
Stellar router: React widgets
48 lines (47 loc) • 2.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NavRefRedirect = void 0;
var tslib_1 = require("tslib");
var React = require("react");
var react_1 = require("react");
var mobx_react_lite_1 = require("mobx-react-lite");
var stellar_router_core_1 = require("@moxb/stellar-router-core");
var routingProviders_1 = require("./routingProviders");
/**
* The NavRefRedirect component is responsible for executing redirects based on base64-encoded
* NavRef links.
*
* Just put it into a menu (under the preferred url prefix used for the redirects),
* and it will handle the rest. I.e.
*
* {
* key: 'redirects',
* hidden: true,
* fragment: NavRefRedirect,
* },
*
*/
exports.NavRefRedirect = (0, mobx_react_lite_1.observer)(function (props) {
var locationManager = (0, routingProviders_1.useLocationManager)('nav ref redirect');
var linkGenerator = (0, routingProviders_1.useLinkGenerator)();
if (!linkGenerator) {
throw new Error('Link generator is missing! Have you passed in the state space when creating the routing store?');
}
var _a = (0, react_1.useState)(false), failed = _a[0], setFailed = _a[1];
(0, react_1.useEffect)(function () {
setFailed(false);
try {
// Get the data out of the next path token
var stringForm = (0, stellar_router_core_1.getNextPathToken)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, props), { locationManager: locationManager }));
// Parse the base64 data into a NavRefCall data structure
var _a = (0, stellar_router_core_1.parseNavRef)(stringForm), navRef = _a.navRef, tokens = _a.tokens;
// Go to this NavRef
linkGenerator.doGoTo(navRef.call(tokens), stellar_router_core_1.UpdateMethod.REPLACE);
}
catch (e) {
setFailed(true);
console.log(e);
}
});
return failed ? React.createElement("div", null, "Oops! This redirect doesn't seem to be working.") : React.createElement("div", null, "Redirecting...");
});