react-indexeddb-kit
Version:
A TypeScript-based React IndexedDB wrapper with CRUD operations.
50 lines (49 loc) • 2.28 kB
JavaScript
;
"use client";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReactIndexDBProvider = ReactIndexDBProvider;
exports.useReactIndexDB = useReactIndexDB;
const jsx_runtime_1 = require("react/jsx-runtime");
// src/context/ReactIndexDBProvider.tsx
const react_1 = require("react");
const react_indexdb_client_1 = require("../core/react-indexdb-client");
// Create the context
const ReactIndexDBContext = (0, react_1.createContext)(null);
// Provider component
function ReactIndexDBProvider({ children, dbName, schema, }) {
const [client, setClient] = (0, react_1.useState)(null);
const [error, setError] = (0, react_1.useState)(null);
(0, react_1.useEffect)(() => {
const initDB = () => __awaiter(this, void 0, void 0, function* () {
try {
const db = new react_indexdb_client_1.ReactIndexDBClient(dbName, schema);
yield db.connect();
setClient(db);
}
catch (err) {
setError(err instanceof Error
? err
: new Error("Failed to initialize DB"));
}
});
initDB();
}, [dbName, schema]);
return ((0, jsx_runtime_1.jsx)(ReactIndexDBContext.Provider, { value: { client, error }, children: children }));
}
// Custom hook to use the ReactIndexDB context
function useReactIndexDB() {
const context = (0, react_1.useContext)(ReactIndexDBContext);
if (!context) {
throw new Error("useReactIndexDB must be used within a ReactIndexDBProvider");
}
return context;
}