123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- const DB = {
- name: 'mapDB',
- version: 1,
- objName: 'mapAnimationData',
- fidName: 'fidsData'
- }
- function getDB () {
- return new Promise((resolve, reject) => {
- if (DB.db) {
- resolve(DB.db)
- } else {
- let request = indexedDB.open(DB.name, DB.version)
-
- request.onsuccess = e => {
- DB.db = e.target.result
- resolve(DB.db)
- }
- request.onerror = reject
- request.onupgradeneeded = e => {
- console.log(`${DB.name} versiton changed to ${DB.version}`)
- initDB(e.target.result)
- }
- }
- })
- }
- function close () {
- if (DB.db) {
- DB.db.close()
- }
- }
- function deleteDB () {
- indexedDB.deleteDatabase(DB.name)
- }
- function initDB (db) {
- let objectStore = db.createObjectStore(DB.objName, {
- keyPath: 'id',
- autoIncrement: true
- })
-
- objectStore.createIndex('id', 'id', {unique: true})
- objectStore.createIndex('type', 'type');
- objectStore.createIndex('features', 'features');
- objectStore = db.createObjectStore(DB.fidName, {
- keyPath: 'id',
- autoIncrement: true
- })
- objectStore.createIndex('fid', 'fids')
- }
- async function update (newItem, tab = DB.objName) {
- let request = (await getDB())
- .transaction([tab], "readwrite")
- .objectStore(tab)
- .put(newItem)
- return new Promise((resolve, reject) => {
- request.onsuccess = e => resolve(e.target.result)
- request.onerror = reject
- })
- }
- async function add (newItem, tab = DB.objName) {
- let request = (await getDB())
- .transaction([tab], "readwrite")
- .objectStore(tab)
- .add(newItem)
-
- return new Promise((resolve, reject) => {
- request.onsuccess = e => resolve(e.target.result)
- request.onerror = reject
- })
- }
- async function get(id, tab = DB.objName) {
- let request = (await getDB())
- .transaction([tab])
- .objectStore(tab)
- .get(id)
- return new Promise((resolve, reject) => {
- request.onsuccess = e => {
- if (request.result) {
- resolve(request.result)
- } else {
- resolve()
- }
- }
- request.onerror = e => {
- reject
- }
- })
- }
- async function clear(tab = DB.objName) {
- let request = (await getDB())
- .transaction([tab], 'readwrite')
- .objectStore(tab)
- .clear()
- return new Promise((resolve, reject) => {
- request.onsuccess = resolve
- request.onerror = reject
- })
- }
- clear(DB.fidName).then(resolve => {
- add({id: 1, fids: []}, DB.fidName)
- })
- export {
- get,
- add,
- update,
- clear
- }
|