diff --git a/Oqtane.Client/UI/Interop.cs b/Oqtane.Client/UI/Interop.cs index 9863c71d..e3d6d76d 100644 --- a/Oqtane.Client/UI/Interop.cs +++ b/Oqtane.Client/UI/Interop.cs @@ -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( - "Oqtane.Interop.getIndexedDBItem", - key); + "Oqtane.Interop.manageIndexedDBItems", + "get", key, null); } catch { @@ -350,7 +350,8 @@ namespace Oqtane.UI try { var items = await _jsRuntime.InvokeAsync( - "Oqtane.Interop.getIndexedDBKeys"); + "Oqtane.Interop.manageIndexedDBItems", + "getallkeys", null, null); if (!string.IsNullOrEmpty(contains)) { return items.Deserialize>() @@ -372,8 +373,8 @@ namespace Oqtane.UI try { _jsRuntime.InvokeVoidAsync( - "Oqtane.Interop.removeIndexedDBItem", - key); + "Oqtane.Interop.manageIndexedDBItems", + "delete", key, null); return Task.CompletedTask; } catch diff --git a/Oqtane.Maui/wwwroot/js/interop.js b/Oqtane.Maui/wwwroot/js/interop.js index b62c006c..8a677952 100644 --- a/Oqtane.Maui/wwwroot/js/interop.js +++ b/Oqtane.Maui/wwwroot/js/interop.js @@ -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); + } + } + } } -}}; +}; diff --git a/Oqtane.Server/wwwroot/js/interop.js b/Oqtane.Server/wwwroot/js/interop.js index 5c33c2ea..8a677952 100644 --- a/Oqtane.Server/wwwroot/js/interop.js +++ b/Oqtane.Server/wwwroot/js/interop.js @@ -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); } } };