UNPKG

@finos/legend-application-marketplace

Version:
116 lines 8.18 kB
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