import Link from 'next/link' import React, { useEffect, useState } from 'react' import { useGetLabelsQuery } from '../../lib/networking/queries/useGetLabelsQuery' import { useGetSubscriptionsQuery } from '../../lib/networking/queries/useGetSubscriptionsQuery' import { ProSidebar, Menu, MenuItem, SubMenu } from 'react-pro-sidebar' import { Newspaper, Tag } from 'phosphor-react' // styles const proSideBarStyles = { display: 'inline-block', } // Types type MenuItems = { label: string query: string active?: boolean icon: string | JSX.Element | null href: string } type DynamicMenuItems = { labels?: MenuItems[] subscriptions?: MenuItems[] } // Functions const calculateTodayMenuItem = () => { const timeZoneHourDiff = -new Date().getTimezoneOffset() / 60 const hrefStr = `?q=in%3Ainbox+saved%3A${ new Date(new Date().getTime() - 24 * 3600000).toISOString().split('T')[0] }Z%${timeZoneHourDiff}B2..*` return hrefStr } const createDynamicMenuItems = ( labels: Array, subscriptions: Array ) => { const labelsList: Array = [] const subscriptionsList: Array = [] // Create labels list if (labels.length) { labels.map((l) => labelsList.push({ label: l.name, query: `label:"${l.name}"`, icon: , href: `?q=label:"${l.name}"`, }) ) } // create subscriptions list if (subscriptions.length) { subscriptions.map((s) => subscriptionsList.push({ label: s.name, query: `subscription:"${s.subscription}"`, icon: , href: `?q=subscription:"${s.subscription}"`, }) ) } return { labels: [...labelsList], subscriptions: [...subscriptionsList] } } // Component export const Menubar = () => { const { labels } = useGetLabelsQuery() const { subscriptions } = useGetSubscriptionsQuery() const [menuList, setMenuList] = useState>([]) const [dynamicMenuItems, setDynamicMenuItems] = useState({}) const [activeItem, setActiveItem] = useState('Home') useEffect(() => { if (labels || subscriptions) { setDynamicMenuItems(createDynamicMenuItems(labels, subscriptions)) } setMenuList([ { label: 'Home', query: 'in:inbox', icon: null, href: '/home', }, { label: 'Today', query: 'in:inbox-label:Newsletter', icon: null, href: calculateTodayMenuItem(), }, { label: 'Read Later', query: 'in:inbox-label:Newsletter', icon: null, href: `?q=in:inbox+-label:Newsletter`, }, { label: 'HighLights', query: 'type:highlights', icon: null, href: `?q=type:highlights`, }, { label: 'Newsletters', query: 'in:inbox label:Newsletter', icon: null, href: `?q=in:inbox+label:Newsletter`, }, ]) }, [labels, subscriptions]) return ( {menuList.length > 0 && menuList.map((item) => { return ( { setActiveItem(item.label) }} > {item.label} ) })} {dynamicMenuItems.labels && ( {dynamicMenuItems.labels.map((item: MenuItems) => { return ( { setActiveItem(item.label) }} > {item.label} ) })} )} {dynamicMenuItems.subscriptions && ( {dynamicMenuItems.subscriptions.map((item: MenuItems) => { return ( { setActiveItem(item.label) }} > {item.label} ) })} )} ) }