From 1da5d5d4f238783acc6e00c44b360f6391f29d63 Mon Sep 17 00:00:00 2001 From: Apollinaire Date: Tue, 8 Jan 2019 16:22:14 +0100 Subject: [PATCH] create AdminLayout in vulcan:admin --- .../lib/components/AdminLayout.jsx | 44 +++++++++++++++++++ packages/vulcan-admin/lib/modules/index.js | 1 + packages/vulcan-admin/lib/modules/routes.js | 2 +- 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 packages/vulcan-admin/lib/components/AdminLayout.jsx diff --git a/packages/vulcan-admin/lib/components/AdminLayout.jsx b/packages/vulcan-admin/lib/components/AdminLayout.jsx new file mode 100644 index 000000000..f01785d96 --- /dev/null +++ b/packages/vulcan-admin/lib/components/AdminLayout.jsx @@ -0,0 +1,44 @@ +/** + * @Author: Apollinaire Lecocq + * @Date: 08-01-19 + * @Last modified by: apollinaire + * @Last modified time: 08-01-19 + */ +import React from 'react'; +import { + registerComponent, + Components, + withCurrentUser, +} from 'meteor/vulcan:core'; + +/** + * A simple component that renders the existing layout and checks wether the currentUser is an admin or not. + */ + +class AdminLayout extends React.PureComponent { + renderWithRestrictedAccess(children, currentUser) { + // while the currentUser is loading, don't render anything. + if (currentUser && currentUser.loading) { + return null; + } //if the currentUser is an admin, then render the children + else if (currentUser && currentUser.isAdmin) { + return children; + } // for every other case (just a member or not logged), render the 404 message + return ; + } + + render() { + const {currentUser, children} = this.props; + return ( + + {this.renderWithRestrictedAccess(children, currentUser)} + + ); + } +} + +registerComponent({ + name: 'AdminLayout', + component: AdminLayout, + hocs: [withCurrentUser], +}); diff --git a/packages/vulcan-admin/lib/modules/index.js b/packages/vulcan-admin/lib/modules/index.js index 9a851d3e1..895e5bc7c 100644 --- a/packages/vulcan-admin/lib/modules/index.js +++ b/packages/vulcan-admin/lib/modules/index.js @@ -1,3 +1,4 @@ import './fragments.js'; import './routes.js'; import './i18n.js'; +import '../components/AdminLayout'; diff --git a/packages/vulcan-admin/lib/modules/routes.js b/packages/vulcan-admin/lib/modules/routes.js index b71519605..ad80fae78 100644 --- a/packages/vulcan-admin/lib/modules/routes.js +++ b/packages/vulcan-admin/lib/modules/routes.js @@ -1,5 +1,5 @@ import { addRoute, getDynamicComponent } from 'meteor/vulcan:core'; import React from 'react'; -addRoute({ name: 'admin', path: '/admin', component: () => getDynamicComponent(import('../components/AdminHome.jsx'))}); +addRoute({ name: 'admin', path: '/admin', component: () => getDynamicComponent(import('../components/AdminHome.jsx')), layoutName: 'AdminLayout'}); addRoute({ name: 'admin2', path: '/admin/users', component: () => getDynamicComponent(import('../components/AdminHome.jsx'))});