Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3416 | Rev 3433 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import { useEffect, useMemo } from 'react'

import { useFetch } from '@hooks'

export function useNavbar() {
  const { data: menuData } = useFetch('/helpers/menu')
  const {
    data: session,
    refetch,
    isLoading
  } = useFetch(menuData?.routeCheckSession)

  const memoMenu = useMemo(() => {
    if (!menuData.menu) return []

    const menu = structuredClone(menuData?.menu)
    const comunicationIndex = menu.findIndex(
      (item) => item.label === 'Comunicación'
    )
    const comunication = menu[comunicationIndex]

    const newComunicationChilds = comunication.childs.map((child) => {
      if (child.label === 'Notificaciones') {
        return { ...child, count: session?.total_notifications }
      }

      if (child.label === 'Inmail') {
        return { ...child, count: session?.total_messages }
      }

      return child
    })

    comunication.childs = newComunicationChilds
    menu[comunicationIndex] = comunication

    return menu
  }, [menuData, session])

  useEffect(() => {
    const sessionInterval = setTimeout(() => {
      !isLoading && refetch()
    }, 3000)

    return () => {
      clearInterval(sessionInterval)
    }
  }, [isLoading])

  return {
    menuData: { ...menuData, menu: memoMenu },
    totalNotifications: session?.total_notifications ?? 0,
    totalMessages: session?.total_messages ?? 0
  }
}