@moxb/stellar-router-react
Version:
Stellar router: React widgets
71 lines (70 loc) • 3.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.StellarRouterProvider = exports.createRoutingStore = exports.useLinkGenerator = exports.LinkGeneratorProvider = exports.useTokenManager = exports.TokenManagerProvider = exports.useNavigate = exports.useLocationManager = exports.LocationManagerProvider = void 0;
var React = require("react");
var react_1 = require("react");
var data_hooks_1 = require("@moxb/data-hooks");
var stellar_router_core_1 = require("@moxb/stellar-router-core");
var LocationManagerContext = (0, data_hooks_1.createGlobalContext)('location manager', undefined);
exports.LocationManagerProvider = LocationManagerContext.Provider;
var useLocationManager = function (reason) {
if (reason === void 0) { reason = 'no reason'; }
var manager = (0, react_1.useContext)(LocationManagerContext);
if (!manager) {
throw new Error("Can't find React context for LocationManager for " +
reason +
"! Don't forget to wrap your app in a <LocationManagerProvider> tag!");
}
return manager;
};
exports.useLocationManager = useLocationManager;
var useNavigate = function (reason) {
if (reason === void 0) { reason = 'no reason'; }
var locationManager = (0, exports.useLocationManager)(reason);
return function (pathTokens, method) { return locationManager.navigate(pathTokens, method); };
};
exports.useNavigate = useNavigate;
var TokenManagerContext = (0, data_hooks_1.createGlobalContext)('token manager', undefined);
exports.TokenManagerProvider = TokenManagerContext.Provider;
var useTokenManager = function () { return (0, react_1.useContext)(TokenManagerContext); };
exports.useTokenManager = useTokenManager;
var LinkGeneratorContext = (0, data_hooks_1.createGlobalContext)('link generator', undefined);
exports.LinkGeneratorProvider = LinkGeneratorContext.Provider;
var useLinkGenerator = function () { return (0, react_1.useContext)(LinkGeneratorContext); };
exports.useLinkGenerator = useLinkGenerator;
/**
* Create a store that will be used for routing.
*/
function createRoutingStore(props) {
if (props === void 0) { props = {}; }
var urlSchema = props.urlSchema, history = props.history, communicator = props.communicator, _a = props.activate, activate = _a === void 0 ? true : _a, stateSpace = props.stateSpace, tokenDebug = props.tokenDebug;
// Create the location manager
var locationManager = new stellar_router_core_1.BasicLocationManagerImpl({ urlSchema: urlSchema, history: history, communicator: communicator });
if (activate) {
locationManager.watchHistory();
}
// Create the token manager
var tokenManager = new stellar_router_core_1.TokenManagerImpl(locationManager, { debug: tokenDebug });
// Create the link generator
var linkGenerator = !stateSpace
? undefined
: new stellar_router_core_1.LinkGeneratorImpl({
locationManager: locationManager,
stateSpace: stateSpace,
});
return {
locationManager: locationManager,
tokenManager: tokenManager,
linkGenerator: linkGenerator,
navigate: locationManager.navigate,
};
}
exports.createRoutingStore = createRoutingStore;
var StellarRouterProvider = function (props) {
var store = props.store, children = props.children;
var locationManager = store.locationManager, tokenManager = store.tokenManager, linkGenerator = store.linkGenerator;
return (React.createElement(exports.LocationManagerProvider, { value: locationManager },
React.createElement(exports.TokenManagerProvider, { value: tokenManager },
React.createElement(exports.LinkGeneratorProvider, { value: linkGenerator }, children))));
};
exports.StellarRouterProvider = StellarRouterProvider;