@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
83 lines • 12.3 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject, fromEvent, of } from 'rxjs';
import { map, startWith, switchMap } from 'rxjs/operators';
import { OptionsService } from '../common/options.service';
import { gettext } from '@c8y/ngx-components/gettext';
import { getThemePreference, applyTheme, setThemePreference } from '@c8y/bootstrap';
import * as i0 from "@angular/core";
import * as i1 from "../common/options.service";
export class ThemeSwitcherService {
constructor(options) {
this.options = options;
this.darkThemeClass = `c8y-dark-theme`;
this.themeOptions = [
{
label: gettext('Light'),
value: 'light',
icon: 'sun'
},
{
label: gettext('Dark'),
value: 'dark',
icon: 'moon'
},
{
label: gettext('System'),
value: 'system',
icon: 'imac-settings'
}
];
this._userSelectedThemePreference$ = new BehaviorSubject(this.getCurrentThemePreference());
this._temporaryThemePreference$ = new BehaviorSubject('none');
this.userSelectedThemePreference$ = this._userSelectedThemePreference$.asObservable();
const userSelectedTheme$ = this.userSelectedThemePreference$.pipe(switchMap(preference => {
if (preference === 'system') {
return this.getUsersSystemPreferenceForTheme$();
}
return of(preference);
}));
this.disableThemeSelection$ = this._temporaryThemePreference$.pipe(map(preference => preference !== 'none'));
this.currentlyAppliedTheme$ = this._temporaryThemePreference$.pipe(switchMap(temporaryPreference => {
if (temporaryPreference !== 'none') {
return of(temporaryPreference);
}
return userSelectedTheme$;
}));
this.darkThemeAvailable$ = this.options.get$('darkThemeAvailable').pipe(map(value => !!value));
}
getCurrentThemePreference() {
const value = getThemePreference();
if (value === 'system' || value === 'dark') {
return value;
}
return 'light';
}
getUsersSystemPreferenceForTheme$() {
return fromEvent(window.matchMedia('(prefers-color-scheme: dark)'), 'change').pipe(startWith(window.matchMedia('(prefers-color-scheme: dark)')), map((e) => (e.matches ? 'dark' : 'light')));
}
changeUserPreference(preference) {
setThemePreference(preference);
this._userSelectedThemePreference$.next(preference);
this.applyTheme(preference);
}
temporaryChangeTheme(preference) {
this._temporaryThemePreference$.next(preference);
this.applyTheme(preference);
}
resetTemporaryTheme() {
this._temporaryThemePreference$.next('none');
this.applyTheme(this.getCurrentThemePreference());
}
applyTheme(preference) {
applyTheme(preference);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThemeSwitcherService, deps: [{ token: i1.OptionsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThemeSwitcherService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThemeSwitcherService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.OptionsService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtc3dpdGNoZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdWktc2V0dGluZ3MvdGhlbWUtc3dpdGNoZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXRELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBUXBGLE1BQU0sT0FBTyxvQkFBb0I7SUFnQy9CLFlBQW9CLE9BQXVCO1FBQXZCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBL0IzQyxtQkFBYyxHQUFHLGdCQUFnQixDQUFDO1FBS2xDLGlCQUFZLEdBQUc7WUFDYjtnQkFDRSxLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDdkIsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLEtBQUs7YUFDWjtZQUNEO2dCQUNFLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUN0QixLQUFLLEVBQUUsTUFBTTtnQkFDYixJQUFJLEVBQUUsTUFBTTthQUNiO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxRQUFRO2dCQUNmLElBQUksRUFBRSxlQUFlO2FBQ3RCO1NBS0EsQ0FBQztRQUNJLGtDQUE2QixHQUFHLElBQUksZUFBZSxDQUN6RCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FDakMsQ0FBQztRQUNNLCtCQUEwQixHQUFHLElBQUksZUFBZSxDQUF3QixNQUFNLENBQUMsQ0FBQztRQUd0RixJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FDL0QsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3JCLElBQUksVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixPQUFPLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1lBQ2xELENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQ2hFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FDekMsQ0FBQztRQUNGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUNoRSxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRTtZQUM5QixJQUFJLG1CQUFtQixLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUNuQyxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFDRCxPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixNQUFNLEtBQUssR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1FBQ25DLElBQUksS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDM0MsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGlDQUFpQztRQUMvQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNoRixTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEVBQzVELEdBQUcsQ0FBQyxDQUFDLENBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUMzRCxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUFDLFVBQXVDO1FBQzFELGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsb0JBQW9CLENBQUMsVUFBNEI7UUFDL0MsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxVQUF1QztRQUNoRCxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekIsQ0FBQzsrR0F6RlUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9nZXR0ZXh0JztcbmltcG9ydCB7IFN1cHBvcnRlZEljb25zIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pY29uLXNlbGVjdG9yL2ljb25zJztcbmltcG9ydCB7IGdldFRoZW1lUHJlZmVyZW5jZSwgYXBwbHlUaGVtZSwgc2V0VGhlbWVQcmVmZXJlbmNlIH0gZnJvbSAnQGM4eS9ib290c3RyYXAnO1xuXG5leHBvcnQgdHlwZSBUaGVtZU9wdGlvbnMgPSAnbGlnaHQnIHwgJ2RhcmsnO1xuZXhwb3J0IHR5cGUgVGhlbWVQcmVmZXJlbmNlT3B0aW9ucyA9IFRoZW1lT3B0aW9ucyB8ICdzeXN0ZW0nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUaGVtZVN3aXRjaGVyU2VydmljZSB7XG4gIGRhcmtUaGVtZUNsYXNzID0gYGM4eS1kYXJrLXRoZW1lYDtcbiAgZGFya1RoZW1lQXZhaWxhYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdXNlclNlbGVjdGVkVGhlbWVQcmVmZXJlbmNlJDogT2JzZXJ2YWJsZTxUaGVtZVByZWZlcmVuY2VPcHRpb25zPjtcbiAgY3VycmVudGx5QXBwbGllZFRoZW1lJDogT2JzZXJ2YWJsZTxUaGVtZU9wdGlvbnM+O1xuICBkaXNhYmxlVGhlbWVTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICB0aGVtZU9wdGlvbnMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0xpZ2h0JyksXG4gICAgICB2YWx1ZTogJ2xpZ2h0JyxcbiAgICAgIGljb246ICdzdW4nXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnRGFyaycpLFxuICAgICAgdmFsdWU6ICdkYXJrJyxcbiAgICAgIGljb246ICdtb29uJ1xuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ1N5c3RlbScpLFxuICAgICAgdmFsdWU6ICdzeXN0ZW0nLFxuICAgICAgaWNvbjogJ2ltYWMtc2V0dGluZ3MnXG4gICAgfVxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICB2YWx1ZTogVGhlbWVQcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpY29uOiBTdXBwb3J0ZWRJY29ucztcbiAgfVtdO1xuICBwcml2YXRlIF91c2VyU2VsZWN0ZWRUaGVtZVByZWZlcmVuY2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaGVtZVByZWZlcmVuY2VPcHRpb25zPihcbiAgICB0aGlzLmdldEN1cnJlbnRUaGVtZVByZWZlcmVuY2UoKVxuICApO1xuICBwcml2YXRlIF90ZW1wb3JhcnlUaGVtZVByZWZlcmVuY2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaGVtZU9wdGlvbnMgfCAnbm9uZSc+KCdub25lJyk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSkge1xuICAgIHRoaXMudXNlclNlbGVjdGVkVGhlbWVQcmVmZXJlbmNlJCA9IHRoaXMuX3VzZXJTZWxlY3RlZFRoZW1lUHJlZmVyZW5jZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgY29uc3QgdXNlclNlbGVjdGVkVGhlbWUkID0gdGhpcy51c2VyU2VsZWN0ZWRUaGVtZVByZWZlcmVuY2UkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAocHJlZmVyZW5jZSA9PiB7XG4gICAgICAgIGlmIChwcmVmZXJlbmNlID09PSAnc3lzdGVtJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJzU3lzdGVtUHJlZmVyZW5jZUZvclRoZW1lJCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihwcmVmZXJlbmNlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmRpc2FibGVUaGVtZVNlbGVjdGlvbiQgPSB0aGlzLl90ZW1wb3JhcnlUaGVtZVByZWZlcmVuY2UkLnBpcGUoXG4gICAgICBtYXAocHJlZmVyZW5jZSA9PiBwcmVmZXJlbmNlICE9PSAnbm9uZScpXG4gICAgKTtcbiAgICB0aGlzLmN1cnJlbnRseUFwcGxpZWRUaGVtZSQgPSB0aGlzLl90ZW1wb3JhcnlUaGVtZVByZWZlcmVuY2UkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAodGVtcG9yYXJ5UHJlZmVyZW5jZSA9PiB7XG4gICAgICAgIGlmICh0ZW1wb3JhcnlQcmVmZXJlbmNlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICByZXR1cm4gb2YodGVtcG9yYXJ5UHJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVzZXJTZWxlY3RlZFRoZW1lJDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmRhcmtUaGVtZUF2YWlsYWJsZSQgPSB0aGlzLm9wdGlvbnMuZ2V0JCgnZGFya1RoZW1lQXZhaWxhYmxlJykucGlwZShtYXAodmFsdWUgPT4gISF2YWx1ZSkpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFRoZW1lUHJlZmVyZW5jZSgpOiAnbGlnaHQnIHwgJ2RhcmsnIHwgJ3N5c3RlbScge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0VGhlbWVQcmVmZXJlbmNlKCk7XG4gICAgaWYgKHZhbHVlID09PSAnc3lzdGVtJyB8fCB2YWx1ZSA9PT0gJ2RhcmsnKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiAnbGlnaHQnO1xuICB9XG5cbiAgZ2V0VXNlcnNTeXN0ZW1QcmVmZXJlbmNlRm9yVGhlbWUkKCkge1xuICAgIHJldHVybiBmcm9tRXZlbnQod2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKSwgJ2NoYW5nZScpLnBpcGUoXG4gICAgICBzdGFydFdpdGgod2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKSksXG4gICAgICBtYXAoKGU6IE1lZGlhUXVlcnlMaXN0KSA9PiAoZS5tYXRjaGVzID8gJ2RhcmsnIDogJ2xpZ2h0JykpXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZVVzZXJQcmVmZXJlbmNlKHByZWZlcmVuY2U6ICdsaWdodCcgfCAnZGFyaycgfCAnc3lzdGVtJykge1xuICAgIHNldFRoZW1lUHJlZmVyZW5jZShwcmVmZXJlbmNlKTtcbiAgICB0aGlzLl91c2VyU2VsZWN0ZWRUaGVtZVByZWZlcmVuY2UkLm5leHQocHJlZmVyZW5jZSk7XG4gICAgdGhpcy5hcHBseVRoZW1lKHByZWZlcmVuY2UpO1xuICB9XG5cbiAgdGVtcG9yYXJ5Q2hhbmdlVGhlbWUocHJlZmVyZW5jZTogJ2xpZ2h0JyB8ICdkYXJrJykge1xuICAgIHRoaXMuX3RlbXBvcmFyeVRoZW1lUHJlZmVyZW5jZSQubmV4dChwcmVmZXJlbmNlKTtcbiAgICB0aGlzLmFwcGx5VGhlbWUocHJlZmVyZW5jZSk7XG4gIH1cblxuICByZXNldFRlbXBvcmFyeVRoZW1lKCkge1xuICAgIHRoaXMuX3RlbXBvcmFyeVRoZW1lUHJlZmVyZW5jZSQubmV4dCgnbm9uZScpO1xuICAgIHRoaXMuYXBwbHlUaGVtZSh0aGlzLmdldEN1cnJlbnRUaGVtZVByZWZlcmVuY2UoKSk7XG4gIH1cblxuICBhcHBseVRoZW1lKHByZWZlcmVuY2U6ICdsaWdodCcgfCAnZGFyaycgfCAnc3lzdGVtJykge1xuICAgIGFwcGx5VGhlbWUocHJlZmVyZW5jZSk7XG4gIH1cbn1cbiJdfQ==