diff --git a/renderer/pages/_app.js b/renderer/pages/_app.js
index b4dcf8dc8..8dfe6caff 100644
--- a/renderer/pages/_app.js
+++ b/renderer/pages/_app.js
@@ -1,6 +1,7 @@
import { StoreProvider } from 'providers/Store';
import { HotkeysProvider } from 'providers/Hotkeys';
import { AuthProvider } from 'providers/Auth';
+import { AppProvider } from 'providers/App';
import ReduxStore from 'providers/ReduxStore';
import { Provider } from 'react-redux';
@@ -25,11 +26,13 @@ function MyApp({ Component, pageProps }) {
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/renderer/providers/App/index.js b/renderer/providers/App/index.js
new file mode 100644
index 000000000..bf98708bc
--- /dev/null
+++ b/renderer/providers/App/index.js
@@ -0,0 +1,17 @@
+import React from 'react';
+import useIdb from './useIdb';
+
+export const AppContext = React.createContext();
+
+export const AppProvider = props => {
+ // boot idb
+ useIdb();
+
+ return (
+
+ {props.children}
+
+ );
+};
+
+export default AppProvider;
diff --git a/renderer/providers/App/useIdb.js b/renderer/providers/App/useIdb.js
new file mode 100644
index 000000000..9a1cc81e7
--- /dev/null
+++ b/renderer/providers/App/useIdb.js
@@ -0,0 +1,30 @@
+import { useEffect } from 'react';
+import { openDB } from 'idb';
+import { idbConnectionReady } from 'providers/ReduxStore/slices/app'
+import { useDispatch } from 'react-redux';
+
+const useIdb = () => {
+ const dispatch = useDispatch();
+
+ useEffect(() => {
+ let dbName = `grafnode`;
+ let connection = openDB(dbName, 1, {
+ upgrade(db, oldVersion, newVersion, transaction) {
+ switch(oldVersion) {
+ case 0:
+ const collectionStore = db.createObjectStore('collection', { keyPath: 'uid' });
+ collectionStore.createIndex('transactionIdIndex', 'transaction_id');
+ }
+ }
+ });
+
+ connection
+ .then(() => {
+ window.__idb = connection;
+ dispatch(idbConnectionReady());
+ })
+ .catch((err) => console.log(err));
+ }, []);
+};
+
+export default useIdb;
\ No newline at end of file
diff --git a/renderer/providers/ReduxStore/slices/app.js b/renderer/providers/ReduxStore/slices/app.js
index 24fc50934..82dc856f8 100644
--- a/renderer/providers/ReduxStore/slices/app.js
+++ b/renderer/providers/ReduxStore/slices/app.js
@@ -1,6 +1,7 @@
import { createSlice } from '@reduxjs/toolkit'
const initialState = {
+ idbConnectionReady: false,
leftMenuBarOpen: true,
leftSidebarWidth: 270
};
@@ -12,10 +13,13 @@ export const appSlice = createSlice({
toggleLeftMenuBar: (state) => {
state.leftMenuBarOpen = !state.leftMenuBarOpen;
state.leftSidebarWidth = state.leftMenuBarOpen ? 270 : 222;
+ },
+ idbConnectionReady: (state) => {
+ state.idbConnectionReady = true;
}
}
});
-export const { toggleLeftMenuBar } = appSlice.actions;
+export const { toggleLeftMenuBar, idbConnectionReady } = appSlice.actions;
export default appSlice.reducer;