@filerobot/approvals
Version:
Asset approvals package for Filerobot
82 lines • 3.38 kB
JavaScript
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;