1
+ export default class IndexedDB {
2
+ dbName :string ;
3
+ objectStoreName :string ;
4
+ storeId : string ;
5
+ request :any ;
6
+ constructor ( dbName :string , objectStoreName :string , storeId :string ) {
7
+ this . dbName = dbName ;
8
+ this . objectStoreName = objectStoreName ;
9
+ this . storeId = storeId ;
10
+
11
+ // Open DB
12
+ this . request = indexedDB . open ( dbName , 1 ) ;
13
+ // Create ObjectStore
14
+ this . request . onupgradeneeded = ( ) => {
15
+ const db = this . request . result ;
16
+ if ( ! db . objectStoreNames . contains ( this . objectStoreName ) ) {
17
+ db . createObjectStore ( this . objectStoreName , { keyPath : 'id' } ) ;
18
+ }
19
+ } ;
20
+ this . request . onerror = ( event :any ) => {
21
+ console . log ( `Error opening IndexedDB: ${ event } ` ) ;
22
+ } ;
23
+ }
24
+
25
+ saveContentToDB ( value : Record < string , any > ) {
26
+ return new Promise ( ( resolve ) => {
27
+ const db = this . request . result ;
28
+ const transaction = db . transaction ( [ this . objectStoreName ] , 'readwrite' ) ;
29
+ const store = transaction . objectStore ( this . objectStoreName ) ;
30
+ store . put ( { id : this . storeId , value } ) ;
31
+
32
+ transaction . oncomplete = ( ) => {
33
+ resolve ( 'Content saved to IndexedDB' ) ;
34
+ } ;
35
+ } ) ;
36
+ }
37
+
38
+ loadContentFromDB ( ) {
39
+ return new Promise ( ( resolve , reject ) => {
40
+ this . request . onsuccess = ( ) => {
41
+ const db = this . request . result ;
42
+ const transaction = db . transaction ( [ this . objectStoreName ] , 'readonly' ) ;
43
+ const store = transaction . objectStore ( this . objectStoreName ) ;
44
+ const getRequest = store . get ( 'content' ) ;
45
+ getRequest . onsuccess = ( ) => {
46
+ if ( getRequest . result ) {
47
+ resolve ( getRequest . result . value ) ;
48
+ } else {
49
+ resolve ( undefined )
50
+ }
51
+ } ;
52
+
53
+ getRequest . onerror = ( event :any ) => {
54
+ console . error ( 'Error getting content from IndexedDB:' , event ) ;
55
+ reject ( { status :"error" , message : `'Error getting content from IndexedDB: ${ event } ` } ) ;
56
+ } ;
57
+ } ;
58
+
59
+ this . request . onerror = ( event :any ) => {
60
+ console . error ( 'Error opening IndexedDB:' , event ) ;
61
+ reject ( { status :"error" , message : `Error opening IndexedDB: ${ event } ` } ) ;
62
+ } ;
63
+ } )
64
+ }
65
+ }
0 commit comments