{"version":3,"sources":["configs/themeConfig.js","@core/auth/jwt/jwtDefaultConfig.js","@core/auth/jwt/jwtService.js","@core/auth/jwt/useJwt.js","utility/context/ThemeColors.js","configs/i18n/index.js","@core/components/ripple-button/index.js","serviceWorker.js","index.js","@core/components/spinner/Fallback-spinner.js","assets/images/logo/logo_agendamento_dronline.svg","redux/authentication.js","auth/jwt/useJwt.js","redux/layout.js","redux/rootReducer.js","redux/store.js","redux/loader.js","utility/context/GlobalLoader.js","utility/context/Client.js","redux/navbar.js"],"names":["themeConfig","app","appName","appLogoImage","require","default","layout","isRTL","skin","routerTransition","type","contentWidth","menu","isHidden","isCollapsed","navbar","backgroundColor","footer","customizer","scrollTop","loginEndpoint","registerEndpoint","refreshEndpoint","logoutEndpoint","tokenType","storageTokenKeyName","storageRefreshTokenKeyName","JwtService","constructor","jwtOverrideConfig","jwtConfig","jwtDefaultConfig","isAlreadyFetchingAccessToken","subscribers","this","axios","interceptors","request","use","config","accessToken","getToken","headers","Authorization","concat","error","Promise","reject","response","originalRequest","status","refreshToken","then","r","setToken","data","setRefreshToken","onAccessTokenFetched","resolve","addSubscriber","filter","callback","push","localStorage","getItem","getRefreshToken","value","setItem","login","_len","arguments","length","args","Array","_key","post","register","_len2","_key2","useJwt","jwt","ThemeColors","createContext","ThemeContext","_ref","children","colors","setColors","useState","useEffect","window","getHex","color","getComputedStyle","document","body","getPropertyValue","trim","obj","primary","light","main","secondary","success","danger","warning","info","dark","_jsx","Provider","i18n","Backend","LanguageDetector","initReactI18next","init","lng","backend","loadPath","fallbackLng","debug","keySeparator","react","useSuspense","interpolation","escapeValue","formatSeparator","Button","Ripple","className","onClick","rest","mounted","setMounted","isRippling","setIsRippling","coords","setCoords","x","y","setTimeout","_jsxs","classnames","e","rect","target","getBoundingClientRect","clientX","left","clientY","top","style","Boolean","location","hostname","match","yup","mixed","required","notType","string","min","max","email","LazyApp","lazy","ReactDOM","render","store","Suspense","fallback","Spinner","GlobalLoaderContext","ClientProvider","ToastContainer","newestOnTop","getElementById","navigator","serviceWorker","ready","registration","unregister","SpinnerComponent","props","fixed","src","logo","alt","authSlice","createSlice","name","initialState","userData","initialUser","item","JSON","parse","reducers","handleLogin","state","action","payload","stringify","handleLogout","removeItem","actions","authConfig","_process","process","_process$env","REACT_APP_API_URL","_process2","_process2$env","_process3","_process3$env","layoutSlice","initialSkin","initialDirection","lastLayout","menuCollapsed","initialMenuCollapsed","footerType","navbarType","menuHidden","navbarColor","handleRTL","handleSkin","handleLayout","handleFooterType","handleNavbarType","handleMenuHidden","handleLastLayout","handleNavbarColor","handleContentWidth","handleMenuCollapsed","handleRouterTransition","rootReducer","auth","loader","configureStore","reducer","middleware","getDefaultMiddleware","serializableCheck","loaderSlice","loading","handleLoading","GlobalLoader","is_loading","setIsLoading","is_store_loading","useSelector","FallbackSpinnerComponent","ClientContext","has_first_schedule_modal_seen","setHasFirstScheduleModalSeen","getBookmarks","createAsyncThunk","async","get","suggestions","bookmarks","updateBookmarked","id","query","handleSearchQuery","extraReducers","builder","addCase","fulfilled","objectToUpdate","find","isBookmarked","bookmarkIndex","findIndex","splice"],"mappings":"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","file":"static/js/main.4e5cd034.chunk.js","sourcesContent":["// You can customize the template with the help of this file\n\n//Template config options\nconst themeConfig = {\n app: {\n appName: 'DrOnline - Agendamento Online',\n appLogoImage: require('@src/assets/images/logo/logo_agendamento_dronline.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: 'horizontal', // vertical, horizontal\n contentWidth: 'full', // full, boxed\n menu: {\n isHidden: true,\n isCollapsed: false\n },\n navbar: {\n // ? For horizontal menu, navbar type will work for navMenu type\n type: 'static', // static , sticky , floating, hidden\n backgroundColor: 'white' // BS color options [primary, success, etc]\n },\n footer: {\n type: 'static' // static, sticky, hidden\n },\n customizer: false,\n scrollTop: true // Enable scroll to top button\n }\n}\n\nexport default themeConfig\n","// ** Auth Endpoints\r\nexport default {\r\n loginEndpoint: '/jwt/login',\r\n registerEndpoint: '/jwt/register',\r\n refreshEndpoint: '/jwt/refresh-token',\r\n logoutEndpoint: '/jwt/logout',\r\n\r\n // ** This will be prefixed in authorization header with token\r\n // ? e.g. Authorization: Bearer \r\n tokenType: 'Bearer',\r\n\r\n // ** Value of this property will be used as key to store JWT token in storage\r\n storageTokenKeyName: 'accessToken',\r\n storageRefreshTokenKeyName: 'refreshToken'\r\n}\r\n","import axios from 'axios'\r\nimport jwtDefaultConfig from './jwtDefaultConfig'\r\n\r\nexport default class JwtService {\r\n // ** jwtConfig <= Will be used by this service\r\n jwtConfig = { ...jwtDefaultConfig }\r\n\r\n // ** For Refreshing Token\r\n isAlreadyFetchingAccessToken = false\r\n\r\n // ** For Refreshing Token\r\n subscribers = []\r\n\r\n constructor(jwtOverrideConfig) {\r\n this.jwtConfig = { ...this.jwtConfig, ...jwtOverrideConfig }\r\n\r\n // ** Request Interceptor\r\n axios.interceptors.request.use(\r\n config => {\r\n // ** Get token from localStorage\r\n const accessToken = this.getToken()\r\n\r\n // ** If token is present add it to request's Authorization Header\r\n if (accessToken) {\r\n // ** eslint-disable-next-line no-param-reassign\r\n config.headers.Authorization = `${this.jwtConfig.tokenType} ${accessToken}`\r\n }\r\n return config\r\n },\r\n error => Promise.reject(error)\r\n )\r\n\r\n // ** Add request/response interceptor\r\n axios.interceptors.response.use(\r\n response => response,\r\n error => {\r\n // ** const { config, response: { status } } = error\r\n const { config, response } = error\r\n const originalRequest = config\r\n\r\n // ** if (status === 401) {\r\n if (response && response.status === 401) {\r\n if (!this.isAlreadyFetchingAccessToken) {\r\n this.isAlreadyFetchingAccessToken = true\r\n this.refreshToken().then(r => {\r\n this.isAlreadyFetchingAccessToken = false\r\n\r\n // ** Update accessToken in localStorage\r\n this.setToken(r.data.accessToken)\r\n this.setRefreshToken(r.data.refreshToken)\r\n\r\n this.onAccessTokenFetched(r.data.accessToken)\r\n })\r\n }\r\n const retryOriginalRequest = new Promise(resolve => {\r\n this.addSubscriber(accessToken => {\r\n // ** Make sure to assign accessToken according to your response.\r\n // ** Check: https://pixinvent.ticksy.com/ticket/2413870\r\n // ** Change Authorization header\r\n originalRequest.headers.Authorization = `${this.jwtConfig.tokenType} ${accessToken}`\r\n resolve(this.axios(originalRequest))\r\n })\r\n })\r\n return retryOriginalRequest\r\n }\r\n return Promise.reject(error)\r\n }\r\n )\r\n }\r\n\r\n onAccessTokenFetched(accessToken) {\r\n this.subscribers = this.subscribers.filter(callback => callback(accessToken))\r\n }\r\n\r\n addSubscriber(callback) {\r\n this.subscribers.push(callback)\r\n }\r\n\r\n getToken() {\r\n return localStorage.getItem(this.jwtConfig.storageTokenKeyName)\r\n }\r\n\r\n getRefreshToken() {\r\n return localStorage.getItem(this.jwtConfig.storageRefreshTokenKeyName)\r\n }\r\n\r\n setToken(value) {\r\n localStorage.setItem(this.jwtConfig.storageTokenKeyName, value)\r\n }\r\n\r\n setRefreshToken(value) {\r\n localStorage.setItem(this.jwtConfig.storageRefreshTokenKeyName, value)\r\n }\r\n\r\n login(...args) {\r\n return axios.post(this.jwtConfig.loginEndpoint, ...args)\r\n }\r\n\r\n register(...args) {\r\n return axios.post(this.jwtConfig.registerEndpoint, ...args)\r\n }\r\n\r\n refreshToken() {\r\n return axios.post(this.jwtConfig.refreshEndpoint, {\r\n refreshToken: this.getRefreshToken()\r\n })\r\n }\r\n}\r\n","// ** JWT Service Import\r\nimport JwtService from './jwtService'\r\n\r\n// ** Export Service as useJwt\r\nexport default function useJwt(jwtOverrideConfig) {\r\n const jwt = new JwtService(jwtOverrideConfig)\r\n\r\n return {\r\n jwt\r\n }\r\n}\r\n","// ** React Imports\r\nimport { useEffect, useState, createContext } from 'react'\r\n\r\n// ** Create Context\r\nconst ThemeColors = createContext()\r\n\r\nconst ThemeContext = ({ children }) => {\r\n // ** State\r\n const [colors, setColors] = useState({})\r\n\r\n //** ComponentDidMount\r\n useEffect(() => {\r\n if (window !== 'undefined') {\r\n //** Get variable value\r\n const getHex = color => window.getComputedStyle(document.body).getPropertyValue(color).trim()\r\n\r\n //** Colors obj\r\n const obj = {\r\n primary: {\r\n light: getHex('--bs-primary').concat('1a'),\r\n main: getHex('--bs-primary')\r\n },\r\n secondary: {\r\n light: getHex('--bs-secondary').concat('1a'),\r\n main: getHex('--bs-secondary')\r\n },\r\n success: {\r\n light: getHex('--bs-success').concat('1a'),\r\n main: getHex('--bs-success')\r\n },\r\n danger: {\r\n light: getHex('--bs-danger').concat('1a'),\r\n main: getHex('--bs-danger')\r\n },\r\n warning: {\r\n light: getHex('--bs-warning').concat('1a'),\r\n main: getHex('--bs-warning')\r\n },\r\n info: {\r\n light: getHex('--bs-info').concat('1a'),\r\n main: getHex('--bs-info')\r\n },\r\n dark: {\r\n light: getHex('--bs-dark').concat('1a'),\r\n main: getHex('--bs-dark')\r\n }\r\n }\r\n\r\n setColors({ ...obj })\r\n }\r\n }, [])\r\n\r\n return {children}\r\n}\r\n\r\nexport { ThemeColors, ThemeContext }\r\n","// ** I18n Imports\r\nimport i18n from 'i18next'\r\nimport Backend from 'i18next-xhr-backend'\r\nimport { initReactI18next } from 'react-i18next'\r\nimport LanguageDetector from 'i18next-browser-languagedetector'\r\n\r\ni18n\r\n\r\n // Enables the i18next backend\r\n .use(Backend)\r\n\r\n // Enable automatic language detection\r\n .use(LanguageDetector)\r\n\r\n // Enables the hook initialization module\r\n .use(initReactI18next)\r\n .init({\r\n lng: 'en',\r\n backend: {\r\n /* translation file path */\r\n loadPath: '/assets/data/locales/{{lng}}.json'\r\n },\r\n fallbackLng: 'en',\r\n debug: false,\r\n keySeparator: false,\r\n react: {\r\n useSuspense: false\r\n },\r\n interpolation: {\r\n escapeValue: false,\r\n formatSeparator: ','\r\n }\r\n })\r\n\r\nexport default i18n\r\n","// ** React Imports\r\nimport { useState, useEffect } from 'react'\r\n\r\n// ** Third Party Components\r\nimport classnames from 'classnames'\r\n\r\n// ** Reactstrap Imports\r\nimport { Button } from 'reactstrap'\r\n\r\n// ** Styles\r\nimport './ripple-button.scss'\r\n\r\nconst RippleButton = ({ className, children, onClick, ...rest }) => {\r\n // ** States\r\n const [mounted, setMounted] = useState(false)\r\n const [isRippling, setIsRippling] = useState(false)\r\n const [coords, setCoords] = useState({ x: -1, y: -1 })\r\n\r\n // ** Toggle mounted on mount & unmount\r\n useEffect(() => {\r\n setMounted(true)\r\n return () => setMounted(false)\r\n }, [])\r\n\r\n // ** Check for coords and set ripple\r\n useEffect(() => {\r\n if (mounted) {\r\n if (coords.x !== -1 && coords.y !== -1) {\r\n setIsRippling(true)\r\n setTimeout(() => setIsRippling(false), 500)\r\n } else {\r\n setIsRippling(false)\r\n }\r\n }\r\n }, [coords])\r\n\r\n // ** Reset Coords on ripple end\r\n useEffect(() => {\r\n if (mounted) {\r\n if (!isRippling) setCoords({ x: -1, y: -1 })\r\n }\r\n }, [isRippling])\r\n\r\n return (\r\n {\r\n const rect = e.target.getBoundingClientRect()\r\n setCoords({ x: e.clientX - rect.left, y: e.clientY - rect.top })\r\n if (onClick) {\r\n onClick(e)\r\n }\r\n }}\r\n {...rest}\r\n >\r\n {children}\r\n {isRippling ? (\r\n \r\n ) : null}\r\n \r\n )\r\n}\r\n\r\n// ** PropTypes\r\nRippleButton.propTypes = {\r\n ...Button.propTypes\r\n}\r\n\r\nButton.Ripple = RippleButton\r\n","/*eslint-disable */\r\n// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\r\n)\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets see https://github.com/facebook/create-react-app/issues/2374\r\n return\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config)\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n )\r\n })\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config)\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing\r\n if (installingWorker === null) {\r\n return\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n )\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration)\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.')\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error)\r\n })\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type')\r\n if (response.status === 404 || (contentType !== null && contentType.indexOf('javascript') === -1)) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload()\r\n })\r\n })\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config)\r\n }\r\n })\r\n .catch(() => {\r\n console.log('No internet connection found. App is running in offline mode.')\r\n })\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister()\r\n })\r\n }\r\n}\r\n","// ** React Imports\r\nimport { Suspense, lazy } from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport 'moment/locale/pt-br'\r\nimport { ToastContainer } from 'react-toastify'\r\n\r\n// ** Redux Imports\r\nimport { Provider } from 'react-redux'\r\nimport { store } from './redux/store'\r\n\r\n// ** Contexts\r\nimport { ThemeContext } from './utility/context/ThemeColors'\r\nimport { ClientProvider } from './utility/context/Client.js'\r\nimport { GlobalLoaderContext } from './utility/context/GlobalLoader'\r\n\r\n// ** i18n\r\nimport './configs/i18n'\r\n\r\n// ** Spinner (Splash Screen)\r\nimport Spinner from './@core/components/spinner/Fallback-spinner'\r\n\r\n// ** Ripple Button\r\nimport './@core/components/ripple-button'\r\n\r\n// ** PrismJS\r\nimport 'prismjs'\r\nimport 'prismjs/themes/prism-tomorrow.css'\r\nimport 'prismjs/components/prism-jsx.min'\r\n\r\n// ** React Perfect Scrollbar\r\nimport 'react-perfect-scrollbar/dist/css/styles.css'\r\n\r\n// ** React Toastify\r\nimport '@styles/react/libs/toastify/toastify.scss'\r\n\r\n// ** React yup validator\r\nimport * as yup from 'yup'\r\n\r\n// ** Core styles\r\nimport './@core/assets/fonts/feather/iconfont.css'\r\nimport './@core/scss/core.scss'\r\nimport './assets/scss/style.scss'\r\n\r\nyup.setLocale({\r\n mixed: {\r\n required: '${path} é um campo obrigatório!',\r\n notType: '${path} é um campo obrigatório!'\r\n },\r\n string: {\r\n min: '${path} deve ter mais que ${min} caracteres!',\r\n max: '${path} deve ter no máximo ${max} caracteres!',\r\n email: '${path} deve ser um e-mail válido!'\r\n }\r\n})\r\n\r\n// ** Service Worker\r\nimport * as serviceWorker from './serviceWorker'\r\n\r\n// ** Lazy load app\r\nconst LazyApp = lazy(() => import('./App'))\r\n\r\nReactDOM.render(\r\n \r\n }>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n)\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister()\r\n","// ** Logo\nimport logo from '@src/assets/images/logo/logo_agendamento_dronline.svg'\n\nconst SpinnerComponent = props => {\n const { fixed, className } = props\n \n return (\n
\n logo\n
\n
\n
\n
\n
\n
\n )\n}\n\nexport default SpinnerComponent\n","export default __webpack_public_path__ + \"static/media/logo_agendamento_dronline.1f75cff4.svg\";","// ** Redux Imports\r\nimport { createSlice } from '@reduxjs/toolkit'\r\n\r\n// ** UseJWT import to get config\r\nimport useJwt from '@src/auth/jwt/useJwt'\r\n\r\nconst config = useJwt.jwtConfig\r\n\r\nconst initialUser = () => {\r\n const item = window.localStorage.getItem('userData')\r\n //** Parse stored json or if none return initialValue\r\n return item ? JSON.parse(item) : {}\r\n}\r\n\r\nexport const authSlice = createSlice({\r\n name: 'authentication',\r\n initialState: {\r\n userData: initialUser()\r\n },\r\n reducers: {\r\n handleLogin: (state, action) => {\r\n state.userData = action.payload\r\n state[config.storageTokenKeyName] = action.payload[config.storageTokenKeyName]\r\n state[config.storageRefreshTokenKeyName] = action.payload[config.storageRefreshTokenKeyName]\r\n localStorage.setItem('userData', JSON.stringify(action.payload))\r\n localStorage.setItem(config.storageTokenKeyName, action.payload.accessToken)\r\n localStorage.setItem(config.storageRefreshTokenKeyName, action.payload.refreshToken)\r\n },\r\n handleLogout: state => {\r\n state.userData = {}\r\n state[config.storageTokenKeyName] = null\r\n state[config.storageRefreshTokenKeyName] = null\r\n // ** Remove user, accessToken & refreshToken from localStorage\r\n localStorage.removeItem('userData')\r\n localStorage.removeItem(config.storageTokenKeyName)\r\n localStorage.removeItem(config.storageRefreshTokenKeyName)\r\n }\r\n }\r\n})\r\n\r\nexport const { handleLogin, handleLogout } = authSlice.actions\r\n\r\nexport default authSlice.reducer\r\n","// ** Core JWT Import\r\nimport useJwt from '@src/@core/auth/jwt/useJwt'\r\n\r\nconst authConfig = {\r\n loginEndpoint: process?.env?.REACT_APP_API_URL + '/auth/acessar',\r\n // logoutEndpoint: \"/jwt/logout\"\r\n refreshEndpoint: process?.env?.REACT_APP_API_URL + '/auth/refresh-token',\r\n registerEndpoint: process?.env?.REACT_APP_API_URL + '/auth/registrar',\r\n storageRefreshTokenKeyName: \"refreshToken\",\r\n storageTokenKeyName: \"accessToken\"\r\n // tokenType: \"Bearer\"\r\n}\r\n\r\nconst { jwt } = useJwt(authConfig)\r\n\r\nexport default jwt\r\n","// ** Redux Imports\nimport { createSlice } from '@reduxjs/toolkit'\n\n// ** ThemeConfig Import\nimport themeConfig from '@configs/themeConfig'\n\nconst initialMenuCollapsed = () => {\n const item = window.localStorage.getItem('menuCollapsed')\n //** Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : themeConfig.layout.menu.isCollapsed\n}\n\nconst initialDirection = () => {\n const item = window.localStorage.getItem('direction')\n //** Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : themeConfig.layout.isRTL\n}\n\nconst initialSkin = () => {\n const item = window.localStorage.getItem('skin')\n //** Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : themeConfig.layout.skin\n}\n\nexport const layoutSlice = createSlice({\n name: 'layout',\n initialState: {\n skin: initialSkin(),\n isRTL: initialDirection(),\n layout: themeConfig.layout.type,\n lastLayout: themeConfig.layout.type,\n menuCollapsed: initialMenuCollapsed(),\n footerType: themeConfig.layout.footer.type,\n navbarType: themeConfig.layout.navbar.type,\n menuHidden: themeConfig.layout.menu.isHidden,\n contentWidth: themeConfig.layout.contentWidth,\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","// ** Reducers Imports\r\nimport navbar from './navbar'\r\nimport layout from './layout'\r\nimport auth from './authentication'\r\nimport loader from './loader'\r\n\r\nconst rootReducer = {\r\n auth,\r\n navbar,\r\n layout,\r\n loader\r\n}\r\n\r\nexport default rootReducer\r\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","// ** Redux Imports\nimport { createSlice } from '@reduxjs/toolkit'\n\nexport const loaderSlice = createSlice({\n name: 'loader',\n initialState: {\n loading: false\n },\n reducers: {\n handleLoading: (state, action) => {\n state.loading = action.payload;\n }\n }\n})\n\nexport const {\n handleLoading\n} = loaderSlice.actions\n\nexport default loaderSlice.reducer\n","// ** React Imports\nimport { useState, createContext } from 'react'\nimport { useSelector } from 'react-redux'\n\n// ** Create Context\nconst GlobalLoader = createContext()\n\n// ** Componentes\nimport FallbackSpinnerComponent from '@components/spinner/Fallback-spinner'\n\nconst GlobalLoaderContext = ({ children }) => {\n // ** State\n const [is_loading, setIsLoading] = useState(false)\n\n const is_store_loading = useSelector(store => store.loader.loading)\n\n return (\n \n {(is_loading || is_store_loading) && }\n
\n {children}\n
\n
\n ) \n}\n\nexport { GlobalLoader, GlobalLoaderContext }\n","// ** React Imports\nimport { useState, createContext } from 'react'\n\n// ** Create Context\nconst ClientContext = createContext()\n\nconst ClientProvider = ({ children }) => {\n \n const [has_first_schedule_modal_seen, setHasFirstScheduleModalSeen] = useState(false)\n\n const value = {\n has_first_schedule_modal_seen,\n setHasFirstScheduleModalSeen\n }\n\n return (\n \n {children}\n \n ) \n}\n\nexport { ClientContext, ClientProvider }\n","// ** Redux Imports\r\nimport { createSlice, createAsyncThunk } from '@reduxjs/toolkit'\r\n\r\n// ** Axios Imports\r\nimport axios from 'axios'\r\n\r\nexport const getBookmarks = createAsyncThunk('layout/getBookmarks', async () => {\r\n const response = await axios.get('/api/bookmarks/data')\r\n return {\r\n data: response.data.suggestions,\r\n bookmarks: response.data.bookmarks\r\n }\r\n})\r\n\r\nexport const updateBookmarked = createAsyncThunk('layout/updateBookmarked', async id => {\r\n await axios.post('/api/bookmarks/update', { id })\r\n return id\r\n})\r\n\r\nexport const layoutSlice = createSlice({\r\n name: 'layout',\r\n initialState: {\r\n query: '',\r\n bookmarks: [],\r\n suggestions: []\r\n },\r\n reducers: {\r\n handleSearchQuery: (state, action) => {\r\n state.query = action.payload\r\n }\r\n },\r\n extraReducers: builder => {\r\n builder\r\n .addCase(getBookmarks.fulfilled, (state, action) => {\r\n state.suggestions = action.payload.data\r\n state.bookmarks = action.payload.bookmarks\r\n })\r\n .addCase(updateBookmarked.fulfilled, (state, action) => {\r\n let objectToUpdate\r\n\r\n // ** find & update object\r\n state.suggestions.find(item => {\r\n if (item.id === action.payload) {\r\n item.isBookmarked = !item.isBookmarked\r\n objectToUpdate = item\r\n }\r\n })\r\n\r\n // ** Get index to add or remove bookmark from array\r\n const bookmarkIndex = state.bookmarks.findIndex(x => x.id === action.payload)\r\n\r\n if (bookmarkIndex === -1) {\r\n state.bookmarks.push(objectToUpdate)\r\n } else {\r\n state.bookmarks.splice(bookmarkIndex, 1)\r\n }\r\n })\r\n }\r\n})\r\n\r\nexport const { handleSearchQuery } = layoutSlice.actions\r\n\r\nexport default layoutSlice.reducer\r\n"],"sourceRoot":""}