this repo has no description

Make the update button

Changed files
+133 -4
packages
core-extensions
src
moonbase
+43 -4
packages/core-extensions/src/moonbase/index.tsx
···
}
};
export const styles = [
-
".moonbase-settings > :first-child { margin-top: 0px; }",
-
"textarea.moonbase-resizeable { resize: vertical }",
-
".moonbase-updates-notice { background-color: #222034; color: #FFFBA6; line-height: unset; height: 36px; }",
-
".moonbase-updates-notice_text-wrapper { display: inline-flex; align-items: center; line-height: 36px; gap: 2px; }"
];
···
}
};
+
const bg = "#222034";
+
const fg = "#FFFBA6";
+
export const styles = [
+
`
+
.moonbase-settings > :first-child {
+
margin-top: 0px;
+
}
+
+
textarea.moonbase-resizeable {
+
resize: vertical
+
}
+
+
.moonbase-updates-notice {
+
background-color: ${bg};
+
color: ${fg};
+
line-height: unset;
+
height: 36px;
+
}
+
+
.moonbase-updates-notice_text-wrapper {
+
display: inline-flex;
+
align-items: center;
+
line-height: 36px;
+
gap: 2px;
+
}
+
+
.moonbase-update-section {
+
background-color: ${bg};
+
--info-help-foreground: ${fg};
+
border: none !important;
+
color: ${fg};
+
+
display: flex;
+
flex-direction: row;
+
justify-content: space-between;
+
}
+
+
.moonbase-update-section > button {
+
color: ${fg};
+
background-color: transparent;
+
border-color: ${fg};
+
}
+
`.trim()
];
+4
packages/core-extensions/src/moonbase/webpackModules/stores.ts
···
this.emitChange();
}
getConfigOption<K extends keyof Config>(key: K): Config[K] {
return this.config[key];
}
···
this.emitChange();
}
+
async updateMoonlight() {
+
await natives.updateMoonlight();
+
}
+
getConfigOption<K extends keyof Config>(key: K): Config[K] {
return this.config[key];
}
+3
packages/core-extensions/src/moonbase/webpackModules/ui/index.tsx
···
import ExtensionsPage from "./extensions";
import ConfigPage from "./config";
const { Divider } = spacepack.findByCode(".forumOrHome]:")[0].exports.Z;
const TitleBarClasses = spacepack.findByCode("iconWrapper:", "children:")[0]
···
))}
</TabBar>
</div>
{React.createElement(pages[subsection].element)}
</>
···
import ExtensionsPage from "./extensions";
import ConfigPage from "./config";
+
import Update from "./update";
const { Divider } = spacepack.findByCode(".forumOrHome]:")[0].exports.Z;
const TitleBarClasses = spacepack.findByCode("iconWrapper:", "children:")[0]
···
))}
</TabBar>
</div>
+
+
<Update />
{React.createElement(pages[subsection].element)}
</>
+83
packages/core-extensions/src/moonbase/webpackModules/ui/update.tsx
···
···
+
import { useStateFromStores } from "@moonlight-mod/wp/discord/packages/flux";
+
import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores";
+
import * as Components from "@moonlight-mod/wp/discord/components/common/index";
+
import React from "@moonlight-mod/wp/react";
+
import spacepack from "@moonlight-mod/wp/spacepack_spacepack";
+
import Flex from "@moonlight-mod/wp/discord/uikit/Flex";
+
+
enum UpdateState {
+
Ready,
+
Working,
+
Installed,
+
Failed
+
}
+
+
const { ThemeDarkIcon, Text, Button } = Components;
+
const Margins = spacepack.require("discord/styles/shared/Margins.css");
+
const HelpMessageClasses = spacepack.findByExports("positive", "iconDiv")[0]
+
.exports;
+
+
const logger = moonlight.getLogger("moonbase/ui/update");
+
+
const strings: Record<UpdateState, string> = {
+
[UpdateState.Ready]: "A new version of moonlight is available",
+
[UpdateState.Working]: "Updating moonlight...",
+
[UpdateState.Installed]: "Updated, restart Discord to apply changes",
+
[UpdateState.Failed]: "Failed to update moonlight, use the installer instead"
+
};
+
+
export default function Update() {
+
const [state, setState] = React.useState(UpdateState.Ready);
+
const { newVersion } = useStateFromStores([MoonbaseSettingsStore], () => ({
+
newVersion: MoonbaseSettingsStore.newVersion
+
}));
+
+
if (newVersion == null) return null;
+
+
// reimpl of HelpMessage but with a custom icon
+
return (
+
<div
+
className={`${Margins.marginBottom20} ${HelpMessageClasses.info} ${HelpMessageClasses.container} moonbase-update-section`}
+
>
+
<Flex direction={Flex.Direction.HORIZONTAL}>
+
<div
+
className={HelpMessageClasses.iconDiv}
+
style={{
+
alignItems: "center"
+
}}
+
>
+
<ThemeDarkIcon
+
size="sm"
+
color="currentColor"
+
className={HelpMessageClasses.icon}
+
/>
+
</div>
+
+
<Text
+
variant="text-sm/medium"
+
color="currentColor"
+
className={HelpMessageClasses.text}
+
>
+
{strings[state]}
+
</Text>
+
</Flex>
+
+
<Button
+
look={Button.Looks.OUTLINED}
+
color={Button.Colors.CUSTOM}
+
size={Button.Sizes.TINY}
+
disabled={state !== UpdateState.Ready}
+
onClick={() => {
+
MoonbaseSettingsStore.updateMoonlight()
+
.then(() => setState(UpdateState.Installed))
+
.catch((e) => {
+
logger.error(e);
+
setState(UpdateState.Failed);
+
});
+
}}
+
>
+
Update
+
</Button>
+
</div>
+
);
+
}