UNPKG

@adaptabletools/adaptable

Version:

Powerful AG Grid extension which provides advanced, cutting-edge functionality to meet all DataGrid requirements

98 lines (97 loc) 4.11 kB
import * as ThemeRedux from '../../Redux/ActionsReducers/ThemeRedux'; import * as ModuleConstants from '../../Utilities/Constants/ModuleConstants'; import { ApiBase } from './ApiBase'; import { ThemeInternalApi } from '../Internal/ThemeInternalApi'; import AdaptableHelper from '../../Utilities/Helpers/AdaptableHelper'; import { logDeprecation } from '../../Utilities/logDeprecation'; import { systemThemeEntryToAdaptableTheme } from '../../Utilities/Helpers/ThemeHelper'; export class ThemeApiImpl extends ApiBase { internalApi; constructor(_adaptable) { super(_adaptable); this.internalApi = new ThemeInternalApi(_adaptable); } getThemeState() { return this.getAdaptableState().Theme; } loadTheme(theme) { this.dispatchAction(ThemeRedux.ThemeSelect(theme)); } loadLightTheme() { this.loadTheme('light'); } loadDarkTheme() { this.loadTheme('dark'); } getCurrentTheme() { return this.getAdaptableState().Theme.CurrentTheme; } getCurrentThemeObject() { const currentTheme = this.getCurrentTheme(); return this.getThemes().find((themeObj) => themeObj.Name === currentTheme); } setSystemThemes(systemThemes) { this.dispatchAction(ThemeRedux.ThemeSetSystemThemes(systemThemes)); } setUserThemes(userThemes) { this.warnUserThemesDeprecated(); this.dispatchAction(ThemeRedux.ThemeSetUserThemes(userThemes)); } getSystemThemes() { const themes = this.getAdaptableState().Theme.SystemThemes ?? []; return themes.map((theme) => systemThemeEntryToAdaptableTheme(theme, this._adaptable.logger)); } applyCurrentTheme() { const currentThemeName = this.getCurrentTheme(); const currentTheme = this.getThemes().find((theme) => theme.Name === currentThemeName); if (!currentTheme) { return; } this._adaptable.applyAdaptableTheme(currentTheme); if (this.internalApi.isSystemTheme(currentThemeName)) { this.getEventApi().internalApi.fireThemeSelectedEvent(currentThemeName); this.getEventApi().internalApi.fireThemeChangedEvent(currentTheme, 'ThemeSelected'); } else { this.getEventApi().internalApi.fireThemeChangedEvent(currentTheme, 'ThemeSelected'); } } getUserThemes() { this.warnUserThemesDeprecated(); return this.getAdaptableState().Theme.UserThemes ?? []; } getThemes() { return [...this.getSystemThemes(), ...this.getUserThemes()]; } getThemeByName(themeName) { return this.getThemes().find((theme) => theme.Name === themeName); } openThemeSettingsPanel() { this.showModulePopup(ModuleConstants.ThemeModuleId); } getAgGridCurrentThemeName() { logDeprecation(this._adaptable.logger, 'ThemeApi', 'getAgGridCurrentThemeName', null, `This is required only for AG Grid's legacy themes. See https://www.ag-grid.com/javascript-data-grid/theming-v32/`); return this._adaptable.agGridThemeAdapter.getAgGridCurrentThemeClassNames(); } editTheme(theme) { this.warnUserThemesDeprecated(); this.dispatchAction(ThemeRedux.ThemeEdit(theme)); this.getEventApi().internalApi.fireThemeChangedEvent(theme, 'ThemeEdited'); const currentTheme = this.getCurrentTheme(); if (currentTheme === theme.Name) { this._adaptable.applyAdaptableTheme(theme); } } addUserTheme(theme) { this.warnUserThemesDeprecated(); AdaptableHelper.addAdaptableObjectPrimitives(theme); this.dispatchAction(ThemeRedux.ThemeAdd(theme)); } deleteUserTheme(theme) { this.warnUserThemesDeprecated(); this.dispatchAction(ThemeRedux.ThemeDelete(theme)); } warnUserThemesDeprecated() { logDeprecation(this._adaptable.logger, 'ThemeState', 'UserThemes', undefined, 'UserThemes is deprecated and will be removed in the next major version. Customise shipped light/dark themes via CSS variable overrides instead.'); } }