fix(app): show empty categories when hiding muted channels (#2460)

This commit is contained in:
Hampus authored and GitHub committed 2026-09-04 21:04:34 +02:00
1 parent 18ae2e563e
commit 1e6c332eae
3 files changed
+51 -3

No files matched your search

@@ -16,6 +16,7 @@ import {NullSpaceDropIndicator} from '@app/features/app/components/layout/NullSp
import {ScrollIndicatorOverlay} from '@app/features/app/components/layout/ScrollIndicatorOverlay';
import {type DragItem, DragItemType, type DropResult} from '@app/features/app/components/layout/types/DndTypes';
import {
shouldShowCategoryWhenHidingMutedChannels,
shouldShowChannelInCollapsedCategory,
shouldShowChannelWhenHidingMutedChannels,
} from '@app/features/app/components/layout/utils/ChannelListVisibility';
@@ -471,8 +472,10 @@ export const ChannelListContent = observer(({guild, scrollY}: {guild: Guild; scr
if (
hideMutedChannels &&
group.category &&
filteredTextChannels.length === 0 &&
filteredVoiceChannels.length === 0
!shouldShowCategoryWhenHidingMutedChannels({
hasChannels: group.textChannels.length > 0 || group.voiceChannels.length > 0,
hasVisibleChannels: filteredTextChannels.length > 0 || filteredVoiceChannels.length > 0,
})
) {
continue;
}
@@ -1,7 +1,11 @@
// SPDX-License-Identifier: AGPL-3.0-or-later
import {describe, expect, it} from 'vitest';
import {shouldShowChannelInCollapsedCategory, shouldShowChannelWhenHidingMutedChannels} from './ChannelListVisibility';
import {
shouldShowCategoryWhenHidingMutedChannels,
shouldShowChannelInCollapsedCategory,
shouldShowChannelWhenHidingMutedChannels,
} from './ChannelListVisibility';
describe('shouldShowChannelWhenHidingMutedChannels', () => {
it('keeps muted channels with visible unread state so mentions are findable', () => {
@@ -57,6 +61,35 @@ describe('shouldShowChannelWhenHidingMutedChannels', () => {
});
});
describe('shouldShowCategoryWhenHidingMutedChannels', () => {
it('keeps a category that has no channels at all', () => {
expect(
shouldShowCategoryWhenHidingMutedChannels({
hasChannels: false,
hasVisibleChannels: false,
}),
).toBe(true);
});
it('hides a category whose channels were all filtered out as muted', () => {
expect(
shouldShowCategoryWhenHidingMutedChannels({
hasChannels: true,
hasVisibleChannels: false,
}),
).toBe(false);
});
it('keeps a category that still has visible channels', () => {
expect(
shouldShowCategoryWhenHidingMutedChannels({
hasChannels: true,
hasVisibleChannels: true,
}),
).toBe(true);
});
});
describe('shouldShowChannelInCollapsedCategory', () => {
it('keeps visible unread channels reachable in collapsed categories', () => {
expect(
@@ -16,6 +16,18 @@ export function shouldShowChannelWhenHidingMutedChannels({
return isSelected || isConnected || !isMuted || hasVisibleUnread;
}
export interface HiddenMutedCategoryVisibilityInput {
hasChannels: boolean;
hasVisibleChannels: boolean;
}
export function shouldShowCategoryWhenHidingMutedChannels({
hasChannels,
hasVisibleChannels,
}: HiddenMutedCategoryVisibilityInput): boolean {
return !hasChannels || hasVisibleChannels;
}
export interface CollapsedCategoryChannelVisibilityInput {
isCategoryMuted: boolean;
isSelected: boolean;