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
JavaScript
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