this repo has no description
1import React from "@moonlight-mod/wp/react";
2import spacepack from "@moonlight-mod/wp/spacepack_spacepack";
3import {
4 Text,
5 TabBar
6} from "@moonlight-mod/wp/discord/components/common/index";
7import { useStateFromStores } from "@moonlight-mod/wp/discord/packages/flux";
8import { UserSettingsModalStore } from "@moonlight-mod/wp/common_stores";
9
10import ExtensionsPage from "./extensions";
11import ConfigPage from "./config";
12import Update from "./update";
13
14const { Divider } = spacepack.findByCode(".forumOrHome]:")[0].exports.Z;
15const TitleBarClasses = spacepack.findByCode("iconWrapper:", "children:")[0]
16 .exports;
17const TabBarClasses = spacepack.findByCode("nowPlayingColumn:")[0].exports;
18const { setSection, clearSubsection } = spacepack.findByExports(
19 "setSection",
20 "clearSubsection"
21)[0].exports.Z;
22const Margins = spacepack.require("discord/styles/shared/Margins.css");
23
24export const pages: {
25 id: string;
26 name: string;
27 element: React.FunctionComponent;
28}[] = [
29 {
30 id: "extensions",
31 name: "Extensions",
32 element: ExtensionsPage
33 },
34 {
35 id: "config",
36 name: "Config",
37 element: ConfigPage
38 }
39];
40
41export function Moonbase(props: { initialTab?: number } = {}) {
42 const subsection = useStateFromStores(
43 [UserSettingsModalStore],
44 () => UserSettingsModalStore.getSubsection() ?? 0
45 );
46 const setSubsection = React.useCallback(
47 (to: string) => {
48 if (subsection !== to) setSection("moonbase", to);
49 },
50 [subsection]
51 );
52
53 React.useEffect(
54 () => () => {
55 // Normally there's an onSettingsClose prop you can set but we don't expose it and I don't care enough to add support for it right now
56 clearSubsection("moonbase");
57 },
58 []
59 );
60
61 return (
62 <>
63 <div className={`${TitleBarClasses.children} ${Margins.marginBottom20}`}>
64 <Text
65 className={TitleBarClasses.titleWrapper}
66 variant="heading-lg/semibold"
67 tag="h2"
68 >
69 Moonbase
70 </Text>
71 <Divider />
72 <TabBar
73 selectedItem={subsection}
74 onItemSelect={setSubsection}
75 type="top-pill"
76 className={TabBarClasses.tabBar}
77 >
78 {pages.map((page, i) => (
79 <TabBar.Item key={page.id} id={i} className={TabBarClasses.item}>
80 {page.name}
81 </TabBar.Item>
82 ))}
83 </TabBar>
84 </div>
85
86 <Update />
87
88 {React.createElement(pages[subsection].element)}
89 </>
90 );
91}