Mam funkcję, która ma zapisywać do IndexedDB natomiast mam chyba problem z wersjami. To znaczy funkcja tworzy bazę jeśli jej nie ma ale jeśli chcę juz tam stworzyć objectStore
to muszę ręcznie zmienić numer na 2
w const request = window.indexedDB.open(databaseName, 1);
, jeśli chcę znowu dodać inny objectStore
, znów muszę zmienić na 3
. W przeciwnym razie dosteję błąd, że objectStore
nie istnieje. Czy ktoś mnie naprowadzi na błąd?
export const addToIndexedDB = (databaseName, objectStoreName, key, value) => {
// Check if the browser supports IndexedDB
console.log('storing in DB')
if (!('indexedDB' in window)) {
console.error('IndexedDB is not supported in this browser.');
return;
}
// Open the database or create one if it doesn't exist
const request = window.indexedDB.open(databaseName, 1);
// Handle database opening or creation errors
request.onerror = function(event) {
console.error('Error opening/creating database:', event.target.errorCode);
};
// Create or upgrade the database object store
request.onupgradeneeded = function(event) {
console.log('on upgrade triggered')
const db = event.target.result;
if (!db.objectStoreNames.contains(objectStoreName)) {
db.createObjectStore(objectStoreName, { keyPath: 'id' });
}
};
// Database opened successfully
request.onsuccess = function(event) {
const db = event.target.result;
// Start a transaction to perform database operations
const transaction = db.transaction([objectStoreName], 'readwrite');
// Get the object store
const objectStore = transaction.objectStore(objectStoreName);
// Create an object representing the key-value pair to be added
const data = { id: key, value: value };
// Add the data to the object store
const addRequest = objectStore.add(data);
// Handle the add request success and error events
addRequest.onsuccess = function() {
console.log('Data added successfully.');
};
addRequest.onerror = function(event) {
console.error('Error adding data:', event.target.error);
};
// Close the transaction once it's done
transaction.oncomplete = function() {
db.close();
};
};
}