Skip to content

Commit

Permalink
Merge pull request #19 from redstonekasi/mb-tabs
Browse files Browse the repository at this point in the history
(Optionally) bring back Moonbase tabs
  • Loading branch information
NotNite authored Dec 9, 2023
2 parents fed5136 + 61bb116 commit f0adc51
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 23 deletions.
50 changes: 45 additions & 5 deletions packages/core-extensions/src/moonbase/index.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,26 @@
import { ExtensionWebExports } from "@moonlight-mod/types";
import configPage from "./ui/config";
import { ExtensionWebExports, WebpackRequireType } from "@moonlight-mod/types";
import extensionsPage from "./ui/extensions";
import configPage from "./ui/config";

import { CircleXIconSVG, DownloadIconSVG, TrashIconSVG } from "./types";
import ui from "./ui";

export const pageModules: (require: WebpackRequireType) => Record<
string,
{
name: string;
element: React.FunctionComponent;
}
> = (require) => ({
extensions: {
name: "Extensions",
element: extensionsPage(require)
},
config: {
name: "Config",
element: configPage(require)
}
});

export const webpackModules: ExtensionWebExports["webpackModules"] = {
stores: {
Expand Down Expand Up @@ -55,9 +73,31 @@ export const webpackModules: ExtensionWebExports["webpackModules"] = {
}
});
};
settings.addHeader("moonlight", -2);
addSection("Extensions", extensionsPage(require));
addSection("Config", configPage(require));

if (moonlight.getConfigOption<boolean>("moonbase", "sections")) {
const pages = pageModules(require);

const { Text } = require("common_components");
const Margins = spacepack.findByCode("marginCenterHorz:")[0].exports;

settings.addHeader("Moonbase", -2);
for (const page of Object.values(pages)) {
addSection(page.name, () => (
<>
<Text
className={Margins.marginBottom20}
variant="heading-lg/semibold"
tag="h2"
>
Extensions
</Text>
<page.element />
</>
));
}
} else {
addSection("Moonbase", ui(require));
}
}
}
};
Expand Down
5 changes: 5 additions & 0 deletions packages/core-extensions/src/moonbase/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
},
"dependencies": ["spacepack", "settings", "common"],
"settings": {
"sections": {
"displayName": "Split into sections",
"description": "Show the Moonbase tabs as separate sections",
"type": "boolean"
},
"saveFilter": {
"displayName": "Persist filter",
"description": "Save extension filter in config",
Expand Down
11 changes: 1 addition & 10 deletions packages/core-extensions/src/moonbase/ui/config/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ export default (require: WebpackRequireType) => {
TextInput,
Flex,
Button,
SingleSelect,
Text
SingleSelect
} = CommonComponents;

const { MoonbaseSettingsStore } =
Expand Down Expand Up @@ -111,14 +110,6 @@ export default (require: WebpackRequireType) => {
return function ConfigPage() {
return (
<>
<Text
className={Margins.marginBottom20}
variant="heading-lg/semibold"
tag="h2"
>
Config
</Text>

<FormItem title="Repositories">
<FormText className={Margins.marginBottom4}>
A list of remote repositories to display extensions from
Expand Down
8 changes: 0 additions & 8 deletions packages/core-extensions/src/moonbase/ui/extensions/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ export default (require: WebpackRequireType) => {
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, savedFilter } = Flux.useStateFromStoresObject(
Expand Down Expand Up @@ -87,13 +86,6 @@ export default (require: WebpackRequireType) => {

return (
<>
<Text
className={Margins.marginBottom20}
variant="heading-lg/semibold"
tag="h2"
>
Extensions
</Text>
<SearchBar
size={SearchBar.Sizes.MEDIUM}
query={query}
Expand Down
54 changes: 54 additions & 0 deletions packages/core-extensions/src/moonbase/ui/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import { WebpackRequireType } from "@moonlight-mod/types";
import { pageModules } from "..";

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 pages = pageModules(require);

return function Moonbase() {
const { Text, TabBar } = require("common_components");

const [selectedTab, setSelectedTab] = React.useState(Object.keys(pages)[0]);

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}
>
{Object.entries(pages).map(([id, page]) => (
<TabBar.Item key={id} id={id} className={TabBarClasses.item}>
{page.name}
</TabBar.Item>
))}
</TabBar>
</div>

{React.createElement(pages[selectedTab].element)}
</>
);
};
};

0 comments on commit f0adc51

Please sign in to comment.