diff --git a/common/changes/@uifabric/experiments/styleUtils_2018-11-29-23-33.json b/common/changes/@uifabric/experiments/styleUtils_2018-11-29-23-33.json new file mode 100644 index 0000000000000..cb40b35056cf7 --- /dev/null +++ b/common/changes/@uifabric/experiments/styleUtils_2018-11-29-23-33.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@uifabric/experiments", + "comment": "Lifting the resolution of default and user provided style variables to Utilities.", + "type": "patch" + } + ], + "packageName": "@uifabric/experiments", + "email": "Humberto.Morimoto@microsoft.com" +} \ No newline at end of file diff --git a/packages/experiments/src/components/Button/Button.styles.ts b/packages/experiments/src/components/Button/Button.styles.ts index 41094e17b9942..64abaa4f011c3 100644 --- a/packages/experiments/src/components/Button/Button.styles.ts +++ b/packages/experiments/src/components/Button/Button.styles.ts @@ -1,6 +1,6 @@ import { IButtonComponent, IButtonStyles, IButtonStyleVariablesTypes, IButtonStates } from './Button.types'; import { getFocusStyle, getGlobalClassNames, concatStyleSets } from '../../Styling'; -import { processVariables } from '../../utilities/VariableProcessing'; +import { merge } from '../../Utilities'; export const getButtonStyles: IButtonComponent['styles'] = props => { const { theme, disabled, expanded, className, circular, primary, styleVariables } = props; @@ -222,3 +222,12 @@ export const getButtonStyles: IButtonComponent['styles'] = props => { } ); }; + +export type IProcessedVariables = { [P in keyof T]-?: IProcessedVariables }; + +export function processVariables(partialVariables: T, customVariables?: T): IProcessedVariables { + // tslint:disable-next-line:no-any + const result = customVariables ? merge({}, partialVariables, customVariables) : partialVariables; + + return result as IProcessedVariables; +} diff --git a/packages/experiments/src/components/Toggle/Toggle.styles.ts b/packages/experiments/src/components/Toggle/Toggle.styles.ts index 83baf87131285..4c3e9cd6f8f2a 100644 --- a/packages/experiments/src/components/Toggle/Toggle.styles.ts +++ b/packages/experiments/src/components/Toggle/Toggle.styles.ts @@ -1,5 +1,6 @@ import { IToggleComponent, IToggleStyles, IToggleStyleVariablesTypes, IToggleStyleVariables, IToggleViewProps } from './Toggle.types'; import { getFocusStyle, getGlobalClassNames, HighContrastSelector, concatStyleSets } from '../../Styling'; +import { resolveStyleVariables } from '../../utilities/variableProcessing'; const GlobalClassNames = { root: 'ms-Toggle', @@ -214,15 +215,9 @@ export const ToggleStyles: IToggleComponent['styles'] = props => { } function getToggleStyles(userStyleVariables: IToggleStyleVariables): Partial { - let toggleVariables: IToggleStyleVariablesTypes; + let toggleVariables = getToggleViewStyleVariables(props); - toggleVariables = getToggleViewStyleVariables(props); - - if (typeof userStyleVariables === 'function') { - toggleVariables = { ...toggleVariables, ...userStyleVariables(props) }; - } else if (userStyleVariables !== undefined) { - toggleVariables = { ...toggleVariables, ...userStyleVariables }; - } + toggleVariables = resolveStyleVariables(props, toggleVariables, userStyleVariables); return getToggleStylesFromState(toggleVariables); } diff --git a/packages/experiments/src/utilities/VariableProcessing.ts b/packages/experiments/src/utilities/VariableProcessing.ts deleted file mode 100644 index b16af3dff4f47..0000000000000 --- a/packages/experiments/src/utilities/VariableProcessing.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { merge } from '../Utilities'; - -export type IProcessedVariables = { [P in keyof T]-?: IProcessedVariables }; - -export function processVariables(partialVariables: T, customVariables?: T): IProcessedVariables { - // tslint:disable-next-line:no-any - const result = customVariables ? merge({}, partialVariables, customVariables) : partialVariables; - - return result as IProcessedVariables; -} diff --git a/packages/experiments/src/utilities/variableProcessing.ts b/packages/experiments/src/utilities/variableProcessing.ts new file mode 100644 index 0000000000000..dba5c754b0340 --- /dev/null +++ b/packages/experiments/src/utilities/variableProcessing.ts @@ -0,0 +1,15 @@ +export type IComponentStyleVariables = + | TComponentStyleVariablesTypes + | ((props: TComponentViewProps) => TComponentStyleVariablesTypes) + | undefined; + +export function resolveStyleVariables< + TViewProps, + TStyleVariablesTypes, + TStyleVariables extends IComponentStyleVariables +>(props: TViewProps, ...variableArray: TStyleVariables[]): TStyleVariablesTypes { + return Object.assign( + {}, + ...variableArray.map(variables => (typeof variables === 'function' ? (variables as Function)(props) : variables)) + ); +}