import React from 'react'; import { useShallow } from 'zustand/react/shallow'; import { IcAdd, IcBell, IcCompose, IcHistory, IcSettings, IcTrend, IcZap } from '../res/icons'; import { useSpotifyStore } from '../state'; import { useSpotifyStrings } from '../hooks/useSpotifyStrings'; interface SidebarProps { isOpen: boolean; onClose: () => void; backdropProps: React.HTMLAttributes; profileOpenProps: React.HTMLAttributes; addAccountProps: React.HTMLAttributes; whatsNewOpenProps: React.HTMLAttributes; historyOpenProps: React.HTMLAttributes; settingsOpenProps: React.HTMLAttributes; } export const Sidebar: React.FC = ({ isOpen, onClose, backdropProps, profileOpenProps, addAccountProps, whatsNewOpenProps, historyOpenProps, settingsOpenProps, }) => { const s = useSpotifyStrings(); const { currentUser, accounts } = useSpotifyStore(useShallow((state) => ({ currentUser: state.currentUser, accounts: state.accounts ?? [], }))); const switchAccount = useSpotifyStore((state) => state.switchAccount); const handleSwitch = (userId: string) => { switchAccount(userId); onClose(); }; const { className: backdropClassName, ...backdropRest } = backdropProps ?? {}; const { className: profileOpenClassName, ...profileOpenRest } = profileOpenProps ?? {}; const { className: addAccountClassName, ...addAccountRest } = addAccountProps ?? {}; const { className: whatsNewClassName, ...whatsNewRest } = whatsNewOpenProps ?? {}; const { className: historyClassName, ...historyRest } = historyOpenProps ?? {}; const { className: settingsClassName, ...settingsRest } = settingsOpenProps ?? {}; return ( <>
{/* User profile section */}
{currentUser?.initial || 'U'}
{currentUser?.name || 'User'}
{s.sidebar_view_profile}
{s.sidebar_activity_off}
{/* Multi-account section */} {accounts.length > 1 && (
{accounts.filter((user) => user.id !== currentUser?.id).map((user) => (
handleSwitch(user.id)}>
{user.initial}
{user.name}
))}
{s.sidebar_add_account}
)} {/* Menu items */}
{accounts.length <= 1 && (
{s.sidebar_add_account}
)}
{s.sidebar_whats_new}
{s.sidebar_listening_stats}
{s.sidebar_recent_played}
{s.sidebar_your_updates}
{s.sidebar_settings_privacy}
{/* Messages section */}
{s.sidebar_messages}
{s.sidebar_messages_desc}
{s.sidebar_new_message}
); };