office-ui-fabric-react
Version:
Reusable React components for building experiences for Microsoft 365.
119 lines (103 loc) • 3.57 kB
text/typescript
import * as React from 'react';
import { ResizeGroupBase } from './ResizeGroup.base';
import { IStyle, ITheme } from '../../Styling';
import { IRefObject, IStyleFunctionOrObject } from '../../Utilities';
/**
* {@docCategory ResizeGroup}
*/
export enum ResizeGroupDirection {
horizontal = 0,
vertical = 1,
}
/**
* {@docCategory ResizeGroup}
*/
export interface IResizeGroup {
/**
* Remeasures the available space.
*/
remeasure(): void;
}
/**
* {@docCategory ResizeGroup}
*/
export interface IResizeGroupProps extends React.HTMLAttributes<ResizeGroupBase | HTMLElement> {
/**
* Optional callback to access the IResizeGroup interface. Use this instead of ref for accessing
* the public methods and properties of the component.
*/
componentRef?: IRefObject<IResizeGroup>;
/**
* Call to provide customized styling that will layer on top of the variant rules
* @deprecated Removed to reduce bundle size. Please use `className` and add css rules to `className` instead.
*/
styles?: IStyleFunctionOrObject<IResizeGroupStyleProps, IResizeGroupStyles>;
/**
* Theme provided by HOC.
*/
theme?: ITheme;
/**
* Additional css class to apply to the Component
* @defaultvalue undefined
*/
className?: string;
/**
* Direction of this resize group, vertical or horizontal
* @defaultvalue ResizeGroupDirection.horizontal
*/
direction?: ResizeGroupDirection;
/**
* Initial data to be passed to the `onRenderData` function. When there is no `onGrowData` provided, this data should
* represent what should be passed to the render function when the parent container of the ResizeGroup is at its
* maximum supported width. A `cacheKey` property may optionally be included as part of the data. Two data objects
* with the same `cacheKey` will be assumed to take up the same width and will prevent measurements.
* The type of `cacheKey` is a string.
*/
data: any;
/**
* Function to render the data. Called when rendering the contents to the screen and when
* rendering in a hidden div to measure the size of the contents.
*/
onRenderData: (data: any) => JSX.Element;
/**
* Function to be performed on the data in order to reduce its width and make it fit into the given space.
* If there are no more scaling steps to apply, it should return undefined to prevent
* an infinite render loop.
*/
onReduceData: (prevData: any) => any;
/**
* Function to be performed on the data in order to increase its width. It is called in scenarios where the
* container has more room than the previous render and we may be able to fit more content. If there are no more
* scaling operations to perform on teh data, it should return undefined to prevent an infinite render loop.
*/
onGrowData?: (prevData: any) => any;
/**
* Function to be called every time data is rendered. It provides the data that was actually rendered.
* A use case would be adding telemetry when a particular control is shown in an overflow well or
* dropped as a result of onReduceData or to count the number of renders that an implementation of
* onReduceData triggers.
*/
dataDidRender?: (renderedData: any) => void;
}
/**
* {@docCategory ResizeGroup}
*/
export interface IResizeGroupStyleProps {
/**
* Accept theme prop.
*/
theme: ITheme;
/**
* Accept custom classNames
*/
className?: string;
}
/**
* {@docCategory ResizeGroup}
*/
export interface IResizeGroupStyles {
/**
* Style for the root element.
*/
root: IStyle;
}