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 spacepack from "@moonlight-mod/wp/spacepack_spacepack"; 6import Flex from "@moonlight-mod/wp/discord/uikit/Flex"; 7import { UpdateState } from "../../types"; 8 9const { ThemeDarkIcon, Text, Button } = Components; 10const Margins = spacepack.require("discord/styles/shared/Margins.css"); 11const HelpMessageClasses = spacepack.findByExports("positive", "iconDiv")[0].exports; 12 13const logger = moonlight.getLogger("moonbase/ui/update"); 14 15const strings: Record<UpdateState, string> = { 16 [UpdateState.Ready]: "A new version of moonlight is available.", 17 [UpdateState.Working]: "Updating moonlight...", 18 [UpdateState.Installed]: "Updated. Restart Discord to apply changes.", 19 [UpdateState.Failed]: "Failed to update moonlight. Please use the installer instead." 20}; 21 22export default function Update() { 23 const [state, setState] = React.useState(UpdateState.Ready); 24 const newVersion = useStateFromStores([MoonbaseSettingsStore], () => MoonbaseSettingsStore.newVersion); 25 26 if (newVersion == null) return null; 27 28 // reimpl of HelpMessage but with a custom icon 29 return ( 30 <div 31 className={`${Margins.marginBottom20} ${HelpMessageClasses.info} ${HelpMessageClasses.container} moonbase-update-section`} 32 > 33 <Flex direction={Flex.Direction.HORIZONTAL}> 34 <div 35 className={HelpMessageClasses.iconDiv} 36 style={{ 37 alignItems: "center" 38 }} 39 > 40 <ThemeDarkIcon size="sm" color="currentColor" className={HelpMessageClasses.icon} /> 41 </div> 42 43 <Text variant="text-sm/medium" color="currentColor" className={HelpMessageClasses.text}> 44 {strings[state]} 45 </Text> 46 </Flex> 47 48 <div className="moonbase-update-section-buttons"> 49 {state === UpdateState.Installed && ( 50 <Button 51 look={Button.Looks.OUTLINED} 52 color={Button.Colors.CUSTOM} 53 size={Button.Sizes.TINY} 54 onClick={() => window.location.reload()} 55 > 56 Restart Discord 57 </Button> 58 )} 59 60 <Button 61 look={Button.Looks.OUTLINED} 62 color={Button.Colors.CUSTOM} 63 size={Button.Sizes.TINY} 64 disabled={state !== UpdateState.Ready} 65 onClick={() => { 66 setState(UpdateState.Working); 67 68 MoonbaseSettingsStore.updateMoonlight() 69 .then(() => setState(UpdateState.Installed)) 70 .catch((e) => { 71 logger.error(e); 72 setState(UpdateState.Failed); 73 }); 74 }} 75 > 76 Update 77 </Button> 78 </div> 79 </div> 80 ); 81}