/*! * Copyright (c) Microsoft. All rights reserved. * Licensed under the MIT license. See LICENSE file in the project. */ import type { Step } from '@datashaper/workflow' import { isNoArgsStep } from '@datashaper/workflow' import { CollapsiblePanel, DialogConfirm } from '@essex/components' import { memo } from 'react' import { DisplayOrder } from '../../enums.js' import { useWorkflowSteps } from '../../hooks/workflow/useWorkflowSteps.js' import { Action } from '../controls/index.js' import { StepEditor } from '../StepEditor/index.js' import { StepHeader } from './StepHeader.js' import type { StepHeaderStyles } from './StepHeader.types.js' import { useDeleteConfirm } from './StepList.hooks.js' import { ButtonContainer, buttonStyles, Container, icons, StepsContainer, useCollapsiblePanelStyles, } from './StepList.styles.js' import type { StepListProps } from './StepList.types.js' export const StepList: React.FC = memo(function StepStack({ workflow, order = DisplayOrder.FirstOnTop, onDelete, onSelect, onSave, onSelectInputTable, onSelectLatestTable, selectedKey, styles, }) { const steps = useWorkflowSteps(workflow, order) const collapsiblePanelStyles = useCollapsiblePanelStyles() const { onClick: onDeleteClicked, onConfirm: onConfirmDelete, toggle: toggleDeleteModal, isOpen: isDeleteModalOpen, } = useDeleteConfirm(onDelete) return ( {(onSelectInputTable || onSelectLatestTable) && ( Original Latest )} {steps.map((step) => { const stepIndex = workflow.steps.findIndex((s) => s.id === step.id) const handleSave = isNoArgsStep(step) || !onSave ? undefined : (s: Step) => onSave(s, stepIndex) const handleDelete = onDeleteClicked && (() => onDeleteClicked(stepIndex)) return ( onSelect?.(step.id)} onRenderHeader={() => onRenderHeader( step, stepIndex, selectedKey === step.id, styles?.stepHeaders, ) } > ) })} ) }) function onRenderHeader( step: Step, index: number, selected = false, styles?: StepHeaderStyles, ): JSX.Element { return ( ) }