diff --git a/common/changes/office-ui-fabric-react/mergeStyles-Dialog-round1_2018-02-21-00-19.json b/common/changes/office-ui-fabric-react/mergeStyles-Dialog-round1_2018-02-21-00-19.json new file mode 100644 index 0000000000000..2f42ad25a4d29 --- /dev/null +++ b/common/changes/office-ui-fabric-react/mergeStyles-Dialog-round1_2018-02-21-00-19.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "office-ui-fabric-react", + "comment": "Convert Dialog to mergeStyles, part 1 - file structure", + "type": "minor" + } + ], + "packageName": "office-ui-fabric-react", + "email": "v-jojanz@microsoft.com" +} \ No newline at end of file diff --git a/packages/office-ui-fabric-react/src/components/Dialog/Dialog.base.tsx b/packages/office-ui-fabric-react/src/components/Dialog/Dialog.base.tsx new file mode 100644 index 0000000000000..8e8a7b26de447 --- /dev/null +++ b/packages/office-ui-fabric-react/src/components/Dialog/Dialog.base.tsx @@ -0,0 +1,146 @@ +import * as React from 'react'; +import { + BaseComponent, + css, + getId +} from '../../Utilities'; +import { IDialogProps } from './Dialog.types'; +import { DialogType } from './DialogContent.types'; +import { Modal } from '../../Modal'; +import { withResponsiveMode } from '../../utilities/decorators/withResponsiveMode'; +import * as stylesImport from './Dialog.scss'; +const styles: any = stylesImport; + +import { DialogContent } from './DialogContent'; + +@withResponsiveMode +export class DialogBase extends BaseComponent { + public static defaultProps: IDialogProps = { + modalProps: { + isDarkOverlay: true, + isBlocking: false, + className: '', + containerClassName: '' + }, + dialogContentProps: { + type: DialogType.normal, + className: '', + topButtonsProps: [], + }, + hidden: true, + }; + + private _id: string; + private _defaultTitleTextId: string; + private _defaultSubTextId: string; + + constructor(props: IDialogProps) { + super(props); + + this._id = getId('Dialog'); + this._defaultTitleTextId = this._id + '-title'; + this._defaultSubTextId = this._id + '-subText'; + + this._warnDeprecations({ + 'isOpen': 'hidden', + 'type': 'dialogContentProps.type', + 'subText': 'dialogContentProps.subText', + 'contentClassName': 'dialogContentProps.className', + 'topButtonsProps': 'dialogContentProps.topButtonsProps', + 'className': 'modalProps.className', + 'isDarkOverlay': 'modalProps.isDarkOverlay', + 'isBlocking': 'modalProps.isBlocking', + 'containerClassName': 'modalProps.containerClassName', + 'onDismissed': 'modalProps.onDismissed', + 'onLayerDidMount': 'modalProps.onLayerDidMount', + 'ariaDescribedById': 'modalProps.subtitleAriaId', + 'ariaLabelledById': 'modalProps.titleAriaId' + }); + } + + public render() { + const { + elementToFocusOnDismiss, + firstFocusableSelector, + forceFocusInsideTrap, + ignoreExternalFocusing, + isBlocking, + isClickableOutsideFocusTrap, + isDarkOverlay, + isOpen, + className, + onDismiss, + onDismissed, + onLayerDidMount, + responsiveMode, + subText, + title, + type, + contentClassName, + topButtonsProps, + dialogContentProps, + modalProps, + containerClassName, + hidden + } = this.props; + + return ( + + + { this.props.children } + + + ); + } + + private _getSubTextId = (): string | undefined => { + const { ariaDescribedById, modalProps, dialogContentProps, subText } = this.props; + let id = ariaDescribedById || (modalProps && modalProps.subtitleAriaId); + + if (!id) { + id = (subText || (dialogContentProps && dialogContentProps.subText)) && this._defaultSubTextId; + } + + return id; + } + + private _getTitleTextId = (): string | undefined => { + const { ariaLabelledById, modalProps, dialogContentProps, title } = this.props; + let id = ariaLabelledById || (modalProps && modalProps.titleAriaId); + + if (!id) { + id = (title || (dialogContentProps && dialogContentProps.title)) && this._defaultTitleTextId; + } + + return id; + } +} diff --git a/packages/office-ui-fabric-react/src/components/Dialog/Dialog.styles.ts b/packages/office-ui-fabric-react/src/components/Dialog/Dialog.styles.ts new file mode 100644 index 0000000000000..c5536f6e55f5f --- /dev/null +++ b/packages/office-ui-fabric-react/src/components/Dialog/Dialog.styles.ts @@ -0,0 +1,28 @@ +import { IDialogStyleProps, IDialogStyles } from './Dialog.types'; +import { + IStyle, + ITheme, +} from '../../Styling'; + +export const getStyles = ( + props: IDialogStyleProps +): IDialogStyles => { + const { + className, + theme, + } = props; + + const { palette, semanticColors } = theme; + + return ({ + root: [ + 'ms-Dialog', + { + // Insert css properties + + } + ], + + // Insert className styles + }); +}; diff --git a/packages/office-ui-fabric-react/src/components/Dialog/Dialog.test.tsx b/packages/office-ui-fabric-react/src/components/Dialog/Dialog.test.tsx index 5c2e5ac89d2b0..21b58689ced00 100644 --- a/packages/office-ui-fabric-react/src/components/Dialog/Dialog.test.tsx +++ b/packages/office-ui-fabric-react/src/components/Dialog/Dialog.test.tsx @@ -5,7 +5,7 @@ import * as renderer from 'react-test-renderer'; import { mount } from 'enzyme'; -import { Dialog } from './Dialog'; +import { DialogBase } from './Dialog.base'; import { DialogContent } from './DialogContent'; import { DialogType } from './DialogContent.types'; @@ -26,7 +26,7 @@ describe('Dialog', () => { }; const wrapper = mount( -