@wordpress/components
Version:
UI components for WordPress.
83 lines (70 loc) • 2.03 kB
JavaScript
import { cx as _cx } from "emotion";
import { createElement } from "@wordpress/element";
/**
* Internal dependencies
*/
import { getValidChildren } from '../utils/get-valid-children';
import { useContextSystem } from '../context';
import { ControlGroupContext } from './context';
import * as styles from './styles';
/**
* @param {import('../context').ViewOwnProps<import('./types').Props, 'div'>} props
*/
export function useControlGroup(props) {
const {
children,
className,
direction = 'row',
templateColumns,
...otherProps
} = useContextSystem(props, 'ControlGroup');
const validChildren = getValidChildren(children);
const isVertical = direction === 'column';
const isGrid = !!templateColumns;
const classes = _cx(styles.itemFocus, isGrid && styles.itemGrid, className);
const clonedChildren = validChildren && validChildren.map((child, index) => {
const isFirst = index === 0;
const isLast = index + 1 === validChildren.length;
const isOnly = isFirst && isLast;
const isMiddle = !isFirst && !isLast; // @ts-ignore
const _key = (child === null || child === void 0 ? void 0 : child.key) || index;
/** @type {string | undefined} */
let first;
if (isFirst) {
if (isVertical) {
first = styles.firstRow;
} else {
first = styles.first;
}
}
/** @type {string | undefined} */
let last;
if (isLast) {
if (isVertical) {
last = styles.lastRow;
} else {
last = styles.last;
}
}
const contextStyles = _cx(first, isMiddle && styles.middle, last);
const contextProps = {
isFirst,
isLast,
isMiddle,
isOnly,
isVertical,
styles: contextStyles
};
return createElement(ControlGroupContext.Provider, {
key: _key,
value: contextProps
}, child);
});
return { ...otherProps,
children: clonedChildren,
className: classes,
direction,
templateColumns
};
}
//# sourceMappingURL=hook.js.map