handy-tools
Version:
A small library of handy tools
429 lines (381 loc) • 11.5 kB
JavaScript
;
var moment = require('moment');
var React = require('react');
/**
* @return {object}
*/
module.exports = {
WEEKDAYS: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
MONTHS: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
alphabetizeArrayOfObjects: function(array, property) {
return array.sort(function(a, b) {
if (a[property].toUpperCase() < b[property].toUpperCase()) {
return -1;
} else if (a[property].toUpperCase() > b[property].toUpperCase()) {
return 1;
} else {
return 0;
}
});
},
capitalize: function(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
},
changeField: function(changeFieldArgs, event) {
var key = event.target.dataset.field;
var entity = event.target.dataset.entity;
var saveKey;
var saveValue;
var value = $(event.target).is('select') ? module.exports.convertTFStringsToBoolean(event.target.value) : event.target.value;
if (entity) {
var newEntity = this.state[entity];
newEntity[key] = value;
saveKey = entity;
saveValue = newEntity;
} else {
saveKey = key;
saveValue = value;
}
module.exports.removeFieldError(changeFieldArgs.allErrors, changeFieldArgs.errorsArray, key);
if (changeFieldArgs.beforeSave) {
var beforeSaveResult = changeFieldArgs.beforeSave.call(this, saveKey, saveValue);
saveKey = beforeSaveResult.key;
saveValue = beforeSaveResult.value;
}
this.setState({
[saveKey]: saveValue,
justSaved: false
}, function() {
if (changeFieldArgs.changesFunction) {
var changesToSave = changeFieldArgs.changesFunction.call();
this.setState({
changesToSave: changesToSave
});
}
});
},
changeState(property, value) {
this.setState({
[property]: value
});
},
changeStateToTarget(property, e) {
this.setState({
[property]: e.target.value
});
},
commonSort: function(entity) {
var propertyValue = entity[this.state.searchProperty];
if (typeof propertyValue === "string" || propertyValue instanceof String) {
return propertyValue.toLowerCase();
} else if (typeof propertyValue == "boolean") {
return propertyValue.toString().toLowerCase();
} else {
return propertyValue;
}
},
convertBooleanToTFString: function(boolean) {
return boolean ? 't' : 'f';
},
convertObjectKeysToUnderscore: function(object) {
var result = {};
Object.keys(object).forEach(function(key) {
result[module.exports.convertToUnderscore(key)] = object[key];
});
return result;
},
convertTFStringsToBoolean: function(string) {
if (string === "t") {
return true;
} else if (string === "f") {
return false;
} else {
return string;
}
},
convertToUnderscore: function(input) {
return input.replace(/([A-Z1-9])/g, function($1) { return "_" + $1.toLowerCase(); }).replace('__', '_');
},
deepCopy: function(obj) {
if (typeof obj == 'object') {
if (Array.isArray(obj)) {
var l = obj.length;
var r = new Array(l);
for (var i = 0; i < l; i++) {
r[i] = this.deepCopy(obj[i]);
}
return r;
} else {
var r = {};
r.prototype = obj.prototype;
for (var k in obj) {
r[k] = this.deepCopy(obj[k]);
}
return r;
}
}
return obj;
},
ellipsis: function(string, n) {
if (string.length > n) {
return string.slice(0, n) + "...";
} else {
return string;
}
},
errorClass: function(stateErrors, fieldErrors) {
var i;
for (i = 0; i < fieldErrors.length; i++) {
if (stateErrors.indexOf(fieldErrors[i]) > -1) {
return 'error';
}
}
return '';
},
filterArrayOfDateStrings: function(array, property, obj) {
if (obj.startDate && obj.endDate) {
return array.filter(function(element) {
return (+moment(element[property]).format('x') >= obj.startDate) && (+moment(element[property]).format('x') <= obj.endDate);
});
} else if (obj.startDate) {
return array.filter(function(element) {
return +moment(element[property]).format('x') >= obj.startDate;
});
} else if (obj.endDate) {
return array.filter(function(element) {
return +moment(element[property]).format('x') <= obj.endDate;
});
} else {
return array;
}
},
filterSearchText(inputArray, searchText, property) {
if (searchText !== '') {
var re = new RegExp(searchText, "i");
return inputArray.filter(function(entity) {
return re.test(entity[property]);
});
} else {
return inputArray;
}
},
modalSelectStyles: function() {
return {
overlay: {
background: 'rgba(0, 0, 0, 0.50)'
},
content: {
background: '#FFFFFF',
margin: 'auto',
maxWidth: 540,
height: '90%',
border: 'solid 1px #5F5F5F',
borderRadius: '6px',
textAlign: 'center',
color: '#5F5F5F'
}
};
},
objectsAreEqual: function(obj1, obj2) {
return JSON.stringify(obj1) === JSON.stringify(obj2);
},
ordinatize: function(input) {
var j = input % 10,
k = input % 100;
if (j == 1 && k != 11) {
return input + "st";
}
if (j == 2 && k != 12) {
return input + "nd";
}
if (j == 3 && k != 13) {
return input + "rd";
}
return input + "th";
},
params: function() {
var result = {};
var urlParamString = window.location.search.substring(1);
if (urlParamString) {
var urlParams = urlParamString.split('&');
urlParams.forEach(function(param) {
var paramKeyValuePair = param.split('=');
var key = paramKeyValuePair[0];
var value = paramKeyValuePair[1];
var isArray = (key.slice(-2) === '[]');
if (isArray) {
if (result[key]) {
result[key].push(value);
} else {
result[key] = [value];
}
} else {
result[key] = value;
}
});
}
return result;
},
pluralize: function(string, n) {
if (n === 1) {
return string;
} else {
return string + 's';
}
},
rearrangeFields: function(currentOrder, draggedIndex, dropZoneIndex) {
var result = {};
if (dropZoneIndex == -1) {
result[0] = currentOrder[draggedIndex];
delete currentOrder[draggedIndex];
}
var currentValues = Object.values(currentOrder);
for (var i = 0; i < Object.keys(currentOrder).length; i++) {
if (i != draggedIndex) {
result[Object.keys(result).length] = currentValues[i];
}
if (i == dropZoneIndex) {
result[Object.keys(result).length] = currentValues[draggedIndex];
}
}
return result;
},
removeFieldError: function(errors, errorsArray, fieldName) {
if (errors[fieldName]) {
if (!errorsArray) {
console.log("no errors array!!!");
}
errors[fieldName].forEach(function(message) {
module.exports.removeFromArray(errorsArray, message);
});
}
},
removeFinanceSymbols: function(string) {
return string.replace('$', '').replace(',', '');
},
removeFromArray: function(array, element) {
var index = array.indexOf(element);
if (index >= 0) {
array.splice(index, 1);
}
return array;
},
renderInactiveButtonClass: function(condition) {
return condition ? " inactive" : "";
},
renderDisabledButtonClass: function(condition) {
return condition ? " disabled" : "";
},
renderFieldError: function(stateErrors, fieldErrors) {
for (var i = 0; i < fieldErrors.length; i++) {
if (stateErrors.indexOf(fieldErrors[i]) > -1) {
return(
React.createElement("div", { className: "yes-field-error" }, fieldErrors[i])
);
}
}
return(
React.createElement("div", { className: "no-field-error" })
);
},
renderDropdownFieldError: function(stateErrors, fieldErrors) {
for (var i = 0; i < fieldErrors.length; i++) {
if (stateErrors.indexOf(fieldErrors[i]) > -1) {
return(
React.createElement("div", { className: "yes-dropdown-field-error" }, fieldErrors[i])
);
}
}
return(
React.createElement("div", { className: "no-dropdown-field-error" })
);
},
renderGrayedOut: function(shouldIRender, marginTop, marginLeft, borderRadius) {
var grayedOutStyle = {
position: 'absolute',
zIndex: 100,
backgroundColor: 'gray',
opacity: 0.1,
width: '100%',
height: '100%',
borderRadius: borderRadius || 0,
marginTop: marginTop || 0,
marginLeft: marginLeft || 0
};
if (shouldIRender) {
return(
React.createElement("div", {className: "grayed-out", style: grayedOutStyle })
);
}
},
renderSpinner: function(shouldIRender, spinnerSize) {
spinnerSize = spinnerSize || 90;
var spinnerStyle = {
width: spinnerSize,
height: spinnerSize,
left: 'calc(50% - ' + (spinnerSize / 2) + 'px)',
top: 'calc(50% - ' + (spinnerSize / 2) + 'px)'
};
if (shouldIRender) {
return(
React.createElement("div", { className: "spinner", style: spinnerStyle })
);
}
},
resetNiceSelect: function(obj) {
var $dropDowns = $(obj.selector);
$dropDowns.niceSelect('destroy');
$dropDowns.unbind('change');
$dropDowns.niceSelect().on('change', obj.func);
},
setUpNiceSelect: function(obj) {
var $dropDowns = $(obj.selector);
if ($dropDowns[0] && !$dropDowns[0].nextSibling.classList.contains('nice-select')) {
$dropDowns.niceSelect().on('change', obj.func);
}
},
stringifyDate: function(date) {
return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear().toString().slice(-2);
},
stringifyDateWithHyphens: function(date) {
return date.getFullYear().toString() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
},
sortArrayOfDateStrings: function(array, property) {
return array.sort(function(a, b) {
if (+moment(a[property]).format('x') < +moment(b[property]).format('x')) {
return -1;
} else if (+moment(a[property]).format('x') > +moment(b[property]).format('x')) {
return 1;
} else {
return 0;
}
});
},
sortArrayOfObjects: function(array, arg) {
let property = Array.isArray(arg) ? arg[0] : arg;
return array.sort(function(a, b) {
if (parseInt(a[property]) < parseInt(b[property])) {
return -1;
} else if (parseInt(a[property]) > parseInt(b[property])) {
return 1;
} else {
if (Array.isArray(arg)) {
property = arg[1];
if (parseInt(a[property]) < parseInt(b[property])) {
return -1;
} else if (parseInt(a[property]) > parseInt(b[property])) {
return 1;
} else {
return 0;
}
} else {
return 0;
}
}
});
},
sortClass(property) {
var state = this.state.searchProperty;
return state === property ? 'sort-header-active' : 'sort-header-inactive';
}
};