this repo has no description
1import React from "@moonlight-mod/wp/react";
2import spacepack from "@moonlight-mod/wp/spacepack_spacepack";
3import { Text, TabBar } from "@moonlight-mod/wp/discord/components/common/index";
4import { useStateFromStores } from "@moonlight-mod/wp/discord/packages/flux";
5import { UserSettingsModalStore } from "@moonlight-mod/wp/common_stores";
6
7import ExtensionsPage from "./extensions";
8import ConfigPage from "./config";
9import Update from "./update";
10
11const { Divider } = spacepack.findByCode(".forumOrHome]:")[0].exports.Z;
12const TitleBarClasses = spacepack.findByCode("iconWrapper:", "children:")[0].exports;
13const TabBarClasses = spacepack.findByCode("nowPlayingColumn:")[0].exports;
14const { setSection, clearSubsection } = spacepack.findByExports("setSection", "clearSubsection")[0].exports.Z;
15const Margins = spacepack.require("discord/styles/shared/Margins.css");
16
17export const pages: {
18 id: string;
19 name: string;
20 element: React.FunctionComponent;
21}[] = [
22 {
23 id: "extensions",
24 name: "Extensions",
25 element: ExtensionsPage
26 },
27 {
28 id: "config",
29 name: "Config",
30 element: ConfigPage
31 }
32];
33
34export function Moonbase(props: { initialTab?: number } = {}) {
35 const subsection = useStateFromStores([UserSettingsModalStore], () => UserSettingsModalStore.getSubsection() ?? 0);
36 const setSubsection = React.useCallback(
37 (to: string) => {
38 if (subsection !== to) setSection("moonbase", to);
39 },
40 [subsection]
41 );
42
43 React.useEffect(
44 () => () => {
45 // 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
46 clearSubsection("moonbase");
47 },
48 []
49 );
50
51 return (
52 <>
53 <div className={`${TitleBarClasses.children} ${Margins.marginBottom20}`}>
54 <Text className={TitleBarClasses.titleWrapper} variant="heading-lg/semibold" tag="h2">
55 Moonbase
56 </Text>
57 <Divider />
58 <TabBar selectedItem={subsection} onItemSelect={setSubsection} type="top-pill" className={TabBarClasses.tabBar}>
59 {pages.map((page, i) => (
60 <TabBar.Item key={page.id} id={i} className={TabBarClasses.item}>
61 {page.name}
62 </TabBar.Item>
63 ))}
64 </TabBar>
65 </div>
66
67 <Update />
68
69 {React.createElement(pages[subsection].element)}
70 </>
71 );
72}