import * as React from 'react'; import { RouteStepFormModal } from './RouteStepFormModal'; import { ApprovalRouteApi } from '../../services/api'; import { RouteStepStatus, TemplateRoute, TemplateRouteStep } from '../../models'; import { routeStepStatusLabels, routeTypeLabels, texts } from '../../texts'; import { describeStepExecutor } from '../../utils/stepExecutor'; import { useRouteSteps } from '../../hooks/useRouteSteps'; import { useDeleteTarget } from '../../hooks/useDeleteTarget'; import { ActionsCell, Alert, Badge, Breadcrumbs, Button, ConfirmDialog, DataTable, IconButton, PageHeader, PrimaryCell } from '../ui'; export interface IRouteStepsScreenProps { api: ApprovalRouteApi; route: TemplateRoute; requestTypeName: string; onBack: () => void; } export const RouteStepsScreen: React.FC = ({ api, route, requestTypeName, onBack }) => { const steps = useRouteSteps(api, route.id); const [savedWarning, setSavedWarning] = React.useState(); const [editing, setEditing] = React.useState(); const [showForm, setShowForm] = React.useState(false); const deleteTarget = useDeleteTarget( item => api.templateRouteSteps.remove(route.id, item.id), steps.reload ); const openCreate = (): void => { setEditing(undefined); setShowForm(true); }; const openEdit = (item: TemplateRouteStep): void => { setEditing(item); setShowForm(true); }; const handleSaved = (savedStep: TemplateRouteStep): void => { setSavedWarning(savedStep.warning ?? undefined); steps.reload(); }; const nextOrderNo = steps.items.length > 0 ? Math.max(...steps.items.map(s => s.orderNo)) + 1 : 1; return (
} /> {savedWarning && {savedWarning}} {steps.error && {steps.error}} {deleteTarget.error && {deleteTarget.error}} r.orderNo }, { key: 'executor', header: texts.routeSteps.columnExecutor, render: r => {describeStepExecutor(r)} }, { key: 'status', header: texts.routeSteps.columnStatus, render: r => ( {routeStepStatusLabels[r.status]} ) }, { key: 'reassign', header: texts.routeSteps.columnReassign, align: 'center', render: r => (r.allowReassignToOtherApprovers ? {texts.routeSteps.reassignAllowed} : {texts.common.no}) }, { key: 'actions', header: '', width: '100px', align: 'right', sticky: true, render: r => ( openEdit(r)} /> deleteTarget.ask(r)} /> ) } ]} rows={steps.items} keyOf={r => r.id} emptyMessage={steps.isLoading ? texts.common.loading : texts.routeSteps.emptyList} /> {showForm && ( setShowForm(false)} /> )} {deleteTarget.target && ( )}
); };