{"version":3,"sources":["utility/context/ThemeColors.js","auth/utils.js","utility/Utils.js","redux/layout.js","router/routes/index.js","views/components/FallbackSpinner.js","redux/apps.js","auth/jwt/jwtDefaultConfig.js","auth/jwt/jwtWetuService.js","auth/jwt/jwtWetuConfig.js","auth/jwt/useJwt.js","redux/authentication.js","assets/images/logo/wetu.svg","configs/themeConfig.js","redux/navbar.js","redux/rootReducer.js","redux/store.js","@core/components/ripple-button/index.js","serviceWorker.js","index.js"],"names":["ThemeColors","createContext","ThemeContext","children","useState","colors","setColors","useEffect","window","getHex","color","getComputedStyle","document","body","getPropertyValue","trim","obj","primary","light","concat","main","secondary","success","danger","warning","info","dark","Provider","value","isUserLoggedIn","Cookies","get","process","getUserData","cookie","jwt_decode","canViewMenuGroup","item","ability","hasAnyVisibleChild","some","i","can","action","resource","canViewMenuItem","createUserAbilities","userData","userpilot","identify","UserId","accountPlan","AccountPlan","Object","keys","length","accountOptions","JSON","parse","AccountOptions","AbilityBuilder","Ability","build","cannot","IsWetu","UserRole","DigitalItinerary","includes","AccountType","VirtualItineraries","IsIntegrationClient","DayTours","Analytics","SpecialsManager","ConsultantPortal","selectThemeColors","theme","primary25","neutral10","neutral20","neutral30","formatCamelCaseLabel","label","replace","layoutSlice","createSlice","name","initialState","skin","themeConfig","layout","isRTL","type","lastLayout","footerType","footer","navbarType","navbar","menuHidden","menu","isHidden","contentWidth","menuCollapsed","isCollapsed","routerTransition","navbarColor","backgroundColor","reducers","handleRTL","state","payload","localStorage","setItem","stringify","handleSkin","handleLayout","handleFooterType","handleNavbarType","handleMenuHidden","handleLastLayout","handleNavbarColor","handleContentWidth","handleMenuCollapsed","handleRouterTransition","actions","DefaultRoute","queryParams","URLSearchParams","location","search","Routes","path","component","lazy","iframeConfigs","id","src","baseUrl","AccountId","getAccountPathSrc","FallbackSpinner","className","style","borderLeft","appsSlice","apps","map","app","isLoaded","initialDashboard","handleApps","loginEndpoint","registerEndpoint","refreshEndpoint","logoutEndpoint","tokenType","storageTokenKeyName","storageRefreshTokenKeyName","JwtService","jwtOverrideConfig","jwtConfig","jwtDefaultConfig","isAlreadyFetchingAccessToken","subscribers","this","axios","interceptors","request","use","config","error","Promise","reject","response","a","originalRequest","status","_retry","refreshToken","accessToken","data","jwt","onAccessTokenFetched","url","remove","useJwt","identifierTokenCookieName","domain","top","href","filter","callback","push","args","post","refreshTokenId","isAccessTokenCookiePersistant","isRefreshTokenCookiePersistant","withCredentials","jwtWetuConfig","authSlice","initialUser","abilities","handleLogin","handleLogout","removeItem","handleUserData","updateAbilities","appName","appLogoImage","require","default","customizer","scrollTop","getBookmarks","createAsyncThunk","suggestions","bookmarks","updateBookmarked","query","handleSearchQuery","extraReducers","builder","addCase","fulfilled","objectToUpdate","find","isBookmarked","bookmarkIndex","findIndex","x","splice","rootReducer","auth","store","configureStore","reducer","middleware","getDefaultMiddleware","serializableCheck","Button","Ripple","onClick","rest","mounted","setMounted","isRippling","setIsRippling","y","coords","setCoords","setTimeout","classnames","e","rect","target","getBoundingClientRect","clientX","left","clientY","Boolean","hostname","match","LazyApp","ReactDOM","render","fallback","newestOnTop","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"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","file":"static/js/main.d8f7b7d2.chunk.js","sourcesContent":["// ** React Imports\nimport { useEffect, useState, createContext } from 'react'\n\n// ** Create Context\nconst ThemeColors = createContext()\n\nconst ThemeContext = ({ children }) => {\n // ** State\n const [colors, setColors] = useState({})\n\n //** ComponentDidMount\n useEffect(() => {\n if (window !== 'undefined') {\n //** Get variable value\n const getHex = color => window.getComputedStyle(document.body).getPropertyValue(color).trim()\n\n //** Colors obj\n const obj = {\n primary: {\n light: getHex('--bs-primary').concat('1a'),\n main: getHex('--bs-primary')\n },\n secondary: {\n light: getHex('--bs-secondary').concat('1a'),\n main: getHex('--bs-secondary')\n },\n success: {\n light: getHex('--bs-success').concat('1a'),\n main: getHex('--bs-success')\n },\n danger: {\n light: getHex('--bs-danger').concat('1a'),\n main: getHex('--bs-danger')\n },\n warning: {\n light: getHex('--bs-warning').concat('1a'),\n main: getHex('--bs-warning')\n },\n info: {\n light: getHex('--bs-info').concat('1a'),\n main: getHex('--bs-info')\n },\n dark: {\n light: getHex('--bs-dark').concat('1a'),\n main: getHex('--bs-dark')\n }\n }\n\n setColors({ ...obj })\n }\n }, [])\n\n return {children}\n}\n\nexport { ThemeColors, ThemeContext }\n","import Cookies from 'js-cookie'\nimport jwt_decode from \"jwt-decode\"\nimport { Ability, AbilityBuilder } from '@casl/ability'\n\nexport const isUserLoggedIn = () => {\n return !!Cookies.get(`wetu_id_token_${process.env.REACT_APP_ENV}`)\n}\n\nexport const getUserData = () => {\n const cookie = Cookies.get(`wetu_id_token_${process.env.REACT_APP_ENV}`)\n\n if (cookie) {\n return jwt_decode(cookie)\n }\n\n return {}\n}\n\n/**\n * This function is used for demo purpose route navigation\n * In real app you won't need this function because your app will navigate to same route for each users regardless of ability\n * Please note role field is just for showing purpose it's not used by anything in frontend\n * We are checking role just for ease\n * NOTE: If you have different pages to navigate based on user ability then this function can be useful. However, you need to update it.\n * @param {String} userRole Role of user\n */\nexport const getHomeRouteForLoggedInUser = userRole => {\n if (userRole === 'admin') return '/'\n if (userRole === 'client') return { name: 'access-control' }\n return { name: 'auth-login' }\n}\n\n\nexport const canViewMenuGroup = (item, ability) => {\n const hasAnyVisibleChild = item.children && item.children.some(i => ability.can(i.action, i.resource))\n if (!(item.action && item.resource)) {\n return hasAnyVisibleChild\n }\n\n return ability.can(item.action, item.resource) && hasAnyVisibleChild\n}\n\nexport const canViewMenuItem = (item, ability) => {\n return ability.can(item.action, item.resource)\n}\n\nexport const createUserAbilities = () => {\n const userData = getUserData()\n\n userpilot.identify(userData.UserId, {\n accountPlan: userData.AccountPlan\n })\n\n if (typeof userData === 'object' && Object.keys(userData).length === 0) {\n return\n }\n\n const accountOptions = JSON.parse(userData?.AccountOptions)\n const { can, build, cannot } = new AbilityBuilder(Ability)\n\n //Wetu Superusers\n if (userData.IsWetu && userData.UserRole === \"Admin\") {\n can(\"manage\", \"all\")\n\n //this are only for clients and unncessary for Wetu users\n cannot(\"read\", \"account\")\n\n if (process.env.REACT_APP_ENV !== \"dev\") {\n cannot(\"read\", \"contacts\")\n }\n\n return build()\n } else {\n // All users\n can(\"read\", [\"user\", \"dashboard\", \"personal-details\", \"status-page\", \"logout\", \"profiles\", \"specials-portal\", \"ibrochure-search\"])\n\n if (userData.UserRole === \"Admin\") {\n can(\"read\", [\"account\"])\n\n if (accountOptions.DigitalItinerary === \"True\") {\n can(\"read\", [\"themes\"])\n }\n }\n\n //Option based\n const allowedAccountTypes = [\"Operator\", \"DMO\", \"Product\", \"Marketer\", \"Micro Operator\", \"TravelAgent\"]\n\n if (allowedAccountTypes.includes(userData.AccountType)) {\n\n const { DigitalItinerary, VirtualItineraries, IsIntegrationClient, DayTours, Analytics, SpecialsManager, ConsultantPortal } = accountOptions\n\n if (process.env.REACT_APP_ENV === \"dev\" && userData.AccountType === \"Operator\") {\n can(\"read\", \"contacts\")\n }\n\n if ((userData.AccountType !== \"DMO\" && userData.AccountType !== \"Product\" && userData.AccountType !== \"Marketer\" && userData.AccountPlan !== \"Day Tour\") && (DigitalItinerary === \"True\" || VirtualItineraries === \"True\")) {\n can(\"read\", \"calendar\")\n }\n\n if (userData.AccountPlan === \"Day Tour\") {\n can(\"read\", [\"components\", \"daytours\", \"multidaytours\"])\n }\n\n if ([\"Trial\", \"Virtual Enterprise\", \"Digital Enterprise\", \"Day Tour\", \"Marketer\", \"TravelAgent\"].includes(userData.AccountPlan) || (userData.AccountType === \"Product\" && userData.AccountPlan === \"Gold\")) {\n can(\"read\", \"catalogue-manager\")\n }\n\n if ((DigitalItinerary === \"True\" || VirtualItineraries === \"True\") \n && ([\"Trial\", \"Free\", \"Virtual Lite\", \"Virtual Enterprise\", \"Digital Lite\", \"Digital Enterprise\"].includes(userData.AccountPlan) \n || (userData.AccountType === \"Product\" && userData.AccountPlan === \"Gold\") \n || userData.AccountType === \"DMO\" || userData.AccountType === \"Marketer\" || userData.AccountType === \"Product\")) { \n can(\"read\", [\"itineraries\", \"components\"])\n }\n\n if (IsIntegrationClient === \"True\" && ![\"Trial\", \"Virtual Enterprise\", \"Digital Lite\"].includes(userData.AccountPlan) && userData.AccountType !== \"DMO\") {\n can(\"read\", [\"connect\", \"connect-bookings\"])\n }\n\n if ((DayTours === \"Public\" || DayTours === \"Enabled\")) {\n can(\"read\", [\"published-daytours\", \"daytours\", \"published-multidaytours\", \"multidaytours\"])\n }\n\n if (DayTours === \"Enabled\" && (DigitalItinerary === \"True\" || VirtualItineraries === \"True\") && userData.AccountPlan !== \"Digital Lite\") {\n can(\"read\", [\"daytours\", \"multidaytours\"])\n }\n\n if (Analytics === \"True\" && userData.AccountType !== \"Micro Operator\") {\n can(\"read\", \"analytics\")\n }\n\n if (SpecialsManager === \"True\") {\n can(\"read\", \"specials-manager\")\n }\n\n if (ConsultantPortal === \"True\" && ([\"Operator\", \"TravelAgent\"].includes(userData.AccountType) || userData.AccountPlan === \"Day Tour\")) {\n can(\"read\", \"consultant-portal\")\n }\n }\n\n return build()\n }\n}\n","// ** Checks if an object is empty (returns boolean)\nexport const isObjEmpty = obj => Object.keys(obj).length === 0\n\n// ** Returns K format from a number\nexport const kFormatter = num => (num > 999 ? `${(num / 1000).toFixed(1)}k` : num)\n\n// ** Converts HTML to string\nexport const htmlToString = html => html.replace(/<\\/?[^>]+(>|$)/g, '')\n\n// ** Checks if the passed date is today\nconst isToday = date => {\n const today = new Date()\n return (\n /* eslint-disable operator-linebreak */\n date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear()\n /* eslint-enable */\n )\n}\n\n/**\n ** Format and return date in Humanize format\n ** Intl docs: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format\n ** Intl Constructor: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat\n * @param {String} value date to format\n * @param {Object} formatting Intl object to format with\n */\nexport const formatDate = (value, formatting = { month: 'short', day: 'numeric', year: 'numeric' }) => {\n if (!value) return value\n return new Intl.DateTimeFormat('en-US', formatting).format(new Date(value))\n}\n\n// ** Returns short month of passed date\nexport const formatDateToMonthShort = (value, toTimeForCurrentDay = true) => {\n const date = new Date(value)\n let formatting = { month: 'short', day: 'numeric' }\n\n if (toTimeForCurrentDay && isToday(date)) {\n formatting = { hour: 'numeric', minute: 'numeric' }\n }\n\n return new Intl.DateTimeFormat('en-US', formatting).format(new Date(value))\n}\n\n/**\n ** Return if user is logged in\n ** This is completely up to you and how you want to store the token in your frontend application\n * ? e.g. If you are using cookies to store the application please update this function\n */\nexport const isUserLoggedIn = () => localStorage.getItem('userData')\nexport const getUserData = () => JSON.parse(localStorage.getItem('userData'))\n\n/**\n ** This function is used for demo purpose route navigation\n ** In real app you won't need this function because your app will navigate to same route for each users regardless of ability\n ** Please note role field is just for showing purpose it's not used by anything in frontend\n ** We are checking role just for ease\n * ? NOTE: If you have different pages to navigate based on user ability then this function can be useful. However, you need to update it.\n * @param {String} userRole Role of user\n */\nexport const getHomeRouteForLoggedInUser = userRole => {\n if (userRole === 'admin') return '/'\n if (userRole === 'client') return '/access-control'\n return '/login'\n}\n\n// ** React Select Theme Colors\nexport const selectThemeColors = theme => ({\n ...theme,\n colors: {\n ...theme.colors,\n primary25: '#7367f01a', // for option hover bg-color\n primary: '#6cb741', // for selected option bg-color\n neutral10: '#7367f0', // for tags bg-color\n neutral20: '#ededed', // for input border-color\n neutral30: '#ededed' // for input hover border-color\n }\n})\n\nexport const formatCamelCaseLabel = (label) => {\n return label.replace(/([a-z])([A-Z])/g, '$1 $2')\n}","// ** Redux Imports\nimport { createSlice } from '@reduxjs/toolkit'\n\n// ** ThemeConfig Import\nimport themeConfig from '@configs/themeConfig'\n\nexport const layoutSlice = createSlice({\n name: 'layout',\n initialState: {\n skin: themeConfig.layout.skin,\n isRTL: themeConfig.layout.isRTL,\n layout: themeConfig.layout.type,\n lastLayout: themeConfig.layout.type,\n footerType: themeConfig.layout.footer.type,\n navbarType: themeConfig.layout.navbar.type,\n menuHidden: themeConfig.layout.menu.isHidden,\n contentWidth: themeConfig.layout.contentWidth,\n menuCollapsed: themeConfig.layout.menu.isCollapsed,\n routerTransition: themeConfig.layout.routerTransition,\n navbarColor: themeConfig.layout.navbar.backgroundColor\n },\n reducers: {\n handleRTL: (state, action) => {\n state.isRTL = action.payload\n window.localStorage.setItem('direction', JSON.stringify(action.payload))\n },\n handleSkin: (state, action) => {\n state.skin = action.payload\n window.localStorage.setItem('skin', JSON.stringify(action.payload))\n },\n handleLayout: (state, action) => {\n state.layout = action.payload\n },\n handleFooterType: (state, action) => {\n state.footerType = action.payload\n },\n handleNavbarType: (state, action) => {\n state.navbarType = action.payload\n },\n handleMenuHidden: (state, action) => {\n state.menuHidden = action.payload\n },\n handleLastLayout: (state, action) => {\n state.lastLayout = action.payload\n },\n handleNavbarColor: (state, action) => {\n state.navbarColor = action.payload\n },\n handleContentWidth: (state, action) => {\n state.contentWidth = action.payload\n },\n handleMenuCollapsed: (state, action) => {\n state.menuCollapsed = action.payload\n window.localStorage.setItem('menuCollapsed', JSON.stringify(action.payload))\n },\n handleRouterTransition: (state, action) => {\n state.routerTransition = action.payload\n }\n }\n})\n\nexport const {\n handleRTL,\n handleSkin,\n handleLayout,\n handleLastLayout,\n handleMenuHidden,\n handleNavbarType,\n handleFooterType,\n handleNavbarColor,\n handleContentWidth,\n handleMenuCollapsed,\n handleRouterTransition\n} = layoutSlice.actions\n\nexport default layoutSlice.reducer\n","//import { lazy } from 'react'\nimport { lazy } from 'react'\nimport { getUserData } from '../../auth/utils'\n\n// ** Document title\nconst TemplateTitle = 'Wetu'\n\n// ** Default Route\nconst DefaultRoute = '/Dashboard'\n\nconst userData = getUserData()\n\nconst queryParams = new URLSearchParams(window.location.search)\n\nconst getAccountPathSrc = () => {\n const baseUrl = `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Operators/Edit/${userData?.AccountId}`\n const tab = queryParams.get('tab')\n\n switch (tab) {\n case 'companydetails':\n return `${baseUrl}?tab=identity#operator`\n case 'identities':\n return `${baseUrl}?tab=identity#identities`\n default:\n return baseUrl\n }\n}\n\n// ** Merge Routes\nconst Routes = [\n {\n path: '/*',\n component: lazy(() => import('@src/views/pages/IFramedContent')),\n iframeConfigs: [\n {\n id: 'contacts',\n path: '/Contacts',\n src: `https://${process.env.REACT_APP_CRM_DOMAIN}/#/contacts/index?return_module=Contacts&return_action=DetailView`\n },\n {\n id: 'profiles',\n path: '/Profiles',\n src: `${process.env.REACT_APP_PROFILE_UI_URL}/home`\n },\n {\n id: 'specials-manager',\n path: '/SpecialsManager',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Specials`\n },\n {\n id: 'specials-portal',\n path: '/Specials/Search',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Specials/Search`\n },\n {\n id: 'itinerary-builder',\n path: '/ItineraryBuilder',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Builder`\n },\n {\n id: 'itinerary-builder-personal',\n path: '/ItineraryBuilder/Personal',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Builder/Browse/Personal`\n },\n {\n id: 'itinerary-builder-sample',\n path: '/ItineraryBuilder/Sample',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Builder/Browse/Sample`\n },\n {\n id: 'itinerary-builder-day-component',\n path: '/ItineraryBuilder/DayComponent',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Builder/Browse/DayComponent`\n },\n {\n id: 'itinerary-builder-multiday-component',\n path: '/ItineraryBuilder/MultiDayComponent',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Builder/Browse/Component`\n },\n {\n id: 'itinerary-builder-daytours',\n path: '/ItineraryBuilder/DayTours',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Builder/Browse/DayTour`\n },\n {\n id: 'itinerary-builder-multidaytours',\n path: '/ItineraryBuilder/MultiDayTours',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Builder/Browse/MultiDayTours`\n },\n {\n id: 'itinerary-builder-pubdaytours',\n path: '/ItineraryBuilder/PublishedDayTours',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Builder/Browse/PublishedDayTours`\n },\n {\n id: 'itinerary-builder-pubmultidaytours',\n path: '/ItineraryBuilder/PublishedMultiDayTours',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Builder/Browse/PublishedMultiDayTours`\n },\n {\n id: 'calendar',\n path: '/Calendar',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Calendar`\n },\n {\n id: 'analytics',\n path: '/Analytics',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Home/AnalyticsContent`\n },\n {\n id: 'catalogue-manager',\n path: '/Catalogue',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Rack/Build/Catalogue`\n },\n {\n id: 'personal-details',\n path: '/PersonalDetails',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Users/Edit/${userData?.UserId}?isPersonalDetails=true`\n },\n {\n id: 'status-page',\n path: '/StatusPage',\n src: `https://status.${process.env.REACT_APP_MONOLITH_URL}/`\n },\n {\n id: 'account',\n path: '/Account',\n src: getAccountPathSrc()\n },\n {\n id: 'connect-bookings',\n path: '/Connect',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Connect`\n },\n {\n id: 'wetu-accounts-operators',\n path: '/Operators',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Operators?tab=operators`\n },\n {\n id: 'wetu-accounts-products',\n path: '/Products',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Operators?tab=products`\n },\n {\n id: 'marketers',\n path: '/Marketers',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Operators?tab=marketers`\n },\n {\n id: 'travel-agents',\n path: '/TravelAgents',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Operators?tab=travelagents`\n },\n {\n id: 'micro-operators',\n path: '/MicroOperators',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Operators?tab=micro`\n },\n {\n id: 'trials',\n path: '/Trials',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Operators?tab=trials`\n },\n {\n id: 'search',\n path: '/Search',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Operators?tab=find`\n },\n {\n id: 'reports-tools',\n path: '/ReportsAndTools',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Operators?tab=reports`\n },\n {\n id: 'ibrochure-search',\n path: '/iBrochure/Search',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Home/IBrochure_Search`\n },\n {\n id: 'consultant-portal',\n path: '/ConsultantPortal',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/ConsultantPortal`\n },\n {\n id: 'themes',\n path: '/Themes',\n src: `https://${process.env.REACT_APP_MONOLITH_URL}/Admin/Operators/Edit/${userData?.AccountId}?tab=themes&hideTabs=true#themes`,\n action: 'read',\n resource: 'themes'\n },\n //Keep this last to avoid the spinner bug.\n {\n id: 'dashboard',\n path: '/Dashboard',\n src: userData ? Object.keys(userData).length !== 0 && userData.AccountType && userData.AccountType === \"Operator\" ? `${process.env.REACT_APP_BLOG_URL}/intermediaries-page.php/` : `${process.env.REACT_APP_BLOG_URL}/suppliers-page.php/` : '' \n }\n ]\n }\n]\n\nexport { DefaultRoute, TemplateTitle, Routes }","import React from 'react'\nimport { selectThemeColors } from '@utils'\nimport { ThemeContext } from '@src/utility/context/ThemeColors'\n\nconst FallbackSpinner = () => {\n return (\n
\n
\n
\n
\n
\n
\n
\n )\n}\n\nexport default FallbackSpinner","// ** Redux Imports\nimport { createSlice } from '@reduxjs/toolkit'\n\nimport { Routes } from '../router/routes'\n\nconst initialDashboard = () => {\n const apps = Routes[0]?.iframeConfigs?.map((app) => {\n return {\n id: app.id,\n isLoaded: false\n }\n })\n\n return apps\n}\n\nexport const appsSlice = createSlice({\n name: 'apps',\n initialState: {\n apps: initialDashboard()\n },\n reducers: {\n handleApps: (state, action) => {\n state.apps = action.payload\n }\n }\n})\n\nexport const { handleApps } = appsSlice.actions\n\nexport default appsSlice.reducer\n","// ** Auth Endpoints\nexport default {\n loginEndpoint: '/jwt/login',\n registerEndpoint: '/jwt/register',\n refreshEndpoint: '/jwt/refresh-token',\n logoutEndpoint: '/jwt/logout',\n\n // ** This will be prefixed in authorization header with token\n // ? e.g. Authorization: Bearer \n tokenType: 'Bearer',\n\n // ** Value of this property will be used as key to store JWT token in storage\n storageTokenKeyName: 'accessToken',\n storageRefreshTokenKeyName: 'refreshToken'\n}","import useJwt from '@src/auth/jwt/useJwt'\nimport jwtDefaultConfig from './jwtDefaultConfig'\nimport axios from 'axios'\nimport Cookies from 'js-cookie'\n\nexport default class JwtService {\n // ** jwtConfig <= Will be used by this service\n jwtConfig = { ...jwtDefaultConfig }\n\n // ** For Refreshing Token\n isAlreadyFetchingAccessToken = false\n\n // ** For Refreshing Token\n subscribers = []\n\n constructor(jwtOverrideConfig) {\n this.jwtConfig = { ...this.jwtConfig, ...jwtOverrideConfig }\n\n // ** Request Interceptor\n axios.interceptors.request.use(\n config => {\n return config\n },\n error => Promise.reject(error)\n )\n \n axios.interceptors.response.use(\n response => {\n return response\n },\n async error => {\n const originalRequest = error.config\n if (error.response && error.response.status === 401 && !originalRequest._retry) {\n originalRequest._retry = true\n try {\n const response = await this.refreshToken()\n const accessToken = response.data.jwt\n this.onAccessTokenFetched(accessToken)\n\n return await axios(originalRequest)\n } catch {\n let url = 'wetu.com'\n const subDomain = process.env.REACT_APP_SUB_DOMAIN\n if (subDomain) {\n url = `${subDomain}.${url}`\n }\n\n Cookies.remove(useJwt.jwtConfig.identifierTokenCookieName, { path: '/', domain: url })\n Cookies.remove(useJwt.jwtConfig.identifierTokenCookieName, { path: '/', domain: `.${url}` })\n\n window.top.location.href = `${process.env.REACT_APP_ACCOUNT_UI_URL}/Login`\n }\n }\n\n return Promise.reject(error)\n }\n )\n }\n\n onAccessTokenFetched(accessToken) {\n this.subscribers = this.subscribers.filter(callback => callback(accessToken))\n }\n\n addSubscriber(callback) {\n this.subscribers.push(callback)\n }\n\n login(...args) {\n return axios.post(this.jwtConfig.loginEndpoint, ...args)\n }\n\n register(...args) {\n return axios.post(this.jwtConfig.registerEndpoint, ...args)\n }\n\n refreshToken() {\n return axios.post(this.jwtConfig.refreshEndpoint, {\n accessToken: \"\",\n refreshTokenId: \"\",\n isAccessTokenCookiePersistant: false,\n isRefreshTokenCookiePersistant: false\n }, { withCredentials: true })\n }\n}","// ** Auth Endpoints\nexport default {\n loginEndpoint: `${process.env.REACT_APP_ACCOUNT_API_URL}/User/Login`,\n registerEndpoint: `${process.env.REACT_APP_ACCOUNT_API_URL}/Account/Register`,\n refreshEndpoint: `${process.env.REACT_APP_ACCOUNT_API_URL}/User/RefreshAccessToken`,\n \n identifierTokenCookieName: `wetu_id_token_${process.env.REACT_APP_ENV}`\n}\n","import JwtService from './jwtWetuService'\nimport jwtWetuConfig from './jwtWetuConfig'\n\nfunction useJwt(jwtOverrideConfig) {\n const jwt = new JwtService(jwtOverrideConfig)\n \n return {\n jwt\n }\n }\n\nconst { jwt } = useJwt(jwtWetuConfig)\n\nexport default jwt\n","// ** Redux Imports\nimport { createSlice } from '@reduxjs/toolkit'\n\n// ** UseJWT import to get config\nimport useJwt from '@src/auth/jwt/useJwt'\nimport { getUserData, createUserAbilities } from '@src/auth/utils'\n\nconst config = useJwt.jwtConfig\n\nconst initialUser = () => {\n const userData = getUserData()\n\n //** Parse stored json or if none return initialValue\n return userData ? userData : {}\n}\n\nexport const authSlice = createSlice({\n name: 'authentication',\n initialState: {\n userData: initialUser(),\n abilities: createUserAbilities()\n },\n reducers: {\n handleLogin: (state, action) => {\n state.userData = action.payload\n state[config.storageTokenKeyName] = action.payload[config.storageTokenKeyName]\n state[config.storageRefreshTokenKeyName] = action.payload[config.storageRefreshTokenKeyName]\n localStorage.setItem('userData', JSON.stringify(action.payload))\n localStorage.setItem(config.storageTokenKeyName, JSON.stringify(action.payload.accessToken))\n localStorage.setItem(config.storageRefreshTokenKeyName, JSON.stringify(action.payload.refreshToken))\n },\n handleLogout: state => {\n state.userData = {}\n state[config.storageTokenKeyName] = null\n state[config.storageRefreshTokenKeyName] = null\n // ** Remove user, accessToken & refreshToken from localStorage\n localStorage.removeItem('userData')\n localStorage.removeItem(config.storageTokenKeyName)\n localStorage.removeItem(config.storageRefreshTokenKeyName)\n },\n handleUserData: (state, action) => {\n state.userData = action.payload\n },\n updateAbilities: (state, action) => {\n state.abilities = action.payload\n }\n }\n})\n\nexport const { handleLogin, handleLogout, handleUserData, updateAbilities } = authSlice.actions\n\nexport default authSlice.reducer\n","export default __webpack_public_path__ + \"static/media/wetu.efcd3a70.svg\";","// You can customize the template with the help of this file\n\n//Template config options\nconst themeConfig = {\n app: {\n appName: '',\n appLogoImage: require('@src/assets/images/logo/wetu.svg').default\n },\n layout: {\n isRTL: false,\n skin: 'light', // light, dark, bordered, semi-dark\n routerTransition: 'fadeIn', // fadeIn, fadeInLeft, zoomIn, none or check this for more transition https://animate.style/\n type: 'vertical', // vertical, horizontal\n contentWidth: 'full', // full, boxed\n menu: {\n isHidden: false,\n isCollapsed: false\n },\n navbar: {\n // ? For horizontal menu, navbar type will work for navMenu type\n type: 'hidden', // static , sticky , floating, hidden\n backgroundColor: 'white' // BS color options [primary, success, etc]\n },\n footer: {\n type: 'hidden' // static, sticky, hidden\n },\n customizer: false,\n scrollTop: true // Enable scroll to top button\n }\n}\n\nexport default themeConfig\n","// ** Redux Imports\nimport { createSlice, createAsyncThunk } from '@reduxjs/toolkit'\n\n// ** Axios Imports\nimport axios from 'axios'\n\nexport const getBookmarks = createAsyncThunk('layout/getBookmarks', async () => {\n const response = await axios.get('/api/bookmarks/data')\n return {\n data: response.data.suggestions,\n bookmarks: response.data.bookmarks\n }\n})\n\nexport const updateBookmarked = createAsyncThunk('layout/updateBookmarked', async id => {\n await axios.post('/api/bookmarks/update', { id })\n return id\n})\n\nexport const layoutSlice = createSlice({\n name: 'layout',\n initialState: {\n query: '',\n bookmarks: [],\n suggestions: []\n },\n reducers: {\n handleSearchQuery: (state, action) => {\n state.query = action.payload\n }\n },\n extraReducers: builder => {\n builder\n .addCase(getBookmarks.fulfilled, (state, action) => {\n state.suggestions = action.payload.data\n state.bookmarks = action.payload.bookmarks\n })\n .addCase(updateBookmarked.fulfilled, (state, action) => {\n let objectToUpdate\n\n // ** find & update object\n state.suggestions.find(item => {\n if (item.id === action.payload) {\n item.isBookmarked = !item.isBookmarked\n objectToUpdate = item\n }\n })\n\n // ** Get index to add or remove bookmark from array\n const bookmarkIndex = state.bookmarks.findIndex(x => x.id === action.payload)\n\n if (bookmarkIndex === -1) {\n state.bookmarks.push(objectToUpdate)\n } else {\n state.bookmarks.splice(bookmarkIndex, 1)\n }\n })\n }\n})\n\nexport const { handleSearchQuery } = layoutSlice.actions\n\nexport default layoutSlice.reducer\n","// ** Reducers Imports\nimport navbar from './navbar'\nimport layout from './layout'\nimport auth from './authentication'\nimport apps from './apps'\n\nconst rootReducer = {\n auth,\n navbar,\n layout,\n apps\n}\n\nexport default rootReducer\n","// ** Redux Imports\nimport rootReducer from './rootReducer'\nimport { configureStore } from '@reduxjs/toolkit'\n\nconst store = configureStore({\n reducer: rootReducer,\n middleware: getDefaultMiddleware => {\n return getDefaultMiddleware({\n serializableCheck: false\n })\n }\n})\n\nexport { store }\n","// ** React Imports\nimport { useState, useEffect } from 'react'\n\n// ** Third Party Components\nimport classnames from 'classnames'\n\n// ** Reactstrap Imports\nimport { Button } from 'reactstrap'\n\n// ** Styles\nimport './ripple-button.scss'\n\nconst RippleButton = ({ className, children, onClick, ...rest }) => {\n // ** States\n const [mounted, setMounted] = useState(false)\n const [isRippling, setIsRippling] = useState(false)\n const [coords, setCoords] = useState({ x: -1, y: -1 })\n\n // ** Toggle mounted on mount & unmount\n useEffect(() => {\n setMounted(true)\n return () => setMounted(false)\n }, [])\n\n // ** Check for coords and set ripple\n useEffect(() => {\n if (mounted) {\n if (coords.x !== -1 && coords.y !== -1) {\n setIsRippling(true)\n setTimeout(() => setIsRippling(false), 500)\n } else {\n setIsRippling(false)\n }\n }\n }, [coords])\n\n // ** Reset Coords on ripple end\n useEffect(() => {\n if (mounted) {\n if (!isRippling) setCoords({ x: -1, y: -1 })\n }\n }, [isRippling])\n\n return (\n {\n const rect = e.target.getBoundingClientRect()\n setCoords({ x: e.clientX - rect.left, y: e.clientY - rect.top })\n if (onClick) {\n onClick(e)\n }\n }}\n {...rest}\n >\n {children}\n {isRippling ? (\n \n ) : null}\n \n )\n}\n\n// ** PropTypes\nRippleButton.propTypes = {\n ...Button.propTypes\n}\n\nButton.Ripple = RippleButton\n","/*eslint-disable */\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n)\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets see https://github.com/facebook/create-react-app/issues/2374\n return\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config)\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n )\n })\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config)\n }\n })\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing\n if (installingWorker === null) {\n return\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n )\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration)\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.')\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration)\n }\n }\n }\n }\n }\n })\n .catch(error => {\n console.error('Error during service worker registration:', error)\n })\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type')\n if (response.status === 404 || (contentType !== null && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload()\n })\n })\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config)\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.')\n })\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister()\n })\n }\n}\n","// ** React Imports\nimport { Suspense, lazy } from 'react'\nimport ReactDOM from 'react-dom'\n\n// ** Redux Imports\nimport { Provider } from 'react-redux'\nimport { store } from './redux/store'\n\n// ** Intl & ThemeColors Context\nimport { ToastContainer } from 'react-toastify'\nimport { ThemeContext } from './utility/context/ThemeColors'\n\n// ** Spinner (Splash Screen)\nimport FallbackSpinner from '@src/views/components/FallbackSpinner'\n\n// ** Ripple Button\nimport './@core/components/ripple-button'\n\n// ** PrismJS\nimport 'prismjs'\nimport 'prismjs/themes/prism-tomorrow.css'\nimport 'prismjs/components/prism-jsx.min'\n\n// ** React Perfect Scrollbar\nimport 'react-perfect-scrollbar/dist/css/styles.css'\n\n// ** React Toastify\nimport '@styles/react/libs/toastify/toastify.scss'\n\n// ** Core styles\nimport './@core/assets/fonts/feather/iconfont.css'\nimport './@core/scss/core.scss'\nimport './assets/scss/style.scss'\n\n// ** Service Worker\nimport * as serviceWorker from './serviceWorker'\n\n// ** Lazy load app\nconst LazyApp = lazy(() => import('./App'))\n\nReactDOM.render(\n \n }>\n \n \n \n \n \n ,\n document.getElementById('root')\n)\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister()\n"],"sourceRoot":""}