import * as React from 'react'; import { TilesList, ITilesGridItem, ITilesGridSegment, ITilesGridItemCellProps, } from '@fluentui/react-experiments/lib/TilesList'; import { Tile, getTileLayout, renderTileWithLayout } from '@fluentui/react-experiments/lib/Tile'; import { Toggle } from '@fluentui/react/lib/Toggle'; import { Selection, SelectionZone } from '@fluentui/react/lib/Selection'; import { MarqueeSelection } from '@fluentui/react/lib/MarqueeSelection'; import { AnimationClassNames } from '@fluentui/react/lib/Styling'; import { IExampleGroup, IExampleItem, createGroup, createMediaItems, getExampleTilesListCells, onRenderTilesListExampleRoot, onRenderTilesListExampleRow, } from '@fluentui/react-examples/lib/react-experiments/TilesList/ExampleHelpers'; import * as TilesListExampleStylesModule from './TilesList.Example.scss'; import { lorem } from '@fluentui/example-data'; import { SignalField, SharedSignal, CommentsSignal } from '@fluentui/react-experiments/lib/Signals'; const TilesListExampleStyles = TilesListExampleStylesModule as any; function createGroups(): IExampleGroup[] { let offset = 0; const groups: IExampleGroup[] = []; for (let i = 0; i < 20; i++) { const items = createMediaItems(50 + Math.ceil(Math.random() * 6) * 50, offset); offset += items.length; groups.push(createGroup(items, 'media', i)); } return groups; } const GROUPS = createGroups(); const ITEMS = ([] as IExampleItem[]).concat(...GROUPS.map((group: { items: IExampleItem[] }) => group.items)); export interface ITilesListMediaExampleState { isModalSelection: boolean; nameplateOnlyOnHover: boolean; cells: (ITilesGridItem | ITilesGridSegment)[]; } export class TilesListMediaExample extends React.Component<{}, ITilesListMediaExampleState> { private _selection: Selection; constructor(props: {}) { super(props); this._selection = new Selection({ getKey: (item: IExampleItem) => item.key, onSelectionChanged: this._onSelectionChange, }); this._selection.setItems(ITEMS); this.state = { isModalSelection: this._selection.isModal(), nameplateOnlyOnHover: false, cells: getExampleTilesListCells(GROUPS, { onRenderCell: this._onRenderMediaCell, onRenderHeader: this._onRenderHeader, }), }; } public render(): JSX.Element { return (
onRenderRoot={onRenderTilesListExampleRoot} onRenderRow={onRenderTilesListExampleRow} items={this.state.cells} role="grid" />
); } private _onToggleIsModalSelection = (event: React.MouseEvent, checked: boolean): void => { this._selection.setModal(checked); }; private _onToggleNameplateOnlyOnHover = (event: React.MouseEvent, checked: boolean): void => { this.setState({ nameplateOnlyOnHover: checked, cells: getExampleTilesListCells(GROUPS, { onRenderCell: this._onRenderMediaCell, onRenderHeader: this._onRenderHeader, }), }); }; private _onSelectionChange = (): void => { this.setState({ isModalSelection: this._selection.isModal(), }); }; private _onItemInvoked = (item: IExampleItem, index: number, event: Event): void => { event.stopPropagation(); event.preventDefault(); alert(`Invoked item '${item.name}'`); }; private _onRenderMediaCell = (props: ITilesGridItemCellProps): JSX.Element => { const { finalSize, item, position: { column }, } = props; const pixelWidth = Math.round(finalSize.width); const pixelHeight = Math.round(finalSize.height); const tile = ( // Placeholder } showBackgroundFrame={true} itemName={item.name} itemActivity={ <>
{pixelWidth} × {pixelHeight} · 3.14 MB
} > {lorem(7)} } nameplateOnlyOnHover={this.state.nameplateOnlyOnHover} /> ); const { backgroundSize = { width: 0, height: 0 } } = getTileLayout(tile); return renderTileWithLayout(tile, { background: ( ), }); }; private _onRenderHeader = (props: ITilesGridItemCellProps): JSX.Element => { const { item, position: { column }, } = props; return (

{item.name}

); }; }