import { Injectable } from '@angular/core'; /** provides a caching service, with a key, the data and a timeout () Warning: Objects are stored as json-Strings. I.e. Dates objects (and others) may not be converted correctly */ @Injectable() export class CacheService { constructor() {} save(options: LocalStorageSaveOptions) { // Set default values for optionals options.expirationMins = options.expirationMins || 0; // Set expiration date in miliseconds const expirationMS = options.expirationMins !== 0 ? options.expirationMins * 60 * 1000 : 0; const record = { value: typeof options.data === 'string' ? options.data : JSON.stringify(options.data), expiration: expirationMS !== 0 ? new Date().getTime() + expirationMS : null, hasExpiration: expirationMS !== 0 ? true : false, }; localStorage.setItem(options.key, JSON.stringify(record)); } load(key: string) { // Get cached data from localstorage const item = localStorage.getItem(key); if (item !== null) { const record = JSON.parse(item); const now = new Date().getTime(); // Expired data will return null if (!record || (record.hasExpiration && record.expiration <= now)) { return null; } else { return JSON.parse(record.value); } } return null; } remove(key: string) { localStorage.removeItem(key); } cleanLocalStorage() { localStorage.clear(); } } export class LocalStorageSaveOptions { key = ''; data: any; expirationMins?: number; }