toolshed/frontend/src/components/workflow/ComponentRegistry.js
2026-07-23 05:17:44 +02:00

112 lines
3.7 KiB
JavaScript

/**
* Workflow Step Component Registry
*
* This module handles the dynamic loading and registration of workflow step components.
* It provides a centralized way to map workflow types and steps to their corresponding Vue components.
*/
// Import all step components
import FotoFirstStep1 from './steps/FotoFirstStep1.vue';
import FotoFirstStep2 from './steps/FotoFirstStep2.vue';
import FotoFirstStep3 from './steps/FotoFirstStep3.vue';
import FotoFirstStep4 from './steps/FotoFirstStep4.vue';
import BulkImportStep1 from './steps/BulkImportStep1.vue';
import BulkImportStep6 from './steps/BulkImportStep6.vue';
/**
* Component registry mapping workflow types and steps to components
* Format: 'workflowType-step' -> Component
*/
const componentRegistry = {
// Foto First Import Workflow components
'foto-first-bulk-import-1': FotoFirstStep1,
'foto-first-bulk-import-2': FotoFirstStep2,
'foto-first-bulk-import-3': FotoFirstStep3,
'foto-first-bulk-import-4': FotoFirstStep4,
// Bulk Item Import Workflow components
'import-items-1': BulkImportStep1,
'import-items-6': BulkImportStep6,
// Additional steps can be added as needed
// 'import-items-2': BulkImportStep2,
// 'import-items-3': BulkImportStep3,
// ... etc
};
/**
* Get a step component for a given workflow type and step
* @param {string} workflowType - The workflow type identifier
* @param {string|number} step - The step identifier
* @returns {Object|null} Vue component or null if not found
*/
export function getStepComponent(workflowType, step) {
const componentKey = `${workflowType}-${step}`;
return componentRegistry[componentKey] || null;
}
/**
* Register a new step component
* @param {string} workflowType - The workflow type identifier
* @param {string|number} step - The step identifier
* @param {Object} component - The Vue component
*/
export function registerStepComponent(workflowType, step, component) {
const componentKey = `${workflowType}-${step}`;
componentRegistry[componentKey] = component;
}
/**
* Get all registered components for a workflow type
* @param {string} workflowType - The workflow type identifier
* @returns {Object} Object with step numbers as keys and components as values
*/
export function getWorkflowComponents(workflowType) {
const workflowComponents = {};
Object.keys(componentRegistry).forEach(key => {
if (key.startsWith(`${workflowType}-`)) {
const step = key.replace(`${workflowType}-`, '');
workflowComponents[step] = componentRegistry[key];
}
});
return workflowComponents;
}
/**
* Check if a step component exists for a workflow type and step
* @param {string} workflowType - The workflow type identifier
* @param {string|number} step - The step identifier
* @returns {boolean} True if component exists, false otherwise
*/
export function hasStepComponent(workflowType, step) {
const componentKey = `${workflowType}-${step}`;
return componentKey in componentRegistry;
}
/**
* Get all registered workflow types
* @returns {Array<string>} Array of workflow type identifiers
*/
export function getRegisteredWorkflowTypes() {
const workflowTypes = new Set();
Object.keys(componentRegistry).forEach(key => {
const parts = key.split('-');
if (parts.length >= 2) {
// Reconstruct workflow type (everything except the last part which is the step)
const workflowType = parts.slice(0, -1).join('-');
workflowTypes.add(workflowType);
}
});
return Array.from(workflowTypes);
}
export default {
getStepComponent,
registerStepComponent,
getWorkflowComponents,
hasStepComponent,
getRegisteredWorkflowTypes
};