UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

83 lines 12.3 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUtc3dpdGNoZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdWktc2V0dGluZ3MvdGhlbWUtc3dpdGNoZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQWMsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXRELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBUXBGLE1BQU0sT0FBTyxvQkFBb0I7SUFnQy9CLFlBQW9CLE9BQXVCO1FBQXZCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBL0IzQyxtQkFBYyxHQUFHLGdCQUFnQixDQUFDO1FBS2xDLGlCQUFZLEdBQUc7WUFDYjtnQkFDRSxLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDdkIsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLEtBQUs7YUFDWjtZQUNEO2dCQUNFLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUN0QixLQUFLLEVBQUUsTUFBTTtnQkFDYixJQUFJLEVBQUUsTUFBTTthQUNiO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxRQUFRO2dCQUNmLElBQUksRUFBRSxlQUFlO2FBQ3RCO1NBS0EsQ0FBQztRQUNJLGtDQUE2QixHQUFHLElBQUksZUFBZSxDQUN6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Q0FBQzsrR0F6RlUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9nZXR0ZXh0JztcbmltcG9ydCB7IFN1cHBvcnRlZEljb25zIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pY29uLXNlbGVjdG9yL2ljb25zJztcbmltcG9ydCB7IGdldFRoZW1lUHJlZmVyZW5jZSwgYXBwbHlUaGVtZSwgc2V0VGhlbWVQcmVmZXJlbmNlIH0gZnJvbSAnQGM4eS9ib290c3RyYXAnO1xuXG5leHBvcnQgdHlwZSBUaGVtZU9wdGlvbnMgPSAnbGlnaHQnIHwgJ2RhcmsnO1xuZXhwb3J0IHR5cGUgVGhlbWVQcmVmZXJlbmNlT3B0aW9ucyA9IFRoZW1lT3B0aW9ucyB8ICdzeXN0ZW0nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUaGVtZVN3aXRjaGVyU2VydmljZSB7XG4gIGRhcmtUaGVtZUNsYXNzID0gYGM4eS1kYXJrLXRoZW1lYDtcbiAgZGFya1RoZW1lQXZhaWxhYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgdXNlclNlbGVjdGVkVGhlbWVQcmVmZXJlbmNlJDogT2JzZXJ2YWJsZTxUaGVtZVByZWZlcmVuY2VPcHRpb25zPjtcbiAgY3VycmVudGx5QXBwbGllZFRoZW1lJDogT2JzZXJ2YWJsZTxUaGVtZU9wdGlvbnM+O1xuICBkaXNhYmxlVGhlbWVTZWxlY3Rpb24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICB0aGVtZU9wdGlvbnMgPSBbXG4gICAge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0xpZ2h0JyksXG4gICAgICB2YWx1ZTogJ2xpZ2h0JyxcbiAgICAgIGljb246ICdzdW4nXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnRGFyaycpLFxuICAgICAgdmFsdWU6ICdkYXJrJyxcbiAgICAgIGljb246ICdtb29uJ1xuICAgIH0sXG4gICAge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ1N5c3RlbScpLFxuICAgICAgdmFsdWU6ICdzeXN0ZW0nLFxuICAgICAgaWNvbjogJ2ltYWMtc2V0dGluZ3MnXG4gICAgfVxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICB2YWx1ZTogVGhlbWVQcmVmZXJlbmNlT3B0aW9ucztcbiAgICBpY29uOiBTdXBwb3J0ZWRJY29ucztcbiAgfVtdO1xuICBwcml2YXRlIF91c2VyU2VsZWN0ZWRUaGVtZVByZWZlcmVuY2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaGVtZVByZWZlcmVuY2VPcHRpb25zPihcbiAgICB0aGlzLmdldEN1cnJlbnRUaGVtZVByZWZlcmVuY2UoKVxuICApO1xuICBwcml2YXRlIF90ZW1wb3JhcnlUaGVtZVByZWZlcmVuY2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaGVtZU9wdGlvbnMgfCAnbm9uZSc+KCdub25lJyk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvcHRpb25zOiBPcHRpb25zU2VydmljZSkge1xuICAgIHRoaXMudXNlclNlbGVjdGVkVGhlbWVQcmVmZXJlbmNlJCA9IHRoaXMuX3VzZXJTZWxlY3RlZFRoZW1lUHJlZmVyZW5jZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgY29uc3QgdXNlclNlbGVjdGVkVGhlbWUkID0gdGhpcy51c2VyU2VsZWN0ZWRUaGVtZVByZWZlcmVuY2UkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAocHJlZmVyZW5jZSA9PiB7XG4gICAgICAgIGlmIChwcmVmZXJlbmNlID09PSAnc3lzdGVtJykge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJzU3lzdGVtUHJlZmVyZW5jZUZvclRoZW1lJCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihwcmVmZXJlbmNlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmRpc2FibGVUaGVtZVNlbGVjdGlvbiQgPSB0aGlzLl90ZW1wb3JhcnlUaGVtZVByZWZlcmVuY2UkLnBpcGUoXG4gICAgICBtYXAocHJlZmVyZW5jZSA9PiBwcmVmZXJlbmNlICE9PSAnbm9uZScpXG4gICAgKTtcbiAgICB0aGlzLmN1cnJlbnRseUFwcGxpZWRUaGVtZSQgPSB0aGlzLl90ZW1wb3JhcnlUaGVtZVByZWZlcmVuY2UkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAodGVtcG9yYXJ5UHJlZmVyZW5jZSA9PiB7XG4gICAgICAgIGlmICh0ZW1wb3JhcnlQcmVmZXJlbmNlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICByZXR1cm4gb2YodGVtcG9yYXJ5UHJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVzZXJTZWxlY3RlZFRoZW1lJDtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmRhcmtUaGVtZUF2YWlsYWJsZSQgPSB0aGlzLm9wdGlvbnMuZ2V0JCgnZGFya1RoZW1lQXZhaWxhYmxlJykucGlwZShtYXAodmFsdWUgPT4gISF2YWx1ZSkpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFRoZW1lUHJlZmVyZW5jZSgpOiAnbGlnaHQnIHwgJ2RhcmsnIHwgJ3N5c3RlbScge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0VGhlbWVQcmVmZXJlbmNlKCk7XG4gICAgaWYgKHZhbHVlID09PSAnc3lzdGVtJyB8fCB2YWx1ZSA9PT0gJ2RhcmsnKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiAnbGlnaHQnO1xuICB9XG5cbiAgZ2V0VXNlcnNTeXN0ZW1QcmVmZXJlbmNlRm9yVGhlbWUkKCkge1xuICAgIHJldHVybiBmcm9tRXZlbnQod2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKSwgJ2NoYW5nZScpLnBpcGUoXG4gICAgICBzdGFydFdpdGgod2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKSksXG4gICAgICBtYXAoKGU6IE1lZGlhUXVlcnlMaXN0KSA9PiAoZS5tYXRjaGVzID8gJ2RhcmsnIDogJ2xpZ2h0JykpXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZVVzZXJQcmVmZXJlbmNlKHByZWZlcmVuY2U6ICdsaWdodCcgfCAnZGFyaycgfCAnc3lzdGVtJykge1xuICAgIHNldFRoZW1lUHJlZmVyZW5jZShwcmVmZXJlbmNlKTtcbiAgICB0aGlzLl91c2VyU2VsZWN0ZWRUaGVtZVByZWZlcmVuY2UkLm5leHQocHJlZmVyZW5jZSk7XG4gICAgdGhpcy5hcHBseVRoZW1lKHByZWZlcmVuY2UpO1xuICB9XG5cbiAgdGVtcG9yYXJ5Q2hhbmdlVGhlbWUocHJlZmVyZW5jZTogJ2xpZ2h0JyB8ICdkYXJrJykge1xuICAgIHRoaXMuX3RlbXBvcmFyeVRoZW1lUHJlZmVyZW5jZSQubmV4dChwcmVmZXJlbmNlKTtcbiAgICB0aGlzLmFwcGx5VGhlbWUocHJlZmVyZW5jZSk7XG4gIH1cblxuICByZXNldFRlbXBvcmFyeVRoZW1lKCkge1xuICAgIHRoaXMuX3RlbXBvcmFyeVRoZW1lUHJlZmVyZW5jZSQubmV4dCgnbm9uZScpO1xuICAgIHRoaXMuYXBwbHlUaGVtZSh0aGlzLmdldEN1cnJlbnRUaGVtZVByZWZlcmVuY2UoKSk7XG4gIH1cblxuICBhcHBseVRoZW1lKHByZWZlcmVuY2U6ICdsaWdodCcgfCAnZGFyaycgfCAnc3lzdGVtJykge1xuICAgIGFwcGx5VGhlbWUocHJlZmVyZW5jZSk7XG4gIH1cbn1cbiJdfQ==