extended-dynamic-forms
Version:
Extended React JSON Schema Form (RJSF) v6 with custom components, widgets, templates, layouts, and form events
78 lines (76 loc) • 2.52 kB
TypeScript
import { RJSFSchema, UiSchema } from '@rjsf/utils';
import { ConditionalRule, ConditionalEvent, ConditionalActions, ConditionalEngineInstance } from '../types';
export declare class DynamicArrayConditionalEngine implements ConditionalEngineInstance {
private originalRules;
private engine;
private expandedRules;
constructor(rules: ConditionalRule[], schema: RJSFSchema, uiSchema?: UiSchema, extraActions?: ConditionalActions);
/**
* Expand array patterns like directors[*] based on actual form data
*/
expandArrayPatterns(rules: ConditionalRule[], formData: any): ConditionalRule[];
/**
* Check if a rule contains array patterns like [*]
*/
private hasArrayPatterns;
/**
* Expand a single rule that contains array patterns
*/
private expandSingleRule;
/**
* Find all array patterns like "directors[*]" in a rule
*/
private findArrayPatterns;
/**
* Expand a rule for a specific array index
*/
private expandRuleForIndex;
/**
* Get nested value from object using dot notation
*/
private getNestedValue;
/**
* Pre-process uiSchema to ensure array items have proper template structure
*/
private preprocessUiSchemaForArrays;
/**
* Main processing method - implement ConditionalEngineInstance interface
*/
processFormData(formData: any): Promise<{
schema: RJSFSchema;
uiSchema: UiSchema;
formData: any;
}>;
/**
* Get the original unexpanded rules
*/
getOriginalRules(): ConditionalRule[];
/**
* Get the current expanded rules
*/
getCurrentRules(): ConditionalRule[];
/**
* Manually set rules (useful for testing)
*/
setRules(rules: ConditionalRule[]): void;
/**
* Add a rule to the engine (implement ConditionalEngineInstance interface)
*/
addRule(rule: ConditionalRule): void;
/**
* Run the conditional engine and return events (implement ConditionalEngineInstance interface)
*/
run(formData: any): Promise<ConditionalEvent[]>;
/**
* Add an action to the engine (for ConditionalContext compatibility)
*/
addAction(actionType: string, actionFunction: any): void;
/**
* Remove an action from the engine (for ConditionalContext compatibility)
*/
removeAction(actionType: string): void;
/**
* Get available actions (for ConditionalContext compatibility)
*/
getAvailableActions(): string[];
}