fix(app): remove last usage of client-side mutual guilds (#53)

This commit is contained in:
hampus-fluxer 2026-01-06 04:55:50 +01:00 committed by GitHub
parent fd2a1390b9
commit d0ef591dd9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 28 deletions

View File

@ -30,8 +30,9 @@ import {Button} from '~/components/uikit/Button/Button';
import FocusRing from '~/components/uikit/FocusRing/FocusRing'; import FocusRing from '~/components/uikit/FocusRing/FocusRing';
import {StatusAwareAvatar} from '~/components/uikit/StatusAwareAvatar'; import {StatusAwareAvatar} from '~/components/uikit/StatusAwareAvatar';
import {Tooltip} from '~/components/uikit/Tooltip/Tooltip'; import {Tooltip} from '~/components/uikit/Tooltip/Tooltip';
import type {GuildRecord} from '~/records/GuildRecord';
import type {ProfileRecord} from '~/records/ProfileRecord'; import type {ProfileRecord} from '~/records/ProfileRecord';
import GuildMemberStore from '~/stores/GuildMemberStore'; import GuildStore from '~/stores/GuildStore';
import MobileLayoutStore from '~/stores/MobileLayoutStore'; import MobileLayoutStore from '~/stores/MobileLayoutStore';
import RelationshipStore from '~/stores/RelationshipStore'; import RelationshipStore from '~/stores/RelationshipStore';
import UserStore from '~/stores/UserStore'; import UserStore from '~/stores/UserStore';
@ -45,11 +46,16 @@ export const DMWelcomeSection: React.FC<DMWelcomeSectionProps> = observer(functi
const {t} = useLingui(); const {t} = useLingui();
const user = UserStore.getUser(userId); const user = UserStore.getUser(userId);
const mutualGuilds = GuildMemberStore.getMutualGuilds(user?.id ?? '');
const relationship = RelationshipStore.getRelationship(user?.id ?? ''); const relationship = RelationshipStore.getRelationship(user?.id ?? '');
const relationshipType = relationship?.type; const relationshipType = relationship?.type;
const [profile, setProfile] = React.useState<ProfileRecord | null>(null); const [profile, setProfile] = React.useState<ProfileRecord | null>(null);
const mobileLayout = MobileLayoutStore; const mobileLayout = MobileLayoutStore;
const profileMutualGuilds = React.useMemo(() => profile?.mutualGuilds ?? [], [profile?.mutualGuilds]);
const mutualGuildRecords = React.useMemo(() => {
return profileMutualGuilds
.map((mutualGuild) => GuildStore.getGuild(mutualGuild.id))
.filter((guild): guild is GuildRecord => guild !== undefined);
}, [profileMutualGuilds]);
React.useEffect(() => { React.useEffect(() => {
if (!user) return; if (!user) return;
@ -92,7 +98,7 @@ export const DMWelcomeSection: React.FC<DMWelcomeSectionProps> = observer(functi
RelationshipActionCreators.removeRelationship(user.id); RelationshipActionCreators.removeRelationship(user.id);
}; };
const hasMutualGuilds = mutualGuilds.length > 0; const hasMutualGuilds = profileMutualGuilds.length > 0;
const currentUserUnclaimed = !(UserStore.currentUser?.isClaimed() ?? true); const currentUserUnclaimed = !(UserStore.currentUser?.isClaimed() ?? true);
const shouldShowActionButton = const shouldShowActionButton =
!user.bot && !user.bot &&
@ -100,7 +106,7 @@ export const DMWelcomeSection: React.FC<DMWelcomeSectionProps> = observer(functi
relationshipType === RelationshipTypes.INCOMING_REQUEST || relationshipType === RelationshipTypes.INCOMING_REQUEST ||
relationshipType === RelationshipTypes.OUTGOING_REQUEST || relationshipType === RelationshipTypes.OUTGOING_REQUEST ||
relationshipType === RelationshipTypes.FRIEND); relationshipType === RelationshipTypes.FRIEND);
const mutualGuildCount = mutualGuilds.length; const mutualGuildCount = profileMutualGuilds.length;
const renderActionButton = () => { const renderActionButton = () => {
if (user.bot) return null; if (user.bot) return null;
@ -154,13 +160,15 @@ export const DMWelcomeSection: React.FC<DMWelcomeSectionProps> = observer(functi
return ( return (
<div className={styles.mutualGuildsContainer}> <div className={styles.mutualGuildsContainer}>
<AvatarStack size={32} maxVisible={3}> {mutualGuildRecords.length > 0 && (
{mutualGuilds.map((guild) => ( <AvatarStack size={32} maxVisible={3}>
<div key={guild.id} className={styles.guildIconWrapper}> {mutualGuildRecords.map((guild) => (
<GuildIcon id={guild.id} name={guild.name} icon={guild.icon} className={styles.guildIcon} sizePx={32} /> <div key={guild.id} className={styles.guildIconWrapper}>
</div> <GuildIcon id={guild.id} name={guild.name} icon={guild.icon} className={styles.guildIcon} sizePx={32} />
))} </div>
</AvatarStack> ))}
</AvatarStack>
)}
<span className={styles.mutualGuildsText}> <span className={styles.mutualGuildsText}>
{mutualGuildCount === 1 {mutualGuildCount === 1

View File

@ -19,10 +19,9 @@
import {makeAutoObservable} from 'mobx'; import {makeAutoObservable} from 'mobx';
import {type GuildMember, GuildMemberRecord} from '~/records/GuildMemberRecord'; import {type GuildMember, GuildMemberRecord} from '~/records/GuildMemberRecord';
import type {GuildReadyData, GuildRecord} from '~/records/GuildRecord'; import type {GuildReadyData} from '~/records/GuildRecord';
import AuthenticationStore from '~/stores/AuthenticationStore'; import AuthenticationStore from '~/stores/AuthenticationStore';
import ConnectionStore from '~/stores/ConnectionStore'; import ConnectionStore from '~/stores/ConnectionStore';
import GuildStore from '~/stores/GuildStore';
type Members = Record<string, GuildMemberRecord>; type Members = Record<string, GuildMemberRecord>;
@ -80,21 +79,6 @@ class GuildMemberStore {
return Object.keys(this.members[guildId] ?? {}).length; return Object.keys(this.members[guildId] ?? {}).length;
} }
getMutualGuilds(userId: string): Array<GuildRecord> {
const currentUserId = AuthenticationStore.currentUserId;
if (!currentUserId || !userId || currentUserId === userId) {
return [];
}
const guilds = GuildStore.getGuilds();
return guilds.filter((guild) => {
const userIsMember = this.getMember(guild.id, userId) != null;
const currentUserIsMember = this.getMember(guild.id, currentUserId) != null;
return userIsMember && currentUserIsMember;
});
}
handleConnectionOpen(guilds: Array<GuildReadyData>): void { handleConnectionOpen(guilds: Array<GuildReadyData>): void {
this.members = {}; this.members = {};
for (const guild of guilds) { for (const guild of guilds) {