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

View File

@ -389,6 +389,55 @@ Oqtane.Interop = {
behavior: "smooth",
block: "start",
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);
return element.selectionStart;
},
setIndexedDBItem: function (key, value) {
let idb = indexedDB.open("oqtane", 1);
manageIndexedDBItems: async function (action, key, value) {
var 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.put(value, key);
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;
}
},
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");
}
else {
idb.onsuccess = function () {
let transaction = idb.result.transaction("items", "readonly");
let transaction = idb.result.transaction("items", "readwrite");
let collection = transaction.objectStore("items");
let result = collection.get(key);
result.onsuccess = function (e) {
resolve(result.result);
if (action === "put") {
collection.put(value, key);
}
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);
}
}
};