import { mountFlowDropApp } from '@flowdrop/flowdrop/editor';
import { createEndpointConfig } from '@flowdrop/flowdrop/core';
const app = await mountFlowDropApp(document.getElementById('editor'), {
endpointConfig: createEndpointConfig('/api/flowdrop'),
eventHandlers: {
// Track all changes
onWorkflowChange: (workflow, changeType) => {
console.log(`[${changeType}] ${workflow.nodes.length} nodes`);
},
// Update UI for dirty state
onDirtyStateChange: (isDirty) => {
document.getElementById('save-btn').disabled = !isDirty;
},
// Initialize on load
onWorkflowLoad: (workflow) => {
document.title = workflow.name;
},
// Validate before saving
onBeforeSave: async (workflow) => {
if (workflow.nodes.length === 0) {
return false; // cancel save
}
},
// Notify on success
onAfterSave: async (workflow) => {
showToast('Saved!');
},
// Handle save failures
onSaveError: async (error, workflow) => {
showToast(`Save failed: ${error.message}`, 'error');
},
// Centralized error handling
onApiError: (error, operation) => {
if (error.message.includes('401')) {
window.location.href = '/login';
return true; // suppress toast
}
},
// Cleanup on unmount
onBeforeUnmount: (workflow, isDirty) => {
if (isDirty) {
localStorage.setItem('unsaved-workflow', JSON.stringify(workflow));
}
}
}
});