UNPKG

@pepperi/lib

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.1.

149 lines 16.4 kB
import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; // export class JsonFilter { // ExpressionId: number; // ComplexId: number; // ApiName: string; // Operation: string; // Values: string[]; // constructor() { // this.ExpressionId = 1; // this.ApiName = ''; // this.Operation = ''; // this.Values = []; // } // initFromObj(obj: JsonFilter): void { // if (obj) { // this.ExpressionId = obj.ExpressionId; // this.ApiName = obj.ApiName; // this.Operation = obj.Operation; // if (this.Values !== obj.Values) { // this.Values = []; // if (obj.Values) { // obj.Values.forEach((value) => this.Values.push(value)); // } // } // } // } // Valid(): boolean { // return this.Operation !== '' && this.ApiName !== ''; // } // } // export class JsonFilters { // leftNode: string; // rightNode: string; // operator: string; // ComplexId: number; // constructor(left = '', right = '', operator = 'AND', complexId = 2) { // this.leftNode = left; // this.rightNode = right; // this.operator = operator; // this.ComplexId = complexId; // } // toString(): string { // let retVal = ''; // if (this.leftNode !== '' && this.rightNode === '') { // retVal = this.leftNode; // } else if (this.leftNode === '' && this.rightNode !== '') { // retVal = this.rightNode; // } else if (this.leftNode !== '' && this.rightNode !== '') { // retVal = '{ "ComplexId":' + this.ComplexId + ','; // retVal += ' "Operation":"' + this.operator + '",'; // retVal += ' "LeftNode": ' + this.leftNode + ','; // retVal += ' "RightNode": ' + this.rightNode + '}'; // } // return retVal; // } // } // export enum DATE_RANGE { // None = 0, // InTheLast = 1, // Today = 2, // ThisWeek = 3, // ThisMonth = 4, // /*Before = 5, After = 6,*/ Between = 5, // DueIn = 6, // On = 7, // NotInTheLast = 8, // NotDueIn = 9, // IsEmpty = 10, // IsNotEmpty = 11, // } // export enum DATE_PERIOD { // None = 0, // Days = 1, // Weeks = 2, // Months = 3, // Years = 4, // } // export enum DATE_RANGE_VIEWTYPE { // None = 0, // Period = 1, // OneCalendar = 2, // TwoCalendars = 3, // NoCalendars = 4, // } export class UtilitiesService { constructor() { } parseDate(dateStr, showTime = false) { let retVal = null; if (dateStr !== '') { retVal = new Date(dateStr); const dateText = dateStr.split('-'); if (dateText.length === 3 && !showTime) { const year = Number(dateText[0]); const month = Number(dateText[1]) - 1; const day = Number(dateText[2]); retVal = new Date(year, month, day); } } if (retVal && isNaN(retVal.getTime())) { retVal = null; } return retVal; } stringifyDate(date, showTime = false) { if (date) { const dateText = []; dateText.push(date.getFullYear(), '-', date.getMonth() + 1, '-', date.getDate()); if (showTime) { dateText.push('T', (date.getHours() < 10 ? '0' : '') + date.getHours(), ':', (date.getMinutes() < 10 ? '0' : '') + date.getMinutes(), ':', (date.getSeconds() < 10 ? '0' : '') + date.getSeconds(), 'Z'); } return dateText.join(''); } else { return ''; } } stringifyDateWithOffset(date, showTime = false) { if (showTime) { const offsetMinutes = new Date().getTimezoneOffset() * -1; date.setMinutes(date.getMinutes() - offsetMinutes); } return this.stringifyDate(date, showTime); } isValueHtml(value) { let res = false; const REGEXP = /<\/?[a-z][\s\S]*>/i; res = REGEXP.test(value); return res; } isJsonString(str) { try { JSON.parse(str); } catch (e) { return false; } return true; } } UtilitiesService.ɵfac = function UtilitiesService_Factory(t) { return new (t || UtilitiesService)(); }; UtilitiesService.ɵprov = i0.ɵɵdefineInjectable({ token: UtilitiesService, factory: UtilitiesService.ɵfac, providedIn: 'root' }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(UtilitiesService, [{ type: Injectable, args: [{ providedIn: 'root', }] }], function () { return []; }, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wZXBwZXJpLWxpYi9zcmMvY29yZS9jb21tb24vc2VydmljZXMvdXRpbGl0aWVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFFekMsNEJBQTRCO0FBQzVCLDRCQUE0QjtBQUM1Qix5QkFBeUI7QUFDekIsdUJBQXVCO0FBQ3ZCLHlCQUF5QjtBQUN6Qix3QkFBd0I7QUFDeEIsc0JBQXNCO0FBQ3RCLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixRQUFRO0FBRVIsMkNBQTJDO0FBQzNDLHFCQUFxQjtBQUNyQixvREFBb0Q7QUFDcEQsMENBQTBDO0FBQzFDLDhDQUE4QztBQUU5QyxnREFBZ0Q7QUFDaEQsb0NBQW9DO0FBQ3BDLG9DQUFvQztBQUNwQyw4RUFBOEU7QUFDOUUsb0JBQW9CO0FBQ3BCLGdCQUFnQjtBQUNoQixZQUFZO0FBQ1osUUFBUTtBQUVSLHlCQUF5QjtBQUN6QiwrREFBK0Q7QUFDL0QsUUFBUTtBQUNSLElBQUk7QUFFSiw2QkFBNkI7QUFDN0Isd0JBQXdCO0FBQ3hCLHlCQUF5QjtBQUN6Qix3QkFBd0I7QUFDeEIseUJBQXlCO0FBRXpCLDRFQUE0RTtBQUM1RSxnQ0FBZ0M7QUFDaEMsa0NBQWtDO0FBQ2xDLG9DQUFvQztBQUNwQyxzQ0FBc0M7QUFDdEMsUUFBUTtBQUVSLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsK0RBQStEO0FBQy9ELHNDQUFzQztBQUN0QyxzRUFBc0U7QUFDdEUsdUNBQXVDO0FBQ3ZDLHNFQUFzRTtBQUN0RSxnRUFBZ0U7QUFDaEUsaUVBQWlFO0FBQ2pFLCtEQUErRDtBQUMvRCxpRUFBaUU7QUFDakUsWUFBWTtBQUNaLHlCQUF5QjtBQUN6QixRQUFR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SUFFRCx1QkFBdUIsQ0FBQyxJQUFVLEVBQUUsV0FBb0IsS0FBSztRQUN6RCxJQUFJLFFBQVEsRUFBRTtZQUNWLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztTQUN0RDtRQUVELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3JCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNoQixNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQztRQUNwQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV6QixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBVztRQUNwQixJQUFJO1lBQ0EsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztnRkFyRVEsZ0JBQWdCO3dEQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCLG1CQUZiLE1BQU07a0RBRVQsZ0JBQWdCO2NBSDVCLFVBQVU7ZUFBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vLyBleHBvcnQgY2xhc3MgSnNvbkZpbHRlciB7XHJcbi8vICAgICBFeHByZXNzaW9uSWQ6IG51bWJlcjtcclxuLy8gICAgIENvbXBsZXhJZDogbnVtYmVyO1xyXG4vLyAgICAgQXBpTmFtZTogc3RyaW5nO1xyXG4vLyAgICAgT3BlcmF0aW9uOiBzdHJpbmc7XHJcbi8vICAgICBWYWx1ZXM6IHN0cmluZ1tdO1xyXG4vLyAgICAgY29uc3RydWN0b3IoKSB7XHJcbi8vICAgICAgICAgdGhpcy5FeHByZXNzaW9uSWQgPSAxO1xyXG4vLyAgICAgICAgIHRoaXMuQXBpTmFtZSA9ICcnO1xyXG4vLyAgICAgICAgIHRoaXMuT3BlcmF0aW9uID0gJyc7XHJcbi8vICAgICAgICAgdGhpcy5WYWx1ZXMgPSBbXTtcclxuLy8gICAgIH1cclxuXHJcbi8vICAgICBpbml0RnJvbU9iaihvYmo6IEpzb25GaWx0ZXIpOiB2b2lkIHtcclxuLy8gICAgICAgICBpZiAob2JqKSB7XHJcbi8vICAgICAgICAgICAgIHRoaXMuRXhwcmVzc2lvbklkID0gb2JqLkV4cHJlc3Npb25JZDtcclxuLy8gICAgICAgICAgICAgdGhpcy5BcGlOYW1lID0gb2JqLkFwaU5hbWU7XHJcbi8vICAgICAgICAgICAgIHRoaXMuT3BlcmF0aW9uID0gb2JqLk9wZXJhdGlvbjtcclxuXHJcbi8vICAgICAgICAgICAgIGlmICh0aGlzLlZhbHVlcyAhPT0gb2JqLlZhbHVlcykge1xyXG4vLyAgICAgICAgICAgICAgICAgdGhpcy5WYWx1ZXMgPSBbXTtcclxuLy8gICAgICAgICAgICAgICAgIGlmIChvYmouVmFsdWVzKSB7XHJcbi8vICAgICAgICAgICAgICAgICAgICAgb2JqLlZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4gdGhpcy5WYWx1ZXMucHVzaCh2YWx1ZSkpO1xyXG4vLyAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIFZhbGlkKCk6IGJvb2xlYW4ge1xyXG4vLyAgICAgICAgIHJldHVybiB0aGlzLk9wZXJhdGlvbiAhPT0gJycgJiYgdGhpcy5BcGlOYW1lICE9PSAnJztcclxuLy8gICAgIH1cclxuLy8gfVxyXG5cclxuLy8gZXhwb3J0IGNsYXNzIEpzb25GaWx0ZXJzIHtcclxuLy8gICAgIGxlZnROb2RlOiBzdHJpbmc7XHJcbi8vICAgICByaWdodE5vZGU6IHN0cmluZztcclxuLy8gICAgIG9wZXJhdG9yOiBzdHJpbmc7XHJcbi8vICAgICBDb21wbGV4SWQ6IG51bWJlcjtcclxuXHJcbi8vICAgICBjb25zdHJ1Y3RvcihsZWZ0ID0gJycsIHJpZ2h0ID0gJycsIG9wZXJhdG9yID0gJ0FORCcsIGNvbXBsZXhJZCA9IDIpIHtcclxuLy8gICAgICAgICB0aGlzLmxlZnROb2RlID0gbGVmdDtcclxuLy8gICAgICAgICB0aGlzLnJpZ2h0Tm9kZSA9IHJpZ2h0O1xyXG4vLyAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcclxuLy8gICAgICAgICB0aGlzLkNvbXBsZXhJZCA9IGNvbXBsZXhJZDtcclxuLy8gICAgIH1cclxuXHJcbi8vICAgICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4vLyAgICAgICAgIGxldCByZXRWYWwgPSAnJztcclxuLy8gICAgICAgICBpZiAodGhpcy5sZWZ0Tm9kZSAhPT0gJycgJiYgdGhpcy5yaWdodE5vZGUgPT09ICcnKSB7XHJcbi8vICAgICAgICAgICAgIHJldFZhbCA9IHRoaXMubGVmdE5vZGU7XHJcbi8vICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnROb2RlID09PSAnJyAmJiB0aGlzLnJpZ2h0Tm9kZSAhPT0gJycpIHtcclxuLy8gICAgICAgICAgICAgcmV0VmFsID0gdGhpcy5yaWdodE5vZGU7XHJcbi8vICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxlZnROb2RlICE9PSAnJyAmJiB0aGlzLnJpZ2h0Tm9kZSAhPT0gJycpIHtcclxuLy8gICAgICAgICAgICAgcmV0VmFsID0gJ3sgXCJDb21wbGV4SWRcIjonICsgdGhpcy5Db21wbGV4SWQgKyAnLCc7XHJcbi8vICAgICAgICAgICAgIHJldFZhbCArPSAnIFwiT3BlcmF0aW9uXCI6XCInICsgdGhpcy5vcGVyYXRvciArICdcIiwnO1xyXG4vLyAgICAgICAgICAgICByZXRWYWwgKz0gJyBcIkxlZnROb2RlXCI6ICcgKyB0aGlzLmxlZnROb2RlICsgJywnO1xyXG4vLyAgICAgICAgICAgICByZXRWYWwgKz0gJyBcIlJpZ2h0Tm9kZVwiOiAnICsgdGhpcy5yaWdodE5vZGUgKyAnfSc7XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICAgIHJldHVybiByZXRWYWw7XHJcbi8vICAgICB9XHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCBlbnVtIERBVEVfUkFOR0Uge1xyXG4vLyAgICAgTm9uZSA9IDAsXHJcbi8vICAgICBJblRoZUxhc3QgPSAxLFxyXG4vLyAgICAgVG9kYXkgPSAyLFxyXG4vLyAgICAgVGhpc1dlZWsgPSAzLFxyXG4vLyAgICAgVGhpc01vbnRoID0gNCxcclxuLy8gICAgIC8qQmVmb3JlID0gNSwgQWZ0ZXIgPSA2LCovIEJldHdlZW4gPSA1LFxyXG4vLyAgICAgRHVlSW4gPSA2LFxyXG4vLyAgICAgT24gPSA3LFxyXG4vLyAgICAgTm90SW5UaGVMYXN0ID0gOCxcclxuLy8gICAgIE5vdER1ZUluID0gOSxcclxuLy8gICAgIElzRW1wdHkgPSAxMCxcclxuLy8gICAgIElzTm90RW1wdHkgPSAxMSxcclxuLy8gfVxyXG4vLyBleHBvcnQgZW51bSBEQVRFX1BFUklPRCB7XHJcbi8vICAgICBOb25lID0gMCxcclxuLy8gICAgIERheXMgPSAxLFxyXG4vLyAgICAgV2Vla3MgPSAyLFxyXG4vLyAgICAgTW9udGhzID0gMyxcclxuLy8gICAgIFllYXJzID0gNCxcclxuLy8gfVxyXG4vLyBleHBvcnQgZW51bSBEQVRFX1JBTkdFX1ZJRVdUWVBFIHtcclxuLy8gICAgIE5vbmUgPSAwLFxyXG4vLyAgICAgUGVyaW9kID0gMSxcclxuLy8gICAgIE9uZUNhbGVuZGFyID0gMixcclxuLy8gICAgIFR3b0NhbGVuZGFycyA9IDMsXHJcbi8vICAgICBOb0NhbGVuZGFycyA9IDQsXHJcbi8vIH1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFV0aWxpdGllc1NlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgICBwYXJzZURhdGUoZGF0ZVN0cjogc3RyaW5nLCBzaG93VGltZTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICBsZXQgcmV0VmFsID0gbnVsbDtcclxuICAgICAgICBpZiAoZGF0ZVN0ciAhPT0gJycpIHtcclxuICAgICAgICAgICAgcmV0VmFsID0gbmV3IERhdGUoZGF0ZVN0cik7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUZXh0ID0gZGF0ZVN0ci5zcGxpdCgnLScpO1xyXG4gICAgICAgICAgICBpZiAoZGF0ZVRleHQubGVuZ3RoID09PSAzICYmICFzaG93VGltZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IE51bWJlcihkYXRlVGV4dFswXSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb250aCA9IE51bWJlcihkYXRlVGV4dFsxXSkgLSAxO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVUZXh0WzJdKTtcclxuICAgICAgICAgICAgICAgIHJldFZhbCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXRWYWwgJiYgaXNOYU4ocmV0VmFsLmdldFRpbWUoKSkpIHtcclxuICAgICAgICAgICAgcmV0VmFsID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZhbDtcclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdpZnlEYXRlKGRhdGU6IERhdGUsIHNob3dUaW1lOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChkYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUZXh0ID0gW107XHJcbiAgICAgICAgICAgIGRhdGVUZXh0LnB1c2goZGF0ZS5nZXRGdWxsWWVhcigpLCAnLScsIGRhdGUuZ2V0TW9udGgoKSArIDEsICctJywgZGF0ZS5nZXREYXRlKCkpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlVGV4dC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICdUJyxcclxuICAgICAgICAgICAgICAgICAgICAoZGF0ZS5nZXRIb3VycygpIDwgMTAgPyAnMCcgOiAnJykgKyBkYXRlLmdldEhvdXJzKCksXHJcbiAgICAgICAgICAgICAgICAgICAgJzonLFxyXG4gICAgICAgICAgICAgICAgICAgIChkYXRlLmdldE1pbnV0ZXMoKSA8IDEwID8gJzAnIDogJycpICsgZGF0ZS5nZXRNaW51dGVzKCksXHJcbiAgICAgICAgICAgICAgICAgICAgJzonLFxyXG4gICAgICAgICAgICAgICAgICAgIChkYXRlLmdldFNlY29uZHMoKSA8IDEwID8gJzAnIDogJycpICsgZGF0ZS5nZXRTZWNvbmRzKCksXHJcbiAgICAgICAgICAgICAgICAgICAgJ1onXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZVRleHQuam9pbignJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdHJpbmdpZnlEYXRlV2l0aE9mZnNldChkYXRlOiBEYXRlLCBzaG93VGltZTogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0TWludXRlcyA9IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xO1xyXG4gICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoZGF0ZS5nZXRNaW51dGVzKCkgLSBvZmZzZXRNaW51dGVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeURhdGUoZGF0ZSwgc2hvd1RpbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVmFsdWVIdG1sKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgUkVHRVhQID0gLzxcXC8/W2Etel1bXFxzXFxTXSo+L2k7XHJcbiAgICAgICAgcmVzID0gUkVHRVhQLnRlc3QodmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSnNvblN0cmluZyhzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIEpTT04ucGFyc2Uoc3RyKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuIl19