Added progress indicator to map data loading

This commit is contained in:
Mitchell McCaffrey
2020-06-28 12:28:58 +10:00
parent a370b8e11d
commit bf022e2686
6 changed files with 63 additions and 9 deletions

View File

@@ -1,4 +1,5 @@
import React, { useState } from "react";
import { omit, isEmpty } from "../helpers/shared";
const MapLoadingContext = React.createContext();
@@ -13,12 +14,36 @@ export function MapLoadingProvider({ children }) {
setLoadingAssetCount((prevLoadingAssets) => prevLoadingAssets - 1);
}
const [assetProgress, setAssetProgress] = useState({});
function assetProgressUpdate({ id, count, total }) {
if (count === total) {
setAssetProgress(omit(assetProgress, [id]));
} else {
setAssetProgress((prevAssetProgress) => ({
...prevAssetProgress,
[id]: { count, total },
}));
}
}
const isLoading = loadingAssetCount > 0;
let loadingProgress = null;
if (!isEmpty(assetProgress)) {
let total = 0;
let count = 0;
for (let progress of Object.values(assetProgress)) {
total += progress.total;
count += progress.count;
}
loadingProgress = count / total;
}
const value = {
assetLoadStart,
assetLoadFinish,
isLoading,
assetProgressUpdate,
loadingProgress,
};
return (