fonteva-design-guide
Version:
## Dev, Build and Test
149 lines (129 loc) • 4.13 kB
JavaScript
const makeRequest = (verb, url, params) => {
return new Promise(function (resolve, reject) {
var request = new XMLHttpRequest();
// Open a new connection, using the GET request on the URL endpoint
request.open(verb, url, true);
request.onload = function () {
console.log(request.response);
if (this.status >= 200 && this.status < 300) {
resolve(request.response);
} else {
reject({
status: this.status,
statusText: request.statusText
});
}
};
request.onerror = function () {
reject({
status: this.status,
statusText: request.statusText
});
};
// Send request
request.send(params);
});
};
const parseToObject = value => {
if (typeof value === 'string' || value instanceof String) {
value = JSON.parse(value);
}
if (value == null) {
value = {};
}
return value;
};
const fireEvent = (cmp, name, value) => {
const changeEvent = new CustomEvent(name, {
detail: value
});
cmp.dispatchEvent(changeEvent);
};
const cloneDeep = value => {
return JSON.parse(JSON.stringify(value));
};
const generateId = len => {
let text = '';
let possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
for (let i = 0; i < len; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
};
const cleanName = name => {
return name.replace(/[^A-Z0-9]+/gi, '_');
};
const isValidUrl = val => {
if (/^(?:https:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:\/?#[\]@!\$&\(\)\*\+,;=.]+$/i.test(val)) {
return true;
}
return false;
};
const valueProvided = val => {
if (val == null) {
return false;
}
return true;
};
const setValueInObj = (valueObj, params) => {
valueObj[params.field] = params.value;
return valueObj;
};
const addSitePrefix = url => {
let systemPrefixes = ['apex', 's', 'one', 'profile', 'lightning'];
let systemPrefix = false;
let pathSegments = window.location.pathname.split('/');
//if first element of the current path is not to be ignored, then it's a site prefix
systemPrefixes.forEach(function (prefix) {
if (pathSegments[1] === prefix) {
systemPrefix = true;
}
});
if (systemPrefix) {
return url;
} else if (pathSegments.length >= 3) {
if (pathSegments[1] !== '') {
return '/' + pathSegments[1] + url;
}
}
return url;
};
const updateElementInArray = (arr, elementToAdd, keyField) => {
let index = arr.findIndex(obj => obj[keyField] === elementToAdd[keyField]);
if (index !== -1) {
arr[index] = Object.assign(arr[index], elementToAdd);
} else {
arr.push(elementToAdd);
}
return arr;
};
const getUrlParameter = paramName => {
let sPageURL = decodeURIComponent(window.location.search.substring(1)),
sURLVariables = sPageURL.split('#')[0].split('&'),
sParameterName,sParameterValue,
i;
for (i = 0; i < sURLVariables.length; i++) {
// only consider the first equal sign as a delimiter
// since a variable's value may contain equal signs in it
const indexOfEqualSign = sURLVariables[i].indexOf('=');
sParameterName = sURLVariables[i].substr(0,indexOfEqualSign);
sParameterValue = sURLVariables[i].substr(indexOfEqualSign+1,sURLVariables[i].length);
if (sParameterName === paramName) {
return sParameterValue === undefined ? true : sParameterValue;
}
}
};
export {
getUrlParameter,
makeRequest,
parseToObject,
fireEvent,
cloneDeep,
generateId,
cleanName,
valueProvided,
isValidUrl,
setValueInObj,
addSitePrefix,
updateElementInArray
};