From 3d8612b7b9840e65773f9b035c0b424f734b4967 Mon Sep 17 00:00:00 2001 From: Samuel Elliott Date: Thu, 16 Jun 2022 16:21:01 +0100 Subject: [PATCH] Add guided Discord setup --- src/app/browser/discord/index.tsx | 33 +++++++++++++++++++------- src/app/browser/main/discord-setup.tsx | 7 ++++++ src/app/browser/main/friends.tsx | 8 ++++++- src/app/main/ipc.ts | 9 ++++--- src/app/preload/index.ts | 16 +++++++------ 5 files changed, 52 insertions(+), 21 deletions(-) diff --git a/src/app/browser/discord/index.tsx b/src/app/browser/discord/index.tsx index d75d9e9..3ad7779 100644 --- a/src/app/browser/discord/index.tsx +++ b/src/app/browser/discord/index.tsx @@ -7,7 +7,8 @@ import ipc, { events } from '../ipc.js'; import { getAccounts, RequestState, Root, useAsync, useDiscordPresenceSource, useEventListener } from '../util.js'; export interface DiscordSetupProps { - // + users?: string[]; + friend_nsa_id?: string; } enum DiscordSourceType { @@ -28,14 +29,16 @@ export default function DiscordSetup(props: DiscordSetupProps) { const [discord_presence_source, discord_presence_source_state] = useDiscordPresenceSource(); - const [selectedMode, setSelectedMode] = useState(DiscordSourceType.NONE); + const [selectedMode, setSelectedMode] = useState(props.users?.length && props.friend_nsa_id ? + DiscordSourceType.ZNC : DiscordSourceType.NONE); const [selectedUserId, setSelectedUserId] = useState(null); - const [selectedFriendNsaId, setSelectedFriendNsaId] = useState(null); + const [selectedFriendNsaId, setSelectedFriendNsaId] = useState(props.friend_nsa_id ?? null); const [presenceUrl, setPresenceUrl] = useState(''); useEffect(() => { if (!discord_presence_source) { - setSelectedMode(DiscordSourceType.NONE); + setSelectedMode(props.users?.length && props.friend_nsa_id ? + DiscordSourceType.ZNC : DiscordSourceType.NONE); } else if ('na_id' in discord_presence_source) { setSelectedMode(DiscordSourceType.ZNC); setSelectedUserId(discord_presence_source.na_id); @@ -55,11 +58,14 @@ export default function DiscordSetup(props: DiscordSetupProps) { const friend = useMemo(() => selectedFriendNsaId ? friends?.find(f => f.nsaId === selectedFriendNsaId) : undefined, [selectedFriendNsaId, friends]); + const filtered_users = useMemo(() => users?.filter(u => selectedUserId === u.user.id || + (u.nso && (!props.users || props.users.includes(u.user.id)))), [users, props.users, selectedUserId]); + useEventListener(events, 'window:refresh', () => (forceRefreshAccounts(), forceRefreshFriends()), []); useEffect(() => { - if (users?.length && !user) setSelectedUserId(users[0].user.id); - }, [users, user]); + if (filtered_users?.length && !user) setSelectedUserId(filtered_users[0].user.id); + }, [filtered_users, user]); useEffect(() => { if (friends?.length && !friend) setSelectedFriendNsaId(friends[0].nsaId); @@ -113,7 +119,7 @@ export default function DiscordSetup(props: DiscordSetupProps) { selectedValue={selectedUserId ?? ''} onValueChange={setSelectedUserId} style={[styles.picker, theme.picker]} > - {users.filter(u => u.nso).map(u => )} - {user && friends_with_presence ? <> + {props.friend_nsa_id && (!selectedFriendNsaId || selectedFriendNsaId === props.friend_nsa_id) ? <> + 3. Select friend + This is the user you want to share. + + selectedValue={selectedFriendNsaId ?? ''} onValueChange={setSelectedFriendNsaId} + style={[styles.picker, theme.picker]} + enabled={false} + > + + + : user && friends_with_presence ? <> 3. Select friend This is the user you want to share. diff --git a/src/app/browser/main/discord-setup.tsx b/src/app/browser/main/discord-setup.tsx index 9b498bd..7580196 100644 --- a/src/app/browser/main/discord-setup.tsx +++ b/src/app/browser/main/discord-setup.tsx @@ -43,6 +43,13 @@ export default function SetupDiscordPresence(props: { {u.nso!.nsoAccount.user.name !== u.user.nickname ? ' (' + u.user.nickname + ')' : ''} )}. + + +