Newer
Older
import React, {
useMemo,
useContext,
useState,
useEffect,
useRef,
createRef,
} from 'react';
import styled from 'styled-components';
import * as tablesFn from 'prosemirror-tables';
opacity: ${props => (props.disabled ? '0.4' : '1')};
cursor: ${props => (props.disabled ? 'not-allowed' : 'pointer')};
background: #fff;
display: flex;
flex-direction: column;
border: 1px solid #ddd;
border-radius: 0.25rem;
box-shadow: 0 0.2rem 0.4rem rgb(0 0 0 / 10%);
}
span:focus {
background: #f2f9fc;
outline: 2px solid #f2f9fc;
}
const StyledIcon = styled(Icon)`
height: 18px;
width: 18px;
margin-left: auto;
`;
const dropDownOptions = [
{ label: 'Add column before', value: 'addColumnBefore' },
{ label: 'Add column after', value: 'addColumnAfter' },
{ label: 'Delete column', value: 'deleteColumn' },
{ label: 'Insert row before', value: 'addRowBefore' },
{ label: 'Insert row after', value: 'addRowAfter' },
{ label: 'Delete row', value: 'deleteRow' },
{ label: 'Delete table', value: 'deleteTable' },
{ label: 'Merge cells', value: 'mergeCells' },
{ label: 'Split cell', value: 'splitCell' },
{ label: 'Toggle header column', value: 'toggleHeaderColumn' },
{ label: 'Toggle header row', value: 'toggleHeaderRow' },
{ label: 'Toggle header cells', value: 'toggleHeaderCell' },
];
const [isOpen, setIsOpen] = useState(false);
const isDisabled = !item.select(activeView.state);
useEffect(() => {
if (isDisabled) setIsOpen(false);
}, [isDisabled]);
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// arrow down
if (e.keyCode === 40) {
if (index === itemRefs.current.length - 1) {
itemRefs.current[0].current.focus();
} else {
itemRefs.current[index + 1].current.focus();
}
}
// arrow up
if (e.keyCode === 38) {
if (index === 0) {
itemRefs.current[itemRefs.current.length - 1].current.focus();
} else {
itemRefs.current[index - 1].current.focus();
}
}
// enter
if (e.keyCode === 13) {
itemRefs.current[index].current.click();
}
// ESC
if (e.keyCode === 27) {
openCloseMenu();
}
};
const TableDropDownComponent = useMemo(
() => (
<Wrapper disabled={isDisabled}>
<DropDownButton
aria-expanded={isOpen}
aria-haspopup
onKeyDown={e => {
if (e.keyCode === 40) {
itemRefs.current[0].current.focus();
}
onMouseDown={openCloseMenu}
tabIndex="0"
type="button"
>
itemRefs.current[index] = itemRefs.current[index] || createRef();
item.run(
activeView.state,
activeView.dispatch,
tablesFn[option.value],
);
}}
onKeyDown={e => onKeyDown(e, index)}
ref={itemRefs.current[index]}
role="menuitem"
tabIndex="-1"
>
{option.label}
</span>
);
})}
</DropDownMenu>