useUpdateNotification.ts
1 import { useState } from 'react' 2 import { major, minor, patch } from 'semver' 3 4 export function getSemverPart(version: string): string { 5 return `${major(version, { loose: true })}.${minor(version, { loose: true })}.${patch(version, { loose: true })}` 6 } 7 8 export function shouldShowUpdateNotification( 9 updatedVersion: string, 10 lastNotifiedSemver: string | null, 11 ): boolean { 12 const updatedSemver = getSemverPart(updatedVersion) 13 return updatedSemver !== lastNotifiedSemver 14 } 15 16 export function useUpdateNotification( 17 updatedVersion: string | null | undefined, 18 initialVersion: string = MACRO.VERSION, 19 ): string | null { 20 const [lastNotifiedSemver, setLastNotifiedSemver] = useState<string | null>( 21 () => getSemverPart(initialVersion), 22 ) 23 24 if (!updatedVersion) { 25 return null 26 } 27 28 const updatedSemver = getSemverPart(updatedVersion) 29 if (updatedSemver !== lastNotifiedSemver) { 30 setLastNotifiedSemver(updatedSemver) 31 return updatedSemver 32 } 33 return null 34 }