colouring-montreal/app/src/frontend/api-data/use-revision.tsx
2021-08-23 02:26:58 +01:00

34 lines
1.1 KiB
TypeScript

import { useCallback, useEffect, useState } from 'react';
import { apiGet } from '../apiHelpers';
export function useRevisionId(initialRevisionId: string): [string, (newId: string) => void, () => void] {
const [revisionId, setRevisionId] = useState(initialRevisionId ?? '0');
const [isOld, setIsOld] = useState(initialRevisionId == undefined);
const updateRevisionId = useCallback(
(newId: string) => newId != undefined && +newId > +revisionId && setRevisionId(newId),
[revisionId]
);
useEffect(() => {
async function fetchLatestRevision() {
try {
const { revision_id: latestRevisionId } = await apiGet(`/api/buildings/revision`);
updateRevisionId(latestRevisionId);
} catch(err) {
console.error(err);
}
setIsOld(false);
}
if(isOld) {
fetchLatestRevision();
}
}, [isOld]);
const reloadRevisionId = useCallback(() => setIsOld(true), []);
return [revisionId, updateRevisionId, reloadRevisionId];
}