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"; 12 13const { Divider } = spacepack.findByCode(".forumOrHome]:")[0].exports.Z; 14const TitleBarClasses = spacepack.findByCode("iconWrapper:", "children:")[0] 15 .exports; 16const TabBarClasses = spacepack.findByCode("nowPlayingColumn:")[0].exports; 17const { setSection, clearSubsection } = spacepack.findByExports( 18 "setSection", 19 "clearSubsection" 20)[0].exports.Z; 21const Margins = spacepack.require("discord/styles/shared/Margins.css"); 22 23export const pages: { 24 id: string; 25 name: string; 26 element: React.FunctionComponent; 27}[] = [ 28 { 29 id: "extensions", 30 name: "Extensions", 31 element: ExtensionsPage 32 }, 33 { 34 id: "config", 35 name: "Config", 36 element: ConfigPage 37 } 38]; 39 40export function Moonbase(props: { initialTab?: number } = {}) { 41 const subsection = useStateFromStores( 42 [UserSettingsModalStore], 43 () => UserSettingsModalStore.getSubsection() ?? 0 44 ); 45 const setSubsection = React.useCallback( 46 (to: string) => { 47 if (subsection !== to) setSection("moonbase", to); 48 }, 49 [subsection] 50 ); 51 52 React.useEffect( 53 () => () => { 54 // 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 55 clearSubsection("moonbase"); 56 }, 57 [] 58 ); 59 60 return ( 61 <> 62 <div className={`${TitleBarClasses.children} ${Margins.marginBottom20}`}> 63 <Text 64 className={TitleBarClasses.titleWrapper} 65 variant="heading-lg/semibold" 66 tag="h2" 67 > 68 Moonbase 69 </Text> 70 <Divider /> 71 <TabBar 72 selectedItem={subsection} 73 onItemSelect={setSubsection} 74 type="top-pill" 75 className={TabBarClasses.tabBar} 76 > 77 {pages.map((page, i) => ( 78 <TabBar.Item key={page.id} id={i} className={TabBarClasses.item}> 79 {page.name} 80 </TabBar.Item> 81 ))} 82 </TabBar> 83 </div> 84 85 {React.createElement(pages[subsection].element)} 86 </> 87 ); 88}