UNPKG

dbl-components

Version:

Framework based on bootstrap 5

9 lines 8.67 kB
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)}import React,{useEffect}from"react";import PropTypes from"prop-types";import{BrowserRouter,HashRouter,Routes,Route,Outlet,useLocation}from"react-router-dom";import{hash,eventHandler}from"dbl-utils";import controllers from"../controllers";import withRouteWrapper from"./with-route-wrapper";var routePropTypes={path:PropTypes.oneOfType([PropTypes.string,PropTypes.arrayOf(PropTypes.string)]).isRequired,content:PropTypes.any.isRequired,name:PropTypes.string,component:PropTypes.string,exact:PropTypes.bool,strict:PropTypes.bool,location:PropTypes.object,sensitive:PropTypes.bool,routes:PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.shape(this)),PropTypes.shape(this)])};var schemaPropTypes={test:PropTypes.bool,theme:PropTypes.string,routes:routePropTypes.routes,defaultController:PropTypes.func,forceRebuild:PropTypes.bool};var schemaDefaultProps={routes:[],defaultController:controllers.Controller};var SchemaController=/*#__PURE__*/function(_React$Component){function SchemaController(props){var _this;_classCallCheck(this,SchemaController);_this=_callSuper(this,SchemaController,[props]);_defineProperty(_this,"routeNodes",[]);_defineProperty(_this,"state",{});/** 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[route.component]||_this.props.defaultController||controllers.Controller;route.test=route.test||_this.props.test;var WrappedController=withRouteWrapper(Controller,route);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){subRoute=JSON.parse(JSON.stringify(subRoute));return _this.views(subRoute,i)};subroutes=route.routes.map(mapRoutes)}var routeProps={path:route.path,index:route.index,action:route.action,caseSensitive:route.caseSensitive,Component:route.Component,ErrorBoundary:route.ErrorBoundary,errorElement:route.errorElement,handle:route.handle,hasErrorBoundary:route.hasErrorBoundary,HydrateFallback:route.HydrateFallback,hydrateFallbackElement:route.hydrateFallbackElement,id:route.id,lazy:route.lazy,loader:route.loader,shouldRevalidate:route.shouldRevalidate,element:/*#__PURE__*/React.createElement(WrappedController,route,subroutes.length>0?/*#__PURE__*/React.createElement(Outlet,null):null)};var key=i||typeof i==="number"?i+"-"+route.name:route.name;return/*#__PURE__*/React.createElement(Route,_extends({key:key},routeProps),subroutes.length>0&&subroutes)});_this.routesHash="";_this.buildRoutes();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);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)});//asignación directa this.routeNodes=routes}},{key:"componentDidMount",value:function componentDidMount(){}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){// comprobar si ha cambiado el schema var newHash=hash(JSON.stringify(this.props.routes));if(this.routesHash!==newHash){this.buildRoutes();this.routesHash=newHash}}},{key:"render",value:function render(){var theme=this.props.theme;if(this.props.forceRebuild){this.buildRoutes()}return/*#__PURE__*/React.createElement(React.Fragment,null,!!theme&&/*#__PURE__*/React.createElement("link",{rel:"stylesheet",type:"text/css",href:theme}),/*#__PURE__*/React.createElement(Routes,null,this.routeNodes))}}])}(React.Component);_defineProperty(SchemaController,"jsClass","SchemaController");_defineProperty(SchemaController,"propTypes",schemaPropTypes);_defineProperty(SchemaController,"defaultProps",schemaDefaultProps);export{SchemaController as default};var RouterSchema=function RouterSchema(props){var location=useLocation();useEffect(function(){eventHandler.dispatch("location",location)},[location.pathname]);return/*#__PURE__*/React.createElement(SchemaController,props)};export var BrowserRouterSchema=function BrowserRouterSchema(props){return/*#__PURE__*/React.createElement(BrowserRouter,null,/*#__PURE__*/React.createElement(RouterSchema,props))};BrowserRouterSchema.propTypes=schemaPropTypes;BrowserRouterSchema.defaultProps=schemaDefaultProps;export var HashRouterSchema=function HashRouterSchema(props){return/*#__PURE__*/React.createElement(HashRouter,null,/*#__PURE__*/React.createElement(RouterSchema,props))};HashRouterSchema.propTypes=schemaPropTypes;HashRouterSchema.defaultProps=schemaDefaultProps; //# sourceMappingURL=react-router-schema.js.map