Skip to content

Commit 8c9a4c0

Browse files
committed
feat: Add StyleManger and Theme support ES6 Class
1 parent c032978 commit 8c9a4c0

File tree

2 files changed

+435
-276
lines changed

2 files changed

+435
-276
lines changed

src/styles/StyleManager.ts

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import * as createHash from "murmurhash-js/murmurhash3_gc";
22
import IS_NODE_ENV from "../common/nodeJS/IS_NODE_ENV";
33
import isUnitlessNumber from "../common/react/isUnitlessNumber";
4-
import isElectronEnv from "../common/electron/IS_ELECTRON_ENV";
4+
import { Theme } from "./getTheme";
55

66
export const replace2Dashes = (key: string) => key.replace(/[A-Z]/g, $1 => `-${$1.toLowerCase()}`);
7-
export const getStyleValue = (key: string, value: string) => ((typeof value === "number" && !(isUnitlessNumber as any)[key]) ? `${value}px` : value);
7+
export const getStyleValue = (key: string, value: string) => ((typeof value === "number" && !isUnitlessNumber[key]) ? `${value}px` : value);
88

99
export interface CustomCSSProperties extends React.CSSProperties {
1010
"&:hover"?: React.CSSProperties;
@@ -34,15 +34,14 @@ export const extendsStyleKeys: any = {
3434
"&:disabled": true
3535
};
3636
export interface StyleManagerConfig {
37-
theme?: ReactUWP.ThemeType;
38-
globalClassName?: string;
37+
theme?: Theme;
38+
prefixClassName?: string;
3939
styleDidUpdate?: () => void;
4040
}
4141

42-
let StyleManager: new(config: StyleManagerConfig) => ReactUWP.StyleManager;
43-
StyleManager = class {
44-
globalClassName: string;
45-
theme: ReactUWP.ThemeType;
42+
export class StyleManager {
43+
prefixClassName: string;
44+
theme: Theme;
4645
themeId: number = 0;
4746
styleElement: HTMLStyleElement = null;
4847
sheets: {
@@ -55,14 +54,14 @@ StyleManager = class {
5554
} = {};
5655

5756
constructor(config: StyleManagerConfig) {
58-
const { globalClassName, theme, styleDidUpdate } = config;
57+
const { prefixClassName, theme, styleDidUpdate } = config;
5958
this.styleDidUpdate = styleDidUpdate || (() => {});
60-
this.globalClassName = globalClassName ? `${globalClassName}-` : "";
59+
this.prefixClassName = prefixClassName ? `${prefixClassName}-` : "";
6160
this.setupTheme(theme);
6261
this.setupStyleElement();
6362
}
6463

65-
setupTheme = (theme?: ReactUWP.ThemeType): void => {
64+
setupTheme = (theme?: Theme): void => {
6665
this.theme = theme;
6766
this.themeId = createHash([theme.accent, theme.themeName, theme.useFluentDesign].join(", "));
6867
}
@@ -95,7 +94,7 @@ StyleManager = class {
9594
const id = createHash(`${this.themeId}: ${JSON.stringify(style)}`);
9695
if (this.sheets[id]) return this.sheets[id];
9796

98-
const classNameWithHash = `${this.globalClassName}${className}-${id}`;
97+
const classNameWithHash = `${this.prefixClassName}${className}-${id}`;
9998
const styleKeys = Object.keys(style);
10099
let CSSText = "";
101100
let contentCSSText = "";
@@ -147,7 +146,7 @@ StyleManager = class {
147146
setStyleToManager(config?: {
148147
style?: CustomCSSProperties;
149148
className?: string;
150-
}, callback?: (theme?: ReactUWP.ThemeType) => StyleClasses): StyleClasses {
149+
}, callback?: (theme?: Theme) => StyleClasses): StyleClasses {
151150
let newStyles: StyleClasses = {};
152151
let { style, className } = config || {} as StyleClasses;
153152
if (callback) style = callback(this.theme) as CustomCSSProperties;
@@ -166,7 +165,7 @@ StyleManager = class {
166165
setStylesToManager(config?: {
167166
styles: { [key: string]: StyleClasses | CustomCSSProperties };
168167
className?: string;
169-
}, callback?: (theme?: ReactUWP.ThemeType) => { [key: string]: StyleClasses }): { [key: string]: StyleClasses } {
168+
}, callback?: (theme?: Theme) => { [key: string]: StyleClasses }): { [key: string]: StyleClasses } {
170169
const newStyles: {
171170
[key: string]: {
172171
className?: string;
@@ -220,6 +219,6 @@ StyleManager = class {
220219
this.styleDidUpdate();
221220
}
222221
}
223-
} as any;
222+
};
224223

225224
export default StyleManager;

0 commit comments

Comments
 (0)