34 lines
1.1 KiB
TypeScript
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];
|
|
}
|