From d79c80459150e47b92eb6d2cfceda8e21e227f60 Mon Sep 17 00:00:00 2001 From: MoltenCoffee <13321277+MoltenCoffee@users.noreply.github.com> Date: Sat, 26 Sep 2020 13:01:42 +0200 Subject: [PATCH 1/4] Add hook to check version with GitHub API --- hooks/useVersion.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 hooks/useVersion.js diff --git a/hooks/useVersion.js b/hooks/useVersion.js new file mode 100644 index 00000000..76aefadc --- /dev/null +++ b/hooks/useVersion.js @@ -0,0 +1,28 @@ +import { useMemo } from 'react'; +import useFetch from 'hooks/useFetch'; + +export default function useVersion() { + const { data } = useMemo(() => + useFetch('https://api.github.com/repos/mikecao/umami/releases/latest'), + ); + + if (!data || !data['tag_name']) return null; + + const latest = data['tag_name'].startsWith('v') ? data['tag_name'].slice(1) : data['tag_name']; + const current = process.env.VERSION; + + if (latest === current) return null; + + const latestArray = latest.split('.'); + const currentArray = current.split('.'); + + for (let i = 0; i < 3; i++) { + if (Number(latestArray[i]) > Number(currentArray[i])) + return { + current: current, + latest: latest, + }; + } + + return null; +} From 4f248342659ed1af4e0d2cf725f270c1aa8744a1 Mon Sep 17 00:00:00 2001 From: MoltenCoffee <13321277+MoltenCoffee@users.noreply.github.com> Date: Sat, 26 Sep 2020 13:03:13 +0200 Subject: [PATCH 2/4] Create banner to display when new version is available --- components/common/UpdateNotice.js | 36 +++++++++++++++++++++++ components/common/UpdateNotice.module.css | 15 ++++++++++ 2 files changed, 51 insertions(+) create mode 100644 components/common/UpdateNotice.js create mode 100644 components/common/UpdateNotice.module.css diff --git a/components/common/UpdateNotice.js b/components/common/UpdateNotice.js new file mode 100644 index 00000000..a0d5f512 --- /dev/null +++ b/components/common/UpdateNotice.js @@ -0,0 +1,36 @@ +import React from 'react'; +import { FormattedMessage } from 'react-intl'; +import useVersion from '../../hooks/useVersion'; +import Link from '../common/Link'; +import styles from './UpdateNotice.module.css'; + +export default function UpdateNotice() { + const versions = useVersion(); + console.log(versions); + if (!versions) return null; + + const { current, latest } = versions; + + return ( +