/ hooks / useUpdateNotification.ts
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  }