{"version":3,"sources":["store/actions/layout/index.js","layouts/components/layout-wrapper/index.js","router/routes/Dashboards.js","router/routes/Reservations.js","router/routes/Aas.js","router/routes/Security.js","router/routes/Settings.js","router/routes/FBConnect.js","router/routes/Listing.js","router/routes/Reviews.js","router/routes/Partners.js","router/routes/Customers.js","router/routes/Resbook.js","router/routes/Licenses.js","router/routes/index.js","layouts/BlankLayout.js","layouts/components/navbar/index.js","navigation/dashboards.js","navigation/reservation.js","navigation/aas.js","utils/extractMenuPermissions.js","navigation/settings.js","navigation/listing.js","navigation/reviews.js","navigation/superadmin.js","navigation/resbook.js","navigation/index.js","layouts/components/menu/vertical-menu/VerticalMenuHeader.js","layouts/utils.js","layouts/components/menu/vertical-menu/VerticalNavMenuLink.js","layouts/components/menu/vertical-menu/VerticalNavMenuGroup.js","layouts/components/menu/vertical-menu/VerticalNavMenuSectionHeader.js","layouts/components/menu/vertical-menu/VerticalNavMenuItems.js","layouts/components/menu/vertical-menu/index.js","layouts/VerticalLayout.js","router/Router.js","hooks/useLayout.js","hooks/useRouterTransition.js","App.js","components/intl/index.jsx","components/spinner/SpinnerCentered.js","components/googlemaps/components/Marker.js","components/googlemaps/index.js","components/datatable/index.js","components/header/index.js","components/styles/index.jsx","services/UiConfig.js","hooks/useUIConfig.js"],"names":["handleMenuCollapsed","value","type","handleContentWidth","dispatch","handleMenuHidden","LayoutWrapper","props","children","appLayout","wrapperClass","transition","routeMeta","useUIConfig","isLoading","uiConfig","useDispatch","contentWidth","useSelector","state","layout","useEffect","menuCollapsed","menuHidden","className","classnames","length","DashboardRoutes","path","component","lazy","meta","action","resource","ReservationsRoutes","AasRoutes","SecurityRoutes","authRoute","publicRoute","SettingsRoutes","navLink","FBConnectRoutes","ListingRoutes","ReviewsRoutes","PartnersRoutes","ResbookRoutes","LicensesRoutes","Routes","CustomersRoutes","BlankLayout","useState","isMounted","setIsMounted","ThemeNavbar","setMenuVisibility","NavItem","NavLink","onClick","Button","Ripple","color","size","id","title","icon","header","extractMenuPermissions","menuItems","map","venueType","permissions","dashboards","resbook","reservation","superadmin","listing","reviews","aas","settings","VerticalMenuHeader","setGroupOpen","setMenuCollapsed","menuHover","error","to","src","navbar_logo","alt","isNavLinkActive","link","currentURL","routerProps","isNavGroupActive","some","child","search","navigation","result","getAllParents","obj","match","res","recurse","current","key","undefined","push","VerticalNavMenuLink","item","setGroupActive","groupActive","activeItem","setActiveItem","groupOpen","toggleActiveGroup","parentItem","currentActiveItem","LinkTag","externalLink","location","useLocation","pathname","matchPath","exact","strict","arr","parents","searchParents","disabled","active","target","newTab","href","isActive","url","e","preventDefault","resetActiveGroup","badge","badgeText","Badge","pill","VerticalNavMenuGroup","allParents","activeArr","includes","splice","indexOf","openArr","filter","val","onCollapseClick","pop","toggleOpenGroup","open","Collapse","isOpen","VerticalNavMenuItems","items","VerticalNavMenuSectionHeader","index","VerticalMenuNavItems","useContext","AbilityContext","Components","TagName","resolveNavItemComponent","hasAnyVisibleChild","i","abilityCan","canViewMenuGroup","reduce","acc","permision","canViewMenuItem","mapDispatchToProps","logoutUser","UserActions","connect","menu","setMenuHover","shadowRef","useRef","expanded","onMouseEnter","onMouseLeave","ref","options","wheelPropagation","onScrollY","container","scrollTop","classList","contains","add","remove","scrollMenu","navbar","menuVisibility","window","innerWidth","windowWidth","setWindowWidth","handleWindowWidth","addEventListener","Navbar","expand","light","show","Router","lastLayout","setLastLayout","themeConfig","console","log","setLayout","handleLayout","valueToStore","Function","useLayout","routerTransition","setTransition","useRouterTransition","ability","DefaultLayout","Layouts","VerticalLayout","NotAuthorized","Error","FinalRoute","route","isUserLoggedIn","storage","get","can","clearCookies","basename","process","REACT_APP_BASENAME","render","Object","keys","LayoutTag","LayoutRoutes","LayoutPaths","LayoutRoutesAndPaths","assign","fallback","App","injectIntl","withRef","SpinnerCentered","centered","style","Spinner","Wrapper","styled","div","Marker","text","defaultProps","SimpleMap","height","width","border","bootstrapURLKeys","defaultCenter","lat","this","lng","defaultZoom","zoom","venueName","Component","center","CustomHeader","searchTerm","setSearchTerm","buttonAction","extraFilters","isSearchable","intl","useIntl","Row","Col","xl","md","Input","placeholder","formatMessage","onChange","Datatable","data","columns","selectableRows","setRowsPerPage","selectableRowsComponent","onSelectedRowsChange","setCurrentPage","Card","noHeader","subHeader","responsive","pagination","paginationServer","paginationTotalRows","total","onChangeRowsPerPage","newPerPage","onChangePage","page","sortIcon","progressPending","progressComponent","subHeaderComponent","Header","lg","Styles","primary_color","secondary_color","links_color","navbar_bg","navbar_text_color","navbar_active_bg_color","navbar_active_text_color","navbar_hub_name_color","global","jsx","hostname","api","requestConfig","setError","setIsLoading","setData","getConfigFromStorage","JSON","parse","config","mozrestHub","UiConfigService","set","stringify","loadConfig","logo","favicon","primaryColor","secondaryColor","linksColor","hub_name","hubName","navbarLogo","navbarBgLogo","navbarTextColor","navbarActiveBgColor","navbarActiveTextColor","navbarHubNameColor","copyright","getUiConfig"],"mappings":"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","file":"static/js/47.85c5644f.chunk.js","sourcesContent":["export const handleMenuCollapsed = (value) => {\r\n return {type: 'HANDLE_MENU_COLLAPSED', value}\r\n}\r\n\r\n// ** Handles Layout Content Width (full / boxed)\r\nexport const handleContentWidth = value => dispatch => dispatch({ type: 'HANDLE_CONTENT_WIDTH', value })\r\n\r\n// ** Handles Menu Collapsed State (Bool)\r\n//export const handleMenuCollapsed = value => dispatch => dispatch({ type: 'HANDLE_MENU_COLLAPSED', value })\r\n\r\n// ** Handles Menu Hidden State (Bool)\r\nexport const handleMenuHidden = value => dispatch => dispatch({ type: 'HANDLE_MENU_HIDDEN', value })\r\n\r\n// ** Handles RTL (Bool)\r\nexport const handleRTL = value => dispatch => dispatch({ type: 'HANDLE_RTL', value })\r\n\r\n// ** Handle Layout Skin\r\nexport const handleSkin = value => dispatch => dispatch({ type: 'HANDLE_SKIN', value })\r\n","// ** React Imports\nimport { useEffect } from 'react'\n\n// ** Third Party Components\nimport classnames from 'classnames'\n\nimport { useUIConfig } from '@hooks'\n\n// ** Store & Actions\nimport { useSelector, useDispatch } from 'react-redux'\nimport { handleContentWidth, handleMenuCollapsed, handleMenuHidden } from '@store/actions/layout'\n\n// ** Styles\nimport 'animate.css/animate.css'\nimport { Styles } from \"@components\"\n\nconst LayoutWrapper = props => {\n // ** Props\n const { children, appLayout, wrapperClass, transition, routeMeta } = props\n const { isLoading, uiConfig } = useUIConfig()\n\n // ** Store Vars\n const dispatch = useDispatch()\n const store = useSelector(state => state)\n const contentWidth = store.layout.contentWidth\n\n // ** Clean Up Function\n const cleanUp = () => {\n if (routeMeta) {\n if (routeMeta.contentWidth) {\n dispatch(handleContentWidth('full'))\n }\n if (routeMeta.menuCollapsed) {\n dispatch(handleMenuCollapsed(!routeMeta.menuCollapsed))\n }\n if (routeMeta.menuHidden) {\n dispatch(handleMenuHidden(!routeMeta.menuHidden))\n }\n }\n }\n\n // ** ComponentDidMount\n useEffect(() => {\n if (routeMeta) {\n if (routeMeta.contentWidth) {\n dispatch(handleContentWidth(routeMeta.contentWidth))\n }\n if (routeMeta.menuCollapsed) {\n dispatch(handleMenuCollapsed(routeMeta.menuCollapsed))\n }\n if (routeMeta.menuHidden) {\n dispatch(handleMenuHidden(routeMeta.menuHidden))\n }\n }\n return () => cleanUp()\n }, [])\n\n return (\n <div\n className={classnames('app-content content', {\n [wrapperClass]: wrapperClass\n })}\n >\n {!isLoading && (\n <>\n <Styles {...uiConfig} />\n <div className='content-overlay'></div>\n <div className='header-navbar-shadow' />\n <div\n className={classnames({\n 'content-wrapper': !appLayout,\n 'content-area-wrapper': appLayout,\n 'container p-0': contentWidth === 'boxed',\n [`animate__animated animate__${transition}`]: transition !== 'none' && transition.length\n })}\n >\n <>\n {children}\n </>\n </div>\n </>\n )}\n </div>\n )\n}\n\nexport default LayoutWrapper\n","import { lazy } from 'react'\r\n\r\nconst DashboardRoutes = [\r\n // Dashboards\r\n {\r\n path: '/home',\r\n component: lazy(() => import('../../pages/Dashboard')),\r\n meta: {\r\n action: 'read',\r\n resource: 'home'\r\n }\r\n }\r\n]\r\n\r\nexport default DashboardRoutes\r\n","import { lazy } from 'react'\r\n\r\nconst ReservationsRoutes = [\r\n {\r\n path: '/reservations/channel-management',\r\n component: lazy(() => import('../../pages/Reservations/ChannelManagement')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'reservations:channel-management'\r\n }\r\n },\r\n {\r\n path: '/reservations/analytics',\r\n component: lazy(() => import('../../pages/Reservations/Reporting')),\r\n meta: {\r\n action: 'view',\r\n resource: 'reservations:analytics'\r\n }\r\n }\r\n]\r\nexport default ReservationsRoutes\r\n","import { lazy } from 'react'\r\n\r\nconst AasRoutes = [\r\n // Ads Automation Service\r\n {\r\n path: '/aas/mapping',\r\n component: lazy(() => import('../../pages/Mapping')),\r\n meta: {\r\n action: 'view',\r\n resource: 'aas:manage'\r\n }\r\n }\r\n]\r\n\r\nexport default AasRoutes\r\n","import { lazy } from 'react'\r\n\r\nconst SecurityRoutes = [\r\n // Security\r\n {\r\n path: '/login',\r\n component: lazy(() => import('../../pages/Security/Login')),\r\n layout: 'BlankLayout',\r\n meta: {\r\n authRoute: true\r\n }\r\n },\r\n {\r\n path: '/login-hash',\r\n component: lazy(() => import('../../pages/Security/LoginHash')),\r\n layout: 'BlankLayout',\r\n meta: {\r\n authRoute: true\r\n }\r\n },\r\n {\r\n path: '/forgot-password',\r\n component: lazy(() => import('../../pages/Security/ForgotPassword')),\r\n layout: 'BlankLayout',\r\n meta: {\r\n authRoute: true\r\n }\r\n },\r\n {\r\n path: '/reset-password',\r\n component: lazy(() => import('../../pages/Security/ResetPassword')),\r\n layout: 'BlankLayout',\r\n meta: {\r\n authRoute: true\r\n }\r\n },\r\n {\r\n path: '/error',\r\n component: lazy(() => import('../../pages/Security/Error')),\r\n layout: 'BlankLayout',\r\n meta: {\r\n publicRoute: true\r\n }\r\n }\r\n]\r\n\r\nexport default SecurityRoutes\r\n","import { lazy } from 'react'\r\n\r\nconst SettingsRoutes = [\r\n {\r\n path: '/get-started',\r\n component: lazy(() => import('../../pages/GetStarted')),\r\n meta: {\r\n navLink: '/get-started',\r\n action: 'edit',\r\n resource: 'reservations:channel-management'\r\n }\r\n },\r\n {\r\n path: '/settings/venues/:id',\r\n component: lazy(() => import('../../pages/Venues/Show')),\r\n meta: {\r\n navLink: '/settings/venues',\r\n action: 'edit',\r\n resource: 'settings:venues'\r\n }\r\n },\r\n {\r\n path: '/settings/venues',\r\n component: lazy(() => import('../../pages/Venues')),\r\n meta: {\r\n navLink: '/settings/venues',\r\n action: 'edit',\r\n resource: 'settings:venues'\r\n }\r\n },\r\n {\r\n path: '/settings/users/:id/edit',\r\n component: lazy(() => import('../../pages/Users/Edit')),\r\n meta: {\r\n navLink: '/settings/users',\r\n action: 'edit',\r\n resource: 'settings:users'\r\n }\r\n },\r\n {\r\n path: '/settings/users/new',\r\n component: lazy(() => import('../../pages/Users/Edit')),\r\n meta: {\r\n navLink: '/settings/users',\r\n action: 'edit',\r\n resource: 'settings:users'\r\n }\r\n },\r\n {\r\n path: '/settings/users',\r\n component: lazy(() => import('../../pages/Users/List')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'settings:users'\r\n }\r\n },\r\n {\r\n path: '/settings/billing',\r\n component: lazy(() => import('../../pages/Billing')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'settings:users'\r\n }\r\n },\r\n {\r\n path: '/settings/groups/:id/edit',\r\n component: lazy(() => import('../../pages/Groups/Edit')),\r\n meta: {\r\n navLink: '/settings/groups',\r\n action: 'edit',\r\n resource: 'settings:groups'\r\n }\r\n },\r\n {\r\n path: '/settings/groups/:id/link-venues',\r\n component: lazy(() => import('../../pages/Groups/LinkVenues')),\r\n meta: {\r\n navLink: '/settings/groups',\r\n action: 'edit',\r\n resource: 'settings:groups'\r\n }\r\n },\r\n {\r\n path: '/settings/groups/new',\r\n component: lazy(() => import('../../pages/Groups/Edit')),\r\n meta: {\r\n navLink: '/settings/groups',\r\n action: 'edit',\r\n resource: 'settings:groups'\r\n }\r\n },\r\n {\r\n path: '/settings/groups',\r\n component: lazy(() => import('../../pages/Groups/List')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'settings:groups'\r\n }\r\n },\r\n {\r\n path: '/settings/brands/:id/edit',\r\n component: lazy(() => import('../../pages/Brands/Edit')),\r\n meta: {\r\n navLink: '/settings/brands',\r\n action: 'edit',\r\n resource: 'settings:brands'\r\n }\r\n },\r\n {\r\n path: '/settings/brands',\r\n component: lazy(() => import('../../pages/Brands/List')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'settings:brands'\r\n }\r\n },\r\n {\r\n path: '/settings/account',\r\n component: lazy(() => import('../../pages/Profile')),\r\n meta: {\r\n action: 'view',\r\n resource: 'settings:account'\r\n }\r\n },\r\n {\r\n path: '/settings/widgets/:id/edit',\r\n component: lazy(() => import('../../pages/Widgets/Edit')),\r\n meta: {\r\n navLink: '/settings/widgets',\r\n action: 'edit',\r\n resource: 'settings:widgets'\r\n }\r\n },\r\n {\r\n path: '/settings/widgets/new',\r\n component: lazy(() => import('../../pages/Widgets/Edit')),\r\n meta: {\r\n navLink: '/settings/widgets',\r\n action: 'edit',\r\n resource: 'settings:widgets'\r\n }\r\n },\r\n {\r\n path: '/settings/widgets',\r\n component: lazy(() => import('../../pages/Widgets/List')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'settings:widgets'\r\n }\r\n },\r\n {\r\n path: '/settings/notifications',\r\n component: lazy(() => import('../../pages/Settings/Notifications')),\r\n meta: {\r\n action: \"edit\",\r\n resource: \"settings:notifications\"\r\n }\r\n },\r\n {\r\n path: '/settings/listing-review',\r\n component: lazy(() => import('../../pages/Settings/Listing')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'settings:listing-review'\r\n }\r\n }\r\n]\r\n\r\n\r\nexport default SettingsRoutes\r\n","import { lazy } from 'react'\r\n\r\nconst FBConnectRoutes = [\r\n {\r\n path: '/auth/facebook/callback/success',\r\n component: lazy(() => import('../../pages/FbConnect/Success')),\r\n layout: 'BlankLayout',\r\n meta: {\r\n authRoute: false,\r\n publicRoute: true\r\n }\r\n },\r\n {\r\n path: '/auth/facebook/callback',\r\n component: lazy(() => import('../../pages/FbConnect')),\r\n layout: 'BlankLayout',\r\n meta: {\r\n authRoute: false,\r\n publicRoute: true\r\n }\r\n }\r\n]\r\n\r\nexport default FBConnectRoutes\r\n","import { lazy } from 'react'\r\nconst ListingRoutes = [\r\n // Listing\r\n {\r\n path: \"/profile-management\",\r\n component: lazy(() => import('../../pages/Listing/Venues')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'listing:connection-management'\r\n }\r\n },\r\n {\r\n path: \"/listing-analytics\",\r\n component: lazy(() => import('../../pages/Listing/Analytics')),\r\n meta: {\r\n action: 'view',\r\n resource: 'listing:analytics'\r\n }\r\n }\r\n]\r\n\r\nexport default ListingRoutes\r\n","import { lazy } from 'react'\r\n\r\nconst ReviewsRoutes = [\r\n {\r\n path: \"/review-management\",\r\n component: lazy(() => import('../../pages/Reviews/Management')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'reviews:comments-management'\r\n }\r\n },\r\n {\r\n path: \"/review-analytics\",\r\n component: lazy(() => import('../../pages/Reviews/Analytics')),\r\n meta: {\r\n action: 'view',\r\n resource: 'reviews:analytics'\r\n }\r\n }\r\n]\r\n\r\nexport default ReviewsRoutes\r\n","import { lazy } from 'react'\r\nimport { ComingSoon } from \"@components\"\r\n\r\nconst PartnersRoutes = [\r\n {\r\n path: '/partners/rms/detail/:id',\r\n component: lazy(() => import('../../pages/Partners/RMS/Show')),\r\n meta: {\r\n navLink: '/partners/rms',\r\n action: 'edit',\r\n resource: 'partners:rms'\r\n }\r\n },\r\n {\r\n path: '/partners/rms',\r\n component: lazy(() => import('../../pages/Partners/RMS/List')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'partners:rms'\r\n }\r\n },\r\n {\r\n path: '/partners/edit-rms/:id',\r\n component: lazy(() => import('../../pages/Partners/RMS/Edit')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'partners:rms'\r\n }\r\n },\r\n {\r\n path: '/partners/new-rms',\r\n component: lazy(() => import('../../pages/Partners/RMS/New')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'partners:rms'\r\n }\r\n },\r\n {\r\n path: '/partners/rwg/:id',\r\n component: lazy(() => import('../../pages/Partners/RMS/EditRWG')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'partners:rms'\r\n }\r\n },\r\n {\r\n path: '/partners/booking-channels/detail/:id',\r\n component: lazy(() => import('../../pages/Partners/BC/Show')),\r\n meta: {\r\n navLink: '/partners/booking-channels',\r\n action: 'edit',\r\n resource: 'partners:booking-channels'\r\n }\r\n },\r\n {\r\n path: '/partners/booking-channels',\r\n component: lazy(() => import('../../pages/Partners/BC/List')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'partners:booking-channels'\r\n }\r\n },\r\n {\r\n path: '/partners/edit-bc/:id',\r\n component: lazy(() => import('../../pages/Partners/BC/Edit')),\r\n meta: {\r\n navLink: '/partners/booking-channels',\r\n action: 'edit',\r\n resource: 'partners:booking-channels'\r\n }\r\n }\r\n]\r\n\r\nexport default PartnersRoutes\r\n","import { lazy } from 'react'\r\n\r\nconst PartnersRoutes = [\r\n {\r\n path: '/customers/venues/new',\r\n component: lazy(() => import('../../pages/Customers/Venues/Edit')),\r\n meta: {\r\n navLink: 'customers/venues',\r\n action: 'edit',\r\n resource: 'customers/venues'\r\n }\r\n },\r\n {\r\n path: '/customers/venues/:id/show',\r\n component: lazy(() => import('../../pages/Customers/Venues/Show')),\r\n meta: {\r\n navLink: '/customers/venues',\r\n action: 'edit',\r\n resource: 'customers:venues'\r\n }\r\n },\r\n {\r\n path: '/customers/venues/:id/edit',\r\n component: lazy(() => import('../../pages/Customers/Venues/Edit')),\r\n meta: {\r\n navLink: '/customers/venues',\r\n action: 'edit',\r\n resource: 'customers:venues'\r\n }\r\n },\r\n {\r\n path: '/customers/venues',\r\n component: lazy(() => import('../../pages/Customers/Venues')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'customers:venues'\r\n }\r\n },\r\n {\r\n path: '/customers/companies/new',\r\n component: lazy(() => import('../../pages/Customers/Companies/Edit')),\r\n meta: {\r\n navLink: 'customers/companies',\r\n action: 'edit',\r\n resource: 'customers/companies'\r\n }\r\n },\r\n {\r\n path: '/customers/companies/:id/show',\r\n component: lazy(() => import('../../pages/Customers/Companies/Show')),\r\n meta: {\r\n navLink: '/customers/companies',\r\n action: 'edit',\r\n resource: 'customers:companies'\r\n }\r\n },\r\n {\r\n path: '/customers/companies/:id/edit',\r\n component: lazy(() => import('../../pages/Customers/Companies/Edit')),\r\n meta: {\r\n navLink: '/customers/companies',\r\n action: 'edit',\r\n resource: 'customers:companies'\r\n }\r\n },\r\n {\r\n path: '/customers/companies',\r\n component: lazy(() => import('../../pages/Customers/Companies')),\r\n meta: {\r\n action: 'edit',\r\n resource: 'customers:companies'\r\n }\r\n }\r\n]\r\n\r\nexport default PartnersRoutes\r\n","import { lazy } from 'react'\r\nconst ResbookRoutes = [\r\n // Resbook\r\n {\r\n path: \"/bookings-dashboard\",\r\n component: lazy(() => import('../../pages/Resbook/Dashboard')),\r\n meta: {\r\n action: 'view',\r\n resource: 'resbook:dashboard'\r\n }\r\n },\r\n {\r\n path: \"/bookings-configuration\",\r\n component: lazy(() => import('../../pages/Resbook/Configuration')),\r\n meta: {\r\n action: 'view',\r\n resource: 'resbook:configuration'\r\n }\r\n }\r\n]\r\n\r\nexport default ResbookRoutes\r\n","import { lazy } from 'react'\n\nconst LicensesRoutes = [\n // {\n // path: '/customers/venues/new',\n // component: lazy(() => import('../../pages/Customers/Venues/Edit')),\n // meta: {\n // navLink: 'customers/venues',\n // action: 'edit',\n // resource: 'customers/venues'\n // }\n // },\n // {\n // path: '/customers/venues/:id/show',\n // component: lazy(() => import('../../pages/Customers/Venues/Show')),\n // meta: {\n // navLink: '/customers/venues',\n // action: 'edit',\n // resource: 'customers:venues'\n // }\n // },\n // {\n // path: '/customers/venues/:id/edit',\n // component: lazy(() => import('../../pages/Customers/Venues/Edit')),\n // meta: {\n // navLink: '/customers/venues',\n // action: 'edit',\n // resource: 'customers:venues'\n // }\n // },\n\n {\n path: '/licenses/meta',\n component: lazy(() => import('../../pages/Licenses/Meta')),\n meta: {\n action: 'edit',\n resource: 'licenses:meta'\n }\n },\n {\n path: '/licenses/listing-and-review',\n component: lazy(() => import('../../pages/Licenses/ListingAndReview')),\n meta: {\n action: 'edit',\n resource: 'licenses:listingAndReview'\n }\n },\n {\n path: '/licenses/tripadvisor',\n component: lazy(() => import('../../pages/Licenses/Tripadvisor')),\n meta: {\n action: 'edit',\n resource: 'licenses:tripadvisor'\n }\n }\n]\n\nexport default LicensesRoutes\n","// ** Routes Imports\nimport DashboardRoutes from \"./Dashboards\"\nimport ReservationsRoutes from \"./Reservations\"\nimport AasRoutes from \"./Aas\"\nimport SecurityRoutes from \"./Security\"\nimport SettingsRoutes from \"./Settings\"\nimport FBConnectRoutes from \"./FBConnect\"\nimport ListingRoutes from \"./Listing\"\nimport ReviewsRoutes from \"./Reviews\"\nimport PartnersRoutes from \"./Partners\"\nimport CustomersRoutes from \"./Customers\"\nimport ResbookRoutes from \"./Resbook\"\nimport LicensesRoutes from \"./Licenses\"\n// ** Document title\nconst TemplateTitle = \"%s - Channel Hub\"\n\n// ** Default Route\nconst DefaultRoute = \"/home\"\n\n// ** Merge Routes\nconst Routes = [\n ...DashboardRoutes,\n ...ReservationsRoutes,\n ...AasRoutes,\n ...SecurityRoutes,\n ...SettingsRoutes,\n ...FBConnectRoutes,\n ...ListingRoutes,\n ...ReviewsRoutes,\n ...PartnersRoutes,\n ...CustomersRoutes,\n ...ResbookRoutes,\n ...LicensesRoutes\n]\n\nexport { DefaultRoute, TemplateTitle, Routes }\n","// ** React Imports\nimport { useEffect, useState } from 'react'\n\nconst BlankLayout = ({ children, ...rest }) => {\n\n // ** States\n const [isMounted, setIsMounted] = useState(false)\n\n //** ComponentDidMount\n useEffect(() => {\n setIsMounted(true)\n return () => setIsMounted(false)\n }, [])\n\n if (!isMounted) {\n return null\n }\n\n return (\n <div className='blank-page'>\n <div className='app-content content'>\n <div className='content-wrapper'>\n <div className='content-body'>{children}</div>\n </div>\n </div>\n </div>\n )\n}\n\nexport default BlankLayout\n","// ** React Imports\nimport { Fragment } from 'react'\n\n// ** Third Party Components\nimport { Menu } from 'react-feather'\nimport { NavItem, NavLink, Button } from 'reactstrap'\n\nconst ThemeNavbar = props => {\n // ** Props\n const { setMenuVisibility } = props\n\n return (\n <Fragment>\n <div className='bookmark-wrapper d-flex align-items-center mt-1'>\n <ul className='navbar-nav d-xl-none'>\n <NavItem className='mobile-menu mr-auto'>\n <NavLink className='nav-menu-main menu-toggle hidden-xs is-active' onClick={() => setMenuVisibility(true)}>\n <Button.Ripple className='btn-icon rounded-circle' color='primary' size='sm'>\n <Menu size={10} />\n </Button.Ripple>\n </NavLink>\n </NavItem>\n </ul>\n </div>\n {/* <ul className='nav navbar-nav align-items-center ml-auto'>\n\n </ul> */}\n </Fragment>\n )\n}\n\nexport default ThemeNavbar\n","import { Home } from 'react-feather'\r\n\r\nexport default [\r\n {\r\n id: 'home',\r\n title: 'Home',\r\n icon: <Home size={20} />,\r\n navLink: '/home',\r\n action: 'read',\r\n resource: 'home'\r\n }\r\n]\r\n","import {TrendingUp, Share2} from 'react-feather'\r\n\r\nexport default [\r\n {\r\n header: 'Reservations',\r\n action: 'view',\r\n resource: 'reservations:analytics'\r\n },\r\n {\r\n id: 'channel-management',\r\n title: 'Channel Management',\r\n icon: <Share2 size={20} />,\r\n navLink: '/reservations/channel-management',\r\n action: 'edit',\r\n resource: 'reservations:channel-management'\r\n },\r\n {\r\n id: 'analytics',\r\n title: 'Analytics',\r\n icon: <TrendingUp size={20} />,\r\n navLink: '/reservations/analytics',\r\n action: 'view',\r\n resource: 'reservations:analytics'\r\n }\r\n]\r\n","import { Star } from 'react-feather'\r\n\r\nexport default [\r\n {\r\n header: 'Ads Automation',\r\n action: 'view',\r\n resource: 'aas:manage'\r\n },\r\n {\r\n id: 'mapping',\r\n title: 'Manage',\r\n icon: <Star size={12}/>,\r\n navLink: '/aas/mapping',\r\n action: 'view',\r\n resource: 'aas:manage'\r\n }\r\n]\r\n","export const extractMenuPermissions = (menuItems) => menuItems.map(({ action, resource }) => ({\n action,\n resource\n }))\n","import {\n Users,\n Settings,\n Shield,\n MapPin,\n Code,\n Layers,\n Bell,\n Globe,\n DollarSign\n} from \"react-feather\"\nimport {venueType} from \"@utils\"\nimport {extractMenuPermissions} from \"@utils/extractMenuPermissions\"\n\nconst menuItems = [\n {\n id: \"venuew-management\",\n title: venueType(\"many\"),\n icon: <MapPin size={20}/>,\n navLink: \"/settings/venues\",\n action: \"edit\",\n resource: \"settings:venues\"\n },\n {\n id: \"user-management\",\n title: \"Users\",\n icon: <Users size={20}/>,\n navLink: \"/settings/users\",\n action: \"edit\",\n resource: \"settings:users\"\n },\n {\n id: \"billing\",\n title: \"Billing\",\n icon: <DollarSign size={20}/>,\n navLink: \"/settings/billing\",\n action: \"edit\",\n resource: \"settings:billing\"\n },\n {\n id: \"groups\",\n title: \"Groups\",\n icon: <Shield size={20}/>,\n navLink: \"/settings/groups\",\n action: \"edit\",\n resource: \"settings:groups\"\n },\n {\n id: \"widgets\",\n title: \"Widgets\",\n icon: <Code size={20}/>,\n navLink: \"/settings/widgets\",\n action: \"edit\",\n resource: \"settings:widgets\"\n }, \n {\n id: \"listing\",\n title: \"Listing&Review\",\n icon: <Globe size={20}/>,\n navLink: \"/settings/listing-review\",\n action: \"edit\",\n resource: \"settings:listing-review\"\n },\n /* {\n id: 'brands',\n title: 'Brands',\n icon: <Tag size={20} />,\n navLink: '/settings/brands',\n action: 'edit',\n resource: 'settings:brands'\n },*/\n {\n id: \"account\",\n title: \"Account\",\n icon: <Settings size={20}/>,\n navLink: \"/settings/account\",\n action: \"view\",\n resource: \"settings:account\"\n },\n {\n id: \"notifications\",\n title: \"Notifications\",\n icon: <Bell size={20}/>,\n navLink: \"/settings/notifications\",\n action: \"edit\",\n resource: \"settings:notifications\"\n }\n]\n\nexport default [\n {\n header: \"Settings\",\n permissions: extractMenuPermissions(menuItems)\n },\n ...menuItems\n]\n","import { TrendingUp, Briefcase } from \"react-feather\"\r\nimport { extractMenuPermissions } from \"@utils/extractMenuPermissions\"\r\n\r\nconst menuItems = [\r\n {\r\n id: \"profile-management\",\r\n title: \"Profile Management\",\r\n icon: <Briefcase size={20} />,\r\n navLink: \"/profile-management\",\r\n action: \"edit\",\r\n resource: \"listing:connection-management\"\r\n },\r\n {\r\n id: \"listing-analytics\",\r\n title: \"Analytics\",\r\n icon: <TrendingUp size={20} />,\r\n navLink: \"/listing-analytics\",\r\n action: \"view\",\r\n resource: \"listing:analytics\"\r\n }\r\n]\r\n\r\nexport default [\r\n {\r\n header: \"Listing\",\r\n permissions: extractMenuPermissions(menuItems)\r\n },\r\n ...menuItems\r\n]\r\n","import { TrendingUp, MessageSquare } from \"react-feather\"\r\nimport { extractMenuPermissions } from \"@utils/extractMenuPermissions\"\r\n\r\nconst menuItems = [\r\n {\r\n id: \"review-management\",\r\n title: \"Review Management\",\r\n icon: <MessageSquare size={20} />,\r\n navLink: \"/review-management\",\r\n action: \"edit\",\r\n resource: \"reviews:comments-management\"\r\n },\r\n {\r\n id: \"review-analytics\",\r\n title: \"Analytics\",\r\n icon: <TrendingUp size={20} />,\r\n navLink: \"/review-analytics\",\r\n action: \"view\",\r\n resource: \"reviews:analytics\"\r\n }\r\n]\r\n\r\nexport default [\r\n {\r\n header: \"Reviews\",\r\n permissions: extractMenuPermissions(menuItems)\r\n },\r\n ...menuItems\r\n]\r\n","import { Briefcase, MapPin, Server, ShoppingCart, Facebook, BookOpen, Database } from 'react-feather'\r\n\r\nexport default [\r\n {\r\n header: 'Partners',\r\n action: 'edit',\r\n resource: 'partners:rms'\r\n },\r\n {\r\n id: 'rms',\r\n title: 'RMS',\r\n icon: <Server size={20} />,\r\n navLink: '/partners/rms',\r\n action: 'edit',\r\n resource: 'partners:rms'\r\n },\r\n {\r\n id: 'booking-channels',\r\n title: 'Booking Channels',\r\n icon: <ShoppingCart size={20} />,\r\n navLink: '/partners/booking-channels',\r\n action: 'edit',\r\n resource: 'partners:booking-channels'\r\n },\r\n {\r\n header: 'Customers',\r\n action: 'edit',\r\n resource: 'customers:companies'\r\n },\r\n {\r\n id: 'companies',\r\n title: 'Companies',\r\n icon: <Briefcase size={20} />,\r\n navLink: '/customers/companies',\r\n action: 'edit',\r\n resource: 'customers:companies'\r\n },\r\n {\r\n id: 'venues',\r\n title: 'Venues',\r\n icon: <MapPin size={20} />,\r\n navLink: '/customers/venues',\r\n action: 'edit',\r\n resource: 'customers:venues'\r\n },\r\n {\r\n header: 'Licenses',\r\n action: 'edit',\r\n resource: 'licenses:meta'\r\n },\r\n {\r\n id: 'meta',\r\n title: 'Meta',\r\n icon: <Facebook size={20} />,\r\n navLink: '/licenses/meta',\r\n action: 'edit',\r\n resource: 'licenses:meta'\r\n },\r\n {\r\n id: 'listing-and-review',\r\n title: 'Listing & Review',\r\n icon: <BookOpen size={20} />,\r\n navLink: '/licenses/listing-and-review',\r\n action: 'edit',\r\n resource: 'licenses:listingAndReview'\r\n },\r\n {\r\n id: 'tripadvisor',\r\n title: 'Tripadvisor',\r\n icon: <Database size={20} />,\r\n navLink: '/licenses/tripadvisor',\r\n action: 'edit',\r\n resource: 'licenses:tripadvisor'\r\n }\r\n]\r\n","import { Settings, Calendar } from \"react-feather\"\r\nimport { extractMenuPermissions } from \"@utils/extractMenuPermissions\"\r\n\r\nconst menuItems = [\r\n {\r\n id: \"resbook-dashboard\",\r\n title: \"Dashboard\",\r\n icon: <Calendar size={20} />,\r\n navLink: \"/bookings-dashboard\",\r\n action: \"view\",\r\n resource: \"resbook:dashboard\"\r\n },\r\n {\r\n id: \"resbook-configuration\",\r\n title: \"Configuration\",\r\n icon: <Settings size={20} />,\r\n navLink: \"/bookings-configuration\",\r\n action: \"view\",\r\n resource: \"resbook:configuration\"\r\n }\r\n]\r\n\r\nexport default [\r\n {\r\n header: \"Resbook\",\r\n permissions: extractMenuPermissions(menuItems)\r\n },\r\n ...menuItems\r\n]\r\n","// ** Navigation sections imports\r\nimport dashboards from './dashboards'\r\nimport reservation from './reservation'\r\nimport aas from './aas'\r\nimport settings from './settings'\r\nimport listing from \"./listing\"\r\nimport reviews from \"./reviews\"\r\nimport superadmin from \"./superadmin\"\r\nimport resbook from './resbook'\r\n\r\n// ** Merge & Export\r\nexport default [\r\n ...dashboards,\r\n ...resbook,\r\n ...reservation,\r\n ...superadmin,\r\n ...listing,\r\n ...reviews,\r\n ...aas,\r\n ...settings\r\n]\r\n","// ** React Imports\nimport { useEffect } from 'react'\nimport { NavLink } from 'react-router-dom'\n\n// ** Third Party Components\nimport { Disc, X, Circle } from 'react-feather'\n\nimport { useUIConfig } from '@hooks'\n\nconst VerticalMenuHeader = props => {\n // ** Props\n const { menuCollapsed, setMenuCollapsed, setMenuVisibility, setGroupOpen, menuHover } = props\n const { error: error, uiConfig } = useUIConfig('')\n\n // ** Reset open group\n useEffect(() => {\n if (!menuHover && menuCollapsed) setGroupOpen([])\n }, [menuHover, menuCollapsed])\n\n // ** Menu toggler component\n const Toggler = () => {\n if (!menuCollapsed) {\n return (\n <Disc\n size={20}\n data-tour='toggle-icon'\n className='text-primary toggle-icon d-none d-xl-block'\n onClick={() => setMenuCollapsed(true)}\n />\n )\n } else {\n return (\n <Circle\n size={20}\n data-tour='toggle-icon'\n className='text-primary toggle-icon d-none d-xl-block'\n onClick={() => setMenuCollapsed(false)}\n />\n )\n }\n }\n\n return (\n <div className='navbar-header'>\n <NavLink to='/' className='navbar-brand'>\n <span className='brand-logo'>\n <img src={uiConfig.navbar_logo} alt='logo'/>\n </span>\n </NavLink>\n </div>\n )\n}\n\nexport default VerticalMenuHeader\n","// ** React Imports\nimport { abilityCan } from \"../config/acl/ability\"\n\n/**\n * Return which component to render based on it's data/context\n */\nexport const resolveVerticalNavMenuItemComponent = (item) => {\n if (item.header) return \"VerticalNavMenuSectionHeader\"\n if (item.children) return \"VerticalNavMenuGroup\"\n return \"VerticalNavMenuLink\"\n}\n\n/**\n * Check if nav-link is active\n */\nexport const isNavLinkActive = (link, currentURL, routerProps) => {\n return (\n currentURL === link ||\n (routerProps &&\n routerProps.meta &&\n routerProps.meta.navLink &&\n routerProps.meta.navLink === link)\n )\n // return currentURL === link\n}\n\n/**\n * Check if nav group is\n */\nexport const isNavGroupActive = (children, currentURL, routerProps) => {\n return children.some((child) => {\n // If child have children => It's group => Go deeper(recursive)\n if (child.children) {\n return isNavGroupActive(child.children, currentURL, routerProps)\n }\n // else it's link => Check for matched Route\n return isNavLinkActive(child.navLink, currentURL, routerProps)\n })\n}\n\nexport const search = (navigation, currentURL, routerProps) => {\n let result\n navigation.some((child) => {\n let children\n // If child have children => It's group => Go deeper(recursive)\n if (\n child.children &&\n (children = search(child.children, currentURL, routerProps))\n ) {\n return (result = {\n id: child.id,\n children\n })\n }\n\n // else it's link => Check for matched Route\n if (isNavLinkActive(child.navLink, currentURL, routerProps)) {\n return (result = {\n id: child.id\n })\n }\n })\n return result\n}\n\n/**\n * Loop through nested object\n */\nexport const getAllParents = (obj, match) => {\n const res = []\n const recurse = (obj, current) => {\n for (const key in obj) {\n const value = obj[key]\n if (value !== undefined) {\n if (value && typeof value === \"object\") {\n recurse(value, key)\n } else {\n if (key === match) {\n res.push(value)\n }\n }\n }\n }\n }\n recurse(obj)\n return res\n}\n\nexport const canViewMenuGroup = (item) => {\n // const ability = useContext(AbilityContext)\n // ! This same logic is used in canViewHorizontalNavMenuGroup and canViewHorizontalNavMenuHeaderGroup. So make sure to update logic in them as well\n const hasAnyVisibleChild =\n item.children &&\n item.children.some((i) => abilityCan(i.action, i.resource))\n\n // ** If resource and action is defined in item => Return based on children visibility (Hide group if no child is visible)\n // ** Else check for ability using provided resource and action along with checking if has any visible child\n if (!(item.action && item.resource)) {\n return hasAnyVisibleChild\n }\n return abilityCan(item.action, item.resource) && hasAnyVisibleChild\n}\n\nexport const canViewMenuItem = (item) => {\n // const ability = useContext(AbilityContext)\n if (item.permissions) {\n return item.permissions.reduce(\n (acc, permision) => acc || abilityCan(permision.action, permision.resource),\n false\n )\n }\n\n return abilityCan(item.action, item.resource)\n}\n","// ** React Imports\r\nimport { useEffect } from 'react'\r\nimport { NavLink, useLocation, matchPath, useParams } from 'react-router-dom'\r\n\r\n// ** Third Party Components\r\nimport { Badge } from 'reactstrap'\r\nimport classnames from 'classnames'\r\nimport { FormattedMessage } from 'react-intl'\r\n\r\n// ** Vertical Menu Array Of Items\r\nimport navigation from '@src/navigation'\r\n\r\n// ** Utils\r\nimport { isNavLinkActive, search, getAllParents } from '@layouts/utils'\r\n\r\nconst VerticalNavMenuLink = ({\r\n item,\r\n groupActive,\r\n setGroupActive,\r\n activeItem,\r\n setActiveItem,\r\n groupOpen,\r\n setGroupOpen,\r\n toggleActiveGroup,\r\n parentItem,\r\n routerProps,\r\n currentActiveItem\r\n}) => {\r\n // ** Conditional Link Tag, if item has newTab or externalLink props use <a> tag else use NavLink\r\n const LinkTag = item.externalLink ? 'a' : NavLink\r\n\r\n // ** URL Vars\r\n const location = useLocation()\r\n const currentURL = location.pathname\r\n\r\n // ** To match path\r\n const match = matchPath(currentURL, {\r\n path: `${item.navLink}/:param`,\r\n exact: true,\r\n strict: false\r\n })\r\n\r\n // ** Search for current item parents\r\n const searchParents = (navigation, currentURL) => {\r\n const parents = search(navigation, currentURL, routerProps) // Search for parent object\r\n const allParents = getAllParents(parents, 'id') // Parents Object to Parents Array\r\n return allParents\r\n }\r\n\r\n // ** URL Vars\r\n const resetActiveGroup = navLink => {\r\n const parents = search(navigation, navLink, match)\r\n toggleActiveGroup(item.id, parents)\r\n }\r\n\r\n // ** Reset Active & Open Group Arrays\r\n const resetActiveAndOpenGroups = () => {\r\n setGroupActive([])\r\n setGroupOpen([])\r\n }\r\n\r\n // ** Checks url & updates active item\r\n useEffect(() => {\r\n if (currentActiveItem !== null) {\r\n setActiveItem(currentActiveItem)\r\n const arr = searchParents(navigation, currentURL)\r\n setGroupActive([...arr])\r\n }\r\n }, [location])\r\n\r\n return (\r\n <li\r\n className={classnames({\r\n 'nav-item': !item.children,\r\n disabled: item.disabled,\r\n active: item.navLink === activeItem\r\n })}\r\n >\r\n <LinkTag\r\n className='d-flex align-items-center'\r\n target={item.newTab ? '_blank' : undefined}\r\n /*eslint-disable */\r\n {...(item.externalLink === true\r\n ? {\r\n href: item.navLink || '/'\r\n }\r\n : {\r\n to: item.navLink || '/',\r\n isActive: (match, location) => {\r\n if (!match) {\r\n return false\r\n }\r\n\r\n if (match.url && match.url !== '' && match.url === item.navLink) {\r\n currentActiveItem = item.navLink\r\n }\r\n }\r\n })}\r\n /*eslint-enable */\r\n onClick={e => {\r\n if (!item.navLink.length) {\r\n e.preventDefault()\r\n }\r\n parentItem ? resetActiveGroup(item.navLink) : resetActiveAndOpenGroups()\r\n }}\r\n >\r\n {item.icon}\r\n <span className='menu-item text-truncate capitalize'>\r\n <FormattedMessage id={item.title} />\r\n </span>\r\n\r\n {item.badge && item.badgeText ? (\r\n <Badge className='ml-auto mr-1' color={item.badge} pill>\r\n {item.badgeText}\r\n </Badge>\r\n ) : null}\r\n </LinkTag>\r\n </li>\r\n )\r\n}\r\n\r\nexport default VerticalNavMenuLink\r\n","// ** React Imports\r\nimport { Link, useLocation } from 'react-router-dom'\r\n\r\n// ** Third Party Components\r\nimport classnames from 'classnames'\r\nimport { Collapse, Badge } from 'reactstrap'\r\nimport { FormattedMessage } from 'react-intl'\r\n\r\n// ** Vertical Menu Items Component\r\nimport VerticalNavMenuItems from './VerticalNavMenuItems'\r\n\r\n// ** Utils\r\nimport { isNavGroupActive, getAllParents } from '@layouts/utils'\r\n\r\nconst VerticalNavMenuGroup = ({\r\n item,\r\n groupActive,\r\n setGroupActive,\r\n activeItem,\r\n setActiveItem,\r\n groupOpen,\r\n setGroupOpen,\r\n parentItem,\r\n menuCollapsed,\r\n menuHover,\r\n routerProps,\r\n currentActiveItem\r\n}) => {\r\n // ** Current Val\r\n const currentURL = useLocation().pathname\r\n\r\n // ** Toggles Open Group\r\n const toggleOpenGroup = (item, parentItem) => {\r\n let openArr = groupOpen\r\n let allParents\r\n\r\n if (parentItem) {\r\n allParents = getAllParents(parentItem, 'id')\r\n allParents.pop()\r\n }\r\n\r\n // ** If user clicked on menu group inside already opened group i.g. when user click on blog group inside pages group\r\n if (groupOpen && allParents && groupOpen[0] === allParents[0]) {\r\n groupOpen.includes(item) ? openArr.splice(openArr.indexOf(item), 1) : openArr.push(item)\r\n } else {\r\n openArr = []\r\n if (!groupOpen.includes(item)) {\r\n openArr.push(item)\r\n }\r\n }\r\n\r\n // ** Set Open Group\r\n setGroupOpen([...openArr])\r\n }\r\n\r\n // ** Toggle Active Group\r\n const toggleActiveGroup = (item, parentItem) => {\r\n let activeArr = groupActive\r\n let allParents\r\n\r\n if (parentItem) {\r\n allParents = getAllParents(parentItem, 'id')\r\n activeArr = allParents\r\n } else {\r\n activeArr.includes(item) ? activeArr.splice(activeArr.indexOf(item), 1) : activeArr.push(item)\r\n }\r\n\r\n // ** Set open group removing any activegroup item present in opengroup state\r\n const openArr = groupOpen.filter(val => !activeArr.includes(val))\r\n setGroupOpen([...openArr])\r\n\r\n // ** Set Active Group\r\n setGroupActive([...activeArr])\r\n }\r\n\r\n // ** On Group Item Click\r\n const onCollapseClick = (e, item) => {\r\n if ((groupActive && groupActive.includes(item.id)) || isNavGroupActive(item.children, currentURL, routerProps)) {\r\n toggleActiveGroup(item.id)\r\n } else {\r\n toggleOpenGroup(item.id, parentItem)\r\n }\r\n\r\n e.preventDefault()\r\n }\r\n\r\n // ** Returns condition to add open class\r\n const openClassCondition = id => {\r\n if ((menuCollapsed && menuHover) || menuCollapsed === false) {\r\n if (groupActive.includes(id) || groupOpen.includes(item.id)) {\r\n return true\r\n }\r\n } else if (groupActive.includes(id) && menuCollapsed && menuHover === false) {\r\n return false\r\n } else {\r\n return null\r\n }\r\n }\r\n\r\n return (\r\n <li\r\n className={classnames('nav-item has-sub', {\r\n open: openClassCondition(item.id),\r\n 'menu-collapsed-open': groupActive.includes(item.id),\r\n 'sidebar-group-active': groupActive.includes(item.id) || groupOpen.includes(item.id)\r\n })}\r\n >\r\n <Link className='d-flex align-items-center' to='/' onClick={e => onCollapseClick(e, item)}>\r\n {item.icon}\r\n <span className='menu-title text-truncate'>\r\n <FormattedMessage id={item.title} />\r\n </span>\r\n\r\n {item.badge && item.badgeText ? (\r\n <Badge className='ml-auto mr-1' color={item.badge} pill>\r\n {item.badgeText}\r\n </Badge>\r\n ) : null}\r\n </Link>\r\n\r\n {/* Render Child Recursively Through VerticalNavMenuItems Component */}\r\n <ul className='menu-content'>\r\n <Collapse isOpen={(groupActive && groupActive.includes(item.id)) || (groupOpen && groupOpen.includes(item.id))}>\r\n <VerticalNavMenuItems\r\n items={item.children}\r\n groupActive={groupActive}\r\n setGroupActive={setGroupActive}\r\n groupOpen={groupOpen}\r\n setGroupOpen={setGroupOpen}\r\n toggleActiveGroup={toggleActiveGroup}\r\n parentItem={item}\r\n menuCollapsed={menuCollapsed}\r\n menuHover={menuHover}\r\n routerProps={routerProps}\r\n currentActiveItem={currentActiveItem}\r\n activeItem={activeItem}\r\n setActiveItem={setActiveItem}\r\n />\r\n </Collapse>\r\n </ul>\r\n </li>\r\n )\r\n}\r\n\r\nexport default VerticalNavMenuGroup\r\n","// ** Third Party Components\nimport { FormattedMessage } from 'react-intl'\nimport { MoreHorizontal } from 'react-feather'\n\nconst VerticalNavMenuSectionHeader = ({ item, index }) => {\n return (\n <li className='navigation-header'>\n <span>\n <FormattedMessage id={item.header} />\n </span>\n <MoreHorizontal className='feather-more-horizontal' />\n </li>\n )\n}\n\nexport default VerticalNavMenuSectionHeader\n","// ** React Imports\r\nimport {useContext} from 'react'\r\n\r\n// ** Vertical Menu Components\r\nimport VerticalNavMenuLink from './VerticalNavMenuLink'\r\nimport VerticalNavMenuGroup from './VerticalNavMenuGroup'\r\nimport VerticalNavMenuSectionHeader from './VerticalNavMenuSectionHeader'\r\n\r\n// ** Ability Context\r\nimport {AbilityContext} from '@src/utils/context/Can'\r\n\r\n// ** Utils\r\nimport {\r\n canViewMenuGroup,\r\n canViewMenuItem,\r\n resolveVerticalNavMenuItemComponent as resolveNavItemComponent\r\n} from '@layouts/utils'\r\n\r\nconst VerticalMenuNavItems = props => {\r\n // ** Context\r\n const ability = useContext(AbilityContext)\r\n\r\n // ** Components Object\r\n const Components = {\r\n VerticalNavMenuSectionHeader,\r\n VerticalNavMenuGroup,\r\n VerticalNavMenuLink\r\n }\r\n\r\n // ** Render Nav Menu Items\r\n return props.items.map((item, index) => {\r\n const TagName = Components[resolveNavItemComponent(item)]\r\n if (item.children) {\r\n return canViewMenuGroup(item) && <TagName item={item} index={index} key={item.id} {...props} />\r\n }\r\n return canViewMenuItem(item) && <TagName key={item.id || item.header} item={item} {...props} />\r\n })\r\n}\r\n\r\nexport default VerticalMenuNavItems\r\n","// ** React Imports\r\nimport { Fragment, useState, useRef } from \"react\"\r\nimport { Link } from \"react-router-dom\"\r\n\r\n// ** Vertical Menu Items Array\r\nimport navigation from \"@src/navigation\"\r\n\r\n// ** Third Party Components\r\nimport classnames from \"classnames\"\r\nimport PerfectScrollbar from \"react-perfect-scrollbar\"\r\n\r\n// ** Vertical Menu Components\r\nimport VerticalMenuHeader from \"./VerticalMenuHeader\"\r\nimport VerticalNavMenuItems from \"./VerticalNavMenuItems\"\r\n\r\n// ** Store & Actions\r\nimport { connect } from \"react-redux\"\r\nimport UserActions from \"@store/reducers/User\"\r\n\r\nimport { Power } from \"react-feather\"\r\n\r\nconst Sidebar = (props) => {\r\n // ** Props\r\n const {\r\n menuCollapsed,\r\n routerProps,\r\n menu,\r\n currentActiveItem,\r\n logoutUser\r\n } = props\r\n\r\n\r\n // ** States\r\n const [groupOpen, setGroupOpen] = useState([])\r\n const [groupActive, setGroupActive] = useState([])\r\n const [activeItem, setActiveItem] = useState(null)\r\n\r\n // ** Menu Hover State\r\n const [menuHover, setMenuHover] = useState(false)\r\n\r\n // ** Ref\r\n const shadowRef = useRef(null)\r\n\r\n // ** Function to handle Mouse Enter\r\n const onMouseEnter = () => {\r\n if (menuCollapsed) {\r\n setMenuHover(true)\r\n }\r\n }\r\n\r\n // ** Scroll Menu\r\n const scrollMenu = (container) => {\r\n if (shadowRef && container.scrollTop > 0) {\r\n if (!shadowRef.current.classList.contains(\"d-block\")) {\r\n shadowRef.current.classList.add(\"d-block\")\r\n }\r\n } else {\r\n if (shadowRef.current.classList.contains(\"d-block\")) {\r\n shadowRef.current.classList.remove(\"d-block\")\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <div\r\n className={classnames(\r\n \"main-menu menu-fixed menu-accordion menu-shadow\",\r\n {\r\n expanded: menuHover || menuCollapsed === false,\r\n \"menu-light\": true\r\n }\r\n )}\r\n onMouseEnter={onMouseEnter}\r\n onMouseLeave={() => setMenuHover(false)}\r\n >\r\n {menu ? (\r\n menu(props)\r\n ) : (\r\n <Fragment>\r\n {/* Vertical Menu Header */}\r\n <VerticalMenuHeader\r\n setGroupOpen={setGroupOpen}\r\n menuHover={menuHover}\r\n {...props}\r\n />\r\n {/* Vertical Menu Header Shadow */}\r\n <div className=\"shadow-bottom\" ref={shadowRef}></div>\r\n {/* Perfect Scrollbar */}\r\n\r\n <div className=\"sidebar-menu\">\r\n <div className=\"sidebar-menu-content\">\r\n <PerfectScrollbar\r\n options={{ wheelPropagation: false }}\r\n onScrollY={(container) => scrollMenu(container)}\r\n >\r\n <ul className=\"navigation navigation-main\">\r\n <VerticalNavMenuItems\r\n items={navigation}\r\n groupActive={groupActive}\r\n setGroupActive={setGroupActive}\r\n activeItem={activeItem}\r\n setActiveItem={setActiveItem}\r\n groupOpen={groupOpen}\r\n setGroupOpen={setGroupOpen}\r\n routerProps={routerProps}\r\n menuCollapsed={menuCollapsed}\r\n menuHover={menuHover}\r\n currentActiveItem={currentActiveItem}\r\n />\r\n </ul>\r\n <br />\r\n </PerfectScrollbar>\r\n </div>\r\n\r\n <div>\r\n <ul className=\"navigation navigation-main\">\r\n <li className=\"nav-item logout-button\">\r\n <Link to=\"/login\" onClick={() => logoutUser()} className=\"d-flex align-items-center\">\r\n <Power size={14} className=\"mr-75\" />\r\n <span className=\"align-middle menu-item text-truncate capitalize\">Logout</span>\r\n </Link>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </Fragment>\r\n )}\r\n </div>\r\n </Fragment>\r\n )\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n logoutUser: UserActions.logoutUser\r\n}\r\n\r\nexport default connect(null, mapDispatchToProps)(Sidebar)\r\n","// ** React Imports\r\nimport {useState, useEffect} from 'react'\r\nimport {useLocation} from 'react-router-dom'\r\n\r\n// ** Store & Actions\r\nimport {connect} from 'react-redux'\r\nimport {handleMenuCollapsed} from '@store/actions/layout'\r\n\r\n// ** Third Party Components\r\nimport classnames from 'classnames'\r\nimport {Navbar} from 'reactstrap'\r\n\r\n// ** Custom Components\r\nimport NavbarComponent from './components/navbar'\r\nimport SidebarComponent from './components/menu/vertical-menu'\r\n\r\n// ** Styles\r\nimport '@styles/base/core/menu/menu-types/vertical-menu.scss'\r\nimport '@styles/base/core/menu/menu-types/vertical-overlay-menu.scss'\r\n\r\nconst VerticalLayout = props => {\r\n // ** Props\r\n const {children, navbar, menu, routerProps, currentActiveItem, handleMenuCollapsed, menuHidden, menuCollapsed} = props\r\n\r\n // ** States\r\n const [isMounted, setIsMounted] = useState(false)\r\n const [menuVisibility, setMenuVisibility] = useState(false)\r\n const [windowWidth, setWindowWidth] = useState(window.innerWidth)\r\n\r\n // ** Update Window Width\r\n const handleWindowWidth = () => {\r\n setWindowWidth(window.innerWidth)\r\n }\r\n\r\n // ** Vars\r\n const location = useLocation()\r\n // const menuCollapsed = menuCollapsed\r\n const isHidden = false\r\n\r\n // ** Toggles Menu Collapsed\r\n const setMenuCollapsed = val => handleMenuCollapsed(val)\r\n\r\n //** This function will detect the Route Change and will hide the menu on menu item click\r\n useEffect(() => {\r\n if (menuVisibility && windowWidth < 1200) {\r\n setMenuVisibility(false)\r\n }\r\n }, [location])\r\n\r\n //** Sets Window Size & Layout Props\r\n useEffect(() => {\r\n if (window !== undefined) {\r\n window.addEventListener('resize', handleWindowWidth)\r\n }\r\n }, [windowWidth])\r\n\r\n //** ComponentDidMount\r\n useEffect(() => {\r\n setIsMounted(true)\r\n return () => setIsMounted(false)\r\n }, [])\r\n\r\n if (!isMounted) {\r\n return null\r\n }\r\n return (\r\n <div\r\n className={classnames(\r\n `wrapper vertical-layout navbar-sticky`,\r\n {\r\n // Modern Menu\r\n 'vertical-menu-modern': windowWidth >= 1200,\r\n 'menu-collapsed': menuCollapsed && windowWidth >= 1200,\r\n 'menu-expanded': !menuCollapsed && windowWidth > 1200,\r\n\r\n // Overlay Menu\r\n 'vertical-overlay-menu': windowWidth < 1200,\r\n 'menu-hide': !menuVisibility && windowWidth < 1200,\r\n 'menu-open': menuVisibility && windowWidth < 1200\r\n }\r\n )}\r\n {...(isHidden ? {'data-col': '1-column'} : {})}\r\n >\r\n {!isHidden ? (\r\n <SidebarComponent\r\n menu={menu}\r\n menuCollapsed={menuCollapsed}\r\n menuVisibility={menuVisibility}\r\n setMenuCollapsed={setMenuCollapsed}\r\n setMenuVisibility={setMenuVisibility}\r\n routerProps={routerProps}\r\n currentActiveItem={currentActiveItem}\r\n />\r\n ) : null}\r\n\r\n <Navbar\r\n expand='lg'\r\n light={true}\r\n className={classnames(\r\n `header-navbar show-sm align-items-center d-xl-none navbar-shadow`\r\n )}\r\n >\r\n <div className='navbar-container d-flex content'>\r\n {navbar ? (\r\n navbar({setMenuVisibility})\r\n ) : (\r\n <NavbarComponent setMenuVisibility={setMenuVisibility}/>\r\n )}\r\n </div>\r\n </Navbar>\r\n {children}\r\n\r\n {/* Vertical Nav Menu Overlay */}\r\n <div\r\n className={classnames('sidenav-overlay', {\r\n show: menuVisibility\r\n })}\r\n onClick={() => setMenuVisibility(false)}\r\n ></div>\r\n {/* Vertical Nav Menu Overlay */}\r\n </div>\r\n )\r\n}\r\n\r\nconst mapStateToProps = ({layout}) => ({\r\n menuHidden: layout.menuHidden,\r\n menuCollapsed: layout.menuCollapsed\r\n})\r\n\r\nconst mapDispatchToProps = ({\r\n handleMenuCollapsed\r\n})\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(VerticalLayout)\r\n","// ** React Imports\nimport { Suspense, useContext, lazy, useEffect } from 'react'\n\n// ** Utils\nimport { isUserLoggedIn, clearCookies } from '@utils/Utils'\nimport { useLayout } from '@hooks/useLayout'\nimport { AbilityContext } from '@src/utils/context/Can'\nimport { useRouterTransition } from '@hooks/useRouterTransition'\n\n// ** Custom Components\n// import Spinner from '@components/spinner/Loading-spinner' // Uncomment if your require content fallback\nimport LayoutWrapper from '@layouts/components/layout-wrapper'\n\n// ** Router Components\nimport { BrowserRouter as AppRouter, Route, Switch, Redirect } from 'react-router-dom'\n\n// ** Routes & Default Routes\nimport { DefaultRoute, Routes } from './routes'\n\n// ** Layouts\nimport BlankLayout from '@layouts/BlankLayout'\nimport VerticalLayout from '@src/layouts/VerticalLayout'\nimport { storage } from '../utils'\n\nconst Router = () => {\n // ** Hooks\n const [layout, setLayout] = useLayout()\n const [transition, setTransition] = useRouterTransition()\n\n // ** ACL Ability Context\n const ability = useContext(AbilityContext)\n\n // ** Default Layout\n const DefaultLayout = 'VerticalLayout'\n\n // ** All of the available layouts\n const Layouts = { BlankLayout, VerticalLayout }\n\n // ** Current Active Item\n const currentActiveItem = null\n\n // ** Return Filtered Array of Routes & Paths\n const LayoutRoutesAndPaths = layout => {\n const LayoutRoutes = []\n const LayoutPaths = []\n\n if (Routes) {\n Routes.filter(route => {\n // ** Checks if Route layout or Default layout matches current layout\n if (route.layout === layout || (route.layout === undefined && DefaultLayout === layout)) {\n LayoutRoutes.push(route)\n LayoutPaths.push(route.path)\n }\n })\n }\n\n return { LayoutRoutes, LayoutPaths }\n }\n\n const NotAuthorized = lazy(() => import('@src/pages/Security/NotAuthorized'))\n\n // ** Init Error Component\n const Error = lazy(() => import('@src/pages/Security/Error'))\n\n /**\n ** Final Route Component Checks for Login & User Role and then redirects to the route\n */\n const FinalRoute = props => {\n const route = props.route\n let action, resource\n\n // ** Assign vars based on route meta\n if (route.meta) {\n action = route.meta.action ? route.meta.action : null\n resource = route.meta.resource ? route.meta.resource : null\n }\n if (\n (isUserLoggedIn() === null && route.meta === undefined) ||\n (isUserLoggedIn() === null && route.meta && !route.meta.authRoute && !route.meta.publicRoute)\n ) {\n /**\n ** If user is not Logged in & route meta is undefined\n ** OR\n ** If user is not Logged in & route.meta.authRoute, !route.meta.publicRoute are undefined\n ** Then redirect user to login\n */\n return <Redirect to='/login' />\n } else if (location.pathname === '/login-hash') {\n return <route.component {...props} />\n } else if ((!storage.get('mozrestApp:userData'))\n && location.pathname !== '/login'\n && location.pathname !== '/login-hash'\n && location.pathname !== '/forgot-password'\n && location.pathname !== '/reset-password'\n && location.pathname !== '/auth/facebook/callback/success'\n && location.pathname !== '/auth/facebook/callback'\n && location.pathname !== '/error'\n ) {\n clearCookies()\n return <Redirect to='/login' />\n } else if (route.meta && route.meta.authRoute && isUserLoggedIn() && location.pathname !== '/login-hash') {\n // ** If route has meta and authRole and user is Logged in then redirect user to home page (DefaultRoute)\n return <Redirect to='/' />\n } else if (isUserLoggedIn() && !ability.can(action || 'read', resource)) {\n // ** If user is Logged in and doesn't have ability to visit the page redirect the user to Not Authorized\n return <Redirect to='/misc/not-authorized' />\n } else {\n // ** If none of the above render component\n return <route.component {...props} />\n }\n }\n\n // ** Return Route to Render\n const ResolveRoutes = () => {\n return Object.keys(Layouts).map((layout, index) => {\n // ** Convert Layout parameter to Layout Component\n // ? Note: make sure to keep layout and component name equal\n\n const LayoutTag = Layouts[layout]\n\n // ** Get Routes and Paths of the Layout\n const { LayoutRoutes, LayoutPaths } = LayoutRoutesAndPaths(layout)\n // ** We have freedom to display different layout for different route\n // ** We have made LayoutTag dynamic based on layout, we can also replace it with the only layout component,\n // ** that we want to implement like VerticalLayout\n // ** We segregated all the routes based on the layouts and Resolved all those routes inside layouts\n\n // ** RouterProps to pass them to Layouts\n const routerProps = {}\n\n return (\n <Route path={LayoutPaths} key={index}>\n <LayoutTag\n routerProps={routerProps}\n layout={layout}\n setLayout={setLayout}\n transition={transition}\n setTransition={setTransition}\n currentActiveItem={currentActiveItem}\n >\n <Switch>\n {LayoutRoutes.map(route => {\n return (\n <Route\n key={route.path}\n path={route.path}\n exact={route.exact === true}\n render={props => {\n // ** Assign props to routerProps\n Object.assign(routerProps, {\n ...props,\n meta: route.meta\n })\n\n return (\n <Suspense fallback={null}>\n {/* Layout Wrapper to add classes based on route's layout, appLayout and className */}\n <LayoutWrapper\n layout={DefaultLayout}\n transition={transition}\n setTransition={setTransition}\n /* Conditional props */\n /*eslint-disable */\n {...(route.appLayout\n ? {\n appLayout: route.appLayout\n }\n : {})}\n {...(route.meta\n ? {\n routeMeta: route.meta\n }\n : {})}\n {...(route.className\n ? {\n wrapperClass: route.className\n }\n : {})}\n /*eslint-enable */\n >\n {/* <route.component {...props} /> */}\n <FinalRoute route={route} {...props} />\n </LayoutWrapper>\n </Suspense>\n )\n }}\n />\n )\n })}\n </Switch>\n </LayoutTag>\n </Route>\n )\n })\n }\n\n return (\n <AppRouter basename={process.env.REACT_APP_BASENAME}>\n <Switch>\n {/* If user is logged in Redirect user to DefaultRoute else to login */}\n {/* <Route\n exact\n path='/'\n render={() => {\n return isUserLoggedIn() ? <Redirect to={DefaultRoute} /> : <Redirect to='/login' />\n }}\n /> */}\n <Route\n exact\n path='/'\n render={() => {\n return <Redirect to={DefaultRoute} />\n }}\n />\n {/* Not Auth Route */}\n <Route\n exact\n path='/not-authorized'\n render={props => (\n <Layouts.BlankLayout>\n <NotAuthorized />\n </Layouts.BlankLayout>\n )}\n />\n {ResolveRoutes()}\n {/* NotFound Error page */}\n <Route path='*' component={Error} />/\n </Switch>\n </AppRouter>\n )\n}\n\nexport default Router\n","//** React Imports\nimport { useState, useEffect } from 'react'\n\n// ** Configs\nimport themeConfig from '@configs/themeConfig'\n\nexport const useLayout = () => {\n // ** States\n const [lastLayout, setLastLayout] = useState(null)\n const [layout, setLayout] = useState(() => {\n try {\n return themeConfig.layout.type\n } catch (error) {\n // ** If error return initialValue\n console.log(error)\n return themeConfig.layout.type\n }\n })\n\n // ** Return a wrapped version of useState's setter function\n const setValue = value => {\n try {\n // ** Allow value to be a function so we have same API as useState\n const valueToStore = value instanceof Function ? value(layout) : value\n\n // ** Set state\n setLayout(valueToStore)\n } catch (error) {\n // ** A more advanced implementation would handle the error case\n console.log(error)\n }\n }\n\n const handleLayout = () => {\n // ** If layout is horizontal & screen size is equals to or below 1200\n if (layout === 'horizontal' && window.innerWidth <= 1200) {\n setLayout('vertical')\n setLastLayout('horizontal')\n }\n // ** If lastLayout is horizontal & screen size is equals to or above 1200\n if (lastLayout === 'horizontal' && window.innerWidth >= 1200) {\n setLayout('horizontal')\n }\n }\n\n // ** ComponentDidMount\n useEffect(() => {\n handleLayout()\n }, [])\n\n useEffect(() => {\n // ** Window Resize Event\n window.addEventListener('resize', handleLayout)\n }, [layout, lastLayout])\n\n return [layout, setValue]\n}\n","//** React Imports\r\nimport { useState } from 'react'\r\n\r\n// ** Configs\r\nimport themeConfig from '@configs/themeConfig'\r\n\r\nexport const useRouterTransition = () => {\r\n // ** State\r\n const [transition, setTransition] = useState(() => {\r\n try {\r\n return themeConfig.layout.routerTransition\r\n } catch (error) {\r\n // ** If error return initialValue\r\n console.log(error)\r\n return themeConfig.layout.routerTransition\r\n }\r\n })\r\n\r\n // ** Return a wrapped version of useState's setter function\r\n const setValue = value => {\r\n try {\r\n // ** Allow value to be a function so we have same API as useState\r\n const valueToStore = value instanceof Function ? value(transition) : value\r\n\r\n // ** Set state\r\n setTransition(valueToStore)\r\n } catch (error) {\r\n // ** A more advanced implementation would handle the error case\r\n console.log(error)\r\n }\r\n }\r\n\r\n return [transition, setValue]\r\n}\r\n","import {useEffect} from \"react\"\n// ** Router Import\nimport Router from './router/Router'\n\nconst App = props => {\n\n useEffect(() => {\n if (process.env.REACT_APP_ENV === 'prod') {\n import('mozrest-sdk-react-prod/style.css')\n } else if (process.env.REACT_APP_ENV === 'sandbox') {\n import('mozrest-sdk-react-sandbox/style.css')\n } else {\n import('mozrest-sdk-react-dev/style.css')\n }\n }, [])\n\n return (\n <Router />\n )\n}\n\nexport default App\n","import React from 'react'\nimport { FormattedMessage, injectIntl } from 'react-intl'\n\nconst InjectMassage = (props) => <FormattedMessage {...props} />\nexport default injectIntl(InjectMassage, { withRef: false })\n","import { Fragment } from 'react'\nimport { Spinner } from 'reactstrap'\n\nconst SpinnerCentered = ({ size = \"md\", centered = true, style = {} }) => {\n return (\n <Fragment>\n <div className={centered ? 'd-flex justify-content-center align-end my-1' : ''}>\n <Spinner size={size} style={style} />\n </div>\n </Fragment>\n )\n}\n\nexport default SpinnerCentered","import React from 'react'\nimport PropTypes from 'prop-types'\nimport styled from 'styled-components'\n\nconst Wrapper = styled.div`\n position: absolute;\n top: 50%;\n left: 50%;\n width: 25px;\n height: 25px;\n background-color: #eb932d;\n border: 3px solid #fff;\n border-radius: 100%;\n user-select: none;\n transform: translate(-50%, -50%);\n cursor: ${(props) => (props.onClick ? 'pointer' : 'default')};\n &:hover {\n z-index: 1;\n }\n`\n\nconst Marker = ({ text, onClick }) => (\n <Wrapper\n alt={text}\n onClick={onClick}\n />\n)\n\nMarker.defaultProps = {\n onClick: null\n}\n\nMarker.propTypes = {\n onClick: PropTypes.func,\n text: PropTypes.string.isRequired\n}\n\nexport default Marker\n","import React, { Component } from 'react'\nimport GoogleMapReact from 'google-map-react'\n\nimport Marker from './components/Marker'\n\nconst AnyReactComponent = ({ text }) => <div>{text}</div>\n\nclass SimpleMap extends Component {\n static defaultProps = {\n center: {\n lat: 49.403492,\n lng: 2.777772\n },\n zoom: 16\n }\n\n render() {\n return (\n // Important! Always set the container height explicitly\n <div style={{ height: '300px', width: '100%', border: '1px solid #d6dce0' }}>\n <GoogleMapReact\n bootstrapURLKeys={{ key: process.env.REACT_APP_MAPS_API_KEY}}\n defaultCenter={{lat: this.props.lat, lng: this.props.lng}}\n defaultZoom={this.props.zoom}\n >\n <Marker\n key={1}\n text={this.props.venueName}\n lat={this.props.lat}\n lng={this.props.lng}\n />\n </GoogleMapReact>\n </div>\n )\n }\n}\n\nexport default SimpleMap\n","// ** Third Party Components\r\nimport { ChevronDown } from 'react-feather'\r\nimport DataTable from 'react-data-table-component'\r\nimport { Card, Input, Row, Col } from 'reactstrap'\r\nimport { useIntl } from 'react-intl'\r\nimport { SpinnerCentered } from \"@components\"\r\n\r\n// ** Styles\r\nimport '@styles/react/libs/tables/react-dataTable-component.scss'\r\n\r\n// ** Table Header\r\nconst CustomHeader = ({ searchTerm, setSearchTerm, buttonAction, extraFilters, isSearchable }) => {\r\n const intl = useIntl()\r\n\r\n return (\r\n <div className='invoice-list-table-header w-100 mr-1 ml-50 mt-2 mb-75'>\r\n <Row>\r\n <Col xl='4' md='4' className='d-flex align-items-start p-0'>\r\n {buttonAction}\r\n </Col>\r\n <Col\r\n xl='4' md='4'\r\n className='d-flex align-items-center\r\n flex-md-nowrap flex-wrap flex-sm-row flex-column pr-lg-1 p-0 mt-lg-0 mt-md-0 mt-1'\r\n >\r\n {isSearchable && (\r\n <Input\r\n id='search'\r\n className='ml-50'\r\n type='text'\r\n value={searchTerm}\r\n placeholder={intl.formatMessage({id: 'Search' })}\r\n onChange={e => setSearchTerm(e.target.value)}\r\n />\r\n )}\r\n </Col>\r\n <Col xl='4' md='4' className='d-flex align-items-start p-0'>\r\n {extraFilters}\r\n </Col>\r\n </Row>\r\n </div>\r\n )\r\n}\r\n\r\nconst Datatable = ({\r\n data, searchTerm, setSearchTerm, buttonAction, columns, selectableRows, setRowsPerPage,\r\n selectableRowsComponent, onSelectedRowsChange, setCurrentPage, isLoading, extraFilters, isSearchable = true\r\n}) => {\r\n\r\n const handlePagination = page => {\r\n setCurrentPage(page)\r\n }\r\n\r\n const handleRowsChange = (newPerPage) => {\r\n setRowsPerPage(newPerPage)\r\n }\r\n\r\n return (\r\n <Card>\r\n <DataTable\r\n noHeader\r\n subHeader\r\n responsive\r\n selectableRows={selectableRows}\r\n selectableRowsComponent={selectableRowsComponent}\r\n onSelectedRowsChange={onSelectedRowsChange}\r\n pagination\r\n paginationServer\r\n paginationTotalRows={data.total}\r\n onChangeRowsPerPage={handleRowsChange}\r\n onChangePage={handlePagination}\r\n columns={columns}\r\n sortIcon={<ChevronDown />}\r\n className='react-dataTable'\r\n data={data.data}\r\n progressPending={isLoading}\r\n progressComponent={<SpinnerCentered color=\"primary\" />}\r\n subHeaderComponent={\r\n <CustomHeader\r\n searchTerm={searchTerm}\r\n setSearchTerm={setSearchTerm}\r\n buttonAction={buttonAction}\r\n extraFilters={extraFilters}\r\n isSearchable={isSearchable}\r\n />\r\n }\r\n />\r\n </Card>\r\n )\r\n}\r\n\r\nexport default Datatable\r\n","import {Col, Row} from \"reactstrap\"\nimport Intl from \"../intl\"\n\nconst Header = ({title}) => {\n return (\n <Row className=\"margin-menu\">\n <Col lg='12'>\n <h2><Intl id={title}/></h2>\n </Col>\n </Row>\n )\n}\n\nexport default Header\n","const Styles = ({\n primary_color,\n secondary_color,\n links_color,\n navbar_bg,\n navbar_text_color,\n navbar_active_bg_color,\n navbar_active_text_color,\n navbar_hub_name_color\n}) => {\n return (\n <style global=\"true\" jsx=\"true\">{`\n \n :root {\n --primary_color: ${primary_color};\n --secondary_color: ${secondary_color};\n --header_tagllinks_colorine_color: ${links_color};\n --navbar_bg: ${navbar_bg};\n --navbar_text_color: ${navbar_text_color};\n --navbar_active_bg_color: ${navbar_active_bg_color};\n --navbar_active_text_color: ${navbar_active_text_color};\n --navbar_hub_name_color: ${navbar_hub_name_color};\n --moz-container-padding: 0;\n }\n .logout-button,\n .main-menu.menu-light .navigation,\n .main-menu.menu-light {\n background: var(--navbar_bg) !important;\n background-color: var(--navbar_bg) !important;\n }\n .main-menu.menu-light,\n .main-menu.menu-light .navigation li a{\n color: var(--navbar_text_color) !important;\n }\n .main-menu.menu-light .navigation > li.active > a {\n border-bottom: var(--primary_color) !important;\n background: var(--navbar_active_bg_color) !important;\n color: var(--navbar_active_text_color) !important;\n }\n .main-menu .navbar-header .navbar-brand .brand-text {\n color: var(--navbar_hub_name_color) !important;\n }\n .btn-primary {\n border-color: var(--primary_color) !important;\n background-color: var(--primary_color) !important;\n }\n .btn-primary:hover:not(.disabled):not(:disabled) {\n box-shadow: 0 8px 25px -8px var(--primary_color) !important;\n }\n .btn-primary:not(:disabled):not(.disabled):active, [dir] .btn-primary:not(:disabled):not(.disabled).active, [dir] .show > .btn-primary.dropdown-toggle {\n background-color: var(--primary_color) !important;\n border-color: var(--primary_color) !important;\n }\n .btn-primary:focus, .btn-primary:active, .btn-primary.active {\n background-color: var(--primary_color) !important;\n }\n .btn-outline-primary {\n border: 1px solid var(--primary_color) !important;\n background-color: transparent;\n }\n .btn-outline-primary {\n color: var(--primary_color) !important;\n }\n .main-menu.menu-light .navigation .navigation-header {\n color: var(--navbar_text_color) !important;\n }\n .noUi-connect {\n background: var(--primary_color) !important;\n }\n .noUi-handle {\n border: 2px solid var(--primary_color) !important;\n }\n .nav-tabs .nav-link:after {\n background: var(--primary_color) !important;\n }\n a,\n .dashboard-subtitle {\n color: var(--secondary_color) !important;\n }\n .text-primary {\n color: var(--primary_color) !important;\n }\n .text-secondary {\n color: var(--secondary_color) !important;\n }\n .page-item.active .page-link {\n background-color: var(--primary_color) !important;\n border-color: var(--primary_color) !important;\n }\n .pagination .page-link {\n color: var(--primary_color) !important;\n }\n .btn-primary, .btn-secondary {\n color: var(--navbar_active_text_color) !important;\n }\n `}</style>\n )\n}\nexport default Styles\n","import api from '@configs/Api/Api'\n\nconst baseEndpoint = '/rms'\n\nexport default {\n\n getConfig(hostname) {\n return api.get(`${baseEndpoint}/whitelabel/config`, { hostname })\n }\n}\n","//** React Imports\r\nimport { useState, useEffect } from \"react\"\r\nimport UiConfigService from '@services/UiConfig'\r\nimport { handlePromise, storage } from '@utils'\r\n\r\nexport const useUIConfig = (requestConfig) => {\r\n const [error, setError] = useState()\r\n const [isLoading, setIsLoading] = useState(false)\r\n const [data, setData] = useState({})\r\n\r\n const getUiConfig = (data) => {\r\n const config = data || []\r\n const UiStyles = {\r\n logo: config.logo || \"https://mozrest-statics.s3.eu-west-1.amazonaws.com/logos/logo.svg\",\r\n favicon: config.favicon || \"https://mozrest-statics.s3.eu-west-1.amazonaws.com/logos/favicon.ico\",\r\n primary_color: config.primaryColor || \"#1f155a\",\r\n secondary_color: config.secondaryColor || \"#f3be2f\",\r\n links_color: config.linksColor || \"#ff9b00\",\r\n hub_name: config.hubName || \"Channel Hub\",\r\n navbar_logo: config.navbarLogo || \"https://mozrest-statics.s3.eu-west-1.amazonaws.com/logos/logo.png\",\r\n navbar_bg: config.navbarBgLogo || \"#1f155a\",\r\n navbar_text_color: config.navbarTextColor || \"#fff\",\r\n navbar_active_bg_color: config.navbarActiveBgColor || \"#68628e\",\r\n navbar_active_text_color: config.navbarActiveTextColor || \"#FFFFFF\",\r\n navbar_hub_name_color: config.navbarHubNameColor || \"#FFFFFF\",\r\n copyright: config.copyright || \"<a href='https://mozrest.com' target='_blank' rel='noopener noreferrer'>Mozrest Ltd</a>. All Rights Reserved.\"\r\n }\r\n return UiStyles\r\n }\r\n\r\n const getConfigFromStorage = () => {\r\n const uiConfig = JSON.parse(storage.get('mozrest-hub:uiConfig'))\r\n return uiConfig && uiConfig.hostname === window.location.hostname ? uiConfig.config : []\r\n }\r\n\r\n useEffect(() => {\r\n const mozrestHub = process.env.REACT_APP_HOST\r\n\r\n async function loadConfig() {\r\n //Check the url to know if needs whitelabel config\r\n if (mozrestHub !== window.location.hostname) {\r\n //Check to know if we must request data or get it from local storage\r\n if (requestConfig !== undefined && requestConfig === true) {\r\n //With the code, check if we have already the config on the localstorage\r\n try {\r\n setIsLoading(true)\r\n const { data } = await UiConfigService.getConfig(window.location.hostname)\r\n setData(data)\r\n storage.set('mozrest-hub:uiConfig', JSON.stringify({ hostname: window.location.hostname, config: data}))\r\n setIsLoading(false)\r\n } catch (error) {\r\n setError(error)\r\n setIsLoading(false)\r\n }\r\n } else {\r\n setData(getConfigFromStorage())\r\n }\r\n }\r\n }\r\n loadConfig()\r\n\r\n }, [setData, requestConfig])\r\n\r\n return {isLoading, error, uiConfig: getUiConfig(data) }\r\n}\r\n\r\nexport default useUIConfig\r\n"],"sourceRoot":""}