in src/dnd-list/list.tsx [63:152]
render() {
const { overrides = {}, items, onChange, removable } = this.props;
const {
Root: RootOverride,
List: ListOverride,
Item: ItemOverride,
DragHandle: DragHandleOverride,
CloseHandle: CloseHandleOverride,
Label: LabelOverride,
} = overrides;
const [Root, rootProps] = getOverrides(RootOverride, StyledRoot);
const [List, listProps] = getOverrides(ListOverride, StyledList);
const [Item, itemProps] = getOverrides(ItemOverride, StyledItem);
const [DragHandle, dragHandleProps] = getOverrides(DragHandleOverride, StyledDragHandle);
const [CloseHandle, closeHandleProps] = getOverrides(CloseHandleOverride, StyledCloseHandle);
const [Label, labelProps] = getOverrides(LabelOverride, StyledLabel);
const isRemovable = this.props.removable || false;
const isRemovableByMove = this.props.removableByMove || false;
return (
<Root
$isRemovable={isRemovable}
data-baseweb="dnd-list"
{...rootProps}
onFocus={forkFocus(rootProps, this.handleFocus)}
onBlur={forkBlur(rootProps, this.handleBlur)}
>
<MovableList
removableByMove={isRemovableByMove}
values={items}
onChange={onChange}
renderList={({ children, props, isDragged }) => (
<List $isRemovable={isRemovable} $isDragged={isDragged} ref={props.ref} {...listProps}>
{children}
</List>
)}
renderItem={({ value, props, isDragged, isSelected, isOutOfBounds, index }) => {
const sharedProps: SharedStylePropsArg = {
$isRemovable: isRemovable,
$isRemovableByMove: isRemovableByMove,
$isDragged: isDragged,
$isSelected: isSelected,
$isFocusVisible: this.state.isFocusVisible,
$isOutOfBounds: isOutOfBounds,
$value: value,
// @ts-ignore
$index: index,
};
return (
<ItemLayer dragged={isDragged} key={props.key}>
<Item
{...sharedProps}
ref={props.ref}
tabIndex={props.tabIndex}
aria-roledescription={props['aria-roledescription']}
onKeyDown={props.onKeyDown}
onWheel={props.onWheel}
{...itemProps}
style={{ ...props.style, display: 'flex' }}
>
<DragHandle {...sharedProps} {...dragHandleProps}>
<Grab size={24} />
</DragHandle>
<Label {...sharedProps} {...labelProps}>
{value}
</Label>
{removable && (
<CloseHandle
{...sharedProps}
// @ts-ignore
onClick={(evt) => {
evt.preventDefault();
onChange &&
onChange({
oldIndex: typeof index !== 'undefined' ? index : 0,
newIndex: -1,
});
}}
{...closeHandleProps}
>
<Delete size={24} color="#CCC" />
</CloseHandle>
)}
</Item>
</ItemLayer>
);
}}
/>
</Root>
);
}