Skip to content

Commit 2a5b77f

Browse files
committed
Joining a server should now take you to the customize page by default if it exists.
1 parent f441058 commit 2a5b77f

File tree

7 files changed

+88
-115
lines changed

7 files changed

+88
-115
lines changed

src/chat-api/useJoinServer.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import RouterEndpoints from "@/common/RouterEndpoints";
2+
import { createEffect, createSignal } from "solid-js";
3+
import { useNavigate } from "solid-navigator";
4+
import useStore from "./store/useStore";
5+
import {
6+
joinPublicServer,
7+
joinServerByInviteCode,
8+
} from "./services/ServerService";
9+
10+
export const useJoinServer = () => {
11+
const [serverId, setServerId] = createSignal<string | null>(null);
12+
const [joining, setJoining] = createSignal(false);
13+
14+
const navigate = useNavigate();
15+
const store = useStore();
16+
17+
const cachedServer = () => {
18+
return store.servers.get(serverId()!);
19+
};
20+
21+
createEffect(() => {
22+
if (joining() && cachedServer()) {
23+
navigate(
24+
RouterEndpoints.SERVER_MESSAGES(
25+
cachedServer()!.id,
26+
cachedServer()!._count?.welcomeQuestions
27+
? "welcome"
28+
: cachedServer()!.defaultChannelId
29+
)
30+
);
31+
}
32+
});
33+
34+
const joinByInviteCode = async (code: string, serverId: string) => {
35+
if (joining()) return;
36+
setServerId(serverId);
37+
setJoining(true);
38+
39+
await joinServerByInviteCode(code).catch((err) => {
40+
alert(err.message);
41+
setJoining(false);
42+
});
43+
};
44+
const joinPublicById = async (serverId: string) => {
45+
if (joining()) return;
46+
setServerId(serverId);
47+
setJoining(true);
48+
49+
await joinPublicServer(serverId).catch((err) => {
50+
alert(err.message);
51+
setJoining(false);
52+
});
53+
};
54+
55+
return { joining, joinPublicById, joinByInviteCode };
56+
};

src/components/explore/ExploreServers.tsx

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import { RawPublicServer } from "@/chat-api/RawData";
22
import {
33
BumpPublicServer,
4-
getPublicServer,
54
getPublicServers,
6-
joinPublicServer,
75
PublicServerFilter,
86
PublicServerSort,
97
} from "@/chat-api/services/ServerService";
@@ -33,6 +31,7 @@ import { Skeleton } from "../ui/skeleton/Skeleton";
3331
import { classNames, cn } from "@/common/classNames";
3432
import { MetaTitle } from "@/common/MetaTitle";
3533
import Input from "../ui/input/Input";
34+
import { useJoinServer } from "@/chat-api/useJoinServer";
3635

