import { useEffect, useState, createContext } from 'react' import { useRouter } from 'next/router' import { execute } from "../helper/clientApi" import environment from '../utils/environment' import presets from '../utils/globalPresets' import dynamic from 'next/dynamic' import useLoading from '../hooks/useLoading' import useHasMounted from '../hooks/useHasMounted' import useI18n from '../hooks/useI18n' export const LayoutContext = createContext() const Footer = dynamic(() => { return import("vComponents/dist/Footer") }, { ssr: false }) const Navbar = dynamic(() => { return import("vComponents/dist/Navbar") }, { ssr: false }) const Sidebar = dynamic(() => { return import("vComponents/dist/Sidebar") }, { ssr: false }) const ResponsiveContainer = ({ children }) => { const router = useRouter() const loading = useLoading() const i18n = useI18n() const hasMounted = useHasMounted() const [sidebarOpen, setSidebarOpen] = useState(true) const [menu, setMenu] = useState([]) const [title, setTitle] = useState('') const [userObj, setUserObj] = useState() const [token, setToken] = useState('') const doLogout = async () => { const redirectPath = await environment.logout() setUserObj(null) router.push(redirectPath) } const onBackKeyDown = () =>{ if (router.asPath === '/') { // cuando esta en la pagina principal cierra la app if (navigator.app) { navigator.app.exitApp() } else if (navigator.device) { navigator.device.exitApp() } else { window.close() } } else { window.history.back() } } const validaPermisosRuta = async (token) => { if (router.pathname.includes('/admin')) { loading.start() const tienePermiso = await environment.validaPermisos(token, 'S', 'N', 'N', 'N') loading.stop() if (tienePermiso === false) { router.push(presets.locations.welcome) } } if (router.pathname.includes('/mantenimientos')) { loading.start() const tienePermiso = await environment.validaPermisos(token, 'N', 'S', 'N', 'N') loading.stop() if (tienePermiso === false) { router.push(presets.locations.welcome) } } } const getMenu = async (token) => { loading.start() setMenu([]) if (token && token !== null) { console.log('Responsive Container - getMenu - token', token) let options = await execute('SPR_MENU_S', [token, 'SC', null]) setMenu(options) console.log('Responsive Container - getMenu - options', options) if (environment.validaResultadoDB(options) === false) { options = await execute('SPR_MENU_S', [token, 'SC', null]) setMenu(options) console.log('Responsive Container - getMenu - reoptions', options) } } loading.stop() } const getEnv = async () => { try { const env = await environment.getEnvUser() if (!env || !env.token) { toast.error(i18n.t('common.inactiveSession'), presets.toaster) router.push(presets.locations.login) return } setUserObj(env.user) setToken(env.token) validaPermisosRuta(env.token) getMenu(token) } catch (error) { router.push(presets.locations.login) } } const containerWrapper = { userObj: userObj, setUserObj: setUserObj, token: token, setToken: setToken } useEffect(() => { console.log('Responsive Container - getMenu - useEffect token', token) getMenu(token) }, [token]) // when page is mounted useEffect(() => { if (hasMounted) { getEnv() } // eslint-disable-next-line react-hooks/exhaustive-deps }, [hasMounted]) useEffect(() => { if (process.browser && window.cordova) { document.addEventListener("backbutton", onBackKeyDown, false) } }) return (
{/* Sidebar */} { userObj && userObj.nombre_usuario && doLogout()} setTitle={setTitle} userObj={userObj} environment={environment} presets={presets} router={router} i18n={i18n} /> } {/* Content area */}
{/* Site header */} {userObj && userObj.nombre_usuario && doLogout()} onClickProfile={() => router.push(`${presets.locations.profile}`)} title={title} userObj={userObj} router={router} presets={presets} /> }
{children}