2021-08-16 09:15:36 +00:00
|
|
|
import React, { useRef } from "react";
|
2021-07-15 15:10:37 +00:00
|
|
|
import PropTypes from "prop-types";
|
2021-07-13 08:07:50 +00:00
|
|
|
import { StyledTableRow } from "./StyledTableContainer";
|
2021-07-15 15:10:37 +00:00
|
|
|
import TableCell from "./TableCell";
|
2022-03-04 17:55:28 +00:00
|
|
|
import ContextMenu from "../context-menu";
|
2021-07-15 15:10:37 +00:00
|
|
|
import ContextMenuButton from "../context-menu-button";
|
2021-07-13 08:07:50 +00:00
|
|
|
|
|
|
|
const TableRow = (props) => {
|
2021-07-15 15:10:37 +00:00
|
|
|
const {
|
|
|
|
fileContextClick,
|
2021-10-05 09:14:21 +00:00
|
|
|
onHideContextMenu,
|
2021-07-15 15:10:37 +00:00
|
|
|
children,
|
|
|
|
contextOptions,
|
2021-07-16 09:36:47 +00:00
|
|
|
className,
|
2021-07-23 15:13:06 +00:00
|
|
|
style,
|
2021-07-16 09:36:47 +00:00
|
|
|
selectionProp,
|
2021-12-01 12:17:12 +00:00
|
|
|
title,
|
2022-03-10 07:09:10 +00:00
|
|
|
getContextModel,
|
2021-07-15 15:10:37 +00:00
|
|
|
...rest
|
|
|
|
} = props;
|
|
|
|
|
|
|
|
const cm = useRef();
|
|
|
|
const row = useRef();
|
|
|
|
|
|
|
|
const onContextMenu = (e) => {
|
2022-06-01 15:15:52 +00:00
|
|
|
fileContextClick && fileContextClick(e.button === 2);
|
2021-07-15 15:10:37 +00:00
|
|
|
if (cm.current && !cm.current.menuRef.current) {
|
|
|
|
row.current.click(e);
|
|
|
|
}
|
|
|
|
cm.current.show(e);
|
|
|
|
};
|
|
|
|
|
|
|
|
const renderContext =
|
2022-03-10 07:09:10 +00:00
|
|
|
Object.prototype.hasOwnProperty.call(props, "contextOptions") &&
|
|
|
|
contextOptions.length > 0;
|
2021-07-15 15:10:37 +00:00
|
|
|
|
|
|
|
const getOptions = () => {
|
|
|
|
fileContextClick && fileContextClick();
|
|
|
|
return contextOptions;
|
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<StyledTableRow
|
|
|
|
onContextMenu={onContextMenu}
|
2021-07-16 09:36:47 +00:00
|
|
|
className={`${className} table-container_row`}
|
2021-07-15 15:10:37 +00:00
|
|
|
{...rest}
|
|
|
|
>
|
|
|
|
{children}
|
|
|
|
<div>
|
2021-09-30 13:27:01 +00:00
|
|
|
<TableCell
|
|
|
|
{...selectionProp}
|
|
|
|
style={style}
|
|
|
|
forwardedRef={row}
|
|
|
|
className={`${selectionProp?.className} table-container_row-context-menu-wrapper`}
|
|
|
|
>
|
2022-03-04 17:55:28 +00:00
|
|
|
<ContextMenu
|
2021-10-05 09:14:21 +00:00
|
|
|
onHide={onHideContextMenu}
|
|
|
|
ref={cm}
|
|
|
|
model={contextOptions}
|
2022-03-10 07:09:10 +00:00
|
|
|
getContextModel={getContextModel}
|
2022-03-04 17:55:28 +00:00
|
|
|
withBackdrop={true}
|
|
|
|
></ContextMenu>
|
2021-07-15 15:10:37 +00:00
|
|
|
{renderContext ? (
|
|
|
|
<ContextMenuButton
|
|
|
|
className="expandButton"
|
|
|
|
getData={getOptions}
|
|
|
|
directionX="right"
|
|
|
|
isNew={true}
|
|
|
|
onClick={onContextMenu}
|
2022-06-27 14:59:42 +00:00
|
|
|
onClose={onHideContextMenu}
|
2021-12-01 12:17:12 +00:00
|
|
|
title={title}
|
2021-07-15 15:10:37 +00:00
|
|
|
/>
|
|
|
|
) : (
|
|
|
|
<div className="expandButton"> </div>
|
|
|
|
)}
|
|
|
|
</TableCell>
|
|
|
|
</div>
|
|
|
|
</StyledTableRow>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
TableRow.propTypes = {
|
|
|
|
fileContextClick: PropTypes.func,
|
|
|
|
children: PropTypes.any,
|
|
|
|
contextOptions: PropTypes.array,
|
2021-10-05 09:14:21 +00:00
|
|
|
onHideContextMenu: PropTypes.func,
|
2021-07-16 09:36:47 +00:00
|
|
|
selectionProp: PropTypes.object,
|
2021-07-28 18:06:14 +00:00
|
|
|
className: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),
|
2021-07-23 15:13:06 +00:00
|
|
|
style: PropTypes.object,
|
2022-02-22 13:00:26 +00:00
|
|
|
title: PropTypes.string,
|
2022-03-10 07:09:10 +00:00
|
|
|
getContextModel: PropTypes.func,
|
2021-07-13 08:07:50 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export default TableRow;
|