Browse Source

feat: add remove method to lazy loading service

pull/4133/head
Arman Ozak 6 years ago
parent
commit
bb9851cb15
  1. 13
      npm/ng-packs/packages/core/src/lib/services/lazy-load.service.ts
  2. 28
      npm/ng-packs/packages/core/src/lib/tests/lazy-load.service.spec.ts

13
npm/ng-packs/packages/core/src/lib/services/lazy-load.service.ts

@ -8,7 +8,7 @@ import { uuid } from '../utils';
providedIn: 'root',
})
export class LazyLoadService {
readonly loaded = new Set();
readonly loaded = new Map<string, HTMLScriptElement | HTMLLinkElement>();
loadedLibraries: { [url: string]: ReplaySubject<void> } = {};
@ -45,7 +45,7 @@ export class LazyLoadService {
throwError(new CustomEvent('error')),
),
),
tap(() => this.loaded.add(strategy.path)),
tap(() => this.loaded.set(strategy.path, strategy.element)),
delay(100),
shareReplay({ bufferSize: 1, refCount: true }),
);
@ -113,4 +113,13 @@ export class LazyLoadService {
});
});
}
remove(path: string): boolean {
if (!this.loaded.has(path)) return false;
const element = this.loaded.get(path);
element.parentNode.removeChild(element);
this.loaded.delete(path);
return true;
}
}

28
npm/ng-packs/packages/core/src/lib/tests/lazy-load.service.spec.ts

@ -49,7 +49,7 @@ describe('LazyLoadService', () => {
it('should emit a custom load event if loaded if resource is loaded before', done => {
const loadEvent = new CustomEvent('load');
service.loaded.add(strategy.path);
service.loaded.set(strategy.path, null);
service.load(strategy).subscribe(event => {
expect(event).toEqual(loadEvent);
@ -57,6 +57,32 @@ describe('LazyLoadService', () => {
});
});
});
describe('#remove', () => {
const service = new LazyLoadService();
it('should remove an already lazy loaded element and return true', () => {
const script = document.createElement('script');
document.body.appendChild(script);
service.loaded.set('x', script);
expect(document.body.lastElementChild).toBe(script);
const result = service.remove('x');
expect(document.body.lastElementChild).toBeNull();
expect(service.loaded.has('x')).toBe(false);
expect(result).toBe(true);
});
it('should return false when path not found', () => {
service.loaded.set('foo', null);
const result = service.remove('bar');
expect(result).toBe(false);
});
});
});
describe('LazyLoadService (Deprecated)', () => {

Loading…
Cancel
Save