import React, { forwardRef } from 'react';
import { flattenChildren } from '@gluestack-ui/utils';
export const ButtonGroup = (StyledButtonGroup: any) =>
forwardRef(
(
{
flexDirection = 'row',
isAttached,
isDisabled,
children,
isReversed,
reversed,
...props
}: any,
ref?: any
) => {
const direction = flexDirection.includes('reverse')
? flexDirection === 'column-reverse'
? 'column'
: 'row'
: flexDirection;
let computedChildren;
let childrenArray = React.Children.toArray(flattenChildren(children));
childrenArray =
isReversed || reversed ? [...childrenArray].reverse() : childrenArray;
if (childrenArray) {
computedChildren = childrenArray.map((child: any, index: number) => {
if (typeof child === 'string' || typeof child === 'number') {
return child;
}
const attachedStyles: any = {};
if (index === 0) {
if (direction === 'column') {
attachedStyles.borderBottomLeftRadius = 0;
attachedStyles.borderBottomRightRadius = 0;
} else {
attachedStyles.borderTopRightRadius = 0;
attachedStyles.borderBottomRightRadius = 0;
}
} else if (index === children?.length - 1) {
if (direction === 'column') {
attachedStyles.borderTopLeftRadius = 0;
attachedStyles.borderTopRightRadius = 0;
} else {
attachedStyles.borderTopLeftRadius = 0;
attachedStyles.borderBottomLeftRadius = 0;
}
} else {
attachedStyles.borderRadius = 0;
}
const childProps = {
isDisabled,
...child.props,
style: {
...(isAttached ? attachedStyles : {}),
...child.props.style,
},
};
const clonedChild = React.cloneElement(child, {
...childProps,
});
return (
{clonedChild}
);
});
}
const gapProp = isAttached
? {
gap: 0,
}
: {};
if (computedChildren)
return (
{computedChildren}
);
return null;
}
);