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