UNPKG

@qrsln/utils

Version:
260 lines (252 loc) 11.3 kB
import * as i0 from '@angular/core'; import { Injectable, PLATFORM_ID, Inject, EventEmitter } from '@angular/core'; import { isPlatformBrowser, DOCUMENT } from '@angular/common'; class DomService { constructor(viewContainerRef, appRef) { this.viewContainerRef = viewContainerRef; this.appRef = appRef; } GetComponentRef(component, componentProps) { // 1. Create a component reference from the component const componentRef = this.viewContainerRef.createComponent(component); if (componentProps && typeof componentRef.instance === 'object') { Object.assign(componentRef.instance, componentProps); } return componentRef; } AttachComponent(componentRef, element, asSibling = false) { // 2. Attach component to the appRef so that it's inside the ng component tree this.appRef.attachView(componentRef.hostView); // 3. Get DOM element from component const domElem = componentRef.hostView.rootNodes[0]; // 4. Append DOM element to the body if (asSibling && element.parentNode) { element.parentNode.insertBefore(domElem, element.nextSibling); // console.log('append as Sibling', domElem); } else { element.appendChild(domElem); // console.log('appendChild', domElem); } } Append(component, element, asSibling = true) { const componentRef = this.GetComponentRef(component); this.AttachComponent(componentRef, element, asSibling); return componentRef; } Remove(componentRef) { // 5. Wait some time and remove it from the component tree and from the DOM try { if (!!componentRef) { this.appRef.detachView(componentRef.hostView); componentRef.destroy(); return true; } return false; } catch (_a) { return false; } } } DomService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DomService, deps: [{ token: i0.ViewContainerRef }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); DomService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DomService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: DomService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ApplicationRef }]; } }); var StorageType; (function (StorageType) { StorageType[StorageType["Local"] = 0] = "Local"; StorageType[StorageType["Session"] = 1] = "Session"; StorageType[StorageType["Cookie"] = 2] = "Cookie"; })(StorageType || (StorageType = {})); /** @dynamic */ class WebStorageService { constructor(document, platformId) { this.document = document; this.platformId = platformId; // console.log('isPlatformBrowser', isPlatformBrowser(this.platformId), this.document); } Set(storageType, key, obj, expMin = 60) { // const expires = new Date(year, month, day, hours, minutes, seconds, milliseconds); const expires = new Date(); expires.setMinutes(expires.getMinutes() + expMin); const data = { ExpiresAt: Date.parse(expires.toString()), Data: obj }; // console.log('Set isPlatformBrowser', isPlatformBrowser(this.platformId), this.document); if (isPlatformBrowser(this.platformId)) { switch (storageType) { case StorageType.Cookie: const expireCookie = 'expires=' + new Date(data.ExpiresAt).toUTCString(); this.SetCookie(key, JSON.stringify(data), expireCookie, '/'); break; case StorageType.Local: localStorage.setItem(key, JSON.stringify(data)); break; case StorageType.Session: sessionStorage.setItem(key, JSON.stringify(data)); break; } } return this.Get(storageType, key); } Get(storageType, key) { // console.log('Get isPlatformBrowser', isPlatformBrowser(this.platformId), this.document); let data = null; if (isPlatformBrowser(this.platformId)) { switch (storageType) { case StorageType.Cookie: data = this.GetCookie(key); break; case StorageType.Local: data = window.localStorage.getItem(key); break; case StorageType.Session: data = window.sessionStorage.getItem(key); break; } } // console.log('Get', data); if (data !== 'undefined' && data !== undefined && data !== null) { return this.CheckData(storageType, key, data); } return null; } Remove(storageType, key) { switch (storageType) { case StorageType.Cookie: this.RemoveCookie(key, '/'); console.log(key, ' Cookie expired'); break; case StorageType.Local: window.localStorage.removeItem(key); console.log(key, 'localStorage expired'); break; case StorageType.Session: window.sessionStorage.removeItem(key); console.log(key, 'session expired'); break; } } //#region Cookie GetCookie(key) { const cookies = this.document.cookie.split(';'); const cookieName = `${key}=`; let data = cookies.map(x => x.replace(/^\s+/g, '')) .find(x => x.indexOf(cookieName) === 0); data = data ? data.substring(cookieName.length, data.length) : null; return data; } SetCookie(key, data, expireCookie, path = '/') { if (isPlatformBrowser(this.platformId)) { this.document.cookie = key + '=' + data + '; ' + expireCookie + (path.length > 0 ? '; path=' + path : ''); } } RemoveCookie(key, path = '/') { const d = new Date(); d.setTime(d.getTime() + -1 * 24 * 60 * 60 * 1000); // console.log(d); const data = ''; const expireCookie = 'expires=' + d.toUTCString(); if (isPlatformBrowser(this.platformId)) { this.document.cookie = key + '=' + data + '; ' + expireCookie + (path.length > 0 ? '; path=' + path : ''); } } //#endregion CheckData(storageType, key, obj) { const sessionObject = JSON.parse(obj); // console.log(key, sessionObject, new Date(sessionObject.ExpiresAt)); if (Date.parse(new Date().toString()) < sessionObject.ExpiresAt) { return sessionObject.Data; } else { this.Remove(storageType, key); return null; } } } WebStorageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: WebStorageService, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); WebStorageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: WebStorageService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: WebStorageService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }]; } }); /** @dynamic */ class PaginationService { constructor() { this.Changed = new EventEmitter(); } Paginate(TotalItems, CurrentPage = 1, ItemsPerPage = 10, Size = 7) { // calculate total pages const totalPages = Math.ceil(TotalItems / ItemsPerPage); // ensure current page isn't out of range if (CurrentPage < 1) { CurrentPage = 1; } else if (CurrentPage > totalPages) { CurrentPage = totalPages; } let startPage; let endPage; if (totalPages <= Size) { // less than {{indicatorsPerPage}} total pages so show all startPage = 1; endPage = totalPages; } else { // more than {{indicatorsPerPage}} total pages so calculate start and end pages if (CurrentPage <= +(Size / 2).toFixed(0) + 1) { startPage = 1; endPage = Size; } else if (CurrentPage + 4 >= totalPages) { startPage = totalPages - (Size - 1); endPage = totalPages; } else { startPage = CurrentPage - +(Size / 2).toFixed(0) + 1; endPage = CurrentPage + +(Size / 2).toFixed(0) - 1; } } // calculate start and end item indexes let startIndex = (CurrentPage - 1) * ItemsPerPage; let endIndex = Math.min(startIndex + ItemsPerPage - 1, TotalItems - 1); // create an array of pages to ng-repeat in the pager control let pages = Array.from(Array(endPage + 1 - startPage).keys()).map(i => { const val = startPage + i; return { Value: val, Label: val.toString() }; }); this.Changed.emit(CurrentPage.toString()); // return object with all pager properties required by the view return { Req: { TotalItems, CurrentPage, ItemsPerPage, Size }, Pages: pages, TotalPages: totalPages, StartPage: startPage, StartIndex: startIndex, EndPage: endPage, EndIndex: endIndex, }; } } PaginationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PaginationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); PaginationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PaginationService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: PaginationService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return []; } }); class PagerRequest { } /** * Generated bundle index. Do not edit. */ export { DomService, PagerRequest, PaginationService, StorageType, WebStorageService }; //# sourceMappingURL=qrsln-utils-Services.mjs.map