@qrsln/utils
Version:
260 lines (252 loc) • 11.3 kB
JavaScript
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