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;