Skip to content

Commit

Permalink
Merge pull request #2417 from sbwalker/dev
Browse files Browse the repository at this point in the history
refactor IndexedDB interop functions
  • Loading branch information
sbwalker authored Sep 13, 2022
2 parents 7dd2109 + 6543528 commit c0f4069
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 69 deletions.
15 changes: 8 additions & 7 deletions Oqtane.Client/UI/Interop.cs
Original file line number Diff line number Diff line change
Expand Up @@ -316,8 +316,8 @@ public Task SetIndexedDBItem(string key, object value)
try
{
_jsRuntime.InvokeVoidAsync(
"Oqtane.Interop.setIndexedDBItem",
key, value);
"Oqtane.Interop.manageIndexedDBItems",
"put", key, value);
return Task.CompletedTask;
}
catch
Expand All @@ -331,8 +331,8 @@ public async Task<T> GetIndexedDBItem<T>(string key)
try
{
return await _jsRuntime.InvokeAsync<T>(
"Oqtane.Interop.getIndexedDBItem",
key);
"Oqtane.Interop.manageIndexedDBItems",
"get", key, null);
}
catch
{
Expand All @@ -350,7 +350,8 @@ public async Task<List<string>> GetIndexedDBKeys(string contains)
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>>()
Expand All @@ -372,8 +373,8 @@ public Task RemoveIndexedDBItem(string key)
try
{
_jsRuntime.InvokeVoidAsync(
"Oqtane.Interop.removeIndexedDBItem",
key);
"Oqtane.Interop.manageIndexedDBItems",
"delete", key, null);
return Task.CompletedTask;
}
catch
Expand Down
53 changes: 51 additions & 2 deletions Oqtane.Maui/wwwroot/js/interop.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
}
}
}};
};
88 changes: 28 additions & 60 deletions Oqtane.Server/wwwroot/js/interop.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
},
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 () {
let transaction = idb.result.transaction("items", "readonly");
let collection = transaction.objectStore("items");
let result = collection.get(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);
result.onsuccess = function (e) {
resolve(result.result);
}
}
}
});

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");
}
let result = await request;

return result;
}
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.getAllKeys();

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;
},
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);
}
}
};

0 comments on commit c0f4069

Please sign in to comment.