From b62c063a437c3b30eb0919a45a3ef6aadf7f8fde Mon Sep 17 00:00:00 2001 From: SimonGschnell Date: Wed, 7 May 2025 11:14:59 +0200 Subject: [PATCH 1/4] refactor(Searchbar Localstorage): adds the origin of the searchbar to the searchbaroptions and uses it for the localStorage keys --- public/js/apps/Cis.js | 1 + public/js/components/searchbar/searchbar.js | 11 +++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/public/js/apps/Cis.js b/public/js/apps/Cis.js index b62592ebd..ac17038b5 100644 --- a/public/js/apps/Cis.js +++ b/public/js/apps/Cis.js @@ -12,6 +12,7 @@ const app = Vue.createApp({ data: function() { return { searchbaroptions: { + origin: "cis", cssclass: "", calcheightonly: true, types: [ diff --git a/public/js/components/searchbar/searchbar.js b/public/js/components/searchbar/searchbar.js index 7b28c8bea..0bcd4e893 100644 --- a/public/js/components/searchbar/searchbar.js +++ b/public/js/components/searchbar/searchbar.js @@ -84,11 +84,10 @@ export default { `, watch:{ 'searchsettings.searchstr': function (newSearchValue, oldSearchValue) { - sessionStorage.setItem('searchstr',newSearchValue); + sessionStorage.setItem(`${this.searchoptions.origin}_searchstr`,newSearchValue); }, }, computed:{ - search_types_string(){ if (Array.isArray(this.searchsettings.types) && this.searchsettings.types.length > 0){ return this.searchsettings.types.join(' / '); @@ -105,7 +104,7 @@ export default { } // stores the search types in the localstorage, only if the newValue is also an array if(Array.isArray(newValue)){ - localStorage.setItem('searchtypes', JSON.stringify(newValue)); + localStorage.setItem(`${this.searchoptions.origin}_searchtypes`, JSON.stringify(newValue)); } this.search(); }); @@ -125,8 +124,8 @@ export default { methods: { getSearchTypes: function () { let result = this.allSearchTypes(); - if (localStorage.getItem('searchtypes')) { - result = JSON.parse(localStorage.getItem('searchtypes')); + if (localStorage.getItem(`${this.searchoptions.origin}_searchtypes`)) { + result = JSON.parse(`${this.searchoptions.origin}_searchtypes`); } return result; }, @@ -138,7 +137,7 @@ export default { return allTypes; }, getSearchStr: function(){ - return sessionStorage.getItem('searchstr') ?? ''; + return sessionStorage.getItem(`${this.searchoptions.origin}_searchstr`) ?? ''; }, checkSettingsVisibility: function(event) { // hides the settings collapsible if the user clicks somewhere else From a6180b3d59b85b851ca778fbaec05bdc40131fbf Mon Sep 17 00:00:00 2001 From: SimonGschnell Date: Thu, 8 May 2025 12:34:35 +0200 Subject: [PATCH 2/4] feature(Searchbar Storage): uses UUID's to store searchstr and searchtypes and warn user about missing searchoption origin property --- public/js/components/searchbar/searchbar.js | 33 +++++++++++++++++---- public/js/helpers/UUID.js | 8 +++++ 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 public/js/helpers/UUID.js diff --git a/public/js/components/searchbar/searchbar.js b/public/js/components/searchbar/searchbar.js index 0bcd4e893..31f45455a 100644 --- a/public/js/components/searchbar/searchbar.js +++ b/public/js/components/searchbar/searchbar.js @@ -4,6 +4,7 @@ import employee from "./employee.js"; import organisationunit from "./organisationunit.js"; import student from "./student.js"; import prestudent from "./prestudent.js"; +import uuid from "../../helpers/UUID.js"; export default { props: [ "searchoptions", "searchfunction" ], @@ -84,7 +85,7 @@ export default { `, watch:{ 'searchsettings.searchstr': function (newSearchValue, oldSearchValue) { - sessionStorage.setItem(`${this.searchoptions.origin}_searchstr`,newSearchValue); + sessionStorage.setItem(`${this.searchoptions.origin}_searchstr_${uuid}`,newSearchValue); }, }, computed:{ @@ -104,7 +105,7 @@ export default { } // stores the search types in the localstorage, only if the newValue is also an array if(Array.isArray(newValue)){ - localStorage.setItem(`${this.searchoptions.origin}_searchtypes`, JSON.stringify(newValue)); + localStorage.setItem(`${this.searchoptions.origin}_searchtypes_${uuid}`, JSON.stringify(newValue)); } this.search(); }); @@ -113,6 +114,10 @@ export default { this.settingsDropdown = new bootstrap.Collapse(this.$refs.settings, { toggle: false }); + + if (!this.searchoptions.origin){ + console.warn("No origin defined in the searchoptions for the searchbar, please define the origin property in the searchbaroptions to allow reliable storage of searchstr and searchtypes accross applications."); + } }, updated() { if(this.showresult) { @@ -122,10 +127,28 @@ export default { } }, methods: { + getStorageValue: function (key, sessionStorage = false){ + const regex = new RegExp(`${this.searchoptions.origin}_${key}`); + if(sessionStorage){ + for (let i = 0; i < sessionStorage.length; i++) { + if (sessionStorage.key(i).match(regex)) { + return sessionStorage.getItem(sessionStorage.key(i)); + } + } + } + else{ + for (let i =0; i < localStorage.length; i++){ + if (localStorage.key(i).match(regex)){ + return localStorage.getItem(localStorage.key(i)); + } + } + } + }, getSearchTypes: function () { let result = this.allSearchTypes(); - if (localStorage.getItem(`${this.searchoptions.origin}_searchtypes`)) { - result = JSON.parse(`${this.searchoptions.origin}_searchtypes`); + let localStorageValue = this.getStorageValue('searchtypes'); + if (localStorageValue) { + result = JSON.parse(localStorageValue); } return result; }, @@ -137,7 +160,7 @@ export default { return allTypes; }, getSearchStr: function(){ - return sessionStorage.getItem(`${this.searchoptions.origin}_searchstr`) ?? ''; + return this.getStorageValue("searchstr",true) ?? ''; }, checkSettingsVisibility: function(event) { // hides the settings collapsible if the user clicks somewhere else diff --git a/public/js/helpers/UUID.js b/public/js/helpers/UUID.js new file mode 100644 index 000000000..1c08c1237 --- /dev/null +++ b/public/js/helpers/UUID.js @@ -0,0 +1,8 @@ +const uuid41 = () => { + const b = crypto.getRandomValues(new Uint16Array(8)); + const d = [].map.call(b, a => a.toString(16).padStart(4, '0')).join(''); + const vr = (((b[5] >> 12) & 3) | 8).toString(16); + return `${d.substr(0, 8)}-${d.substr(8, 4)}-4${d.substr(13, 3)}-${vr}${d.substr(17, 3)}-${d.substr(20, 12)}`; +}; + +export default uuid41; \ No newline at end of file From 8e2fd6e61c1cad4a7c072414d29590568c8bf27c Mon Sep 17 00:00:00 2001 From: SimonGschnell Date: Mon, 12 May 2025 13:58:06 +0200 Subject: [PATCH 3/4] refactor(searchbar local/session storage): does not use uuid for localStorage and only saves values to localStorage if searchoptions.origin is defined --- public/js/components/searchbar/searchbar.js | 29 +++++---------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/public/js/components/searchbar/searchbar.js b/public/js/components/searchbar/searchbar.js index 31f45455a..ce08e3bfd 100644 --- a/public/js/components/searchbar/searchbar.js +++ b/public/js/components/searchbar/searchbar.js @@ -85,7 +85,9 @@ export default { `, watch:{ 'searchsettings.searchstr': function (newSearchValue, oldSearchValue) { - sessionStorage.setItem(`${this.searchoptions.origin}_searchstr_${uuid}`,newSearchValue); + if(this.searchoptions.origin){ + sessionStorage.setItem(`${this.searchoptions.origin}_searchstr`,newSearchValue); + } }, }, computed:{ @@ -104,8 +106,8 @@ export default { this.searchsettings.types = this.allSearchTypes(); } // stores the search types in the localstorage, only if the newValue is also an array - if(Array.isArray(newValue)){ - localStorage.setItem(`${this.searchoptions.origin}_searchtypes_${uuid}`, JSON.stringify(newValue)); + if(Array.isArray(newValue), this.searchoptions.origin){ + localStorage.setItem(`${this.searchoptions.origin}_searchtypes`, JSON.stringify(newValue)); } this.search(); }); @@ -127,26 +129,9 @@ export default { } }, methods: { - getStorageValue: function (key, sessionStorage = false){ - const regex = new RegExp(`${this.searchoptions.origin}_${key}`); - if(sessionStorage){ - for (let i = 0; i < sessionStorage.length; i++) { - if (sessionStorage.key(i).match(regex)) { - return sessionStorage.getItem(sessionStorage.key(i)); - } - } - } - else{ - for (let i =0; i < localStorage.length; i++){ - if (localStorage.key(i).match(regex)){ - return localStorage.getItem(localStorage.key(i)); - } - } - } - }, getSearchTypes: function () { let result = this.allSearchTypes(); - let localStorageValue = this.getStorageValue('searchtypes'); + let localStorageValue = localStorage.getItem('searchtypes'); if (localStorageValue) { result = JSON.parse(localStorageValue); } @@ -160,7 +145,7 @@ export default { return allTypes; }, getSearchStr: function(){ - return this.getStorageValue("searchstr",true) ?? ''; + return sessionStorage.getItem("searchstr") ?? ''; }, checkSettingsVisibility: function(event) { // hides the settings collapsible if the user clicks somewhere else From 52c4ac64f13eef3174f8429e5dcbaf2019b2bd82 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Tue, 17 Jun 2025 12:44:24 +0200 Subject: [PATCH 4/4] remove unused import and uuid helper --- public/js/components/searchbar/searchbar.js | 1 - public/js/helpers/UUID.js | 8 -------- 2 files changed, 9 deletions(-) delete mode 100644 public/js/helpers/UUID.js diff --git a/public/js/components/searchbar/searchbar.js b/public/js/components/searchbar/searchbar.js index ce08e3bfd..15d2a8c1d 100644 --- a/public/js/components/searchbar/searchbar.js +++ b/public/js/components/searchbar/searchbar.js @@ -4,7 +4,6 @@ import employee from "./employee.js"; import organisationunit from "./organisationunit.js"; import student from "./student.js"; import prestudent from "./prestudent.js"; -import uuid from "../../helpers/UUID.js"; export default { props: [ "searchoptions", "searchfunction" ], diff --git a/public/js/helpers/UUID.js b/public/js/helpers/UUID.js deleted file mode 100644 index 1c08c1237..000000000 --- a/public/js/helpers/UUID.js +++ /dev/null @@ -1,8 +0,0 @@ -const uuid41 = () => { - const b = crypto.getRandomValues(new Uint16Array(8)); - const d = [].map.call(b, a => a.toString(16).padStart(4, '0')).join(''); - const vr = (((b[5] >> 12) & 3) | 8).toString(16); - return `${d.substr(0, 8)}-${d.substr(8, 4)}-4${d.substr(13, 3)}-${vr}${d.substr(17, 3)}-${d.substr(20, 12)}`; -}; - -export default uuid41; \ No newline at end of file