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, RestartAdviceMessage, Update } 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
9const { MenuItem, Text, Breadcrumbs } = Components;
10
11const Margins = spacepack.require("discord/styles/shared/Margins.css");
12
13const { open } = spacepack.findByExports("setSection", "clearSubsection")[0].exports.Z;
14
15let SettingsNotice;
16const notice = {
17 stores: [MoonbaseSettingsStore],
18 element: () => {
19 // Require it here because lazy loading SUX
20 SettingsNotice ??= spacepack.findByCode("onSaveButtonColor", "FocusRingScope")[0].exports.Z;
21 return (
22 <SettingsNotice
23 submitting={MoonbaseSettingsStore.submitting}
24 onReset={() => {
25 MoonbaseSettingsStore.reset();
26 }}
27 onSave={() => {
28 MoonbaseSettingsStore.writeConfig();
29 }}
30 />
31 );
32 }
33};
34
35function addSection(id: string, name: string, element: React.FunctionComponent) {
36 settings.addSection(`moonbase-${id}`, name, element, null, -2, notice);
37}
38
39// FIXME: move to component types
40type Breadcrumb = {
41 id: string;
42 label: string;
43};
44
45function renderBreadcrumb(crumb: Breadcrumb, last: boolean) {
46 return (
47 <Text variant="heading-lg/semibold" tag="h2" color={last ? "header-primary" : "header-secondary"}>
48 {crumb.label}
49 </Text>
50 );
51}
52
53if (MoonbaseSettingsStore.getExtensionConfigRaw<boolean>("moonbase", "sections", false)) {
54 settings.addHeader("Moonbase", -2);
55
56 for (const page of pages) {
57 addSection(page.id, page.name, () => {
58 const breadcrumbs = [
59 { id: "moonbase", label: "Moonbase" },
60 { id: page.id, label: page.name }
61 ];
62 return (
63 <>
64 <Breadcrumbs
65 className={Margins.marginBottom20}
66 renderCustomBreadcrumb={renderBreadcrumb}
67 breadcrumbs={breadcrumbs}
68 activeId={page.id}
69 >
70 {page.name}
71 </Breadcrumbs>
72
73 <RestartAdviceMessage />
74 <Update />
75
76 <page.element />
77 </>
78 );
79 });
80 }
81} else {
82 settings.addSection("moonbase", "Moonbase", Moonbase, null, -2, notice);
83
84 settings.addSectionMenuItems(
85 "moonbase",
86 ...pages.map((page, i) => (
87 <MenuItem key={page.id} id={`moonbase-${page.id}`} label={page.name} action={() => open("moonbase", i)} />
88 ))
89 );
90}