@bernierllc/generic-workflow-ui
Version:
Generic, reusable workflow UI components with linear and graph visualization
55 lines (54 loc) • 2.37 kB
JavaScript
"use strict";
/*
Copyright (c) 2025 Bernier LLC
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GenericWorkflowStatusIndicator = GenericWorkflowStatusIndicator;
const react_1 = __importDefault(require("react"));
const tamagui_1 = require("tamagui");
const defaultConfig = {
enabled: true,
size: 'medium',
showText: true,
showIcon: true,
showTransitions: false,
statusColors: {},
statusIcons: {}
};
function GenericWorkflowStatusIndicator({ status, config: userConfig = {}, disabled = false }) {
const config = { ...defaultConfig, ...userConfig };
if (!config.enabled) {
return react_1.default.createElement(react_1.default.Fragment, null);
}
const statusInfo = config.getStatusInfo
? config.getStatusInfo(status)
: {
status: status.currentStageId,
label: `Current: ${status.currentStageId}`,
color: '$blue10',
icon: '•'
};
const getBadgeSize = () => {
switch (config.size) {
case 'small':
return '$2';
case 'large':
return '$4';
default:
return '$3';
}
};
return (react_1.default.createElement(tamagui_1.XStack, { gap: "$2", alignItems: "center", opacity: disabled ? 0.5 : 1 },
react_1.default.createElement(tamagui_1.Card, { size: getBadgeSize(), backgroundColor: config.statusColors?.[status.currentStageId] || statusInfo.color, padding: "$2", borderRadius: "$4" },
react_1.default.createElement(tamagui_1.XStack, { gap: "$1", alignItems: "center" },
config.showIcon && (react_1.default.createElement(tamagui_1.Text, null, config.statusIcons?.[status.currentStageId] || statusInfo.icon)),
config.showText && react_1.default.createElement(tamagui_1.Text, null, statusInfo.label))),
config.showTransitions && status.availableTransitions.length > 0 && (react_1.default.createElement(tamagui_1.Text, { fontSize: "$2", color: "$gray10" },
status.availableTransitions.length,
" transition",
status.availableTransitions.length !== 1 ? 's' : '',
" available"))));
}