UNPKG

@moxb/stellar-router-react

Version:

Stellar router: React widgets

71 lines (70 loc) 3.79 kB
"use strict"; 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;