@ai-growth/nextjs
Version:
Seamlessly integrate Sanity CMS with Next.js applications for automated blog routing and rendering
38 lines (37 loc) • 1.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CacheProvider = void 0;
exports.useCache = useCache;
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = require("react");
const cache_manager_1 = require("../utils/cache-manager");
const CacheContext = (0, react_1.createContext)(null);
const CacheProvider = ({ config, enabled = true, children, }) => {
const [cacheManager] = (0, react_1.useState)(() => {
return config ? new cache_manager_1.CacheManager(config) : cache_manager_1.defaultCacheManager;
});
const [metrics, setMetrics] = (0, react_1.useState)(() => cacheManager.getMetrics());
const refreshMetrics = (0, react_1.useCallback)(() => {
setMetrics(cacheManager.getMetrics());
}, [cacheManager]);
const clearCache = (0, react_1.useCallback)(async () => {
await cacheManager.clear();
refreshMetrics();
}, [cacheManager, refreshMetrics]);
const contextValue = {
cacheManager,
metrics,
enabled,
refreshMetrics,
clearCache,
};
return ((0, jsx_runtime_1.jsx)(CacheContext.Provider, { value: contextValue, children: children }));
};
exports.CacheProvider = CacheProvider;
function useCache() {
const context = (0, react_1.useContext)(CacheContext);
if (!context) {
throw new Error('useCache must be used within a CacheProvider');
}
return context;
}