diff --git a/common/changes/office-ui-fabric-react/activity-compact_2018-03-21-15-01.json b/common/changes/office-ui-fabric-react/activity-compact_2018-03-21-15-01.json new file mode 100644 index 0000000000000..287ebebf124f6 --- /dev/null +++ b/common/changes/office-ui-fabric-react/activity-compact_2018-03-21-15-01.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "office-ui-fabric-react", + "comment": "Provide compact timestamp style for ActivityItem", + "type": "patch" + } + ], + "packageName": "office-ui-fabric-react", + "email": "tmichon@microsoft.com" +} \ No newline at end of file diff --git a/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.classNames.ts b/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.classNames.ts index 12d62e960a6d0..4bc5f7842f2c6 100644 --- a/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.classNames.ts +++ b/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.classNames.ts @@ -59,6 +59,9 @@ export const getClassNames = memoizeFunction(( activityText: mergeStyles('ms-ActivityItem-activityText', styles.activityText), commentText: mergeStyles('ms-ActivityItem-commentText', styles.commentText), - timeStamp: mergeStyles('ms-ActivityItem-timeStamp', styles.timeStamp) + timeStamp: mergeStyles( + 'ms-ActivityItem-timeStamp', + styles.timeStamp, + isCompact && styles.isCompactTimeStamp) }; }); diff --git a/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.styles.ts b/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.styles.ts index fd6951300fd3a..4833241cd5c22 100644 --- a/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.styles.ts +++ b/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.styles.ts @@ -127,7 +127,13 @@ export const getStyles = memoizeFunction(( fontWeight: 400, color: theme.palette.neutralSecondary } - ] + ], + + isCompactTimeStamp: { + display: 'inline-block', + paddingLeft: '0.3em', // One space character + fontSize: '1em' + } }; return concatStyleSets(ActivityItemStyles, customStyles); diff --git a/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.tsx b/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.tsx index 70259d77f39ec..35a656fccf66f 100644 --- a/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.tsx +++ b/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.tsx @@ -9,9 +9,6 @@ import { getStyles } from './ActivityItem.styles'; import { PersonaSize, PersonaCoin, IPersonaProps } from '../../Persona'; export class ActivityItem extends BaseComponent { - private _classNames: IActivityItemClassNames; - private _styles: IActivityItemStyles; - constructor(props: IActivityItemProps) { super(props); } @@ -25,24 +22,18 @@ export class ActivityItem extends BaseComponent { styles: customStyles } = this.props; - this._styles = getStyles(undefined, customStyles); - this._classNames = getClassNames( - this._styles, - this.props.className!, - this.props.activityPersonas!, - this.props.isCompact! - ); + const classNames = this._getClassNames(this.props); return ( -
+
{ (this.props.activityPersonas || this.props.activityIcon || this.props.onRenderIcon) && -
+
{ onRenderIcon(this.props) }
} -
+
{ onRenderActivityDescription(this.props, this._onRenderActivityDescription) } { onRenderComments(this.props, this._onRenderComments) } { onRenderTimeStamp(this.props, this._onRenderTimeStamp) } @@ -61,28 +52,34 @@ export class ActivityItem extends BaseComponent { } private _onRenderActivityDescription = (props: IActivityItemProps): JSX.Element | null => { + const classNames = this._getClassNames(props); + const activityDescription = props.activityDescription || props.activityDescriptionText; if (activityDescription) { - return ({ activityDescription }); + return ({ activityDescription }); } return null; } private _onRenderComments = (props: IActivityItemProps): JSX.Element | null => { + const classNames = this._getClassNames(props); + const comments = props.comments || props.commentText; if (!props.isCompact && comments) { - return (
{ comments }
); + return (
{ comments }
); } return null; } private _onRenderTimeStamp = (props: IActivityItemProps): JSX.Element | null => { + const classNames = this._getClassNames(props); + if (!props.isCompact && props.timeStamp) { - return (
{ props.timeStamp }
); + return (
{ props.timeStamp }
); } return null; @@ -90,6 +87,8 @@ export class ActivityItem extends BaseComponent { // If activityPersonas is an array of persona props, build the persona cluster element. private _onRenderPersonaArray = (props: IActivityItemProps): JSX.Element | null => { + const classNames = this._getClassNames(props); + let personaElement: JSX.Element | null = null; const activityPersonas = props.activityPersonas as Array; if (activityPersonas[0].imageUrl || activityPersonas[0].imageInitials) { @@ -111,15 +110,18 @@ export class ActivityItem extends BaseComponent { { ...person } // tslint:disable-next-line:no-string-literal key={ person['key'] ? person['key'] : index } - className={ this._classNames.activityPersona } + className={ classNames.activityPersona } size={ showSize16Personas ? PersonaSize.size16 : PersonaSize.size32 } style={ style } /> ); }); - personaElement =
{ personaList }
; + personaElement =
{ personaList }
; } return personaElement; } -} \ No newline at end of file + private _getClassNames(props: IActivityItemProps): IActivityItemClassNames { + return getClassNames(getStyles(undefined, props.styles), props.className!, props.activityPersonas!, props.isCompact!); + } +} diff --git a/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.types.ts b/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.types.ts index 8a054fe144979..ac4bd18861bf0 100644 --- a/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.types.ts +++ b/packages/office-ui-fabric-react/src/components/ActivityItem/ActivityItem.types.ts @@ -148,4 +148,10 @@ export interface IActivityItemStyles { * Styles applied to the timestamp at the end of each activity item. */ timeStamp?: IStyle; -} \ No newline at end of file + + /** + * Styles applied to the timestamp in compact mode. + * This can occur if a host overrides the render behavior to force the timestamp to render. + */ + isCompactTimeStamp?: IStyle; +} diff --git a/packages/office-ui-fabric-react/src/components/ActivityItem/examples/ActivityItem.Compact.Example.tsx b/packages/office-ui-fabric-react/src/components/ActivityItem/examples/ActivityItem.Compact.Example.tsx index 56a68c5f440d6..c364014cbc3da 100644 --- a/packages/office-ui-fabric-react/src/components/ActivityItem/examples/ActivityItem.Compact.Example.tsx +++ b/packages/office-ui-fabric-react/src/components/ActivityItem/examples/ActivityItem.Compact.Example.tsx @@ -3,6 +3,7 @@ import * as React from 'react'; /* tslint:enable:no-unused-variable */ import { css, classNamesFunction } from '../../../Utilities'; import { ActivityItem } from '../ActivityItem'; +import { IActivityItemProps } from '../ActivityItem.types'; import { getStyles, IActivityItemExampleStyleProps, @@ -16,7 +17,7 @@ export class ActivityItemCompactExample extends React.Component(); const classNames = getClassNames(getStyles); - const activityItemExamples = [ + const activityItemExamples: Partial>[] = [ { key: 1, activityDescription: [ @@ -58,7 +59,7 @@ export class ActivityItemCompactExample extends React.ComponentSabrina De Luca, added this file ], - activityIcon: React.createElement(Icon, { iconName: 'Add' }), + activityIcon: , isCompact: true }, { @@ -67,7 +68,7 @@ export class ActivityItemCompactExample extends React.ComponentChuan Rojumanong, shared this file ], - activityIcon: React.createElement(Icon, { iconName: 'Share' }), + activityIcon: , isCompact: true } ]; @@ -76,7 +77,7 @@ export class ActivityItemCompactExample extends React.Component { const props = item; activityExampleList.push( - + ); });