Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
f16217f
Dropdown button init pass
micahgodbolt Mar 15, 2017
4445a3d
Moved contextual menu carrot into basebutton definition
micahgodbolt Mar 15, 2017
32e7cd3
Removed extra line
micahgodbolt Mar 15, 2017
1fa5b0f
Merge branch 'master' into button-callout
micahgodbolt Mar 15, 2017
c9aa7ec
Merge branch 'master' into button-callout
micahgodbolt Mar 15, 2017
83f5f84
Merge branch 'button-callout' of https://github.com/micahgodbolt/offi…
micahgodbolt Mar 15, 2017
b0ab44a
Fixed capitalization of ContextualMenu
micahgodbolt Mar 15, 2017
f366c2e
Added split button class name to interface, updated comment
micahgodbolt Mar 15, 2017
ca21797
OverflowGroup init pass
micahgodbolt Mar 15, 2017
9c6cdad
Button updates
micahgodbolt Mar 16, 2017
4f2eb89
Updated button
micahgodbolt Mar 16, 2017
af45a39
Merge branch 'master' into button-callout
micahgodbolt Mar 16, 2017
a51c011
Fixed spelling mistake, updated components to supply styles to menuIcon
micahgodbolt Mar 16, 2017
9886101
Merge branch 'master' into overflow-container
micahgodbolt Mar 17, 2017
0c99c0b
Merge branch 'button-callout' into overflow-container
micahgodbolt Mar 17, 2017
99d7eeb
Update overflow group to calc width of elements
micahgodbolt Mar 20, 2017
a4ffa64
moved overflow button inside of main section, added support for children
micahgodbolt Mar 20, 2017
8d71ec6
Merged in master
micahgodbolt Mar 23, 2017
47cfaf2
Merged in master, fixed overflow set to work with new build process
micahgodbolt Mar 27, 2017
e60b4d3
Merge branch 'master' into overflow-container
micahgodbolt Apr 4, 2017
056fddf
Finished renaming and pulling in mater
micahgodbolt Apr 4, 2017
80c405e
Update overflowSet
micahgodbolt Apr 5, 2017
36f0ab8
Overflow set cleanup
micahgodbolt Apr 6, 2017
c6f556b
Merge branch 'master' into overflow-container
micahgodbolt Apr 7, 2017
e1a860a
Overflow set work
micahgodbolt Apr 7, 2017
3201e3c
Merge branch 'master' into overflow-container
micahgodbolt Apr 10, 2017
c165859
Overflow set updates
micahgodbolt Apr 10, 2017
67a89c6
Added custom 'updatedOverflowState'
micahgodbolt Apr 10, 2017
815b624
Break out to Resize Group
micahgodbolt Apr 12, 2017
ef2701c
Removed extra button props
micahgodbolt Apr 12, 2017
c68ee95
Remove unnecessary comments
micahgodbolt Apr 12, 2017
78d2261
Fixed linting errors
micahgodbolt Apr 13, 2017
13cfd8b
Merge branch 'master' into overflow-container
micahgodbolt Apr 13, 2017
1913758
add ResizeGroup.ts file
micahgodbolt Apr 13, 2017
e62b3e0
Fixed propertiestableset string
micahgodbolt Apr 13, 2017
98ae192
Merge branch 'master' into overflow-container
micahgodbolt Apr 13, 2017
4544a43
Merge branch 'master' into overflow-container
micahgodbolt Apr 13, 2017
ad81932
Fixed props links
micahgodbolt Apr 13, 2017
b43944b
Merge branch 'overflow-container' of https://github.com/micahgodbolt/…
micahgodbolt Apr 13, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/office-ui-fabric-react/src/OverflowSet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './components/OverflowSet/index';
1 change: 1 addition & 0 deletions packages/office-ui-fabric-react/src/ResizeGroup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './components/ResizeGroup/index';
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import * as React from 'react';
import { OverflowSet } from './OverflowSet';
import { IContextualMenuItem } from '../../ContextualMenu';

