this repo has no description
1import settings from "@moonlight-mod/wp/settings_settings";
2import React from "@moonlight-mod/wp/react";
3import spacepack from "@moonlight-mod/wp/spacepack_spacepack";
4import { Moonbase, pages } from "@moonlight-mod/wp/moonbase_ui";
5
6import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores";
7import * as Components from "@moonlight-mod/wp/discord/components/common/index";
8
9import Update from "./ui/update";
10
11const { MenuItem, Text, Breadcrumbs } = Components;
12
13const Margins = spacepack.require("discord/styles/shared/Margins.css");
14
15const { open } = spacepack.findByExports("setSection", "clearSubsection")[0]
16 .exports.Z;
17
18const notice = {
19 stores: [MoonbaseSettingsStore],
20 element: () => {
21 // Require it here because lazy loading SUX
22 const SettingsNotice = spacepack.findByCode(
23 "onSaveButtonColor",
24 "FocusRingScope"
25 )[0].exports.Z;
26 return (
27 <SettingsNotice
28 submitting={MoonbaseSettingsStore.submitting}
29 onReset={() => {
30 MoonbaseSettingsStore.reset();
31 }}
32 onSave={() => {
33 MoonbaseSettingsStore.writeConfig();
34 }}
35 />
36 );
37 }
38};
39
40function addSection(
41 id: string,
42 name: string,
43 element: React.FunctionComponent
44) {
45 settings.addSection(`moonbase-${id}`, name, element, null, -2, notice);
46}
47
48// FIXME: move to component types
49type Breadcrumb = {
50 id: string;
51 label: string;
52};
53
54function renderBreadcrumb(crumb: Breadcrumb, last: boolean) {
55 return (
56 <Text
57 variant="heading-lg/semibold"
58 tag="h2"
59 color={last ? "header-primary" : "header-secondary"}
60 >
61 {crumb.label}
62 </Text>
63 );
64}
65
66if (
67 MoonbaseSettingsStore.getExtensionConfigRaw<boolean>(
68 "moonbase",
69 "sections",
70 false
71 )
72) {
73 settings.addHeader("Moonbase", -2);
74
75 for (const page of pages) {
76 addSection(page.id, page.name, () => {
77 const breadcrumbs = [
78 { id: "moonbase", label: "Moonbase" },
79 { id: page.id, label: page.name }
80 ];
81 return (
82 <>
83 <Breadcrumbs
84 className={Margins.marginBottom20}
85 renderCustomBreadcrumb={renderBreadcrumb}
86 breadcrumbs={breadcrumbs}
87 activeId={page.id}
88 >
89 {page.name}
90 </Breadcrumbs>
91
92 <Update />
93
94 <page.element />
95 </>
96 );
97 });
98 }
99} else {
100 settings.addSection("moonbase", "Moonbase", Moonbase, null, -2, notice);
101
102 settings.addSectionMenuItems(
103 "moonbase",
104 ...pages.map((page, i) => (
105 <MenuItem
106 key={page.id}
107 id={`moonbase-${page.id}`}
108 label={page.name}
109 action={() => open("moonbase", i)}
110 />
111 ))
112 );
113}