Operacja "stwórz lub aktualizuj" IndexedDb

0

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();
    };
  };
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1