export interface IOverflowSetProps extends React.Props<OverflowSet> {
items?: any[];
overflowItems?: IContextualMenuItem[];
overflowIcon?: string;

/** Method to call when trying to render an item. */
onRenderItem?: (item?: any, index?: number) => React.ReactNode;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
@import '../../common/common';

.root {
position: relative;
display: flex;
flex-wrap: nowrap;
}


.item {
flex-shrink: 0;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import * as React from 'react';
import {
css,
autobind,
BaseComponent
} from '../../Utilities';
import { IOverflowSetProps } from './OverflowSet.Props';
import { IconButton } from '../../Button';

const styles: any = require('./OverflowSet.scss');

export class OverflowSet extends BaseComponent<IOverflowSetProps, null> {

constructor(props: IOverflowSetProps) {
super(props);
}

public render() {
let { items, overflowItems } = this.props;
return (
<div className={ css('ms-OverflowSet', styles.root) } >
{ items && this._onRenderItems(items) }
{ overflowItems && this._onRenderOverflowButton(overflowItems) }
</div>
);
}

@autobind
private _onRenderOverflowButton(items) {
let { overflowIcon = 'More' } = this.props;
return (
<IconButton
icon={ overflowIcon }
menuIconName='none'
menuProps={ {
items: items
} }
/>
);
}

@autobind
private _onRenderItems(items) {
return items.map((item, i) => {
let key = item.key ? item.key : i;
let onRender = item.onRender ? item.onRender : this.props.onRenderItem;
return (
<div
className={ css('ms-OverflowSet-item', styles.item) }
key={ key }
ref={ key } >
{ onRender ? onRender(item, i) : item }
</div>
);
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import * as React from 'react';
import { Link } from 'office-ui-fabric-react/lib/Link';
import { LayerHost } from 'office-ui-fabric-react/lib/Layer';
import {
ExampleCard,
ComponentPage,
PropertiesTableSet
} from '@uifabric/example-app-base';
import { OverflowSetBasicExample } from './examples/OverflowSet.Basic.Example';

const OverflowSetBasicExampleCode = require('!raw-loader!office-ui-fabric-react/src/components/OverflowSet/examples/OverflowSet.Basic.Example.tsx') as string;

export class OverflowSetPage extends React.Component<any, any> {
public render() {
return (
<ComponentPage
title='OverflowSet'
componentName='OverflowSetExample'
exampleCards={
<LayerHost>
<ExampleCard title='OverflowSet' code={ OverflowSetBasicExampleCode }>
<OverflowSetBasicExample />
</ExampleCard>
</LayerHost>
}
propertiesTables={
<PropertiesTableSet
sources={ [
require<string>('!raw-loader!office-ui-fabric-react/src/components/OverflowSet/OverflowSet.Props.ts')
] }
/>
}
overview={
<div>
<Link target='_blank' href='http://dev.office.com/fabric/components/OverflowSet'>OverflowSets</Link>
<span> supplement content associated with a specific UI component.</span>
</div>
}
/>
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/* tslint:disable:no-unused-variable */
import * as React from 'react';
/* tslint:enable:no-unused-variable */
import { BaseComponent } from 'office-ui-fabric-react/lib/Utilities';
import { SearchBox } from 'office-ui-fabric-react/lib/SearchBox';
import { DefaultButton } from 'office-ui-fabric-react/lib/Button';
import {
OverflowSet
} from '../index';

export class OverflowSetBasicExample extends BaseComponent<any, any> {

public render() {
return (
<OverflowSet
items={ [
{
key: 'search',
'onRender': () => {
return (
<SearchBox
onChange={ (newValue) => console.log('SearchBox onChange fired: ' + newValue) }
onSearch={ (newValue) => console.log('SearchBox onSearch fired: ' + newValue) }
/>
);
}
},
{
key: 'newItem',
name: 'New',
icon: 'Add',
ariaLabel: 'New. Use left and right arrow keys to navigate',
onClick: () => { return; },
subMenuProps: {
items: [
{
key: 'emailMessage',
name: 'Email message',
icon: 'Mail',
},
{
key: 'calendarEvent',
name: 'Calendar event',
icon: 'Calendar'
}
],
},
},
{
key: 'upload',
name: 'Upload',
icon: 'Upload',
onClick: () => { return; },
},
{
key: 'share',
name: 'Share',
icon: 'Share',
onClick: () => { return; }
}
] }
overflowItems={ [
{
key: 'newItem',
name: 'New',
icon: 'Add',
ariaLabel: 'New. Use left and right arrow keys to navigate',
onClick: () => { return; },
subMenuProps: {
items: [
{
key: 'emailMessage',
name: 'Email message',
icon: 'Mail',
},
{
key: 'calendarEvent',
name: 'Calendar event',
icon: 'Calendar'
}
],
},
},
{
key: 'upload',
name: 'Upload',
icon: 'Upload',
onClick: () => { return; },
},
{
key: 'share',
name: 'Share',
icon: 'Share',
onClick: () => { return; }
}
]
}
onRenderItem={ (item, i) => {
return (
<DefaultButton
icon={ item.icon }
menuProps={ item.subMenuProps }
text={ item.small ? null : item.name }
> </DefaultButton>
);
} }
/>
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './OverflowSet';
export * from './OverflowSet.Props';
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import * as React from 'react';
import { IOverFlowItemState } from './ResizeGroup';

export interface IResizeGroupProps extends React.HTMLProps<HTMLElement> {
items?: any[];
onRenderItems?: (items: any[]) => JSX.Element;
onReduceItems?: (prevItems: IOverFlowItemState, props: IResizeGroupProps) => IOverFlowItemState;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@import '../../common/common';

.root {
display: block;
}

.measured {
flex-direction: horizontal;
flex-wrap: nowrap;
display: flex;
position: absolute;
visibility: hidden;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import * as React from 'react';
import {
css,
BaseComponent
} from '../../Utilities';
import { IResizeGroupProps } from './ResizeGroup.Props';
import styles = require('./ResizeGroup.scss');

export interface IResizeGroupState {
renderedItems?: any[];
measuredItems: any[];
shouldMeasure?: boolean;
}

export interface IOverFlowItemState {
[index: number]: any;
}

export class ResizeGroup extends BaseComponent<IResizeGroupProps, IResizeGroupState> {

private _root: HTMLElement;
private _measured: HTMLElement;

constructor(props: IResizeGroupProps) {
super(props);
this.state = {
shouldMeasure: true,
renderedItems: [],
measuredItems: this.props.items.concat([]),
};
}

public componentDidMount() {
this._measureItems();
this._events.on(window, 'resize', this._onResize);
}

public render() {
let { onRenderItems, onReduceItems, items } = this.props;
let { shouldMeasure, renderedItems, measuredItems } = this.state;
return (
<div ref={ this._resolveRef('_root') }>
{ shouldMeasure && (
<div className={ css(styles.measured) } ref={ this._resolveRef('_measured') }>
{ onRenderItems(measuredItems) }
</div>
) }

{ renderedItems.length > 0 && onRenderItems(renderedItems) }
</div>

);
}

public componentDidUpdate(prevProps: IResizeGroupProps) {
this._measureItems();
}

protected _onResize() {
this.setState({ shouldMeasure: true });
}

private _measureItems() {
let { items, onReduceItems } = this.props;
let {
shouldMeasure,
renderedItems,
measuredItems,
} = this.state;

if (shouldMeasure && items && items.length > 0) {
let container = this._root.getBoundingClientRect();
let measured = this._measured.getBoundingClientRect();
if ((measured.width > container.width)) {
this.setState((prevState, props) => {
return {
measuredItems: onReduceItems(prevState.measuredItems, props),
};
});
} else {
this.setState((prevState, props) => {
return {
renderedItems: measuredItems,
measuredItems: this.props.items.concat([]),
shouldMeasure: false
};
});
}
}
}
}
Loading