src/components/RemoveComponent.js
import React from 'react';
import PropTypes from 'prop-types';
import { KEYS } from './constants';
const crossStr = String.fromCharCode(215);
const RemoveComponent = (props) => {
const { readOnly, removeComponent, onRemove, className, tag, index } = props;
const onKeydown = (event) => {
if (KEYS.ENTER.includes(event.keyCode) || event.keyCode === KEYS.SPACE) {
event.preventDefault();
event.stopPropagation();
return;
}
if (event.keyCode === KEYS.BACKSPACE) {
onRemove(event);
}
};
if (readOnly) {
return <span />;
}
const ariaLabel = `Tag at index ${index} with value ${tag.id} focussed. Press backspace to remove`;
if (removeComponent) {
const Component = removeComponent;
return (
<Component
onRemove={onRemove}
onKeyDown={onKeydown}
className={className}
aria-label={ariaLabel}
tag={tag}
index={index}
/>
);
}
return (
<button
onClick={onRemove}
onKeyDown={onKeydown}
className={className}
type="button"
aria-label={ariaLabel}>
{crossStr}
</button>
);
};
RemoveComponent.propTypes = {
className: PropTypes.string,
onRemove: PropTypes.func.isRequired,
readOnly: PropTypes.bool,
removeComponent: PropTypes.func,
tag: PropTypes.shape({
id: PropTypes.string.isRequired,
className: PropTypes.string,
key: PropTypes.string,
}),
index: PropTypes.number.isRequired,
};
export default RemoveComponent;