react-saasify
Version:
React components for Saasify web clients.
63 lines (49 loc) • 1.29 kB
JavaScript
import { autorun, observable, toJS, trace } from 'mobx'
import * as themes from '../themes'
class ThemeManagerClass {
theme = {}
_themes = {}
registerTheme = (name, themeFactory) => {
if (process.env.NODE_ENV === 'development') {
console.log('register theme', name)
}
this._themes[name] = themeFactory
}
setTheme = (opts) => {
let name
if (typeof opts === 'object') {
name = opts.name
} else {
name = opts
opts = {}
}
const themeFactory = name && this._themes[name]
if (themeFactory) {
this.theme = themeFactory(opts)
} else {
console.error()
console.error(`ThemeManager.setTheme(${name}) theme not found`)
console.error('Must call ThemeManager.registerTheme first')
console.error()
}
}
}
export const ThemeManager = observable(new ThemeManagerClass())
window.ThemeManager = ThemeManager
for (const [k, v] of Object.entries(themes)) {
ThemeManager.registerTheme(k, v)
}
if (process.env.NODE_ENV === 'development') {
autorun(
() => {
trace()
console.log('theme', toJS(ThemeManager.theme))
// window.less.modifyVars(ThemeManager.theme)
},
{
name: 'Theme change (development)'
}
)
}
export default ThemeManager