Stage Frequency Curve (SFC) Node
The Stage Frequency Curve node provides hydrological analysis capabilities for flood modeling within the React Flow workbench.
Architecture
Types & Validation
SFCDatainterface inapps/app/types/flow.tsextendsBaseNodeData- Zod validation schema in
apps/app/lib/validation/sfc-validation.ts - Supports nested data structure for analysis sections
Components
- SFCNode — React Flow node component with TrendingUp icon
- SFCPanel — Properties panel with accordion structure
- Uses
@repo/design-systemUI components
Data Structure
interface SFCData extends BaseNodeData {
datasets?: {
name?: string;
description?: string;
};
reservoirModel?: Record<string, unknown>;
criticalDuration?: Record<string, unknown>;
volumeFrequencyCurve?: Record<string, unknown>;
floodSeasonality?: Record<string, unknown>;
hydrographShapes?: Record<string, unknown>;
startingStageDuration?: Record<string, unknown>;
empiricalFrequency?: Record<string, unknown>;
simulation?: Record<string, unknown>;
results?: Record<string, unknown>;
}
Configuration Sections
Implemented Sections
- Datasets — Name and description fields with validation
- Basic Information — Node name and description
Placeholder Sections
The following sections are structured placeholders ready for future implementation:
- Reservoir Model
- Critical Duration
- Volume Frequency Curve
- Flood Seasonality
- Hydrograph Shapes
- Starting Stage Duration
- Empirical Frequency
- Simulation
- Results
Usage
Add SFC nodes to the workbench:
const newSFCNode = {
id: `sfc-${Date.now()}`,
type: 'sfc',
position: { x: 100, y: 100 },
data: {
name: 'New Stage Frequency Curve',
description: '',
datasets: { name: '', description: '' },
},
};
Configure through properties panel:
// Properties panel automatically opens on node selection
// Accordion structure with Datasets section expanded by default
// Real-time validation and autosave via useAnalysis hook
Testing & Stories
- Unit tests in
apps/app/__tests__/sfc-node.test.tsx - Storybook stories in
apps/storybook/stories/sfc-node.stories.tsx - Multiple test scenarios including minimal data and edge cases