@finos/legend-application-marketplace
Version:
Legend Marketplace application core
116 lines • 8.18 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
/**
* Copyright (c) 2025-present, Goldman Sachs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import { observer } from 'mobx-react-lite';
import { Box, Typography, Stepper, Step, StepLabel, StepConnector, stepConnectorClasses, } from '@mui/material';
import { styled } from '@mui/material/styles';
import { CheckCircleIcon, CircleIcon, TimesCircleIcon, } from '@finos/legend-art';
import { getWorkflowSteps, STAGE_MAP, isStageCompleted, isStageRejected, formatTimestamp, WorkflowStage, WorkflowStatus, WorkflowCurrentStage, } from '../../stores/orders/OrderHelpers.js';
const CustomConnector = styled(StepConnector)(({ theme }) => ({
[`&.${stepConnectorClasses.alternativeLabel}`]: {
top: 10,
left: 'calc(-50% + 16px)',
right: 'calc(50% + 16px)',
},
[`&.${stepConnectorClasses.active}`]: {
[`& .${stepConnectorClasses.line}`]: {
borderColor: theme.palette.primary.main,
},
},
[`&.${stepConnectorClasses.completed}`]: {
[`& .${stepConnectorClasses.line}`]: {
borderColor: theme.palette.primary.main,
},
},
[`& .${stepConnectorClasses.line}`]: {
borderColor: theme.palette.grey[400],
borderTopWidth: 2,
borderRadius: 1,
},
}));
const StepIconComponent = (props) => {
const { active, completed, rejected } = props;
if (rejected) {
return (_jsx(TimesCircleIcon, { className: "legend-marketplace-progress-tracker__step-icon--rejected" }));
}
if (completed) {
return (_jsx(CheckCircleIcon, { className: "legend-marketplace-progress-tracker__step-icon--completed" }));
}
if (active) {
return (_jsx(CircleIcon, { className: "legend-marketplace-progress-tracker__step-icon--active" }));
}
return (_jsx(CircleIcon, { className: "legend-marketplace-progress-tracker__step-icon--pending" }));
};
export const ProgressTracker = observer(({ order }) => {
const steps = getWorkflowSteps(order);
const currentStageName = order.workflow_details?.current_stage
? STAGE_MAP[order.workflow_details.current_stage]
: WorkflowStage.ORDER_PLACED;
const currentStageIndex = steps.indexOf(currentStageName);
const activeStepIndex = currentStageIndex >= 0 ? currentStageIndex : 0;
const getFinalStepIndex = () => {
if (!order.workflow_details) {
return 0;
}
for (let i = steps.length - 1; i >= 0; i--) {
if (isStageRejected(order, steps[i] ?? WorkflowStage.ORDER_PLACED) &&
isStageCompleted(order, steps[i] ?? WorkflowStage.ORDER_PLACED)) {
return i;
}
}
for (let i = steps.length - 1; i >= 0; i--) {
if (isStageCompleted(order, steps[i] ?? WorkflowStage.ORDER_PLACED)) {
return i;
}
}
if (order.workflow_details.rpm_ticket_id &&
order.workflow_details.current_stage === WorkflowCurrentStage.RPM) {
return steps.indexOf(WorkflowStage.PENDING_FULFILLMENT);
}
return activeStepIndex;
};
const isClosedOrder = order.workflow_details?.workflow_status.toString() ===
WorkflowStatus.COMPLETED;
const finalStepIndex = isClosedOrder
? getFinalStepIndex()
: activeStepIndex;
return (_jsx(Box, { className: "legend-marketplace-progress-tracker", children: _jsx(Stepper, { alternativeLabel: true, activeStep: finalStepIndex, connector: _jsx(CustomConnector, {}), children: steps.map((label, index) => {
const isCompleted = isClosedOrder
? index <= finalStepIndex
: index < activeStepIndex;
const isActive = !isClosedOrder && index === activeStepIndex;
const stageCompleted = isStageCompleted(order, label);
const rejected = isStageRejected(order, label);
return (_jsx(Step, { completed: isCompleted && !rejected, children: _jsxs(StepLabel, { StepIconComponent: () => StepIconComponent({
active: isActive,
completed: isCompleted && !rejected,
rejected: rejected && isCompleted,
}), children: [_jsx(Typography, { className: "legend-marketplace-progress-tracker__step-label", children: label }), label === WorkflowStage.MANAGER_APPROVAL &&
isCompleted &&
stageCompleted &&
order.workflow_details &&
!isActive && (_jsxs(Box, { className: "legend-marketplace-progress-tracker__step-details", children: [order.workflow_details.manager_actioned_by && (_jsxs(Typography, { className: "legend-marketplace-progress-tracker__step-detail", children: [_jsx("strong", { children: "Actioned by:" }), ' ', order.workflow_details.manager_actioned_by] })), order.workflow_details.manager_actioned_timestamp && (_jsxs(Typography, { className: "legend-marketplace-progress-tracker__step-detail", children: [_jsx("strong", { children: "Date:" }), ' ', formatTimestamp(order.workflow_details.manager_actioned_timestamp)] })), order.workflow_details.manager_action && (_jsxs(Typography, { className: "legend-marketplace-progress-tracker__step-detail", children: [_jsx("strong", { children: "Action:" }), ' ', order.workflow_details.manager_action] })), order.workflow_details.manager_comment && (_jsxs(Typography, { className: "legend-marketplace-progress-tracker__step-detail", children: [_jsx("strong", { children: "Comments:" }), ' ', order.workflow_details.manager_comment] }))] })), label === WorkflowStage.BUSINESS_ANALYST_APPROVAL &&
isCompleted &&
stageCompleted &&
order.workflow_details &&
!isActive && (_jsxs(Box, { className: "legend-marketplace-progress-tracker__step-details", children: [order.workflow_details.bbg_approval_actioned_by && (_jsxs(Typography, { className: "legend-marketplace-progress-tracker__step-detail", children: [_jsx("strong", { children: "Actioned by:" }), ' ', order.workflow_details.bbg_approval_actioned_by] })), order.workflow_details
.bbg_approval_actioned_timestamp && (_jsxs(Typography, { className: "legend-marketplace-progress-tracker__step-detail", children: [_jsx("strong", { children: "Date:" }), ' ', formatTimestamp(order.workflow_details
.bbg_approval_actioned_timestamp)] })), order.workflow_details.bbg_approval_action && (_jsxs(Typography, { className: "legend-marketplace-progress-tracker__step-detail", children: [_jsx("strong", { children: "Action:" }), ' ', order.workflow_details.bbg_approval_action] })), order.workflow_details.bbg_approval_comment && (_jsxs(Typography, { className: "legend-marketplace-progress-tracker__step-detail", children: [_jsx("strong", { children: "Comments:" }), ' ', order.workflow_details.bbg_approval_comment] }))] })), label === WorkflowStage.PENDING_FULFILLMENT &&
order.workflow_details?.rpm_ticket_id && (_jsx(Box, { className: "legend-marketplace-progress-tracker__step-details", children: _jsxs(Typography, { className: "legend-marketplace-progress-tracker__step-detail", children: [_jsx("strong", { children: "RPM Ticket:" }), ' ', order.workflow_details.rpm_ticket_id] }) }))] }) }, label));
}) }) }));
});
//# sourceMappingURL=ProgressTracker.js.map