UNPKG

ngx-gem-spaas

Version:

This library contains services, components, images and styles to provide a unified look and way-of-working throughout GEM SPaaS.

68 lines 8.53 kB
import { Injectable } from '@angular/core'; import { ReplaySubject } from "rxjs"; import { dark, DATA__THEME_DARK, DATA__THEME_LIGHT, light, ThemeModel } from "../_models/theme.model"; import * as i0 from "@angular/core"; import * as i1 from "./settings.service"; export class ThemeService { constructor(settingsService) { this.settingsService = settingsService; this.activeTheme = new ThemeModel('', {}); this.activeTheme$ = new ReplaySubject(1); } // initTheme is called from the app-init.service initTheme() { if (!this.activeTheme?.name) { this.setActiveTheme(this.settingsService.getSettings().dark ? 'dark' : 'light'); } } toggleTheme() { if (this.activeTheme?.name === 'light') { this.setActiveTheme('dark'); } else { this.setActiveTheme('light'); } } setActiveTheme(theme) { // console.log('setting theme to ' + theme); this.activeTheme = theme === 'dark' ? dark : light; this.setCssVariables(this.activeTheme.properties); this.setBodyData(theme === 'dark' ? DATA__THEME_DARK : DATA__THEME_LIGHT); this.newTheme(); } setCssVariables(props) { for (const prop in props) { if (props.hasOwnProperty(prop)) { document.documentElement.style.setProperty(prop, props[prop]); } } } setBodyData(props) { for (const prop in props) { if (props.hasOwnProperty(prop)) { document.body.dataset[prop] = props[prop]; } } } // ******************************************************************************************************** // BROADCAST DATA // ******************************************************************************************************** newTheme() { this.activeTheme$.next(this.activeTheme); } onNewActiveTheme() { return this.activeTheme$.asObservable(); } getActiveTheme() { return this.activeTheme; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ThemeService, deps: [{ token: i1.SettingsService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ThemeService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ThemeService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.SettingsService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1nZW0tc3BhYXMvc3JjL19zZXJ2aWNlcy90aGVtZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFhLGFBQWEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQVksTUFBTSx3QkFBd0IsQ0FBQzs7O0FBSy9HLE1BQU0sT0FBTyxZQUFZO0lBS3ZCLFlBQ1UsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBSmxDLGdCQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLGlCQUFZLEdBQUcsSUFBSSxhQUFhLENBQWEsQ0FBQyxDQUFDLENBQUM7SUFLeEQsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWdCO1FBQzdCLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ25ELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQ3pFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBVTtRQUNwQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMvQixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsMkdBQTJHO0lBQzNHLGlCQUFpQjtJQUNqQiwyR0FBMkc7SUFFbkcsUUFBUTtRQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7K0dBL0RVLFlBQVk7bUhBQVosWUFBWSxjQUZYLE1BQU07OzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuL3NldHRpbmdzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2RhcmssIERBVEFfX1RIRU1FX0RBUkssIERBVEFfX1RIRU1FX0xJR0hULCBsaWdodCwgVGhlbWVNb2RlbCwgVGhlbWVUeXBlfSBmcm9tIFwiLi4vX21vZGVscy90aGVtZS5tb2RlbFwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGhlbWVTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBhY3RpdmVUaGVtZSA9IG5ldyBUaGVtZU1vZGVsKCcnLCB7fSk7XHJcbiAgcHJpdmF0ZSBhY3RpdmVUaGVtZSQgPSBuZXcgUmVwbGF5U3ViamVjdDxUaGVtZU1vZGVsPigxKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgLy8gaW5pdFRoZW1lIGlzIGNhbGxlZCBmcm9tIHRoZSBhcHAtaW5pdC5zZXJ2aWNlXHJcbiAgaW5pdFRoZW1lKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZVRoZW1lPy5uYW1lKSB7XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlVGhlbWUodGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0U2V0dGluZ3MoKS5kYXJrID8gJ2RhcmsnIDogJ2xpZ2h0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVUaGVtZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZVRoZW1lPy5uYW1lID09PSAnbGlnaHQnKSB7XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlVGhlbWUoJ2RhcmsnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlVGhlbWUoJ2xpZ2h0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRBY3RpdmVUaGVtZSh0aGVtZTogVGhlbWVUeXBlKTogdm9pZCB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0dGluZyB0aGVtZSB0byAnICsgdGhlbWUpO1xyXG4gICAgdGhpcy5hY3RpdmVUaGVtZSA9IHRoZW1lID09PSAnZGFyaycgPyBkYXJrIDogbGlnaHQ7XHJcbiAgICB0aGlzLnNldENzc1ZhcmlhYmxlcyh0aGlzLmFjdGl2ZVRoZW1lLnByb3BlcnRpZXMpO1xyXG4gICAgdGhpcy5zZXRCb2R5RGF0YSh0aGVtZSA9PT0gJ2RhcmsnID8gREFUQV9fVEhFTUVfREFSSyA6IERBVEFfX1RIRU1FX0xJR0hUKVxyXG4gICAgdGhpcy5uZXdUaGVtZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q3NzVmFyaWFibGVzKHByb3BzOiBhbnkpOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wcykge1xyXG4gICAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcclxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkocHJvcCwgcHJvcHNbcHJvcF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRCb2R5RGF0YShwcm9wczogYW55KTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gcHJvcHMpIHtcclxuICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KHByb3ApKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5kYXRhc2V0W3Byb3BdID0gcHJvcHNbcHJvcF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgLy8gQlJPQURDQVNUIERBVEFcclxuICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5cclxuICBwcml2YXRlIG5ld1RoZW1lKCkge1xyXG4gICAgdGhpcy5hY3RpdmVUaGVtZSQubmV4dCh0aGlzLmFjdGl2ZVRoZW1lKTtcclxuICB9XHJcblxyXG4gIG9uTmV3QWN0aXZlVGhlbWUoKTogT2JzZXJ2YWJsZTxUaGVtZU1vZGVsPiB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVUaGVtZSQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRBY3RpdmVUaGVtZSgpOiBUaGVtZU1vZGVsIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZVRoZW1lO1xyXG4gIH1cclxuXHJcbn1cclxuIl19