Merge pull request #2417 from sbwalker/dev

refactor IndexedDB interop functions
This commit is contained in:
Shaun Walker 2022-09-13 07:44:10 -04:00 committed by GitHub
commit c0f4069a9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 90 additions and 72 deletions

View File

@ -316,8 +316,8 @@ namespace Oqtane.UI
try try
{ {
_jsRuntime.InvokeVoidAsync( _jsRuntime.InvokeVoidAsync(
"Oqtane.Interop.setIndexedDBItem", "Oqtane.Interop.manageIndexedDBItems",
key, value); "put", key, value);
return Task.CompletedTask; return Task.CompletedTask;
} }
catch catch
@ -331,8 +331,8 @@ namespace Oqtane.UI
try try
{ {
return await _jsRuntime.InvokeAsync<T>( return await _jsRuntime.InvokeAsync<T>(
"Oqtane.Interop.getIndexedDBItem", "Oqtane.Interop.manageIndexedDBItems",
key); "get", key, null);
} }
catch catch
{ {
@ -350,7 +350,8 @@ namespace Oqtane.UI
try try
{ {
var items = await _jsRuntime.InvokeAsync<JsonDocument>( var items = await _jsRuntime.InvokeAsync<JsonDocument>(
"Oqtane.Interop.getIndexedDBKeys"); "Oqtane.Interop.manageIndexedDBItems",
"getallkeys", null, null);
if (!string.IsNullOrEmpty(contains)) if (!string.IsNullOrEmpty(contains))
{ {
return items.Deserialize<List<string>>() return items.Deserialize<List<string>>()
@ -372,8 +373,8 @@ namespace Oqtane.UI
try try
{ {
_jsRuntime.InvokeVoidAsync( _jsRuntime.InvokeVoidAsync(
"Oqtane.Interop.removeIndexedDBItem", "Oqtane.Interop.manageIndexedDBItems",
key); "delete", key, null);
return Task.CompletedTask; return Task.CompletedTask;
} }
catch catch

View File

@ -389,6 +389,55 @@ Oqtane.Interop = {
behavior: "smooth", behavior: "smooth",
block: "start", block: "start",
inline: "nearest" inline: "nearest"
}); });
}
},
getCaretPosition: function (id) {
var element = document.getElementById(id);
return element.selectionStart;
},
manageIndexedDBItems: async function (action, key, value) {
var idb = indexedDB.open("oqtane", 1);
idb.onupgradeneeded = function () {
let db = idb.result;
db.createObjectStore("items");
}
if (action.startsWith("get")) {
let request = new Promise((resolve) => {
idb.onsuccess = function () {
let transaction = idb.result.transaction("items", "readonly");
let collection = transaction.objectStore("items");
let result;
if (action === "get") {
result = collection.get(key);
}
if (action === "getallkeys") {
result = collection.getAllKeys();
}
result.onsuccess = function (e) {
resolve(result.result);
}
}
});
let result = await request;
return result;
}
else {
idb.onsuccess = function () {
let transaction = idb.result.transaction("items", "readwrite");
let collection = transaction.objectStore("items");
if (action === "put") {
collection.put(value, key);
}
if (action === "delete") {
collection.delete(key);
}
}
}
} }
}}; };

View File

@ -396,80 +396,48 @@ Oqtane.Interop = {
var element = document.getElementById(id); var element = document.getElementById(id);
return element.selectionStart; return element.selectionStart;
}, },
setIndexedDBItem: function (key, value) { manageIndexedDBItems: async function (action, key, value) {
let idb = indexedDB.open("oqtane", 1); var idb = indexedDB.open("oqtane", 1);
idb.onupgradeneeded = function () { idb.onupgradeneeded = function () {
let db = idb.result; let db = idb.result;
db.createObjectStore("items"); db.createObjectStore("items");
} }
idb.onsuccess = function () { if (action.startsWith("get")) {
let transaction = idb.result.transaction("items", "readwrite"); let request = new Promise((resolve) => {
let collection = transaction.objectStore("items") idb.onsuccess = function () {
collection.put(value, key); let transaction = idb.result.transaction("items", "readonly");
let collection = transaction.objectStore("items");
let result;
if (action === "get") {
result = collection.get(key);
}
if (action === "getallkeys") {
result = collection.getAllKeys();
}
result.onsuccess = function (e) {
resolve(result.result);
}
}
});
let result = await request;
return result;
} }
}, else {
getIndexedDBItem: async function (key) {
let request = new Promise((resolve) => {
let idb = indexedDB.open("oqtane", 1);
idb.onupgradeneeded = function () {
let db = idb.result;
db.createObjectStore("items");
}
idb.onsuccess = function () { idb.onsuccess = function () {
let transaction = idb.result.transaction("items", "readonly"); let transaction = idb.result.transaction("items", "readwrite");
let collection = transaction.objectStore("items"); let collection = transaction.objectStore("items");
let result = collection.get(key); if (action === "put") {
collection.put(value, key);
result.onsuccess = function (e) { }
resolve(result.result); if (action === "delete") {
collection.delete(key);
} }
} }
});
let result = await request;
return result;
},
getIndexedDBKeys: async function () {
let request = new Promise((resolve) => {
let idb = indexedDB.open("oqtane", 1);
idb.onupgradeneeded = function () {
let db = idb.result;
db.createObjectStore("items");
}
idb.onsuccess = function () {
let transaction = idb.result.transaction("items", "readonly");
let collection = transaction.objectStore("items");
let result = collection.getAllKeys();
result.onsuccess = function (e) {
resolve(result.result);
}
}
});
let result = await request;
return result;
},
removeIndexedDBItem: function (key) {
let idb = indexedDB.open("oqtane", 1);
idb.onupgradeneeded = function () {
let db = idb.result;
db.createObjectStore("items");
}
idb.onsuccess = function () {
let transaction = idb.result.transaction("items", "readwrite");
let collection = transaction.objectStore("items");
collection.delete(key);
} }
} }
}; };