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