Tavenem.Blazor.IndexedDB 2.0.1

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package Tavenem.Blazor.IndexedDB --version 2.0.1                
NuGet\Install-Package Tavenem.Blazor.IndexedDB -Version 2.0.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Tavenem.Blazor.IndexedDB" Version="2.0.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Tavenem.Blazor.IndexedDB --version 2.0.1                
#r "nuget: Tavenem.Blazor.IndexedDB, 2.0.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Tavenem.Blazor.IndexedDB as a Cake Addin
#addin nuget:?package=Tavenem.Blazor.IndexedDB&version=2.0.1

// Install Tavenem.Blazor.IndexedDB as a Cake Tool
#tool nuget:?package=Tavenem.Blazor.IndexedDB&version=2.0.1                

build NuGet downloads

Tavenem.Blazor.IndexedDB

Tavenem.Blazor.IndexedDB is a Razor class library (RCL) containing a Razor component. It grants managed access to the IndexedDB API.

It uses the idb javascript library by Jake Archibald, and implements the IDataStore interface from the Tavenem DataStore library.

Installation

Tavenem.Blazor.IndexedDB is available as a NuGet package.

Use

  1. Construct an IndexedDb object to define the characteristics of your database.

    // simple
    var db = new IndexedDb("myDatabaseName", 1);
    
    // all options
    var db = new IndexedDb<int>(
        databaseName: "myDatabaseName",
        version: 2,
        storeName: "valueStore");
    

    This object can be a static instance, or you can construct instances dynamically as needed.

  2. Call AddIndexedDb(db) with an IndexedDb instance, or AddIndexedDb(provider => GetMyDatabase()) with a function that supplies one through dependency injection.

    Optional: you may also supply a customized instance of JsonSerializerOptions to control the serialization of your data items. If you do not choose to do so, the default Blazor options will be used, which are sufficient for most POCO objects, and optimizes the interop with the JavaScript layer.

  3. Inject the IndexedDbService instance in a component.

  4. Call the StoreItemAsync<T>, GetItemAsync<T>, and RemoveItemAsync<T> methods to work with strongly-typed data items.

    class Item : IIdItem
    {
        public string Id { get; set; }
        public string? Value { get; set; }
    }
    
    var item = new Item
    {
        Id = "1",
        Value = "Hello, World!",
    };
    
    await IndexedDbService.StoreItemAsync(item);
    
    item.Value = "Goodbye!";
    await IndexedDbService.StoreItemAsync(item);
    
    var fetchedItem = await IndexedDbService.GetItemAsync<Item>(item.Id);
    // fetchedItem is an Item instance: item.Value = "Goodbye!"
    
    await IndexedDbService.RemoveItemAsync(item);
    
    fetchedItem = await IndexedDbService.GetItemAsync<Item>(item.Id);
    // fetchedItem is null
    
  5. Call the Query<T> method to obtain an IDataStoreQueryable<T>. IDataStoreQueryable<T> is similar to IQueryable<T>, and can be used to make queries against the data source.

    await foreach (var item in IndexedDbService.Query().AsAsyncEnumerable())
    {
        Console.WriteLine(item.Value);
    }
    
    var helloCount = await IndexedDbService
        .Query()
        .Select(x => x.Value != null && x.Value.Contains("Hello"))
        .CountAsync();
    
  6. Call the ClearAsync, CountAsync, DeleteDatabaseAsync, and GetAllAsync<T> methods to work with the full database.

    await IndexedDbService.StoreItemAsync(item);
    
    var count = await IndexedDbService.CountAsync();
    // count = 1
    
    var items = await IndexedDbService.GetAllAsync<Item>();
    // items is an array of Items with Length 1
    
    await IndexedDbService.ClearAsync();
    count = await IndexedDbService.CountAsync();
    // count = 0
    
    await IndexedDbService.DeleteDatabaseAsync();
    // the database has been removed (or will be, after all connections are closed)
    

Roadmap

New versions of Tavenem.IndexedDb should be expected whenever the API surface of the Tavenem DataStore library receives an update.

Other updates to resolve bugs or add new features may occur at any time.

Contributing

Contributions are always welcome. Please carefully read the contributing document to learn more before submitting issues or pull requests.

Code of conduct

Please read the code of conduct before engaging with our community, including but not limited to submitting or replying to an issue or pull request.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.1.4 3 11/21/2024
4.0.2 885 6/30/2024
3.0.2 733 3/20/2024
2.3.4 136 3/5/2024
2.2.4 130 2/12/2024
2.1.2 195 11/29/2023
2.0.3-preview1 188 12/4/2022
2.0.1 124 11/27/2023
1.0.0 587 12/8/2021