UNPKG

@pepperi/ngx-lib

Version:

Pepperi Angular Components and Services

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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUV6Qyw0QkFBNEI7QUFDNUIsNEJBQTRCO0FBQzVCLHlCQUF5QjtBQUN6Qix1QkFBdUI7QUFDdkIseUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4QixzQkFBc0I7QUFDdEIsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsNEJBQTRCO0FBQzVCLFFBQVE7QUFFUiwyQ0FBMkM7QUFDM0MscUJBQXFCO0FBQ3JCLG9EQUFvRDtBQUNwRCwwQ0FBMEM7QUFDMUMsOENBQThDO0FBRTlDLGdEQUFnRDtBQUNoRCxvQ0FBb0M7QUFDcEMsb0NBQW9DO0FBQ3BDLDhFQUE4RTtBQUM5RSxvQkFBb0I7QUFDcEIsZ0JBQWdCO0FBQ2hCLFlBQVk7QUFDWixRQUFRO0FBRVIseUJBQXlCO0FBQ3pCLCtEQUErRDtBQUMvRCxRQUFRO0FBQ1IsSUFBSTtBQUVKLDZCQUE2QjtBQUM3Qix3QkFBd0I7QUFDeEIseUJBQXlCO0FBQ3pCLHdCQUF3QjtBQUN4Qix5QkFBeUI7QUFFekIsNEVBQTRFO0FBQzVFLGdDQUFnQztBQUNoQyxrQ0FBa0M7QUFDbEMsb0NBQW9DO0FBQ3BDLHNDQUFzQztBQUN0QyxRQUFRO0FBRVIsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQiwrREFBK0Q7QUFDL0Qsc0NBQXNDO0FBQ3RDLHNFQUFzRTtBQUN0RSx1Q0FBdUM7QUFDdkMsc0VBQXNFO0FBQ3RFLGdFQUFnRTtBQUNoRSxpRUFBaUU7QUFDakUsK0RBQStEO0FBQy9ELGlFQUFpRTtBQUNqRSxZQUFZO0FBQ1oseUJBQXlCO0FBQ3pCLFFBQVE7QUFD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LHVCQUF1QixDQUFDLElBQVUsRUFBRSxXQUFvQixLQUFLO1FBQ3pELElBQUksUUFBUSxFQUFFO1lBQ1YsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDO1NBQ3REO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDckIsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDO1FBQ3BDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpCLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXO1FBQ3BCLElBQUk7WUFDQSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25CO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7O2dGQXJFUSxnQkFBZ0I7d0RBQWhCLGdCQUFnQixXQUFoQixnQkFBZ0IsbUJBRmIsTUFBTTtrREFFVCxnQkFBZ0I7Y0FINUIsVUFBVTtlQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8vIGV4cG9ydCBjbGFzcyBKc29uRmlsdGVyIHtcclxuLy8gICAgIEV4cHJlc3Npb25JZDogbnVtYmVyO1xyXG4vLyAgICAgQ29tcGxleElkOiBudW1iZXI7XHJcbi8vICAgICBBcGlOYW1lOiBzdHJpbmc7XHJcbi8vICAgICBPcGVyYXRpb246IHN0cmluZztcclxuLy8gICAgIFZhbHVlczogc3RyaW5nW107XHJcbi8vICAgICBjb25zdHJ1Y3RvcigpIHtcclxuLy8gICAgICAgICB0aGlzLkV4cHJlc3Npb25JZCA9IDE7XHJcbi8vICAgICAgICAgdGhpcy5BcGlOYW1lID0gJyc7XHJcbi8vICAgICAgICAgdGhpcy5PcGVyYXRpb24gPSAnJztcclxuLy8gICAgICAgICB0aGlzLlZhbHVlcyA9IFtdO1xyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIGluaXRGcm9tT2JqKG9iajogSnNvbkZpbHRlcik6IHZvaWQge1xyXG4vLyAgICAgICAgIGlmIChvYmopIHtcclxuLy8gICAgICAgICAgICAgdGhpcy5FeHByZXNzaW9uSWQgPSBvYmouRXhwcmVzc2lvbklkO1xyXG4vLyAgICAgICAgICAgICB0aGlzLkFwaU5hbWUgPSBvYmouQXBpTmFtZTtcclxuLy8gICAgICAgICAgICAgdGhpcy5PcGVyYXRpb24gPSBvYmouT3BlcmF0aW9uO1xyXG5cclxuLy8gICAgICAgICAgICAgaWYgKHRoaXMuVmFsdWVzICE9PSBvYmouVmFsdWVzKSB7XHJcbi8vICAgICAgICAgICAgICAgICB0aGlzLlZhbHVlcyA9IFtdO1xyXG4vLyAgICAgICAgICAgICAgICAgaWYgKG9iai5WYWx1ZXMpIHtcclxuLy8gICAgICAgICAgICAgICAgICAgICBvYmouVmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLlZhbHVlcy5wdXNoKHZhbHVlKSk7XHJcbi8vICAgICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICB9XHJcbi8vICAgICB9XHJcblxyXG4vLyAgICAgVmFsaWQoKTogYm9vbGVhbiB7XHJcbi8vICAgICAgICAgcmV0dXJuIHRoaXMuT3BlcmF0aW9uICE9PSAnJyAmJiB0aGlzLkFwaU5hbWUgIT09ICcnO1xyXG4vLyAgICAgfVxyXG4vLyB9XHJcblxyXG4vLyBleHBvcnQgY2xhc3MgSnNvbkZpbHRlcnMge1xyXG4vLyAgICAgbGVmdE5vZGU6IHN0cmluZztcclxuLy8gICAgIHJpZ2h0Tm9kZTogc3RyaW5nO1xyXG4vLyAgICAgb3BlcmF0b3I6IHN0cmluZztcclxuLy8gICAgIENvbXBsZXhJZDogbnVtYmVyO1xyXG5cclxuLy8gICAgIGNvbnN0cnVjdG9yKGxlZnQgPSAnJywgcmlnaHQgPSAnJywgb3BlcmF0b3IgPSAnQU5EJywgY29tcGxleElkID0gMikge1xyXG4vLyAgICAgICAgIHRoaXMubGVmdE5vZGUgPSBsZWZ0O1xyXG4vLyAgICAgICAgIHRoaXMucmlnaHROb2RlID0gcmlnaHQ7XHJcbi8vICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xyXG4vLyAgICAgICAgIHRoaXMuQ29tcGxleElkID0gY29tcGxleElkO1xyXG4vLyAgICAgfVxyXG5cclxuLy8gICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbi8vICAgICAgICAgbGV0IHJldFZhbCA9ICcnO1xyXG4vLyAgICAgICAgIGlmICh0aGlzLmxlZnROb2RlICE9PSAnJyAmJiB0aGlzLnJpZ2h0Tm9kZSA9PT0gJycpIHtcclxuLy8gICAgICAgICAgICAgcmV0VmFsID0gdGhpcy5sZWZ0Tm9kZTtcclxuLy8gICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVmdE5vZGUgPT09ICcnICYmIHRoaXMucmlnaHROb2RlICE9PSAnJykge1xyXG4vLyAgICAgICAgICAgICByZXRWYWwgPSB0aGlzLnJpZ2h0Tm9kZTtcclxuLy8gICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGVmdE5vZGUgIT09ICcnICYmIHRoaXMucmlnaHROb2RlICE9PSAnJykge1xyXG4vLyAgICAgICAgICAgICByZXRWYWwgPSAneyBcIkNvbXBsZXhJZFwiOicgKyB0aGlzLkNvbXBsZXhJZCArICcsJztcclxuLy8gICAgICAgICAgICAgcmV0VmFsICs9ICcgXCJPcGVyYXRpb25cIjpcIicgKyB0aGlzLm9wZXJhdG9yICsgJ1wiLCc7XHJcbi8vICAgICAgICAgICAgIHJldFZhbCArPSAnIFwiTGVmdE5vZGVcIjogJyArIHRoaXMubGVmdE5vZGUgKyAnLCc7XHJcbi8vICAgICAgICAgICAgIHJldFZhbCArPSAnIFwiUmlnaHROb2RlXCI6ICcgKyB0aGlzLnJpZ2h0Tm9kZSArICd9JztcclxuLy8gICAgICAgICB9XHJcbi8vICAgICAgICAgcmV0dXJuIHJldFZhbDtcclxuLy8gICAgIH1cclxuLy8gfVxyXG5cclxuLy8gZXhwb3J0IGVudW0gREFURV9SQU5HRSB7XHJcbi8vICAgICBOb25lID0gMCxcclxuLy8gICAgIEluVGhlTGFzdCA9IDEsXHJcbi8vICAgICBUb2RheSA9IDIsXHJcbi8vICAgICBUaGlzV2VlayA9IDMsXHJcbi8vICAgICBUaGlzTW9udGggPSA0LFxyXG4vLyAgICAgLypCZWZvcmUgPSA1LCBBZnRlciA9IDYsKi8gQmV0d2VlbiA9IDUsXHJcbi8vICAgICBEdWVJbiA9IDYsXHJcbi8vICAgICBPbiA9IDcsXHJcbi8vICAgICBOb3RJblRoZUxhc3QgPSA4LFxyXG4vLyAgICAgTm90RHVlSW4gPSA5LFxyXG4vLyAgICAgSXNFbXB0eSA9IDEwLFxyXG4vLyAgICAgSXNOb3RFbXB0eSA9IDExLFxyXG4vLyB9XHJcbi8vIGV4cG9ydCBlbnVtIERBVEVfUEVSSU9EIHtcclxuLy8gICAgIE5vbmUgPSAwLFxyXG4vLyAgICAgRGF5cyA9IDEsXHJcbi8vICAgICBXZWVrcyA9IDIsXHJcbi8vICAgICBNb250aHMgPSAzLFxyXG4vLyAgICAgWWVhcnMgPSA0LFxyXG4vLyB9XHJcbi8vIGV4cG9ydCBlbnVtIERBVEVfUkFOR0VfVklFV1RZUEUge1xyXG4vLyAgICAgTm9uZSA9IDAsXHJcbi8vICAgICBQZXJpb2QgPSAxLFxyXG4vLyAgICAgT25lQ2FsZW5kYXIgPSAyLFxyXG4vLyAgICAgVHdvQ2FsZW5kYXJzID0gMyxcclxuLy8gICAgIE5vQ2FsZW5kYXJzID0gNCxcclxuLy8gfVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXRpbGl0aWVzU2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIHBhcnNlRGF0ZShkYXRlU3RyOiBzdHJpbmcsIHNob3dUaW1lOiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xyXG4gICAgICAgIGxldCByZXRWYWwgPSBudWxsO1xyXG4gICAgICAgIGlmIChkYXRlU3RyICE9PSAnJykge1xyXG4gICAgICAgICAgICByZXRWYWwgPSBuZXcgRGF0ZShkYXRlU3RyKTtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZVRleHQgPSBkYXRlU3RyLnNwbGl0KCctJyk7XHJcbiAgICAgICAgICAgIGlmIChkYXRlVGV4dC5sZW5ndGggPT09IDMgJiYgIXNob3dUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVUZXh0WzBdKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gTnVtYmVyKGRhdGVUZXh0WzFdKSAtIDE7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBOdW1iZXIoZGF0ZVRleHRbMl0pO1xyXG4gICAgICAgICAgICAgICAgcmV0VmFsID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJldFZhbCAmJiBpc05hTihyZXRWYWwuZ2V0VGltZSgpKSkge1xyXG4gICAgICAgICAgICByZXRWYWwgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0VmFsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0cmluZ2lmeURhdGUoZGF0ZTogRGF0ZSwgc2hvd1RpbWU6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGRhdGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZVRleHQgPSBbXTtcclxuICAgICAgICAgICAgZGF0ZVRleHQucHVzaChkYXRlLmdldEZ1bGxZZWFyKCksICctJywgZGF0ZS5nZXRNb250aCgpICsgMSwgJy0nLCBkYXRlLmdldERhdGUoKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2hvd1RpbWUpIHtcclxuICAgICAgICAgICAgICAgIGRhdGVUZXh0LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgJ1QnLFxyXG4gICAgICAgICAgICAgICAgICAgIChkYXRlLmdldEhvdXJzKCkgPCAxMCA/ICcwJyA6ICcnKSArIGRhdGUuZ2V0SG91cnMoKSxcclxuICAgICAgICAgICAgICAgICAgICAnOicsXHJcbiAgICAgICAgICAgICAgICAgICAgKGRhdGUuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgOiAnJykgKyBkYXRlLmdldE1pbnV0ZXMoKSxcclxuICAgICAgICAgICAgICAgICAgICAnOicsXHJcbiAgICAgICAgICAgICAgICAgICAgKGRhdGUuZ2V0U2Vjb25kcygpIDwgMTAgPyAnMCcgOiAnJykgKyBkYXRlLmdldFNlY29uZHMoKSxcclxuICAgICAgICAgICAgICAgICAgICAnWidcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlVGV4dC5qb2luKCcnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0cmluZ2lmeURhdGVXaXRoT2Zmc2V0KGRhdGU6IERhdGUsIHNob3dUaW1lOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChzaG93VGltZSkge1xyXG4gICAgICAgICAgICBjb25zdCBvZmZzZXRNaW51dGVzID0gbmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpICogLTE7XHJcbiAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSAtIG9mZnNldE1pbnV0ZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5RGF0ZShkYXRlLCBzaG93VGltZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNWYWx1ZUh0bWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBSRUdFWFAgPSAvPFxcLz9bYS16XVtcXHNcXFNdKj4vaTtcclxuICAgICAgICByZXMgPSBSRUdFWFAudGVzdCh2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgaXNKc29uU3RyaW5nKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgSlNPTi5wYXJzZShzdHIpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxufVxyXG4iXX0=