this repo has no description

Merge pull request #14 from moonlight-mod/eva/great-sectionification

The Great Sectionification

Changed files
+52 -96
packages
core-extensions
src
moonbase
ui
config
extensions
+27 -20
packages/core-extensions/src/moonbase/index.tsx
···
import { ExtensionWebExports } from "@moonlight-mod/types";
-
import ui from "./ui";
+
import configPage from "./ui/config";
+
import extensionsPage from "./ui/extensions";
+
import { CircleXIconSVG, DownloadIconSVG, TrashIconSVG } from "./types";
export const webpackModules: ExtensionWebExports["webpackModules"] = {
···
const { MoonbaseSettingsStore } =
require("moonbase_stores") as typeof import("./webpackModules/stores");
-
settings.addSection("Moonbase", "Moonbase", ui(require), null, -2, {
-
stores: [MoonbaseSettingsStore],
-
element: () => {
-
// Require it here because lazy loading SUX
-
const SettingsNotice =
-
spacepack.findByCode("onSaveButtonColor")[0].exports.default;
-
return (
-
<SettingsNotice
-
submitting={MoonbaseSettingsStore.submitting}
-
onReset={() => {
-
MoonbaseSettingsStore.reset();
-
}}
-
onSave={() => {
-
MoonbaseSettingsStore.writeConfig();
-
}}
-
/>
-
);
-
}
-
});
+
const addSection = (name: string, element: React.FunctionComponent) => {
+
settings.addSection(name, name, element, null, -2, {
+
stores: [MoonbaseSettingsStore],
+
element: () => {
+
// Require it here because lazy loading SUX
+
const SettingsNotice =
+
spacepack.findByCode("onSaveButtonColor")[0].exports.default;
+
return (
+
<SettingsNotice
+
submitting={MoonbaseSettingsStore.submitting}
+
onReset={() => {
+
MoonbaseSettingsStore.reset();
+
}}
+
onSave={() => {
+
MoonbaseSettingsStore.writeConfig();
+
}}
+
/>
+
);
+
}
+
});
+
};
+
settings.addHeader("moonlight", -2);
+
addSection("Extensions", extensionsPage(require));
+
addSection("Config", configPage(require));
}
}
};
+11 -4
packages/core-extensions/src/moonbase/ui/config/index.tsx
···
className={RemoveButtonClasses.removeButton}
onClick={onClick}
>
-
<CircleXIcon width={16} height={16} />
+
<CircleXIcon width={24} height={24} />
</Clickable>
)}
</Tooltip>
···
}) {
const items = MoonbaseSettingsStore.getConfigOption(config) ?? [];
return (
-
<Flex direction={Flex.Direction.VERTICAL}>
+
<Flex
+
style={{
+
gap: "20px"
+
}}
+
direction={Flex.Direction.VERTICAL}
+
>
{items.map((val, i) => (
<div
key={i}
···
}}
>
<TextInput
-
size={TextInput.Sizes.MINI}
+
size={TextInput.Sizes.DEFAULT}
value={val}
onChange={(newVal: string) => {
items[i] = newVal;
···
look={Button.Looks.FILLED}
color={Button.Colors.GREEN}
size={Button.Sizes.SMALL}
-
className={Margins.marginTop8}
+
style={{
+
marginTop: "10px"
+
}}
onClick={() => {
items.push("");
MoonbaseSettingsStore.setConfigOption(config, items);
+14 -1
packages/core-extensions/src/moonbase/ui/extensions/index.tsx
···
const Margins = spacepack.findByCode("marginCenterHorz:")[0].exports;
const SearchBar = spacepack.findByCode("Messages.SEARCH", "hideSearchIcon")[0]
.exports.default;
+
const { Text } = require("common_components");
return function ExtensionsPage() {
const { extensions } = Flux.useStateFromStoresObject(
···
const [query, setQuery] = React.useState("");
const [filter, setFilter] = React.useState({ ...defaultFilter });
const [selectedTags, setSelectedTags] = React.useState(new Set<string>());
-
+
const TitleBarClasses = spacepack.findByCode("iconWrapper:", "children:")[0]
+
.exports;
const sorted = Object.values(extensions).sort((a, b) => {
const aName = a.manifest.meta?.name ?? a.id;
const bName = b.manifest.meta?.name ?? b.id;
···
return (
<>
+
<div
+
className={`${TitleBarClasses.children} ${Margins.marginBottom20}`}
+
>
+
<Text
+
className={TitleBarClasses.titleWrapper}
+
variant="heading-lg/semibold"
+
tag="h2"
+
>
+
Extensions
+
</Text>
+
</div>
<SearchBar
size={SearchBar.Sizes.MEDIUM}
query={query}
-71
packages/core-extensions/src/moonbase/ui/index.tsx
···
-
import { WebpackRequireType } from "@moonlight-mod/types";
-
import extensionsPage from "./extensions";
-
import configPage from "./config";
-
-
export enum MoonbasePage {
-
Extensions,
-
Config
-
}
-
-
export default (require: WebpackRequireType) => {
-
const React = require("common_react");
-
const spacepack = require("spacepack_spacepack").spacepack;
-
-
const Margins = spacepack.findByCode("marginCenterHorz:")[0].exports;
-
-
const { Divider } = spacepack.findByCode(".default.HEADER_BAR")[0].exports
-
.default;
-
const TitleBarClasses = spacepack.findByCode("iconWrapper:", "children:")[0]
-
.exports;
-
const TabBarClasses = spacepack.findByCode("nowPlayingColumn:")[0].exports;
-
-
const ExtensionsPage = extensionsPage(require);
-
const ConfigPage = configPage(require);
-
-
return function Moonbase() {
-
const { Text, TabBar } = require("common_components");
-
-
const [selectedTab, setSelectedTab] = React.useState(
-
MoonbasePage.Extensions
-
);
-
-
return (
-
<>
-
<div
-
className={`${TitleBarClasses.children} ${Margins.marginBottom20}`}
-
>
-
<Text
-
className={TitleBarClasses.titleWrapper}
-
variant="heading-lg/semibold"
-
tag="h2"
-
>
-
Moonbase
-
</Text>
-
<Divider />
-
<TabBar
-
selectedItem={selectedTab}
-
onItemSelect={setSelectedTab}
-
type="top-pill"
-
className={TabBarClasses.tabBar}
-
>
-
<TabBar.Item
-
id={MoonbasePage.Extensions}
-
className={TabBarClasses.item}
-
>
-
Extensions
-
</TabBar.Item>
-
<TabBar.Item
-
id={MoonbasePage.Config}
-
className={TabBarClasses.item}
-
>
-
Config
-
</TabBar.Item>
-
</TabBar>
-
</div>
-
-
{selectedTab === MoonbasePage.Extensions && <ExtensionsPage />}
-
{selectedTab === MoonbasePage.Config && <ConfigPage />}
-
</>
-
);
-
};
-
};