3736
const Container = styled("div")`
3837
display: flex;
@@ -324,10 +323,9 @@ function PublicServerItem(props: {
324323
}) {
325324
const [t] = useTransContext();
326325
const server = props.publicServer.server!;
327-
const [joinClicked, setJoinClicked] = createSignal(false);
326+
const { joinPublicById, joining: joinClicked } = useJoinServer();
328327
const [hovered, setHovered] = createSignal(false);
329328
const store = useStore();
330-
const navigate = useNavigate();
331329

332330
const { createPortal } = useCustomPortal();
333331

@@ -337,11 +335,7 @@ function PublicServerItem(props: {
337335

338336
const joinServerClick = async () => {
339337
if (joinClicked()) return;
340-
setJoinClicked(true);
341-
await joinPublicServer(props.publicServer.serverId).catch((err) => {
342-
alert(err.message);
343-
setJoinClicked(false);
344-
});
338+
await joinPublicById(props.publicServer.serverId);
345339
};
346340

347341
const bumpClick = () => {
@@ -368,17 +362,6 @@ function PublicServerItem(props: {
368362
));
369363
};
370364

371-
createEffect(() => {
372-
if (joinClicked() && cacheServer()) {
373-
navigate(
374-
RouterEndpoints.SERVER_MESSAGES(
375-
cacheServer()!.id,
376-
cacheServer()!.defaultChannelId
377-
)
378-
);
379-
}
380-
});
381-
382365
const bumpedUnder24Hours = () => {
383366
const millisecondsSinceLastBump =
384367
new Date().getTime() - props.publicServer.bumpedAt;

src/components/markup/Emoji.tsx

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,15 @@ import LegacyModal from "../ui/legacy-modal/LegacyModal";
55
import { css, styled } from "solid-styled-components";
66
import Text from "../ui/Text";
77
import { Show, createEffect, createSignal, onMount } from "solid-js";
8-
import {
9-
joinPublicServer,
10-
joinServerByInviteCode,
11-
publicServerByEmojiId,
12-
} from "@/chat-api/services/ServerService";
8+
import { publicServerByEmojiId } from "@/chat-api/services/ServerService";
139
import { RawPublicServer } from "@/chat-api/RawData";
1410
import Avatar from "../ui/Avatar";
1511
import Button from "../ui/Button";
1612
import useStore from "@/chat-api/store/useStore";
1713
import { ServerVerifiedIcon } from "../servers/ServerVerifiedIcon";
1814
import { useNavigate } from "solid-navigator";
1915
import RouterEndpoints from "@/common/RouterEndpoints";
16+
import { useJoinServer } from "@/chat-api/useJoinServer";
2017

2118
export function Emoji(props: {
2219
clickable?: boolean;
@@ -187,7 +184,7 @@ function PublicServer(props: {
187184
close: () => void;
188185
}) {
189186
const [hovered, setHovered] = createSignal(false);
190-
const [joining, setJoining] = createSignal(false);
187+
const { joinPublicById, joining } = useJoinServer();
191188
const navigate = useNavigate();
192189
const { servers } = useStore();
193190

@@ -200,32 +197,15 @@ function PublicServer(props: {
200197
const server = () => props.publicServer?.server! || servers.get(serverId()!);
201198
const isInServer = () => servers.get(serverId()!);
202199

203-
createEffect(() => {
204-
if (joining() && isInServer()) {
205-
props.close();
206-
navigate(
207-
RouterEndpoints.SERVER_MESSAGES(
208-
server()!.id,
209-
server()!.defaultChannelId
210-
)
211-
);
212-
}
213-
});
214-
215200
const joinOrVisitServer = () => {
216201
if (isInServer())
217202
return navigate(
218203
RouterEndpoints.SERVER_MESSAGES(server().id, server().defaultChannelId)
219204
);
220205

221206
if (joining()) return;
222-
setJoining(true);
223207

224-
joinPublicServer(serverId()!)
225-
.catch((err) => {
226-
alert(err.message);
227-
})
228-
.finally(() => setJoining(false));
208+
joinPublicById(serverId()!);
229209
};
230210

231211
return (

src/components/message-pane/message-item/MessageItem.tsx

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ import { DangerousLinkModal } from "@/components/ui/DangerousLinkModal";
5757
import { useResizeObserver } from "@/common/useResizeObserver";
5858
import {
5959
ServerWithMemberCount,
60-
joinServerByInviteCode,
6160
serverDetailsByInviteCode,
6261
} from "@/chat-api/services/ServerService";
6362
import { ServerVerifiedIcon } from "@/components/servers/ServerVerifiedIcon";
@@ -88,6 +87,7 @@ import { ImagePreviewModal } from "@/components/ui/ImagePreviewModal";
8887
import { ButtonsEmbed } from "./ButtonsEmbed";
8988
import { Tooltip } from "@/components/ui/Tooltip";
9089
import { getSystemMessage } from "@/common/SystemMessage";
90+
import { useJoinServer } from "@/chat-api/useJoinServer";
9191

9292
const DeleteMessageModal = lazy(
9393
() => import("../message-delete-modal/MessageDeleteModal")
@@ -1132,9 +1132,10 @@ function ServerInviteEmbed(props: { code: string }) {
11321132
const [invite, setInvite] = createSignal<
11331133
ServerWithMemberCount | null | false
11341134
>(null);
1135-
const [joining, setJoining] = createSignal(false);
11361135
const [hovered, setHovered] = createSignal(false);
11371136

1137+
const { joinByInviteCode, joining } = useJoinServer();
1138+
11381139
onMount(async () => {
11391140
if (inviteCache.has(props.code))
11401141
return setInvite(inviteCache.get(props.code)!);
@@ -1149,17 +1150,6 @@ function ServerInviteEmbed(props: { code: string }) {
11491150
return servers.get(_invite.id);
11501151
};
11511152

1152-
createEffect(() => {
1153-
if (joining() && cachedServer()) {
1154-
navigate(
1155-
RouterEndpoints.SERVER_MESSAGES(
1156-
cachedServer()!.id,
1157-
cachedServer()!.defaultChannelId
1158-
)
1159-
);
1160-
}
1161-
});
1162-
11631153
const joinOrVisitServer = () => {
11641154
const _invite = invite();
11651155
if (!_invite) return;
@@ -1169,13 +1159,8 @@ function ServerInviteEmbed(props: { code: string }) {
11691159
);
11701160

11711161
if (joining()) return;
1172-
setJoining(true);
11731162

1174-
joinServerByInviteCode(props.code)
1175-
.catch((err) => {
1176-
alert(err.message);
1177-
})
1178-
.finally(() => setJoining(false));
1163+
joinByInviteCode(props.code, _invite.id);
11791164
};
11801165

11811166
return (

src/components/moderation-pane/ServerPage.tsx

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ import DeleteServersModal from "./DeleteServersModal";
2929
import { formatTimestamp } from "@/common/date";
3030
import UndoServerDeleteModal from "./UndoServerDeleteModal";
3131
import { useModerationServerDeletedListener } from "@/common/GlobalEvents";
32-
import { joinPublicServer } from "@/chat-api/services/ServerService";
3332
import useStore from "@/chat-api/store/useStore";
3433
import RouterEndpoints from "@/common/RouterEndpoints";
34+
import { useJoinServer } from "@/chat-api/useJoinServer";
3535

3636
export default function ServerPage() {
3737
const params = useParams<{ serverId: string }>();
@@ -253,8 +253,7 @@ const ServerBannerDetails = styled(FlexColumn)`
253253
const PublicServerBlock = (props: {
254254
server: RawServer & { publicServer: RawPublicServer };
255255
}) => {
256-
const [joinClicked, setJoinClicked] = createSignal(false);
257-
const navigate = useNavigate();
256+
const { joinPublicById, joining: joinClicked } = useJoinServer();
258257
const store = useStore();
259258
const [isPinned, setIsPinned] = createSignal(
260259
!!props.server.publicServer.pinnedAt
@@ -263,12 +262,8 @@ const PublicServerBlock = (props: {
263262
const cacheServer = () => store.servers.get(props.server.id);
264263

265264
const onClick = async () => {
266-
setJoinClicked(true);
267265
if (cacheServer()) return;
268-
await joinPublicServer(props.server.id).catch((err) => {
269-
alert(err.message);
270-
setJoinClicked(false);
271-
});
266+
await joinPublicById(props.server.id);
272267
};
273268
const onPinClicked = async () => {
274269
if (isPinned())
@@ -280,17 +275,6 @@ const PublicServerBlock = (props: {
280275
.catch((err) => alert(err.message));
281276
};
282277

283-
createEffect(() => {
284-
if (joinClicked() && cacheServer()) {
285-
navigate(
286-
RouterEndpoints.SERVER_MESSAGES(
287-
cacheServer()!.id,
288-
cacheServer()!.defaultChannelId
289-
)
290-
);
291-
}
292-
});
293-
294278
return (
295279
<>
296280
<SettingsBlock icon="public" label="Public Server">

src/components/servers/explore-pane/ExploreServerPane.tsx

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import styles from "./styles.module.scss";
22
import {
3-
joinServerByInviteCode,
43
serverDetailsByInviteCode,
54
ServerWithMemberCount,
65
} from "@/chat-api/services/ServerService";
@@ -25,6 +24,7 @@ import { avatarUrl, bannerUrl } from "@/chat-api/store/useServers";
2524
import { Banner } from "@/components/ui/Banner";
2625
import { useWindowProperties } from "@/common/useWindowProperties";
2726
import { MetaTitle } from "@/common/MetaTitle";
27+
import { useJoinServer } from "@/chat-api/useJoinServer";
2828

2929
export default function ExploreServerPane() {
3030
const params = useParams();
@@ -84,31 +84,17 @@ const ServerPage = (props: {
8484
inviteCode?: string;
8585
}) => {
8686
const { servers } = useStore();
87-
const navigate = useNavigate();
88-
const [joinClicked, setJoinClicked] = createSignal(false);
8987
const { server } = props;
9088
const { width } = useWindowProperties();
89+
const { joinByInviteCode, joining: joinClicked } = useJoinServer();
9190

9291
const cacheServer = () => servers.get(server.id);
9392

94-
createEffect(() => {
95-
if (joinClicked() && cacheServer()) {
96-
navigate(
97-
RouterEndpoints.SERVER_MESSAGES(
98-
cacheServer()!.id,
99-
cacheServer()!.defaultChannelId
100-
)
101-
);
102-
}
103-
});
104-
10593
const joinServerClick = () => {
10694
if (joinClicked()) return;
10795
if (!props.inviteCode) return;
108-
setJoinClicked(true);
109-
joinServerByInviteCode(props.inviteCode).catch((err) => {
110-
alert(err.message);
111-
});
96+
97+
joinByInviteCode(props.inviteCode, server.id);
11298
};
11399

114100
const isLoggedIn = getStorageString(StorageKeys.USER_TOKEN, null);
@@ -152,7 +138,6 @@ const ServerPage = (props: {
152138
</Match>
153139
<Match when={!cacheServer()}>
154140
<Button
155-
margin={0}
156141
class={styles.joinButton}
157142
iconName="login"
158143
label="Join Server"

0 commit comments

Comments
 (0)