UNPKG

@amxchange/grid-view-web-client

Version:

amxchange grid view framework web client in react ( a module extracted from existing jax )

375 lines (342 loc) 12.6 kB
const commonUtils = { //source: https://stackoverflow.com/a/22583327/3248247 notify(title, msg) { let notification; let options = {}; if (msg) options.body = msg; if (!("Notification" in window)) { console.error("This browser does not support desktop notification"); } else if (Notification.permission === "granted") { notification = new Notification(title, options); } // Otherwise, we need to ask the user for permission else if (Notification.permission !== "denied") { Notification.requestPermission(function (permission) { // If the user accepts, let's create a notification if (permission === "granted") { notification = new Notification(title, options); } }); } return notification; }, param(obj) { let app = {}, class2type = {}, toString = class2type.toString, r20 = /%20/g, rbracket = /\[\]$/; function type(obj) { if (obj == null) { return obj + ""; } // Support: Android < 4.0, iOS < 6 (functionish RegExp) return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj; } function isFunction(obj) { return type(obj) === "function"; } function buildParams(prefix, obj, add) { var name, key, value; if (Array.isArray(obj)) { for (var key in obj) { value = obj[key]; if (rbracket.test(prefix)) add(prefix, value); else buildParams(prefix + "[" + (typeof v === "object" ? i : "") + "]", value, add); } } else if (type(obj) === "object") { for (name in obj) buildParams(prefix + "[" + name + "]", obj[name], add); } else add(prefix, obj); } function param(obj) { var prefix, key, value, serialized = [], add = function (key, value) { value = isFunction(value) ? value() : value == null ? "" : value; serialized[serialized.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value); }; if (Array.isArray(obj)) { for (key in obj) { value = obj[key]; add(key, value); } } else { for (prefix in obj) buildParams(prefix, obj[prefix], add); } return serialized.join("&").replace(r20, "+"); } return param(obj); }, serializeParams: function (params) { var str = ""; for (var key in params) { if (params.hasOwnProperty(key)) { if (str !== "") str += "&"; str += key + "=" + params[key]; } } return str; }, exportToCSV(rows) { let csvContent = "data:text/csv;charset=utf-8,"; rows.forEach(function (rowArray) { rowArray = rowArray.map(cell => `"${cell}"`); let row = rowArray.join(","); csvContent += row + "\r\n"; // add carriage return }); var encodedUri = encodeURI(csvContent); var link = document.createElement("a"); link.setAttribute("href", encodedUri); link.setAttribute("download", "transaction_history.csv"); document.body.appendChild(link); // Required for FF link.click(); }, debounce(fn, delay) { var timer = null; return function () { var context = this, args = arguments; clearTimeout(timer); timer = setTimeout(function () { fn.apply(context, args); }, delay); }; }, toTitleCase(str) { if (!str) return ""; return str.replace(/\w\S*/g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }); }, toSentenceCase(str) { if (!str) return ""; return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase(); }, toCurrencySymbol(str) { if (currencySymbolMap[str]) { return String.fromCharCode(currencySymbolMap[str]); } else { return str; } }, numberWithCommas(x) { if (isNaN(x) || x === null) return ""; return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); }, round(number, precision) { if (precision === undefined) return number; var factor = Math.pow(10, precision); var tempNumber = number * factor; var roundedTempNumber = Math.round(tempNumber); return roundedTempNumber / factor; }, roundDown(number, precision) { if (precision === undefined) return number; var factor = Math.pow(10, precision); var tempNumber = number * factor; var roundedTempNumber = -Math.round(-tempNumber); return roundedTempNumber / factor; }, roundedWithCommas(number, precision) { if (isNaN(number) || number === null) return ""; return this.numberWithCommas(this.round(number, precision)); }, objectFromArrayOfKeys(arr, val) { let finalObj; arr.reverse().map((key, i) => { let temp = {}; if (i === 0) { temp[key] = val; } else { temp[key] = finalObj; } finalObj = temp; }); return finalObj; }, isEmptyObject(obj) { return Object.keys(obj).length === 0 && obj.constructor === Object; }, exportToXLS(rows, fileName) { rows = rows.map(function (rowArray) { return rowArray.map(cell => ({ value: cell, type: "string" })); }); zipcelx({ filename: fileName || "Report", sheet: { data: rows } }); }, getParameterByName(name, url) { if (!url) url = window.location.href; name = name.replace(/[\[\]]/g, "\\$&"); var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ""; return decodeURIComponent(results[2].replace(/\+/g, " ")); }, removeParameterByName(name, search) { if (!search) search = window.location.search; let searchParams = new URLSearchParams(search); searchParams.delete(name); let _search = searchParams.toString().length > 0 ? "?" + searchParams.toString() : ""; let newUrl = window.location.protocol + "//" + window.location.host + window.location.pathname + _search + window.location.hash; if (history.replaceState) { history.replaceState(null, "", newUrl); } }, regexpStringToObj(regexpString) { let regexpMatcher = /\/(.+)\/([gmiyus]{0,6})/; let regexpWithoutSlashes = regexpString.replace(regexpMatcher, `$1${REGEX_SPLITTER}$2`); return new RegExp(...regexpWithoutSlashes.split(REGEX_SPLITTER)); }, throttle(fn, wait) { let inThrottle, lastFn, lastTime; return function () { const context = this, args = arguments; if (!inThrottle) { fn.apply(context, args); lastTime = Date.now(); inThrottle = true; } else { clearTimeout(lastFn); lastFn = setTimeout(function () { if (Date.now() - lastTime >= wait) { fn.apply(context, args); lastTime = Date.now(); } }, Math.max(wait - (Date.now() - lastTime), 0)); } }; }, shallowEqual(a, b) { // Create arrays of property names if (!a || !b) { //if they are falsy values, just return plain equality return a === b; } var aProps = Object.getOwnPropertyNames(a); var bProps = Object.getOwnPropertyNames(b); // If number of properties is different, // objects are not equivalent if (aProps.length != bProps.length) { return false; } for (var i = 0; i < aProps.length; i++) { var propName = aProps[i]; // If values of same property are not equal, // objects are not equivalent if (a[propName] !== b[propName]) { return false; } } // If we made it this far, objects // are considered equivalent return true; }, getBase64(file) { return new Promise((resolve, reject) => { var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function () { // console.log(reader.result); resolve(reader.result); }; reader.onerror = function (error) { // console.log('Error: ', error); reject(error); }; }); }, getBase64Image(img) { var canvas = document.createElement("canvas"); canvas.width = img.width; canvas.height = img.height; var ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0); var dataURL = canvas.toDataURL("image/png"); return dataURL.replace(/^data:image\/(png|jpg);base64,/, ""); }, getBase64ImageFromUrl(url) { let img = new Image(); img.src = url; return this.getBase64Image(img); }, deepCloneObj(obj) { return JSON.parse(JSON.stringify(obj)); }, runPromiseInSequence(arr, input) { return new Promise((resolve, reject) => { let promiseChain = arr.reduce( (promiseChain, currentFunction) => promiseChain.then(currentFunction), Promise.resolve(input) ); promiseChain .then(finalResponse => { resolve(finalResponse.response); }) .catch(error => { reject(error); }); }); }, /* * func _ has capability of performing reading operations ( i.e, GET, HAS, SIZE ) on given object * and hence cannot perform any operations ( SET, DELETE, CLEAR ) aiming to modify given object. */ customMapUtil(map = {}, action = null, key = null) { if (typeof action === "string") { let mapKeys = Object.keys(map); let _value; switch (action.toUpperCase()) { case "GET": _value = mapKeys.indexOf(key) > -1 ? map[key] : null; break; case "HAS": _value = mapKeys.indexOf(key) > -1 ? true : false; break; case "SIZE": _value = mapKeys.length; break; default: _value = null; /* "Unknown action!!" */ } return _value; } return null; /* "Action should be strictly string!!" */ }, getCookie(cname) { let name = cname + "="; let decodedCookie = decodeURIComponent(document.cookie); let ca = decodedCookie.split(";"); for (let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) == " ") { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; }, getTenant(meta) { let { userDetails } = meta || {}; let { tenant } = userDetails || ""; return tenant; } }; export default commonUtils;