{"version":3,"file":"../../js/localStorage.js","sources":["js/localStorage.js"],"sourcesContent":["(function () {\n const indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;\n\n /**\n * Utilisation de local storage en fallback si indexDB n'est pas supporté\n * @returns {{getProm: (function(*): Promise), set: Window.localDatabase.set, get: (function(*, *): *)}}\n */\n function useLocalStorage() {\n return window['localDatabase'] = {\n get: (key, callback) => callback(localStorage.getItem(key)),\n getProm: key => new Promise((resolve, reject) => {\n resolve(localStorage.getItem(key));\n }),\n clear: function () {\n return localStorage.clear();\n },\n clearByKey: function (key) {\n for (let i in localStorage) {\n if (localStorage.hasOwnProperty(i)) {\n if (i.match(query) || (!query && typeof i === 'string')) {\n localStorage.removeItem(i);\n }\n }\n }\n },\n set: function (key, value, callback) {\n localStorage.setItem(key, value);\n if (callback && typeof callback === 'function') {\n callback();\n }\n }\n }\n }\n\n if (!indexedDB) {\n console.error('indexDB not supported');\n //Use local storage as fallback\n return useLocalStorage();\n }\n let db, request = indexedDB.open('p2w');\n request.onsuccess = function (evt) {\n db = this.result;\n };\n request.onerror = function (event) {\n console.error('indexedDB request error');\n useLocalStorage();\n };\n\n request.onupgradeneeded = function (event) {\n db = null;\n const store = event.target.result.createObjectStore('s', {\n keyPath: 'key'\n });\n\n store.transaction.oncomplete = function (e) {\n db = e.target.db;\n };\n };\n\n /**\n * Vérifie si la base de donnée est prête\n * @returns {Promise}\n */\n\n /**\n * @type {{getProm: (function(String): Promise), set: ((function(string, Object, callback=): boolean)|*), clearByKey: (function(String): Promise>), clear: (function(): Promise>)}}\n */\n window['localDatabase'] = {\n /**\n * Retourne une promesse avec la valeur en BDD\n * @param key {String} clef de recherche dans la base de donnée\n * @returns {Promise} promesse avec la valeur en BDD ou reject si erreur\n */\n getProm: function (key) {\n return new Promise((resolve, reject) => {\n db.transaction('s').objectStore('s').get(key).onsuccess = function (event) {\n const result = (event.target.result && event.target.result.val) || null;\n resolve(result);\n };\n //Handle error\n db.transaction('s').objectStore('s').get(key).onerror = function (event) {\n reject(event);\n };\n })\n },\n /**\n * Vide la base de donnée\n * @returns {Promise>} promesse avec la valeur en BDD ou reject si erreur\n */\n clear: function () {\n return new Promise((resolve, reject) => {\n const request = db.transaction('s', 'readwrite').objectStore('s').clear();\n request.onsuccess = function (event) {\n resolve(event);\n };\n //Handle error\n request.onerror = function (event) {\n reject(event);\n };\n });\n\n },\n\n /**\n * Supprime tous les éléments de la base de données locale dont la clé contient la chaîne de caractères spécifiée.\n *\n * @param {string} key - La chaîne de caractères à rechercher dans les clés des éléments à supprimer.\n * @returns {Promise} - Une promesse résolue lorsque tous les éléments correspondants ont été supprimés de la base de données, ou null si aucun élément n'a été supprimé.\n * @throws {Error} - Si une erreur se produit lors de la suppression des éléments.\n */\n clearByKey: function (key) {\n return new Promise((resolve, reject) => {\n const request = db.transaction('s').objectStore('s').getAll();\n request.onerror = function (event) {\n reject(event);\n };\n request.onsuccess = function (event) {\n const result = event.target.result;\n let deleted = 0;\n const keyPattern = window.DOSSIER_SELECT ? `${window.DOSSIER_SELECT.get('id')}_(.*)${key}$` : key;\n const deletePromises = result.map(item => {\n // Cherche une clé du genre _XXX_\n if (item.key.match(keyPattern)) {\n return new Promise((resolve, reject) => {\n const deleteRequest = db.transaction('s', 'readwrite').objectStore('s').delete(item.key);\n deleteRequest.onerror = function (event) {\n reject(event);\n };\n deleteRequest.onsuccess = function (event) {\n deleted++;\n resolve(event);\n };\n });\n }\n });\n Promise.all(deletePromises).then(() => {\n if (deleted === 0) {\n resolve(null);\n } else {\n resolve();\n }\n }).catch(error => {\n reject(error);\n });\n };\n });\n },\n\n /**\n * Ajoute une valeur dans la base de donnée\n * @param {string} key clef de recherche dans la base de donnée\n * @param {object} value valeur à stocker\n * @param {callback=} callback fonction de callback (optionnel)\n * @returns {boolean}\n */\n set: function (key, value, callback) {\n if ('storage' in navigator && 'estimate' in navigator.storage) {\n navigator.storage.estimate().then(function (quota) {\n const totalSpace = quota.quota;\n const usedSpace = quota.usage;\n let percent = (usedSpace / totalSpace * 100).toFixed(2);\n if (percent > 90) {\n console.error('P2W - Storage limit reached. Please clear your cache (' + percent + '%)');\n }\n });\n }\n\n\n const keyValue = {\n key: key,\n type: typeof value,\n val: value\n };\n let txn = db.transaction('s', 'readwrite');\n txn.oncomplete = function (event) {\n const toString$ = {}.toString;\n if (toString$.call(callback).slice(8, -1) === 'Function') {\n callback();\n }\n }\n txn.objectStore('s').put(keyValue);\n return true;\n\n }\n }\n})();\n"],"names":["indexedDB","window","mozIndexedDB","webkitIndexedDB","msIndexedDB","useLocalStorage","get","key","callback","localStorage","getItem","getProm","Promise","resolve","reject","clear","clearByKey","let","i","hasOwnProperty","match","query","removeItem","set","value","setItem","console","error","db","request","open","onsuccess","evt","this","result","onerror","event","onupgradeneeded","target","createObjectStore","keyPath","transaction","oncomplete","e","objectStore","val","getAll","deleted","keyPattern","DOSSIER_SELECT","deletePromises","map","item","deleteRequest","delete","all","then","catch","navigator","storage","estimate","quota","totalSpace","percent","usage","toFixed","keyValue","type","txn","toString","call","slice","put"],"mappings":"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"}