this repo has no description
1import { useStateFromStores } from "@moonlight-mod/wp/discord/packages/flux";
2import { MoonbaseSettingsStore } from "@moonlight-mod/wp/moonbase_stores";
3import * as Components from "@moonlight-mod/wp/discord/components/common/index";
4import React from "@moonlight-mod/wp/react";
5import { UpdateState } from "../../types";
6import HelpMessage from "./HelpMessage";
7
8const { ThemeDarkIcon, Button } = Components;
9
10const logger = moonlight.getLogger("moonbase/ui/update");
11
12const strings: Record<UpdateState, string> = {
13 [UpdateState.Ready]: "A new version of moonlight is available.",
14 [UpdateState.Working]: "Updating moonlight...",
15 [UpdateState.Installed]: "Updated. Restart Discord to apply changes.",
16 [UpdateState.Failed]: "Failed to update moonlight. Please use the installer instead."
17};
18
19export default function Update() {
20 const [state, setState] = React.useState(UpdateState.Ready);
21 const newVersion = useStateFromStores([MoonbaseSettingsStore], () => MoonbaseSettingsStore.newVersion);
22
23 if (newVersion == null) return null;
24
25 return (
26 <HelpMessage text={strings[state]} className="moonbase-update-section" icon={ThemeDarkIcon}>
27 <div className="moonbase-help-message-buttons">
28 {state === UpdateState.Installed && (
29 <Button
30 look={Button.Looks.OUTLINED}
31 color={Button.Colors.CUSTOM}
32 size={Button.Sizes.TINY}
33 onClick={() => {
34 MoonbaseSettingsStore.restartDiscord();
35 }}
36 >
37 Restart Discord
38 </Button>
39 )}
40
41 <Button
42 look={Button.Looks.OUTLINED}
43 color={Button.Colors.CUSTOM}
44 size={Button.Sizes.TINY}
45 disabled={state !== UpdateState.Ready}
46 onClick={() => {
47 setState(UpdateState.Working);
48
49 MoonbaseSettingsStore.updateMoonlight()
50 .then(() => setState(UpdateState.Installed))
51 .catch((e) => {
52 logger.error(e);
53 setState(UpdateState.Failed);
54 });
55 }}
56 >
57 Update
58 </Button>
59 </div>
60 </HelpMessage>
61 );
62}