fix(app): remove last usage of client-side mutual guilds (#53)
This commit is contained in:
parent
fd2a1390b9
commit
d0ef591dd9
@ -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
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user