refactor(app): name mute and unread state accessors by intent (#1859)

This commit is contained in:
Hampus authored and GitHub committed 2026-08-24 12:32:55 +02:00
1 parent 52781cfa2d
commit a2099fb0e2
33 files changed
+173 -490

No files matched your search

@@ -38,7 +38,7 @@ export const ChannelListContextMenu: React.FC<ChannelListContextMenuProps> = obs
});
const invitableChannelId = InviteUtils.getInvitableChannelId(guild.id);
const canInvite = InviteUtils.canInviteToChannel(invitableChannelId, guild.id);
const hideMutedChannels = UserGuildSettings.getSettings(guild.id)?.hide_muted_channels ?? false;
const hideMutedChannels = UserGuildSettings.getSettingsForScope(guild.id)?.hide_muted_channels ?? false;
const handleToggleHideMutedChannels = useCallback(() => {
UserGuildSettingsCommands.toggleHideMutedChannels(guild.id);
}, [guild.id]);
@@ -22,7 +22,7 @@ interface FavoritesGuildContextMenuProps {
export const FavoritesGuildContextMenu: React.FC<FavoritesGuildContextMenuProps> = observer(({onClose}) => {
const {i18n} = useLingui();
const settings = UserGuildSettings.getSettings(FAVORITES_GUILD_ID);
const settings = UserGuildSettings.getSettingsForScope(FAVORITES_GUILD_ID);
const isMuted = settings?.muted ?? false;
const handleToggleMute = () => {
UserGuildSettingsCommands.updateGuildSettings(FAVORITES_GUILD_ID, {muted: !isMuted});
@@ -34,7 +34,7 @@ interface GuildFolderContextMenuProps {
}
function guildHasUnreadState(guildId: string): boolean {
return GuildReadState.hasUnread(guildId) || GuildReadState.getGuildHasUnreadIgnoreMuted(guildId);
return GuildReadState.guildIsUnread(guildId) || GuildReadState.guildUnreadIgnoringMute(guildId);
}
export const GuildFolderContextMenu: React.FC<GuildFolderContextMenuProps> = observer(({folder, guilds, onClose}) => {
@@ -132,11 +132,11 @@ function getCategoryMenuState(category: Channel): CategoryMenuState {
(ch) => ch.parentId === category.id && ch.type !== ChannelTypes.GUILD_CATEGORY,
);
const hasUnread = channelsInCategory.some((ch) => ReadStates.hasUnread(ch.id));
const isCollapsed = UserGuildSettings.isChannelCollapsed(guildId, category.id);
const isCollapsed = UserGuildSettings.isChannelSectionCollapsed(guildId, category.id);
const categoryIds = channels.filter((ch) => ch.type === ChannelTypes.GUILD_CATEGORY).map((ch) => ch.id);
const allCategoriesCollapsed =
categoryIds.length > 0
? categoryIds.every((categoryId) => UserGuildSettings.isChannelCollapsed(guildId, categoryId))
? categoryIds.every((categoryId) => UserGuildSettings.isChannelSectionCollapsed(guildId, categoryId))
: false;
const categoryOverride = UserGuildSettings.getChannelOverride(guildId, category.id);
const isMuted = categoryOverride?.muted ?? false;
@@ -113,7 +113,7 @@ export const MarkCategoryAsReadMenuItem: React.FC<CategoryMenuItemProps> = obser
export const CollapseCategoryMenuItem: React.FC<CategoryMenuItemProps> = observer(({category, onClose}) => {
const {i18n} = useLingui();
const guildId = category.guildId!;
const isCollapsed = UserGuildSettings.isChannelCollapsed(guildId, category.id);
const isCollapsed = UserGuildSettings.isChannelSectionCollapsed(guildId, category.id);
const handleToggleCollapse = useCallback(() => {
UserGuildSettingsCommands.toggleChannelCollapsed(guildId, category.id);
onClose();
@@ -138,7 +138,7 @@ export const CollapseAllCategoriesMenuItem: React.FC<CategoryMenuItemProps> = ob
);
const allCategoriesCollapsed = useMemo(() => {
if (categoryIds.length === 0) return false;
return categoryIds.every((categoryId) => UserGuildSettings.isChannelCollapsed(guildId, categoryId));
return categoryIds.every((categoryId) => UserGuildSettings.isChannelSectionCollapsed(guildId, categoryId));
}, [guildId, categoryIds]);
const handleToggleCollapseAll = useCallback(() => {
UserGuildSettingsCommands.toggleAllCategoriesCollapsed(guildId, categoryIds);
@@ -164,7 +164,7 @@ export function useGuildMenuData(guild: Guild, options: UseGuildMenuDataOptions)
const isOwner = guild.isOwner(Authentication.currentUserId);
const developerMode = UserSettings.developerMode;
const canEditCommunityProfile = Users.getCurrentUser()?.isClaimed() ?? true;
const settings = UserGuildSettings.getSettings(guild.id);
const settings = UserGuildSettings.getSettingsForScope(guild.id);
const hideMutedChannels = settings?.hide_muted_channels ?? false;
const isMuted = settings?.muted ?? false;
const muteConfig = settings?.mute_config;
@@ -298,7 +298,7 @@ export function useGuildMenuData(guild: Guild, options: UseGuildMenuDataOptions)
ModalCommands.runAfterBottomSheetClose(onClose, () => openReportGuildModal({i18n, guild}));
},
handleToggleHideMutedChannels: (checked: boolean) => {
const currentSettings = UserGuildSettings.getSettings(guild.id);
const currentSettings = UserGuildSettings.getSettingsForScope(guild.id);
const currentValue = currentSettings?.hide_muted_channels ?? false;
if (checked === currentValue) return;
UserGuildSettingsCommands.toggleHideMutedChannels(guild.id);
@@ -148,7 +148,7 @@ export const InvitePeopleMenuItem: React.FC<GuildMenuItemProps> = observer(({gui
});
export const MuteCommunityMenuItem: React.FC<GuildMenuItemProps> = observer(({guild, onClose}) => {
const {i18n} = useLingui();
const settings = UserGuildSettings.getSettings(guild.id);
const settings = UserGuildSettings.getSettingsForScope(guild.id);
const isMuted = settings?.muted ?? false;
const muteConfig = settings?.mute_config;
const mutedText = getMutedText(isMuted, muteConfig);
@@ -219,7 +219,7 @@ export const MuteCommunityMenuItem: React.FC<GuildMenuItemProps> = observer(({gu
});
export const NotificationSettingsMenuItem: React.FC<GuildMenuItemProps> = observer(({guild, onClose}) => {
const {i18n} = useLingui();
const settings = UserGuildSettings.getSettings(guild.id);
const settings = UserGuildSettings.getSettingsForScope(guild.id);
const suppressEveryone = settings?.suppress_everyone ?? false;
const suppressRoles = settings?.suppress_roles ?? false;
const mobilePush = settings?.mobile_push ?? true;
@@ -323,11 +323,11 @@ export const NotificationSettingsMenuItem: React.FC<GuildMenuItemProps> = observ
});
export const HideMutedChannelsMenuItem: React.FC<GuildMenuItemProps> = observer(({guild}) => {
const {i18n} = useLingui();
const settings = UserGuildSettings.getSettings(guild.id);
const settings = UserGuildSettings.getSettingsForScope(guild.id);
const hideMutedChannels = settings?.hide_muted_channels ?? false;
const handleToggle = useCallback(
(checked: boolean) => {
const currentSettings = UserGuildSettings.getSettings(guild.id);
const currentSettings = UserGuildSettings.getSettingsForScope(guild.id);
const currentValue = currentSettings?.hide_muted_channels ?? false;
if (checked === currentValue) return;
UserGuildSettingsCommands.toggleHideMutedChannels(guild.id);
@@ -223,7 +223,7 @@ class NotificationState {
}
private shouldNotifyBasedOnSettings(channel: Channel, messageRecord: Message, currentUser: User): boolean {
const level = UserGuildSettings.resolvedMessageNotifications({
const level = UserGuildSettings.resolveEffectiveMessageNotifications({
id: channel.id,
guildId: channel.guildId,
parentId: channel.parentId ?? undefined,
@@ -261,7 +261,7 @@ class NotificationState {
return null;
}
if (
UserGuildSettings.allowNoMessages({
UserGuildSettings.resolvesToNoMessages({
id: channel.id,
guildId: channel.guildId,
parentId: channel.parentId ?? undefined,