UNPKG

@filerobot/approvals

Version:

Asset approvals package for Filerobot

82 lines 3.38 kB
import { useMemo } from 'react'; import { useSelector } from 'react-redux'; import { Button, EllipsedText } from '@scaleflex/ui/core'; import { APPROVAL_STATUSES } from '@filerobot/utils/lib/constants'; import { selectIsCurrentUserApprovalRequesterForApproval, selectCurrentUserAsApproverForApproval } from '../../common.slice'; import ApproversSection from './ApproversSection'; import Styled from './Approval.styled'; import ApprovalDescription from './ApprovalDescription'; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; var Approval = function Approval(_ref) { var approval = _ref.approval, i18n = _ref.i18n, onActivateApproval = _ref.onActivateApproval, _ref$readOnly = _ref.readOnly, readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly, onClickDetailsButton = _ref.onClickDetailsButton, isModalViewMode = _ref.isModalViewMode, marginBottom = _ref.marginBottom; var isRequester = useSelector(function (state) { return selectIsCurrentUserApprovalRequesterForApproval(state, approval.uuid); }); var currentUserApproverDetails = useSelector(function (state) { return selectCurrentUserAsApproverForApproval(state, approval.uuid); }); var isPendingApproval = approval.status === APPROVAL_STATUSES.PENDING; var isNotVotedApprover = useMemo(function () { return currentUserApproverDetails && ![APPROVAL_STATUSES.REJECTED, APPROVAL_STATUSES.APPROVED].includes(currentUserApproverDetails === null || currentUserApproverDetails === void 0 ? void 0 : currentUserApproverDetails.response); }, [currentUserApproverDetails]); var renderDetailsButton = function renderDetailsButton() { var buttonNameI18nKey = 'approvalsViewDetailsButton'; var handleDetailsButtonClick = function handleDetailsButtonClick() { if (typeof onClickDetailsButton === 'function') { onClickDetailsButton(approval); } onActivateApproval({ approvalUuid: approval.uuid }); }; if (isPendingApproval && !readOnly) { if (isRequester) { buttonNameI18nKey = 'approvalsManageButton'; } if (isNotVotedApprover) { buttonNameI18nKey = 'approvalsViewAndApproveButton'; } } return /*#__PURE__*/_jsx(Button, { onClick: handleDetailsButtonClick, size: "sm", color: "link-primary", children: i18n(buttonNameI18nKey) }); }; var renderMessage = function renderMessage() { if (isModalViewMode) { return /*#__PURE__*/_jsx(EllipsedText, { children: "\u201C".concat(approval.message, "\u201D") }); } return "\u201C".concat(approval.message, "\u201D"); }; return /*#__PURE__*/_jsxs(Styled.Container, { isModalViewMode: isModalViewMode, marginBottom: marginBottom, children: [/*#__PURE__*/_jsx(ApprovalDescription, { approval: approval, isModalViewMode: isModalViewMode }), approval.message && /*#__PURE__*/_jsx(Styled.Message, { isModalViewMode: isModalViewMode, children: renderMessage() }), /*#__PURE__*/_jsx(Styled.Approvers, { children: /*#__PURE__*/_jsx(ApproversSection, { approvers: approval.approvers, requester: approval.requester, isModalViewMode: isModalViewMode }) }), /*#__PURE__*/_jsx(Styled.Actions, { children: renderDetailsButton() })] }); }; export default Approval;