Files
automatisch/packages/web/src/hooks/useVersion.ts
2023-08-28 20:44:55 +00:00

35 lines
896 B
TypeScript

import { useQuery } from '@apollo/client';
import { compare } from 'compare-versions';
import { HEALTHCHECK } from 'graphql/queries/healthcheck';
import useNotifications from 'hooks/useNotifications';
type TVersionInfo = {
version: string;
newVersionCount: number;
};
export default function useVersion(): TVersionInfo {
const { notifications } = useNotifications();
const { data } = useQuery(HEALTHCHECK, { fetchPolicy: 'cache-and-network' });
const version = data?.healthcheck.version;
const newVersionCount = notifications.reduce((count, notification) => {
if (!version) return 0;
// an unexpectedly invalid version would throw and thus, try-catch.
try {
const isNewer = compare(version, notification.name, '<');
return isNewer ? count + 1 : count;
} catch {
return count;
}
}, 0);
return {
version,
newVersionCount,
};
}