framework-entersol-web
Version:
Framework based on bootstrap 5
13 lines • 11 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:true});exports["default"]=exports.RouterSchema=exports.HashRouterSchema=exports.BrowserRouterSchema=void 0;var _urlJoin=_interopRequireDefault(require("url-join"));var _react=_interopRequireDefault(require("react"));var _propTypes=_interopRequireDefault(require("prop-types"));var _reactRouterDom=require("react-router-dom");var _functions=require("../functions");var _controllers=_interopRequireDefault(require("../controllers"));var _components=require("../components");function _interopRequireDefault(e){return e&&e.__esModule?e:{"default":e}}function _extends(){return _extends=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},_extends.apply(null,arguments)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}var routePropTypes={path:_propTypes["default"].oneOfType([_propTypes["default"].string,_propTypes["default"].arrayOf(_propTypes["default"].string)]).isRequired,content:_propTypes["default"].any.isRequired,name:_propTypes["default"].string,component:_propTypes["default"].string,exact:_propTypes["default"].bool,strict:_propTypes["default"].bool,location:_propTypes["default"].object,sensitive:_propTypes["default"].bool,redirect:_propTypes["default"].string,routes:_propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].shape(void 0)),_propTypes["default"].shape(void 0)])};var schemaPropTypes={test:_propTypes["default"].bool,theme:_propTypes["default"].string,routes:routePropTypes.routes,redirect:_propTypes["default"].func,defaultController:_propTypes["default"].func};var schemaDefaultProps={routes:[],defaultController:_controllers["default"].Controller};var SchemaController=exports["default"]=/*#__PURE__*/function(_React$Component){function SchemaController(_props){var _this;_classCallCheck(this,SchemaController);_this=_callSuper(this,SchemaController,[_props]);_defineProperty(_this,"state",{routeNodes:[]});/** views
* Método recursivo que procesa el schema de rutas
* usar en el mapeo de un arreglo ej. routes.map(this.views)
* permite que el schema tenga un arreglo de paths
**/_defineProperty(_this,"views",function(route,i){var Controller=_controllers["default"][route.component]||_this.props.defaultController||_controllers["default"].Controller;var subroutes=false;if(Array.isArray(route.routes))subroutes=[];else if(_typeof(route.routes)==="object"){subroutes=[];route.routes=Object.keys(route.routes).map(function(name){return _objectSpread({name:name},route.routes[name])})}if(subroutes){var mapRoutes=function mapRoutes(subRoute,i){// crear un clone para no tocar el original
subRoute=JSON.parse(JSON.stringify(subRoute));// si las rutas son un arreglo
if(Array.isArray(route.path)&&Array.isArray(subRoute.path)){subRoute.path=subRoute.path.reduce(function(paths,path){paths.push(route.path.map(function(parentPath){return(0,_urlJoin["default"])(parentPath,path)}));return paths},[])}else if(Array.isArray(subRoute.path)){subRoute.path=subRoute.path.map(function(path){return(0,_urlJoin["default"])(route.path,path)})}else if(Array.isArray(route.path)){subRoute.path=route.path.map(function(path){return(0,_urlJoin["default"])(path,subRoute.path)})}else{subRoute.path=(0,_urlJoin["default"])(route.path,subRoute.path||"")}return _this.views(subRoute,i)};subroutes=route.routes.map(mapRoutes)}// si exacto no está definido entonces true
var exact=typeof route.exact==="undefined"||route.exact;// si hay subroutas entonces false
exact=exact&&!route.routes;var routeProps={path:route.path,exact:exact,strict:route.strict,location:route.location,sensitive:route.sensitive};var RedirViewManager=function RedirViewManager(props){var redirTo=typeof _this.props.redirect==="function"&&_this.props.redirect(props.location);if(redirTo)return/*#__PURE__*/_react["default"].createElement(_reactRouterDom.Redirect,{to:{pathname:redirTo,state:{from:props.location}}});var viewClassName=Array.from(document.body.classList).find(function(cl){return cl.endsWith("-view")});document.body.classList.remove(viewClassName);document.body.classList.add(route.name+"-view");document.body.classList.forEach(function(cls){if(cls.startsWith("location-"))document.body.classList.remove(cls)});document.body.classList.add("location"+props.location.pathname.replace(/\//g,"-"));var useSwitch=typeof route.useSwitch==="undefined"||route.useSwitch;return/*#__PURE__*/_react["default"].createElement(Controller,_extends({},route,props,{test:_this.props.test}),useSwitch?/*#__PURE__*/_react["default"].createElement(_reactRouterDom.Switch,null,subroutes):subroutes)};var key=i||typeof i==="number"?i+"-"+route.name:route.name;return/*#__PURE__*/_react["default"].createElement(_reactRouterDom.Route,_extends({key:key},routeProps,{render:RedirViewManager}))});return _this}_inherits(SchemaController,_React$Component);return _createClass(SchemaController,[{key:"buildRoutes",value:function buildRoutes(){var _this2=this;// crear un clone de lo que se recibe
var schemaStr=JSON.stringify(this.props.routes);var routesSchema=JSON.parse(schemaStr);// se crean las rutas de forma única.
var routes;if(Array.isArray(routesSchema))routes=routesSchema.map(this.views);else if(_typeof(routesSchema)==="object"&&routesSchema.name)routes=this.views(routesSchema);else if(_typeof(routesSchema)==="object")routes=Object.keys(routesSchema).map(function(name,i){return _this2.views(_objectSpread({name:name},routesSchema[name]),i)});this.setState({routeNodes:routes})}},{key:"componentDidMount",value:function componentDidMount(){this.buildRoutes()}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){// comprobar si ha cambiado el schema
var newHash=(0,_functions.hash)(JSON.stringify(this.props.routes));if(this.routesHash!==newHash){this.buildRoutes();this.routesHash=newHash}}},{key:"render",value:function render(){var _this$props=this.props,history=_this$props.history,theme=_this$props.theme;var routeNodes=this.state.routeNodes;return/*#__PURE__*/_react["default"].createElement(_reactRouterDom.Router,{history:history},theme&&/*#__PURE__*/_react["default"].createElement("link",{rel:"stylesheet",type:"text/css",href:theme}),/*#__PURE__*/_react["default"].createElement(_reactRouterDom.Switch,null,routeNodes))}}])}(_react["default"].Component);_defineProperty(SchemaController,"jsClass","SchemaController");_defineProperty(SchemaController,"propTypes",schemaPropTypes);_defineProperty(SchemaController,"defaultProps",schemaDefaultProps);var RouterSchema=exports.RouterSchema=function RouterSchema(props){var RController=(0,_reactRouterDom.withRouter)(SchemaController);return/*#__PURE__*/_react["default"].createElement(RController,props)};RouterSchema.propTypes=schemaPropTypes;RouterSchema.defaultProps=schemaDefaultProps;var BrowserRouterSchema=exports.BrowserRouterSchema=function BrowserRouterSchema(props){var RController=(0,_reactRouterDom.withRouter)(SchemaController);return/*#__PURE__*/_react["default"].createElement(_reactRouterDom.BrowserRouter,null,/*#__PURE__*/_react["default"].createElement(RController,props))};BrowserRouterSchema.propTypes=schemaPropTypes;BrowserRouterSchema.defaultProps=schemaDefaultProps;var HashRouterSchema=exports.HashRouterSchema=function HashRouterSchema(props){var RController=(0,_reactRouterDom.withRouter)(SchemaController);return/*#__PURE__*/_react["default"].createElement(_reactRouterDom.HashRouter,null,/*#__PURE__*/_react["default"].createElement(RController,props))};HashRouterSchema.propTypes=schemaPropTypes;HashRouterSchema.defaultProps=schemaDefaultProps;(0,_components.addComponents)({RoutesContainer:SchemaController});
//# sourceMappingURL=react-router-schema.js.map