UNPKG

@saber2pr/router

Version:

> react-router-dom by hooks api.

50 lines (49 loc) 2.19 kB
"use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); /* * @Author: saber2pr * @Date: 2019-06-03 18:19:53 * @Last Modified by: saber2pr * @Last Modified time: 2019-06-06 14:26:17 */ var react_1 = __importStar(require("react")); var route_1 = require("./route"); var useHistory_1 = require("./useHistory"); var createRouteFrame_1 = require("./createRouteFrame"); function Router(_a) { var children = _a.children, history = _a.history; var _b = react_1.useState(), frame = _b[0], render = _b[1]; var H = useHistory_1.useHistory(history); var list = react_1.default.Children.toArray(children); react_1.useEffect(function () { var effects = list.reduce(function (receiver, c, index) { // is not route component if (!route_1.isRoute(c)) return receiver; // is none matched if (!c.props.path) { return receiver.concat(H.subscribe('/404', function () { return render(react_1.default.createElement(c.props.component, null)); })); } // create route's frame var rFrame = createRouteFrame_1.createRouteFrame(list, index); var effect = H.subscribe(c.props.path, function () { return render(rFrame); }); return receiver.concat(effect); }, []); // default 404 effects.concat(H.subscribe('/404', function () { return render(react_1.default.createElement("h1", null, "404")); })); var defaultRoute = list.find(route_1.isDefaultRoute) || list.find(route_1.isRoute); // if not default tag, use the first route. var exec = defaultRoute.props.path; H.push(exec); return function () { return effects.forEach(function (c) { return c(); }); }; }, [children]); return react_1.default.createElement(react_1.default.Fragment, null, frame); } exports.Router = Router;