desktop: load db before app render

This commit is contained in:
Abdullah Atta
2023-07-03 06:45:57 +05:00
committed by Abdullah Atta
parent a967482c4f
commit a971a29ff2
2 changed files with 20 additions and 16 deletions

View File

@@ -28,20 +28,21 @@ if (import.meta.env.NODE_ENV === "production") {
}
const memory = {
isAppLoaded: false
isDatabaseLoaded: false
};
export default function useDatabase(persistence: "db" | "memory" = "db") {
const [isAppLoaded, setIsAppLoaded] = useState(memory.isAppLoaded);
const [isAppLoaded, setIsAppLoaded] = useState(memory.isDatabaseLoaded);
useEffect(() => {
if (memory.isAppLoaded) return;
(async () => {
await initializeDatabase(persistence);
setIsAppLoaded(true);
memory.isAppLoaded = true;
})();
loadDatabase(persistence).then(() => setIsAppLoaded(true));
}, [persistence]);
return [isAppLoaded];
}
export async function loadDatabase(persistence: "db" | "memory" = "db") {
if (memory.isDatabaseLoaded) return;
await initializeDatabase(persistence);
memory.isDatabaseLoaded = true;
}

View File

@@ -26,6 +26,7 @@ import Config from "./utils/config";
import { isTesting } from "./utils/platform";
import { initalizeLogger, logger } from "./utils/logger";
import { AuthProps } from "./views/auth";
import { loadDatabase } from "./hooks/use-database";
initalizeLogger();
@@ -155,6 +156,8 @@ async function renderApp() {
} = getRoute();
if (serviceWorkerWhitelist.includes(path)) await initializeServiceWorker();
if (import.meta.env.REACT_APP_PLATFORM === "desktop")
await loadDatabase("db");
logger.measure("app render");
@@ -171,13 +174,13 @@ async function renderApp() {
}
async function initializeServiceWorker() {
logger.info("Initializing service worker...");
const serviceWorker = await import("./service-worker-registration");
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
if (import.meta.env.REACT_APP_PLATFORM !== "desktop") {
logger.info("Initializing service worker...");
const serviceWorker = await import("./service-worker-registration");
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.register({
onUpdate: async (registration: ServiceWorkerRegistration) => {
if (!registration.waiting) return;
@@ -191,7 +194,7 @@ async function initializeServiceWorker() {
}
});
// window.addEventListener("beforeinstallprompt", () => showInstallNotice());
} else serviceWorker.unregister();
}
}
function shouldSkipInitiation() {