v0.12.11 new drawer menu notification feature
This commit is contained in:
@@ -395,10 +395,20 @@ export default function Chat() {
|
||||
|
||||
const isToolManager = user?.role === 'admin' || (features.teamToolManagers || []).some(gid => (features.userGroupMemberships || []).includes(gid));
|
||||
|
||||
// Unread indicators for burger icon and nav drawer
|
||||
const allGroupsFlat = [...(groups.publicGroups || []), ...(groups.privateGroups || [])];
|
||||
const hasUnreadChat = allGroupsFlat.some(g =>
|
||||
(g.type === 'public' || !g.is_managed) && (unreadGroups.get(g.id) || 0) > 0
|
||||
);
|
||||
const hasUnreadGroupMessages = (groups.privateGroups || []).some(g =>
|
||||
g.is_managed && (unreadGroups.get(g.id) || 0) > 0
|
||||
);
|
||||
const hasAnyUnread = hasUnreadChat || hasUnreadGroupMessages;
|
||||
|
||||
if (page === 'users') {
|
||||
return (
|
||||
<div className="chat-layout">
|
||||
<GlobalBar isMobile={isMobile} showSidebar={true} onBurger={() => setDrawerOpen(true)} />
|
||||
<GlobalBar isMobile={isMobile} showSidebar={true} onBurger={() => setDrawerOpen(true)} hasUnread={hasAnyUnread} />
|
||||
<div className="chat-body" style={{ overflow: 'hidden' }}>
|
||||
<UserManagerPage isMobile={isMobile} onProfile={() => setModal('profile')} onHelp={() => setModal('help')} onAbout={() => setModal('about')} />
|
||||
</div>
|
||||
@@ -412,7 +422,8 @@ export default function Chat() {
|
||||
onSettings={() => { setDrawerOpen(false); setModal('settings'); }}
|
||||
onUsers={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('users'); }}
|
||||
onHostPanel={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('hostpanel'); }}
|
||||
features={features} currentPage={page} isMobile={isMobile} />
|
||||
features={features} currentPage={page} isMobile={isMobile}
|
||||
unreadMessages={hasUnreadChat} unreadGroupMessages={hasUnreadGroupMessages} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
{modal === 'branding' && <BrandingModal onClose={() => setModal(null)} />}
|
||||
@@ -425,20 +436,10 @@ export default function Chat() {
|
||||
if (page === 'groups') {
|
||||
return (
|
||||
<div className="chat-layout">
|
||||
<GlobalBar isMobile={isMobile} showSidebar={true} onBurger={() => setDrawerOpen(true)} />
|
||||
<GlobalBar isMobile={isMobile} showSidebar={true} onBurger={() => setDrawerOpen(true)} hasUnread={hasAnyUnread} />
|
||||
<div className="chat-body" style={{ overflow: 'hidden' }}>
|
||||
<GroupManagerPage isMobile={isMobile} onProfile={() => setModal('profile')} onHelp={() => setModal('help')} onAbout={() => setModal('about')} />
|
||||
</div>
|
||||
<NavDrawer
|
||||
open={drawerOpen} onClose={() => setDrawerOpen(false)}
|
||||
onMessages={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('chat'); }}
|
||||
onSchedule={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('schedule'); }}
|
||||
onGroupManager={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('groups'); }}
|
||||
onBranding={() => { setDrawerOpen(false); setModal('branding'); }}
|
||||
onSettings={() => { setDrawerOpen(false); setModal('settings'); }}
|
||||
onUsers={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('users'); }}
|
||||
onHostPanel={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('hostpanel'); }}
|
||||
features={features} currentPage={page} isMobile={isMobile} />
|
||||
<NavDrawer
|
||||
open={drawerOpen} onClose={() => setDrawerOpen(false)}
|
||||
onMessages={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('chat'); }}
|
||||
@@ -449,7 +450,8 @@ export default function Chat() {
|
||||
onSettings={() => { setDrawerOpen(false); setModal('settings'); }}
|
||||
onUsers={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('users'); }}
|
||||
onHostPanel={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('hostpanel'); }}
|
||||
features={features} currentPage={page} isMobile={isMobile} />
|
||||
features={features} currentPage={page} isMobile={isMobile}
|
||||
unreadMessages={hasUnreadChat} unreadGroupMessages={hasUnreadGroupMessages} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
{modal === 'branding' && <BrandingModal onClose={() => setModal(null)} />}
|
||||
@@ -462,7 +464,7 @@ export default function Chat() {
|
||||
if (page === 'groupmessages') {
|
||||
return (
|
||||
<div className="chat-layout">
|
||||
<GlobalBar isMobile={isMobile} showSidebar={showSidebar} onBurger={() => setDrawerOpen(true)} />
|
||||
<GlobalBar isMobile={isMobile} showSidebar={showSidebar} onBurger={() => setDrawerOpen(true)} hasUnread={hasAnyUnread} />
|
||||
<div className="chat-body">
|
||||
{(!isMobile || showSidebar) && (
|
||||
<Sidebar
|
||||
@@ -506,7 +508,8 @@ export default function Chat() {
|
||||
onSettings={() => { setDrawerOpen(false); setModal('settings'); }}
|
||||
onUsers={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('users'); }}
|
||||
onHostPanel={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('hostpanel'); }}
|
||||
features={features} currentPage={page} isMobile={isMobile} />
|
||||
features={features} currentPage={page} isMobile={isMobile}
|
||||
unreadMessages={hasUnreadChat} unreadGroupMessages={hasUnreadGroupMessages} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
{modal === 'branding' && <BrandingModal onClose={() => setModal(null)} />}
|
||||
@@ -520,7 +523,7 @@ export default function Chat() {
|
||||
if (page === 'hostpanel') {
|
||||
return (
|
||||
<div className="chat-layout">
|
||||
<GlobalBar isMobile={isMobile} showSidebar={true} onBurger={() => setDrawerOpen(true)} />
|
||||
<GlobalBar isMobile={isMobile} showSidebar={true} onBurger={() => setDrawerOpen(true)} hasUnread={hasAnyUnread} />
|
||||
<div className="chat-body" style={{ overflow: 'hidden' }}>
|
||||
<HostPanel onProfile={() => setModal('profile')} onHelp={() => setModal('help')} onAbout={() => setModal('about')} />
|
||||
</div>
|
||||
@@ -538,7 +541,8 @@ export default function Chat() {
|
||||
onHostPanel={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('hostpanel'); }}
|
||||
features={features}
|
||||
currentPage={page}
|
||||
isMobile={isMobile} />
|
||||
isMobile={isMobile}
|
||||
unreadMessages={hasUnreadChat} unreadGroupMessages={hasUnreadGroupMessages} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
{modal === 'branding' && <BrandingModal onClose={() => setModal(null)} />}
|
||||
@@ -551,7 +555,7 @@ export default function Chat() {
|
||||
if (page === 'schedule') {
|
||||
return (
|
||||
<div className="chat-layout">
|
||||
<GlobalBar isMobile={isMobile} showSidebar={true} onBurger={() => setDrawerOpen(true)} />
|
||||
<GlobalBar isMobile={isMobile} showSidebar={true} onBurger={() => setDrawerOpen(true)} hasUnread={hasAnyUnread} />
|
||||
<div className="chat-body" style={{ overflow: 'hidden' }}>
|
||||
<SchedulePage
|
||||
isToolManager={isToolManager}
|
||||
@@ -575,7 +579,8 @@ export default function Chat() {
|
||||
onHostPanel={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('hostpanel'); }}
|
||||
features={features}
|
||||
currentPage={page}
|
||||
isMobile={isMobile} />
|
||||
isMobile={isMobile}
|
||||
unreadMessages={hasUnreadChat} unreadGroupMessages={hasUnreadGroupMessages} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
{modal === 'branding' && <BrandingModal onClose={() => setModal(null)} />}
|
||||
@@ -594,7 +599,7 @@ export default function Chat() {
|
||||
return (
|
||||
<div className="chat-layout">
|
||||
{/* Global top bar — spans full width on desktop, visible on mobile sidebar view */}
|
||||
<GlobalBar isMobile={isMobile} showSidebar={showSidebar} onBurger={() => setDrawerOpen(true)} />
|
||||
<GlobalBar isMobile={isMobile} showSidebar={showSidebar} onBurger={() => setDrawerOpen(true)} hasUnread={hasAnyUnread} />
|
||||
|
||||
<div className="chat-body">
|
||||
{(!isMobile || showSidebar) && (
|
||||
@@ -645,7 +650,8 @@ export default function Chat() {
|
||||
onHostPanel={() => { setDrawerOpen(false); setActiveGroupId(null); setChatHasText(false); setPage('hostpanel'); }}
|
||||
features={features}
|
||||
currentPage={page}
|
||||
isMobile={isMobile} />
|
||||
isMobile={isMobile}
|
||||
unreadMessages={hasUnreadChat} unreadGroupMessages={hasUnreadGroupMessages} />
|
||||
{modal === 'profile' && <ProfileModal onClose={() => setModal(null)} />}
|
||||
{modal === 'settings' && <SettingsModal onClose={() => setModal(null)} onFeaturesChanged={setFeatures} />}
|
||||
{modal === 'branding' && <BrandingModal onClose={() => setModal(null)} />}
|
||||
|
||||
Reference in New Issue
Block a user