refactor storage layer

This commit is contained in:
Ren Amamiya
2023-08-14 18:15:58 +07:00
parent 823b203b73
commit adca37223c
7 changed files with 294 additions and 75 deletions

View File

@@ -0,0 +1,50 @@
import Database from '@tauri-apps/plugin-sql';
import { PropsWithChildren, createContext, useContext, useEffect, useState } from 'react';
import { LumeStorage } from '@libs/storage/instance';
interface StorageContext {
db: LumeStorage;
}
const StorageContext = createContext<StorageContext>({
db: undefined,
});
const StorageProvider = ({ children }: PropsWithChildren<object>) => {
const [db, setDB] = useState<LumeStorage>(undefined);
async function initLumeStorage() {
const sqlite = await Database.load('sqlite:lume.db');
const lumeStorage = new LumeStorage(sqlite);
setDB(lumeStorage);
}
useEffect(() => {
if (!db) initLumeStorage();
return () => {
db.close();
};
}, []);
return (
<StorageContext.Provider
value={{
db,
}}
>
{children}
</StorageContext.Provider>
);
};
const useStorage = () => {
const context = useContext(StorageContext);
if (context === undefined) {
throw new Error('Storage not found');
}
return context;
};
export { StorageProvider, useStorage };