@snteam/amplify-angular-core 1.0.44 → 1.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snteam-amplify-angular-core.mjs","sources":["../../../projects/amplify-angular-core/src/lib/interfaces/index.ts","../../../projects/amplify-angular-core/src/lib/types/selection-set.types.ts","../../../projects/amplify-angular-core/src/lib/types/error.types.ts","../../../projects/amplify-angular-core/src/lib/types/index.ts","../../../projects/amplify-angular-core/src/lib/services/error-handler.service.ts","../../../projects/amplify-angular-core/src/lib/services/configuration-analyzer.service.ts","../../../projects/amplify-angular-core/src/lib/services/schema-introspector.service.ts","../../../projects/amplify-angular-core/src/lib/services/selection-set-generator.service.ts","../../../projects/amplify-angular-core/src/lib/amplify-angular-core.ts","../../../projects/amplify-angular-core/src/lib/services/amplify-form-builder.service.ts","../../../projects/amplify-angular-core/src/lib/pipes/val-to-title.pipe.ts","../../../projects/amplify-angular-core/src/lib/services/amplify-model.service.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-question/dynamic-form-question.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-question/dynamic-form-question.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-group/dynamic-form-group.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-group/dynamic-form-group.component.html","../../../projects/amplify-angular-core/src/lib/components/add-relationship-dialog/add-relationship-dialog.component.ts","../../../projects/amplify-angular-core/src/lib/components/add-relationship-dialog/add-relationship-dialog.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component.html","../../../projects/amplify-angular-core/src/lib/components/record-relationships/record-relationships.component.ts","../../../projects/amplify-angular-core/src/lib/components/record-relationships/record-relationships.component.html","../../../projects/amplify-angular-core/src/lib/classes/questions.ts","../../../projects/amplify-angular-core/src/lib/classes/validators.ts","../../../projects/amplify-angular-core/src/lib/services/question-control.service.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/amplify-angular-core/src/lib/components/list-view/list-view.component.ts","../../../projects/amplify-angular-core/src/lib/components/list-view/list-view.component.html","../../../projects/amplify-angular-core/src/lib/components/configurations/configurations.component.ts","../../../projects/amplify-angular-core/src/lib/components/configurations/configurations.component.html","../../../projects/amplify-angular-core/src/public-api.ts","../../../projects/amplify-angular-core/src/snteam-amplify-angular-core.ts"],"sourcesContent":["// Dynamic Relationship Loader Interfaces\nexport * from './selection-set-generator.interface';\nexport * from './configuration-analyzer.interface';\nexport * from './schema-introspector.interface';","/**\n * Cache key for storing generated selection sets\n */\nexport interface CacheKey {\n /** The relationship model name */\n relationshipModel: string;\n \n /** The field name used to access the related model */\n fieldName: string;\n \n /** The target model name */\n targetModel: string;\n \n /** Optional schema version for cache invalidation */\n schemaVersion?: string;\n}\n\n/**\n * Cached selection set entry\n */\nexport interface CachedSelectionSet {\n /** The cache key used to store this entry */\n key: CacheKey;\n \n /** The generated selection set */\n selectionSet: string[];\n \n /** Timestamp when this entry was created */\n createdAt: Date;\n \n /** Number of times this entry has been accessed */\n accessCount: number;\n}\n\n/**\n * Selection set generation patterns\n */\nexport enum SelectionSetPattern {\n /** Basic relationship loading with id and common display fields */\n BASIC = 'basic',\n \n /** Comprehensive field loading using wildcard selection */\n COMPREHENSIVE = 'comprehensive',\n \n /** Selective field loading based on schema analysis */\n SELECTIVE = 'selective',\n \n /** Minimal fallback pattern for error cases */\n FALLBACK = 'fallback'\n}\n\n/**\n * Configuration for selection set generation\n */\nexport interface SelectionSetConfig {\n /** The pattern to use for generation */\n pattern: SelectionSetPattern;\n \n /** Maximum nesting depth for relationships */\n maxDepth: number;\n \n /** Maximum number of fields to include */\n maxFields: number;\n \n /** Whether to include schema validation */\n validateWithSchema: boolean;\n \n /** Custom field names to always include */\n requiredFields: string[];\n \n /** Complexity limits for selection set validation */\n complexityLimits: ComplexityLimits;\n}\n\n/**\n * Complexity limits for selection set validation\n */\nexport interface ComplexityLimits {\n /** Maximum nesting depth for relationships (default: 3) */\n maxNestingDepth: number;\n \n /** Maximum number of fields per selection set (default: 20) */\n maxFieldCount: number;\n \n /** Maximum number of wildcard selections allowed (default: 2) */\n maxWildcardSelections: number;\n \n /** Whether to detect and prevent circular references (default: true) */\n preventCircularReferences: boolean;\n \n /** Maximum length for individual field selectors (default: 100) */\n maxSelectorLength: number;\n}\n\n/**\n * Result of complexity validation\n */\nexport interface ComplexityValidationResult {\n /** Whether the selection set passes complexity validation */\n isValid: boolean;\n \n /** List of validation errors if any */\n errors: string[];\n \n /** List of validation warnings */\n warnings: string[];\n \n /** Calculated complexity score */\n complexityScore: number;\n \n /** Detected circular references if any */\n circularReferences: string[];\n}\n\n/**\n * Display optimization configuration\n */\nexport interface DisplayOptimizationConfig {\n /** Whether to enable display optimization */\n enabled: boolean;\n \n /** Fields that are commonly used for display */\n commonDisplayFields: string[];\n \n /** Fields that should be excluded from display optimization */\n excludeFromOptimization: string[];\n \n /** Whether to prioritize display fields over other fields */\n prioritizeDisplayFields: boolean;\n \n /** Maximum number of non-display fields to include */\n maxNonDisplayFields: number;\n}\n\n/**\n * Field classification for display optimization\n */\nexport enum FieldClassification {\n /** Essential fields that must always be included */\n ESSENTIAL = 'essential',\n \n /** Display fields commonly shown in UI */\n DISPLAY = 'display',\n \n /** Metadata fields that provide additional context */\n METADATA = 'metadata',\n \n /** Relationship fields that link to other models */\n RELATIONSHIP = 'relationship',\n \n /** System fields used internally */\n SYSTEM = 'system',\n \n /** Unknown or unclassified fields */\n UNKNOWN = 'unknown'\n}\n\n/**\n * Field analysis result for optimization\n */\nexport interface FieldAnalysis {\n /** The field selector */\n selector: string;\n \n /** Classification of the field */\n classification: FieldClassification;\n \n /** Priority score for inclusion (higher = more important) */\n priority: number;\n \n /** Estimated cost of including this field */\n cost: number;\n \n /** Whether this field is likely to be displayed in UI */\n isDisplayRelevant: boolean;\n}","import { RelationshipConfiguration } from '../interfaces';\n\n/**\n * Types of errors that can occur during selection set generation\n */\nexport enum SelectionSetErrorType {\n /** Configuration is invalid or incomplete */\n INVALID_CONFIGURATION = 'invalid_configuration',\n \n /** Target model not found in schema */\n MODEL_NOT_FOUND = 'model_not_found',\n \n /** Field not found in target model */\n FIELD_NOT_FOUND = 'field_not_found',\n \n /** Schema introspection data unavailable */\n SCHEMA_UNAVAILABLE = 'schema_unavailable',\n \n /** Generated selection set exceeds complexity limits */\n COMPLEXITY_EXCEEDED = 'complexity_exceeded',\n \n /** Circular reference detected in relationship chain */\n CIRCULAR_REFERENCE = 'circular_reference',\n \n /** GraphQL query failed with generated selection set */\n GRAPHQL_ERROR = 'graphql_error'\n}\n\n/**\n * Error information for selection set generation failures\n */\nexport interface SelectionSetError {\n /** The type of error that occurred */\n type: SelectionSetErrorType;\n \n /** Human-readable error message */\n message: string;\n \n /** The relationship configuration that caused the error */\n configuration?: RelationshipConfiguration;\n \n /** The selection set that was being generated (if any) */\n selectionSet?: string[];\n \n /** Additional context information */\n context?: Record<string, any>;\n \n /** Timestamp when the error occurred */\n timestamp: Date;\n}\n\n/**\n * Result of a selection set generation attempt\n */\nexport interface SelectionSetResult {\n /** Whether the generation was successful */\n success: boolean;\n \n /** The generated selection set (if successful) */\n selectionSet?: string[];\n \n /** Error information (if failed) */\n error?: SelectionSetError;\n \n /** Whether a fallback was used */\n usedFallback: boolean;\n \n /** The pattern that was used for generation */\n patternUsed?: string;\n}","// Dynamic Relationship Loader Types\nexport * from './selection-set.types';\nexport * from './error.types';","import { Injectable } from '@angular/core';\nimport { RelationshipConfiguration } from '../interfaces/selection-set-generator.interface';\nimport { SelectionSetError, SelectionSetErrorType, SelectionSetResult } from '../types/error.types';\n\n/**\n * Centralized error handling and logging service for the dynamic relationship loader system\n * \n * This service provides comprehensive error handling, logging, and recovery mechanisms\n * for all relationship loading failures across the system.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ErrorHandlerService {\n \n /**\n * Maximum number of error logs to keep in memory\n */\n private readonly MAX_ERROR_LOGS = 100;\n \n /**\n * In-memory error log storage for debugging\n */\n private errorLogs: SelectionSetError[] = [];\n \n /**\n * Error statistics for monitoring\n */\n private errorStats = {\n totalErrors: 0,\n errorsByType: new Map<SelectionSetErrorType, number>(),\n lastError: null as SelectionSetError | null,\n recoveryAttempts: 0,\n successfulRecoveries: 0\n };\n\n /**\n * Log a selection set generation error with comprehensive context\n */\n logSelectionSetError(\n type: SelectionSetErrorType,\n message: string,\n config?: RelationshipConfiguration,\n selectionSet?: string[],\n additionalContext?: Record<string, any>\n ): SelectionSetError {\n const error: SelectionSetError = {\n type,\n message,\n configuration: config ? { ...config } : undefined,\n selectionSet: selectionSet ? [...selectionSet] : undefined,\n context: {\n ...additionalContext,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n timestamp: new Date().toISOString(),\n stackTrace: new Error().stack\n },\n timestamp: new Date()\n };\n\n // Add to error logs\n this.addErrorLog(error);\n \n // Update statistics\n this.updateErrorStats(error);\n \n // Log to console with structured format\n this.logToConsole(error);\n \n return error;\n }\n\n /**\n * Log a GraphQL query error with retry context\n */\n logGraphQLError(\n error: any,\n config: RelationshipConfiguration,\n selectionSet: string[],\n retryAttempt: number,\n previousErrors: string[] = []\n ): SelectionSetError {\n const errorMessage = error instanceof Error ? error.message : String(error);\n \n return this.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `GraphQL query failed: ${errorMessage}`,\n config,\n selectionSet,\n {\n originalError: {\n message: errorMessage,\n name: error instanceof Error ? error.name : 'Unknown',\n stack: error instanceof Error ? error.stack : undefined\n },\n retryAttempt,\n previousErrors,\n queryContext: {\n modelName: config.relationshipModelName,\n fieldName: config.fieldName,\n selectionSetLength: selectionSet.length\n }\n }\n );\n }\n\n /**\n * Log a configuration analysis error\n */\n logConfigurationError(\n config: RelationshipConfiguration | null,\n errors: string[],\n additionalContext?: Record<string, any>\n ): SelectionSetError {\n return this.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n `Configuration analysis failed: ${errors.join(', ')}`,\n config || undefined,\n undefined,\n {\n validationErrors: errors,\n ...additionalContext\n }\n );\n }\n\n /**\n * Log a schema introspection error\n */\n logSchemaError(\n modelName: string,\n fieldName?: string,\n additionalContext?: Record<string, any>\n ): SelectionSetError {\n const message = fieldName \n ? `Schema validation failed for field \"${fieldName}\" in model \"${modelName}\"`\n : `Schema data unavailable or invalid for model \"${modelName}\"`;\n\n return this.logSelectionSetError(\n fieldName ? SelectionSetErrorType.FIELD_NOT_FOUND : SelectionSetErrorType.SCHEMA_UNAVAILABLE,\n message,\n undefined,\n undefined,\n {\n modelName,\n fieldName,\n ...additionalContext\n }\n );\n }\n\n /**\n * Log a complexity validation error\n */\n logComplexityError(\n selectionSet: string[],\n validationErrors: string[],\n config?: RelationshipConfiguration\n ): SelectionSetError {\n return this.logSelectionSetError(\n SelectionSetErrorType.COMPLEXITY_EXCEEDED,\n `Selection set complexity exceeded limits: ${validationErrors.join(', ')}`,\n config,\n selectionSet,\n {\n complexityIssues: validationErrors,\n selectionSetSize: selectionSet.length,\n maxDepth: Math.max(...selectionSet.map(s => (s.match(/\\./g) || []).length))\n }\n );\n }\n\n /**\n * Log a circular reference error\n */\n logCircularReferenceError(\n circularPath: string,\n selectionSet: string[],\n config?: RelationshipConfiguration\n ): SelectionSetError {\n return this.logSelectionSetError(\n SelectionSetErrorType.CIRCULAR_REFERENCE,\n `Circular reference detected in path: ${circularPath}`,\n config,\n selectionSet,\n {\n circularPath,\n pathDepth: circularPath.split('.').length\n }\n );\n }\n\n /**\n * Log a successful error recovery\n */\n logSuccessfulRecovery(\n originalError: SelectionSetError,\n recoveryMethod: string,\n finalSelectionSet: string[]\n ): void {\n this.errorStats.recoveryAttempts++;\n this.errorStats.successfulRecoveries++;\n\n console.log('ErrorHandler: Successful error recovery:', {\n originalError: {\n type: originalError.type,\n message: originalError.message\n },\n recoveryMethod,\n finalSelectionSet,\n recoveryRate: this.getRecoveryRate(),\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Log a failed error recovery attempt\n */\n logFailedRecovery(\n originalError: SelectionSetError,\n recoveryAttempts: string[],\n finalError: any\n ): void {\n this.errorStats.recoveryAttempts++;\n\n const failureError = this.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `All recovery attempts failed: ${finalError instanceof Error ? finalError.message : String(finalError)}`,\n originalError.configuration,\n originalError.selectionSet,\n {\n originalError: {\n type: originalError.type,\n message: originalError.message\n },\n recoveryAttempts,\n finalError: {\n message: finalError instanceof Error ? finalError.message : String(finalError),\n type: typeof finalError\n },\n recoveryRate: this.getRecoveryRate()\n }\n );\n\n console.error('ErrorHandler: All recovery attempts failed:', failureError);\n }\n\n /**\n * Create a SelectionSetResult for a successful operation\n */\n createSuccessResult(\n selectionSet: string[],\n patternUsed?: string,\n usedFallback: boolean = false\n ): SelectionSetResult {\n return {\n success: true,\n selectionSet: [...selectionSet],\n usedFallback,\n patternUsed\n };\n }\n\n /**\n * Create a SelectionSetResult for a failed operation\n */\n createErrorResult(error: SelectionSetError): SelectionSetResult {\n return {\n success: false,\n error,\n usedFallback: false\n };\n }\n\n /**\n * Get error statistics for monitoring and debugging\n */\n getErrorStats(): {\n totalErrors: number;\n errorsByType: Record<string, number>;\n lastError: SelectionSetError | null;\n recoveryAttempts: number;\n successfulRecoveries: number;\n recoveryRate: number;\n recentErrors: SelectionSetError[];\n } {\n const errorsByType: Record<string, number> = {};\n this.errorStats.errorsByType.forEach((count, type) => {\n errorsByType[type] = count;\n });\n\n return {\n totalErrors: this.errorStats.totalErrors,\n errorsByType,\n lastError: this.errorStats.lastError,\n recoveryAttempts: this.errorStats.recoveryAttempts,\n successfulRecoveries: this.errorStats.successfulRecoveries,\n recoveryRate: this.getRecoveryRate(),\n recentErrors: this.getRecentErrors(10)\n };\n }\n\n /**\n * Get recent error logs for debugging\n */\n getRecentErrors(count: number = 10): SelectionSetError[] {\n return this.errorLogs\n .slice(-count)\n .sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());\n }\n\n /**\n * Clear all error logs and reset statistics\n */\n clearErrorLogs(): void {\n this.errorLogs = [];\n this.errorStats = {\n totalErrors: 0,\n errorsByType: new Map<SelectionSetErrorType, number>(),\n lastError: null,\n recoveryAttempts: 0,\n successfulRecoveries: 0\n };\n \n console.log('ErrorHandler: Error logs and statistics cleared');\n }\n\n /**\n * Check if the system is experiencing high error rates\n */\n isHighErrorRate(timeWindowMinutes: number = 5, threshold: number = 10): boolean {\n const cutoffTime = new Date(Date.now() - timeWindowMinutes * 60 * 1000);\n const recentErrors = this.errorLogs.filter(error => error.timestamp > cutoffTime);\n \n return recentErrors.length >= threshold;\n }\n\n /**\n * Get error patterns for analysis\n */\n getErrorPatterns(): {\n mostCommonErrorType: SelectionSetErrorType | null;\n mostProblematicModel: string | null;\n mostProblematicField: string | null;\n errorTrends: Array<{\n hour: string;\n errorCount: number;\n }>;\n } {\n if (this.errorLogs.length === 0) {\n return {\n mostCommonErrorType: null,\n mostProblematicModel: null,\n mostProblematicField: null,\n errorTrends: []\n };\n }\n\n // Find most common error type\n let mostCommonErrorType: SelectionSetErrorType | null = null;\n let maxErrorCount = 0;\n this.errorStats.errorsByType.forEach((count, type) => {\n if (count > maxErrorCount) {\n maxErrorCount = count;\n mostCommonErrorType = type;\n }\n });\n\n // Find most problematic model\n const modelCounts = new Map<string, number>();\n this.errorLogs.forEach(error => {\n if (error.configuration?.relationshipModelName) {\n const count = modelCounts.get(error.configuration.relationshipModelName) || 0;\n modelCounts.set(error.configuration.relationshipModelName, count + 1);\n }\n });\n\n let mostProblematicModel: string | null = null;\n let maxModelCount = 0;\n modelCounts.forEach((count, model) => {\n if (count > maxModelCount) {\n maxModelCount = count;\n mostProblematicModel = model;\n }\n });\n\n // Find most problematic field\n const fieldCounts = new Map<string, number>();\n this.errorLogs.forEach(error => {\n if (error.configuration?.fieldName) {\n const count = fieldCounts.get(error.configuration.fieldName) || 0;\n fieldCounts.set(error.configuration.fieldName, count + 1);\n }\n });\n\n let mostProblematicField: string | null = null;\n let maxFieldCount = 0;\n fieldCounts.forEach((count, field) => {\n if (count > maxFieldCount) {\n maxFieldCount = count;\n mostProblematicField = field;\n }\n });\n\n // Generate error trends by hour\n const hourCounts = new Map<string, number>();\n this.errorLogs.forEach(error => {\n const hour = error.timestamp.toISOString().substring(0, 13); // YYYY-MM-DDTHH\n const count = hourCounts.get(hour) || 0;\n hourCounts.set(hour, count + 1);\n });\n\n const errorTrends = Array.from(hourCounts.entries())\n .map(([hour, errorCount]) => ({ hour, errorCount }))\n .sort((a, b) => a.hour.localeCompare(b.hour));\n\n return {\n mostCommonErrorType,\n mostProblematicModel,\n mostProblematicField,\n errorTrends\n };\n }\n\n /**\n * Add error to the log with size management\n */\n private addErrorLog(error: SelectionSetError): void {\n this.errorLogs.push(error);\n \n // Maintain maximum log size\n if (this.errorLogs.length > this.MAX_ERROR_LOGS) {\n this.errorLogs = this.errorLogs.slice(-this.MAX_ERROR_LOGS);\n }\n }\n\n /**\n * Update error statistics\n */\n private updateErrorStats(error: SelectionSetError): void {\n this.errorStats.totalErrors++;\n this.errorStats.lastError = error;\n \n const currentCount = this.errorStats.errorsByType.get(error.type) || 0;\n this.errorStats.errorsByType.set(error.type, currentCount + 1);\n }\n\n /**\n * Calculate recovery rate percentage\n */\n private getRecoveryRate(): number {\n if (this.errorStats.recoveryAttempts === 0) {\n return 0;\n }\n \n return Math.round((this.errorStats.successfulRecoveries / this.errorStats.recoveryAttempts) * 100);\n }\n\n /**\n * Log error to console with structured format\n */\n private logToConsole(error: SelectionSetError): void {\n const logData = {\n type: error.type,\n message: error.message,\n timestamp: error.timestamp.toISOString(),\n configuration: error.configuration ? {\n relationshipModel: error.configuration.relationshipModelName,\n baseModel: error.configuration.baseModelName,\n fieldName: error.configuration.fieldName,\n associatedWith: error.configuration.associatedWith\n } : undefined,\n selectionSet: error.selectionSet,\n context: error.context\n };\n\n // Use appropriate console method based on error severity\n switch (error.type) {\n case SelectionSetErrorType.INVALID_CONFIGURATION:\n case SelectionSetErrorType.GRAPHQL_ERROR:\n console.error('ErrorHandler: Critical error:', logData);\n break;\n case SelectionSetErrorType.SCHEMA_UNAVAILABLE:\n case SelectionSetErrorType.MODEL_NOT_FOUND:\n case SelectionSetErrorType.FIELD_NOT_FOUND:\n console.warn('ErrorHandler: Schema-related warning:', logData);\n break;\n case SelectionSetErrorType.COMPLEXITY_EXCEEDED:\n case SelectionSetErrorType.CIRCULAR_REFERENCE:\n console.warn('ErrorHandler: Complexity warning:', logData);\n break;\n default:\n console.log('ErrorHandler: General error:', logData);\n break;\n }\n }\n}","import { Injectable } from '@angular/core';\nimport { ConfigurationAnalyzer, RelationshipConfiguration, AnalysisResult } from '../interfaces';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { SelectionSetErrorType } from '../types/error.types';\n\n/**\n * Service for analyzing relationship configurations to extract field mappings\n * \n * This service analyzes relationship configurations to determine target models\n * and generate appropriate field selectors for GraphQL queries.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigurationAnalyzerService implements ConfigurationAnalyzer {\n \n /**\n * Common display field names to look for in models\n */\n private readonly COMMON_DISPLAY_FIELDS = ['name', 'title', 'label', 'displayName', 'description'];\n \n constructor(private errorHandler: ErrorHandlerService) {}\n \n /**\n * Analyze a relationship configuration to extract field mappings and validate structure\n * Enhanced with comprehensive error handling and logging\n */\n analyzeConfiguration(config: RelationshipConfiguration): AnalysisResult {\n const errors: string[] = [];\n \n try {\n // Validate configuration completeness\n if (!config) {\n const error = 'Configuration is null or undefined';\n errors.push(error);\n this.errorHandler.logConfigurationError(null, [error], {\n method: 'analyzeConfiguration',\n step: 'initial_validation'\n });\n return {\n targetModelName: '',\n fieldSelectors: [],\n isValid: false,\n errors\n };\n }\n \n // Validate required fields\n const requiredFields = [\n { field: 'relationshipModelName', value: config.relationshipModelName },\n { field: 'baseModelName', value: config.baseModelName },\n { field: 'fieldName', value: config.fieldName },\n { field: 'associatedWith', value: config.associatedWith }\n ];\n \n for (const { field, value } of requiredFields) {\n if (!value) {\n errors.push(`${field} is required`);\n }\n }\n \n if (errors.length > 0) {\n this.errorHandler.logConfigurationError(config, errors, {\n method: 'analyzeConfiguration',\n step: 'field_validation',\n providedFields: {\n relationshipModelName: !!config.relationshipModelName,\n baseModelName: !!config.baseModelName,\n fieldName: !!config.fieldName,\n associatedWith: !!config.associatedWith\n }\n });\n \n return {\n targetModelName: '',\n fieldSelectors: [],\n isValid: false,\n errors\n };\n }\n \n // Extract target model name from the configuration\n const targetModelName = this.extractTargetModelName(config);\n \n if (!targetModelName) {\n const error = 'Could not determine target model name from configuration';\n errors.push(error);\n this.errorHandler.logConfigurationError(config, [error], {\n method: 'analyzeConfiguration',\n step: 'target_model_extraction',\n fieldName: config.fieldName\n });\n \n return {\n targetModelName: '',\n fieldSelectors: [],\n isValid: false,\n errors\n };\n }\n \n // Generate field selectors for the target model\n const fieldSelectors = this.determineFieldSelectorsEnhanced(targetModelName, config.fieldName);\n \n if (!fieldSelectors || fieldSelectors.length === 0) {\n const error = 'Could not generate field selectors for target model';\n errors.push(error);\n this.errorHandler.logConfigurationError(config, [error], {\n method: 'analyzeConfiguration',\n step: 'field_selector_generation',\n targetModelName,\n fieldName: config.fieldName\n });\n \n return {\n targetModelName,\n fieldSelectors: [],\n isValid: false,\n errors\n };\n }\n \n console.log('ConfigurationAnalyzer: Successfully analyzed configuration:', {\n targetModelName,\n fieldSelectorsCount: fieldSelectors.length,\n fieldName: config.fieldName\n });\n \n return {\n targetModelName,\n fieldSelectors,\n isValid: true,\n errors: []\n };\n \n } catch (error) {\n const errorMessage = `Analysis failed: ${error instanceof Error ? error.message : String(error)}`;\n errors.push(errorMessage);\n \n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n errorMessage,\n config,\n undefined,\n {\n method: 'analyzeConfiguration',\n step: 'exception_handling',\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n type: typeof error\n }\n }\n );\n \n return {\n targetModelName: '',\n fieldSelectors: [],\n isValid: false,\n errors\n };\n }\n }\n\n /**\n * Extract the target model name from a relationship configuration\n * Enhanced with error handling and validation\n * \n * For a FormViewField relationship, this would extract the target model\n * that we want to display (e.g., \"Field\" from the FormViewField junction)\n */\n extractTargetModelName(config: RelationshipConfiguration): string {\n try {\n if (!config || !config.fieldName) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Cannot extract target model name: configuration or fieldName is missing',\n config,\n undefined,\n {\n method: 'extractTargetModelName',\n hasConfig: !!config,\n hasFieldName: !!(config?.fieldName)\n }\n );\n return '';\n }\n \n // The fieldName typically corresponds to the target model we want to access\n // For example, if fieldName is \"formView\", the target model is \"FormView\"\n // If fieldName is \"service\", the target model is \"Service\"\n \n // Convert fieldName to PascalCase to match Amplify model naming conventions\n const targetModelName = this.toPascalCase(config.fieldName);\n \n if (!targetModelName) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Failed to convert fieldName to PascalCase for target model name',\n config,\n undefined,\n {\n method: 'extractTargetModelName',\n fieldName: config.fieldName,\n conversionResult: targetModelName\n }\n );\n return '';\n }\n \n console.log(`ConfigurationAnalyzer: Extracted target model name \"${targetModelName}\" from field \"${config.fieldName}\"`);\n return targetModelName;\n \n } catch (error) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n `Error extracting target model name: ${error instanceof Error ? error.message : String(error)}`,\n config,\n undefined,\n {\n method: 'extractTargetModelName',\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n return '';\n }\n }\n\n /**\n * Determine appropriate field selectors for a target model\n * \n * This generates GraphQL field selectors that include the relationship field\n * and common display properties like id, name, title, etc.\n */\n determineFieldSelectors(targetModel: string): string[] {\n if (!targetModel) {\n return [];\n }\n \n const selectors: string[] = [];\n \n // Always include the base record ID\n selectors.push('id');\n \n // Convert target model to camelCase for field access\n const fieldName = this.toCamelCase(targetModel);\n \n // Add the relationship field itself (this is important for validation)\n selectors.push(fieldName);\n \n // Add the relationship field with its ID\n selectors.push(`${fieldName}.id`);\n \n // Add common display fields for the relationship\n for (const displayField of this.COMMON_DISPLAY_FIELDS) {\n selectors.push(`${fieldName}.${displayField}`);\n }\n \n return selectors;\n }\n \n /**\n * Parse and validate nested relationship paths\n * \n * Handles complex relationship configurations like \"formView.user.profile\"\n * and validates for circular references\n */\n parseNestedRelationshipPath(fieldName: string, maxDepth: number = 3): string[] {\n if (!fieldName) {\n return [];\n }\n \n // Split the field name by dots to handle nested paths\n const pathSegments = fieldName.split('.');\n \n // Limit nesting depth to prevent overly complex queries\n if (pathSegments.length > maxDepth) {\n console.warn(`ConfigurationAnalyzer: Nested relationship path \"${fieldName}\" exceeds maximum depth of ${maxDepth}. Truncating.`);\n pathSegments.splice(maxDepth);\n }\n \n // Check for circular references (same segment appearing multiple times)\n const uniqueSegments = new Set(pathSegments);\n if (uniqueSegments.size !== pathSegments.length) {\n console.warn(`ConfigurationAnalyzer: Circular reference detected in path \"${fieldName}\". Using only unique segments.`);\n return Array.from(uniqueSegments);\n }\n \n return pathSegments;\n }\n \n /**\n * Generate field selectors for nested relationship paths\n * \n * Creates GraphQL selectors that can handle nested relationships\n * like \"formView.user.profile.name\"\n */\n generateNestedFieldSelectors(fieldName: string, targetModel: string): string[] {\n const pathSegments = this.parseNestedRelationshipPath(fieldName);\n const selectors: string[] = [];\n \n // Always include the base record ID\n selectors.push('id');\n \n if (pathSegments.length === 0) {\n return selectors;\n }\n \n // For single-level relationships, use the existing logic\n if (pathSegments.length === 1) {\n const camelCaseField = this.toCamelCase(pathSegments[0]);\n selectors.push(`${camelCaseField}.id`);\n \n // Add common display fields\n for (const displayField of this.COMMON_DISPLAY_FIELDS) {\n selectors.push(`${camelCaseField}.${displayField}`);\n }\n \n return selectors;\n }\n \n // For nested relationships, build the path progressively\n let currentPath = '';\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = this.toCamelCase(pathSegments[i]);\n \n if (i === 0) {\n currentPath = segment;\n } else {\n currentPath += `.${segment}`;\n }\n \n // Add ID for each level\n selectors.push(`${currentPath}.id`);\n \n // Add display fields only for the final level to avoid overly complex queries\n if (i === pathSegments.length - 1) {\n for (const displayField of this.COMMON_DISPLAY_FIELDS) {\n selectors.push(`${currentPath}.${displayField}`);\n }\n }\n }\n \n return selectors;\n }\n \n /**\n * Enhanced field selector determination that supports nested paths and handles different relationship types\n */\n determineFieldSelectorsEnhanced(targetModel: string, fieldName?: string): string[] {\n if (!targetModel) {\n return [];\n }\n \n // If no specific field name provided, use the target model name\n const effectiveFieldName = fieldName || this.toCamelCase(targetModel);\n \n // Check if this is a nested relationship path\n if (effectiveFieldName.includes('.')) {\n return this.generateNestedFieldSelectors(effectiveFieldName, targetModel);\n }\n \n // Generate selectors for the relationship\n const selectors: string[] = [];\n \n // Always include the base record ID\n selectors.push('id');\n \n // For the relationship field, we need to be more flexible about how we include it\n // Some relationships might need the field itself, others might need nested access\n \n // Strategy 1: Include the relationship field directly\n selectors.push(effectiveFieldName);\n \n // Strategy 2: Include nested access to common fields\n selectors.push(`${effectiveFieldName}.id`);\n \n // Add common display fields for the relationship\n for (const displayField of this.COMMON_DISPLAY_FIELDS) {\n selectors.push(`${effectiveFieldName}.${displayField}`);\n }\n \n // Strategy 3: For some relationship types, we might need to include additional metadata\n // Add some common relationship metadata fields\n const metadataFields = ['createdAt', 'updatedAt'];\n for (const metadataField of metadataFields) {\n selectors.push(`${effectiveFieldName}.${metadataField}`);\n }\n \n console.log(`ConfigurationAnalyzer: Generated ${selectors.length} field selectors for ${targetModel} with field ${effectiveFieldName}:`, selectors);\n \n return selectors;\n }\n \n /**\n * Convert a string to PascalCase (first letter uppercase, rest camelCase)\n */\n private toPascalCase(str: string): string {\n if (!str) return '';\n \n // Handle camelCase to PascalCase\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n \n /**\n * Convert a string to camelCase (first letter lowercase)\n */\n private toCamelCase(str: string): string {\n if (!str) return '';\n \n // Handle PascalCase to camelCase\n return str.charAt(0).toLowerCase() + str.slice(1);\n }\n}","import { Injectable } from '@angular/core';\nimport { SchemaIntrospector, ModelField } from '../interfaces';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { SelectionSetErrorType } from '../types/error.types';\n\n/**\n * Service for introspecting Amplify schema data to validate and enhance selection sets\n * \n * This service leverages Amplify's schema introspection data to validate field existence,\n * extract model information, and provide schema-aware field selection for GraphQL queries.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SchemaIntrospectorService implements SchemaIntrospector {\n \n private amplifyOutputs: any = null;\n \n /**\n * Common display field names that are typically used for showing model data\n */\n private readonly COMMON_DISPLAY_FIELDS = ['name', 'title', 'label', 'displayName', 'description'];\n \n /**\n * System fields that are typically not used for display\n */\n private readonly SYSTEM_FIELDS = ['id', 'createdAt', 'updatedAt', 'owner'];\n \n constructor(private errorHandler: ErrorHandlerService) {}\n \n /**\n * Initialize the service with Amplify outputs data\n * Enhanced with error handling and validation\n * This should be called by consuming applications to provide schema data\n */\n initializeSchema(amplifyOutputs: any): void {\n try {\n if (!amplifyOutputs) {\n this.errorHandler.logSchemaError('', undefined, {\n method: 'initializeSchema',\n error: 'amplifyOutputs is null or undefined'\n });\n console.warn('SchemaIntrospectorService: Cannot initialize with null or undefined amplifyOutputs');\n return;\n }\n \n // Validate schema structure\n if (!amplifyOutputs.data || !amplifyOutputs.data.model_introspection || !amplifyOutputs.data.model_introspection.models) {\n this.errorHandler.logSchemaError('', undefined, {\n method: 'initializeSchema',\n error: 'Invalid schema structure',\n hasData: !!amplifyOutputs.data,\n hasModelIntrospection: !!(amplifyOutputs.data?.model_introspection),\n hasModels: !!(amplifyOutputs.data?.model_introspection?.models)\n });\n console.warn('SchemaIntrospectorService: Invalid schema structure in amplifyOutputs');\n return;\n }\n \n this.amplifyOutputs = amplifyOutputs;\n const modelCount = Object.keys(amplifyOutputs.data.model_introspection.models).length;\n \n console.log(`SchemaIntrospectorService: Successfully initialized with schema data (${modelCount} models)`);\n \n } catch (error) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.SCHEMA_UNAVAILABLE,\n `Error initializing schema: ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n undefined,\n {\n method: 'initializeSchema',\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error('SchemaIntrospectorService: Error initializing schema:', error);\n }\n }\n \n /**\n * Get field information for a specific model from the schema\n * Enhanced with comprehensive error handling and logging\n */\n getModelFields(modelName: string): ModelField[] {\n try {\n if (!this.isSchemaAvailable()) {\n this.errorHandler.logSchemaError(modelName, undefined, {\n method: 'getModelFields',\n error: 'Schema data not available'\n });\n console.warn('SchemaIntrospectorService: Schema data not available');\n return [];\n }\n \n if (!modelName) {\n this.errorHandler.logSchemaError('', undefined, {\n method: 'getModelFields',\n error: 'Model name is empty or undefined'\n });\n return [];\n }\n \n const models = this.amplifyOutputs.data.model_introspection.models;\n const modelData = models[modelName];\n \n if (!modelData) {\n this.errorHandler.logSchemaError(modelName, undefined, {\n method: 'getModelFields',\n error: 'Model not found in schema',\n availableModels: Object.keys(models)\n });\n console.warn(`SchemaIntrospectorService: Model \"${modelName}\" not found in schema`);\n return [];\n }\n \n if (!modelData.fields) {\n this.errorHandler.logSchemaError(modelName, undefined, {\n method: 'getModelFields',\n error: 'Model has no fields property',\n modelData: Object.keys(modelData)\n });\n console.warn(`SchemaIntrospectorService: Model \"${modelName}\" has no fields`);\n return [];\n }\n \n const fields: ModelField[] = [];\n const fieldValues = Object.values(modelData.fields);\n \n for (const field of fieldValues) {\n try {\n const fieldData = field as any;\n \n if (!fieldData.name) {\n console.warn(`SchemaIntrospectorService: Field in model \"${modelName}\" has no name property`);\n continue;\n }\n \n fields.push({\n name: fieldData.name,\n type: this.determineFieldType(fieldData.type),\n isRequired: fieldData.isRequired || false,\n isRelationship: this.isRelationshipField(fieldData)\n });\n } catch (fieldError) {\n console.warn(`SchemaIntrospectorService: Error processing field in model \"${modelName}\":`, fieldError);\n // Continue processing other fields\n }\n }\n \n console.log(`SchemaIntrospectorService: Retrieved ${fields.length} fields for model \"${modelName}\"`);\n return fields;\n \n } catch (error) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.MODEL_NOT_FOUND,\n `Error getting fields for model \"${modelName}\": ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n undefined,\n {\n method: 'getModelFields',\n modelName,\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error(`SchemaIntrospectorService: Error getting fields for model \"${modelName}\":`, error);\n return [];\n }\n }\n\n /**\n * Validate that a specific field exists in a model\n */\n validateFieldExists(modelName: string, fieldName: string): boolean {\n if (!this.isSchemaAvailable() || !modelName || !fieldName) {\n return false;\n }\n \n try {\n const models = this.amplifyOutputs.data.model_introspection.models;\n const modelData = models[modelName];\n \n if (!modelData || !modelData.fields) {\n return false;\n }\n \n return fieldName in modelData.fields;\n \n } catch (error) {\n console.error(`SchemaIntrospectorService: Error validating field \"${fieldName}\" in model \"${modelName}\":`, error);\n return false;\n }\n }\n\n /**\n * Get common display fields for a model (e.g., name, title, label)\n */\n getCommonDisplayFields(modelName: string): string[] {\n if (!this.isSchemaAvailable()) {\n // Fallback: return conservative display fields when schema is unavailable\n return this.getConservativeDisplayFields(modelName);\n }\n \n const modelFields = this.getModelFields(modelName);\n const displayFields: string[] = [];\n \n // Always include id for relationships\n if (this.validateFieldExists(modelName, 'id')) {\n displayFields.push('id');\n }\n \n // Look for common display fields in the model\n for (const commonField of this.COMMON_DISPLAY_FIELDS) {\n const field = modelFields.find(f => f.name === commonField);\n if (field && !field.isRelationship) {\n displayFields.push(commonField);\n }\n }\n \n // If no common display fields found, include the first non-system, non-relationship field\n if (displayFields.length <= 1) { // Only id was added\n const firstDisplayField = modelFields.find(f => \n !this.SYSTEM_FIELDS.includes(f.name) && \n !f.isRelationship &&\n f.type === 'string'\n );\n \n if (firstDisplayField && !displayFields.includes(firstDisplayField.name)) {\n displayFields.push(firstDisplayField.name);\n }\n }\n \n return displayFields;\n }\n\n /**\n * Check if schema introspection data is available\n */\n isSchemaAvailable(): boolean {\n return !!(\n this.amplifyOutputs &&\n this.amplifyOutputs.data &&\n this.amplifyOutputs.data.model_introspection &&\n this.amplifyOutputs.data.model_introspection.models\n );\n }\n \n /**\n * Get conservative display fields when schema data is unavailable\n * This provides a safe fallback that works with most Amplify models\n */\n getConservativeDisplayFields(modelName: string): string[] {\n console.warn(`SchemaIntrospectorService: Schema unavailable, using conservative display fields for model \"${modelName}\"`);\n \n // Return a conservative set of fields that are commonly available\n const conservativeFields = ['id'];\n \n // Add all common display field names - the GraphQL query will simply ignore non-existent fields\n conservativeFields.push(...this.COMMON_DISPLAY_FIELDS);\n \n return conservativeFields;\n }\n \n /**\n * Get model fields with fallback behavior when schema is unavailable\n */\n getModelFieldsWithFallback(modelName: string): ModelField[] {\n if (this.isSchemaAvailable()) {\n return this.getModelFields(modelName);\n }\n \n // Fallback: return conservative field set\n console.warn(`SchemaIntrospectorService: Schema unavailable, using conservative field set for model \"${modelName}\"`);\n \n const conservativeFields: ModelField[] = [\n { name: 'id', type: 'id', isRequired: true, isRelationship: false }\n ];\n \n // Add common display fields as optional string fields\n for (const fieldName of this.COMMON_DISPLAY_FIELDS) {\n conservativeFields.push({\n name: fieldName,\n type: 'string',\n isRequired: false,\n isRelationship: false\n });\n }\n \n return conservativeFields;\n }\n \n /**\n * Validate field existence with fallback behavior\n * When schema is unavailable, assumes common fields exist\n */\n validateFieldExistsWithFallback(modelName: string, fieldName: string): boolean {\n if (this.isSchemaAvailable()) {\n return this.validateFieldExists(modelName, fieldName);\n }\n \n // Fallback: assume common fields exist\n const commonFields = ['id', ...this.COMMON_DISPLAY_FIELDS];\n const fieldExists = commonFields.includes(fieldName);\n \n if (!fieldExists) {\n console.warn(`SchemaIntrospectorService: Schema unavailable, cannot validate field \"${fieldName}\" in model \"${modelName}\". Assuming it does not exist.`);\n }\n \n return fieldExists;\n }\n \n /**\n * Get safe field selectors that work even when schema data is unavailable\n * This method prioritizes reliability over completeness\n */\n getSafeFieldSelectors(modelName: string, fieldName: string): string[] {\n const selectors: string[] = ['id']; // Always safe to include\n \n if (!fieldName) {\n return selectors;\n }\n \n // Add the relationship field with id (safe even if field doesn't exist)\n selectors.push(`${fieldName}.id`);\n \n if (this.isSchemaAvailable()) {\n // Use schema-aware field selection\n const displayFields = this.getCommonDisplayFields(modelName);\n for (const displayField of displayFields) {\n if (displayField !== 'id') { // Already added\n selectors.push(`${fieldName}.${displayField}`);\n }\n }\n } else {\n // Use conservative field selection\n const conservativeFields = this.getConservativeDisplayFields(modelName);\n for (const conservativeField of conservativeFields) {\n if (conservativeField !== 'id') { // Already added\n selectors.push(`${fieldName}.${conservativeField}`);\n }\n }\n }\n \n return selectors;\n }\n \n /**\n * Get schema status information for debugging\n */\n getSchemaStatus(): {\n isAvailable: boolean;\n modelCount: number;\n availableModels: string[];\n lastError?: string;\n } {\n const status = {\n isAvailable: this.isSchemaAvailable(),\n modelCount: 0,\n availableModels: [] as string[],\n lastError: undefined as string | undefined\n };\n \n if (status.isAvailable) {\n try {\n status.availableModels = this.getAvailableModels();\n status.modelCount = status.availableModels.length;\n } catch (error) {\n status.lastError = error instanceof Error ? error.message : String(error);\n }\n } else {\n status.lastError = 'Schema data not available or invalid structure';\n }\n \n return status;\n }\n \n /**\n * Get all available model names from the schema\n */\n getAvailableModels(): string[] {\n if (!this.isSchemaAvailable()) {\n return [];\n }\n \n try {\n return Object.keys(this.amplifyOutputs.data.model_introspection.models);\n } catch (error) {\n console.error('SchemaIntrospectorService: Error getting available models:', error);\n return [];\n }\n }\n \n /**\n * Get detailed information about a specific model\n */\n getModelInfo(modelName: string): any {\n if (!this.isSchemaAvailable() || !modelName) {\n return null;\n }\n \n try {\n const models = this.amplifyOutputs.data.model_introspection.models;\n return models[modelName] || null;\n } catch (error) {\n console.error(`SchemaIntrospectorService: Error getting model info for \"${modelName}\":`, error);\n return null;\n }\n }\n \n /**\n * Determine the simplified type of a field from Amplify schema data\n */\n private determineFieldType(fieldType: any): string {\n if (typeof fieldType === 'string') {\n return fieldType.toLowerCase();\n }\n \n if (typeof fieldType === 'object') {\n if (fieldType.model) {\n return 'relationship';\n }\n if (fieldType.enum) {\n return 'enum';\n }\n }\n \n return 'unknown';\n }\n \n /**\n * Check if a field represents a relationship to another model\n */\n private isRelationshipField(fieldData: any): boolean {\n return !!(\n fieldData.type &&\n typeof fieldData.type === 'object' &&\n fieldData.type.model\n );\n }\n \n /**\n * Get relationship information for a field\n */\n getRelationshipInfo(modelName: string, fieldName: string): any {\n if (!this.validateFieldExists(modelName, fieldName)) {\n return null;\n }\n \n try {\n const models = this.amplifyOutputs.data.model_introspection.models;\n const modelData = models[modelName];\n const fieldData = modelData.fields[fieldName];\n \n if (!this.isRelationshipField(fieldData)) {\n return null;\n }\n \n return {\n targetModel: fieldData.type.model,\n connectionType: fieldData.association?.connectionType,\n associatedWith: fieldData.association?.associatedWith,\n targetNames: fieldData.association?.targetNames\n };\n \n } catch (error) {\n console.error(`SchemaIntrospectorService: Error getting relationship info for \"${modelName}.${fieldName}\":`, error);\n return null;\n }\n }\n}","import { Injectable } from '@angular/core';\nimport { SelectionSetGenerator, RelationshipConfiguration } from '../interfaces';\nimport { ConfigurationAnalyzerService } from './configuration-analyzer.service';\nimport { SchemaIntrospectorService } from './schema-introspector.service';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { \n SelectionSetPattern, \n SelectionSetConfig, \n CacheKey, \n CachedSelectionSet,\n ComplexityLimits,\n ComplexityValidationResult,\n DisplayOptimizationConfig,\n FieldClassification,\n FieldAnalysis\n} from '../types';\nimport { SelectionSetErrorType, SelectionSetResult } from '../types/error.types';\n\n/**\n * Service for generating dynamic GraphQL selection sets for Amplify relationships\n * \n * This service replaces hardcoded selection set logic with dynamic generation\n * based on relationship configurations, schema introspection, and intelligent caching.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SelectionSetGeneratorService implements SelectionSetGenerator {\n \n /**\n * Cache for generated selection sets to improve performance\n */\n private selectionSetCache = new Map<string, CachedSelectionSet>();\n \n /**\n * Default configuration for selection set generation\n */\n private readonly DEFAULT_CONFIG: SelectionSetConfig = {\n pattern: SelectionSetPattern.SELECTIVE,\n maxDepth: 3,\n maxFields: 10,\n validateWithSchema: true,\n requiredFields: ['id'],\n complexityLimits: {\n maxNestingDepth: 3,\n maxFieldCount: 20,\n maxWildcardSelections: 2,\n preventCircularReferences: true,\n maxSelectorLength: 100\n }\n };\n \n /**\n * Default display optimization configuration\n */\n private readonly DEFAULT_DISPLAY_CONFIG: DisplayOptimizationConfig = {\n enabled: true,\n commonDisplayFields: ['id', 'name', 'title', 'label', 'displayName', 'description'],\n excludeFromOptimization: ['id', 'createdAt', 'updatedAt'],\n prioritizeDisplayFields: true,\n maxNonDisplayFields: 5\n };\n \n constructor(\n private configurationAnalyzer: ConfigurationAnalyzerService,\n private schemaIntrospector: SchemaIntrospectorService,\n private errorHandler: ErrorHandlerService\n ) {}\n \n /**\n * Generate a selection set for a given relationship configuration\n * Enhanced with comprehensive error handling and logging\n */\n generateSelectionSet(config: RelationshipConfiguration): string[] {\n try {\n // Validate input configuration\n if (!config) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Configuration is null or undefined',\n config\n );\n return this.handleGenerationError(error, '');\n }\n\n // Check cache first\n const cacheKey = this.generateCacheKey(config);\n const cached = this.getCachedSelectionSet(cacheKey);\n if (cached) {\n console.log('SelectionSetGenerator: Using cached selection set for config:', config.fieldName);\n return cached.selectionSet;\n }\n \n // Analyze the configuration\n const analysisResult = this.configurationAnalyzer.analyzeConfiguration(config);\n if (!analysisResult || !analysisResult.isValid) {\n const errors = analysisResult?.errors || ['Invalid configuration'];\n const error = this.errorHandler.logConfigurationError(config, errors, {\n analysisResult,\n cacheKey\n });\n return this.handleGenerationError(error, config.fieldName);\n }\n \n // Generate selection set based on analysis and schema availability\n const selectionSet = this.generateSelectionSetFromAnalysis(config, analysisResult);\n \n // Validate the generated selection set\n if (!this.validateSelectionSet(selectionSet)) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Generated selection set failed validation',\n config,\n selectionSet,\n { analysisResult }\n );\n return this.handleGenerationError(error, config.fieldName);\n }\n \n // Cache the result\n this.cacheSelectionSet(cacheKey, selectionSet);\n \n console.log('SelectionSetGenerator: Successfully generated selection set:', {\n config: config.fieldName,\n selectionSetLength: selectionSet.length,\n selectionSet\n });\n \n return selectionSet;\n \n } catch (error) {\n const selectionSetError = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Unexpected error during selection set generation: ${error instanceof Error ? error.message : String(error)}`,\n config,\n undefined,\n {\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n type: typeof error\n }\n }\n );\n return this.handleGenerationError(selectionSetError, config?.fieldName || '');\n }\n }\n\n /**\n * Generate a fallback selection set when primary generation fails\n * Uses progressive fallback strategies: comprehensive → selective → minimal\n * Enhanced with comprehensive error handling and logging\n */\n generateFallbackSelectionSet(fieldName: string): string[] {\n try {\n if (!fieldName) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Field name is empty or undefined for fallback generation',\n undefined,\n undefined,\n { fieldName }\n );\n return this.generateMinimalFallbackSelectionSet();\n }\n \n console.warn(`SelectionSetGenerator: Using fallback selection set for field \"${fieldName}\"`);\n \n // Try progressive fallback strategies\n try {\n // Strategy 1: Comprehensive fallback (if schema is available)\n if (this.schemaIntrospector.isSchemaAvailable()) {\n const result = this.generateComprehensiveFallbackSelectionSet(fieldName);\n console.log(`SelectionSetGenerator: Comprehensive fallback successful for field \"${fieldName}\"`);\n return result;\n }\n \n // Strategy 2: Selective fallback (configuration-based)\n const result = this.generateSelectiveFallbackSelectionSet(fieldName);\n console.log(`SelectionSetGenerator: Selective fallback successful for field \"${fieldName}\"`);\n return result;\n \n } catch (error) {\n const selectionSetError = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Error in fallback generation, using minimal fallback: ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n undefined,\n {\n fieldName,\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n },\n schemaAvailable: this.schemaIntrospector.isSchemaAvailable()\n }\n );\n \n // Strategy 3: Minimal fallback (last resort)\n return this.generateMinimalFallbackSelectionSet(fieldName);\n }\n } catch (error) {\n // Absolute last resort - return basic selection set\n const selectionSetError = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Critical error in fallback generation: ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n undefined,\n {\n fieldName,\n criticalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error('SelectionSetGenerator: Critical error in fallback generation, returning absolute minimal fallback');\n return ['id'];\n }\n }\n\n /**\n * Generate comprehensive fallback selection set using schema data\n * This is the first fallback strategy when schema is available\n */\n private generateComprehensiveFallbackSelectionSet(fieldName: string): string[] {\n console.log(`SelectionSetGenerator: Using comprehensive fallback strategy for field \"${fieldName}\"`);\n \n const selectionSet: string[] = ['id'];\n \n try {\n // Use schema introspector to get safe field selectors\n const safeSelectors = this.schemaIntrospector.getSafeFieldSelectors('', fieldName);\n \n // Add all safe selectors\n for (const selector of safeSelectors) {\n if (!selectionSet.includes(selector)) {\n selectionSet.push(selector);\n }\n }\n \n // Apply display optimization for fallback\n const mockConfig: RelationshipConfiguration = {\n relationshipModelName: '',\n baseModelName: '',\n fieldName,\n associatedWith: ''\n };\n const optimizedSet = this.applyDisplayOptimization(selectionSet, mockConfig);\n \n // Apply complexity limits to prevent overly expensive queries\n return this.applyComplexityLimits(optimizedSet);\n \n } catch (error) {\n console.warn('SelectionSetGenerator: Comprehensive fallback failed, falling back to selective:', error);\n return this.generateSelectiveFallbackSelectionSet(fieldName);\n }\n }\n\n /**\n * Generate selective fallback selection set using common field patterns\n * This is the second fallback strategy when schema is unavailable\n */\n private generateSelectiveFallbackSelectionSet(fieldName: string): string[] {\n console.log(`SelectionSetGenerator: Using selective fallback strategy for field \"${fieldName}\"`);\n \n const selectionSet: string[] = ['id'];\n \n // Add the relationship field with id (always safe)\n selectionSet.push(`${fieldName}.id`);\n \n // Add common display fields that are likely to exist\n const commonDisplayFields = ['name', 'title', 'label', 'displayName'];\n for (const field of commonDisplayFields) {\n selectionSet.push(`${fieldName}.${field}`);\n }\n \n // Add some additional fields that might be useful for display\n const additionalFields = ['description', 'status', 'type'];\n for (const field of additionalFields) {\n selectionSet.push(`${fieldName}.${field}`);\n }\n \n return selectionSet;\n }\n\n /**\n * Generate minimal fallback selection set for critical error cases\n * This is the last resort fallback strategy\n */\n private generateMinimalFallbackSelectionSet(fieldName?: string): string[] {\n console.log(`SelectionSetGenerator: Using minimal fallback strategy${fieldName ? ` for field \"${fieldName}\"` : ''}`);\n \n const selectionSet: string[] = ['id'];\n \n if (fieldName) {\n // Include only the most basic relationship data\n selectionSet.push(`${fieldName}.id`);\n \n // Add one common field that's most likely to exist\n selectionSet.push(`${fieldName}.name`);\n }\n \n return selectionSet;\n }\n\n /**\n * Generate fallback selection set with retry logic\n * Attempts multiple fallback strategies and validates each one\n * Enhanced with comprehensive error handling and recovery tracking\n */\n generateFallbackSelectionSetWithRetry(fieldName: string, previousErrors: string[] = []): string[] {\n try {\n if (!fieldName) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Field name is empty for fallback retry generation',\n undefined,\n undefined,\n { previousErrors }\n );\n return ['id'];\n }\n\n console.log(`SelectionSetGenerator: Generating fallback with retry for field \"${fieldName}\", previous errors: ${previousErrors.length}`);\n \n const strategies = [\n () => this.generateComprehensiveFallbackSelectionSet(fieldName),\n () => this.generateSelectiveFallbackSelectionSet(fieldName),\n () => this.generateMinimalFallbackSelectionSet(fieldName)\n ];\n \n // Skip strategies that have already failed\n const availableStrategies = strategies.slice(previousErrors.length);\n \n for (let i = 0; i < availableStrategies.length; i++) {\n try {\n const strategy = availableStrategies[i];\n const selectionSet = strategy();\n \n // Validate the selection set\n if (this.validateSelectionSet(selectionSet)) {\n const strategyName = ['comprehensive', 'selective', 'minimal'][previousErrors.length + i];\n console.log(`SelectionSetGenerator: Successfully generated ${strategyName} fallback selection set`);\n \n // Log successful recovery if this was after previous failures\n if (previousErrors.length > 0) {\n this.errorHandler.logSuccessfulRecovery(\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Previous errors: ${previousErrors.join(', ')}`,\n undefined,\n undefined,\n { fieldName, previousErrors }\n ),\n strategyName,\n selectionSet\n );\n }\n \n return selectionSet;\n } else {\n const strategyName = ['comprehensive', 'selective', 'minimal'][previousErrors.length + i];\n const validationError = `Generated selection set failed validation for ${strategyName} strategy`;\n console.warn(`SelectionSetGenerator: ${validationError}`);\n previousErrors.push(validationError);\n }\n \n } catch (error) {\n const strategyName = ['comprehensive', 'selective', 'minimal'][previousErrors.length + i];\n const errorMessage = error instanceof Error ? error.message : String(error);\n \n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `${strategyName} fallback strategy failed: ${errorMessage}`,\n undefined,\n undefined,\n {\n fieldName,\n strategyName,\n strategyIndex: previousErrors.length + i,\n originalError: {\n message: errorMessage,\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.warn(`SelectionSetGenerator: ${strategyName} fallback strategy failed:`, error);\n previousErrors.push(errorMessage);\n }\n }\n \n // If all strategies fail, log the complete failure and return absolute minimal fallback\n this.errorHandler.logFailedRecovery(\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n 'All fallback strategies failed',\n undefined,\n undefined,\n { fieldName, previousErrors }\n ),\n ['comprehensive', 'selective', 'minimal'],\n new Error('All fallback strategies exhausted')\n );\n \n console.error('SelectionSetGenerator: All fallback strategies failed, using absolute minimal fallback');\n return ['id'];\n \n } catch (error) {\n // Critical error in retry logic itself\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Critical error in fallback retry logic: ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n undefined,\n {\n fieldName,\n previousErrors,\n criticalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error('SelectionSetGenerator: Critical error in fallback retry logic:', error);\n return ['id'];\n }\n }\n\n /**\n * Handle generation errors by attempting fallback with comprehensive logging\n */\n private handleGenerationError(error: any, fieldName: string): string[] {\n try {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`SelectionSetGenerator: Handling generation error for field \"${fieldName}\":`, errorMessage);\n \n // Attempt fallback with retry logic\n const fallbackResult = this.generateFallbackSelectionSetWithRetry(fieldName, [errorMessage]);\n \n // Log the fallback attempt\n console.log(`SelectionSetGenerator: Fallback generated for field \"${fieldName}\":`, fallbackResult);\n \n return fallbackResult;\n \n } catch (fallbackError) {\n // Even fallback failed - return absolute minimal\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Both primary generation and fallback failed: ${fallbackError instanceof Error ? fallbackError.message : String(fallbackError)}`,\n undefined,\n undefined,\n {\n fieldName,\n originalError: error,\n fallbackError: {\n message: fallbackError instanceof Error ? fallbackError.message : String(fallbackError),\n stack: fallbackError instanceof Error ? fallbackError.stack : undefined\n }\n }\n );\n \n console.error('SelectionSetGenerator: Both primary generation and fallback failed, returning minimal selection set');\n return ['id'];\n }\n }\n\n /**\n * Validate a selection set for basic correctness\n */\n private validateSelectionSet(selectionSet: string[]): boolean {\n if (!Array.isArray(selectionSet) || selectionSet.length === 0) {\n return false;\n }\n \n // Must include 'id' field\n if (!selectionSet.includes('id')) {\n return false;\n }\n \n // Check for obviously invalid selectors\n for (const selector of selectionSet) {\n if (typeof selector !== 'string' || selector.trim() === '') {\n return false;\n }\n \n // Check for dangerous patterns\n if (selector.includes('..') || selector.includes('*') || selector.length > 100) {\n return false;\n }\n }\n \n return true;\n }\n\n /**\n * Clear the internal cache of generated selection sets\n */\n clearCache(): void {\n this.selectionSetCache.clear();\n console.log('SelectionSetGenerator: Cache cleared');\n }\n \n /**\n * Generate selection set from configuration analysis result\n */\n private generateSelectionSetFromAnalysis(\n config: RelationshipConfiguration, \n analysisResult: any\n ): string[] {\n const selectionSet: string[] = [];\n \n // Always include the base record ID\n selectionSet.push('id');\n \n if (this.schemaIntrospector.isSchemaAvailable()) {\n // Use schema-aware generation\n return this.generateSchemaAwareSelectionSet(config, analysisResult);\n } else {\n // Use configuration-based generation\n return this.generateConfigurationBasedSelectionSet(config, analysisResult);\n }\n }\n \n /**\n * Generate selection set using schema introspection data\n */\n private generateSchemaAwareSelectionSet(\n config: RelationshipConfiguration,\n analysisResult: any\n ): string[] {\n const selectionSet: string[] = ['id'];\n \n // Get safe field selectors from schema introspector\n const safeSelectors = this.schemaIntrospector.getSafeFieldSelectors(\n analysisResult.targetModelName,\n config.fieldName\n );\n \n // Add schema-validated selectors\n for (const selector of safeSelectors) {\n if (!selectionSet.includes(selector)) {\n selectionSet.push(selector);\n }\n }\n \n // Apply display optimization if enabled\n const optimizedSet = this.applyDisplayOptimization(selectionSet, config);\n \n // Apply complexity limits\n return this.applyComplexityLimits(optimizedSet);\n }\n \n /**\n * Generate selection set using configuration analysis only\n */\n private generateConfigurationBasedSelectionSet(\n config: RelationshipConfiguration,\n analysisResult: any\n ): string[] {\n const selectionSet: string[] = ['id'];\n \n console.log('SelectionSetGenerator: Generating configuration-based selection set:', {\n config: {\n relationshipModelName: config.relationshipModelName,\n fieldName: config.fieldName,\n baseModelName: config.baseModelName,\n associatedWith: config.associatedWith\n },\n analysisResult: {\n targetModelName: analysisResult.targetModelName,\n fieldSelectorsCount: analysisResult.fieldSelectors?.length || 0,\n fieldSelectors: analysisResult.fieldSelectors\n }\n });\n \n // Use the field selectors from configuration analysis\n for (const selector of analysisResult.fieldSelectors) {\n if (!selectionSet.includes(selector)) {\n selectionSet.push(selector);\n }\n }\n \n console.log('SelectionSetGenerator: Configuration-based selection set before optimization:', selectionSet);\n \n // Apply display optimization if enabled\n const optimizedSet = this.applyDisplayOptimization(selectionSet, config);\n \n console.log('SelectionSetGenerator: Selection set after display optimization:', optimizedSet);\n \n // Apply complexity limits\n const finalSet = this.applyComplexityLimits(optimizedSet);\n \n console.log('SelectionSetGenerator: Final configuration-based selection set:', finalSet);\n \n return finalSet;\n }\n \n /**\n * Apply display optimization to prioritize display-relevant fields\n */\n private applyDisplayOptimization(selectionSet: string[], config: RelationshipConfiguration): string[] {\n const displayConfig = this.DEFAULT_DISPLAY_CONFIG;\n \n if (!displayConfig.enabled) {\n return selectionSet;\n }\n \n // Analyze each field for display relevance\n const fieldAnalyses = selectionSet.map(selector => this.analyzeFieldForDisplay(selector, config));\n \n // Sort by priority (higher priority first)\n fieldAnalyses.sort((a, b) => b.priority - a.priority);\n \n // Build optimized selection set\n const optimizedSet: string[] = [];\n const essentialFields: string[] = [];\n const displayFields: string[] = [];\n const otherFields: string[] = [];\n \n // Categorize fields\n for (const analysis of fieldAnalyses) {\n switch (analysis.classification) {\n case FieldClassification.ESSENTIAL:\n essentialFields.push(analysis.selector);\n break;\n case FieldClassification.DISPLAY:\n displayFields.push(analysis.selector);\n break;\n default:\n otherFields.push(analysis.selector);\n break;\n }\n }\n \n // Add essential fields first (always included)\n optimizedSet.push(...essentialFields);\n \n // Add display fields (prioritized)\n optimizedSet.push(...displayFields);\n \n // Add other fields up to the limit\n const remainingSlots = Math.max(0, displayConfig.maxNonDisplayFields - (optimizedSet.length - essentialFields.length));\n optimizedSet.push(...otherFields.slice(0, remainingSlots));\n \n console.log(`SelectionSetGenerator: Display optimization reduced selection set from ${selectionSet.length} to ${optimizedSet.length} fields`);\n \n return optimizedSet;\n }\n \n /**\n * Analyze a field selector for display optimization\n */\n private analyzeFieldForDisplay(selector: string, config: RelationshipConfiguration): FieldAnalysis {\n const displayConfig = this.DEFAULT_DISPLAY_CONFIG;\n const analysis: FieldAnalysis = {\n selector,\n classification: FieldClassification.UNKNOWN,\n priority: 0,\n cost: 1,\n isDisplayRelevant: false\n };\n \n // Essential fields (always required)\n if (displayConfig.excludeFromOptimization.some(field => selector.includes(field))) {\n analysis.classification = FieldClassification.ESSENTIAL;\n analysis.priority = 100;\n analysis.isDisplayRelevant = true;\n return analysis;\n }\n \n // Check if it's a common display field\n const isDisplayField = displayConfig.commonDisplayFields.some(field => \n selector.endsWith(`.${field}`) || selector === field\n );\n \n if (isDisplayField) {\n analysis.classification = FieldClassification.DISPLAY;\n analysis.priority = 80;\n analysis.isDisplayRelevant = true;\n } else if (this.isRelationshipField(selector)) {\n analysis.classification = FieldClassification.RELATIONSHIP;\n analysis.priority = 60;\n analysis.cost = 2; // Relationships are more expensive\n analysis.isDisplayRelevant = this.isDisplayRelevantRelationship(selector);\n } else if (this.isMetadataField(selector)) {\n analysis.classification = FieldClassification.METADATA;\n analysis.priority = 40;\n analysis.isDisplayRelevant = false;\n } else if (this.isSystemField(selector)) {\n analysis.classification = FieldClassification.SYSTEM;\n analysis.priority = 20;\n analysis.isDisplayRelevant = false;\n } else {\n analysis.classification = FieldClassification.UNKNOWN;\n analysis.priority = 30;\n analysis.isDisplayRelevant = false;\n }\n \n // Adjust priority based on field depth (deeper fields are less likely to be displayed)\n const depth = (selector.match(/\\./g) || []).length;\n analysis.priority -= depth * 5;\n analysis.cost += depth;\n \n // Boost priority for fields that match the relationship field name\n if (selector.includes(config.fieldName)) {\n analysis.priority += 10;\n analysis.isDisplayRelevant = true;\n }\n \n return analysis;\n }\n \n /**\n * Check if a selector represents a relationship field\n */\n private isRelationshipField(selector: string): boolean {\n // Relationship fields typically have dots (nested access) or end with common relationship suffixes\n return selector.includes('.') || \n selector.endsWith('Id') || \n selector.endsWith('Ids') ||\n selector.endsWith('Connection');\n }\n \n /**\n * Check if a relationship field is likely to be displayed\n */\n private isDisplayRelevantRelationship(selector: string): boolean {\n // Display-relevant relationships typically access display fields of related models\n const displayFieldPatterns = ['name', 'title', 'label', 'displayName', 'description'];\n return displayFieldPatterns.some(pattern => selector.includes(pattern));\n }\n \n /**\n * Check if a selector represents a metadata field\n */\n private isMetadataField(selector: string): boolean {\n const metadataPatterns = ['createdAt', 'updatedAt', 'version', 'owner', 'lastModified'];\n return metadataPatterns.some(pattern => selector.includes(pattern));\n }\n \n /**\n * Check if a selector represents a system field\n */\n private isSystemField(selector: string): boolean {\n const systemPatterns = ['__typename', '_version', '_deleted', '_lastChangedAt'];\n return systemPatterns.some(pattern => selector.includes(pattern));\n }\n \n /**\n * Apply complexity limits to prevent overly expensive GraphQL queries\n * Enhanced with comprehensive error handling and logging\n */\n private applyComplexityLimits(selectionSet: string[]): string[] {\n try {\n // First validate the selection set for complexity\n const validationResult = this.validateSelectionSetComplexity(selectionSet);\n \n if (validationResult.isValid) {\n console.log('SelectionSetGenerator: Selection set passed complexity validation');\n return selectionSet;\n }\n \n // Log validation issues\n if (validationResult.errors.length > 0) {\n this.errorHandler.logComplexityError(selectionSet, validationResult.errors);\n console.warn('SelectionSetGenerator: Complexity validation errors:', validationResult.errors);\n }\n if (validationResult.warnings.length > 0) {\n console.warn('SelectionSetGenerator: Complexity validation warnings:', validationResult.warnings);\n }\n \n // Apply fixes to make the selection set compliant\n const fixedSet = this.fixComplexityIssues(selectionSet, validationResult);\n \n // Validate the fixed set\n const revalidationResult = this.validateSelectionSetComplexity(fixedSet);\n if (!revalidationResult.isValid) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.COMPLEXITY_EXCEEDED,\n 'Selection set still exceeds complexity limits after fixes',\n undefined,\n fixedSet,\n {\n originalSelectionSet: selectionSet,\n validationResult,\n revalidationResult\n }\n );\n \n // Return minimal fallback if fixes didn't work\n console.warn('SelectionSetGenerator: Complexity fixes failed, returning minimal selection set');\n return ['id'];\n }\n \n console.log(`SelectionSetGenerator: Applied complexity fixes, reduced from ${selectionSet.length} to ${fixedSet.length} fields`);\n return fixedSet;\n \n } catch (error) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.COMPLEXITY_EXCEEDED,\n `Error applying complexity limits: ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n selectionSet,\n {\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error('SelectionSetGenerator: Error applying complexity limits:', error);\n // Return original set if complexity checking fails\n return selectionSet;\n }\n }\n \n /**\n * Validate selection set complexity against configured limits\n */\n private validateSelectionSetComplexity(selectionSet: string[]): ComplexityValidationResult {\n const limits = this.DEFAULT_CONFIG.complexityLimits;\n const result: ComplexityValidationResult = {\n isValid: true,\n errors: [],\n warnings: [],\n complexityScore: 0,\n circularReferences: []\n };\n \n // Track field paths for circular reference detection\n const fieldPaths = new Set<string>();\n const pathComponents = new Map<string, string[]>();\n \n let wildcardCount = 0;\n let maxDepth = 0;\n \n for (const selector of selectionSet) {\n // Check selector length\n if (selector.length > limits.maxSelectorLength) {\n result.errors.push(`Selector \"${selector}\" exceeds maximum length of ${limits.maxSelectorLength}`);\n result.isValid = false;\n }\n \n // Check for wildcard selections\n if (selector.includes('*')) {\n wildcardCount++;\n if (wildcardCount > limits.maxWildcardSelections) {\n result.errors.push(`Too many wildcard selections (${wildcardCount}), maximum allowed: ${limits.maxWildcardSelections}`);\n result.isValid = false;\n }\n }\n \n // Calculate nesting depth\n const depth = (selector.match(/\\./g) || []).length;\n maxDepth = Math.max(maxDepth, depth);\n \n if (depth > limits.maxNestingDepth) {\n result.errors.push(`Selector \"${selector}\" exceeds maximum nesting depth of ${limits.maxNestingDepth}`);\n result.isValid = false;\n }\n \n // Track field paths for circular reference detection\n if (limits.preventCircularReferences && depth > 0) {\n const components = selector.split('.');\n pathComponents.set(selector, components);\n \n // Check for potential circular references\n const circularRef = this.detectCircularReference(components, pathComponents);\n if (circularRef) {\n result.circularReferences.push(circularRef);\n result.warnings.push(`Potential circular reference detected: ${circularRef}`);\n }\n }\n \n fieldPaths.add(selector);\n }\n \n // Check field count limit\n if (selectionSet.length > limits.maxFieldCount) {\n result.errors.push(`Selection set has ${selectionSet.length} fields, maximum allowed: ${limits.maxFieldCount}`);\n result.isValid = false;\n }\n \n // Calculate complexity score\n result.complexityScore = this.calculateComplexityScore(selectionSet, maxDepth, wildcardCount);\n \n // Add warnings for high complexity\n if (result.complexityScore > 50) {\n result.warnings.push(`High complexity score: ${result.complexityScore}`);\n }\n \n return result;\n }\n \n /**\n * Detect circular references in field paths\n */\n private detectCircularReference(components: string[], allPaths: Map<string, string[]>): string | null {\n // Simple circular reference detection: check if any component appears multiple times in the path\n const componentCounts = new Map<string, number>();\n \n for (const component of components) {\n const count = componentCounts.get(component) || 0;\n componentCounts.set(component, count + 1);\n \n if (count > 0) {\n return components.join('.');\n }\n }\n \n return null;\n }\n \n /**\n * Calculate complexity score for a selection set\n */\n private calculateComplexityScore(selectionSet: string[], maxDepth: number, wildcardCount: number): number {\n let score = 0;\n \n // Base score from field count\n score += selectionSet.length;\n \n // Penalty for depth\n score += maxDepth * 5;\n \n // Heavy penalty for wildcards\n score += wildcardCount * 10;\n \n // Penalty for complex selectors\n for (const selector of selectionSet) {\n if (selector.includes('*')) {\n score += 5;\n }\n if (selector.split('.').length > 2) {\n score += 3;\n }\n }\n \n return score;\n }\n \n /**\n * Fix complexity issues in a selection set\n */\n private fixComplexityIssues(selectionSet: string[], validationResult: ComplexityValidationResult): string[] {\n const limits = this.DEFAULT_CONFIG.complexityLimits;\n let fixedSet = [...selectionSet];\n \n // Remove selectors that are too long\n fixedSet = fixedSet.filter(selector => {\n if (selector.length > limits.maxSelectorLength) {\n console.warn(`SelectionSetGenerator: Removing selector \"${selector}\" due to excessive length`);\n return false;\n }\n return true;\n });\n \n // Remove selectors that are too deeply nested\n fixedSet = fixedSet.filter(selector => {\n const depth = (selector.match(/\\./g) || []).length;\n if (depth > limits.maxNestingDepth) {\n console.warn(`SelectionSetGenerator: Removing selector \"${selector}\" due to excessive nesting depth`);\n return false;\n }\n return true;\n });\n \n // Limit wildcard selections\n let wildcardCount = 0;\n fixedSet = fixedSet.filter(selector => {\n if (selector.includes('*')) {\n wildcardCount++;\n if (wildcardCount > limits.maxWildcardSelections) {\n console.warn(`SelectionSetGenerator: Removing wildcard selector \"${selector}\" due to limit`);\n return false;\n }\n }\n return true;\n });\n \n // Remove circular references\n if (limits.preventCircularReferences && validationResult.circularReferences.length > 0) {\n const circularSelectors = new Set(validationResult.circularReferences);\n fixedSet = fixedSet.filter(selector => {\n if (circularSelectors.has(selector)) {\n console.warn(`SelectionSetGenerator: Removing selector \"${selector}\" due to circular reference`);\n return false;\n }\n return true;\n });\n }\n \n // Truncate to field count limit\n if (fixedSet.length > limits.maxFieldCount) {\n console.warn(`SelectionSetGenerator: Truncating selection set from ${fixedSet.length} to ${limits.maxFieldCount} fields`);\n fixedSet = fixedSet.slice(0, limits.maxFieldCount);\n }\n \n // Ensure required fields are still present\n for (const requiredField of this.DEFAULT_CONFIG.requiredFields) {\n if (!fixedSet.includes(requiredField)) {\n fixedSet.unshift(requiredField);\n }\n }\n \n return fixedSet;\n }\n \n /**\n * Generate a cache key for a relationship configuration\n */\n private generateCacheKey(config: RelationshipConfiguration): string {\n const key: CacheKey = {\n relationshipModel: config.relationshipModelName,\n fieldName: config.fieldName,\n targetModel: this.configurationAnalyzer.extractTargetModelName(config),\n schemaVersion: this.getSchemaVersion()\n };\n \n return JSON.stringify(key);\n }\n \n /**\n * Get cached selection set if available\n */\n private getCachedSelectionSet(cacheKey: string): CachedSelectionSet | null {\n const cached = this.selectionSetCache.get(cacheKey);\n if (cached) {\n // Update access count\n cached.accessCount++;\n return cached;\n }\n return null;\n }\n \n /**\n * Cache a generated selection set\n */\n private cacheSelectionSet(cacheKey: string, selectionSet: string[]): void {\n const cached: CachedSelectionSet = {\n key: JSON.parse(cacheKey),\n selectionSet: [...selectionSet],\n createdAt: new Date(),\n accessCount: 1\n };\n \n this.selectionSetCache.set(cacheKey, cached);\n \n // Implement simple cache size limit\n if (this.selectionSetCache.size > 100) {\n this.evictOldestCacheEntries();\n }\n }\n \n /**\n * Evict oldest cache entries when cache gets too large\n */\n private evictOldestCacheEntries(): void {\n const entries = Array.from(this.selectionSetCache.entries());\n entries.sort((a, b) => a[1].createdAt.getTime() - b[1].createdAt.getTime());\n \n // Remove oldest 20% of entries\n const toRemove = Math.floor(entries.length * 0.2);\n for (let i = 0; i < toRemove; i++) {\n this.selectionSetCache.delete(entries[i][0]);\n }\n \n console.log(`SelectionSetGenerator: Evicted ${toRemove} old cache entries`);\n }\n \n /**\n * Get schema version for cache invalidation\n */\n private getSchemaVersion(): string | undefined {\n // In a real implementation, this could be based on schema hash or version\n // For now, we'll use schema availability as a simple version indicator\n return this.schemaIntrospector.isSchemaAvailable() ? 'schema-available' : 'schema-unavailable';\n }\n \n /**\n * Get cache statistics for debugging\n */\n getCacheStats(): {\n size: number;\n totalAccesses: number;\n entries: Array<{\n key: CacheKey;\n selectionSet: string[];\n createdAt: Date;\n accessCount: number;\n }>;\n } {\n const entries = Array.from(this.selectionSetCache.values());\n const totalAccesses = entries.reduce((sum, entry) => sum + entry.accessCount, 0);\n \n return {\n size: this.selectionSetCache.size,\n totalAccesses,\n entries: entries.map(entry => ({\n key: entry.key,\n selectionSet: [...entry.selectionSet],\n createdAt: entry.createdAt,\n accessCount: entry.accessCount\n }))\n };\n }\n \n /**\n * Get optimization statistics for debugging\n */\n getOptimizationStats(): {\n displayOptimizationEnabled: boolean;\n complexityLimits: ComplexityLimits;\n displayConfig: DisplayOptimizationConfig;\n } {\n return {\n displayOptimizationEnabled: this.DEFAULT_DISPLAY_CONFIG.enabled,\n complexityLimits: { ...this.DEFAULT_CONFIG.complexityLimits },\n displayConfig: { ...this.DEFAULT_DISPLAY_CONFIG }\n };\n }\n \n /**\n * Analyze a selection set for optimization opportunities\n */\n analyzeSelectionSetOptimization(selectionSet: string[]): {\n totalFields: number;\n displayRelevantFields: number;\n complexityScore: number;\n optimizationOpportunities: string[];\n } {\n const mockConfig: RelationshipConfiguration = {\n relationshipModelName: '',\n baseModelName: '',\n fieldName: 'mock',\n associatedWith: ''\n };\n \n const analyses = selectionSet.map(selector => this.analyzeFieldForDisplay(selector, mockConfig));\n const displayRelevantCount = analyses.filter(a => a.isDisplayRelevant).length;\n const complexityScore = this.calculateComplexityScore(\n selectionSet, \n Math.max(...selectionSet.map(s => (s.match(/\\./g) || []).length)),\n selectionSet.filter(s => s.includes('*')).length\n );\n \n const opportunities: string[] = [];\n \n // Identify optimization opportunities\n if (displayRelevantCount < selectionSet.length * 0.5) {\n opportunities.push('Many non-display fields could be removed');\n }\n \n if (complexityScore > 30) {\n opportunities.push('High complexity score suggests simplification needed');\n }\n \n const deepFields = selectionSet.filter(s => (s.match(/\\./g) || []).length > 2);\n if (deepFields.length > 0) {\n opportunities.push(`${deepFields.length} deeply nested fields could be simplified`);\n }\n \n const wildcardFields = selectionSet.filter(s => s.includes('*'));\n if (wildcardFields.length > 1) {\n opportunities.push(`${wildcardFields.length} wildcard selections could be made more specific`);\n }\n \n return {\n totalFields: selectionSet.length,\n displayRelevantFields: displayRelevantCount,\n complexityScore,\n optimizationOpportunities: opportunities\n };\n }\n \n /**\n * Initialize the service with schema data\n */\n initializeWithSchema(amplifyOutputs: any): void {\n this.schemaIntrospector.initializeSchema(amplifyOutputs);\n this.clearCache(); // Clear cache when schema changes\n console.log('SelectionSetGenerator: Initialized with schema data');\n }\n}","import { Component } from '@angular/core';\n\n@Component({\n selector: 'snteam-amplify-angular-core',\n standalone: true,\n imports: [],\n template: `\n <p>\n amplify-angular-core works!\n </p>\n `,\n styles: ``,\n})\nexport class AmplifyAngularCore {\n\n}\n\n// Export Dynamic Relationship Loader interfaces and types\nexport * from './interfaces';\nexport * from './types';\n\n// Export Dynamic Relationship Loader services (placeholder implementations)\nexport { SelectionSetGeneratorService } from './services/selection-set-generator.service';\nexport { ConfigurationAnalyzerService } from './services/configuration-analyzer.service';\nexport { SchemaIntrospectorService } from './services/schema-introspector.service';\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, Validators, AbstractControl } from '@angular/forms';\nimport {\n QuestionBase,\n TextboxQuestion,\n NumberQuestion,\n DatePickerQuestion,\n DropdownQuestion,\n FormGroupQuestion\n} from '../classes/questions';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmplifyFormBuilderService {\n\n skipFields: string[] = ['createdAt', 'updatedAt'];\n\n materialInputs: string[] = [\n 'textbox',\n 'int',\n 'number',\n 'color',\n 'email',\n 'month',\n 'number',\n 'password',\n 'search',\n 'tel',\n 'text',\n 'time',\n 'url',\n 'week'\n ];\n \n switchInputs: string[] = ['dropdown'];\n refInputs: string[] = ['async-dropdown'];\n formGroupInputs: string[] = ['formgroup']; // we skip these and handle them in the form\n datePickerInputs = ['date', 'datepicker', 'datetime-local'];\n\n private outputs: any;\n\n constructor(private fb: FormBuilder) { }\n\n /**\n * Initialize the service with Amplify outputs\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeOutputs(outputs: any) {\n this.outputs = outputs;\n }\n\n getInputTypeFromFieldType(type: string): string | undefined {\n if (this.materialInputs.includes(type)) return 'materialInputs';\n if (this.switchInputs.includes(type)) return 'switchInputs';\n if (this.refInputs.includes(type)) return 'refInputs';\n if (this.formGroupInputs.includes(type)) return 'formGroupInputs';\n if (this.datePickerInputs.includes(type)) return 'datePickerInputs';\n\n return undefined;\n }\n\n getMaterialInputs(): string[] {\n return this.materialInputs;\n }\n\n getSwitchInputs(): string[] {\n return this.switchInputs;\n }\n\n getRefInputs(): string[] {\n return this.refInputs;\n }\n\n getErrorStrForControl(ctrl: AbstractControl, label?: string): string {\n const errorMap: { [key: string]: string } = {\n email: 'Please enter a valid email address',\n invalidPhoneNumber: 'Please enter a phone number in (111) 222-3333 format.',\n required: (label || 'This field') + ' is required.'\n };\n\n if (!ctrl.errors) return '';\n \n let errStrs: string[] = [];\n let keys = Object.keys(ctrl.errors);\n \n for (let err of keys) {\n if (errorMap[err]) {\n errStrs.push(errorMap[err]);\n } else {\n errStrs.push(`Invalid ${err}`);\n }\n }\n \n return errStrs.join(', ');\n }\n\n /** Shared Methods for FormControls **/\n getPathFromRoot(searchKey: string, controls: any, pathArr?: string[]): string {\n if (!pathArr) pathArr = [];\n\n const isInControls = Object.keys(controls).find(name => name === searchKey);\n if (isInControls) {\n pathArr.push(searchKey);\n return pathArr.join('.');\n } else {\n const tempArr: string[] = [];\n const entries = Object.entries(controls);\n \n for (let e of entries) {\n let controlName = e[0];\n let controlObj = e[1];\n \n if (controlObj instanceof FormGroup) {\n console.log('getPathFromRoot controlName', typeof controlName, controlName, 'controlObj', controlObj);\n tempArr.push(controlName);\n console.log('getPathFromRoot', controlName, 'is a FormGroup in path tempArr', tempArr);\n \n const childControls = (controls[controlName] as FormGroup).controls;\n console.log('getPathFromRoot childControls', childControls);\n \n let childPath = this.getPathFromRoot(searchKey, childControls, [...pathArr, ...tempArr]);\n if (childPath !== '') return childPath;\n }\n }\n return '';\n }\n }\n\n /** FormBuilder Methods **/\n\n private _getFormGroupFromFieldsArr(fields: any): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n console.log('_getFormGroupFromFieldsArr fields', fields);\n const formGroup = this.fb.group({});\n const fieldsArr = Object.values(fields);\n \n fieldsArr.forEach((field: any) => {\n if (this.skipFields.indexOf(field.name) > -1) return;\n\n if (typeof field.type === 'object') {\n if (field.type.model) {\n formGroup.addControl(field.name, this._getControlForField(field));\n }\n if (field.type.nonModel) {\n formGroup.addControl(field.name, this._getGroupControlForNonModel(field));\n }\n } else {\n formGroup.addControl(field.name, this._getControlForField(field));\n }\n });\n \n return formGroup;\n }\n\n private _getGroupControlForNonModel(field: any): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n const nonModel = field.type.nonModel;\n const fields = this.outputs.data.model_introspection.nonModels[nonModel as keyof typeof this.outputs.data.model_introspection.nonModels].fields;\n return this._getFormGroupFromFieldsArr(fields);\n }\n\n private _getControlForField(field: any): FormControl {\n const validators = field.required ? [Validators.required] : [];\n return new FormControl(field.value || '', validators);\n }\n\n buildFormForModel(model: string): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n const config = this.outputs.data.model_introspection.models[model as keyof typeof this.outputs.data.model_introspection.models].fields;\n const formGroup = this._getFormGroupFromFieldsArr(config);\n return formGroup;\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'valToTitle',\n standalone: true\n})\nexport class ValToTitlePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value) {\n return '';\n }\n\n let fixed = value.replace(new RegExp('_', 'g'), ' ').split(' ')\n .map(w => w.length > 0 ? w[0].toUpperCase() + w.substring(1).toLowerCase() : '')\n .join(' ');\n\n return fixed;\n }\n}","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SelectionSetGeneratorService } from './selection-set-generator.service';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { RelationshipConfiguration } from '../interfaces/selection-set-generator.interface';\nimport { RelationshipSelectionSetConfig, RelationshipSelectionConfig, AmplifyModelServiceConfig } from '../interfaces/relationship-config.interface';\nimport { SelectionSetErrorType } from '../types/error.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmplifyModelService {\n\n private client: any;\n private relationshipConfig: RelationshipSelectionSetConfig | null = null;\n\n constructor(\n private selectionSetGenerator: SelectionSetGeneratorService,\n private errorHandler: ErrorHandlerService\n ) { \n // Client will be initialized when Amplify is configured by the consuming application\n }\n\n /**\n * Configure the service with relationship selection sets\n * This should be called by the consuming application to define how relationships should be queried\n */\n configure(config: AmplifyModelServiceConfig): void {\n if (config.relationshipSelectionSets) {\n this.relationshipConfig = config.relationshipSelectionSets;\n console.log('AmplifyModelService: Configured with relationship selection sets:', this.relationshipConfig);\n }\n }\n\n /**\n * Set relationship selection set configuration directly\n */\n setRelationshipConfig(config: RelationshipSelectionSetConfig): void {\n this.relationshipConfig = config;\n console.log('AmplifyModelService: Updated relationship selection sets configuration:', this.relationshipConfig);\n }\n\n /**\n * Initialize the service with the Amplify client\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeClient<T>(schema?: T) {\n // Dynamic import to avoid build-time dependency\n try {\n // This will be provided by the consuming application\n this.client = (globalThis as any).amplifyClient;\n if (!this.client) {\n console.warn('AmplifyModelService: No client provided. Call with generateClient result.');\n }\n } catch (error) {\n console.error('Failed to initialize Amplify client:', error);\n }\n }\n\n /**\n * Set the client directly (for consuming applications)\n */\n setClient(client: any) {\n this.client = client;\n }\n\n async getMenuLinksFromModels(outputs: any, config?: { skipModels?: string[] }): Promise<any[]> {\n const defaultConfig = { skipModels: ['ServiceCustomer', 'ServiceProduct', 'Todo'] };\n const finalConfig = { ...defaultConfig, ...config };\n\n let pageButtons: any[] = [\n { label: 'Home', route: '/' },\n { label: 'Configurations', route: '/configurations' }\n ];\n let models = outputs.data.model_introspection.models;\n\n // Get TableConfig records to check hide_in_menu settings\n let tableConfigs: any[] = [];\n try {\n if (this.client && this.client.models && this.client.models.TableConfig) {\n const tableConfigsResult = await this.client.models.TableConfig.list();\n if (tableConfigsResult && tableConfigsResult.data) {\n tableConfigs = tableConfigsResult.data;\n }\n }\n } catch (error) {\n console.warn('AmplifyModelService: Could not fetch TableConfig records for menu filtering:', error);\n }\n\n Object.values(models).forEach((model: any) => {\n if (finalConfig.skipModels!.includes(model.name)) return;\n \n // Check if this model should be hidden based on TableConfig\n const tableConfig = tableConfigs.find((config: any) => config.name === model.name);\n if (tableConfig && tableConfig.hide_in_menu === true) {\n console.log('AmplifyModelService: Hiding model from menu:', model.name);\n return; // Skip this model\n }\n \n // Use TableConfig label if available, otherwise use model name\n const label = tableConfig && tableConfig.label ? tableConfig.label : model.name;\n \n console.log('model', model);\n pageButtons.push({ label: label, route: '/list/' + model.name });\n });\n console.log('models', models);\n\n return pageButtons;\n }\n\n /**\n * TODO: Make this generate dynamically using refModel Names and types\n * TODO: Bring the refModel generation in here.\n * Edit this function with form fields...\n * \n * ... probably don't need this...\n */\n getEmptyObjectForModel(model: string): any {\n switch (model) {\n case 'Customer':\n return {\n name: '',\n contact: {},\n services: [],\n contact_preference: '',\n notes: [],\n };\n case 'Service':\n return {\n cost: 0.00,\n price: 0.00,\n customers: [],\n products: [],\n id: '',\n title: ''\n };\n default:\n return {};\n }\n }\n\n getRelationshipChoices(config: any, selectedOptions?: any[]): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter: any = {};\n /*if (selectedOptions){ //TODO: FILTER OUT SELECTED ITEMS\n filter = {id: {nin: [...selectedOptions]}};\n }*/\n console.log('getRelationshipChoices filter', filter);\n\n try {\n const modelName = config.partnerModelName;\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ filter: filter });\n } else {\n console.error(`Model ${modelName} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + config.partnerModelName + 'items', error);\n return null;\n }\n }\n\n getRefChoices(config: any, itemId: string, selectedOptions?: any[]): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter = this.getRelationshipFilter(config, itemId, selectedOptions);\n console.log('getRefChoices getRelationshipFilter model', config.partnerModelName, 'filter', filter);\n \n try {\n const modelName = config.partnerModelName;\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ filter: filter });\n } else {\n console.error(`Model ${modelName} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + config.partnerModelName + 'items', error);\n return null;\n }\n }\n\n async deleteRelationship(relModel: string, relId: string): Promise<any> {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let obj = { id: relId };\n \n if (this.client.models[relModel]) {\n return this.client.models[relModel].delete(obj);\n } else {\n console.error(`Relationship model ${relModel} not found in client`);\n return null;\n }\n }\n\n createRelationship(relModel: string, relItem: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('createRelationship starting for relModel', relModel, 'relItem', relItem);\n \n if (this.client.models[relModel]) {\n return this.client.models[relModel].create(relItem);\n } else {\n console.error(`Relationship model ${relModel} not found in client`);\n return null;\n }\n }\n\n getRelationshipFilter(config: any, baseId?: string, removeIds?: string[]): any {\n let condition: any = {};\n condition[config.associatedWith] = { eq: baseId };\n \n if (removeIds && removeIds.length > 0) {\n let conditionArr = [\n condition,\n { id: { ne: removeIds } }\n ];\n let andCondition = { and: conditionArr };\n console.log('getRelationshipFilter has andCondition', andCondition);\n return andCondition;\n } else {\n condition[config.associatedWith] = { eq: baseId };\n console.log('getRelationshipFilter config', config, 'condition', condition);\n return condition;\n }\n }\n\n /**\n * Get selection set for relationship queries using configuration\n * This replaces the complex dynamic generation with simple configuration lookup\n * @param config Relationship configuration object\n * @param baseId Base record ID (for compatibility, not used in generation)\n * @returns Array of GraphQL field selectors\n */\n getAmplifySelectionSet(config: RelationshipConfiguration, baseId: string): string[] {\n try {\n if (!config) {\n console.warn('AmplifyModelService: Configuration is null or undefined, using minimal fallback');\n return ['id'];\n }\n\n console.log('AmplifyModelService: Getting selection set for relationship:', {\n relationshipModel: config.relationshipModelName,\n fieldName: config.fieldName,\n baseModelName: config.baseModelName,\n associatedWith: config.associatedWith,\n baseId\n });\n \n // Try to get selection set from configuration first\n const configuredSelectionSet = this.getConfiguredSelectionSet(config);\n if (configuredSelectionSet && configuredSelectionSet.length > 0) {\n console.log('AmplifyModelService: Using configured selection set:', configuredSelectionSet);\n return configuredSelectionSet;\n }\n \n // Fall back to default selection set if configured\n if (this.relationshipConfig?.defaultSelectionSet && this.relationshipConfig.defaultSelectionSet.length > 0) {\n console.log('AmplifyModelService: Using default configured selection set:', this.relationshipConfig.defaultSelectionSet);\n return this.relationshipConfig.defaultSelectionSet;\n }\n \n // Fall back to dynamic generation if enabled and no configuration found\n if (this.relationshipConfig?.enableFallback !== false) {\n console.log('AmplifyModelService: No configuration found, falling back to dynamic generation');\n const dynamicSelectionSet = this.selectionSetGenerator.generateSelectionSet(config);\n \n if (dynamicSelectionSet && dynamicSelectionSet.length > 0) {\n console.log('AmplifyModelService: Using dynamic selection set:', dynamicSelectionSet);\n return dynamicSelectionSet;\n }\n }\n \n // Final fallback - use a simple, predictable selection set\n const fallbackSelectionSet = this.generateSimpleFallbackSelectionSet(config);\n console.log('AmplifyModelService: Using simple fallback selection set:', fallbackSelectionSet);\n \n // Ensure we never return an empty array\n if (fallbackSelectionSet.length === 0) {\n console.warn('AmplifyModelService: Fallback selection set is empty, using minimal default');\n return ['id'];\n }\n \n return fallbackSelectionSet;\n \n } catch (error) {\n console.error('AmplifyModelService: Error getting selection set, using minimal fallback:', error);\n return ['id'];\n }\n }\n\n /**\n * Get configured selection set for a specific relationship\n */\n private getConfiguredSelectionSet(config: RelationshipConfiguration): string[] | null {\n if (!this.relationshipConfig?.relationships) {\n return null;\n }\n \n // Look for exact match first\n const exactMatch = this.relationshipConfig.relationships.find(rel => \n rel.relationshipModel === config.relationshipModelName && \n rel.fieldName === config.fieldName\n );\n \n if (exactMatch) {\n console.log('AmplifyModelService: Found exact configuration match:', exactMatch);\n return exactMatch.selectionSet;\n }\n \n // Look for relationship model match\n const modelMatch = this.relationshipConfig.relationships.find(rel => \n rel.relationshipModel === config.relationshipModelName\n );\n \n if (modelMatch) {\n console.log('AmplifyModelService: Found relationship model match:', modelMatch);\n return modelMatch.selectionSet;\n }\n \n // Look for field name match\n const fieldMatch = this.relationshipConfig.relationships.find(rel => \n rel.fieldName === config.fieldName\n );\n \n if (fieldMatch) {\n console.log('AmplifyModelService: Found field name match:', fieldMatch);\n return fieldMatch.selectionSet;\n }\n \n return null;\n }\n\n /**\n * Generate a simple, predictable fallback selection set\n */\n private generateSimpleFallbackSelectionSet(config: RelationshipConfiguration): string[] {\n const selectionSet = ['id'];\n \n if (config.fieldName) {\n // Add the relationship field itself with basic nested fields\n selectionSet.push(config.fieldName);\n \n // Add common nested fields that are likely to exist\n const commonFields = ['id', 'name', 'title', 'label', 'description'];\n for (const field of commonFields) {\n selectionSet.push(`${config.fieldName}.${field}`);\n }\n }\n \n console.log('AmplifyModelService: Generated simple fallback selection set:', selectionSet);\n return selectionSet;\n }\n\n setRelatedSub(config: any, baseId: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter = this.getRelationshipFilter(config, baseId);\n const modelName = config.relationshipModelName;\n \n if (this.client.models[modelName]) {\n return this.client.models[modelName].onCreate({ filter: filter });\n } else {\n console.error(`Relationship model ${modelName} not found in client`);\n return null;\n }\n }\n\n /**\n * Get related items with enhanced error handling and retry logic\n * @param config Relationship configuration object\n * @param baseId Base record ID to filter relationships\n * @returns Observable of related items with retry logic on GraphQL errors\n */\n getRelatedItems(config: RelationshipConfiguration, baseId: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n const filter = this.getRelationshipFilter(config, baseId);\n const modelName = config.relationshipModelName;\n\n if (!this.client.models[modelName]) {\n console.error(`AmplifyModelService: Relationship model ${modelName} not found in client`);\n return null;\n }\n\n // Attempt to get related items with progressive retry logic\n return this.getRelatedItemsWithRetry(config, baseId, filter, modelName);\n }\n\n /**\n * Get related items with progressive retry logic for GraphQL errors\n * Implements progressive fallback: original → comprehensive → selective → minimal\n */\n private getRelatedItemsWithRetry(\n config: RelationshipConfiguration, \n baseId: string, \n filter: any, \n modelName: string,\n retryAttempt: number = 0,\n previousErrors: string[] = []\n ): Observable<any> | null {\n \n const maxRetries = 3;\n \n try {\n // Generate selection set based on retry attempt\n let selectionSet: string[];\n \n if (retryAttempt === 0) {\n // First attempt: Use dynamic generation\n selectionSet = this.getAmplifySelectionSet(config, baseId);\n } else {\n // Subsequent attempts: Use progressive fallback\n console.log(`AmplifyModelService: Retry attempt ${retryAttempt} for ${modelName}, using fallback selection set`);\n selectionSet = this.selectionSetGenerator.generateFallbackSelectionSetWithRetry(\n config.fieldName, \n previousErrors\n );\n }\n\n // Log the attempt\n this.logQueryAttempt(config, selectionSet, retryAttempt, previousErrors);\n\n // Prepare query options\n const queryOptions: any = { filter: filter };\n \n // Only include selectionSet if it's not empty to avoid GraphQL syntax errors\n if (selectionSet && selectionSet.length > 0) {\n queryOptions.selectionSet = [...selectionSet];\n }\n\n // Execute the query\n const queryObservable = this.client.models[modelName].observeQuery(queryOptions);\n \n // Wrap the observable to handle GraphQL errors with retry logic\n return new Observable(subscriber => {\n const subscription = queryObservable.subscribe({\n next: (result: any) => {\n // Log successful query\n this.logQuerySuccess(config, selectionSet, retryAttempt, result);\n \n // Validate that relationship field data is populated\n if (this.validateRelationshipFieldPopulation(result, config)) {\n subscriber.next(result);\n } else {\n // Relationship field not populated, try retry if possible\n const error = new Error(`Relationship field '${config.fieldName}' not populated in query results`);\n this.handleQueryError(error, config, baseId, filter, modelName, retryAttempt, previousErrors, subscriber);\n }\n },\n error: (error: any) => {\n this.handleQueryError(error, config, baseId, filter, modelName, retryAttempt, previousErrors, subscriber);\n },\n complete: () => {\n subscriber.complete();\n }\n });\n\n // Return cleanup function\n return () => subscription.unsubscribe();\n });\n\n } catch (error) {\n console.error(`AmplifyModelService: Error in retry attempt ${retryAttempt}:`, error);\n \n // If we've exhausted retries, return null\n if (retryAttempt >= maxRetries) {\n this.logFinalFailure(config, previousErrors, error);\n return null;\n }\n \n // Try next retry level\n const newErrors = [...previousErrors, error instanceof Error ? error.message : String(error)];\n return this.getRelatedItemsWithRetry(config, baseId, filter, modelName, retryAttempt + 1, newErrors);\n }\n }\n\n /**\n * Handle GraphQL query errors with retry logic\n * Enhanced with comprehensive error logging and context\n */\n private handleQueryError(\n error: any,\n config: RelationshipConfiguration,\n baseId: string,\n filter: any,\n modelName: string,\n retryAttempt: number,\n previousErrors: string[],\n subscriber: any\n ): void {\n const maxRetries = 3;\n const errorMessage = error instanceof Error ? error.message : String(error);\n \n // Log comprehensive error details using ErrorHandlerService\n const selectionSetError = this.errorHandler.logGraphQLError(\n error,\n config,\n [], // Selection set will be logged separately in retry attempts\n retryAttempt,\n previousErrors\n );\n \n console.error(`AmplifyModelService: GraphQL query error on attempt ${retryAttempt + 1}:`, error);\n \n // Check if we should retry\n if (retryAttempt < maxRetries && this.shouldRetryOnError(error)) {\n console.log(`AmplifyModelService: Retrying with simpler selection set (attempt ${retryAttempt + 1}/${maxRetries})`);\n \n // Add current error to the list\n const newErrors = [...previousErrors, errorMessage];\n \n // Attempt retry with next fallback level\n const retryObservable = this.getRelatedItemsWithRetry(\n config, \n baseId, \n filter, \n modelName, \n retryAttempt + 1, \n newErrors\n );\n \n if (retryObservable) {\n // Subscribe to retry attempt\n const retrySubscription = retryObservable.subscribe({\n next: (result: any) => {\n // Log successful recovery\n this.errorHandler.logSuccessfulRecovery(\n selectionSetError,\n `retry_attempt_${retryAttempt + 1}`,\n [] // Selection set would be determined in retry\n );\n subscriber.next(result);\n },\n error: (retryError: any) => subscriber.error(retryError),\n complete: () => subscriber.complete()\n });\n \n // Handle cleanup\n subscriber.add(() => retrySubscription.unsubscribe());\n } else {\n // No more retries possible\n this.errorHandler.logFailedRecovery(\n selectionSetError,\n newErrors,\n new Error('Retry observable creation failed')\n );\n subscriber.error(error);\n }\n } else {\n // No more retries or error is not retryable\n const finalErrors = [...previousErrors, errorMessage];\n this.errorHandler.logFailedRecovery(\n selectionSetError,\n finalErrors,\n error\n );\n \n console.error('AmplifyModelService: All retry attempts exhausted or error not retryable');\n subscriber.error(error);\n }\n }\n\n /**\n * Determine if an error should trigger a retry\n * Enhanced with comprehensive error pattern matching\n */\n private shouldRetryOnError(error: any): boolean {\n try {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const errorString = errorMessage.toLowerCase();\n \n // Retry on GraphQL field errors, selection set errors, but not on auth errors\n const retryableErrors = [\n 'field',\n 'selection',\n 'cannot query',\n 'unknown field',\n 'syntax error',\n 'invalid selection set',\n 'validation error',\n 'parse error'\n ];\n \n const nonRetryableErrors = [\n 'unauthorized',\n 'forbidden',\n 'access denied',\n 'authentication',\n 'permission',\n 'not authorized',\n 'invalid credentials'\n ];\n \n // Don't retry on auth errors\n if (nonRetryableErrors.some(pattern => errorString.includes(pattern))) {\n console.log(`AmplifyModelService: Not retrying due to auth error: ${errorMessage}`);\n return false;\n }\n \n // Retry on field/selection errors\n const shouldRetry = retryableErrors.some(pattern => errorString.includes(pattern));\n console.log(`AmplifyModelService: Error retry decision: ${shouldRetry} for error: ${errorMessage}`);\n \n return shouldRetry;\n \n } catch (retryDecisionError) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Error determining retry eligibility: ${retryDecisionError instanceof Error ? retryDecisionError.message : String(retryDecisionError)}`,\n undefined,\n undefined,\n {\n method: 'shouldRetryOnError',\n originalError: error,\n retryDecisionError: {\n message: retryDecisionError instanceof Error ? retryDecisionError.message : String(retryDecisionError),\n stack: retryDecisionError instanceof Error ? retryDecisionError.stack : undefined\n }\n }\n );\n \n // Default to not retrying if we can't determine\n return false;\n }\n }\n\n /**\n * Validate that relationship field data is populated in query results\n * Simplified validation that's more predictable and easier to debug\n */\n private validateRelationshipFieldPopulation(result: any, config: RelationshipConfiguration): boolean {\n try {\n if (!result || !result.data) {\n console.warn('AmplifyModelService: Query result is missing or has no data property');\n return false;\n }\n \n const records = Array.isArray(result.data) ? result.data : [result.data];\n \n if (records.length === 0) {\n console.warn('AmplifyModelService: No records returned from query');\n return false;\n }\n \n console.log(`AmplifyModelService: Validating relationship field '${config.fieldName}' in ${records.length} records`);\n \n // Simple validation: if we have records, consider it successful\n // The actual relationship data validation will happen at the UI level\n let hasAnyData = false;\n \n for (let i = 0; i < records.length; i++) {\n const record = records[i];\n if (record && typeof record === 'object' && Object.keys(record).length > 0) {\n hasAnyData = true;\n console.log(`AmplifyModelService: Record ${i} has data:`, Object.keys(record));\n break;\n }\n }\n \n if (!hasAnyData) {\n console.warn('AmplifyModelService: No valid records found in query result');\n return false;\n }\n \n console.log(`AmplifyModelService: Relationship validation successful - found ${records.length} records with data`);\n return true;\n \n } catch (error) {\n console.error('AmplifyModelService: Error validating relationship field population:', error);\n // Be permissive on validation errors\n return true;\n }\n }\n\n /**\n * Log query attempt details\n */\n private logQueryAttempt(\n config: RelationshipConfiguration, \n selectionSet: string[], \n retryAttempt: number, \n previousErrors: string[]\n ): void {\n console.log('AmplifyModelService: Query attempt details:', {\n attempt: retryAttempt + 1,\n config: {\n relationshipModelName: config.relationshipModelName,\n fieldName: config.fieldName\n },\n selectionSet,\n previousErrors: previousErrors.length,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Log successful query details\n */\n private logQuerySuccess(\n config: RelationshipConfiguration, \n selectionSet: string[], \n retryAttempt: number, \n result: any\n ): void {\n const recordCount = result?.data ? (Array.isArray(result.data) ? result.data.length : 1) : 0;\n \n console.log('AmplifyModelService: Query successful:', {\n attempt: retryAttempt + 1,\n config: {\n relationshipModelName: config.relationshipModelName,\n fieldName: config.fieldName\n },\n selectionSet,\n recordCount,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Log query error details\n */\n private logQueryError(config: RelationshipConfiguration, error: any, retryAttempt: number): void {\n console.error('AmplifyModelService: Query error details:', {\n attempt: retryAttempt + 1,\n config: {\n relationshipModelName: config.relationshipModelName,\n baseModelName: config.baseModelName,\n fieldName: config.fieldName,\n associatedWith: config.associatedWith\n },\n error: {\n message: error instanceof Error ? error.message : String(error),\n type: typeof error,\n name: error instanceof Error ? error.name : undefined\n },\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Log final failure when all retries are exhausted\n * Enhanced with comprehensive error context and recovery suggestions\n */\n private logFinalFailure(config: RelationshipConfiguration, allErrors: string[], finalError: any): void {\n try {\n const errorSummary = {\n config: {\n relationshipModelName: config.relationshipModelName,\n baseModelName: config.baseModelName,\n fieldName: config.fieldName,\n associatedWith: config.associatedWith\n },\n totalAttempts: allErrors.length + 1,\n allErrors,\n finalError: {\n message: finalError instanceof Error ? finalError.message : String(finalError),\n type: typeof finalError,\n name: finalError instanceof Error ? finalError.name : undefined\n },\n timestamp: new Date().toISOString(),\n suggestions: [\n 'Check if the relationship model exists in your Amplify schema',\n 'Verify that the field name matches the relationship field in your model',\n 'Ensure the relationship is properly configured in your GraphQL schema',\n 'Check if there are any authorization rules preventing access to the relationship data'\n ]\n };\n\n // Log using ErrorHandlerService for comprehensive tracking\n this.errorHandler.logFailedRecovery(\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n 'All retry attempts failed for relationship query',\n config,\n undefined,\n {\n method: 'logFinalFailure',\n errorSummary\n }\n ),\n allErrors,\n finalError\n );\n\n console.error('AmplifyModelService: All retry attempts failed:', errorSummary);\n \n } catch (loggingError) {\n // Even logging failed - use basic console error\n console.error('AmplifyModelService: Critical error - failed to log final failure:', {\n originalError: finalError,\n loggingError,\n config: config?.fieldName || 'unknown'\n });\n }\n }\n\n createItemPromise(model: string, payload: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n if (this.client.models[model]) {\n return this.client.models[model].create(payload);\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n updateItemForModel(model: string, payload: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n if (this.client.models[model]) {\n return this.client.models[model].update(payload);\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n deleteItemForModel(model: string, id: string): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('AmplifyModelService: Deleting item for model:', model, 'id:', id);\n\n if (this.client.models[model]) {\n try {\n return this.client.models[model].delete({ id: id });\n } catch (error) {\n console.error(`AmplifyModelService: Error deleting item for model ${model}:`, error);\n throw error;\n }\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n getItemForModel(model: string, id: string): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('AmplifyModelService: Getting item for model:', model, 'id:', id);\n\n if (this.client.models[model]) {\n try {\n return this.client.models[model].get({ id: id });\n } catch (error) {\n console.error(`AmplifyModelService: Error getting item for model ${model}:`, error);\n throw error;\n }\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n listItemsForModel(model: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('this.listItems starting');\n \n try {\n if (this.client.models[model]) {\n return this.client.models[model].observeQuery();\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + model, error);\n return null;\n }\n }\n}","import { ChangeDetectionStrategy, Component, Input, OnInit, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n FormControl,\n FormControlName,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { CommonModule } from '@angular/common';\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\nimport { QuestionBase } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { provideNativeDateAdapter } from '@angular/material/core';\n\n\n@Component({\n selector: 'snteam-dynamic-form-question',\n standalone: true,\n providers: [provideNativeDateAdapter()],\n imports: [CommonModule, ReactiveFormsModule, ValToTitlePipe, MatFormFieldModule, MatInputModule, MatSelectModule, MatDatepickerModule],\n templateUrl: './dynamic-form-question.component.html',\n styleUrl: './dynamic-form-question.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicFormQuestionComponent implements OnInit {\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n formControlPath: string = '';\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n refInputs: string[] = [];\n form!: any;\n ctrl!: any;\n items$!: Observable<any>\n\n afbs = inject(AmplifyFormBuilderService);\n\n constructor(private rootFormGroup: FormGroupDirective, private ams: AmplifyModelService) { }\n\n ngOnInit() {\n console.log('DynamicFormQuestionComponent question', this.question);\n this.form = this.rootFormGroup.control;\n this.ctrl = this.rootFormGroup.control.get(this.question.key);\n\n if (this.question.controlType == 'async-dropdown') {\n console.log('DynamicFormQuestionComponent has async-dropdown!');\n //this.items$ = this.ams.getRefChoices(this.question.targetModel);\n }\n }\n\n showError(): string {\n return this.afbs.getErrorStrForControl(this.ctrl, this.question.label);\n }\n}","<form [formGroup]=\"form\">\n @switch (afbs.getInputTypeFromFieldType(question.controlType)) {\n @case ('materialInputs'){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\">\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('datePickerInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [matDatepicker]=\"picker\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('switchInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @for (opt of question.options; track opt) {\n <mat-option [value]=\"opt.key\">{{opt.value | valToTitle}}</mat-option>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('refInputs') {\n @if (question.multiple){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\" multiple>\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n @else {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n }\n }\n</form>","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n FormControl,\n FormControlName,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { CommonModule } from '@angular/common';\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\nimport { QuestionBase } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport {MatSelectModule} from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { provideNativeDateAdapter } from '@angular/material/core';\n\n\n@Component({\n selector: 'snteam-dynamic-nested-form-question',\n standalone: true,\n providers: [provideNativeDateAdapter()],\n imports: [CommonModule, ReactiveFormsModule, ValToTitlePipe, MatFormFieldModule, MatInputModule, MatSelectModule, MatDatepickerModule],\n templateUrl: './dynamic-nested-form-question.component.html',\n styleUrl: './dynamic-nested-form-question.component.css'\n})\nexport class DynamicNestedFormQuestionComponent {\n\n @Input() groupName!: string;\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n formControlPath: string = '';\n form!: any;\n ctrl!: any;\n items$!: Observable<any>;\n afbs = inject(AmplifyFormBuilderService);\n\n\n constructor(private rootFormGroup: FormGroupDirective) {}\n\n ngOnInit() {\n console.log('DynamicNestedFormQuestionComponent question', this.question);\n var searchKey = this.groupName;\n var controls = this.rootFormGroup.control.controls;\n var pathStr = this.afbs.getPathFromRoot(searchKey, controls)//this.getPathFromRoot();\n this.form = this.rootFormGroup.control;\n this.formControlPath = pathStr + '.' + this.question.key;\n this.ctrl = this.rootFormGroup.control.get(this.formControlPath);\n if (this.question.key == 'services') console.log('DynamicNestedFormQuestionComponent has services');\n }\n\n showError():string {\n return this.afbs.getErrorStrForControl(this.ctrl, this.question.label);\n }\n}","<form autocomplete=\"off\" [formGroup]=\"formGroup\">\n <div [formGroupName]=\"groupName\">\n\n @switch (afbs.getInputTypeFromFieldType(question.controlType)) {\n @case ('materialInputs'){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\">\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('datePickerInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [matDatepicker]=\"picker\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('switchInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @for (opt of question.options; track opt) {\n <mat-option [value]=\"opt.key\">{{opt.value | valToTitle}}</mat-option>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('refInputs') {\n @if (question.multiple){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\" multiple>\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n @else {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n }\n }\n\n\n </div>\n</form>","import { Component, Input, OnInit } from '@angular/core';\nimport {\n FormControl,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup,\n AbstractControl\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\n\nimport { MatDividerModule } from '@angular/material/divider';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { DynamicNestedFormQuestionComponent } from '../dynamic-nested-form-question/dynamic-nested-form-question.component';\n\n@Component({\n selector: 'snteam-dynamic-form-group',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule,\n MatDividerModule,\n ValToTitlePipe, DynamicNestedFormQuestionComponent],\n templateUrl: './dynamic-form-group.component.html',\n styleUrl: './dynamic-form-group.component.css'\n})\nexport class DynamicFormGroupComponent {\n @Input() formGroupName!: string;\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n refInputs: string[] = [];\n formGroupInputs: string[] = ['formgroup'];\n form!: any;\n ctrl!: any;\n\n constructor(private rootFormGroup: FormGroupDirective, private afbs: AmplifyFormBuilderService) { }\n\n getControlName(c: AbstractControl): string | null {\n if (c.parent) {\n const formGroup: any = c.parent.controls;\n return Object.keys(formGroup).find(name => c === formGroup[name]) || null;\n }\n return null;\n }\n\n getPathFromRoot(controls?: any, pathArr?: string[]): string {\n if (!controls) controls = this.rootFormGroup.control.controls;\n if (!pathArr) pathArr = [];\n\n var isInControls = Object.keys(controls).find(name => name === this.question.key);\n if (isInControls) {\n pathArr.push(this.question.key);\n return pathArr.join('.');\n } else {\n var tempArr: string[] = [];\n var entries = Object.entries(controls);\n for (let e of entries) {\n let controlName = e[0];\n let controlObj = e[1];\n if (controlObj instanceof FormGroup) {\n //if (tempArr.length > 10) return '';\n tempArr.push(controlName);\n var childControls = controls[controlName].controls;\n let childPath = this.getPathFromRoot(childControls, tempArr);\n if (childPath != '') return childPath;\n };\n }\n return '';\n }\n\n return '';\n\n }\n\n ngOnInit() {\n //console.log('DynamicFormGroupComponent key starting:', this.question.key);\n\n this.materialInputs = this.afbs.getMaterialInputs();\n this.switchInputs = this.afbs.getSwitchInputs();\n this.refInputs = this.afbs.getRefInputs();\n\n if (this.formGroupName) {\n var searchKey = this.question.key;\n var controls = this.rootFormGroup.control.controls;\n var pathStr = this.afbs.getPathFromRoot(searchKey, controls)//this.getPathFromRoot();\n this.form = this.rootFormGroup.control.get(pathStr) as FormGroup;\n var controlName = this.getControlName(this.form);\n this.ctrl = this.rootFormGroup.control.get(this.question.key);\n console.log('DynamicFormGroupComponent init vals:', {\n formGroupName: this.formGroupName,\n question: this.question,\n key: this.question.key,\n searchKey: searchKey,\n controls: controls,\n pathStr: pathStr,\n controlName: controlName,\n ctrl: this.ctrl\n })\n }\n else {\n //console.log('DynamicFormGroupComponent will get main control form');\n this.form = this.rootFormGroup.control;\n }\n //console.log('DynamicFormGroupComponent question', this.question, 'form', this.form, 'formGroupName', typeof this.formGroupName, this.formGroupName);\n }\n}","<form autocomplete=\"off\" [formGroup]=\"form\">\n <h2>{{question.key | valToTitle}}</h2>\n <mat-divider></mat-divider>\n @for (q of $any(question).questions; track q) {\n @if (q.controlType != 'formgroup') {\n <div class=\"form-row\">\n <snteam-dynamic-nested-form-question [question]=\"q\" [formGroup]=\"formGroup\" [groupName]=\"question.key\"></snteam-dynamic-nested-form-question>\n </div>\n }\n @if (q.controlType == 'formgroup') {\n <div class=\"group-row\">\n <snteam-dynamic-form-group [question]=\"q\" [formGroup]=\"form\" [formGroupName]=\"q.key\"></snteam-dynamic-form-group>\n </div>\n }\n }\n <mat-divider></mat-divider>\n</form>","import { ChangeDetectionStrategy, Component, OnInit, inject, model, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Observable } from 'rxjs';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nexport interface DialogData {\n modelItem: any;\n rel: any;\n selectedItems: any[];\n}\n\n@Component({\n selector: 'snteam-add-relationship-dialog',\n standalone: true,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n MatSelectModule,\n MatButtonModule,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,],\n templateUrl: './add-relationship-dialog.component.html',\n styleUrl: './add-relationship-dialog.component.css'\n})\nexport class AddRelationshipDialogComponent implements OnInit {\n readonly dialogRef = inject(MatDialogRef<AddRelationshipDialogComponent>);\n readonly data = inject<DialogData>(MAT_DIALOG_DATA);\n readonly modelItem = model(this.data.modelItem);\n private ams = inject(AmplifyModelService);\n items$!: Observable<any>;\n\n ngOnInit() {\n console.log('AddRelationshipDialogComponent init this.data', this.data);\n let selectedIdsArr: string[] = [];\n if (this.data.selectedItems && this.data.selectedItems.length > 0){\n this.data.selectedItems.forEach(item => {\n console.log('item', item, 'this.data.rel', this.data.rel);\n selectedIdsArr.push(item[this.data.rel.fieldName].id);\n });\n }\n console.log('AddRelationshipDialogComponent selectedIdsArr', selectedIdsArr);\n const relationshipChoices = this.ams.getRelationshipChoices(this.data.rel, selectedIdsArr);\n if (relationshipChoices) {\n this.items$ = relationshipChoices;\n }\n console.log('AddRelationshipDialogComponent this.items$', this.items$);\n }\n\n onNoClick(): void {\n this.dialogRef.close();\n }\n}","<h2 mat-dialog-title>Add New {{data.rel.partnerModelName}}</h2>\n<mat-dialog-content>\n <mat-select [(ngModel)]=\"modelItem\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n</mat-dialog-content>\n<mat-dialog-actions>\n <button mat-button (click)=\"onNoClick()\">Cancel</button>\n <button mat-button [mat-dialog-close]=\"modelItem()\" cdkFocusInitial>Add</button>\n</mat-dialog-actions>","import { Component, Input, OnInit, ChangeDetectionStrategy, inject, model, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { ErrorHandlerService } from '../../services/error-handler.service';\nimport { SelectionSetErrorType } from '../../types/error.types';\n\nimport { AddRelationshipDialogComponent } from '../add-relationship-dialog/add-relationship-dialog.component';\n\n// Note: These imports will need to be updated based on the actual Amplify setup in the consuming application\n// import type { Schema } from '../../../../amplify/data/resource';\n// import outputs from '../../../../amplify_outputs.json';\n\n@Component({\n selector: 'snteam-dynamic-relationship-builder',\n standalone: true,\n imports: [MatToolbarModule, MatButtonModule, MatIconModule, MatFormFieldModule, MatInputModule, MatListModule,\n FormsModule,\n CommonModule],\n templateUrl: './dynamic-relationship-builder.component.html',\n styleUrl: './dynamic-relationship-builder.component.css'\n})\nexport class DynamicRelationshipBuilderComponent implements OnInit {\n @Input() m2m!: any;\n @Input() item!: any;\n @Input() model!: string;\n\n m2mItems: any[] = [];\n errorMessage: string = '';\n isLoading: boolean = false;\n\n constructor(\n private ams: AmplifyModelService,\n private errorHandler: ErrorHandlerService\n ) { }\n\n modelItem!: any;// = signal('');\n readonly dialog = inject(MatDialog);\n\n ngOnInit() {\n try {\n console.log('DynamicRelationshipBuilderComponent initializing with m2m config:', this.m2m);\n \n // Validate required inputs with comprehensive error logging\n if (!this.m2m) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Relationship configuration (m2m) is missing',\n undefined,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'ngOnInit',\n hasItem: !!this.item,\n hasModel: !!this.model\n }\n );\n this.setError('Relationship configuration is missing');\n return;\n }\n \n if (!this.item || !this.item.id) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Item data is missing or invalid (no ID)',\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'ngOnInit',\n hasItem: !!this.item,\n itemId: this.item?.id,\n hasModel: !!this.model\n }\n );\n this.setError('Item data is missing or invalid');\n return;\n }\n \n // Validate m2m configuration structure\n const requiredM2MFields = ['relationshipModelName', 'fieldName', 'baseModelName', 'associatedWith'];\n const missingFields = requiredM2MFields.filter(field => !this.m2m[field]);\n \n if (missingFields.length > 0) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n `M2M configuration is missing required fields: ${missingFields.join(', ')}`,\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'ngOnInit',\n missingFields,\n providedFields: Object.keys(this.m2m || {})\n }\n );\n this.setError(`Configuration is incomplete: missing ${missingFields.join(', ')}`);\n return;\n }\n \n this.clearError();\n console.log('DynamicRelationshipBuilderComponent: Configuration validated successfully');\n \n // Initialize relationship data loading\n this.listItems();\n this.setCreateSubscription();\n \n } catch (error) {\n const componentError = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Unexpected error during component initialization: ${error instanceof Error ? error.message : String(error)}`,\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'ngOnInit',\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error('DynamicRelationshipBuilderComponent: Critical initialization error:', error);\n this.setError('Failed to initialize relationship component');\n }\n }\n\n /**\n * Set error message and clear loading state\n * Enhanced with comprehensive error context logging\n */\n private setError(message: string, additionalContext?: Record<string, any>): void {\n try {\n this.errorMessage = message;\n this.isLoading = false;\n \n // Log error with context using ErrorHandlerService\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Component error: ${message}`,\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'setError',\n userMessage: message,\n componentState: {\n hasM2M: !!this.m2m,\n hasItem: !!this.item,\n itemId: this.item?.id,\n m2mItemsCount: Array.isArray(this.m2mItems) ? this.m2mItems.length : 0,\n isLoading: this.isLoading\n },\n ...additionalContext\n }\n );\n \n console.error('DynamicRelationshipBuilderComponent error:', {\n message,\n context: additionalContext,\n timestamp: new Date().toISOString()\n });\n \n } catch (loggingError) {\n // Fallback if even error logging fails\n console.error('DynamicRelationshipBuilderComponent: Critical error in setError:', {\n originalMessage: message,\n loggingError,\n timestamp: new Date().toISOString()\n });\n \n this.errorMessage = message;\n this.isLoading = false;\n }\n }\n\n /**\n * Clear error message and log recovery\n */\n private clearError(): void {\n if (this.errorMessage) {\n console.log('DynamicRelationshipBuilderComponent: Clearing previous error:', this.errorMessage);\n }\n this.errorMessage = '';\n }\n\n /**\n * Get display name for a relationship item, handling various field names\n */\n getDisplayName(relationshipItem: any): string {\n if (!relationshipItem) {\n return 'Unknown item';\n }\n \n // Try common display field names\n return relationshipItem.name || \n relationshipItem.title || \n relationshipItem.label || \n relationshipItem.displayName ||\n `Item ${relationshipItem.id || 'Unknown'}`;\n }\n\n /**\n * Get display name for items with partial or missing relationship data\n */\n getPartialDisplayName(item: any): string {\n if (!item) {\n return 'Unknown item';\n }\n \n // If we have an ID, show it\n if (item.id) {\n return `Item ${item.id} (incomplete data)`;\n }\n \n return 'Incomplete relationship data';\n }\n\n /**\n * Check if an item has complete relationship data\n */\n hasCompleteRelationshipData(item: any): boolean {\n if (!item || !this.m2m?.fieldName) {\n return false;\n }\n \n const relationshipData = item[this.m2m.fieldName];\n return relationshipData && (relationshipData.name || relationshipData.title || relationshipData.id);\n }\n\n /**\n * Check if an item has partial relationship data (item exists but relationship data is incomplete)\n */\n hasPartialRelationshipData(item: any): boolean {\n if (!item || !item.id) {\n return false;\n }\n \n return !this.hasCompleteRelationshipData(item);\n }\n\n /**\n * Get loading state indicator for relationship data\n */\n getRelationshipLoadingState(item: any): 'complete' | 'partial' | 'missing' | 'loading' {\n if (!item) {\n return 'missing';\n }\n \n if (this.isLoading) {\n return 'loading';\n }\n \n if (this.hasCompleteRelationshipData(item)) {\n return 'complete';\n }\n \n if (item.id) {\n return 'partial';\n }\n \n return 'missing';\n }\n\n /**\n * Get appropriate CSS class for relationship item based on data completeness\n */\n getRelationshipItemClass(item: any): string {\n const state = this.getRelationshipLoadingState(item);\n return `relationship-item relationship-item--${state}`;\n }\n\n /**\n * Get tooltip text for relationship items based on their data state\n */\n getRelationshipTooltip(item: any): string {\n const state = this.getRelationshipLoadingState(item);\n \n switch (state) {\n case 'complete':\n return 'Complete relationship data loaded';\n case 'partial':\n return 'Relationship exists but some data is missing or failed to load';\n case 'loading':\n return 'Loading relationship data...';\n case 'missing':\n return 'No relationship data available';\n default:\n return '';\n }\n }\n\n /**\n * Get summary of data states for all relationship items\n */\n getDataStateSummary(): {\n completeCount: number;\n partialCount: number;\n missingCount: number;\n hasPartialOrMissing: boolean;\n } {\n if (!Array.isArray(this.m2mItems)) {\n return {\n completeCount: 0,\n partialCount: 0,\n missingCount: 0,\n hasPartialOrMissing: false\n };\n }\n\n let completeCount = 0;\n let partialCount = 0;\n let missingCount = 0;\n\n this.m2mItems.forEach(item => {\n const state = this.getRelationshipLoadingState(item);\n switch (state) {\n case 'complete':\n completeCount++;\n break;\n case 'partial':\n partialCount++;\n break;\n case 'missing':\n missingCount++;\n break;\n }\n });\n\n return {\n completeCount,\n partialCount,\n missingCount,\n hasPartialOrMissing: partialCount > 0 || missingCount > 0\n };\n }\n\n async perhapsAddM2MItem(item: any) {\n try {\n if (!item || !item.id) {\n console.warn('Invalid item received in perhapsAddM2MItem:', item);\n return;\n }\n\n let m2mItem: any = { id: item.id };\n \n // Safely attempt to get relationship data\n if (this.m2m?.fieldName && typeof item[this.m2m.fieldName] === 'function') {\n try {\n const { data: retItem } = await item[this.m2m.fieldName]();\n m2mItem[this.m2m.fieldName] = retItem;\n } catch (relationshipError) {\n console.warn('Failed to load relationship data for item:', item.id, relationshipError);\n // Keep the item but mark it as having incomplete data\n m2mItem[this.m2m.fieldName] = null;\n }\n } else {\n console.warn('Invalid fieldName or item method for relationship:', this.m2m?.fieldName);\n m2mItem[this.m2m.fieldName] = null;\n }\n\n // Ensure m2mItems is initialized as array\n if (!Array.isArray(this.m2mItems)) {\n this.m2mItems = [];\n }\n\n let existingInd = this.m2mItems.findIndex((x: any) => x?.id === item.id);\n if (existingInd > -1) {\n if (!this.m2mItems[existingInd][this.m2m.fieldName]) {\n console.log('Removing existing item with no relationship data', this.m2mItems[existingInd]);\n this.m2mItems.splice(existingInd, 1);\n }\n }\n \n this.m2mItems.push(m2mItem);\n } catch (error) {\n console.error('Error in perhapsAddM2MItem:', error);\n // Don't let individual item errors break the entire component\n }\n }\n\n setCreateSubscription() {\n try {\n if (!this.m2m || !this.item?.id) {\n console.warn('Cannot set subscription: missing m2m or item.id');\n return;\n }\n\n const subscription = this.ams.setRelatedSub(this.m2m, this.item.id);\n if (subscription) {\n subscription.subscribe({\n next: (data) => {\n this.perhapsAddM2MItem(data);\n },\n error: (error) => {\n console.warn('Subscription error for related items:', error);\n this.setError('Failed to receive real-time updates for relationships');\n },\n });\n } else {\n console.warn('Failed to create subscription for related items');\n }\n } catch (error) {\n console.error('Error setting up subscription:', error);\n this.setError('Failed to set up real-time updates');\n }\n }\n\n listItems() {\n try {\n if (!this.m2m || !this.item?.id) {\n const error = 'Cannot load relationships: missing configuration or item data';\n this.setError(error, {\n method: 'listItems',\n hasM2M: !!this.m2m,\n hasItem: !!this.item,\n itemId: this.item?.id\n });\n return;\n }\n\n this.isLoading = true;\n this.clearError();\n\n console.log('DynamicRelationshipBuilderComponent: Loading relationship items for:', {\n relationshipModel: this.m2m.relationshipModelName,\n fieldName: this.m2m.fieldName,\n itemId: this.item.id\n });\n\n const observable = this.ams.getRelatedItems(this.m2m, this.item.id);\n if (observable) {\n observable.subscribe({\n next: ({ items, isSynced }) => {\n try {\n this.isLoading = false;\n \n // Ensure items is an array\n if (Array.isArray(items)) {\n this.m2mItems = items;\n console.log('DynamicRelationshipBuilderComponent: Successfully loaded relationship items:', {\n count: items.length,\n isSynced,\n sampleItem: items[0] ? Object.keys(items[0]) : []\n });\n } else {\n console.warn('DynamicRelationshipBuilderComponent: Received non-array items:', items);\n this.m2mItems = [];\n \n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n 'Received non-array items from relationship query',\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'listItems',\n receivedType: typeof items,\n receivedValue: items,\n isSynced\n }\n );\n }\n \n // Analyze data quality\n const dataStateSummary = this.getDataStateSummary();\n if (dataStateSummary.hasPartialOrMissing) {\n console.warn('DynamicRelationshipBuilderComponent: Some relationship data is incomplete:', dataStateSummary);\n }\n \n } catch (processingError) {\n this.isLoading = false;\n const error = `Error processing relationship data: ${processingError instanceof Error ? processingError.message : String(processingError)}`;\n \n this.setError('Failed to process relationship data', {\n method: 'listItems',\n step: 'data_processing',\n originalError: {\n message: processingError instanceof Error ? processingError.message : String(processingError),\n stack: processingError instanceof Error ? processingError.stack : undefined\n }\n });\n \n this.m2mItems = [];\n }\n },\n error: (error) => {\n this.isLoading = false;\n \n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error('DynamicRelationshipBuilderComponent: Error loading relationship items:', error);\n \n // Log comprehensive error details\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Failed to load relationship data: ${errorMessage}`,\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'listItems',\n step: 'observable_error',\n originalError: {\n message: errorMessage,\n stack: error instanceof Error ? error.stack : undefined,\n name: error instanceof Error ? error.name : undefined\n },\n itemId: this.item.id\n }\n );\n \n this.setError('Failed to load relationship data. Please try refreshing the page.', {\n method: 'listItems',\n originalError: errorMessage\n });\n \n // Initialize empty array so component doesn't break\n this.m2mItems = [];\n }\n });\n } else {\n this.isLoading = false;\n \n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n 'AmplifyModelService returned null observable for relationship query',\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'listItems',\n step: 'observable_creation',\n itemId: this.item.id\n }\n );\n \n this.setError('Unable to create relationship query', {\n method: 'listItems',\n step: 'observable_creation'\n });\n this.m2mItems = [];\n }\n } catch (error) {\n this.isLoading = false;\n \n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error('DynamicRelationshipBuilderComponent: Critical error in listItems:', error);\n \n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Critical error in listItems: ${errorMessage}`,\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'listItems',\n step: 'critical_error',\n originalError: {\n message: errorMessage,\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n this.setError('An unexpected error occurred while loading relationships', {\n method: 'listItems',\n originalError: errorMessage\n });\n this.m2mItems = [];\n }\n }\n\n /**\n Customize this function to include all desired models from your file\n */\n setModelItem(model?: string) {\n let mdl = model || this.model;\n console.log('setModelItem mdl', mdl);\n this.modelItem = signal<any>(this.ams.getEmptyObjectForModel(mdl));\n }\n\n async deleteRelatedItem(item: any) {\n try {\n if (!item || !item.id) {\n console.warn('Cannot delete item: invalid item data', item);\n this.setError('Cannot delete item: invalid data');\n return;\n }\n\n if (!this.m2m?.relationshipModelName) {\n console.warn('Cannot delete item: missing relationship model name');\n this.setError('Cannot delete item: missing configuration');\n return;\n }\n\n console.log('deleteRelatedItem for item', item, 'm2m', this.m2m);\n \n await this.ams.deleteRelationship(this.m2m.relationshipModelName, item.id);\n \n // Remove item from local array on successful deletion\n if (Array.isArray(this.m2mItems)) {\n const index = this.m2mItems.findIndex(x => x?.id === item.id);\n if (index > -1) {\n this.m2mItems.splice(index, 1);\n }\n }\n \n } catch (error) {\n console.error('Error deleting relationship item:', error);\n this.setError('Failed to delete relationship. Please try again.');\n }\n }\n\n openDialog(rel: any): void {\n try {\n if (!rel) {\n console.warn('Cannot open dialog: missing relationship configuration');\n this.setError('Cannot add relationship: missing configuration');\n return;\n }\n\n console.log('openDialog clicked for rel', rel);\n this.setModelItem(rel.partnerModelName);\n\n const dialogRef = this.dialog.open(AddRelationshipDialogComponent, {\n data: { rel: rel, modelItem: this.modelItem(), selectedItems: this.m2mItems || [] },\n });\n\n dialogRef.afterClosed().subscribe({\n next: (result) => {\n if (result) {\n this.handleDialogResult(result, rel);\n }\n },\n error: (error) => {\n console.error('Dialog error:', error);\n this.setError('An error occurred while adding the relationship');\n }\n });\n } catch (error) {\n console.error('Error opening dialog:', error);\n this.setError('Failed to open relationship dialog');\n }\n }\n\n handleDialogResult(result: any, rel: any) {\n try {\n if (!result) {\n return;\n }\n\n if (!rel || !this.item?.id) {\n console.warn('Cannot handle dialog result: missing relationship or item data');\n this.setError('Cannot create relationship: missing data');\n return;\n }\n\n console.log('handleDialogResult', result, 'rel', rel);\n \n if (result !== undefined) {\n this.modelItem.set(result);\n }\n\n let relIdName = rel.partnerModelName?.toLowerCase() + 'Id';\n let thisIdName = rel.baseModelName?.toLowerCase() + 'Id';\n\n if (!relIdName || !thisIdName) {\n console.warn('Cannot determine relationship field names');\n this.setError('Cannot create relationship: invalid configuration');\n return;\n }\n\n let newRelObj: any = {};\n newRelObj[relIdName] = result.id;\n newRelObj[thisIdName] = this.item.id;\n\n const createPromise = this.ams.createRelationship(rel.relationshipModelName, newRelObj);\n if (createPromise) {\n createPromise.catch((error: any) => {\n console.error('Error creating relationship:', error);\n this.setError('Failed to create relationship. Please try again.');\n });\n } else {\n console.warn('Failed to create relationship: service returned null');\n this.setError('Failed to create relationship. Please try again.');\n }\n \n } catch (error) {\n console.error('Error handling dialog result:', error);\n this.setError('An error occurred while creating the relationship');\n }\n }\n}","<div class=\"record-relationship-holder\">\n <div class=\"relationship-type\">\n <mat-toolbar>\n <span>{{m2m?.partnerModelName || 'Unknown'}} Management</span>\n <span class=\"rel-title-spacer\"></span>\n <button mat-icon-button [attr.aria-label]=\"'Add ' + (m2m?.name || 'item')\" (click)=\"openDialog(m2m)\" [disabled]=\"!m2m\">\n <mat-icon>add</mat-icon>\n </button>\n </mat-toolbar>\n \n <!-- Error message display -->\n @if (errorMessage) {\n <div class=\"error-message\" role=\"alert\">\n <mat-icon>error</mat-icon>\n <span>{{ errorMessage }}</span>\n </div>\n }\n \n <!-- Loading state -->\n @if (isLoading) {\n <div class=\"loading-message\">\n <mat-icon>hourglass_empty</mat-icon>\n <span>Loading relationships...</span>\n </div>\n }\n \n <!-- Relationship items display -->\n @if (m2mItems && m2mItems.length > 0) {\n <mat-list>\n @for (item of m2mItems; track item?.id) {\n <mat-list-item [class]=\"getRelationshipItemClass(item)\" [title]=\"getRelationshipTooltip(item)\">\n @if (hasCompleteRelationshipData(item)) {\n <!-- Complete relationship data -->\n <span matListItemTitle>{{ getDisplayName(item[m2m.fieldName]) }}</span>\n <span matListItemLine class=\"relationship-status complete\">Complete data</span>\n <button mat-icon-button (click)=\"deleteRelatedItem(item)\" matListItemMeta [attr.aria-label]=\"'Delete ' + getDisplayName(item[m2m.fieldName])\">\n <mat-icon>delete</mat-icon>\n </button>\n } @else if (hasPartialRelationshipData(item)) {\n <!-- Partial relationship data -->\n <span matListItemTitle class=\"partial-data\">\n {{ getPartialDisplayName(item) }}\n <mat-icon class=\"warning-icon\" title=\"Incomplete relationship data\">warning</mat-icon>\n </span>\n <span matListItemLine class=\"relationship-status partial\">Partial data - some information may be missing</span>\n <button mat-icon-button (click)=\"deleteRelatedItem(item)\" matListItemMeta [attr.aria-label]=\"'Delete incomplete item'\">\n <mat-icon>delete</mat-icon>\n </button>\n } @else {\n <!-- Missing or invalid relationship data -->\n <span matListItemTitle class=\"missing-data\">\n Invalid relationship data\n <mat-icon class=\"error-icon\" title=\"Invalid or missing data\">error</mat-icon>\n </span>\n <span matListItemLine class=\"relationship-status missing\">Data could not be loaded</span>\n <button mat-icon-button (click)=\"deleteRelatedItem(item)\" matListItemMeta [attr.aria-label]=\"'Delete invalid item'\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </mat-list-item>\n }\n </mat-list>\n \n <!-- Summary of data states -->\n @if (getDataStateSummary().hasPartialOrMissing) {\n <div class=\"data-summary\">\n <mat-icon>info</mat-icon>\n <span>\n {{ getDataStateSummary().completeCount }} of {{ m2mItems.length }} relationships loaded completely.\n @if (getDataStateSummary().partialCount > 0) {\n {{ getDataStateSummary().partialCount }} have partial data.\n }\n @if (getDataStateSummary().missingCount > 0) {\n {{ getDataStateSummary().missingCount }} failed to load.\n }\n </span>\n </div>\n }\n } @else if (!isLoading && !errorMessage) {\n <div class=\"empty-state\">\n Add your first {{ m2m?.partnerModelName || 'item' }}\n </div>\n }\n </div>\n</div>","import { Component, Input, OnInit, ChangeDetectionStrategy, inject, model, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nimport { DynamicRelationshipBuilderComponent } from '../dynamic-relationship-builder/dynamic-relationship-builder.component';\nimport { AddRelationshipDialogComponent } from '../add-relationship-dialog/add-relationship-dialog.component';\n\n// Note: These imports will need to be updated based on the actual Amplify setup in the consuming application\n// import type { Schema } from '../../../../amplify/data/resource';\n// import outputs from '../../../../amplify_outputs.json';\n\n@Component({\n selector: 'snteam-record-relationships',\n standalone: true,\n imports: [MatToolbarModule, MatButtonModule, MatIconModule, MatFormFieldModule, MatInputModule, MatListModule,\n DynamicRelationshipBuilderComponent,\n FormsModule,\n CommonModule],\n templateUrl: './record-relationships.component.html',\n styleUrl: './record-relationships.component.css'\n})\nexport class RecordRelationshipsComponent implements OnInit {\n\n @Input() model: string = '';\n @Input() id?: string;\n @Input() item?: any;\n @Input() amplifyOutputs?: any; // Allow injection of amplify outputs\n\n constructor(private ams: AmplifyModelService) { }\n\n m2mDetailArrays: any[] = [];\n\n //readonly animal = signal('');\n modelItem!: any;// = signal('');\n readonly dialog = inject(MatDialog);\n\n ngOnInit() {\n console.log('RecordRelationshipsComponent: Starting ngOnInit for model:', this.model, 'id:', this.id, 'item:', this.item);\n\n if (!this.amplifyOutputs) {\n console.warn('RecordRelationshipsComponent: amplifyOutputs not provided. Component may not function correctly.');\n return;\n }\n\n console.log('RecordRelationshipsComponent: Processing model introspection for model:', this.model);\n console.log('RecordRelationshipsComponent: Available models:', Object.keys(this.amplifyOutputs.data.model_introspection.models));\n \n const modelData = this.amplifyOutputs.data.model_introspection.models[this.model as keyof typeof this.amplifyOutputs.data.model_introspection.models];\n if (!modelData) {\n console.error('RecordRelationshipsComponent: Model not found:', this.model);\n return;\n }\n \n console.log('RecordRelationshipsComponent: Model data found:', modelData);\n var fields = modelData.fields;\n var values = Object.values(fields);\n\n console.log('RecordRelationshipsComponent: Processing', values.length, 'fields');\n\n for (var v in values) {\n var fieldObj: any = values[v];\n console.log('RecordRelationshipsComponent: Processing field:', fieldObj.name, 'type:', fieldObj.type);\n \n if (typeof fieldObj.type != 'object') {\n console.log('RecordRelationshipsComponent: Skipping non-object field:', fieldObj.name);\n continue;\n }\n if (!fieldObj.type.model) {\n console.log('RecordRelationshipsComponent: Skipping non-model field:', fieldObj.name);\n continue;\n }\n\n // Skip BELONGS_TO relationships - only process HAS_MANY relationships\n if (fieldObj.association && fieldObj.association.connectionType === 'BELONGS_TO') {\n console.log('RecordRelationshipsComponent: Skipping BELONGS_TO relationship field:', fieldObj.name);\n continue;\n }\n\n console.log('RecordRelationshipsComponent: Found relationship field:', fieldObj.name, 'to model:', fieldObj.type.model);\n\n try {\n let m2mDetails = this.getDetailsForManyToMany(fieldObj, this.model);\n console.log('RecordRelationshipsComponent: m2mDetails result:', m2mDetails);\n\n if (m2mDetails) {\n this.m2mDetailArrays.push(m2mDetails);\n console.log('RecordRelationshipsComponent: Added to m2mDetailArrays, total count:', this.m2mDetailArrays.length);\n }\n } catch (error) {\n console.error('RecordRelationshipsComponent: Error processing field:', fieldObj.name, 'Error:', error);\n }\n }\n console.log('RecordRelationshipsComponent: Final m2mDetailArrays:', this.m2mDetailArrays);\n }\n\n /**\n Customize this function to include all desired models from your file\n */\n setModelItem(model?: string) {\n let mdl = model || this.model;\n console.log('setModelItem mdl', mdl);\n signal<any>(this.ams.getEmptyObjectForModel(mdl));\n }\n\n getFieldNameForAssociatedWithModel(relationshipModelName: string, associatedWith: string) {\n if (!this.amplifyOutputs) return;\n \n var relationshipModel = this.amplifyOutputs.data.model_introspection.models[relationshipModelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n console.log('getFieldNameForAssociatedWithModel relationshipModel', relationshipModel);\n var fieldVals = Object.values(relationshipModel);\n for (let field of fieldVals) {\n const fieldAny = field as any;\n console.log('getFieldNameForAssociatedWithModel field', field);\n if (!fieldAny.association) continue;\n if (!fieldAny.association.targetNames || !Array.isArray(fieldAny.association.targetNames)) continue;\n if (fieldAny.association.targetNames.indexOf(associatedWith) === -1) continue;\n // there should only be two fields with associations.\n // if we get here we are in the field we want\n return fieldAny.name;\n }\n }\n\n getDetailsForManyToMany(fieldObj: any, baseModelName: string): any {\n if (!this.amplifyOutputs) return null;\n \n console.log('RecordRelationshipsComponent: getDetailsForManyToMany starting for field:', fieldObj.name, 'baseModel:', baseModelName);\n \n let relationshipModelName = fieldObj.type.model;\n console.log('RecordRelationshipsComponent: relationshipModelName:', relationshipModelName);\n \n // Add null check for associatedWith\n if (!fieldObj.association || !fieldObj.association.associatedWith || !Array.isArray(fieldObj.association.associatedWith) || fieldObj.association.associatedWith.length === 0) {\n console.warn('RecordRelationshipsComponent: associatedWith is not available or empty for field', fieldObj.name, 'association:', fieldObj.association);\n return null;\n }\n \n let associatedWith = fieldObj.association.associatedWith[0];\n console.log('RecordRelationshipsComponent: associatedWith:', associatedWith);\n\n console.log('RecordRelationshipsComponent: Calling getFieldNameForAssociatedWithModel');\n let fieldName = this.getFieldNameForAssociatedWithModel(relationshipModelName, associatedWith);\n console.log('RecordRelationshipsComponent: fieldName result:', fieldName);\n\n // TODO: MAKE THIS AUTO REFRESH... maybe make this a signal?\n let ret: any = {\n relationshipModelName: relationshipModelName,\n baseModelName: baseModelName,\n fieldName: fieldName,\n associatedWith: associatedWith\n }\n \n console.log('RecordRelationshipsComponent: Getting relationship model fields for:', relationshipModelName);\n var relationshipModel = this.amplifyOutputs.data.model_introspection.models[relationshipModelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n console.log('RecordRelationshipsComponent: relationshipModel fields:', relationshipModel);\n\n var vals = Object.values(relationshipModel);\n console.log('RecordRelationshipsComponent: Processing', vals.length, 'relationship model fields');\n \n for (var i in vals) {\n const val: any = vals[i];\n console.log('RecordRelationshipsComponent: Processing relationship field:', val.name, 'type:', val.type);\n \n if (typeof val.type != 'object') {\n console.log('RecordRelationshipsComponent: Skipping non-object relationship field:', val.name);\n continue;\n }\n if (!val.type.model) {\n console.log('RecordRelationshipsComponent: Skipping non-model relationship field:', val.name);\n continue;\n }\n if (val.type.model == baseModelName) {\n console.log('RecordRelationshipsComponent: Skipping self-reference field:', val.name);\n continue;\n }\n\n console.log('RecordRelationshipsComponent: Found partner model field:', val.name, 'model:', val.type.model);\n var modelName = val.type.model;\n let refModel = this.amplifyOutputs.data.model_introspection.models[modelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n console.log('RecordRelationshipsComponent: Partner model fields:', refModel);\n\n ret.partnerModelName = modelName;\n console.log('RecordRelationshipsComponent: Set partnerModelName to:', modelName);\n //this.ams.getRelatedItems(ret, this.item.id);\n }\n console.log('RecordRelationshipsComponent: getDetailsForManyToMany final result:', ret);\n return ret;\n }\n\n deleteRelatedItem(item: any) {\n console.log('deleteRelatedItem for item', item);\n }\n\n openDialog(rel: any): void {\n console.log('openDialog clicked for rel', rel);\n this.setModelItem(rel.partnerModelName);\n\n const dialogRef = this.dialog.open(AddRelationshipDialogComponent, {\n data: { rel: rel, modelItem: this.modelItem() },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n this.handleDialogResult(result, rel);\n });\n }\n\n handleDialogResult(result: any, rel: any) {\n console.log('handleDialogResult', result, 'rel', rel);\n if (result !== undefined) {\n this.modelItem.set(result);\n }\n\n let relIdName = rel.partnerModelName.toLowerCase() + 'Id';\n let thisIdName = rel.baseModelName.toLowerCase() + 'Id';\n\n let newRelObj: any = {};\n newRelObj[relIdName] = result.id;\n newRelObj[thisIdName] = this.id || this.item.id;\n\n this.ams.createRelationship(rel.relationshipModelName, newRelObj);\n }\n}","<div class=\"relationship-builder-holder\">\n @if(item){\n <div class=\"relationship-builder\">\n @for (m2m of m2mDetailArrays; track m2m) {\n <snteam-dynamic-relationship-builder [m2m]=\"m2m\" [item]=\"item\" [model]=\"model\"></snteam-dynamic-relationship-builder>\n }\n </div>\n }\n @else {\n <div class=\"blank-relationship-builder\">Create the {{model}} first, then add relationships</div>\n }\n</div>","import { FormControl, FormGroup, Validators, ValidatorFn } from '@angular/forms';\n\nexport class QuestionBase<T> {\n model: string;\n value: T | undefined;\n key: string;\n label: string;\n required: boolean;\n order: number;\n controlType: string;\n type: string;\n options: { key: string, value: string }[];\n tooltip?: string;\n validators?: ValidatorFn[];\n\n constructor(options: {\n model?: string;\n value?: T;\n key?: string;\n label?: string;\n required?: boolean;\n order?: number;\n controlType?: string;\n type?: string;\n options?: { key: string, value: string }[];\n tooltip?: string;\n validators?: ValidatorFn[];\n } = {}) {\n this.model = options.model || '';\n this.value = options.value;\n this.key = options.key || '';\n this.label = options.label || '';\n this.required = !!options.required;\n this.order = options.order === undefined ? 1 : options.order;\n this.controlType = options.controlType || '';\n this.type = options.type || '';\n this.options = options.options || [];\n this.tooltip = options.tooltip || '';\n this.validators = options.validators;\n }\n}\n\nexport class TimePickerQuestion<T> extends QuestionBase<T> {\n override controlType = 'time';\n\n constructor(options: any = {}) {\n super(options);\n }\n}\n\nexport class DatePickerQuestion<T> extends QuestionBase<T> {\n override controlType = 'date';\n min: Date;\n max: Date;\n startDate: Date;\n\n constructor(options: any = {}) {\n super(options);\n this.min = new Date(options['min']) ?? new Date('January 01, 1900 00:00:00');\n var thisYear = new Date().getUTCFullYear;\n this.max = new Date(options['max']) ?? new Date('December 31 ' + thisYear + ' 23:59:59');\n this.startDate = new Date(options['startDate']) ?? new Date();\n }\n}\n\nexport class DateTimePickerQuestion<T> extends QuestionBase<T> {\n override controlType = 'date-time';\n min: Date;\n max: Date;\n startDate: Date;\n\n constructor(options: any = {}) {\n super(options);\n this.min = new Date(options['min']) ?? new Date('January 01, 1900 00:00:00');\n var thisYear = new Date().getUTCFullYear;\n this.max = new Date(options['max']) ?? new Date('December 31 ' + thisYear + ' 23:59:59');\n this.startDate = new Date(options['startDate']) ?? new Date();\n }\n}\n\nexport class SliderQuestion<T> extends QuestionBase<T> {\n override controlType = 'slider';\n min: number;\n max: number;\n\n constructor(options: any = {}) {\n super(options);\n this.min = options['min'] || 0;\n this.max = options['max'] || 100;\n }\n}\n\nexport class NumberQuestion<T> extends QuestionBase<T> {\n override controlType = 'number';\n}\n\nexport class TextboxQuestion<T> extends QuestionBase<T> {\n override controlType = 'textbox';\n}\n\nexport class EmailQuestion<T> extends QuestionBase<T> {\n override controlType = 'email';\n}\n\nexport class PhoneQuestion<T> extends QuestionBase<T> {\n override controlType = 'tel';\n}\n\nexport class DropdownQuestion<T> extends QuestionBase<T> {\n override controlType = 'dropdown';\n}\n\nexport class AsyncDropdownQuestion<T> extends QuestionBase<T> {\n override controlType = 'async-dropdown';\n targetModel: string;\n multiple: boolean;\n ddbKey: string;\n \n constructor(options: any = {}) {\n super(options);\n this.targetModel = options['targetModel'];\n this.multiple = options['multiple'];\n this.ddbKey = options['ddbKey'];\n }\n}\n\nexport class FormGroupQuestion<T> extends QuestionBase<T> {\n override controlType = 'formgroup';\n formGroup: FormGroup;\n questions: QuestionBase<T>[] | null = [];\n \n constructor(options: any = {}) {\n super(options);\n this.formGroup = options['formGroup'];\n this.questions = options['questions'];\n }\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n// Simple phone number validator (can be customized further)\nexport function phoneNumberValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const phoneNumber = control.value;\n\n // Use a regular expression to validate the phone number format\n const regex = /^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$/;\n if (!phoneNumber || regex.test(phoneNumber)) {\n return null; // Valid phone number\n } else {\n return { invalidPhoneNumber: true }; // Invalid phone number\n }\n };\n}","import { Injectable } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n QuestionBase,\n TextboxQuestion,\n NumberQuestion,\n DatePickerQuestion,\n DropdownQuestion,\n AsyncDropdownQuestion,\n FormGroupQuestion,\n PhoneQuestion,\n EmailQuestion\n} from '../classes/questions';\n\nimport { phoneNumberValidator } from '../classes/validators';\nimport { AmplifyModelService } from './amplify-model.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class QuestionControlService {\n\n private outputs: any;\n\n constructor(private ams: AmplifyModelService) { }\n\n /**\n * Initialize the service with Amplify outputs\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeOutputs(outputs: any) {\n console.log('QuestionControlService: initializeOutputs called with:', outputs);\n this.outputs = outputs;\n console.log('QuestionControlService: outputs stored:', this.outputs);\n }\n\n getFieldForFieldObj(fieldObj: any, model: any): QuestionBase<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n console.log('getFieldForFieldObj starting for type', fieldObj.type, 'fieldObj', fieldObj);\n \n switch (fieldObj.type) {\n case 'String':\n return this._addStringQuestion(fieldObj, model);\n case 'Int':\n case 'Float':\n return this._addNumberQuestion(fieldObj, model);\n case 'AWSDate':\n case 'AWSDateTime':\n return this._addDatePickerQuestion(fieldObj, model);\n case 'AWSEmail':\n return this._addEmailQuestion(fieldObj, model);\n case 'AWSPhone':\n return this._addPhoneQuestion(fieldObj, model);\n }\n\n if (typeof fieldObj.type === 'object') {\n if (fieldObj.type.model) {\n return this.getRefModel(fieldObj, model);\n }\n if (fieldObj.type.nonModel) {\n let groupQuestions = this.getNonModelQuestions(fieldObj, model);\n var formGroup = this.toFormGroup(groupQuestions);\n return this._addFormGroupQuestion(fieldObj, formGroup, groupQuestions);\n }\n if (fieldObj.type.enum) {\n return this.getEnumQuestion(fieldObj, model);\n }\n }\n\n return null;\n }\n\n getLabelForFieldName(name: string): string {\n return name.toLowerCase().split('_').map((word: string) => {\n return word.charAt(0).toUpperCase() + word.slice(1);\n }).join(' ');\n }\n\n getQuestionsForModelFields(model: string): QuestionBase<any>[] {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return [];\n }\n\n if (!model) {\n console.error('QuestionControlService: No model name provided');\n return [];\n }\n\n console.log('outputs.data.model_introspection', this.outputs.data.model_introspection);\n console.log('Looking for model:', model);\n \n if (!this.outputs.data || !this.outputs.data.model_introspection || !this.outputs.data.model_introspection.models) {\n console.error('QuestionControlService: Invalid outputs structure', this.outputs);\n return [];\n }\n \n console.log('Available models:', Object.keys(this.outputs.data.model_introspection.models));\n \n const modelData = this.outputs.data.model_introspection.models[model as keyof typeof this.outputs.data.model_introspection.models];\n if (!modelData) {\n console.error(`Model \"${model}\" not found in model introspection. Available models:`, Object.keys(this.outputs.data.model_introspection.models));\n return [];\n }\n \n console.log('Found model data:', modelData);\n \n const fields = modelData.fields;\n if (!fields) {\n console.error(`Fields not found for model \"${model}\"`, modelData);\n return [];\n }\n \n console.log('Found fields:', fields);\n \n const questions: QuestionBase<any>[] = [];\n const values = Object.values(fields);\n const skipFields = ['createdAt', 'updatedAt', 'id'];\n \n for (const fieldObj of values) {\n if (skipFields.indexOf((fieldObj as any).name) > -1) continue;\n\n if (typeof (fieldObj as any).type === 'object' && (fieldObj as any).type.model) {\n continue; // skip model relationship fields\n }\n\n const q = this.getFieldForFieldObj(fieldObj, model);\n if (q) {\n questions.push(q);\n } else {\n console.log('no question returned for fieldObj', fieldObj, 'model', model);\n }\n }\n \n console.log('getQuestionsForModelFields questions', questions);\n return questions;\n }\n\n /** nonModel, form section Methods **/\n getNonModelQuestions(fieldObj: any, model: any): QuestionBase<any>[] {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return [];\n }\n\n const nonModel = fieldObj.type.nonModel;\n const fields = this.outputs.data.model_introspection.nonModels[nonModel as keyof typeof this.outputs.data.model_introspection.nonModels].fields;\n const questions: QuestionBase<any>[] = [];\n const values = Object.values(fields);\n const skipFields = ['createdAt', 'updatedAt'];\n \n for (const nestedFieldObj of values) {\n const question = this.getFieldForFieldObj(nestedFieldObj, model);\n if (question) {\n questions.push(question);\n }\n }\n \n console.log('getNonModelQuestions questions', questions);\n return questions;\n }\n\n getEnumQuestion(fieldObj: any, model: any): DropdownQuestion<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n const enumName = fieldObj.type.enum;\n const e = this.outputs.data.model_introspection.enums[enumName as keyof typeof this.outputs.data.model_introspection.enums];\n console.log('getEnumQuestion e', e);\n \n const choices: any[] = [];\n e.values.forEach((val: string) => {\n choices.push({ key: val, value: val });\n });\n \n return this._addDropdownQuestion(fieldObj, choices, model);\n }\n\n /** Reference Field Methods **/\n getRefModel(fieldObj: any, callingModel: string): AsyncDropdownQuestion<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n console.log('getRefModel starting for fieldObj', fieldObj);\n \n const referenceModel = fieldObj.type.model;\n const relModel = this.outputs.data.model_introspection.models[referenceModel as keyof typeof this.outputs.data.model_introspection.models].fields;\n\n const vals = Object.values(relModel);\n for (const val of vals) {\n const fieldVal = val as any;\n if (typeof fieldVal.type !== 'object') continue;\n if (!fieldVal.type.model) continue;\n if (fieldVal.type.model === callingModel) continue;\n\n const modelName = fieldVal.type.model;\n return this._addRefDropdownQuestion(fieldObj, callingModel, modelName);\n }\n\n return null;\n }\n\n private _addFormGroupQuestion(fieldObj: any, formGroup: FormGroup, questions: QuestionBase<any>[]): FormGroupQuestion<any> {\n const name = fieldObj.name.toString();\n return new FormGroupQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'formgroup',\n formGroup: formGroup,\n questions: questions\n });\n }\n\n private _addDropdownQuestion(fieldObj: any, items: any[], model: string): DropdownQuestion<any> {\n console.log('_addDropdownQuestion for fieldObj', fieldObj, 'items', items);\n \n const name = fieldObj.name.toString();\n return new DropdownQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n options: items,\n type: 'dropdown',\n model: model\n });\n }\n\n private _addRefDropdownQuestion(fieldObj: any, model: string, targetModel: string): AsyncDropdownQuestion<any> {\n console.log('_addRefDropdownQuestion for fieldObj', fieldObj);\n \n const name = fieldObj.name.toString();\n return new AsyncDropdownQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'dropdown',\n model: model,\n targetModel: targetModel,\n multiple: fieldObj.association?.connectionType === \"HAS_MANY\"\n });\n }\n\n private _addDatePickerQuestion(fieldObj: any, model: string): DatePickerQuestion<any> {\n const name = fieldObj.name.toString();\n return new DatePickerQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'date',\n model: model\n });\n }\n\n private _addNumberQuestion(fieldObj: any, model: string): NumberQuestion<any> {\n const name = fieldObj.name.toString();\n return new NumberQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'number',\n model: model\n });\n }\n\n private _addStringQuestion(fieldObj: any, model: string): TextboxQuestion<any> {\n const name = fieldObj.name.toString();\n return new TextboxQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'textbox',\n model: model\n });\n }\n\n private _addEmailQuestion(fieldObj: any, model: string): EmailQuestion<any> {\n const name = fieldObj.name.toString();\n return new EmailQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'email',\n validators: [Validators.email],\n model: model\n });\n }\n\n private _addPhoneQuestion(fieldObj: any, model: string): PhoneQuestion<any> {\n const name = fieldObj.name.toString();\n return new PhoneQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'tel',\n validators: [phoneNumberValidator()],\n model: model\n });\n }\n\n toFormGroup(questions: (QuestionBase<any> | FormGroupQuestion<any>)[]): FormGroup {\n const group: any = {};\n\n questions.forEach(question => {\n if (!question) return;\n \n if ('questions' in question && question.questions) {\n group[question.key] = this.toFormGroup(question.questions as QuestionBase<any>[]);\n } else {\n const validators = [];\n \n if (question.required) {\n validators.push(Validators.required);\n }\n \n if (question.validators) {\n validators.push(...question.validators);\n }\n\n group[question.key] = new FormControl(question.value || '', validators);\n }\n });\n \n return new FormGroup(group);\n }\n}","import { Location } from '@angular/common';\nimport { Component, Input, OnInit, inject, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n FormControl,\n FormGroupDirective,\n NgForm,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { DynamicFormQuestionComponent } from '../dynamic-form-question/dynamic-form-question.component';\nimport { DynamicNestedFormQuestionComponent } from '../dynamic-nested-form-question/dynamic-nested-form-question.component';\nimport { DynamicFormGroupComponent } from '../dynamic-form-group/dynamic-form-group.component';\nimport { QuestionControlService } from '../../services/question-control.service';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { RecordRelationshipsComponent } from '../record-relationships/record-relationships.component';\nimport { QuestionBase, FormGroupQuestion } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar';\nimport { MatButtonModule } from '@angular/material/button';\n\n/** Error when invalid control is dirty, touched, or submitted. */\nexport class MyErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n const isSubmitted = form && form.submitted;\n return !!(control && control.invalid && (control.dirty || control.touched || isSubmitted));\n }\n}\n\n@Component({\n standalone: true,\n selector: 'snteam-dynamic-form',\n imports: [\n CommonModule,\n DynamicFormQuestionComponent,\n DynamicNestedFormQuestionComponent,\n DynamicFormGroupComponent,\n RecordRelationshipsComponent,\n ReactiveFormsModule,\n MatFormFieldModule, \n MatInputModule, \n MatSelectModule, \n MatSnackBarModule, \n MatDividerModule,\n MatButtonModule\n ],\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.css'\n})\nexport class DynamicFormComponent implements OnInit {\n\n @Input() model: string = \"\";\n @Input() itemId: string = \"\";\n @Input() valueMap?: any;\n @Input() hideRelationships: boolean = false;\n @Input() hideSaveButton: boolean = false;\n @Input() amplifyOutputs?: any; // Add amplify outputs input\n @Input() formViewId?: string; // Add FormView ID input\n \n @Output() itemOutput = new EventEmitter<any>();\n @Output() submitOutput = new EventEmitter<any>();\n @Output() formLoaded = new EventEmitter<FormGroup>();\n\n mdl: string = '';\n id: string = '';\n item: any;\n payLoad: any;\n form!: any;\n questions: (QuestionBase<any> | FormGroupQuestion<any>)[] | null = [];\n formView: any; // Store the FormView data\n formViewFields: any[] = []; // Store the FormViewField data\n\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n formGroupInputs: string[] = ['formgroup'];\n refInputs: string[] = [];\n\n private ams = inject(AmplifyModelService);\n private _snackBar = inject(MatSnackBar);\n\n constructor(\n private qcs: QuestionControlService,\n private afb: AmplifyFormBuilderService,\n private location: Location,\n private route: ActivatedRoute\n ) { }\n\n get outputs() {\n return this.amplifyOutputs || (this.qcs as any).outputs;\n }\n\n ngOnInit() {\n console.log('DynamicFormComponent ngOnInit starting');\n this.materialInputs = this.afb.getMaterialInputs();\n this.switchInputs = this.afb.getSwitchInputs();\n this.refInputs = this.afb.getRefInputs();\n \n // Read from route parameters if available, otherwise use inputs\n this.route.paramMap.subscribe((params) => {\n console.log('DynamicFormComponent route params:', params);\n const routeModel = params.get('model');\n const routeId = params.get('id');\n const routeFormViewId = params.get('formViewId'); // Check for formViewId in route\n \n console.log('DynamicFormComponent routeModel:', routeModel, 'routeId:', routeId, 'routeFormViewId:', routeFormViewId);\n \n this.mdl = routeModel || this.model;\n this.id = routeId || this.itemId;\n this.formViewId = routeFormViewId || this.formViewId;\n\n console.log('DynamicFormComponent final mdl:', this.mdl, 'id:', this.id, 'formViewId:', this.formViewId);\n\n // If we have a formViewId, load the FormView first\n if (this.formViewId) {\n this.loadFormView();\n } else {\n // Original behavior - load all model fields\n if (this.id == '-1' || !this.id) {\n console.log('DynamicFormComponent calling setQuestionsAndForm for new item');\n this.setQuestionsAndForm();\n } else {\n console.log('DynamicFormComponent calling getItem for existing item');\n this.getItem();\n }\n }\n });\n }\n\n async loadFormView() {\n if (!this.formViewId) return;\n \n try {\n console.log('DynamicFormComponent: Loading FormView:', this.formViewId);\n \n // Get the FormView with its fields\n const { data: formView } = await this.ams.getItemForModel('FormView', this.formViewId);\n this.formView = formView;\n \n if (this.formView && this.formView.tableConfigId) {\n this.mdl = 'TableConfig'; // Set the model based on FormView's table\n \n // Get the FormViewFields for this FormView\n const formViewFields = await this.ams.listItemsForModel('FormViewField');\n if (formViewFields) {\n formViewFields.subscribe({\n next: ({ items }) => {\n this.formViewFields = items.filter((field: any) => field.formViewId === this.formViewId)\n .sort((a: any, b: any) => (a.order || 0) - (b.order || 0));\n console.log('DynamicFormComponent: FormViewFields loaded:', this.formViewFields);\n \n // Now proceed with form setup\n if (this.id == '-1' || !this.id) {\n this.setQuestionsAndForm();\n } else {\n this.getItem();\n }\n }\n });\n }\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error loading FormView:', error);\n }\n }\n\n async getItem() {\n try {\n console.log('DynamicFormComponent: Getting item for model:', this.mdl, 'id:', this.id);\n const { data: item } = await this.ams.getItemForModel(this.mdl, this.id);\n console.log('DynamicFormComponent: Item retrieved successfully:', item);\n this.item = item;\n this.itemOutput.emit(this.item);\n this.setQuestionsAndForm();\n } catch (error) {\n console.error('DynamicFormComponent: Error getting item:', error);\n // Try to continue without the item\n this.item = null;\n this.setQuestionsAndForm();\n }\n }\n\n setQuestionsAndForm() {\n if (!this.mdl) {\n console.error('DynamicFormComponent: No model specified');\n return;\n }\n\n if (!this.questions || this.questions.length == 0) {\n console.log('DynamicFormComponent: Getting questions for model:', this.mdl);\n try {\n if (this.formViewFields && this.formViewFields.length > 0) {\n // Use FormView fields to generate questions\n this.questions = this.getQuestionsFromFormViewFields();\n console.log('DynamicFormComponent: Questions from FormView received:', this.questions);\n } else {\n // Original behavior - use all model fields\n this.questions = this.qcs.getQuestionsForModelFields(this.mdl);\n console.log('DynamicFormComponent: Questions from model received:', this.questions);\n \n // Apply FieldConfig to all questions when not using FormView\n this.applyFieldConfigToAllQuestions();\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error getting questions for model:', this.mdl, error);\n return;\n }\n }\n\n // Reset question values first\n for (let question of this.questions) {\n question.value = undefined; // Clear previous values\n }\n\n if (this.item) {\n for (let question of this.questions) {\n this.setQuestionValueFromItem(question);\n }\n }\n\n // Apply valueMap if provided\n if (this.valueMap) {\n for (let question of this.questions) {\n this.setQuestionValueFromValueMap(question, this.valueMap);\n }\n }\n\n // Always recreate the form to ensure it reflects current question values\n this.form = this.qcs.toFormGroup(this.questions as QuestionBase<any>[]);\n this.formLoaded.emit(this.form);\n console.log('this.item', this.item);\n }\n\n async applyFieldConfigToAllQuestions() {\n // Apply FieldConfig to all questions when not using FormView\n for (const question of this.questions || []) {\n await this.applyFieldConfigToQuestion(question, question.key);\n }\n }\n\n getQuestionsFromFormViewFields(): QuestionBase<any>[] {\n const questions: QuestionBase<any>[] = [];\n \n for (const formViewField of this.formViewFields) {\n // Create a mock field object that matches the structure expected by QuestionControlService\n const mockFieldObj = {\n name: formViewField.field_name,\n type: formViewField.field_type,\n isRequired: formViewField.required || false,\n attributes: []\n };\n \n const question = this.qcs.getFieldForFieldObj(mockFieldObj, this.mdl);\n if (question) {\n // Override the label if a custom displayLabel is provided\n if (formViewField.display_label) {\n question.label = formViewField.display_label;\n }\n \n // Set required status from FormViewField\n question.required = formViewField.required || false;\n \n // Apply FieldConfig enhancements if available\n this.applyFieldConfigToQuestion(question, formViewField.field_name);\n \n questions.push(question);\n }\n }\n \n return questions;\n }\n\n async applyFieldConfigToQuestion(question: QuestionBase<any>, fieldName: string) {\n try {\n // Look for a FieldConfig record that matches this field name\n const fieldConfigs = await this.ams.listItemsForModel('FieldConfig');\n if (fieldConfigs) {\n fieldConfigs.subscribe({\n next: ({ items }) => {\n const fieldConfig = items.find((config: any) => config.name === fieldName);\n if (fieldConfig) {\n console.log('DynamicFormComponent: Applying FieldConfig to question:', fieldName, fieldConfig);\n \n // Apply default value\n if (fieldConfig.default_value && !question.value) {\n question.value = fieldConfig.default_value;\n }\n \n // Apply validation rules (if it's a JSON string of validation rules)\n if (fieldConfig.validation_rules) {\n try {\n const validationRules = JSON.parse(fieldConfig.validation_rules);\n // Apply validation rules based on the structure\n // This could be extended to support various validation patterns\n console.log('DynamicFormComponent: Validation rules found:', validationRules);\n } catch (e) {\n console.warn('DynamicFormComponent: Invalid validation rules JSON:', fieldConfig.validation_rules);\n }\n }\n \n // Apply choices for dropdown/select fields\n if (question.controlType === 'dropdown' && fieldConfig.choices) {\n this.loadFieldConfigChoices(question, fieldConfig);\n }\n \n // Execute populate script for dynamic choices\n if (fieldConfig.populate_script && question.controlType === 'dropdown') {\n this.executePopulateScript(question, fieldConfig.populate_script);\n }\n }\n }\n });\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error applying FieldConfig:', error);\n }\n }\n\n async loadFieldConfigChoices(question: any, fieldConfig: any) {\n try {\n // Get FieldChoice records for this FieldConfig\n const fieldChoices = await this.ams.listItemsForModel('FieldChoice');\n if (fieldChoices) {\n fieldChoices.subscribe({\n next: ({ items }) => {\n const choices = items\n .filter((choice: any) => choice.fieldConfigId === fieldConfig.id)\n .sort((a: any, b: any) => (a.order || 0) - (b.order || 0))\n .map((choice: any) => ({\n key: choice.value,\n value: choice.label\n }));\n \n if (choices.length > 0) {\n console.log('DynamicFormComponent: Loaded choices for field:', fieldConfig.name, choices);\n question.options = choices;\n }\n }\n });\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error loading FieldConfig choices:', error);\n }\n }\n\n executePopulateScript(question: any, script: string) {\n try {\n console.log('DynamicFormComponent: Executing populate script for field:', question.key);\n \n // Create a safe execution context\n const context = {\n question: question,\n form: this.form,\n item: this.item,\n model: this.mdl,\n // Add other context variables as needed\n console: console,\n fetch: fetch // Allow fetch for API calls\n };\n \n // Create a function from the script\n const scriptFunction = new Function(...Object.keys(context), `\n try {\n ${script}\n } catch (error) {\n console.error('Script execution error:', error);\n return [];\n }\n `);\n \n // Execute the script with the context\n const result = scriptFunction(...Object.values(context));\n \n // Handle the result\n if (Array.isArray(result)) {\n question.options = result.map((item: any) => ({\n key: item.value || item.key || item,\n value: item.label || item.value || item\n }));\n console.log('DynamicFormComponent: Script populated choices:', question.options);\n } else if (result && typeof result.then === 'function') {\n // Handle promises\n result.then((asyncResult: any) => {\n if (Array.isArray(asyncResult)) {\n question.options = asyncResult.map((item: any) => ({\n key: item.value || item.key || item,\n value: item.label || item.value || item\n }));\n console.log('DynamicFormComponent: Async script populated choices:', question.options);\n }\n }).catch((error: any) => {\n console.error('DynamicFormComponent: Async script execution error:', error);\n });\n }\n } catch (error) {\n console.error('DynamicFormComponent: Script execution error:', error);\n }\n }\n\n setQuestionValueFromItem(question: any, item?: any) {\n if (!item) item = this.item;\n if (question.controlType == 'formgroup') {\n for (let q of question.questions) {\n this.setQuestionValueFromItem(q, item[question.key]);\n }\n }\n else if (item[question.key]) {\n question.value = item[question.key];\n } else {\n console.log('setQuestionValueFromItem no item found and not formgroup');\n }\n }\n\n setQuestionValueFromValueMap(question: any, valueMap: any) {\n if (question.controlType == 'formgroup') {\n for (let q of question.questions) {\n this.setQuestionValueFromValueMap(q, valueMap);\n }\n }\n else if (valueMap[question.key] !== undefined) {\n question.value = valueMap[question.key];\n }\n }\n\n getValueForKey(obj: any, key: string): any | null {\n if (obj === null || typeof obj !== 'object') {\n return null;\n }\n\n if (key in obj) {\n return obj[key];\n }\n\n for (const k in obj) {\n const result = this.getValueForKey(obj[k], key);\n if (result !== null) {\n return result;\n }\n }\n\n return null;\n }\n\n setValueForKey(obj: any, key: string, val: any) {\n if (obj === null || typeof obj !== 'object') {\n return;\n }\n\n if (key in obj) {\n obj[key] = val;\n }\n\n for (const k in obj) {\n if (typeof obj[k] == 'object') {\n this.setValueForKey(obj[k], key, val);\n }\n }\n }\n\n setRefQuestionValuesInPayload(questions?: any, payLoadObj?: any) {\n let qs = questions || this.questions;\n\n let refQs = qs.filter((x: any) => x.controlType == 'async-dropdown');\n if (refQs) {\n refQs.forEach((refQ: any) => {\n let keyVal = this.getValueForKey(this.payLoad, refQ.key);\n if (Array.isArray(keyVal)) {\n let relArr: any[] = [];\n for (var v in keyVal) {\n let valObj: any = {};\n valObj[refQ.targetModel.toLowerCase() + 'Id'] = keyVal[v];\n valObj[this.mdl.toLowerCase() + 'Id'] = this.id;\n relArr.push(valObj);\n }\n this.setValueForKey(this.payLoad, refQ.key, relArr)\n }\n else {\n console.log('qs keyVal is not array');\n }\n });\n }\n\n let groupQs = qs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n console.log('qs checking groupQ', groupQ);\n this.setRefQuestionValuesInPayload(groupQ.questions);\n }\n }\n console.log('qs payload', this.payLoad);\n }\n\n questionsIncludesRefType(questions?: any): boolean {\n let qs = questions || this.questions;\n\n let refQ = qs.find((x: any) => x.controlType == 'async-dropdown');\n if (refQ) return true;\n\n let groupQs = qs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n if (this.questionsIncludesRefType(groupQ.questions)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n formHasRelationshipQuestions(): boolean {\n return this.questionsIncludesRefType();\n }\n\n onSubmit() {\n this.payLoad = this.form.getRawValue();\n\n if (this.item && this.item.id) {\n this.payLoad.id = this.item.id;\n console.log('will update because this.item.id', this.item.id);\n this.updateItem();\n }\n else {\n console.log('will create because !this.item.id', this.item);\n this.createItem();\n }\n \n this.submitOutput.emit(this.payLoad);\n console.log('onSubmit payload', this.payLoad, 'this.item', this.item, 'this.form', this.form);\n }\n\n async updateItem() {\n this.prepPayloadObj();\n console.log('updateItem prepped payload', this.payLoad);\n try {\n const { data: item } = await this.ams.updateItemForModel(this.mdl, this.payLoad);\n console.log('updateItem finished res', item);\n \n if (!item) {\n this._snackBar.open('Error updating ' + this.mdl, 'Dismiss');\n return;\n }\n \n this.item = item;\n this.itemOutput.emit(this.item);\n \n // Show success message\n this._snackBar.open(`${this.mdl} updated successfully`, 'Dismiss', {\n duration: 3000\n });\n \n this.setQuestionsAndForm();\n } catch (error) {\n console.error('error in updateItem', error);\n this._snackBar.open('Error updating ' + this.mdl, 'Dismiss');\n }\n }\n\n getQuestionForKey(key: string, questions?: any) {\n let searchQs = questions || this.questions;\n let q = searchQs.find((x: any) => x.key == key);\n if (q) return q;\n\n let groupQs = searchQs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n console.log('searchQs checking groupQ', groupQ);\n q = this.getQuestionForKey(key, groupQ.questions);\n if (q) return q;\n }\n }\n return;\n }\n\n prepPayloadObj(obj?: any) {\n let prepObj = obj || this.payLoad;\n console.log('prepPayloadObj starting for prepObj', prepObj);\n for (let prop in prepObj) {\n let q = this.getQuestionForKey(prop);\n if (q) {\n console.log('q', q);\n if (q.controlType == \"formgroup\") {\n this.prepPayloadObj(prepObj[prop])\n }\n else {\n if (!q.required && prepObj[prop] == '') {\n delete prepObj[prop];\n }\n }\n }\n else {\n console.log('prepPayloadObj no q for prop', prop);\n }\n }\n }\n\n async createItem() {\n this.prepPayloadObj();\n console.log('createItem prepped payload', this.payLoad);\n try {\n let res = await this.ams.createItemPromise(this.mdl, this.payLoad);\n console.log('createItem finished res', res);\n if (!res) {\n this._snackBar.open('Error creating ' + this.mdl, 'Dismiss');\n return;\n }\n\n if (res.errors && res.errors.length > 0) {\n let messages: string[] = [];\n res.errors.forEach((err: any) => {\n messages.push(err.message);\n })\n this._snackBar.open(messages.join('\\n'), 'Dismiss');\n }\n else {\n this.item = res.data;\n this.itemOutput.emit(this.item);\n \n // Update the URL to reflect the new item ID\n if (this.item && this.item.id) {\n this.changePathIdParam(this.item.id);\n this.id = this.item.id; // Update the component's id property\n }\n \n // Show success message\n this._snackBar.open(`${this.mdl} created successfully`, 'Dismiss', {\n duration: 3000\n });\n \n this.setQuestionsAndForm();\n }\n } catch (error) {\n console.error('error in createItem', error);\n }\n }\n\n changePathIdParam(newParamValue: string) {\n const currentUrl = this.location.path();\n let paramValArr = currentUrl.split('/');\n let currentId = paramValArr[paramValArr.length -1];\n const newUrl = currentUrl.replace(currentId, newParamValue);\n this.location.replaceState(newUrl);\n }\n\n isValid(question?: any, q?: any, q2?: any) {\n if (question && q && q2) return this.form.get(question.key + '.' + q.key + '.' + q2.key);\n if (question && q && !q2) return this.form.get(question.key + '.' + q.key);\n if (question && !q && !q2) return this.form.get(question.key);\n return true;\n }\n}","<div class=\"dynamic-form-holder\">\n @if (form && questions) {\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n @for (question of questions; track question) {\n @if (this.switchInputs.includes(question.controlType) || this.materialInputs.includes(question.controlType) || this.refInputs.includes(question.controlType)) {\n <div class=\"form-row\">\n <snteam-dynamic-form-question [question]=\"question\" [formGroup]=\"form\"></snteam-dynamic-form-question>\n </div>\n }\n @if (this.formGroupInputs.includes(question.controlType)) {\n <div class=\"group-row\">\n <snteam-dynamic-form-group [question]=\"question\" [formGroup]=\"form\" [formGroupName]=\"question.key\"></snteam-dynamic-form-group>\n </div>\n }\n }\n @if (!hideSaveButton) {\n <div class=\"form-row\">\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"!form.valid\">Save</button>\n </div>\n }\n </form>\n } @else {\n <div class=\"loading\">Loading...</div>\n }\n\n @if(item && !hideRelationships){\n <div class=\"relationship-holder\">\n <snteam-record-relationships [model]=\"mdl\" [id]=\"id\" [item]=\"item\" [amplifyOutputs]=\"outputs\"></snteam-record-relationships>\n </div>\n }\n</div>","import { Component, OnInit, Input, inject, TemplateRef, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatListModule } from '@angular/material/list';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nexport interface RowAction {\n icon: string;\n label: string;\n color?: 'primary' | 'accent' | 'warn';\n action: (item: any) => void;\n}\n\n@Component({\n selector: 'snteam-list-view',\n standalone: true,\n imports: [CommonModule, MatListModule, MatButtonModule, MatIconModule, MatSnackBarModule, MatTooltipModule],\n templateUrl: './list-view.component.html',\n styleUrl: './list-view.component.css'\n})\nexport class ListViewComponent implements OnInit {\n private ams = inject(AmplifyModelService);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n private snackBar = inject(MatSnackBar);\n \n @Input() modelName: string = '';\n @Input() customItemTemplate?: TemplateRef<any>;\n @Input() hideNewButton: boolean = false;\n @Input() title?: string;\n @Input() useRouter: boolean = true;\n @Input() showRowActions: boolean = false;\n @Input() showDeleteAction: boolean = false;\n @Input() customRowActions: RowAction[] = [];\n \n @Output() itemClick = new EventEmitter<any>();\n @Output() newClick = new EventEmitter<void>();\n @Output() itemsLoaded = new EventEmitter<any[]>();\n @Output() itemDeleted = new EventEmitter<any>();\n \n itemsArr: any[] = [];\n loading: boolean = true;\n error: string | null = null;\n\n ngOnInit(): void {\n // Check if modelName is provided via route parameter\n const routeModel = this.route.snapshot.paramMap.get('model');\n if (routeModel) {\n this.modelName = routeModel;\n }\n \n if (this.modelName) {\n this.listItems();\n }\n }\n\n listItems() {\n console.log('ListViewComponent listItems starting for model:', this.modelName);\n if (this.modelName) {\n this.loading = true;\n this.error = null;\n \n const observable = this.ams.listItemsForModel(this.modelName);\n if (observable) {\n observable.subscribe({\n next: ({ items, isSynced }) => {\n this.itemsArr = items;\n this.loading = false;\n this.itemsLoaded.emit(this.itemsArr);\n console.log('ListViewComponent items loaded:', this.itemsArr);\n },\n error: (err) => {\n console.error('Error loading items:', err);\n this.error = 'Failed to load items';\n this.loading = false;\n }\n });\n } else {\n this.error = 'Service not initialized';\n this.loading = false;\n }\n }\n }\n\n onItemClick(item: any, event?: Event) {\n // Prevent navigation if clicking on action buttons\n if (event && (event.target as HTMLElement).closest('.row-actions')) {\n event.stopPropagation();\n return;\n }\n\n console.log('ListViewComponent itemClick', item);\n this.itemClick.emit(item);\n \n // Navigate to form view if useRouter is enabled\n if (this.useRouter && item.id) {\n this.router.navigate(['/form/' + this.modelName + '/' + item.id]);\n }\n }\n\n onNewClick() {\n console.log('ListViewComponent newClick');\n if (this.useRouter) {\n this.router.navigate(['/form/' + this.modelName + '/-1']);\n } else {\n this.newClick.emit();\n }\n }\n\n async onDeleteItem(item: any, event: Event) {\n event.stopPropagation();\n \n try {\n console.log('ListViewComponent: Deleting item:', item);\n \n const result = await this.ams.deleteItemForModel(this.modelName, item.id);\n \n if (result && result.data) {\n console.log('ListViewComponent: Successfully deleted item:', result.data);\n this.snackBar.open(`${this.modelName} deleted successfully`, 'Dismiss', {\n duration: 3000\n });\n this.itemDeleted.emit(item);\n } else {\n console.error('ListViewComponent: Failed to delete item:', result);\n this.snackBar.open(`Failed to delete ${this.modelName}`, 'Dismiss', {\n duration: 3000\n });\n }\n } catch (error) {\n console.error('ListViewComponent: Error deleting item:', error);\n this.snackBar.open(`Error deleting ${this.modelName}: ${error}`, 'Dismiss', {\n duration: 5000\n });\n }\n }\n\n onCustomAction(action: RowAction, item: any, event: Event) {\n event.stopPropagation();\n action.action(item);\n }\n\n getDisplayText(item: any): string {\n // Try common display fields\n return item.name || item.title || item.label || item.id || 'Unnamed Item';\n }\n\n refresh() {\n this.listItems();\n }\n}","<div class=\"list-view-container\">\n <div class=\"header\">\n <h2>{{ title || modelName }}</h2>\n @if (!hideNewButton) {\n <button mat-raised-button color=\"primary\" (click)=\"onNewClick()\">\n <mat-icon>add</mat-icon>\n New {{ modelName }}\n </button>\n }\n </div>\n\n @if (loading) {\n <div class=\"loading\">Loading {{ modelName }}...</div>\n }\n\n @if (error) {\n <div class=\"error\">\n {{ error }}\n <button mat-button (click)=\"refresh()\">Retry</button>\n </div>\n }\n\n @if (!loading && !error && itemsArr.length === 0) {\n <div class=\"empty-state\">\n <p>No {{ modelName }} found</p>\n @if (!hideNewButton) {\n <button mat-raised-button color=\"primary\" (click)=\"onNewClick()\">\n Create First {{ modelName }}\n </button>\n }\n </div>\n }\n\n @if (!loading && !error && itemsArr.length > 0) {\n <mat-list class=\"items-list\">\n @for (item of itemsArr; track item.id) {\n <mat-list-item (click)=\"onItemClick(item, $event)\" class=\"clickable-item\">\n @if (customItemTemplate) {\n <ng-container [ngTemplateOutlet]=\"customItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n } @else {\n <div class=\"item-content\">\n <div class=\"item-text\">\n <span matListItemTitle>{{ getDisplayText(item) }}</span>\n <span matListItemLine>{{ item.description || (item.createdAt | date) }}</span>\n </div>\n @if (showRowActions || showDeleteAction || customRowActions.length > 0) {\n <div class=\"row-actions\">\n @if (showDeleteAction) {\n <button mat-icon-button color=\"warn\" (click)=\"onDeleteItem(item, $event)\" \n matTooltip=\"Delete\" class=\"action-button\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n @for (action of customRowActions; track action.label) {\n <button mat-icon-button [color]=\"action.color || 'primary'\" \n (click)=\"onCustomAction(action, item, $event)\"\n [matTooltip]=\"action.label\" class=\"action-button\">\n <mat-icon>{{ action.icon }}</mat-icon>\n </button>\n }\n </div>\n }\n </div>\n }\n </mat-list-item>\n }\n </mat-list>\n }\n</div>","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\n\nimport { ListViewComponent } from '../list-view/list-view.component';\nimport { QuestionControlService } from '../../services/question-control.service';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { RelationshipSelectionConfig, RelationshipSelectionSetConfig } from '../../interfaces/relationship-config.interface';\n\n// Extended interface for UI management (includes ID for tracking)\ninterface RelationshipSelectionConfigWithId extends RelationshipSelectionConfig {\n id: string;\n}\n\n@Component({\n selector: 'snteam-configurations',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatExpansionModule,\n MatIconModule,\n MatCardModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatTooltipModule,\n MatSnackBarModule,\n ListViewComponent\n ],\n templateUrl: './configurations.component.html',\n styleUrl: './configurations.component.css'\n})\nexport class ConfigurationsComponent implements OnInit {\n @Input() amplifyOutputs?: any;\n\n private qcs = inject(QuestionControlService);\n private ams = inject(AmplifyModelService);\n private snackBar = inject(MatSnackBar);\n private fb = inject(FormBuilder);\n\n // Track which models exist in the schema\n hasTableConfig = false;\n hasFormView = false;\n hasListView = false;\n hasFieldConfig = false;\n hasRelationshipConfig = false;\n\n // Relationship configuration management\n relationshipConfigs: RelationshipSelectionConfigWithId[] = [];\n showAddRelationshipConfig = false;\n editingRelationshipConfig: RelationshipSelectionConfigWithId | null = null;\n relationshipConfigForm: FormGroup;\n availableModels: string[] = [];\n availableFields: { name: string; label: string; type: string }[] = [];\n\n constructor() {\n this.relationshipConfigForm = this.fb.group({\n relationshipModel: ['', Validators.required],\n fieldName: ['', Validators.required],\n selectionSet: ['', Validators.required],\n description: ['']\n });\n }\n\n ngOnInit() {\n this.checkAvailableModels();\n this.loadRelationshipConfigs();\n this.loadAvailableModels();\n }\n\n get outputs() {\n return this.amplifyOutputs || (this.qcs as any).outputs;\n }\n\n checkAvailableModels() {\n if (!this.outputs || !this.outputs.data || !this.outputs.data.model_introspection) {\n console.warn('ConfigurationsComponent: No model introspection data available');\n return;\n }\n\n const models = this.outputs.data.model_introspection.models;\n console.log('ConfigurationsComponent: Available models:', Object.keys(models));\n\n this.hasTableConfig = 'TableConfig' in models;\n this.hasFormView = 'FormView' in models;\n this.hasListView = 'ListView' in models;\n this.hasFieldConfig = 'FieldConfig' in models;\n this.hasRelationshipConfig = 'RelationshipConfig' in models;\n\n console.log('ConfigurationsComponent: Model availability:', {\n TableConfig: this.hasTableConfig,\n FormView: this.hasFormView,\n ListView: this.hasListView,\n FieldConfig: this.hasFieldConfig,\n RelationshipConfig: this.hasRelationshipConfig\n });\n }\n\n async populateDefaultFieldConfigs() {\n try {\n console.log('ConfigurationsComponent: Starting populateDefaultFieldConfigs');\n \n // Create a FieldConfig for the \"field\" field on FieldConfig model\n const fieldConfigForField = {\n name: 'Field Selector Config',\n description: 'Configuration for the field selector dropdown',\n model: 'FieldConfig',\n field: 'field',\n field_type: 'select',\n label: 'Field Name',\n populate_script: `\n// Get all fields for the selected model\nconst modelName = form.get('model')?.value;\nif (!modelName) {\n return [{value: '', label: 'Please select a model first'}];\n}\n\n// Access the model introspection data\nconst outputs = (window as any).amplifyOutputs || question.outputs;\nif (!outputs || !outputs.data || !outputs.data.model_introspection) {\n return [{value: '', label: 'Schema data not available'}];\n}\n\nconst models = outputs.data.model_introspection.models;\nconst modelData = models[modelName];\nif (!modelData || !modelData.fields) {\n return [{value: '', label: 'Model not found or has no fields'}];\n}\n\n// Get all fields from the selected model, excluding system fields\nconst skipFields = ['id', 'createdAt', 'updatedAt'];\nconst fields = Object.values(modelData.fields)\n .filter((field) => !skipFields.includes(field.name))\n .map((field) => ({\n value: field.name,\n label: field.name.charAt(0).toUpperCase() + field.name.slice(1).replace(/_/g, ' ')\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\nreturn fields;\n `.trim()\n };\n\n // Create the FieldConfig record\n const result = await this.ams.createItemPromise('FieldConfig', fieldConfigForField);\n \n if (result && result.data) {\n console.log('ConfigurationsComponent: Successfully created FieldConfig:', result.data);\n this.snackBar.open('Default FieldConfig created successfully!', 'Dismiss', {\n duration: 3000\n });\n } else {\n console.error('ConfigurationsComponent: Failed to create FieldConfig:', result);\n this.snackBar.open('Failed to create FieldConfig', 'Dismiss', {\n duration: 3000\n });\n }\n } catch (error) {\n console.error('ConfigurationsComponent: Error in populateDefaultFieldConfigs:', error);\n this.snackBar.open('Error creating FieldConfig: ' + error, 'Dismiss', {\n duration: 5000\n });\n }\n }\n\n async deleteAllConfigs(modelName: string) {\n try {\n console.log(`ConfigurationsComponent: Starting deleteAllConfigs for ${modelName}`);\n \n // Get all records for the model\n const observable = this.ams.listItemsForModel(modelName);\n if (!observable) {\n this.snackBar.open(`Failed to get ${modelName} records`, 'Dismiss', { duration: 3000 });\n return;\n }\n\n observable.subscribe({\n next: async ({ items }) => {\n if (items.length === 0) {\n this.snackBar.open(`No ${modelName} records found to delete`, 'Dismiss', { duration: 3000 });\n return;\n }\n\n console.log(`ConfigurationsComponent: Found ${items.length} ${modelName} records to delete`);\n\n // Delete all records\n const deletePromises = items.map((item: any) => \n this.ams.deleteItemForModel(modelName, item.id)\n );\n\n try {\n const deleteResults = await Promise.all(deletePromises);\n const successfulDeletes = deleteResults.filter(result => result && result.data);\n \n console.log(`ConfigurationsComponent: Successfully deleted ${successfulDeletes.length} ${modelName} records`);\n \n this.snackBar.open(\n `Deleted ${successfulDeletes.length} ${modelName} records`, \n 'Dismiss', \n { duration: 3000 }\n );\n\n // No need to refresh model field config check since we removed that functionality\n\n } catch (deleteError) {\n console.error(`ConfigurationsComponent: Error deleting ${modelName} records:`, deleteError);\n this.snackBar.open(`Error deleting ${modelName} records: ${deleteError}`, 'Dismiss', {\n duration: 5000\n });\n }\n },\n error: (error) => {\n console.error(`ConfigurationsComponent: Error getting ${modelName} records:`, error);\n this.snackBar.open(`Error getting ${modelName} records: ${error}`, 'Dismiss', {\n duration: 5000\n });\n }\n });\n\n } catch (error) {\n console.error(`ConfigurationsComponent: Error in deleteAllConfigs for ${modelName}:`, error);\n this.snackBar.open(`Error deleting ${modelName} configs: ${error}`, 'Dismiss', {\n duration: 5000\n });\n }\n }\n\n async deleteTableConfigs() {\n await this.deleteAllConfigs('TableConfig');\n }\n\n async deleteFormViews() {\n await this.deleteAllConfigs('FormView');\n }\n\n async deleteListViews() {\n await this.deleteAllConfigs('ListView');\n }\n\n async deleteFieldConfigs() {\n await this.deleteAllConfigs('FieldConfig');\n }\n\n async populateDefaultTableConfigs() {\n try {\n console.log('ConfigurationsComponent: Starting populateDefaultTableConfigs');\n \n // Get all available models from the schema\n const models = this.outputs.data.model_introspection.models;\n const modelNames = Object.keys(models);\n \n let totalCreated = 0;\n let createdTableConfigs: any[] = [];\n let createdFormViews: any[] = [];\n let createdFormViewFields: any[] = [];\n\n // Step 1: Create TableConfig records for each model\n console.log('ConfigurationsComponent: Creating TableConfig records for', modelNames.length, 'models');\n \n for (const modelName of modelNames) {\n const tableConfig = {\n name: modelName,\n description: `Configuration for ${this.formatModelLabel(modelName)} model`,\n label: this.formatModelLabel(modelName),\n hide_in_menu: false\n };\n\n const tableConfigResult = await this.ams.createItemPromise('TableConfig', tableConfig);\n if (tableConfigResult && tableConfigResult.data) {\n createdTableConfigs.push(tableConfigResult.data);\n totalCreated++;\n console.log('ConfigurationsComponent: Created TableConfig for', modelName);\n }\n }\n\n // Step 2: Create FormView records for each model and link to TableConfig\n console.log('ConfigurationsComponent: Creating FormView records');\n \n for (let i = 0; i < modelNames.length; i++) {\n const modelName = modelNames[i];\n const tableConfig = createdTableConfigs[i];\n \n if (tableConfig) {\n const formView = {\n label: `Default ${this.formatModelLabel(modelName)} Form`,\n tableConfigId: tableConfig.id\n };\n\n const formViewResult = await this.ams.createItemPromise('FormView', formView);\n if (formViewResult && formViewResult.data) {\n createdFormViews.push(formViewResult.data);\n totalCreated++;\n console.log('ConfigurationsComponent: Created FormView for', modelName);\n\n // Step 3: Update TableConfig to set this as the default FormView\n const updatedTableConfig = {\n id: tableConfig.id,\n defaultFormViewId: formViewResult.data.id\n };\n\n await this.ams.updateItemForModel('TableConfig', updatedTableConfig);\n console.log('ConfigurationsComponent: Updated TableConfig with default FormView for', modelName);\n }\n }\n }\n\n // Step 4: Create FormViewField records for each field in each model\n console.log('ConfigurationsComponent: Creating FormViewField records');\n \n for (let i = 0; i < modelNames.length; i++) {\n const modelName = modelNames[i];\n const formView = createdFormViews[i];\n const modelData = models[modelName];\n \n if (formView && modelData && modelData.fields) {\n const fields = Object.values(modelData.fields);\n const skipFields = ['id', 'createdAt', 'updatedAt']; // Skip system fields\n let fieldOrder = 0;\n\n for (const field of fields) {\n const fieldData = field as any;\n \n // Skip system fields and relationship fields\n if (skipFields.includes(fieldData.name) || \n (fieldData.association && fieldData.association.connectionType)) {\n continue;\n }\n\n const formViewField = {\n field_name: fieldData.name,\n display_label: this.formatFieldLabel(fieldData.name),\n field_type: this.mapFieldType(fieldData.type),\n required: fieldData.isRequired || false,\n order: fieldOrder++,\n formViewId: formView.id\n };\n\n const formViewFieldResult = await this.ams.createItemPromise('FormViewField', formViewField);\n if (formViewFieldResult && formViewFieldResult.data) {\n createdFormViewFields.push(formViewFieldResult.data);\n totalCreated++;\n }\n }\n \n console.log('ConfigurationsComponent: Created FormViewFields for', modelName, 'with', fieldOrder, 'fields');\n }\n }\n\n console.log('ConfigurationsComponent: Successfully created', totalCreated, 'total records');\n console.log('ConfigurationsComponent: Created', createdTableConfigs.length, 'TableConfigs');\n console.log('ConfigurationsComponent: Created', createdFormViews.length, 'FormViews');\n console.log('ConfigurationsComponent: Created', createdFormViewFields.length, 'FormViewFields');\n \n this.snackBar.open(\n `Created ${totalCreated} configuration records: ${createdTableConfigs.length} TableConfigs, ${createdFormViews.length} FormViews, ${createdFormViewFields.length} FormViewFields`, \n 'Dismiss', \n { duration: 5000 }\n );\n \n } catch (error) {\n console.error('ConfigurationsComponent: Error in populateDefaultTableConfigs:', error);\n this.snackBar.open('Error creating default table configurations: ' + error, 'Dismiss', {\n duration: 5000\n });\n }\n }\n\n private formatModelLabel(modelName: string): string {\n // Convert PascalCase to readable format\n return modelName\n .replace(/([A-Z])/g, ' $1')\n .trim()\n .replace(/^./, str => str.toUpperCase());\n }\n\n private formatFieldLabel(fieldName: string): string {\n // Convert snake_case or camelCase to readable format\n return fieldName\n .replace(/_/g, ' ')\n .replace(/([A-Z])/g, ' $1')\n .trim()\n .replace(/^./, str => str.toUpperCase());\n }\n\n private mapFieldType(fieldType: any): string {\n // Map Amplify field types to form field types\n if (typeof fieldType === 'string') {\n switch (fieldType.toLowerCase()) {\n case 'string':\n case 'awsurl':\n case 'awsemail':\n case 'awsphone':\n return 'text';\n case 'int':\n case 'integer':\n case 'float':\n return 'number';\n case 'boolean':\n return 'checkbox';\n case 'awsdate':\n return 'date';\n case 'awsdatetime':\n return 'datetime-local';\n case 'awstime':\n return 'time';\n default:\n return 'text';\n }\n }\n \n // Handle complex types (relationships, etc.)\n if (typeof fieldType === 'object' && fieldType.model) {\n return 'select'; // Relationship fields become select dropdowns\n }\n \n return 'text'; // Default fallback\n }\n\n // Relationship Configuration Management Methods\n\n private loadAvailableModels(): void {\n if (!this.outputs || !this.outputs.data || !this.outputs.data.model_introspection) {\n console.warn('ConfigurationsComponent: No model introspection data available for relationship configs');\n return;\n }\n\n const models = this.outputs.data.model_introspection.models;\n this.availableModels = Object.keys(models).sort();\n console.log('ConfigurationsComponent: Available models for relationship configs:', this.availableModels);\n }\n\n onRelationshipModelChange(event: any): void {\n const selectedModel = event.value;\n this.loadAvailableFields(selectedModel);\n \n // Reset field name when model changes\n this.relationshipConfigForm.patchValue({ fieldName: '' });\n }\n\n private loadAvailableFields(modelName: string): void {\n if (!this.outputs || !this.outputs.data || !this.outputs.data.model_introspection) {\n this.availableFields = [];\n return;\n }\n\n const models = this.outputs.data.model_introspection.models;\n const modelData = models[modelName];\n \n if (!modelData || !modelData.fields) {\n this.availableFields = [];\n return;\n }\n\n // Get relationship fields from the selected model\n this.availableFields = Object.values(modelData.fields)\n .filter((field: any) => {\n // Include relationship fields (fields that reference other models)\n return field.association && field.association.connectionType;\n })\n .map((field: any) => ({\n name: field.name,\n label: this.formatFieldLabel(field.name),\n type: field.type\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\n console.log('ConfigurationsComponent: Available relationship fields for', modelName, ':', this.availableFields);\n }\n\n private loadRelationshipConfigs(): void {\n if (!this.hasRelationshipConfig) {\n console.warn('ConfigurationsComponent: RelationshipConfig model not available, falling back to localStorage');\n this.loadRelationshipConfigsFromLocalStorage();\n return;\n }\n\n // Load from Amplify RelationshipConfig model\n const observable = this.ams.listItemsForModel('RelationshipConfig');\n if (!observable) {\n console.error('ConfigurationsComponent: Failed to get RelationshipConfig observable');\n this.loadRelationshipConfigsFromLocalStorage();\n return;\n }\n\n observable.subscribe({\n next: ({ items }) => {\n this.relationshipConfigs = items\n .filter((item: any) => item.isActive !== false)\n .map((item: any) => ({\n id: item.id,\n relationshipModel: item.relationshipModel,\n fieldName: item.fieldName,\n selectionSet: item.selectionSet || [],\n description: item.description\n }));\n \n console.log('ConfigurationsComponent: Loaded relationship configs from Amplify:', this.relationshipConfigs);\n \n // Update the AmplifyModelService with loaded configurations\n this.updateAmplifyModelService();\n },\n error: (error) => {\n console.error('ConfigurationsComponent: Error loading relationship configs from Amplify:', error);\n this.loadRelationshipConfigsFromLocalStorage();\n }\n });\n }\n\n private loadRelationshipConfigsFromLocalStorage(): void {\n // Fallback to localStorage for backward compatibility\n const stored = localStorage.getItem('snteam-relationship-configs');\n if (stored) {\n try {\n const config: RelationshipSelectionSetConfig = JSON.parse(stored);\n this.relationshipConfigs = (config.relationships || []).map(rel => ({\n ...rel,\n id: (rel as any).id || this.generateId()\n }));\n console.log('ConfigurationsComponent: Loaded relationship configs from localStorage:', this.relationshipConfigs);\n } catch (error) {\n console.error('ConfigurationsComponent: Error loading relationship configs from localStorage:', error);\n this.relationshipConfigs = [];\n }\n } else {\n this.relationshipConfigs = [];\n }\n }\n\n private saveRelationshipConfigsToStorage(): void {\n // Always update localStorage for backward compatibility\n const config: RelationshipSelectionSetConfig = {\n relationships: this.relationshipConfigs.map(({ id, ...config }) => config),\n defaultSelectionSet: ['id'],\n enableFallback: true\n };\n\n localStorage.setItem('snteam-relationship-configs', JSON.stringify(config));\n \n // Update the AmplifyModelService with the new configuration\n this.updateAmplifyModelService();\n \n console.log('ConfigurationsComponent: Saved relationship configs to storage and updated service');\n }\n\n private updateAmplifyModelService(): void {\n const config: RelationshipSelectionSetConfig = {\n relationships: this.relationshipConfigs.map(({ id, ...config }) => config),\n defaultSelectionSet: ['id'],\n enableFallback: true\n };\n\n this.ams.setRelationshipConfig(config);\n console.log('ConfigurationsComponent: Updated AmplifyModelService with relationship configs');\n }\n\n async saveRelationshipConfig(): Promise<void> {\n if (!this.relationshipConfigForm.valid) {\n this.snackBar.open('Please fill in all required fields', 'Dismiss', { duration: 3000 });\n return;\n }\n\n const formValue = this.relationshipConfigForm.value;\n \n // Parse selection set from textarea (one field per line)\n const selectionSet = formValue.selectionSet\n .split('\\n')\n .map((line: string) => line.trim())\n .filter((line: string) => line.length > 0);\n\n try {\n if (this.editingRelationshipConfig) {\n // Update existing configuration\n await this.updateRelationshipConfig(this.editingRelationshipConfig.id, {\n relationshipModel: formValue.relationshipModel,\n fieldName: formValue.fieldName,\n selectionSet: selectionSet,\n description: formValue.description || undefined\n });\n this.snackBar.open('Relationship configuration updated successfully', 'Dismiss', { duration: 3000 });\n } else {\n // Check for duplicate configuration\n const existing = this.relationshipConfigs.find(c => \n c.relationshipModel === formValue.relationshipModel && \n c.fieldName === formValue.fieldName\n );\n\n if (existing) {\n this.snackBar.open('Configuration for this relationship already exists', 'Dismiss', { duration: 3000 });\n return;\n }\n\n // Create new configuration\n await this.createRelationshipConfig({\n relationshipModel: formValue.relationshipModel,\n fieldName: formValue.fieldName,\n selectionSet: selectionSet,\n description: formValue.description || undefined\n });\n this.snackBar.open('Relationship configuration added successfully', 'Dismiss', { duration: 3000 });\n }\n\n this.cancelRelationshipConfigEdit();\n \n } catch (error) {\n console.error('ConfigurationsComponent: Error saving relationship config:', error);\n this.snackBar.open('Error saving configuration: ' + error, 'Dismiss', { duration: 5000 });\n }\n }\n\n private async createRelationshipConfig(config: Omit<RelationshipSelectionConfig, 'id'>): Promise<void> {\n if (!this.hasRelationshipConfig) {\n // Fallback to localStorage if model not available\n const newConfig: RelationshipSelectionConfigWithId = {\n ...config,\n id: this.generateId()\n };\n this.relationshipConfigs.push(newConfig);\n this.saveRelationshipConfigsToStorage();\n return;\n }\n\n const amplifyConfig = {\n relationshipModel: config.relationshipModel,\n fieldName: config.fieldName,\n selectionSet: config.selectionSet,\n description: config.description,\n isActive: true,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString()\n };\n\n const result = await this.ams.createItemPromise('RelationshipConfig', amplifyConfig);\n if (result && result.data) {\n console.log('ConfigurationsComponent: Created RelationshipConfig in Amplify:', result.data);\n // Reload configurations to get the updated list\n this.loadRelationshipConfigs();\n } else {\n throw new Error('Failed to create RelationshipConfig in Amplify');\n }\n }\n\n private async updateRelationshipConfig(id: string, config: Omit<RelationshipSelectionConfig, 'id'>): Promise<void> {\n if (!this.hasRelationshipConfig) {\n // Fallback to localStorage if model not available\n const index = this.relationshipConfigs.findIndex(c => c.id === id);\n if (index >= 0) {\n this.relationshipConfigs[index] = { ...config, id };\n this.saveRelationshipConfigsToStorage();\n }\n return;\n }\n\n const amplifyConfig = {\n id: id,\n relationshipModel: config.relationshipModel,\n fieldName: config.fieldName,\n selectionSet: config.selectionSet,\n description: config.description,\n updatedAt: new Date().toISOString()\n };\n\n const result = await this.ams.updateItemForModel('RelationshipConfig', amplifyConfig);\n if (result && result.data) {\n console.log('ConfigurationsComponent: Updated RelationshipConfig in Amplify:', result.data);\n // Reload configurations to get the updated list\n this.loadRelationshipConfigs();\n } else {\n throw new Error('Failed to update RelationshipConfig in Amplify');\n }\n }\n\n editRelationshipConfig(config: RelationshipSelectionConfigWithId): void {\n this.editingRelationshipConfig = config;\n this.showAddRelationshipConfig = true;\n\n // Load fields for the selected model\n this.loadAvailableFields(config.relationshipModel);\n\n // Populate form with existing values\n this.relationshipConfigForm.patchValue({\n relationshipModel: config.relationshipModel,\n fieldName: config.fieldName,\n selectionSet: config.selectionSet.join('\\n'),\n description: config.description || ''\n });\n }\n\n async deleteRelationshipConfig(config: RelationshipSelectionConfigWithId): Promise<void> {\n try {\n if (!this.hasRelationshipConfig) {\n // Fallback to localStorage if model not available\n const index = this.relationshipConfigs.findIndex(c => c.id === config.id);\n if (index >= 0) {\n this.relationshipConfigs.splice(index, 1);\n this.saveRelationshipConfigsToStorage();\n this.snackBar.open('Relationship configuration deleted', 'Dismiss', { duration: 3000 });\n }\n return;\n }\n\n const result = await this.ams.deleteItemForModel('RelationshipConfig', config.id);\n if (result && result.data) {\n console.log('ConfigurationsComponent: Deleted RelationshipConfig from Amplify:', result.data);\n // Reload configurations to get the updated list\n this.loadRelationshipConfigs();\n this.snackBar.open('Relationship configuration deleted', 'Dismiss', { duration: 3000 });\n } else {\n throw new Error('Failed to delete RelationshipConfig from Amplify');\n }\n } catch (error) {\n console.error('ConfigurationsComponent: Error deleting relationship config:', error);\n this.snackBar.open('Error deleting configuration: ' + error, 'Dismiss', { duration: 5000 });\n }\n }\n\n private generateId(): string {\n return 'config_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n }\n\n cancelRelationshipConfigEdit(): void {\n this.showAddRelationshipConfig = false;\n this.editingRelationshipConfig = null;\n this.relationshipConfigForm.reset();\n this.availableFields = [];\n }\n\n async loadDefaultRelationshipConfigs(): Promise<void> {\n // Load some sensible default configurations\n const defaultConfigs: Omit<RelationshipSelectionConfigWithId, 'id'>[] = [\n {\n relationshipModel: 'ListView',\n fieldName: 'table',\n selectionSet: [\n 'id',\n 'table',\n 'table.id',\n 'table.name',\n 'table.title',\n 'table.description'\n ],\n description: 'Configuration for ListView -> Table relationship'\n },\n {\n relationshipModel: 'FormViewField',\n fieldName: 'formView',\n selectionSet: [\n 'id',\n 'formView',\n 'formView.id',\n 'formView.name',\n 'formView.title',\n 'formView.description'\n ],\n description: 'Configuration for FormViewField -> FormView relationship'\n },\n {\n relationshipModel: 'ServiceCustomer',\n fieldName: 'service',\n selectionSet: [\n 'id',\n 'service',\n 'service.id',\n 'service.title',\n 'service.cost',\n 'service.price'\n ],\n description: 'Configuration for ServiceCustomer -> Service relationship'\n },\n {\n relationshipModel: 'ServiceCustomer',\n fieldName: 'customer',\n selectionSet: [\n 'id',\n 'customer',\n 'customer.id',\n 'customer.name',\n 'customer.contact_preference'\n ],\n description: 'Configuration for ServiceCustomer -> Customer relationship'\n }\n ];\n\n try {\n // Only add configs that don't already exist\n let addedCount = 0;\n for (const defaultConfig of defaultConfigs) {\n const existing = this.relationshipConfigs.find(c => \n c.relationshipModel === defaultConfig.relationshipModel && \n c.fieldName === defaultConfig.fieldName\n );\n\n if (!existing) {\n await this.createRelationshipConfig(defaultConfig);\n addedCount++;\n }\n }\n\n if (addedCount > 0) {\n this.snackBar.open(`Added ${addedCount} default relationship configurations`, 'Dismiss', { duration: 3000 });\n } else {\n this.snackBar.open('All default configurations already exist', 'Dismiss', { duration: 3000 });\n }\n } catch (error) {\n console.error('ConfigurationsComponent: Error loading default relationship configs:', error);\n this.snackBar.open('Error loading default configurations: ' + error, 'Dismiss', { duration: 5000 });\n }\n }\n\n async clearAllRelationshipConfigs(): Promise<void> {\n if (this.relationshipConfigs.length === 0) {\n this.snackBar.open('No relationship configurations to clear', 'Dismiss', { duration: 3000 });\n return;\n }\n\n try {\n if (!this.hasRelationshipConfig) {\n // Fallback to localStorage if model not available\n this.relationshipConfigs = [];\n this.saveRelationshipConfigsToStorage();\n this.snackBar.open('All relationship configurations cleared', 'Dismiss', { duration: 3000 });\n return;\n }\n\n // Delete all configurations from Amplify\n const deletePromises = this.relationshipConfigs.map(config => \n this.ams.deleteItemForModel('RelationshipConfig', config.id)\n );\n\n await Promise.all(deletePromises);\n \n // Reload configurations to get the updated (empty) list\n this.loadRelationshipConfigs();\n this.snackBar.open('All relationship configurations cleared', 'Dismiss', { duration: 3000 });\n \n } catch (error) {\n console.error('ConfigurationsComponent: Error clearing relationship configs:', error);\n this.snackBar.open('Error clearing configurations: ' + error, 'Dismiss', { duration: 5000 });\n }\n }\n}","<div class=\"configurations-container\">\n <h2>System Configurations</h2>\n \n <mat-accordion multi=\"true\">\n \n <!-- Table Configs Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>table_chart</mat-icon>\n <span class=\"panel-title\">Table Configs</span>\n </mat-panel-title>\n <mat-panel-description>\n Manage table configurations and settings\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasTableConfig) {\n <div class=\"section-actions\">\n <button mat-raised-button color=\"accent\" (click)=\"populateDefaultTableConfigs()\" class=\"populate-button\">\n <mat-icon>auto_fix_high</mat-icon>\n Populate Default Table Configs\n </button>\n <button mat-raised-button color=\"warn\" (click)=\"deleteTableConfigs()\" class=\"delete-button\">\n <mat-icon>delete</mat-icon>\n Delete All Table Configs\n </button>\n </div>\n <snteam-list-view \n [modelName]=\"'TableConfig'\"\n [useRouter]=\"true\"\n [showDeleteAction]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>TableConfig Model Not Found</h3>\n <p>The TableConfig model is not available in your Amplify schema. Please add it to your data model to manage table configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- Form Views Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>dynamic_form</mat-icon>\n <span class=\"panel-title\">Form Views</span>\n </mat-panel-title>\n <mat-panel-description>\n Configure custom form layouts and field selections\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasFormView) {\n <div class=\"section-actions\">\n <button mat-raised-button color=\"warn\" (click)=\"deleteFormViews()\" class=\"delete-button\">\n <mat-icon>delete</mat-icon>\n Delete All Form Views\n </button>\n </div>\n <snteam-list-view \n [modelName]=\"'FormView'\"\n [useRouter]=\"true\"\n [showDeleteAction]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>FormView Model Not Found</h3>\n <p>The FormView model is not available in your Amplify schema. Please add it to your data model to create custom form configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- List Views Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>view_list</mat-icon>\n <span class=\"panel-title\">List Views</span>\n </mat-panel-title>\n <mat-panel-description>\n Customize list displays and column configurations\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasListView) {\n <div class=\"section-actions\">\n <button mat-raised-button color=\"warn\" (click)=\"deleteListViews()\" class=\"delete-button\">\n <mat-icon>delete</mat-icon>\n Delete All List Views\n </button>\n </div>\n <snteam-list-view \n [modelName]=\"'ListView'\"\n [useRouter]=\"true\"\n [showDeleteAction]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>ListView Model Not Found</h3>\n <p>The ListView model is not available in your Amplify schema. Please add it to your data model to create custom list view configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- Field Configs Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>settings</mat-icon>\n <span class=\"panel-title\">Field Configs</span>\n </mat-panel-title>\n <mat-panel-description>\n Configure field behavior, validation, and choices\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasFieldConfig) {\n <div class=\"section-actions\">\n <button mat-raised-button color=\"accent\" (click)=\"populateDefaultFieldConfigs()\" class=\"populate-button\">\n <mat-icon>auto_fix_high</mat-icon>\n Populate Default Field Configs\n </button>\n <button mat-raised-button color=\"warn\" (click)=\"deleteFieldConfigs()\" class=\"delete-button\">\n <mat-icon>delete</mat-icon>\n Delete All Field Configs\n </button>\n </div>\n <snteam-list-view \n [modelName]=\"'FieldConfig'\"\n [useRouter]=\"true\"\n [showDeleteAction]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>FieldConfig Model Not Found</h3>\n <p>The FieldConfig model is not available in your Amplify schema. Please add it to your data model to configure field behavior and validation.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- Relationship Configs Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>link</mat-icon>\n <span class=\"panel-title\">Relationship Configs</span>\n </mat-panel-title>\n <mat-panel-description>\n Configure GraphQL selection sets for relationship queries\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n <div class=\"section-actions\">\n <button mat-raised-button color=\"primary\" (click)=\"showAddRelationshipConfig = !showAddRelationshipConfig\" class=\"add-button\">\n <mat-icon>{{ showAddRelationshipConfig ? 'close' : 'add' }}</mat-icon>\n {{ showAddRelationshipConfig ? 'Cancel' : 'Add Relationship Config' }}\n </button>\n <button mat-raised-button color=\"accent\" (click)=\"loadDefaultRelationshipConfigs()\" class=\"populate-button\">\n <mat-icon>auto_fix_high</mat-icon>\n Load Default Configs\n </button>\n <button mat-raised-button color=\"warn\" (click)=\"clearAllRelationshipConfigs()\" class=\"delete-button\">\n <mat-icon>delete</mat-icon>\n Clear All Configs\n </button>\n </div>\n\n <!-- Add/Edit Relationship Config Form -->\n @if (showAddRelationshipConfig) {\n <mat-card class=\"config-form-card\">\n <mat-card-header>\n <mat-card-title>\n <mat-icon>{{ editingRelationshipConfig ? 'edit' : 'add' }}</mat-icon>\n {{ editingRelationshipConfig ? 'Edit' : 'Add' }} Relationship Configuration\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <form [formGroup]=\"relationshipConfigForm\" (ngSubmit)=\"saveRelationshipConfig()\">\n <div class=\"form-row\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Relationship Model</mat-label>\n <mat-select formControlName=\"relationshipModel\" (selectionChange)=\"onRelationshipModelChange($event)\">\n @for (model of availableModels; track model) {\n <mat-option [value]=\"model\">{{ model }}</mat-option>\n }\n </mat-select>\n <mat-hint>The model that contains the relationship field</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"form-row\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Field Name</mat-label>\n <mat-select formControlName=\"fieldName\">\n @for (field of availableFields; track field.name) {\n <mat-option [value]=\"field.name\">{{ field.label }}</mat-option>\n }\n </mat-select>\n <mat-hint>The relationship field in the selected model</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"form-row\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Selection Set</mat-label>\n <textarea \n matInput \n formControlName=\"selectionSet\" \n rows=\"6\"\n placeholder=\"Enter GraphQL selection fields, one per line: id table table.id table.name table.title\">\n </textarea>\n <mat-hint>GraphQL fields to select for this relationship (one per line)</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"form-row\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Description</mat-label>\n <input matInput formControlName=\"description\" placeholder=\"Optional description for this configuration\">\n <mat-hint>Optional description to document this configuration</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"form-actions\">\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"!relationshipConfigForm.valid\">\n <mat-icon>save</mat-icon>\n {{ editingRelationshipConfig ? 'Update' : 'Save' }} Configuration\n </button>\n <button mat-button type=\"button\" (click)=\"cancelRelationshipConfigEdit()\">\n <mat-icon>cancel</mat-icon>\n Cancel\n </button>\n </div>\n </form>\n </mat-card-content>\n </mat-card>\n }\n\n <!-- Current Relationship Configurations -->\n <div class=\"current-configs\">\n <h3>Current Relationship Configurations</h3>\n @if (relationshipConfigs.length === 0) {\n <mat-card class=\"empty-state-card\">\n <mat-card-content>\n <mat-icon class=\"empty-icon\">link_off</mat-icon>\n <h4>No Relationship Configurations</h4>\n <p>Add relationship configurations to control GraphQL selection sets for relationship queries.</p>\n </mat-card-content>\n </mat-card>\n } @else {\n <div class=\"configs-list\">\n @for (config of relationshipConfigs; track config.id) {\n <mat-card class=\"config-card\">\n <mat-card-header>\n <mat-card-title>{{ config.relationshipModel }} → {{ config.fieldName }}</mat-card-title>\n <mat-card-subtitle>{{ config.description || 'No description' }}</mat-card-subtitle>\n <div class=\"card-actions\">\n <button mat-icon-button (click)=\"editRelationshipConfig(config)\" matTooltip=\"Edit Configuration\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button color=\"warn\" (click)=\"deleteRelationshipConfig(config)\" matTooltip=\"Delete Configuration\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </mat-card-header>\n <mat-card-content>\n <div class=\"selection-set\">\n <strong>Selection Set:</strong>\n <div class=\"selection-fields\">\n @for (field of config.selectionSet; track field) {\n <span class=\"field-chip\">{{ field }}</span>\n }\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n }\n </div>\n }\n </div>\n\n <!-- Configuration Status -->\n <div class=\"config-status\">\n <mat-card class=\"status-card\">\n <mat-card-content>\n <div class=\"status-info\">\n <mat-icon class=\"status-icon\">info</mat-icon>\n <div class=\"status-text\">\n <strong>Active Configurations: {{ relationshipConfigs.length }}</strong>\n <p>These configurations control how relationship data is queried from your GraphQL API.</p>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n </mat-expansion-panel>\n\n </mat-accordion>\n</div>","/*\n * Public API Surface of @snteam/amplify-angular-core\n */\n\n// Legacy exports for backward compatibility\nexport * from './lib/amplify-angular-core';\n\n// ===== MAIN COMPONENTS =====\n// Primary components for building dynamic forms and list views\nexport * from './lib/components/dynamic-form/dynamic-form.component';\nexport * from './lib/components/list-view/list-view.component';\nexport * from './lib/components/configurations/configurations.component';\n\n// ===== SUPPORTING COMPONENTS =====\n// Components used internally by main components for form rendering\nexport * from './lib/components/dynamic-form-question/dynamic-form-question.component';\nexport * from './lib/components/dynamic-form-group/dynamic-form-group.component';\nexport * from './lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component';\nexport * from './lib/components/record-relationships/record-relationships.component';\nexport * from './lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component';\nexport * from './lib/components/add-relationship-dialog/add-relationship-dialog.component';\n\n// ===== SERVICES =====\n// Core services for Amplify integration and form building\nexport * from './lib/services/amplify-model.service';\nexport * from './lib/services/amplify-form-builder.service';\nexport * from './lib/services/question-control.service';\n\n// ===== INTERFACES AND CONFIGURATION =====\n// Configuration interfaces for relationship selection sets\nexport * from './lib/interfaces/relationship-config.interface';\n// Other interfaces\nexport * from './lib/interfaces/selection-set-generator.interface';\n\n// ===== CLASSES AND TYPES =====\n// Question classes for dynamic form generation\nexport * from './lib/classes/questions';\n// Validation utilities\nexport * from './lib/classes/validators';\n\n// ===== PIPES =====\n// Utility pipes for data transformation\nexport * from './lib/pipes/val-to-title.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ErrorHandlerService","i1.ConfigurationAnalyzerService","i2.SchemaIntrospectorService","i3.ErrorHandlerService","i1.SelectionSetGeneratorService","i2.ErrorHandlerService","i2.AmplifyModelService","i3","i4","i2.AmplifyFormBuilderService","i2","i1.AmplifyModelService","i5","i6","i1.QuestionControlService","i1","i7","i8","i9"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snteam-amplify-angular-core.mjs","sources":["../../../projects/amplify-angular-core/src/lib/interfaces/index.ts","../../../projects/amplify-angular-core/src/lib/types/selection-set.types.ts","../../../projects/amplify-angular-core/src/lib/types/error.types.ts","../../../projects/amplify-angular-core/src/lib/types/index.ts","../../../projects/amplify-angular-core/src/lib/services/error-handler.service.ts","../../../projects/amplify-angular-core/src/lib/services/configuration-analyzer.service.ts","../../../projects/amplify-angular-core/src/lib/services/schema-introspector.service.ts","../../../projects/amplify-angular-core/src/lib/services/selection-set-generator.service.ts","../../../projects/amplify-angular-core/src/lib/amplify-angular-core.ts","../../../projects/amplify-angular-core/src/lib/services/amplify-form-builder.service.ts","../../../projects/amplify-angular-core/src/lib/pipes/val-to-title.pipe.ts","../../../projects/amplify-angular-core/src/lib/services/amplify-model.service.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-question/dynamic-form-question.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-question/dynamic-form-question.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-group/dynamic-form-group.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-group/dynamic-form-group.component.html","../../../projects/amplify-angular-core/src/lib/components/add-relationship-dialog/add-relationship-dialog.component.ts","../../../projects/amplify-angular-core/src/lib/components/add-relationship-dialog/add-relationship-dialog.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component.html","../../../projects/amplify-angular-core/src/lib/components/record-relationships/record-relationships.component.ts","../../../projects/amplify-angular-core/src/lib/components/record-relationships/record-relationships.component.html","../../../projects/amplify-angular-core/src/lib/classes/questions.ts","../../../projects/amplify-angular-core/src/lib/classes/validators.ts","../../../projects/amplify-angular-core/src/lib/services/question-control.service.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/amplify-angular-core/src/lib/components/list-view/list-view.component.ts","../../../projects/amplify-angular-core/src/lib/components/list-view/list-view.component.html","../../../projects/amplify-angular-core/src/lib/components/configurations/configurations.component.ts","../../../projects/amplify-angular-core/src/lib/components/configurations/configurations.component.html","../../../projects/amplify-angular-core/src/public-api.ts","../../../projects/amplify-angular-core/src/snteam-amplify-angular-core.ts"],"sourcesContent":["// Dynamic Relationship Loader Interfaces\nexport * from './selection-set-generator.interface';\nexport * from './configuration-analyzer.interface';\nexport * from './schema-introspector.interface';","/**\n * Cache key for storing generated selection sets\n */\nexport interface CacheKey {\n /** The relationship model name */\n relationshipModel: string;\n \n /** The field name used to access the related model */\n fieldName: string;\n \n /** The target model name */\n targetModel: string;\n \n /** Optional schema version for cache invalidation */\n schemaVersion?: string;\n}\n\n/**\n * Cached selection set entry\n */\nexport interface CachedSelectionSet {\n /** The cache key used to store this entry */\n key: CacheKey;\n \n /** The generated selection set */\n selectionSet: string[];\n \n /** Timestamp when this entry was created */\n createdAt: Date;\n \n /** Number of times this entry has been accessed */\n accessCount: number;\n}\n\n/**\n * Selection set generation patterns\n */\nexport enum SelectionSetPattern {\n /** Basic relationship loading with id and common display fields */\n BASIC = 'basic',\n \n /** Comprehensive field loading using wildcard selection */\n COMPREHENSIVE = 'comprehensive',\n \n /** Selective field loading based on schema analysis */\n SELECTIVE = 'selective',\n \n /** Minimal fallback pattern for error cases */\n FALLBACK = 'fallback'\n}\n\n/**\n * Configuration for selection set generation\n */\nexport interface SelectionSetConfig {\n /** The pattern to use for generation */\n pattern: SelectionSetPattern;\n \n /** Maximum nesting depth for relationships */\n maxDepth: number;\n \n /** Maximum number of fields to include */\n maxFields: number;\n \n /** Whether to include schema validation */\n validateWithSchema: boolean;\n \n /** Custom field names to always include */\n requiredFields: string[];\n \n /** Complexity limits for selection set validation */\n complexityLimits: ComplexityLimits;\n}\n\n/**\n * Complexity limits for selection set validation\n */\nexport interface ComplexityLimits {\n /** Maximum nesting depth for relationships (default: 3) */\n maxNestingDepth: number;\n \n /** Maximum number of fields per selection set (default: 20) */\n maxFieldCount: number;\n \n /** Maximum number of wildcard selections allowed (default: 2) */\n maxWildcardSelections: number;\n \n /** Whether to detect and prevent circular references (default: true) */\n preventCircularReferences: boolean;\n \n /** Maximum length for individual field selectors (default: 100) */\n maxSelectorLength: number;\n}\n\n/**\n * Result of complexity validation\n */\nexport interface ComplexityValidationResult {\n /** Whether the selection set passes complexity validation */\n isValid: boolean;\n \n /** List of validation errors if any */\n errors: string[];\n \n /** List of validation warnings */\n warnings: string[];\n \n /** Calculated complexity score */\n complexityScore: number;\n \n /** Detected circular references if any */\n circularReferences: string[];\n}\n\n/**\n * Display optimization configuration\n */\nexport interface DisplayOptimizationConfig {\n /** Whether to enable display optimization */\n enabled: boolean;\n \n /** Fields that are commonly used for display */\n commonDisplayFields: string[];\n \n /** Fields that should be excluded from display optimization */\n excludeFromOptimization: string[];\n \n /** Whether to prioritize display fields over other fields */\n prioritizeDisplayFields: boolean;\n \n /** Maximum number of non-display fields to include */\n maxNonDisplayFields: number;\n}\n\n/**\n * Field classification for display optimization\n */\nexport enum FieldClassification {\n /** Essential fields that must always be included */\n ESSENTIAL = 'essential',\n \n /** Display fields commonly shown in UI */\n DISPLAY = 'display',\n \n /** Metadata fields that provide additional context */\n METADATA = 'metadata',\n \n /** Relationship fields that link to other models */\n RELATIONSHIP = 'relationship',\n \n /** System fields used internally */\n SYSTEM = 'system',\n \n /** Unknown or unclassified fields */\n UNKNOWN = 'unknown'\n}\n\n/**\n * Field analysis result for optimization\n */\nexport interface FieldAnalysis {\n /** The field selector */\n selector: string;\n \n /** Classification of the field */\n classification: FieldClassification;\n \n /** Priority score for inclusion (higher = more important) */\n priority: number;\n \n /** Estimated cost of including this field */\n cost: number;\n \n /** Whether this field is likely to be displayed in UI */\n isDisplayRelevant: boolean;\n}","import { RelationshipConfiguration } from '../interfaces';\n\n/**\n * Types of errors that can occur during selection set generation\n */\nexport enum SelectionSetErrorType {\n /** Configuration is invalid or incomplete */\n INVALID_CONFIGURATION = 'invalid_configuration',\n \n /** Target model not found in schema */\n MODEL_NOT_FOUND = 'model_not_found',\n \n /** Field not found in target model */\n FIELD_NOT_FOUND = 'field_not_found',\n \n /** Schema introspection data unavailable */\n SCHEMA_UNAVAILABLE = 'schema_unavailable',\n \n /** Generated selection set exceeds complexity limits */\n COMPLEXITY_EXCEEDED = 'complexity_exceeded',\n \n /** Circular reference detected in relationship chain */\n CIRCULAR_REFERENCE = 'circular_reference',\n \n /** GraphQL query failed with generated selection set */\n GRAPHQL_ERROR = 'graphql_error'\n}\n\n/**\n * Error information for selection set generation failures\n */\nexport interface SelectionSetError {\n /** The type of error that occurred */\n type: SelectionSetErrorType;\n \n /** Human-readable error message */\n message: string;\n \n /** The relationship configuration that caused the error */\n configuration?: RelationshipConfiguration;\n \n /** The selection set that was being generated (if any) */\n selectionSet?: string[];\n \n /** Additional context information */\n context?: Record<string, any>;\n \n /** Timestamp when the error occurred */\n timestamp: Date;\n}\n\n/**\n * Result of a selection set generation attempt\n */\nexport interface SelectionSetResult {\n /** Whether the generation was successful */\n success: boolean;\n \n /** The generated selection set (if successful) */\n selectionSet?: string[];\n \n /** Error information (if failed) */\n error?: SelectionSetError;\n \n /** Whether a fallback was used */\n usedFallback: boolean;\n \n /** The pattern that was used for generation */\n patternUsed?: string;\n}","// Dynamic Relationship Loader Types\nexport * from './selection-set.types';\nexport * from './error.types';","import { Injectable } from '@angular/core';\nimport { RelationshipConfiguration } from '../interfaces/selection-set-generator.interface';\nimport { SelectionSetError, SelectionSetErrorType, SelectionSetResult } from '../types/error.types';\n\n/**\n * Centralized error handling and logging service for the dynamic relationship loader system\n * \n * This service provides comprehensive error handling, logging, and recovery mechanisms\n * for all relationship loading failures across the system.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ErrorHandlerService {\n \n /**\n * Maximum number of error logs to keep in memory\n */\n private readonly MAX_ERROR_LOGS = 100;\n \n /**\n * In-memory error log storage for debugging\n */\n private errorLogs: SelectionSetError[] = [];\n \n /**\n * Error statistics for monitoring\n */\n private errorStats = {\n totalErrors: 0,\n errorsByType: new Map<SelectionSetErrorType, number>(),\n lastError: null as SelectionSetError | null,\n recoveryAttempts: 0,\n successfulRecoveries: 0\n };\n\n /**\n * Log a selection set generation error with comprehensive context\n */\n logSelectionSetError(\n type: SelectionSetErrorType,\n message: string,\n config?: RelationshipConfiguration,\n selectionSet?: string[],\n additionalContext?: Record<string, any>\n ): SelectionSetError {\n const error: SelectionSetError = {\n type,\n message,\n configuration: config ? { ...config } : undefined,\n selectionSet: selectionSet ? [...selectionSet] : undefined,\n context: {\n ...additionalContext,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n timestamp: new Date().toISOString(),\n stackTrace: new Error().stack\n },\n timestamp: new Date()\n };\n\n // Add to error logs\n this.addErrorLog(error);\n \n // Update statistics\n this.updateErrorStats(error);\n \n // Log to console with structured format\n this.logToConsole(error);\n \n return error;\n }\n\n /**\n * Log a GraphQL query error with retry context\n */\n logGraphQLError(\n error: any,\n config: RelationshipConfiguration,\n selectionSet: string[],\n retryAttempt: number,\n previousErrors: string[] = []\n ): SelectionSetError {\n const errorMessage = error instanceof Error ? error.message : String(error);\n \n return this.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `GraphQL query failed: ${errorMessage}`,\n config,\n selectionSet,\n {\n originalError: {\n message: errorMessage,\n name: error instanceof Error ? error.name : 'Unknown',\n stack: error instanceof Error ? error.stack : undefined\n },\n retryAttempt,\n previousErrors,\n queryContext: {\n modelName: config.relationshipModelName,\n fieldName: config.fieldName,\n selectionSetLength: selectionSet.length\n }\n }\n );\n }\n\n /**\n * Log a configuration analysis error\n */\n logConfigurationError(\n config: RelationshipConfiguration | null,\n errors: string[],\n additionalContext?: Record<string, any>\n ): SelectionSetError {\n return this.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n `Configuration analysis failed: ${errors.join(', ')}`,\n config || undefined,\n undefined,\n {\n validationErrors: errors,\n ...additionalContext\n }\n );\n }\n\n /**\n * Log a schema introspection error\n */\n logSchemaError(\n modelName: string,\n fieldName?: string,\n additionalContext?: Record<string, any>\n ): SelectionSetError {\n const message = fieldName \n ? `Schema validation failed for field \"${fieldName}\" in model \"${modelName}\"`\n : `Schema data unavailable or invalid for model \"${modelName}\"`;\n\n return this.logSelectionSetError(\n fieldName ? SelectionSetErrorType.FIELD_NOT_FOUND : SelectionSetErrorType.SCHEMA_UNAVAILABLE,\n message,\n undefined,\n undefined,\n {\n modelName,\n fieldName,\n ...additionalContext\n }\n );\n }\n\n /**\n * Log a complexity validation error\n */\n logComplexityError(\n selectionSet: string[],\n validationErrors: string[],\n config?: RelationshipConfiguration\n ): SelectionSetError {\n return this.logSelectionSetError(\n SelectionSetErrorType.COMPLEXITY_EXCEEDED,\n `Selection set complexity exceeded limits: ${validationErrors.join(', ')}`,\n config,\n selectionSet,\n {\n complexityIssues: validationErrors,\n selectionSetSize: selectionSet.length,\n maxDepth: Math.max(...selectionSet.map(s => (s.match(/\\./g) || []).length))\n }\n );\n }\n\n /**\n * Log a circular reference error\n */\n logCircularReferenceError(\n circularPath: string,\n selectionSet: string[],\n config?: RelationshipConfiguration\n ): SelectionSetError {\n return this.logSelectionSetError(\n SelectionSetErrorType.CIRCULAR_REFERENCE,\n `Circular reference detected in path: ${circularPath}`,\n config,\n selectionSet,\n {\n circularPath,\n pathDepth: circularPath.split('.').length\n }\n );\n }\n\n /**\n * Log a successful error recovery\n */\n logSuccessfulRecovery(\n originalError: SelectionSetError,\n recoveryMethod: string,\n finalSelectionSet: string[]\n ): void {\n this.errorStats.recoveryAttempts++;\n this.errorStats.successfulRecoveries++;\n\n console.log('ErrorHandler: Successful error recovery:', {\n originalError: {\n type: originalError.type,\n message: originalError.message\n },\n recoveryMethod,\n finalSelectionSet,\n recoveryRate: this.getRecoveryRate(),\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Log a failed error recovery attempt\n */\n logFailedRecovery(\n originalError: SelectionSetError,\n recoveryAttempts: string[],\n finalError: any\n ): void {\n this.errorStats.recoveryAttempts++;\n\n const failureError = this.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `All recovery attempts failed: ${finalError instanceof Error ? finalError.message : String(finalError)}`,\n originalError.configuration,\n originalError.selectionSet,\n {\n originalError: {\n type: originalError.type,\n message: originalError.message\n },\n recoveryAttempts,\n finalError: {\n message: finalError instanceof Error ? finalError.message : String(finalError),\n type: typeof finalError\n },\n recoveryRate: this.getRecoveryRate()\n }\n );\n\n console.error('ErrorHandler: All recovery attempts failed:', failureError);\n }\n\n /**\n * Create a SelectionSetResult for a successful operation\n */\n createSuccessResult(\n selectionSet: string[],\n patternUsed?: string,\n usedFallback: boolean = false\n ): SelectionSetResult {\n return {\n success: true,\n selectionSet: [...selectionSet],\n usedFallback,\n patternUsed\n };\n }\n\n /**\n * Create a SelectionSetResult for a failed operation\n */\n createErrorResult(error: SelectionSetError): SelectionSetResult {\n return {\n success: false,\n error,\n usedFallback: false\n };\n }\n\n /**\n * Get error statistics for monitoring and debugging\n */\n getErrorStats(): {\n totalErrors: number;\n errorsByType: Record<string, number>;\n lastError: SelectionSetError | null;\n recoveryAttempts: number;\n successfulRecoveries: number;\n recoveryRate: number;\n recentErrors: SelectionSetError[];\n } {\n const errorsByType: Record<string, number> = {};\n this.errorStats.errorsByType.forEach((count, type) => {\n errorsByType[type] = count;\n });\n\n return {\n totalErrors: this.errorStats.totalErrors,\n errorsByType,\n lastError: this.errorStats.lastError,\n recoveryAttempts: this.errorStats.recoveryAttempts,\n successfulRecoveries: this.errorStats.successfulRecoveries,\n recoveryRate: this.getRecoveryRate(),\n recentErrors: this.getRecentErrors(10)\n };\n }\n\n /**\n * Get recent error logs for debugging\n */\n getRecentErrors(count: number = 10): SelectionSetError[] {\n return this.errorLogs\n .slice(-count)\n .sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());\n }\n\n /**\n * Clear all error logs and reset statistics\n */\n clearErrorLogs(): void {\n this.errorLogs = [];\n this.errorStats = {\n totalErrors: 0,\n errorsByType: new Map<SelectionSetErrorType, number>(),\n lastError: null,\n recoveryAttempts: 0,\n successfulRecoveries: 0\n };\n \n console.log('ErrorHandler: Error logs and statistics cleared');\n }\n\n /**\n * Check if the system is experiencing high error rates\n */\n isHighErrorRate(timeWindowMinutes: number = 5, threshold: number = 10): boolean {\n const cutoffTime = new Date(Date.now() - timeWindowMinutes * 60 * 1000);\n const recentErrors = this.errorLogs.filter(error => error.timestamp > cutoffTime);\n \n return recentErrors.length >= threshold;\n }\n\n /**\n * Get error patterns for analysis\n */\n getErrorPatterns(): {\n mostCommonErrorType: SelectionSetErrorType | null;\n mostProblematicModel: string | null;\n mostProblematicField: string | null;\n errorTrends: Array<{\n hour: string;\n errorCount: number;\n }>;\n } {\n if (this.errorLogs.length === 0) {\n return {\n mostCommonErrorType: null,\n mostProblematicModel: null,\n mostProblematicField: null,\n errorTrends: []\n };\n }\n\n // Find most common error type\n let mostCommonErrorType: SelectionSetErrorType | null = null;\n let maxErrorCount = 0;\n this.errorStats.errorsByType.forEach((count, type) => {\n if (count > maxErrorCount) {\n maxErrorCount = count;\n mostCommonErrorType = type;\n }\n });\n\n // Find most problematic model\n const modelCounts = new Map<string, number>();\n this.errorLogs.forEach(error => {\n if (error.configuration?.relationshipModelName) {\n const count = modelCounts.get(error.configuration.relationshipModelName) || 0;\n modelCounts.set(error.configuration.relationshipModelName, count + 1);\n }\n });\n\n let mostProblematicModel: string | null = null;\n let maxModelCount = 0;\n modelCounts.forEach((count, model) => {\n if (count > maxModelCount) {\n maxModelCount = count;\n mostProblematicModel = model;\n }\n });\n\n // Find most problematic field\n const fieldCounts = new Map<string, number>();\n this.errorLogs.forEach(error => {\n if (error.configuration?.fieldName) {\n const count = fieldCounts.get(error.configuration.fieldName) || 0;\n fieldCounts.set(error.configuration.fieldName, count + 1);\n }\n });\n\n let mostProblematicField: string | null = null;\n let maxFieldCount = 0;\n fieldCounts.forEach((count, field) => {\n if (count > maxFieldCount) {\n maxFieldCount = count;\n mostProblematicField = field;\n }\n });\n\n // Generate error trends by hour\n const hourCounts = new Map<string, number>();\n this.errorLogs.forEach(error => {\n const hour = error.timestamp.toISOString().substring(0, 13); // YYYY-MM-DDTHH\n const count = hourCounts.get(hour) || 0;\n hourCounts.set(hour, count + 1);\n });\n\n const errorTrends = Array.from(hourCounts.entries())\n .map(([hour, errorCount]) => ({ hour, errorCount }))\n .sort((a, b) => a.hour.localeCompare(b.hour));\n\n return {\n mostCommonErrorType,\n mostProblematicModel,\n mostProblematicField,\n errorTrends\n };\n }\n\n /**\n * Add error to the log with size management\n */\n private addErrorLog(error: SelectionSetError): void {\n this.errorLogs.push(error);\n \n // Maintain maximum log size\n if (this.errorLogs.length > this.MAX_ERROR_LOGS) {\n this.errorLogs = this.errorLogs.slice(-this.MAX_ERROR_LOGS);\n }\n }\n\n /**\n * Update error statistics\n */\n private updateErrorStats(error: SelectionSetError): void {\n this.errorStats.totalErrors++;\n this.errorStats.lastError = error;\n \n const currentCount = this.errorStats.errorsByType.get(error.type) || 0;\n this.errorStats.errorsByType.set(error.type, currentCount + 1);\n }\n\n /**\n * Calculate recovery rate percentage\n */\n private getRecoveryRate(): number {\n if (this.errorStats.recoveryAttempts === 0) {\n return 0;\n }\n \n return Math.round((this.errorStats.successfulRecoveries / this.errorStats.recoveryAttempts) * 100);\n }\n\n /**\n * Log error to console with structured format\n */\n private logToConsole(error: SelectionSetError): void {\n const logData = {\n type: error.type,\n message: error.message,\n timestamp: error.timestamp.toISOString(),\n configuration: error.configuration ? {\n relationshipModel: error.configuration.relationshipModelName,\n baseModel: error.configuration.baseModelName,\n fieldName: error.configuration.fieldName,\n associatedWith: error.configuration.associatedWith\n } : undefined,\n selectionSet: error.selectionSet,\n context: error.context\n };\n\n // Use appropriate console method based on error severity\n switch (error.type) {\n case SelectionSetErrorType.INVALID_CONFIGURATION:\n case SelectionSetErrorType.GRAPHQL_ERROR:\n console.error('ErrorHandler: Critical error:', logData);\n break;\n case SelectionSetErrorType.SCHEMA_UNAVAILABLE:\n case SelectionSetErrorType.MODEL_NOT_FOUND:\n case SelectionSetErrorType.FIELD_NOT_FOUND:\n console.warn('ErrorHandler: Schema-related warning:', logData);\n break;\n case SelectionSetErrorType.COMPLEXITY_EXCEEDED:\n case SelectionSetErrorType.CIRCULAR_REFERENCE:\n console.warn('ErrorHandler: Complexity warning:', logData);\n break;\n default:\n console.log('ErrorHandler: General error:', logData);\n break;\n }\n }\n}","import { Injectable } from '@angular/core';\nimport { ConfigurationAnalyzer, RelationshipConfiguration, AnalysisResult } from '../interfaces';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { SelectionSetErrorType } from '../types/error.types';\n\n/**\n * Service for analyzing relationship configurations to extract field mappings\n * \n * This service analyzes relationship configurations to determine target models\n * and generate appropriate field selectors for GraphQL queries.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfigurationAnalyzerService implements ConfigurationAnalyzer {\n \n /**\n * Common display field names to look for in models\n */\n private readonly COMMON_DISPLAY_FIELDS = ['name', 'title', 'label', 'displayName', 'description'];\n \n constructor(private errorHandler: ErrorHandlerService) {}\n \n /**\n * Analyze a relationship configuration to extract field mappings and validate structure\n * Enhanced with comprehensive error handling and logging\n */\n analyzeConfiguration(config: RelationshipConfiguration): AnalysisResult {\n const errors: string[] = [];\n \n try {\n // Validate configuration completeness\n if (!config) {\n const error = 'Configuration is null or undefined';\n errors.push(error);\n this.errorHandler.logConfigurationError(null, [error], {\n method: 'analyzeConfiguration',\n step: 'initial_validation'\n });\n return {\n targetModelName: '',\n fieldSelectors: [],\n isValid: false,\n errors\n };\n }\n \n // Validate required fields\n const requiredFields = [\n { field: 'relationshipModelName', value: config.relationshipModelName },\n { field: 'baseModelName', value: config.baseModelName },\n { field: 'fieldName', value: config.fieldName },\n { field: 'associatedWith', value: config.associatedWith }\n ];\n \n for (const { field, value } of requiredFields) {\n if (!value) {\n errors.push(`${field} is required`);\n }\n }\n \n if (errors.length > 0) {\n this.errorHandler.logConfigurationError(config, errors, {\n method: 'analyzeConfiguration',\n step: 'field_validation',\n providedFields: {\n relationshipModelName: !!config.relationshipModelName,\n baseModelName: !!config.baseModelName,\n fieldName: !!config.fieldName,\n associatedWith: !!config.associatedWith\n }\n });\n \n return {\n targetModelName: '',\n fieldSelectors: [],\n isValid: false,\n errors\n };\n }\n \n // Extract target model name from the configuration\n const targetModelName = this.extractTargetModelName(config);\n \n if (!targetModelName) {\n const error = 'Could not determine target model name from configuration';\n errors.push(error);\n this.errorHandler.logConfigurationError(config, [error], {\n method: 'analyzeConfiguration',\n step: 'target_model_extraction',\n fieldName: config.fieldName\n });\n \n return {\n targetModelName: '',\n fieldSelectors: [],\n isValid: false,\n errors\n };\n }\n \n // Generate field selectors for the target model\n const fieldSelectors = this.determineFieldSelectorsEnhanced(targetModelName, config.fieldName);\n \n if (!fieldSelectors || fieldSelectors.length === 0) {\n const error = 'Could not generate field selectors for target model';\n errors.push(error);\n this.errorHandler.logConfigurationError(config, [error], {\n method: 'analyzeConfiguration',\n step: 'field_selector_generation',\n targetModelName,\n fieldName: config.fieldName\n });\n \n return {\n targetModelName,\n fieldSelectors: [],\n isValid: false,\n errors\n };\n }\n \n console.log('ConfigurationAnalyzer: Successfully analyzed configuration:', {\n targetModelName,\n fieldSelectorsCount: fieldSelectors.length,\n fieldName: config.fieldName\n });\n \n return {\n targetModelName,\n fieldSelectors,\n isValid: true,\n errors: []\n };\n \n } catch (error) {\n const errorMessage = `Analysis failed: ${error instanceof Error ? error.message : String(error)}`;\n errors.push(errorMessage);\n \n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n errorMessage,\n config,\n undefined,\n {\n method: 'analyzeConfiguration',\n step: 'exception_handling',\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n type: typeof error\n }\n }\n );\n \n return {\n targetModelName: '',\n fieldSelectors: [],\n isValid: false,\n errors\n };\n }\n }\n\n /**\n * Extract the target model name from a relationship configuration\n * Enhanced with error handling and validation\n * \n * For a FormViewField relationship, this would extract the target model\n * that we want to display (e.g., \"Field\" from the FormViewField junction)\n */\n extractTargetModelName(config: RelationshipConfiguration): string {\n try {\n if (!config || !config.fieldName) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Cannot extract target model name: configuration or fieldName is missing',\n config,\n undefined,\n {\n method: 'extractTargetModelName',\n hasConfig: !!config,\n hasFieldName: !!(config?.fieldName)\n }\n );\n return '';\n }\n \n // The fieldName typically corresponds to the target model we want to access\n // For example, if fieldName is \"formView\", the target model is \"FormView\"\n // If fieldName is \"service\", the target model is \"Service\"\n \n // Convert fieldName to PascalCase to match Amplify model naming conventions\n const targetModelName = this.toPascalCase(config.fieldName);\n \n if (!targetModelName) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Failed to convert fieldName to PascalCase for target model name',\n config,\n undefined,\n {\n method: 'extractTargetModelName',\n fieldName: config.fieldName,\n conversionResult: targetModelName\n }\n );\n return '';\n }\n \n console.log(`ConfigurationAnalyzer: Extracted target model name \"${targetModelName}\" from field \"${config.fieldName}\"`);\n return targetModelName;\n \n } catch (error) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n `Error extracting target model name: ${error instanceof Error ? error.message : String(error)}`,\n config,\n undefined,\n {\n method: 'extractTargetModelName',\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n return '';\n }\n }\n\n /**\n * Determine appropriate field selectors for a target model\n * \n * This generates GraphQL field selectors that include the relationship field\n * and common display properties like id, name, title, etc.\n */\n determineFieldSelectors(targetModel: string): string[] {\n if (!targetModel) {\n return [];\n }\n \n const selectors: string[] = [];\n \n // Always include the base record ID\n selectors.push('id');\n \n // Convert target model to camelCase for field access\n const fieldName = this.toCamelCase(targetModel);\n \n // Add the relationship field itself (this is important for validation)\n selectors.push(fieldName);\n \n // Add the relationship field with its ID\n selectors.push(`${fieldName}.id`);\n \n // Add common display fields for the relationship\n for (const displayField of this.COMMON_DISPLAY_FIELDS) {\n selectors.push(`${fieldName}.${displayField}`);\n }\n \n return selectors;\n }\n \n /**\n * Parse and validate nested relationship paths\n * \n * Handles complex relationship configurations like \"formView.user.profile\"\n * and validates for circular references\n */\n parseNestedRelationshipPath(fieldName: string, maxDepth: number = 3): string[] {\n if (!fieldName) {\n return [];\n }\n \n // Split the field name by dots to handle nested paths\n const pathSegments = fieldName.split('.');\n \n // Limit nesting depth to prevent overly complex queries\n if (pathSegments.length > maxDepth) {\n console.warn(`ConfigurationAnalyzer: Nested relationship path \"${fieldName}\" exceeds maximum depth of ${maxDepth}. Truncating.`);\n pathSegments.splice(maxDepth);\n }\n \n // Check for circular references (same segment appearing multiple times)\n const uniqueSegments = new Set(pathSegments);\n if (uniqueSegments.size !== pathSegments.length) {\n console.warn(`ConfigurationAnalyzer: Circular reference detected in path \"${fieldName}\". Using only unique segments.`);\n return Array.from(uniqueSegments);\n }\n \n return pathSegments;\n }\n \n /**\n * Generate field selectors for nested relationship paths\n * \n * Creates GraphQL selectors that can handle nested relationships\n * like \"formView.user.profile.name\"\n */\n generateNestedFieldSelectors(fieldName: string, targetModel: string): string[] {\n const pathSegments = this.parseNestedRelationshipPath(fieldName);\n const selectors: string[] = [];\n \n // Always include the base record ID\n selectors.push('id');\n \n if (pathSegments.length === 0) {\n return selectors;\n }\n \n // For single-level relationships, use the existing logic\n if (pathSegments.length === 1) {\n const camelCaseField = this.toCamelCase(pathSegments[0]);\n selectors.push(`${camelCaseField}.id`);\n \n // Add common display fields\n for (const displayField of this.COMMON_DISPLAY_FIELDS) {\n selectors.push(`${camelCaseField}.${displayField}`);\n }\n \n return selectors;\n }\n \n // For nested relationships, build the path progressively\n let currentPath = '';\n for (let i = 0; i < pathSegments.length; i++) {\n const segment = this.toCamelCase(pathSegments[i]);\n \n if (i === 0) {\n currentPath = segment;\n } else {\n currentPath += `.${segment}`;\n }\n \n // Add ID for each level\n selectors.push(`${currentPath}.id`);\n \n // Add display fields only for the final level to avoid overly complex queries\n if (i === pathSegments.length - 1) {\n for (const displayField of this.COMMON_DISPLAY_FIELDS) {\n selectors.push(`${currentPath}.${displayField}`);\n }\n }\n }\n \n return selectors;\n }\n \n /**\n * Enhanced field selector determination that supports nested paths and handles different relationship types\n */\n determineFieldSelectorsEnhanced(targetModel: string, fieldName?: string): string[] {\n if (!targetModel) {\n return [];\n }\n \n // If no specific field name provided, use the target model name\n const effectiveFieldName = fieldName || this.toCamelCase(targetModel);\n \n // Check if this is a nested relationship path\n if (effectiveFieldName.includes('.')) {\n return this.generateNestedFieldSelectors(effectiveFieldName, targetModel);\n }\n \n // Generate selectors for the relationship\n const selectors: string[] = [];\n \n // Always include the base record ID\n selectors.push('id');\n \n // For the relationship field, we need to be more flexible about how we include it\n // Some relationships might need the field itself, others might need nested access\n \n // Strategy 1: Include the relationship field directly\n selectors.push(effectiveFieldName);\n \n // Strategy 2: Include nested access to common fields\n selectors.push(`${effectiveFieldName}.id`);\n \n // Add common display fields for the relationship\n for (const displayField of this.COMMON_DISPLAY_FIELDS) {\n selectors.push(`${effectiveFieldName}.${displayField}`);\n }\n \n // Strategy 3: For some relationship types, we might need to include additional metadata\n // Add some common relationship metadata fields\n const metadataFields = ['createdAt', 'updatedAt'];\n for (const metadataField of metadataFields) {\n selectors.push(`${effectiveFieldName}.${metadataField}`);\n }\n \n console.log(`ConfigurationAnalyzer: Generated ${selectors.length} field selectors for ${targetModel} with field ${effectiveFieldName}:`, selectors);\n \n return selectors;\n }\n \n /**\n * Convert a string to PascalCase (first letter uppercase, rest camelCase)\n */\n private toPascalCase(str: string): string {\n if (!str) return '';\n \n // Handle camelCase to PascalCase\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n \n /**\n * Convert a string to camelCase (first letter lowercase)\n */\n private toCamelCase(str: string): string {\n if (!str) return '';\n \n // Handle PascalCase to camelCase\n return str.charAt(0).toLowerCase() + str.slice(1);\n }\n}","import { Injectable } from '@angular/core';\nimport { SchemaIntrospector, ModelField } from '../interfaces';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { SelectionSetErrorType } from '../types/error.types';\n\n/**\n * Service for introspecting Amplify schema data to validate and enhance selection sets\n * \n * This service leverages Amplify's schema introspection data to validate field existence,\n * extract model information, and provide schema-aware field selection for GraphQL queries.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SchemaIntrospectorService implements SchemaIntrospector {\n \n private amplifyOutputs: any = null;\n \n /**\n * Common display field names that are typically used for showing model data\n */\n private readonly COMMON_DISPLAY_FIELDS = ['name', 'title', 'label', 'displayName', 'description'];\n \n /**\n * System fields that are typically not used for display\n */\n private readonly SYSTEM_FIELDS = ['id', 'createdAt', 'updatedAt', 'owner'];\n \n constructor(private errorHandler: ErrorHandlerService) {}\n \n /**\n * Initialize the service with Amplify outputs data\n * Enhanced with error handling and validation\n * This should be called by consuming applications to provide schema data\n */\n initializeSchema(amplifyOutputs: any): void {\n try {\n if (!amplifyOutputs) {\n this.errorHandler.logSchemaError('', undefined, {\n method: 'initializeSchema',\n error: 'amplifyOutputs is null or undefined'\n });\n console.warn('SchemaIntrospectorService: Cannot initialize with null or undefined amplifyOutputs');\n return;\n }\n \n // Validate schema structure\n if (!amplifyOutputs.data || !amplifyOutputs.data.model_introspection || !amplifyOutputs.data.model_introspection.models) {\n this.errorHandler.logSchemaError('', undefined, {\n method: 'initializeSchema',\n error: 'Invalid schema structure',\n hasData: !!amplifyOutputs.data,\n hasModelIntrospection: !!(amplifyOutputs.data?.model_introspection),\n hasModels: !!(amplifyOutputs.data?.model_introspection?.models)\n });\n console.warn('SchemaIntrospectorService: Invalid schema structure in amplifyOutputs');\n return;\n }\n \n this.amplifyOutputs = amplifyOutputs;\n const modelCount = Object.keys(amplifyOutputs.data.model_introspection.models).length;\n \n console.log(`SchemaIntrospectorService: Successfully initialized with schema data (${modelCount} models)`);\n \n } catch (error) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.SCHEMA_UNAVAILABLE,\n `Error initializing schema: ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n undefined,\n {\n method: 'initializeSchema',\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error('SchemaIntrospectorService: Error initializing schema:', error);\n }\n }\n \n /**\n * Get field information for a specific model from the schema\n * Enhanced with comprehensive error handling and logging\n */\n getModelFields(modelName: string): ModelField[] {\n try {\n if (!this.isSchemaAvailable()) {\n this.errorHandler.logSchemaError(modelName, undefined, {\n method: 'getModelFields',\n error: 'Schema data not available'\n });\n console.warn('SchemaIntrospectorService: Schema data not available');\n return [];\n }\n \n if (!modelName) {\n this.errorHandler.logSchemaError('', undefined, {\n method: 'getModelFields',\n error: 'Model name is empty or undefined'\n });\n return [];\n }\n \n const models = this.amplifyOutputs.data.model_introspection.models;\n const modelData = models[modelName];\n \n if (!modelData) {\n this.errorHandler.logSchemaError(modelName, undefined, {\n method: 'getModelFields',\n error: 'Model not found in schema',\n availableModels: Object.keys(models)\n });\n console.warn(`SchemaIntrospectorService: Model \"${modelName}\" not found in schema`);\n return [];\n }\n \n if (!modelData.fields) {\n this.errorHandler.logSchemaError(modelName, undefined, {\n method: 'getModelFields',\n error: 'Model has no fields property',\n modelData: Object.keys(modelData)\n });\n console.warn(`SchemaIntrospectorService: Model \"${modelName}\" has no fields`);\n return [];\n }\n \n const fields: ModelField[] = [];\n const fieldValues = Object.values(modelData.fields);\n \n for (const field of fieldValues) {\n try {\n const fieldData = field as any;\n \n if (!fieldData.name) {\n console.warn(`SchemaIntrospectorService: Field in model \"${modelName}\" has no name property`);\n continue;\n }\n \n fields.push({\n name: fieldData.name,\n type: this.determineFieldType(fieldData.type),\n isRequired: fieldData.isRequired || false,\n isRelationship: this.isRelationshipField(fieldData)\n });\n } catch (fieldError) {\n console.warn(`SchemaIntrospectorService: Error processing field in model \"${modelName}\":`, fieldError);\n // Continue processing other fields\n }\n }\n \n console.log(`SchemaIntrospectorService: Retrieved ${fields.length} fields for model \"${modelName}\"`);\n return fields;\n \n } catch (error) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.MODEL_NOT_FOUND,\n `Error getting fields for model \"${modelName}\": ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n undefined,\n {\n method: 'getModelFields',\n modelName,\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error(`SchemaIntrospectorService: Error getting fields for model \"${modelName}\":`, error);\n return [];\n }\n }\n\n /**\n * Validate that a specific field exists in a model\n */\n validateFieldExists(modelName: string, fieldName: string): boolean {\n if (!this.isSchemaAvailable() || !modelName || !fieldName) {\n return false;\n }\n \n try {\n const models = this.amplifyOutputs.data.model_introspection.models;\n const modelData = models[modelName];\n \n if (!modelData || !modelData.fields) {\n return false;\n }\n \n return fieldName in modelData.fields;\n \n } catch (error) {\n console.error(`SchemaIntrospectorService: Error validating field \"${fieldName}\" in model \"${modelName}\":`, error);\n return false;\n }\n }\n\n /**\n * Get common display fields for a model (e.g., name, title, label)\n */\n getCommonDisplayFields(modelName: string): string[] {\n if (!this.isSchemaAvailable()) {\n // Fallback: return conservative display fields when schema is unavailable\n return this.getConservativeDisplayFields(modelName);\n }\n \n const modelFields = this.getModelFields(modelName);\n const displayFields: string[] = [];\n \n // Always include id for relationships\n if (this.validateFieldExists(modelName, 'id')) {\n displayFields.push('id');\n }\n \n // Look for common display fields in the model\n for (const commonField of this.COMMON_DISPLAY_FIELDS) {\n const field = modelFields.find(f => f.name === commonField);\n if (field && !field.isRelationship) {\n displayFields.push(commonField);\n }\n }\n \n // If no common display fields found, include the first non-system, non-relationship field\n if (displayFields.length <= 1) { // Only id was added\n const firstDisplayField = modelFields.find(f => \n !this.SYSTEM_FIELDS.includes(f.name) && \n !f.isRelationship &&\n f.type === 'string'\n );\n \n if (firstDisplayField && !displayFields.includes(firstDisplayField.name)) {\n displayFields.push(firstDisplayField.name);\n }\n }\n \n return displayFields;\n }\n\n /**\n * Check if schema introspection data is available\n */\n isSchemaAvailable(): boolean {\n return !!(\n this.amplifyOutputs &&\n this.amplifyOutputs.data &&\n this.amplifyOutputs.data.model_introspection &&\n this.amplifyOutputs.data.model_introspection.models\n );\n }\n \n /**\n * Get conservative display fields when schema data is unavailable\n * This provides a safe fallback that works with most Amplify models\n */\n getConservativeDisplayFields(modelName: string): string[] {\n console.warn(`SchemaIntrospectorService: Schema unavailable, using conservative display fields for model \"${modelName}\"`);\n \n // Return a conservative set of fields that are commonly available\n const conservativeFields = ['id'];\n \n // Add all common display field names - the GraphQL query will simply ignore non-existent fields\n conservativeFields.push(...this.COMMON_DISPLAY_FIELDS);\n \n return conservativeFields;\n }\n \n /**\n * Get model fields with fallback behavior when schema is unavailable\n */\n getModelFieldsWithFallback(modelName: string): ModelField[] {\n if (this.isSchemaAvailable()) {\n return this.getModelFields(modelName);\n }\n \n // Fallback: return conservative field set\n console.warn(`SchemaIntrospectorService: Schema unavailable, using conservative field set for model \"${modelName}\"`);\n \n const conservativeFields: ModelField[] = [\n { name: 'id', type: 'id', isRequired: true, isRelationship: false }\n ];\n \n // Add common display fields as optional string fields\n for (const fieldName of this.COMMON_DISPLAY_FIELDS) {\n conservativeFields.push({\n name: fieldName,\n type: 'string',\n isRequired: false,\n isRelationship: false\n });\n }\n \n return conservativeFields;\n }\n \n /**\n * Validate field existence with fallback behavior\n * When schema is unavailable, assumes common fields exist\n */\n validateFieldExistsWithFallback(modelName: string, fieldName: string): boolean {\n if (this.isSchemaAvailable()) {\n return this.validateFieldExists(modelName, fieldName);\n }\n \n // Fallback: assume common fields exist\n const commonFields = ['id', ...this.COMMON_DISPLAY_FIELDS];\n const fieldExists = commonFields.includes(fieldName);\n \n if (!fieldExists) {\n console.warn(`SchemaIntrospectorService: Schema unavailable, cannot validate field \"${fieldName}\" in model \"${modelName}\". Assuming it does not exist.`);\n }\n \n return fieldExists;\n }\n \n /**\n * Get safe field selectors that work even when schema data is unavailable\n * This method prioritizes reliability over completeness\n */\n getSafeFieldSelectors(modelName: string, fieldName: string): string[] {\n const selectors: string[] = ['id']; // Always safe to include\n \n if (!fieldName) {\n return selectors;\n }\n \n // Add the relationship field with id (safe even if field doesn't exist)\n selectors.push(`${fieldName}.id`);\n \n if (this.isSchemaAvailable()) {\n // Use schema-aware field selection\n const displayFields = this.getCommonDisplayFields(modelName);\n for (const displayField of displayFields) {\n if (displayField !== 'id') { // Already added\n selectors.push(`${fieldName}.${displayField}`);\n }\n }\n } else {\n // Use conservative field selection\n const conservativeFields = this.getConservativeDisplayFields(modelName);\n for (const conservativeField of conservativeFields) {\n if (conservativeField !== 'id') { // Already added\n selectors.push(`${fieldName}.${conservativeField}`);\n }\n }\n }\n \n return selectors;\n }\n \n /**\n * Get schema status information for debugging\n */\n getSchemaStatus(): {\n isAvailable: boolean;\n modelCount: number;\n availableModels: string[];\n lastError?: string;\n } {\n const status = {\n isAvailable: this.isSchemaAvailable(),\n modelCount: 0,\n availableModels: [] as string[],\n lastError: undefined as string | undefined\n };\n \n if (status.isAvailable) {\n try {\n status.availableModels = this.getAvailableModels();\n status.modelCount = status.availableModels.length;\n } catch (error) {\n status.lastError = error instanceof Error ? error.message : String(error);\n }\n } else {\n status.lastError = 'Schema data not available or invalid structure';\n }\n \n return status;\n }\n \n /**\n * Get all available model names from the schema\n */\n getAvailableModels(): string[] {\n if (!this.isSchemaAvailable()) {\n return [];\n }\n \n try {\n return Object.keys(this.amplifyOutputs.data.model_introspection.models);\n } catch (error) {\n console.error('SchemaIntrospectorService: Error getting available models:', error);\n return [];\n }\n }\n \n /**\n * Get detailed information about a specific model\n */\n getModelInfo(modelName: string): any {\n if (!this.isSchemaAvailable() || !modelName) {\n return null;\n }\n \n try {\n const models = this.amplifyOutputs.data.model_introspection.models;\n return models[modelName] || null;\n } catch (error) {\n console.error(`SchemaIntrospectorService: Error getting model info for \"${modelName}\":`, error);\n return null;\n }\n }\n \n /**\n * Determine the simplified type of a field from Amplify schema data\n */\n private determineFieldType(fieldType: any): string {\n if (typeof fieldType === 'string') {\n return fieldType.toLowerCase();\n }\n \n if (typeof fieldType === 'object') {\n if (fieldType.model) {\n return 'relationship';\n }\n if (fieldType.enum) {\n return 'enum';\n }\n }\n \n return 'unknown';\n }\n \n /**\n * Check if a field represents a relationship to another model\n */\n private isRelationshipField(fieldData: any): boolean {\n return !!(\n fieldData.type &&\n typeof fieldData.type === 'object' &&\n fieldData.type.model\n );\n }\n \n /**\n * Get relationship information for a field\n */\n getRelationshipInfo(modelName: string, fieldName: string): any {\n if (!this.validateFieldExists(modelName, fieldName)) {\n return null;\n }\n \n try {\n const models = this.amplifyOutputs.data.model_introspection.models;\n const modelData = models[modelName];\n const fieldData = modelData.fields[fieldName];\n \n if (!this.isRelationshipField(fieldData)) {\n return null;\n }\n \n return {\n targetModel: fieldData.type.model,\n connectionType: fieldData.association?.connectionType,\n associatedWith: fieldData.association?.associatedWith,\n targetNames: fieldData.association?.targetNames\n };\n \n } catch (error) {\n console.error(`SchemaIntrospectorService: Error getting relationship info for \"${modelName}.${fieldName}\":`, error);\n return null;\n }\n }\n}","import { Injectable } from '@angular/core';\nimport { SelectionSetGenerator, RelationshipConfiguration } from '../interfaces';\nimport { ConfigurationAnalyzerService } from './configuration-analyzer.service';\nimport { SchemaIntrospectorService } from './schema-introspector.service';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { \n SelectionSetPattern, \n SelectionSetConfig, \n CacheKey, \n CachedSelectionSet,\n ComplexityLimits,\n ComplexityValidationResult,\n DisplayOptimizationConfig,\n FieldClassification,\n FieldAnalysis\n} from '../types';\nimport { SelectionSetErrorType, SelectionSetResult } from '../types/error.types';\n\n/**\n * Service for generating dynamic GraphQL selection sets for Amplify relationships\n * \n * This service replaces hardcoded selection set logic with dynamic generation\n * based on relationship configurations, schema introspection, and intelligent caching.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SelectionSetGeneratorService implements SelectionSetGenerator {\n \n /**\n * Cache for generated selection sets to improve performance\n */\n private selectionSetCache = new Map<string, CachedSelectionSet>();\n \n /**\n * Default configuration for selection set generation\n */\n private readonly DEFAULT_CONFIG: SelectionSetConfig = {\n pattern: SelectionSetPattern.SELECTIVE,\n maxDepth: 3,\n maxFields: 10,\n validateWithSchema: true,\n requiredFields: ['id'],\n complexityLimits: {\n maxNestingDepth: 3,\n maxFieldCount: 20,\n maxWildcardSelections: 2,\n preventCircularReferences: true,\n maxSelectorLength: 100\n }\n };\n \n /**\n * Default display optimization configuration\n */\n private readonly DEFAULT_DISPLAY_CONFIG: DisplayOptimizationConfig = {\n enabled: true,\n commonDisplayFields: ['id', 'name', 'title', 'label', 'displayName', 'description'],\n excludeFromOptimization: ['id', 'createdAt', 'updatedAt'],\n prioritizeDisplayFields: true,\n maxNonDisplayFields: 5\n };\n \n constructor(\n private configurationAnalyzer: ConfigurationAnalyzerService,\n private schemaIntrospector: SchemaIntrospectorService,\n private errorHandler: ErrorHandlerService\n ) {}\n \n /**\n * Generate a selection set for a given relationship configuration\n * Enhanced with comprehensive error handling and logging\n */\n generateSelectionSet(config: RelationshipConfiguration): string[] {\n try {\n // Validate input configuration\n if (!config) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Configuration is null or undefined',\n config\n );\n return this.handleGenerationError(error, '');\n }\n\n // Check cache first\n const cacheKey = this.generateCacheKey(config);\n const cached = this.getCachedSelectionSet(cacheKey);\n if (cached) {\n console.log('SelectionSetGenerator: Using cached selection set for config:', config.fieldName);\n return cached.selectionSet;\n }\n \n // Analyze the configuration\n const analysisResult = this.configurationAnalyzer.analyzeConfiguration(config);\n if (!analysisResult || !analysisResult.isValid) {\n const errors = analysisResult?.errors || ['Invalid configuration'];\n const error = this.errorHandler.logConfigurationError(config, errors, {\n analysisResult,\n cacheKey\n });\n return this.handleGenerationError(error, config.fieldName);\n }\n \n // Generate selection set based on analysis and schema availability\n const selectionSet = this.generateSelectionSetFromAnalysis(config, analysisResult);\n \n // Validate the generated selection set\n if (!this.validateSelectionSet(selectionSet)) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Generated selection set failed validation',\n config,\n selectionSet,\n { analysisResult }\n );\n return this.handleGenerationError(error, config.fieldName);\n }\n \n // Cache the result\n this.cacheSelectionSet(cacheKey, selectionSet);\n \n console.log('SelectionSetGenerator: Successfully generated selection set:', {\n config: config.fieldName,\n selectionSetLength: selectionSet.length,\n selectionSet\n });\n \n return selectionSet;\n \n } catch (error) {\n const selectionSetError = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Unexpected error during selection set generation: ${error instanceof Error ? error.message : String(error)}`,\n config,\n undefined,\n {\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n type: typeof error\n }\n }\n );\n return this.handleGenerationError(selectionSetError, config?.fieldName || '');\n }\n }\n\n /**\n * Generate a fallback selection set when primary generation fails\n * Uses progressive fallback strategies: comprehensive → selective → minimal\n * Enhanced with comprehensive error handling and logging\n */\n generateFallbackSelectionSet(fieldName: string): string[] {\n try {\n if (!fieldName) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Field name is empty or undefined for fallback generation',\n undefined,\n undefined,\n { fieldName }\n );\n return this.generateMinimalFallbackSelectionSet();\n }\n \n console.warn(`SelectionSetGenerator: Using fallback selection set for field \"${fieldName}\"`);\n \n // Try progressive fallback strategies\n try {\n // Strategy 1: Comprehensive fallback (if schema is available)\n if (this.schemaIntrospector.isSchemaAvailable()) {\n const result = this.generateComprehensiveFallbackSelectionSet(fieldName);\n console.log(`SelectionSetGenerator: Comprehensive fallback successful for field \"${fieldName}\"`);\n return result;\n }\n \n // Strategy 2: Selective fallback (configuration-based)\n const result = this.generateSelectiveFallbackSelectionSet(fieldName);\n console.log(`SelectionSetGenerator: Selective fallback successful for field \"${fieldName}\"`);\n return result;\n \n } catch (error) {\n const selectionSetError = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Error in fallback generation, using minimal fallback: ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n undefined,\n {\n fieldName,\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n },\n schemaAvailable: this.schemaIntrospector.isSchemaAvailable()\n }\n );\n \n // Strategy 3: Minimal fallback (last resort)\n return this.generateMinimalFallbackSelectionSet(fieldName);\n }\n } catch (error) {\n // Absolute last resort - return basic selection set\n const selectionSetError = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Critical error in fallback generation: ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n undefined,\n {\n fieldName,\n criticalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error('SelectionSetGenerator: Critical error in fallback generation, returning absolute minimal fallback');\n return ['id'];\n }\n }\n\n /**\n * Generate comprehensive fallback selection set using schema data\n * This is the first fallback strategy when schema is available\n */\n private generateComprehensiveFallbackSelectionSet(fieldName: string): string[] {\n console.log(`SelectionSetGenerator: Using comprehensive fallback strategy for field \"${fieldName}\"`);\n \n const selectionSet: string[] = ['id'];\n \n try {\n // Use schema introspector to get safe field selectors\n const safeSelectors = this.schemaIntrospector.getSafeFieldSelectors('', fieldName);\n \n // Add all safe selectors\n for (const selector of safeSelectors) {\n if (!selectionSet.includes(selector)) {\n selectionSet.push(selector);\n }\n }\n \n // Apply display optimization for fallback\n const mockConfig: RelationshipConfiguration = {\n relationshipModelName: '',\n baseModelName: '',\n fieldName,\n associatedWith: ''\n };\n const optimizedSet = this.applyDisplayOptimization(selectionSet, mockConfig);\n \n // Apply complexity limits to prevent overly expensive queries\n return this.applyComplexityLimits(optimizedSet);\n \n } catch (error) {\n console.warn('SelectionSetGenerator: Comprehensive fallback failed, falling back to selective:', error);\n return this.generateSelectiveFallbackSelectionSet(fieldName);\n }\n }\n\n /**\n * Generate selective fallback selection set using common field patterns\n * This is the second fallback strategy when schema is unavailable\n */\n private generateSelectiveFallbackSelectionSet(fieldName: string): string[] {\n console.log(`SelectionSetGenerator: Using selective fallback strategy for field \"${fieldName}\"`);\n \n const selectionSet: string[] = ['id'];\n \n // Add the relationship field with id (always safe)\n selectionSet.push(`${fieldName}.id`);\n \n // Add common display fields that are likely to exist\n const commonDisplayFields = ['name', 'title', 'label', 'displayName'];\n for (const field of commonDisplayFields) {\n selectionSet.push(`${fieldName}.${field}`);\n }\n \n // Add some additional fields that might be useful for display\n const additionalFields = ['description', 'status', 'type'];\n for (const field of additionalFields) {\n selectionSet.push(`${fieldName}.${field}`);\n }\n \n return selectionSet;\n }\n\n /**\n * Generate minimal fallback selection set for critical error cases\n * This is the last resort fallback strategy\n */\n private generateMinimalFallbackSelectionSet(fieldName?: string): string[] {\n console.log(`SelectionSetGenerator: Using minimal fallback strategy${fieldName ? ` for field \"${fieldName}\"` : ''}`);\n \n const selectionSet: string[] = ['id'];\n \n if (fieldName) {\n // Include only the most basic relationship data\n selectionSet.push(`${fieldName}.id`);\n \n // Add one common field that's most likely to exist\n selectionSet.push(`${fieldName}.name`);\n }\n \n return selectionSet;\n }\n\n /**\n * Generate fallback selection set with retry logic\n * Attempts multiple fallback strategies and validates each one\n * Enhanced with comprehensive error handling and recovery tracking\n */\n generateFallbackSelectionSetWithRetry(fieldName: string, previousErrors: string[] = []): string[] {\n try {\n if (!fieldName) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Field name is empty for fallback retry generation',\n undefined,\n undefined,\n { previousErrors }\n );\n return ['id'];\n }\n\n console.log(`SelectionSetGenerator: Generating fallback with retry for field \"${fieldName}\", previous errors: ${previousErrors.length}`);\n \n const strategies = [\n () => this.generateComprehensiveFallbackSelectionSet(fieldName),\n () => this.generateSelectiveFallbackSelectionSet(fieldName),\n () => this.generateMinimalFallbackSelectionSet(fieldName)\n ];\n \n // Skip strategies that have already failed\n const availableStrategies = strategies.slice(previousErrors.length);\n \n for (let i = 0; i < availableStrategies.length; i++) {\n try {\n const strategy = availableStrategies[i];\n const selectionSet = strategy();\n \n // Validate the selection set\n if (this.validateSelectionSet(selectionSet)) {\n const strategyName = ['comprehensive', 'selective', 'minimal'][previousErrors.length + i];\n console.log(`SelectionSetGenerator: Successfully generated ${strategyName} fallback selection set`);\n \n // Log successful recovery if this was after previous failures\n if (previousErrors.length > 0) {\n this.errorHandler.logSuccessfulRecovery(\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Previous errors: ${previousErrors.join(', ')}`,\n undefined,\n undefined,\n { fieldName, previousErrors }\n ),\n strategyName,\n selectionSet\n );\n }\n \n return selectionSet;\n } else {\n const strategyName = ['comprehensive', 'selective', 'minimal'][previousErrors.length + i];\n const validationError = `Generated selection set failed validation for ${strategyName} strategy`;\n console.warn(`SelectionSetGenerator: ${validationError}`);\n previousErrors.push(validationError);\n }\n \n } catch (error) {\n const strategyName = ['comprehensive', 'selective', 'minimal'][previousErrors.length + i];\n const errorMessage = error instanceof Error ? error.message : String(error);\n \n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `${strategyName} fallback strategy failed: ${errorMessage}`,\n undefined,\n undefined,\n {\n fieldName,\n strategyName,\n strategyIndex: previousErrors.length + i,\n originalError: {\n message: errorMessage,\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.warn(`SelectionSetGenerator: ${strategyName} fallback strategy failed:`, error);\n previousErrors.push(errorMessage);\n }\n }\n \n // If all strategies fail, log the complete failure and return absolute minimal fallback\n this.errorHandler.logFailedRecovery(\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n 'All fallback strategies failed',\n undefined,\n undefined,\n { fieldName, previousErrors }\n ),\n ['comprehensive', 'selective', 'minimal'],\n new Error('All fallback strategies exhausted')\n );\n \n console.error('SelectionSetGenerator: All fallback strategies failed, using absolute minimal fallback');\n return ['id'];\n \n } catch (error) {\n // Critical error in retry logic itself\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Critical error in fallback retry logic: ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n undefined,\n {\n fieldName,\n previousErrors,\n criticalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error('SelectionSetGenerator: Critical error in fallback retry logic:', error);\n return ['id'];\n }\n }\n\n /**\n * Handle generation errors by attempting fallback with comprehensive logging\n */\n private handleGenerationError(error: any, fieldName: string): string[] {\n try {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`SelectionSetGenerator: Handling generation error for field \"${fieldName}\":`, errorMessage);\n \n // Attempt fallback with retry logic\n const fallbackResult = this.generateFallbackSelectionSetWithRetry(fieldName, [errorMessage]);\n \n // Log the fallback attempt\n console.log(`SelectionSetGenerator: Fallback generated for field \"${fieldName}\":`, fallbackResult);\n \n return fallbackResult;\n \n } catch (fallbackError) {\n // Even fallback failed - return absolute minimal\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Both primary generation and fallback failed: ${fallbackError instanceof Error ? fallbackError.message : String(fallbackError)}`,\n undefined,\n undefined,\n {\n fieldName,\n originalError: error,\n fallbackError: {\n message: fallbackError instanceof Error ? fallbackError.message : String(fallbackError),\n stack: fallbackError instanceof Error ? fallbackError.stack : undefined\n }\n }\n );\n \n console.error('SelectionSetGenerator: Both primary generation and fallback failed, returning minimal selection set');\n return ['id'];\n }\n }\n\n /**\n * Validate a selection set for basic correctness\n */\n private validateSelectionSet(selectionSet: string[]): boolean {\n if (!Array.isArray(selectionSet) || selectionSet.length === 0) {\n return false;\n }\n \n // Must include 'id' field\n if (!selectionSet.includes('id')) {\n return false;\n }\n \n // Check for obviously invalid selectors\n for (const selector of selectionSet) {\n if (typeof selector !== 'string' || selector.trim() === '') {\n return false;\n }\n \n // Check for dangerous patterns\n if (selector.includes('..') || selector.includes('*') || selector.length > 100) {\n return false;\n }\n }\n \n return true;\n }\n\n /**\n * Clear the internal cache of generated selection sets\n */\n clearCache(): void {\n this.selectionSetCache.clear();\n console.log('SelectionSetGenerator: Cache cleared');\n }\n \n /**\n * Generate selection set from configuration analysis result\n */\n private generateSelectionSetFromAnalysis(\n config: RelationshipConfiguration, \n analysisResult: any\n ): string[] {\n const selectionSet: string[] = [];\n \n // Always include the base record ID\n selectionSet.push('id');\n \n if (this.schemaIntrospector.isSchemaAvailable()) {\n // Use schema-aware generation\n return this.generateSchemaAwareSelectionSet(config, analysisResult);\n } else {\n // Use configuration-based generation\n return this.generateConfigurationBasedSelectionSet(config, analysisResult);\n }\n }\n \n /**\n * Generate selection set using schema introspection data\n */\n private generateSchemaAwareSelectionSet(\n config: RelationshipConfiguration,\n analysisResult: any\n ): string[] {\n const selectionSet: string[] = ['id'];\n \n // Get safe field selectors from schema introspector\n const safeSelectors = this.schemaIntrospector.getSafeFieldSelectors(\n analysisResult.targetModelName,\n config.fieldName\n );\n \n // Add schema-validated selectors\n for (const selector of safeSelectors) {\n if (!selectionSet.includes(selector)) {\n selectionSet.push(selector);\n }\n }\n \n // Apply display optimization if enabled\n const optimizedSet = this.applyDisplayOptimization(selectionSet, config);\n \n // Apply complexity limits\n return this.applyComplexityLimits(optimizedSet);\n }\n \n /**\n * Generate selection set using configuration analysis only\n */\n private generateConfigurationBasedSelectionSet(\n config: RelationshipConfiguration,\n analysisResult: any\n ): string[] {\n const selectionSet: string[] = ['id'];\n \n console.log('SelectionSetGenerator: Generating configuration-based selection set:', {\n config: {\n relationshipModelName: config.relationshipModelName,\n fieldName: config.fieldName,\n baseModelName: config.baseModelName,\n associatedWith: config.associatedWith\n },\n analysisResult: {\n targetModelName: analysisResult.targetModelName,\n fieldSelectorsCount: analysisResult.fieldSelectors?.length || 0,\n fieldSelectors: analysisResult.fieldSelectors\n }\n });\n \n // Use the field selectors from configuration analysis\n for (const selector of analysisResult.fieldSelectors) {\n if (!selectionSet.includes(selector)) {\n selectionSet.push(selector);\n }\n }\n \n console.log('SelectionSetGenerator: Configuration-based selection set before optimization:', selectionSet);\n \n // Apply display optimization if enabled\n const optimizedSet = this.applyDisplayOptimization(selectionSet, config);\n \n console.log('SelectionSetGenerator: Selection set after display optimization:', optimizedSet);\n \n // Apply complexity limits\n const finalSet = this.applyComplexityLimits(optimizedSet);\n \n console.log('SelectionSetGenerator: Final configuration-based selection set:', finalSet);\n \n return finalSet;\n }\n \n /**\n * Apply display optimization to prioritize display-relevant fields\n */\n private applyDisplayOptimization(selectionSet: string[], config: RelationshipConfiguration): string[] {\n const displayConfig = this.DEFAULT_DISPLAY_CONFIG;\n \n if (!displayConfig.enabled) {\n return selectionSet;\n }\n \n // Analyze each field for display relevance\n const fieldAnalyses = selectionSet.map(selector => this.analyzeFieldForDisplay(selector, config));\n \n // Sort by priority (higher priority first)\n fieldAnalyses.sort((a, b) => b.priority - a.priority);\n \n // Build optimized selection set\n const optimizedSet: string[] = [];\n const essentialFields: string[] = [];\n const displayFields: string[] = [];\n const otherFields: string[] = [];\n \n // Categorize fields\n for (const analysis of fieldAnalyses) {\n switch (analysis.classification) {\n case FieldClassification.ESSENTIAL:\n essentialFields.push(analysis.selector);\n break;\n case FieldClassification.DISPLAY:\n displayFields.push(analysis.selector);\n break;\n default:\n otherFields.push(analysis.selector);\n break;\n }\n }\n \n // Add essential fields first (always included)\n optimizedSet.push(...essentialFields);\n \n // Add display fields (prioritized)\n optimizedSet.push(...displayFields);\n \n // Add other fields up to the limit\n const remainingSlots = Math.max(0, displayConfig.maxNonDisplayFields - (optimizedSet.length - essentialFields.length));\n optimizedSet.push(...otherFields.slice(0, remainingSlots));\n \n console.log(`SelectionSetGenerator: Display optimization reduced selection set from ${selectionSet.length} to ${optimizedSet.length} fields`);\n \n return optimizedSet;\n }\n \n /**\n * Analyze a field selector for display optimization\n */\n private analyzeFieldForDisplay(selector: string, config: RelationshipConfiguration): FieldAnalysis {\n const displayConfig = this.DEFAULT_DISPLAY_CONFIG;\n const analysis: FieldAnalysis = {\n selector,\n classification: FieldClassification.UNKNOWN,\n priority: 0,\n cost: 1,\n isDisplayRelevant: false\n };\n \n // Essential fields (always required)\n if (displayConfig.excludeFromOptimization.some(field => selector.includes(field))) {\n analysis.classification = FieldClassification.ESSENTIAL;\n analysis.priority = 100;\n analysis.isDisplayRelevant = true;\n return analysis;\n }\n \n // Check if it's a common display field\n const isDisplayField = displayConfig.commonDisplayFields.some(field => \n selector.endsWith(`.${field}`) || selector === field\n );\n \n if (isDisplayField) {\n analysis.classification = FieldClassification.DISPLAY;\n analysis.priority = 80;\n analysis.isDisplayRelevant = true;\n } else if (this.isRelationshipField(selector)) {\n analysis.classification = FieldClassification.RELATIONSHIP;\n analysis.priority = 60;\n analysis.cost = 2; // Relationships are more expensive\n analysis.isDisplayRelevant = this.isDisplayRelevantRelationship(selector);\n } else if (this.isMetadataField(selector)) {\n analysis.classification = FieldClassification.METADATA;\n analysis.priority = 40;\n analysis.isDisplayRelevant = false;\n } else if (this.isSystemField(selector)) {\n analysis.classification = FieldClassification.SYSTEM;\n analysis.priority = 20;\n analysis.isDisplayRelevant = false;\n } else {\n analysis.classification = FieldClassification.UNKNOWN;\n analysis.priority = 30;\n analysis.isDisplayRelevant = false;\n }\n \n // Adjust priority based on field depth (deeper fields are less likely to be displayed)\n const depth = (selector.match(/\\./g) || []).length;\n analysis.priority -= depth * 5;\n analysis.cost += depth;\n \n // Boost priority for fields that match the relationship field name\n if (selector.includes(config.fieldName)) {\n analysis.priority += 10;\n analysis.isDisplayRelevant = true;\n }\n \n return analysis;\n }\n \n /**\n * Check if a selector represents a relationship field\n */\n private isRelationshipField(selector: string): boolean {\n // Relationship fields typically have dots (nested access) or end with common relationship suffixes\n return selector.includes('.') || \n selector.endsWith('Id') || \n selector.endsWith('Ids') ||\n selector.endsWith('Connection');\n }\n \n /**\n * Check if a relationship field is likely to be displayed\n */\n private isDisplayRelevantRelationship(selector: string): boolean {\n // Display-relevant relationships typically access display fields of related models\n const displayFieldPatterns = ['name', 'title', 'label', 'displayName', 'description'];\n return displayFieldPatterns.some(pattern => selector.includes(pattern));\n }\n \n /**\n * Check if a selector represents a metadata field\n */\n private isMetadataField(selector: string): boolean {\n const metadataPatterns = ['createdAt', 'updatedAt', 'version', 'owner', 'lastModified'];\n return metadataPatterns.some(pattern => selector.includes(pattern));\n }\n \n /**\n * Check if a selector represents a system field\n */\n private isSystemField(selector: string): boolean {\n const systemPatterns = ['__typename', '_version', '_deleted', '_lastChangedAt'];\n return systemPatterns.some(pattern => selector.includes(pattern));\n }\n \n /**\n * Apply complexity limits to prevent overly expensive GraphQL queries\n * Enhanced with comprehensive error handling and logging\n */\n private applyComplexityLimits(selectionSet: string[]): string[] {\n try {\n // First validate the selection set for complexity\n const validationResult = this.validateSelectionSetComplexity(selectionSet);\n \n if (validationResult.isValid) {\n console.log('SelectionSetGenerator: Selection set passed complexity validation');\n return selectionSet;\n }\n \n // Log validation issues\n if (validationResult.errors.length > 0) {\n this.errorHandler.logComplexityError(selectionSet, validationResult.errors);\n console.warn('SelectionSetGenerator: Complexity validation errors:', validationResult.errors);\n }\n if (validationResult.warnings.length > 0) {\n console.warn('SelectionSetGenerator: Complexity validation warnings:', validationResult.warnings);\n }\n \n // Apply fixes to make the selection set compliant\n const fixedSet = this.fixComplexityIssues(selectionSet, validationResult);\n \n // Validate the fixed set\n const revalidationResult = this.validateSelectionSetComplexity(fixedSet);\n if (!revalidationResult.isValid) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.COMPLEXITY_EXCEEDED,\n 'Selection set still exceeds complexity limits after fixes',\n undefined,\n fixedSet,\n {\n originalSelectionSet: selectionSet,\n validationResult,\n revalidationResult\n }\n );\n \n // Return minimal fallback if fixes didn't work\n console.warn('SelectionSetGenerator: Complexity fixes failed, returning minimal selection set');\n return ['id'];\n }\n \n console.log(`SelectionSetGenerator: Applied complexity fixes, reduced from ${selectionSet.length} to ${fixedSet.length} fields`);\n return fixedSet;\n \n } catch (error) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.COMPLEXITY_EXCEEDED,\n `Error applying complexity limits: ${error instanceof Error ? error.message : String(error)}`,\n undefined,\n selectionSet,\n {\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error('SelectionSetGenerator: Error applying complexity limits:', error);\n // Return original set if complexity checking fails\n return selectionSet;\n }\n }\n \n /**\n * Validate selection set complexity against configured limits\n */\n private validateSelectionSetComplexity(selectionSet: string[]): ComplexityValidationResult {\n const limits = this.DEFAULT_CONFIG.complexityLimits;\n const result: ComplexityValidationResult = {\n isValid: true,\n errors: [],\n warnings: [],\n complexityScore: 0,\n circularReferences: []\n };\n \n // Track field paths for circular reference detection\n const fieldPaths = new Set<string>();\n const pathComponents = new Map<string, string[]>();\n \n let wildcardCount = 0;\n let maxDepth = 0;\n \n for (const selector of selectionSet) {\n // Check selector length\n if (selector.length > limits.maxSelectorLength) {\n result.errors.push(`Selector \"${selector}\" exceeds maximum length of ${limits.maxSelectorLength}`);\n result.isValid = false;\n }\n \n // Check for wildcard selections\n if (selector.includes('*')) {\n wildcardCount++;\n if (wildcardCount > limits.maxWildcardSelections) {\n result.errors.push(`Too many wildcard selections (${wildcardCount}), maximum allowed: ${limits.maxWildcardSelections}`);\n result.isValid = false;\n }\n }\n \n // Calculate nesting depth\n const depth = (selector.match(/\\./g) || []).length;\n maxDepth = Math.max(maxDepth, depth);\n \n if (depth > limits.maxNestingDepth) {\n result.errors.push(`Selector \"${selector}\" exceeds maximum nesting depth of ${limits.maxNestingDepth}`);\n result.isValid = false;\n }\n \n // Track field paths for circular reference detection\n if (limits.preventCircularReferences && depth > 0) {\n const components = selector.split('.');\n pathComponents.set(selector, components);\n \n // Check for potential circular references\n const circularRef = this.detectCircularReference(components, pathComponents);\n if (circularRef) {\n result.circularReferences.push(circularRef);\n result.warnings.push(`Potential circular reference detected: ${circularRef}`);\n }\n }\n \n fieldPaths.add(selector);\n }\n \n // Check field count limit\n if (selectionSet.length > limits.maxFieldCount) {\n result.errors.push(`Selection set has ${selectionSet.length} fields, maximum allowed: ${limits.maxFieldCount}`);\n result.isValid = false;\n }\n \n // Calculate complexity score\n result.complexityScore = this.calculateComplexityScore(selectionSet, maxDepth, wildcardCount);\n \n // Add warnings for high complexity\n if (result.complexityScore > 50) {\n result.warnings.push(`High complexity score: ${result.complexityScore}`);\n }\n \n return result;\n }\n \n /**\n * Detect circular references in field paths\n */\n private detectCircularReference(components: string[], allPaths: Map<string, string[]>): string | null {\n // Simple circular reference detection: check if any component appears multiple times in the path\n const componentCounts = new Map<string, number>();\n \n for (const component of components) {\n const count = componentCounts.get(component) || 0;\n componentCounts.set(component, count + 1);\n \n if (count > 0) {\n return components.join('.');\n }\n }\n \n return null;\n }\n \n /**\n * Calculate complexity score for a selection set\n */\n private calculateComplexityScore(selectionSet: string[], maxDepth: number, wildcardCount: number): number {\n let score = 0;\n \n // Base score from field count\n score += selectionSet.length;\n \n // Penalty for depth\n score += maxDepth * 5;\n \n // Heavy penalty for wildcards\n score += wildcardCount * 10;\n \n // Penalty for complex selectors\n for (const selector of selectionSet) {\n if (selector.includes('*')) {\n score += 5;\n }\n if (selector.split('.').length > 2) {\n score += 3;\n }\n }\n \n return score;\n }\n \n /**\n * Fix complexity issues in a selection set\n */\n private fixComplexityIssues(selectionSet: string[], validationResult: ComplexityValidationResult): string[] {\n const limits = this.DEFAULT_CONFIG.complexityLimits;\n let fixedSet = [...selectionSet];\n \n // Remove selectors that are too long\n fixedSet = fixedSet.filter(selector => {\n if (selector.length > limits.maxSelectorLength) {\n console.warn(`SelectionSetGenerator: Removing selector \"${selector}\" due to excessive length`);\n return false;\n }\n return true;\n });\n \n // Remove selectors that are too deeply nested\n fixedSet = fixedSet.filter(selector => {\n const depth = (selector.match(/\\./g) || []).length;\n if (depth > limits.maxNestingDepth) {\n console.warn(`SelectionSetGenerator: Removing selector \"${selector}\" due to excessive nesting depth`);\n return false;\n }\n return true;\n });\n \n // Limit wildcard selections\n let wildcardCount = 0;\n fixedSet = fixedSet.filter(selector => {\n if (selector.includes('*')) {\n wildcardCount++;\n if (wildcardCount > limits.maxWildcardSelections) {\n console.warn(`SelectionSetGenerator: Removing wildcard selector \"${selector}\" due to limit`);\n return false;\n }\n }\n return true;\n });\n \n // Remove circular references\n if (limits.preventCircularReferences && validationResult.circularReferences.length > 0) {\n const circularSelectors = new Set(validationResult.circularReferences);\n fixedSet = fixedSet.filter(selector => {\n if (circularSelectors.has(selector)) {\n console.warn(`SelectionSetGenerator: Removing selector \"${selector}\" due to circular reference`);\n return false;\n }\n return true;\n });\n }\n \n // Truncate to field count limit\n if (fixedSet.length > limits.maxFieldCount) {\n console.warn(`SelectionSetGenerator: Truncating selection set from ${fixedSet.length} to ${limits.maxFieldCount} fields`);\n fixedSet = fixedSet.slice(0, limits.maxFieldCount);\n }\n \n // Ensure required fields are still present\n for (const requiredField of this.DEFAULT_CONFIG.requiredFields) {\n if (!fixedSet.includes(requiredField)) {\n fixedSet.unshift(requiredField);\n }\n }\n \n return fixedSet;\n }\n \n /**\n * Generate a cache key for a relationship configuration\n */\n private generateCacheKey(config: RelationshipConfiguration): string {\n const key: CacheKey = {\n relationshipModel: config.relationshipModelName,\n fieldName: config.fieldName,\n targetModel: this.configurationAnalyzer.extractTargetModelName(config),\n schemaVersion: this.getSchemaVersion()\n };\n \n return JSON.stringify(key);\n }\n \n /**\n * Get cached selection set if available\n */\n private getCachedSelectionSet(cacheKey: string): CachedSelectionSet | null {\n const cached = this.selectionSetCache.get(cacheKey);\n if (cached) {\n // Update access count\n cached.accessCount++;\n return cached;\n }\n return null;\n }\n \n /**\n * Cache a generated selection set\n */\n private cacheSelectionSet(cacheKey: string, selectionSet: string[]): void {\n const cached: CachedSelectionSet = {\n key: JSON.parse(cacheKey),\n selectionSet: [...selectionSet],\n createdAt: new Date(),\n accessCount: 1\n };\n \n this.selectionSetCache.set(cacheKey, cached);\n \n // Implement simple cache size limit\n if (this.selectionSetCache.size > 100) {\n this.evictOldestCacheEntries();\n }\n }\n \n /**\n * Evict oldest cache entries when cache gets too large\n */\n private evictOldestCacheEntries(): void {\n const entries = Array.from(this.selectionSetCache.entries());\n entries.sort((a, b) => a[1].createdAt.getTime() - b[1].createdAt.getTime());\n \n // Remove oldest 20% of entries\n const toRemove = Math.floor(entries.length * 0.2);\n for (let i = 0; i < toRemove; i++) {\n this.selectionSetCache.delete(entries[i][0]);\n }\n \n console.log(`SelectionSetGenerator: Evicted ${toRemove} old cache entries`);\n }\n \n /**\n * Get schema version for cache invalidation\n */\n private getSchemaVersion(): string | undefined {\n // In a real implementation, this could be based on schema hash or version\n // For now, we'll use schema availability as a simple version indicator\n return this.schemaIntrospector.isSchemaAvailable() ? 'schema-available' : 'schema-unavailable';\n }\n \n /**\n * Get cache statistics for debugging\n */\n getCacheStats(): {\n size: number;\n totalAccesses: number;\n entries: Array<{\n key: CacheKey;\n selectionSet: string[];\n createdAt: Date;\n accessCount: number;\n }>;\n } {\n const entries = Array.from(this.selectionSetCache.values());\n const totalAccesses = entries.reduce((sum, entry) => sum + entry.accessCount, 0);\n \n return {\n size: this.selectionSetCache.size,\n totalAccesses,\n entries: entries.map(entry => ({\n key: entry.key,\n selectionSet: [...entry.selectionSet],\n createdAt: entry.createdAt,\n accessCount: entry.accessCount\n }))\n };\n }\n \n /**\n * Get optimization statistics for debugging\n */\n getOptimizationStats(): {\n displayOptimizationEnabled: boolean;\n complexityLimits: ComplexityLimits;\n displayConfig: DisplayOptimizationConfig;\n } {\n return {\n displayOptimizationEnabled: this.DEFAULT_DISPLAY_CONFIG.enabled,\n complexityLimits: { ...this.DEFAULT_CONFIG.complexityLimits },\n displayConfig: { ...this.DEFAULT_DISPLAY_CONFIG }\n };\n }\n \n /**\n * Analyze a selection set for optimization opportunities\n */\n analyzeSelectionSetOptimization(selectionSet: string[]): {\n totalFields: number;\n displayRelevantFields: number;\n complexityScore: number;\n optimizationOpportunities: string[];\n } {\n const mockConfig: RelationshipConfiguration = {\n relationshipModelName: '',\n baseModelName: '',\n fieldName: 'mock',\n associatedWith: ''\n };\n \n const analyses = selectionSet.map(selector => this.analyzeFieldForDisplay(selector, mockConfig));\n const displayRelevantCount = analyses.filter(a => a.isDisplayRelevant).length;\n const complexityScore = this.calculateComplexityScore(\n selectionSet, \n Math.max(...selectionSet.map(s => (s.match(/\\./g) || []).length)),\n selectionSet.filter(s => s.includes('*')).length\n );\n \n const opportunities: string[] = [];\n \n // Identify optimization opportunities\n if (displayRelevantCount < selectionSet.length * 0.5) {\n opportunities.push('Many non-display fields could be removed');\n }\n \n if (complexityScore > 30) {\n opportunities.push('High complexity score suggests simplification needed');\n }\n \n const deepFields = selectionSet.filter(s => (s.match(/\\./g) || []).length > 2);\n if (deepFields.length > 0) {\n opportunities.push(`${deepFields.length} deeply nested fields could be simplified`);\n }\n \n const wildcardFields = selectionSet.filter(s => s.includes('*'));\n if (wildcardFields.length > 1) {\n opportunities.push(`${wildcardFields.length} wildcard selections could be made more specific`);\n }\n \n return {\n totalFields: selectionSet.length,\n displayRelevantFields: displayRelevantCount,\n complexityScore,\n optimizationOpportunities: opportunities\n };\n }\n \n /**\n * Initialize the service with schema data\n */\n initializeWithSchema(amplifyOutputs: any): void {\n this.schemaIntrospector.initializeSchema(amplifyOutputs);\n this.clearCache(); // Clear cache when schema changes\n console.log('SelectionSetGenerator: Initialized with schema data');\n }\n}","import { Component } from '@angular/core';\n\n@Component({\n selector: 'snteam-amplify-angular-core',\n standalone: true,\n imports: [],\n template: `\n <p>\n amplify-angular-core works!\n </p>\n `,\n styles: ``,\n})\nexport class AmplifyAngularCore {\n\n}\n\n// Export Dynamic Relationship Loader interfaces and types\nexport * from './interfaces';\nexport * from './types';\n\n// Export Dynamic Relationship Loader services (placeholder implementations)\nexport { SelectionSetGeneratorService } from './services/selection-set-generator.service';\nexport { ConfigurationAnalyzerService } from './services/configuration-analyzer.service';\nexport { SchemaIntrospectorService } from './services/schema-introspector.service';\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, Validators, AbstractControl } from '@angular/forms';\nimport {\n QuestionBase,\n TextboxQuestion,\n NumberQuestion,\n DatePickerQuestion,\n DropdownQuestion,\n FormGroupQuestion\n} from '../classes/questions';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmplifyFormBuilderService {\n\n skipFields: string[] = ['createdAt', 'updatedAt'];\n\n materialInputs: string[] = [\n 'textbox',\n 'int',\n 'number',\n 'color',\n 'email',\n 'month',\n 'number',\n 'password',\n 'search',\n 'tel',\n 'text',\n 'time',\n 'url',\n 'week'\n ];\n \n switchInputs: string[] = ['dropdown'];\n refInputs: string[] = ['async-dropdown'];\n formGroupInputs: string[] = ['formgroup']; // we skip these and handle them in the form\n datePickerInputs = ['date', 'datepicker', 'datetime-local'];\n\n private outputs: any;\n\n constructor(private fb: FormBuilder) { }\n\n /**\n * Initialize the service with Amplify outputs\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeOutputs(outputs: any) {\n this.outputs = outputs;\n }\n\n getInputTypeFromFieldType(type: string): string | undefined {\n if (this.materialInputs.includes(type)) return 'materialInputs';\n if (this.switchInputs.includes(type)) return 'switchInputs';\n if (this.refInputs.includes(type)) return 'refInputs';\n if (this.formGroupInputs.includes(type)) return 'formGroupInputs';\n if (this.datePickerInputs.includes(type)) return 'datePickerInputs';\n\n return undefined;\n }\n\n getMaterialInputs(): string[] {\n return this.materialInputs;\n }\n\n getSwitchInputs(): string[] {\n return this.switchInputs;\n }\n\n getRefInputs(): string[] {\n return this.refInputs;\n }\n\n getErrorStrForControl(ctrl: AbstractControl, label?: string): string {\n const errorMap: { [key: string]: string } = {\n email: 'Please enter a valid email address',\n invalidPhoneNumber: 'Please enter a phone number in (111) 222-3333 format.',\n required: (label || 'This field') + ' is required.'\n };\n\n if (!ctrl.errors) return '';\n \n let errStrs: string[] = [];\n let keys = Object.keys(ctrl.errors);\n \n for (let err of keys) {\n if (errorMap[err]) {\n errStrs.push(errorMap[err]);\n } else {\n errStrs.push(`Invalid ${err}`);\n }\n }\n \n return errStrs.join(', ');\n }\n\n /** Shared Methods for FormControls **/\n getPathFromRoot(searchKey: string, controls: any, pathArr?: string[]): string {\n if (!pathArr) pathArr = [];\n\n const isInControls = Object.keys(controls).find(name => name === searchKey);\n if (isInControls) {\n pathArr.push(searchKey);\n return pathArr.join('.');\n } else {\n const tempArr: string[] = [];\n const entries = Object.entries(controls);\n \n for (let e of entries) {\n let controlName = e[0];\n let controlObj = e[1];\n \n if (controlObj instanceof FormGroup) {\n console.log('getPathFromRoot controlName', typeof controlName, controlName, 'controlObj', controlObj);\n tempArr.push(controlName);\n console.log('getPathFromRoot', controlName, 'is a FormGroup in path tempArr', tempArr);\n \n const childControls = (controls[controlName] as FormGroup).controls;\n console.log('getPathFromRoot childControls', childControls);\n \n let childPath = this.getPathFromRoot(searchKey, childControls, [...pathArr, ...tempArr]);\n if (childPath !== '') return childPath;\n }\n }\n return '';\n }\n }\n\n /** FormBuilder Methods **/\n\n private _getFormGroupFromFieldsArr(fields: any): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n console.log('_getFormGroupFromFieldsArr fields', fields);\n const formGroup = this.fb.group({});\n const fieldsArr = Object.values(fields);\n \n fieldsArr.forEach((field: any) => {\n if (this.skipFields.indexOf(field.name) > -1) return;\n\n if (typeof field.type === 'object') {\n if (field.type.model) {\n formGroup.addControl(field.name, this._getControlForField(field));\n }\n if (field.type.nonModel) {\n formGroup.addControl(field.name, this._getGroupControlForNonModel(field));\n }\n } else {\n formGroup.addControl(field.name, this._getControlForField(field));\n }\n });\n \n return formGroup;\n }\n\n private _getGroupControlForNonModel(field: any): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n const nonModel = field.type.nonModel;\n const fields = this.outputs.data.model_introspection.nonModels[nonModel as keyof typeof this.outputs.data.model_introspection.nonModels].fields;\n return this._getFormGroupFromFieldsArr(fields);\n }\n\n private _getControlForField(field: any): FormControl {\n const validators = field.required ? [Validators.required] : [];\n return new FormControl(field.value || '', validators);\n }\n\n buildFormForModel(model: string): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n const config = this.outputs.data.model_introspection.models[model as keyof typeof this.outputs.data.model_introspection.models].fields;\n const formGroup = this._getFormGroupFromFieldsArr(config);\n return formGroup;\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'valToTitle',\n standalone: true\n})\nexport class ValToTitlePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value) {\n return '';\n }\n\n let fixed = value.replace(new RegExp('_', 'g'), ' ').split(' ')\n .map(w => w.length > 0 ? w[0].toUpperCase() + w.substring(1).toLowerCase() : '')\n .join(' ');\n\n return fixed;\n }\n}","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { SelectionSetGeneratorService } from './selection-set-generator.service';\nimport { ErrorHandlerService } from './error-handler.service';\nimport { RelationshipConfiguration } from '../interfaces/selection-set-generator.interface';\nimport { RelationshipSelectionSetConfig, RelationshipSelectionConfig, AmplifyModelServiceConfig } from '../interfaces/relationship-config.interface';\nimport { SelectionSetErrorType } from '../types/error.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmplifyModelService {\n\n private client: any;\n private relationshipConfig: RelationshipSelectionSetConfig | null = null;\n\n constructor(\n private selectionSetGenerator: SelectionSetGeneratorService,\n private errorHandler: ErrorHandlerService\n ) { \n // Client will be initialized when Amplify is configured by the consuming application\n }\n\n /**\n * Configure the service with relationship selection sets\n * This should be called by the consuming application to define how relationships should be queried\n */\n configure(config: AmplifyModelServiceConfig): void {\n if (config.relationshipSelectionSets) {\n this.relationshipConfig = config.relationshipSelectionSets;\n console.log('AmplifyModelService: Configured with relationship selection sets:', this.relationshipConfig);\n }\n }\n\n /**\n * Set relationship selection set configuration directly\n */\n setRelationshipConfig(config: RelationshipSelectionSetConfig): void {\n this.relationshipConfig = config;\n console.log('AmplifyModelService: Updated relationship selection sets configuration:', this.relationshipConfig);\n }\n\n /**\n * Initialize the service with the Amplify client\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeClient<T>(schema?: T) {\n // Dynamic import to avoid build-time dependency\n try {\n // This will be provided by the consuming application\n this.client = (globalThis as any).amplifyClient;\n if (!this.client) {\n console.warn('AmplifyModelService: No client provided. Call with generateClient result.');\n }\n } catch (error) {\n console.error('Failed to initialize Amplify client:', error);\n }\n }\n\n /**\n * Set the client directly (for consuming applications)\n */\n setClient(client: any) {\n this.client = client;\n }\n\n async getMenuLinksFromModels(outputs: any, config?: { skipModels?: string[] }): Promise<any[]> {\n const defaultConfig = { skipModels: ['ServiceCustomer', 'ServiceProduct', 'Todo'] };\n const finalConfig = { ...defaultConfig, ...config };\n\n let pageButtons: any[] = [\n { label: 'Home', route: '/' },\n { label: 'Configurations', route: '/configurations' }\n ];\n let models = outputs.data.model_introspection.models;\n\n // Get TableConfig records to check hide_in_menu settings\n let tableConfigs: any[] = [];\n try {\n if (this.client && this.client.models && this.client.models.TableConfig) {\n const tableConfigsResult = await this.client.models.TableConfig.list();\n if (tableConfigsResult && tableConfigsResult.data) {\n tableConfigs = tableConfigsResult.data;\n }\n }\n } catch (error) {\n console.warn('AmplifyModelService: Could not fetch TableConfig records for menu filtering:', error);\n }\n\n Object.values(models).forEach((model: any) => {\n if (finalConfig.skipModels!.includes(model.name)) return;\n \n // Check if this model should be hidden based on TableConfig\n const tableConfig = tableConfigs.find((config: any) => config.name === model.name);\n if (tableConfig && tableConfig.hide_in_menu === true) {\n console.log('AmplifyModelService: Hiding model from menu:', model.name);\n return; // Skip this model\n }\n \n // Use TableConfig label if available, otherwise use model name\n const label = tableConfig && tableConfig.label ? tableConfig.label : model.name;\n \n console.log('model', model);\n pageButtons.push({ label: label, route: '/list/' + model.name });\n });\n console.log('models', models);\n\n return pageButtons;\n }\n\n /**\n * TODO: Make this generate dynamically using refModel Names and types\n * TODO: Bring the refModel generation in here.\n * Edit this function with form fields...\n * \n * ... probably don't need this...\n */\n getEmptyObjectForModel(model: string): any {\n switch (model) {\n case 'Customer':\n return {\n name: '',\n contact: {},\n services: [],\n contact_preference: '',\n notes: [],\n };\n case 'Service':\n return {\n cost: 0.00,\n price: 0.00,\n customers: [],\n products: [],\n id: '',\n title: ''\n };\n default:\n return {};\n }\n }\n\n getRelationshipChoices(config: any, selectedOptions?: any[]): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter: any = {};\n /*if (selectedOptions){ //TODO: FILTER OUT SELECTED ITEMS\n filter = {id: {nin: [...selectedOptions]}};\n }*/\n console.log('getRelationshipChoices filter', filter);\n\n try {\n const modelName = config.partnerModelName;\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ filter: filter });\n } else {\n console.error(`Model ${modelName} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + config.partnerModelName + 'items', error);\n return null;\n }\n }\n\n getRefChoices(config: any, itemId: string, selectedOptions?: any[]): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter = this.getRelationshipFilter(config, itemId, selectedOptions);\n console.log('getRefChoices getRelationshipFilter model', config.partnerModelName, 'filter', filter);\n \n try {\n const modelName = config.partnerModelName;\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ filter: filter });\n } else {\n console.error(`Model ${modelName} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + config.partnerModelName + 'items', error);\n return null;\n }\n }\n\n async deleteRelationship(relModel: string, relId: string): Promise<any> {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let obj = { id: relId };\n \n if (this.client.models[relModel]) {\n return this.client.models[relModel].delete(obj);\n } else {\n console.error(`Relationship model ${relModel} not found in client`);\n return null;\n }\n }\n\n createRelationship(relModel: string, relItem: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('createRelationship starting for relModel', relModel, 'relItem', relItem);\n \n if (this.client.models[relModel]) {\n return this.client.models[relModel].create(relItem);\n } else {\n console.error(`Relationship model ${relModel} not found in client`);\n return null;\n }\n }\n\n getRelationshipFilter(config: any, baseId?: string, removeIds?: string[]): any {\n let condition: any = {};\n condition[config.associatedWith] = { eq: baseId };\n \n if (removeIds && removeIds.length > 0) {\n let conditionArr = [\n condition,\n { id: { ne: removeIds } }\n ];\n let andCondition = { and: conditionArr };\n console.log('getRelationshipFilter has andCondition', andCondition);\n return andCondition;\n } else {\n condition[config.associatedWith] = { eq: baseId };\n console.log('getRelationshipFilter config', config, 'condition', condition);\n return condition;\n }\n }\n\n /**\n * Get selection set for relationship queries using configuration\n * This replaces the complex dynamic generation with simple configuration lookup\n * @param config Relationship configuration object\n * @param baseId Base record ID (for compatibility, not used in generation)\n * @returns Array of GraphQL field selectors\n */\n getAmplifySelectionSet(config: RelationshipConfiguration, baseId: string): string[] {\n try {\n if (!config) {\n console.warn('AmplifyModelService: Configuration is null or undefined, using minimal fallback');\n return ['id'];\n }\n\n console.log('AmplifyModelService: Getting selection set for relationship:', {\n relationshipModel: config.relationshipModelName,\n fieldName: config.fieldName,\n baseModelName: config.baseModelName,\n associatedWith: config.associatedWith,\n baseId\n });\n \n // Try to get selection set from configuration first\n const configuredSelectionSet = this.getConfiguredSelectionSet(config);\n if (configuredSelectionSet && configuredSelectionSet.length > 0) {\n console.log('AmplifyModelService: Using configured selection set:', configuredSelectionSet);\n return configuredSelectionSet;\n }\n \n // Fall back to default selection set if configured\n if (this.relationshipConfig?.defaultSelectionSet && this.relationshipConfig.defaultSelectionSet.length > 0) {\n console.log('AmplifyModelService: Using default configured selection set:', this.relationshipConfig.defaultSelectionSet);\n return this.relationshipConfig.defaultSelectionSet;\n }\n \n // Fall back to dynamic generation if enabled and no configuration found\n if (this.relationshipConfig?.enableFallback !== false) {\n console.log('AmplifyModelService: No configuration found, falling back to dynamic generation');\n const dynamicSelectionSet = this.selectionSetGenerator.generateSelectionSet(config);\n \n if (dynamicSelectionSet && dynamicSelectionSet.length > 0) {\n console.log('AmplifyModelService: Using dynamic selection set:', dynamicSelectionSet);\n return dynamicSelectionSet;\n }\n }\n \n // Final fallback - use a simple, predictable selection set\n const fallbackSelectionSet = this.generateSimpleFallbackSelectionSet(config);\n console.log('AmplifyModelService: Using simple fallback selection set:', fallbackSelectionSet);\n \n // Ensure we never return an empty array\n if (fallbackSelectionSet.length === 0) {\n console.warn('AmplifyModelService: Fallback selection set is empty, using minimal default');\n return ['id'];\n }\n \n return fallbackSelectionSet;\n \n } catch (error) {\n console.error('AmplifyModelService: Error getting selection set, using minimal fallback:', error);\n return ['id'];\n }\n }\n\n /**\n * Get configured selection set for a specific relationship\n */\n private getConfiguredSelectionSet(config: RelationshipConfiguration): string[] | null {\n if (!this.relationshipConfig?.relationships) {\n return null;\n }\n \n // Look for exact match first\n const exactMatch = this.relationshipConfig.relationships.find(rel => \n rel.relationshipModel === config.relationshipModelName && \n rel.fieldName === config.fieldName\n );\n \n if (exactMatch) {\n console.log('AmplifyModelService: Found exact configuration match:', exactMatch);\n return exactMatch.selectionSet;\n }\n \n // Look for relationship model match\n const modelMatch = this.relationshipConfig.relationships.find(rel => \n rel.relationshipModel === config.relationshipModelName\n );\n \n if (modelMatch) {\n console.log('AmplifyModelService: Found relationship model match:', modelMatch);\n return modelMatch.selectionSet;\n }\n \n // Look for field name match\n const fieldMatch = this.relationshipConfig.relationships.find(rel => \n rel.fieldName === config.fieldName\n );\n \n if (fieldMatch) {\n console.log('AmplifyModelService: Found field name match:', fieldMatch);\n return fieldMatch.selectionSet;\n }\n \n return null;\n }\n\n /**\n * Generate a simple, predictable fallback selection set\n */\n private generateSimpleFallbackSelectionSet(config: RelationshipConfiguration): string[] {\n const selectionSet = ['id'];\n \n if (config.fieldName) {\n // Add the relationship field itself with basic nested fields\n selectionSet.push(config.fieldName);\n \n // Add common nested fields that are likely to exist\n const commonFields = ['id', 'name', 'title', 'label', 'description'];\n for (const field of commonFields) {\n selectionSet.push(`${config.fieldName}.${field}`);\n }\n }\n \n console.log('AmplifyModelService: Generated simple fallback selection set:', selectionSet);\n return selectionSet;\n }\n\n setRelatedSub(config: any, baseId: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter = this.getRelationshipFilter(config, baseId);\n const modelName = config.relationshipModelName;\n \n if (this.client.models[modelName]) {\n return this.client.models[modelName].onCreate({ filter: filter });\n } else {\n console.error(`Relationship model ${modelName} not found in client`);\n return null;\n }\n }\n\n /**\n * Get related items with enhanced error handling and retry logic\n * @param config Relationship configuration object\n * @param baseId Base record ID to filter relationships\n * @returns Observable of related items with retry logic on GraphQL errors\n */\n getRelatedItems(config: RelationshipConfiguration, baseId: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n const filter = this.getRelationshipFilter(config, baseId);\n const modelName = config.relationshipModelName;\n\n if (!this.client.models[modelName]) {\n console.error(`AmplifyModelService: Relationship model ${modelName} not found in client`);\n return null;\n }\n\n // Attempt to get related items with progressive retry logic\n return this.getRelatedItemsWithRetry(config, baseId, filter, modelName);\n }\n\n /**\n * Get related items with progressive retry logic for GraphQL errors\n * Implements progressive fallback: original → comprehensive → selective → minimal\n */\n private getRelatedItemsWithRetry(\n config: RelationshipConfiguration, \n baseId: string, \n filter: any, \n modelName: string,\n retryAttempt: number = 0,\n previousErrors: string[] = []\n ): Observable<any> | null {\n \n const maxRetries = 3;\n \n try {\n // Generate selection set based on retry attempt\n let selectionSet: string[];\n \n if (retryAttempt === 0) {\n // First attempt: Use dynamic generation\n selectionSet = this.getAmplifySelectionSet(config, baseId);\n } else {\n // Subsequent attempts: Use progressive fallback\n console.log(`AmplifyModelService: Retry attempt ${retryAttempt} for ${modelName}, using fallback selection set`);\n selectionSet = this.selectionSetGenerator.generateFallbackSelectionSetWithRetry(\n config.fieldName, \n previousErrors\n );\n }\n\n // Log the attempt\n this.logQueryAttempt(config, selectionSet, retryAttempt, previousErrors);\n\n // Prepare query options\n const queryOptions: any = { filter: filter };\n \n // Only include selectionSet if it's not empty to avoid GraphQL syntax errors\n if (selectionSet && selectionSet.length > 0) {\n queryOptions.selectionSet = [...selectionSet];\n }\n\n // Execute the query\n const queryObservable = this.client.models[modelName].observeQuery(queryOptions);\n \n // Wrap the observable to handle GraphQL errors with retry logic\n return new Observable(subscriber => {\n const subscription = queryObservable.subscribe({\n next: (result: any) => {\n // Log successful query\n this.logQuerySuccess(config, selectionSet, retryAttempt, result);\n \n // Validate that relationship field data is populated\n if (this.validateRelationshipFieldPopulation(result, config)) {\n subscriber.next(result);\n } else {\n // Relationship field not populated, try retry if possible\n const error = new Error(`Relationship field '${config.fieldName}' not populated in query results`);\n this.handleQueryError(error, config, baseId, filter, modelName, retryAttempt, previousErrors, subscriber);\n }\n },\n error: (error: any) => {\n this.handleQueryError(error, config, baseId, filter, modelName, retryAttempt, previousErrors, subscriber);\n },\n complete: () => {\n subscriber.complete();\n }\n });\n\n // Return cleanup function\n return () => subscription.unsubscribe();\n });\n\n } catch (error) {\n console.error(`AmplifyModelService: Error in retry attempt ${retryAttempt}:`, error);\n \n // If we've exhausted retries, return null\n if (retryAttempt >= maxRetries) {\n this.logFinalFailure(config, previousErrors, error);\n return null;\n }\n \n // Try next retry level\n const newErrors = [...previousErrors, error instanceof Error ? error.message : String(error)];\n return this.getRelatedItemsWithRetry(config, baseId, filter, modelName, retryAttempt + 1, newErrors);\n }\n }\n\n /**\n * Handle GraphQL query errors with retry logic\n * Enhanced with comprehensive error logging and context\n */\n private handleQueryError(\n error: any,\n config: RelationshipConfiguration,\n baseId: string,\n filter: any,\n modelName: string,\n retryAttempt: number,\n previousErrors: string[],\n subscriber: any\n ): void {\n const maxRetries = 3;\n const errorMessage = error instanceof Error ? error.message : String(error);\n \n // Log comprehensive error details using ErrorHandlerService\n const selectionSetError = this.errorHandler.logGraphQLError(\n error,\n config,\n [], // Selection set will be logged separately in retry attempts\n retryAttempt,\n previousErrors\n );\n \n console.error(`AmplifyModelService: GraphQL query error on attempt ${retryAttempt + 1}:`, error);\n \n // Check if we should retry\n if (retryAttempt < maxRetries && this.shouldRetryOnError(error)) {\n console.log(`AmplifyModelService: Retrying with simpler selection set (attempt ${retryAttempt + 1}/${maxRetries})`);\n \n // Add current error to the list\n const newErrors = [...previousErrors, errorMessage];\n \n // Attempt retry with next fallback level\n const retryObservable = this.getRelatedItemsWithRetry(\n config, \n baseId, \n filter, \n modelName, \n retryAttempt + 1, \n newErrors\n );\n \n if (retryObservable) {\n // Subscribe to retry attempt\n const retrySubscription = retryObservable.subscribe({\n next: (result: any) => {\n // Log successful recovery\n this.errorHandler.logSuccessfulRecovery(\n selectionSetError,\n `retry_attempt_${retryAttempt + 1}`,\n [] // Selection set would be determined in retry\n );\n subscriber.next(result);\n },\n error: (retryError: any) => subscriber.error(retryError),\n complete: () => subscriber.complete()\n });\n \n // Handle cleanup\n subscriber.add(() => retrySubscription.unsubscribe());\n } else {\n // No more retries possible\n this.errorHandler.logFailedRecovery(\n selectionSetError,\n newErrors,\n new Error('Retry observable creation failed')\n );\n subscriber.error(error);\n }\n } else {\n // No more retries or error is not retryable\n const finalErrors = [...previousErrors, errorMessage];\n this.errorHandler.logFailedRecovery(\n selectionSetError,\n finalErrors,\n error\n );\n \n console.error('AmplifyModelService: All retry attempts exhausted or error not retryable');\n subscriber.error(error);\n }\n }\n\n /**\n * Determine if an error should trigger a retry\n * Enhanced with comprehensive error pattern matching\n */\n private shouldRetryOnError(error: any): boolean {\n try {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const errorString = errorMessage.toLowerCase();\n \n // Retry on GraphQL field errors, selection set errors, but not on auth errors\n const retryableErrors = [\n 'field',\n 'selection',\n 'cannot query',\n 'unknown field',\n 'syntax error',\n 'invalid selection set',\n 'validation error',\n 'parse error'\n ];\n \n const nonRetryableErrors = [\n 'unauthorized',\n 'forbidden',\n 'access denied',\n 'authentication',\n 'permission',\n 'not authorized',\n 'invalid credentials'\n ];\n \n // Don't retry on auth errors\n if (nonRetryableErrors.some(pattern => errorString.includes(pattern))) {\n console.log(`AmplifyModelService: Not retrying due to auth error: ${errorMessage}`);\n return false;\n }\n \n // Retry on field/selection errors\n const shouldRetry = retryableErrors.some(pattern => errorString.includes(pattern));\n console.log(`AmplifyModelService: Error retry decision: ${shouldRetry} for error: ${errorMessage}`);\n \n return shouldRetry;\n \n } catch (retryDecisionError) {\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Error determining retry eligibility: ${retryDecisionError instanceof Error ? retryDecisionError.message : String(retryDecisionError)}`,\n undefined,\n undefined,\n {\n method: 'shouldRetryOnError',\n originalError: error,\n retryDecisionError: {\n message: retryDecisionError instanceof Error ? retryDecisionError.message : String(retryDecisionError),\n stack: retryDecisionError instanceof Error ? retryDecisionError.stack : undefined\n }\n }\n );\n \n // Default to not retrying if we can't determine\n return false;\n }\n }\n\n /**\n * Validate that relationship field data is populated in query results\n * Simplified validation that's more predictable and easier to debug\n */\n private validateRelationshipFieldPopulation(result: any, config: RelationshipConfiguration): boolean {\n try {\n if (!result || !result.data) {\n console.warn('AmplifyModelService: Query result is missing or has no data property');\n return false;\n }\n \n const records = Array.isArray(result.data) ? result.data : [result.data];\n \n if (records.length === 0) {\n console.warn('AmplifyModelService: No records returned from query');\n return false;\n }\n \n console.log(`AmplifyModelService: Validating relationship field '${config.fieldName}' in ${records.length} records`);\n \n // Simple validation: if we have records, consider it successful\n // The actual relationship data validation will happen at the UI level\n let hasAnyData = false;\n \n for (let i = 0; i < records.length; i++) {\n const record = records[i];\n if (record && typeof record === 'object' && Object.keys(record).length > 0) {\n hasAnyData = true;\n console.log(`AmplifyModelService: Record ${i} has data:`, Object.keys(record));\n break;\n }\n }\n \n if (!hasAnyData) {\n console.warn('AmplifyModelService: No valid records found in query result');\n return false;\n }\n \n console.log(`AmplifyModelService: Relationship validation successful - found ${records.length} records with data`);\n return true;\n \n } catch (error) {\n console.error('AmplifyModelService: Error validating relationship field population:', error);\n // Be permissive on validation errors\n return true;\n }\n }\n\n /**\n * Log query attempt details\n */\n private logQueryAttempt(\n config: RelationshipConfiguration, \n selectionSet: string[], \n retryAttempt: number, \n previousErrors: string[]\n ): void {\n console.log('AmplifyModelService: Query attempt details:', {\n attempt: retryAttempt + 1,\n config: {\n relationshipModelName: config.relationshipModelName,\n fieldName: config.fieldName\n },\n selectionSet,\n previousErrors: previousErrors.length,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Log successful query details\n */\n private logQuerySuccess(\n config: RelationshipConfiguration, \n selectionSet: string[], \n retryAttempt: number, \n result: any\n ): void {\n const recordCount = result?.data ? (Array.isArray(result.data) ? result.data.length : 1) : 0;\n \n console.log('AmplifyModelService: Query successful:', {\n attempt: retryAttempt + 1,\n config: {\n relationshipModelName: config.relationshipModelName,\n fieldName: config.fieldName\n },\n selectionSet,\n recordCount,\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Log query error details\n */\n private logQueryError(config: RelationshipConfiguration, error: any, retryAttempt: number): void {\n console.error('AmplifyModelService: Query error details:', {\n attempt: retryAttempt + 1,\n config: {\n relationshipModelName: config.relationshipModelName,\n baseModelName: config.baseModelName,\n fieldName: config.fieldName,\n associatedWith: config.associatedWith\n },\n error: {\n message: error instanceof Error ? error.message : String(error),\n type: typeof error,\n name: error instanceof Error ? error.name : undefined\n },\n timestamp: new Date().toISOString()\n });\n }\n\n /**\n * Log final failure when all retries are exhausted\n * Enhanced with comprehensive error context and recovery suggestions\n */\n private logFinalFailure(config: RelationshipConfiguration, allErrors: string[], finalError: any): void {\n try {\n const errorSummary = {\n config: {\n relationshipModelName: config.relationshipModelName,\n baseModelName: config.baseModelName,\n fieldName: config.fieldName,\n associatedWith: config.associatedWith\n },\n totalAttempts: allErrors.length + 1,\n allErrors,\n finalError: {\n message: finalError instanceof Error ? finalError.message : String(finalError),\n type: typeof finalError,\n name: finalError instanceof Error ? finalError.name : undefined\n },\n timestamp: new Date().toISOString(),\n suggestions: [\n 'Check if the relationship model exists in your Amplify schema',\n 'Verify that the field name matches the relationship field in your model',\n 'Ensure the relationship is properly configured in your GraphQL schema',\n 'Check if there are any authorization rules preventing access to the relationship data'\n ]\n };\n\n // Log using ErrorHandlerService for comprehensive tracking\n this.errorHandler.logFailedRecovery(\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n 'All retry attempts failed for relationship query',\n config,\n undefined,\n {\n method: 'logFinalFailure',\n errorSummary\n }\n ),\n allErrors,\n finalError\n );\n\n console.error('AmplifyModelService: All retry attempts failed:', errorSummary);\n \n } catch (loggingError) {\n // Even logging failed - use basic console error\n console.error('AmplifyModelService: Critical error - failed to log final failure:', {\n originalError: finalError,\n loggingError,\n config: config?.fieldName || 'unknown'\n });\n }\n }\n\n createItemPromise(model: string, payload: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n if (this.client.models[model]) {\n return this.client.models[model].create(payload);\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n updateItemForModel(model: string, payload: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n if (this.client.models[model]) {\n return this.client.models[model].update(payload);\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n deleteItemForModel(model: string, id: string): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('AmplifyModelService: Deleting item for model:', model, 'id:', id);\n\n if (this.client.models[model]) {\n try {\n return this.client.models[model].delete({ id: id });\n } catch (error) {\n console.error(`AmplifyModelService: Error deleting item for model ${model}:`, error);\n throw error;\n }\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n getItemForModel(model: string, id: string): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('AmplifyModelService: Getting item for model:', model, 'id:', id);\n\n if (this.client.models[model]) {\n try {\n return this.client.models[model].get({ id: id });\n } catch (error) {\n console.error(`AmplifyModelService: Error getting item for model ${model}:`, error);\n throw error;\n }\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n listItemsForModel(model: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('this.listItems starting');\n \n try {\n if (this.client.models[model]) {\n return this.client.models[model].observeQuery();\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + model, error);\n return null;\n }\n }\n}","import { ChangeDetectionStrategy, Component, Input, OnInit, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n FormControl,\n FormControlName,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { CommonModule } from '@angular/common';\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\nimport { QuestionBase } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { provideNativeDateAdapter } from '@angular/material/core';\n\n\n@Component({\n selector: 'snteam-dynamic-form-question',\n standalone: true,\n providers: [provideNativeDateAdapter()],\n imports: [CommonModule, ReactiveFormsModule, ValToTitlePipe, MatFormFieldModule, MatInputModule, MatSelectModule, MatDatepickerModule],\n templateUrl: './dynamic-form-question.component.html',\n styleUrl: './dynamic-form-question.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicFormQuestionComponent implements OnInit {\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n formControlPath: string = '';\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n refInputs: string[] = [];\n form!: any;\n ctrl!: any;\n items$!: Observable<any>\n\n afbs = inject(AmplifyFormBuilderService);\n\n constructor(private rootFormGroup: FormGroupDirective, private ams: AmplifyModelService) { }\n\n ngOnInit() {\n console.log('DynamicFormQuestionComponent question', this.question);\n this.form = this.rootFormGroup.control;\n this.ctrl = this.rootFormGroup.control.get(this.question.key);\n\n if (this.question.controlType == 'async-dropdown') {\n console.log('DynamicFormQuestionComponent has async-dropdown!');\n //this.items$ = this.ams.getRefChoices(this.question.targetModel);\n }\n }\n\n showError(): string {\n return this.afbs.getErrorStrForControl(this.ctrl, this.question.label);\n }\n}","<form [formGroup]=\"form\">\n @switch (afbs.getInputTypeFromFieldType(question.controlType)) {\n @case ('materialInputs'){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\">\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('datePickerInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [matDatepicker]=\"picker\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('switchInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @for (opt of question.options; track opt) {\n <mat-option [value]=\"opt.key\">{{opt.value | valToTitle}}</mat-option>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('refInputs') {\n @if (question.multiple){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\" multiple>\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n @else {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n }\n }\n</form>","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n FormControl,\n FormControlName,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { CommonModule } from '@angular/common';\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\nimport { QuestionBase } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport {MatSelectModule} from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { provideNativeDateAdapter } from '@angular/material/core';\n\n\n@Component({\n selector: 'snteam-dynamic-nested-form-question',\n standalone: true,\n providers: [provideNativeDateAdapter()],\n imports: [CommonModule, ReactiveFormsModule, ValToTitlePipe, MatFormFieldModule, MatInputModule, MatSelectModule, MatDatepickerModule],\n templateUrl: './dynamic-nested-form-question.component.html',\n styleUrl: './dynamic-nested-form-question.component.css'\n})\nexport class DynamicNestedFormQuestionComponent {\n\n @Input() groupName!: string;\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n formControlPath: string = '';\n form!: any;\n ctrl!: any;\n items$!: Observable<any>;\n afbs = inject(AmplifyFormBuilderService);\n\n\n constructor(private rootFormGroup: FormGroupDirective) {}\n\n ngOnInit() {\n console.log('DynamicNestedFormQuestionComponent question', this.question);\n var searchKey = this.groupName;\n var controls = this.rootFormGroup.control.controls;\n var pathStr = this.afbs.getPathFromRoot(searchKey, controls)//this.getPathFromRoot();\n this.form = this.rootFormGroup.control;\n this.formControlPath = pathStr + '.' + this.question.key;\n this.ctrl = this.rootFormGroup.control.get(this.formControlPath);\n if (this.question.key == 'services') console.log('DynamicNestedFormQuestionComponent has services');\n }\n\n showError():string {\n return this.afbs.getErrorStrForControl(this.ctrl, this.question.label);\n }\n}","<form autocomplete=\"off\" [formGroup]=\"formGroup\">\n <div [formGroupName]=\"groupName\">\n\n @switch (afbs.getInputTypeFromFieldType(question.controlType)) {\n @case ('materialInputs'){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\">\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('datePickerInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [matDatepicker]=\"picker\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('switchInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @for (opt of question.options; track opt) {\n <mat-option [value]=\"opt.key\">{{opt.value | valToTitle}}</mat-option>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('refInputs') {\n @if (question.multiple){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\" multiple>\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n @else {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n }\n }\n\n\n </div>\n</form>","import { Component, Input, OnInit } from '@angular/core';\nimport {\n FormControl,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup,\n AbstractControl\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\n\nimport { MatDividerModule } from '@angular/material/divider';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { DynamicNestedFormQuestionComponent } from '../dynamic-nested-form-question/dynamic-nested-form-question.component';\n\n@Component({\n selector: 'snteam-dynamic-form-group',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule,\n MatDividerModule,\n ValToTitlePipe, DynamicNestedFormQuestionComponent],\n templateUrl: './dynamic-form-group.component.html',\n styleUrl: './dynamic-form-group.component.css'\n})\nexport class DynamicFormGroupComponent {\n @Input() formGroupName!: string;\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n refInputs: string[] = [];\n formGroupInputs: string[] = ['formgroup'];\n form!: any;\n ctrl!: any;\n\n constructor(private rootFormGroup: FormGroupDirective, private afbs: AmplifyFormBuilderService) { }\n\n getControlName(c: AbstractControl): string | null {\n if (c.parent) {\n const formGroup: any = c.parent.controls;\n return Object.keys(formGroup).find(name => c === formGroup[name]) || null;\n }\n return null;\n }\n\n getPathFromRoot(controls?: any, pathArr?: string[]): string {\n if (!controls) controls = this.rootFormGroup.control.controls;\n if (!pathArr) pathArr = [];\n\n var isInControls = Object.keys(controls).find(name => name === this.question.key);\n if (isInControls) {\n pathArr.push(this.question.key);\n return pathArr.join('.');\n } else {\n var tempArr: string[] = [];\n var entries = Object.entries(controls);\n for (let e of entries) {\n let controlName = e[0];\n let controlObj = e[1];\n if (controlObj instanceof FormGroup) {\n //if (tempArr.length > 10) return '';\n tempArr.push(controlName);\n var childControls = controls[controlName].controls;\n let childPath = this.getPathFromRoot(childControls, tempArr);\n if (childPath != '') return childPath;\n };\n }\n return '';\n }\n\n return '';\n\n }\n\n ngOnInit() {\n //console.log('DynamicFormGroupComponent key starting:', this.question.key);\n\n this.materialInputs = this.afbs.getMaterialInputs();\n this.switchInputs = this.afbs.getSwitchInputs();\n this.refInputs = this.afbs.getRefInputs();\n\n if (this.formGroupName) {\n var searchKey = this.question.key;\n var controls = this.rootFormGroup.control.controls;\n var pathStr = this.afbs.getPathFromRoot(searchKey, controls)//this.getPathFromRoot();\n this.form = this.rootFormGroup.control.get(pathStr) as FormGroup;\n var controlName = this.getControlName(this.form);\n this.ctrl = this.rootFormGroup.control.get(this.question.key);\n console.log('DynamicFormGroupComponent init vals:', {\n formGroupName: this.formGroupName,\n question: this.question,\n key: this.question.key,\n searchKey: searchKey,\n controls: controls,\n pathStr: pathStr,\n controlName: controlName,\n ctrl: this.ctrl\n })\n }\n else {\n //console.log('DynamicFormGroupComponent will get main control form');\n this.form = this.rootFormGroup.control;\n }\n //console.log('DynamicFormGroupComponent question', this.question, 'form', this.form, 'formGroupName', typeof this.formGroupName, this.formGroupName);\n }\n}","<form autocomplete=\"off\" [formGroup]=\"form\">\n <h2>{{question.key | valToTitle}}</h2>\n <mat-divider></mat-divider>\n @for (q of $any(question).questions; track q) {\n @if (q.controlType != 'formgroup') {\n <div class=\"form-row\">\n <snteam-dynamic-nested-form-question [question]=\"q\" [formGroup]=\"formGroup\" [groupName]=\"question.key\"></snteam-dynamic-nested-form-question>\n </div>\n }\n @if (q.controlType == 'formgroup') {\n <div class=\"group-row\">\n <snteam-dynamic-form-group [question]=\"q\" [formGroup]=\"form\" [formGroupName]=\"q.key\"></snteam-dynamic-form-group>\n </div>\n }\n }\n <mat-divider></mat-divider>\n</form>","import { ChangeDetectionStrategy, Component, OnInit, inject, model, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Observable } from 'rxjs';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nexport interface DialogData {\n modelItem: any;\n rel: any;\n selectedItems: any[];\n}\n\n@Component({\n selector: 'snteam-add-relationship-dialog',\n standalone: true,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n MatSelectModule,\n MatButtonModule,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,],\n templateUrl: './add-relationship-dialog.component.html',\n styleUrl: './add-relationship-dialog.component.css'\n})\nexport class AddRelationshipDialogComponent implements OnInit {\n readonly dialogRef = inject(MatDialogRef<AddRelationshipDialogComponent>);\n readonly data = inject<DialogData>(MAT_DIALOG_DATA);\n readonly modelItem = model(this.data.modelItem);\n private ams = inject(AmplifyModelService);\n items$!: Observable<any>;\n\n ngOnInit() {\n console.log('AddRelationshipDialogComponent init this.data', this.data);\n let selectedIdsArr: string[] = [];\n if (this.data.selectedItems && this.data.selectedItems.length > 0){\n this.data.selectedItems.forEach(item => {\n console.log('item', item, 'this.data.rel', this.data.rel);\n selectedIdsArr.push(item[this.data.rel.fieldName].id);\n });\n }\n console.log('AddRelationshipDialogComponent selectedIdsArr', selectedIdsArr);\n const relationshipChoices = this.ams.getRelationshipChoices(this.data.rel, selectedIdsArr);\n if (relationshipChoices) {\n this.items$ = relationshipChoices;\n }\n console.log('AddRelationshipDialogComponent this.items$', this.items$);\n }\n\n onNoClick(): void {\n this.dialogRef.close();\n }\n}","<h2 mat-dialog-title>Add New {{data.rel.partnerModelName}}</h2>\n<mat-dialog-content>\n <mat-select [(ngModel)]=\"modelItem\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n</mat-dialog-content>\n<mat-dialog-actions>\n <button mat-button (click)=\"onNoClick()\">Cancel</button>\n <button mat-button [mat-dialog-close]=\"modelItem()\" cdkFocusInitial>Add</button>\n</mat-dialog-actions>","import { Component, Input, OnInit, ChangeDetectionStrategy, inject, model, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { ErrorHandlerService } from '../../services/error-handler.service';\nimport { SelectionSetErrorType } from '../../types/error.types';\n\nimport { AddRelationshipDialogComponent } from '../add-relationship-dialog/add-relationship-dialog.component';\n\n// Note: These imports will need to be updated based on the actual Amplify setup in the consuming application\n// import type { Schema } from '../../../../amplify/data/resource';\n// import outputs from '../../../../amplify_outputs.json';\n\n@Component({\n selector: 'snteam-dynamic-relationship-builder',\n standalone: true,\n imports: [MatToolbarModule, MatButtonModule, MatIconModule, MatFormFieldModule, MatInputModule, MatListModule,\n FormsModule,\n CommonModule],\n templateUrl: './dynamic-relationship-builder.component.html',\n styleUrl: './dynamic-relationship-builder.component.css'\n})\nexport class DynamicRelationshipBuilderComponent implements OnInit {\n @Input() m2m!: any;\n @Input() item!: any;\n @Input() model!: string;\n\n m2mItems: any[] = [];\n errorMessage: string = '';\n isLoading: boolean = false;\n\n constructor(\n private ams: AmplifyModelService,\n private errorHandler: ErrorHandlerService\n ) { }\n\n modelItem!: any;// = signal('');\n readonly dialog = inject(MatDialog);\n\n ngOnInit() {\n try {\n console.log('DynamicRelationshipBuilderComponent initializing with m2m config:', this.m2m);\n \n // Validate required inputs with comprehensive error logging\n if (!this.m2m) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Relationship configuration (m2m) is missing',\n undefined,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'ngOnInit',\n hasItem: !!this.item,\n hasModel: !!this.model\n }\n );\n this.setError('Relationship configuration is missing');\n return;\n }\n \n if (!this.item || !this.item.id) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n 'Item data is missing or invalid (no ID)',\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'ngOnInit',\n hasItem: !!this.item,\n itemId: this.item?.id,\n hasModel: !!this.model\n }\n );\n this.setError('Item data is missing or invalid');\n return;\n }\n \n // Validate m2m configuration structure\n const requiredM2MFields = ['relationshipModelName', 'fieldName', 'baseModelName', 'associatedWith'];\n const missingFields = requiredM2MFields.filter(field => !this.m2m[field]);\n \n if (missingFields.length > 0) {\n const error = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.INVALID_CONFIGURATION,\n `M2M configuration is missing required fields: ${missingFields.join(', ')}`,\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'ngOnInit',\n missingFields,\n providedFields: Object.keys(this.m2m || {})\n }\n );\n this.setError(`Configuration is incomplete: missing ${missingFields.join(', ')}`);\n return;\n }\n \n this.clearError();\n console.log('DynamicRelationshipBuilderComponent: Configuration validated successfully');\n \n // Initialize relationship data loading\n this.listItems();\n this.setCreateSubscription();\n \n } catch (error) {\n const componentError = this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Unexpected error during component initialization: ${error instanceof Error ? error.message : String(error)}`,\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'ngOnInit',\n originalError: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n console.error('DynamicRelationshipBuilderComponent: Critical initialization error:', error);\n this.setError('Failed to initialize relationship component');\n }\n }\n\n /**\n * Set error message and clear loading state\n * Enhanced with comprehensive error context logging\n */\n private setError(message: string, additionalContext?: Record<string, any>): void {\n try {\n this.errorMessage = message;\n this.isLoading = false;\n \n // Log error with context using ErrorHandlerService\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Component error: ${message}`,\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'setError',\n userMessage: message,\n componentState: {\n hasM2M: !!this.m2m,\n hasItem: !!this.item,\n itemId: this.item?.id,\n m2mItemsCount: Array.isArray(this.m2mItems) ? this.m2mItems.length : 0,\n isLoading: this.isLoading\n },\n ...additionalContext\n }\n );\n \n console.error('DynamicRelationshipBuilderComponent error:', {\n message,\n context: additionalContext,\n timestamp: new Date().toISOString()\n });\n \n } catch (loggingError) {\n // Fallback if even error logging fails\n console.error('DynamicRelationshipBuilderComponent: Critical error in setError:', {\n originalMessage: message,\n loggingError,\n timestamp: new Date().toISOString()\n });\n \n this.errorMessage = message;\n this.isLoading = false;\n }\n }\n\n /**\n * Clear error message and log recovery\n */\n private clearError(): void {\n if (this.errorMessage) {\n console.log('DynamicRelationshipBuilderComponent: Clearing previous error:', this.errorMessage);\n }\n this.errorMessage = '';\n }\n\n /**\n * Get display name for a relationship item, handling various field names\n */\n getDisplayName(relationshipItem: any): string {\n if (!relationshipItem) {\n return 'Unknown item';\n }\n \n // Try common display field names\n return relationshipItem.name || \n relationshipItem.title || \n relationshipItem.label || \n relationshipItem.displayName ||\n `Item ${relationshipItem.id || 'Unknown'}`;\n }\n\n /**\n * Get display name for items with partial or missing relationship data\n */\n getPartialDisplayName(item: any): string {\n if (!item) {\n return 'Unknown item';\n }\n \n // If we have an ID, show it\n if (item.id) {\n return `Item ${item.id} (incomplete data)`;\n }\n \n return 'Incomplete relationship data';\n }\n\n /**\n * Check if an item has complete relationship data\n */\n hasCompleteRelationshipData(item: any): boolean {\n if (!item || !this.m2m?.fieldName) {\n return false;\n }\n \n const relationshipData = item[this.m2m.fieldName];\n return relationshipData && (relationshipData.name || relationshipData.title || relationshipData.id);\n }\n\n /**\n * Check if an item has partial relationship data (item exists but relationship data is incomplete)\n */\n hasPartialRelationshipData(item: any): boolean {\n if (!item || !item.id) {\n return false;\n }\n \n return !this.hasCompleteRelationshipData(item);\n }\n\n /**\n * Get loading state indicator for relationship data\n */\n getRelationshipLoadingState(item: any): 'complete' | 'partial' | 'missing' | 'loading' {\n if (!item) {\n return 'missing';\n }\n \n if (this.isLoading) {\n return 'loading';\n }\n \n if (this.hasCompleteRelationshipData(item)) {\n return 'complete';\n }\n \n if (item.id) {\n return 'partial';\n }\n \n return 'missing';\n }\n\n /**\n * Get appropriate CSS class for relationship item based on data completeness\n */\n getRelationshipItemClass(item: any): string {\n const state = this.getRelationshipLoadingState(item);\n return `relationship-item relationship-item--${state}`;\n }\n\n /**\n * Get tooltip text for relationship items based on their data state\n */\n getRelationshipTooltip(item: any): string {\n const state = this.getRelationshipLoadingState(item);\n \n switch (state) {\n case 'complete':\n return 'Complete relationship data loaded';\n case 'partial':\n return 'Relationship exists but some data is missing or failed to load';\n case 'loading':\n return 'Loading relationship data...';\n case 'missing':\n return 'No relationship data available';\n default:\n return '';\n }\n }\n\n /**\n * Get summary of data states for all relationship items\n */\n getDataStateSummary(): {\n completeCount: number;\n partialCount: number;\n missingCount: number;\n hasPartialOrMissing: boolean;\n } {\n if (!Array.isArray(this.m2mItems)) {\n return {\n completeCount: 0,\n partialCount: 0,\n missingCount: 0,\n hasPartialOrMissing: false\n };\n }\n\n let completeCount = 0;\n let partialCount = 0;\n let missingCount = 0;\n\n this.m2mItems.forEach(item => {\n const state = this.getRelationshipLoadingState(item);\n switch (state) {\n case 'complete':\n completeCount++;\n break;\n case 'partial':\n partialCount++;\n break;\n case 'missing':\n missingCount++;\n break;\n }\n });\n\n return {\n completeCount,\n partialCount,\n missingCount,\n hasPartialOrMissing: partialCount > 0 || missingCount > 0\n };\n }\n\n async perhapsAddM2MItem(item: any) {\n try {\n if (!item || !item.id) {\n console.warn('Invalid item received in perhapsAddM2MItem:', item);\n return;\n }\n\n let m2mItem: any = { id: item.id };\n \n // Safely attempt to get relationship data\n if (this.m2m?.fieldName && typeof item[this.m2m.fieldName] === 'function') {\n try {\n const { data: retItem } = await item[this.m2m.fieldName]();\n m2mItem[this.m2m.fieldName] = retItem;\n } catch (relationshipError) {\n console.warn('Failed to load relationship data for item:', item.id, relationshipError);\n // Keep the item but mark it as having incomplete data\n m2mItem[this.m2m.fieldName] = null;\n }\n } else {\n console.warn('Invalid fieldName or item method for relationship:', this.m2m?.fieldName);\n m2mItem[this.m2m.fieldName] = null;\n }\n\n // Ensure m2mItems is initialized as array\n if (!Array.isArray(this.m2mItems)) {\n this.m2mItems = [];\n }\n\n let existingInd = this.m2mItems.findIndex((x: any) => x?.id === item.id);\n if (existingInd > -1) {\n if (!this.m2mItems[existingInd][this.m2m.fieldName]) {\n console.log('Removing existing item with no relationship data', this.m2mItems[existingInd]);\n this.m2mItems.splice(existingInd, 1);\n }\n }\n \n this.m2mItems.push(m2mItem);\n } catch (error) {\n console.error('Error in perhapsAddM2MItem:', error);\n // Don't let individual item errors break the entire component\n }\n }\n\n setCreateSubscription() {\n try {\n if (!this.m2m || !this.item?.id) {\n console.warn('Cannot set subscription: missing m2m or item.id');\n return;\n }\n\n const subscription = this.ams.setRelatedSub(this.m2m, this.item.id);\n if (subscription) {\n subscription.subscribe({\n next: (data) => {\n this.perhapsAddM2MItem(data);\n },\n error: (error) => {\n console.warn('Subscription error for related items:', error);\n this.setError('Failed to receive real-time updates for relationships');\n },\n });\n } else {\n console.warn('Failed to create subscription for related items');\n }\n } catch (error) {\n console.error('Error setting up subscription:', error);\n this.setError('Failed to set up real-time updates');\n }\n }\n\n listItems() {\n try {\n if (!this.m2m || !this.item?.id) {\n const error = 'Cannot load relationships: missing configuration or item data';\n this.setError(error, {\n method: 'listItems',\n hasM2M: !!this.m2m,\n hasItem: !!this.item,\n itemId: this.item?.id\n });\n return;\n }\n\n this.isLoading = true;\n this.clearError();\n\n console.log('DynamicRelationshipBuilderComponent: Loading relationship items for:', {\n relationshipModel: this.m2m.relationshipModelName,\n fieldName: this.m2m.fieldName,\n itemId: this.item.id\n });\n\n const observable = this.ams.getRelatedItems(this.m2m, this.item.id);\n if (observable) {\n observable.subscribe({\n next: ({ items, isSynced }) => {\n try {\n this.isLoading = false;\n \n // Ensure items is an array\n if (Array.isArray(items)) {\n this.m2mItems = items;\n console.log('DynamicRelationshipBuilderComponent: Successfully loaded relationship items:', {\n count: items.length,\n isSynced,\n sampleItem: items[0] ? Object.keys(items[0]) : []\n });\n } else {\n console.warn('DynamicRelationshipBuilderComponent: Received non-array items:', items);\n this.m2mItems = [];\n \n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n 'Received non-array items from relationship query',\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'listItems',\n receivedType: typeof items,\n receivedValue: items,\n isSynced\n }\n );\n }\n \n // Analyze data quality\n const dataStateSummary = this.getDataStateSummary();\n if (dataStateSummary.hasPartialOrMissing) {\n console.warn('DynamicRelationshipBuilderComponent: Some relationship data is incomplete:', dataStateSummary);\n }\n \n } catch (processingError) {\n this.isLoading = false;\n const error = `Error processing relationship data: ${processingError instanceof Error ? processingError.message : String(processingError)}`;\n \n this.setError('Failed to process relationship data', {\n method: 'listItems',\n step: 'data_processing',\n originalError: {\n message: processingError instanceof Error ? processingError.message : String(processingError),\n stack: processingError instanceof Error ? processingError.stack : undefined\n }\n });\n \n this.m2mItems = [];\n }\n },\n error: (error) => {\n this.isLoading = false;\n \n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error('DynamicRelationshipBuilderComponent: Error loading relationship items:', error);\n \n // Log comprehensive error details\n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Failed to load relationship data: ${errorMessage}`,\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'listItems',\n step: 'observable_error',\n originalError: {\n message: errorMessage,\n stack: error instanceof Error ? error.stack : undefined,\n name: error instanceof Error ? error.name : undefined\n },\n itemId: this.item.id\n }\n );\n \n this.setError('Failed to load relationship data. Please try refreshing the page.', {\n method: 'listItems',\n originalError: errorMessage\n });\n \n // Initialize empty array so component doesn't break\n this.m2mItems = [];\n }\n });\n } else {\n this.isLoading = false;\n \n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n 'AmplifyModelService returned null observable for relationship query',\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'listItems',\n step: 'observable_creation',\n itemId: this.item.id\n }\n );\n \n this.setError('Unable to create relationship query', {\n method: 'listItems',\n step: 'observable_creation'\n });\n this.m2mItems = [];\n }\n } catch (error) {\n this.isLoading = false;\n \n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error('DynamicRelationshipBuilderComponent: Critical error in listItems:', error);\n \n this.errorHandler.logSelectionSetError(\n SelectionSetErrorType.GRAPHQL_ERROR,\n `Critical error in listItems: ${errorMessage}`,\n this.m2m,\n undefined,\n {\n component: 'DynamicRelationshipBuilderComponent',\n method: 'listItems',\n step: 'critical_error',\n originalError: {\n message: errorMessage,\n stack: error instanceof Error ? error.stack : undefined\n }\n }\n );\n \n this.setError('An unexpected error occurred while loading relationships', {\n method: 'listItems',\n originalError: errorMessage\n });\n this.m2mItems = [];\n }\n }\n\n /**\n Customize this function to include all desired models from your file\n */\n setModelItem(model?: string) {\n let mdl = model || this.model;\n console.log('setModelItem mdl', mdl);\n this.modelItem = signal<any>(this.ams.getEmptyObjectForModel(mdl));\n }\n\n async deleteRelatedItem(item: any) {\n try {\n if (!item || !item.id) {\n console.warn('Cannot delete item: invalid item data', item);\n this.setError('Cannot delete item: invalid data');\n return;\n }\n\n if (!this.m2m?.relationshipModelName) {\n console.warn('Cannot delete item: missing relationship model name');\n this.setError('Cannot delete item: missing configuration');\n return;\n }\n\n console.log('deleteRelatedItem for item', item, 'm2m', this.m2m);\n \n await this.ams.deleteRelationship(this.m2m.relationshipModelName, item.id);\n \n // Remove item from local array on successful deletion\n if (Array.isArray(this.m2mItems)) {\n const index = this.m2mItems.findIndex(x => x?.id === item.id);\n if (index > -1) {\n this.m2mItems.splice(index, 1);\n }\n }\n \n } catch (error) {\n console.error('Error deleting relationship item:', error);\n this.setError('Failed to delete relationship. Please try again.');\n }\n }\n\n openDialog(rel: any): void {\n try {\n if (!rel) {\n console.warn('Cannot open dialog: missing relationship configuration');\n this.setError('Cannot add relationship: missing configuration');\n return;\n }\n\n console.log('openDialog clicked for rel', rel);\n this.setModelItem(rel.partnerModelName);\n\n const dialogRef = this.dialog.open(AddRelationshipDialogComponent, {\n data: { rel: rel, modelItem: this.modelItem(), selectedItems: this.m2mItems || [] },\n });\n\n dialogRef.afterClosed().subscribe({\n next: (result) => {\n if (result) {\n this.handleDialogResult(result, rel);\n }\n },\n error: (error) => {\n console.error('Dialog error:', error);\n this.setError('An error occurred while adding the relationship');\n }\n });\n } catch (error) {\n console.error('Error opening dialog:', error);\n this.setError('Failed to open relationship dialog');\n }\n }\n\n handleDialogResult(result: any, rel: any) {\n try {\n if (!result) {\n return;\n }\n\n if (!rel || !this.item?.id) {\n console.warn('Cannot handle dialog result: missing relationship or item data');\n this.setError('Cannot create relationship: missing data');\n return;\n }\n\n console.log('handleDialogResult', result, 'rel', rel);\n \n if (result !== undefined) {\n this.modelItem.set(result);\n }\n\n let relIdName = rel.partnerModelName?.toLowerCase() + 'Id';\n let thisIdName = rel.baseModelName?.toLowerCase() + 'Id';\n\n if (!relIdName || !thisIdName) {\n console.warn('Cannot determine relationship field names');\n this.setError('Cannot create relationship: invalid configuration');\n return;\n }\n\n let newRelObj: any = {};\n newRelObj[relIdName] = result.id;\n newRelObj[thisIdName] = this.item.id;\n\n const createPromise = this.ams.createRelationship(rel.relationshipModelName, newRelObj);\n if (createPromise) {\n createPromise.catch((error: any) => {\n console.error('Error creating relationship:', error);\n this.setError('Failed to create relationship. Please try again.');\n });\n } else {\n console.warn('Failed to create relationship: service returned null');\n this.setError('Failed to create relationship. Please try again.');\n }\n \n } catch (error) {\n console.error('Error handling dialog result:', error);\n this.setError('An error occurred while creating the relationship');\n }\n }\n}","<div class=\"record-relationship-holder\">\n <div class=\"relationship-type\">\n <mat-toolbar>\n <span>{{m2m?.partnerModelName || 'Unknown'}} Management</span>\n <span class=\"rel-title-spacer\"></span>\n <button mat-icon-button [attr.aria-label]=\"'Add ' + (m2m?.name || 'item')\" (click)=\"openDialog(m2m)\" [disabled]=\"!m2m\">\n <mat-icon>add</mat-icon>\n </button>\n </mat-toolbar>\n \n <!-- Error message display -->\n @if (errorMessage) {\n <div class=\"error-message\" role=\"alert\">\n <mat-icon>error</mat-icon>\n <span>{{ errorMessage }}</span>\n </div>\n }\n \n <!-- Loading state -->\n @if (isLoading) {\n <div class=\"loading-message\">\n <mat-icon>hourglass_empty</mat-icon>\n <span>Loading relationships...</span>\n </div>\n }\n \n <!-- Relationship items display -->\n @if (m2mItems && m2mItems.length > 0) {\n <mat-list>\n @for (item of m2mItems; track item?.id) {\n <mat-list-item [class]=\"getRelationshipItemClass(item)\" [title]=\"getRelationshipTooltip(item)\">\n @if (hasCompleteRelationshipData(item)) {\n <!-- Complete relationship data -->\n <span matListItemTitle>{{ getDisplayName(item[m2m.fieldName]) }}</span>\n <span matListItemLine class=\"relationship-status complete\">Complete data</span>\n <button mat-icon-button (click)=\"deleteRelatedItem(item)\" matListItemMeta [attr.aria-label]=\"'Delete ' + getDisplayName(item[m2m.fieldName])\">\n <mat-icon>delete</mat-icon>\n </button>\n } @else if (hasPartialRelationshipData(item)) {\n <!-- Partial relationship data -->\n <span matListItemTitle class=\"partial-data\">\n {{ getPartialDisplayName(item) }}\n <mat-icon class=\"warning-icon\" title=\"Incomplete relationship data\">warning</mat-icon>\n </span>\n <span matListItemLine class=\"relationship-status partial\">Partial data - some information may be missing</span>\n <button mat-icon-button (click)=\"deleteRelatedItem(item)\" matListItemMeta [attr.aria-label]=\"'Delete incomplete item'\">\n <mat-icon>delete</mat-icon>\n </button>\n } @else {\n <!-- Missing or invalid relationship data -->\n <span matListItemTitle class=\"missing-data\">\n Invalid relationship data\n <mat-icon class=\"error-icon\" title=\"Invalid or missing data\">error</mat-icon>\n </span>\n <span matListItemLine class=\"relationship-status missing\">Data could not be loaded</span>\n <button mat-icon-button (click)=\"deleteRelatedItem(item)\" matListItemMeta [attr.aria-label]=\"'Delete invalid item'\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n </mat-list-item>\n }\n </mat-list>\n \n <!-- Summary of data states -->\n @if (getDataStateSummary().hasPartialOrMissing) {\n <div class=\"data-summary\">\n <mat-icon>info</mat-icon>\n <span>\n {{ getDataStateSummary().completeCount }} of {{ m2mItems.length }} relationships loaded completely.\n @if (getDataStateSummary().partialCount > 0) {\n {{ getDataStateSummary().partialCount }} have partial data.\n }\n @if (getDataStateSummary().missingCount > 0) {\n {{ getDataStateSummary().missingCount }} failed to load.\n }\n </span>\n </div>\n }\n } @else if (!isLoading && !errorMessage) {\n <div class=\"empty-state\">\n Add your first {{ m2m?.partnerModelName || 'item' }}\n </div>\n }\n </div>\n</div>","import { Component, Input, OnInit, ChangeDetectionStrategy, inject, model, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nimport { DynamicRelationshipBuilderComponent } from '../dynamic-relationship-builder/dynamic-relationship-builder.component';\nimport { AddRelationshipDialogComponent } from '../add-relationship-dialog/add-relationship-dialog.component';\n\n// Note: These imports will need to be updated based on the actual Amplify setup in the consuming application\n// import type { Schema } from '../../../../amplify/data/resource';\n// import outputs from '../../../../amplify_outputs.json';\n\n@Component({\n selector: 'snteam-record-relationships',\n standalone: true,\n imports: [MatToolbarModule, MatButtonModule, MatIconModule, MatFormFieldModule, MatInputModule, MatListModule,\n DynamicRelationshipBuilderComponent,\n FormsModule,\n CommonModule],\n templateUrl: './record-relationships.component.html',\n styleUrl: './record-relationships.component.css'\n})\nexport class RecordRelationshipsComponent implements OnInit {\n\n @Input() model: string = '';\n @Input() id?: string;\n @Input() item?: any;\n @Input() amplifyOutputs?: any; // Allow injection of amplify outputs\n\n constructor(private ams: AmplifyModelService) { }\n\n m2mDetailArrays: any[] = [];\n\n //readonly animal = signal('');\n modelItem!: any;// = signal('');\n readonly dialog = inject(MatDialog);\n\n ngOnInit() {\n console.log('RecordRelationshipsComponent: Starting ngOnInit for model:', this.model, 'id:', this.id, 'item:', this.item);\n\n if (!this.amplifyOutputs) {\n console.warn('RecordRelationshipsComponent: amplifyOutputs not provided. Component may not function correctly.');\n return;\n }\n\n console.log('RecordRelationshipsComponent: Processing model introspection for model:', this.model);\n console.log('RecordRelationshipsComponent: Available models:', Object.keys(this.amplifyOutputs.data.model_introspection.models));\n \n const modelData = this.amplifyOutputs.data.model_introspection.models[this.model as keyof typeof this.amplifyOutputs.data.model_introspection.models];\n if (!modelData) {\n console.error('RecordRelationshipsComponent: Model not found:', this.model);\n return;\n }\n \n console.log('RecordRelationshipsComponent: Model data found:', modelData);\n var fields = modelData.fields;\n var values = Object.values(fields);\n\n console.log('RecordRelationshipsComponent: Processing', values.length, 'fields');\n\n for (var v in values) {\n var fieldObj: any = values[v];\n console.log('RecordRelationshipsComponent: Processing field:', fieldObj.name, 'type:', fieldObj.type);\n \n if (typeof fieldObj.type != 'object') {\n console.log('RecordRelationshipsComponent: Skipping non-object field:', fieldObj.name);\n continue;\n }\n if (!fieldObj.type.model) {\n console.log('RecordRelationshipsComponent: Skipping non-model field:', fieldObj.name);\n continue;\n }\n\n // Skip BELONGS_TO relationships - only process HAS_MANY relationships\n if (fieldObj.association && fieldObj.association.connectionType === 'BELONGS_TO') {\n console.log('RecordRelationshipsComponent: Skipping BELONGS_TO relationship field:', fieldObj.name);\n continue;\n }\n\n console.log('RecordRelationshipsComponent: Found relationship field:', fieldObj.name, 'to model:', fieldObj.type.model);\n\n try {\n let m2mDetails = this.getDetailsForManyToMany(fieldObj, this.model);\n console.log('RecordRelationshipsComponent: m2mDetails result:', m2mDetails);\n\n if (m2mDetails) {\n this.m2mDetailArrays.push(m2mDetails);\n console.log('RecordRelationshipsComponent: Added to m2mDetailArrays, total count:', this.m2mDetailArrays.length);\n }\n } catch (error) {\n console.error('RecordRelationshipsComponent: Error processing field:', fieldObj.name, 'Error:', error);\n }\n }\n console.log('RecordRelationshipsComponent: Final m2mDetailArrays:', this.m2mDetailArrays);\n }\n\n /**\n Customize this function to include all desired models from your file\n */\n setModelItem(model?: string) {\n let mdl = model || this.model;\n console.log('setModelItem mdl', mdl);\n signal<any>(this.ams.getEmptyObjectForModel(mdl));\n }\n\n getFieldNameForAssociatedWithModel(relationshipModelName: string, associatedWith: string) {\n if (!this.amplifyOutputs) return;\n \n var relationshipModel = this.amplifyOutputs.data.model_introspection.models[relationshipModelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n console.log('getFieldNameForAssociatedWithModel relationshipModel', relationshipModel);\n var fieldVals = Object.values(relationshipModel);\n for (let field of fieldVals) {\n const fieldAny = field as any;\n console.log('getFieldNameForAssociatedWithModel field', field);\n if (!fieldAny.association) continue;\n if (!fieldAny.association.targetNames || !Array.isArray(fieldAny.association.targetNames)) continue;\n if (fieldAny.association.targetNames.indexOf(associatedWith) === -1) continue;\n // there should only be two fields with associations.\n // if we get here we are in the field we want\n return fieldAny.name;\n }\n }\n\n getDetailsForManyToMany(fieldObj: any, baseModelName: string): any {\n if (!this.amplifyOutputs) return null;\n \n console.log('RecordRelationshipsComponent: getDetailsForManyToMany starting for field:', fieldObj.name, 'baseModel:', baseModelName);\n \n let relationshipModelName = fieldObj.type.model;\n console.log('RecordRelationshipsComponent: relationshipModelName:', relationshipModelName);\n \n // Add null check for associatedWith\n if (!fieldObj.association || !fieldObj.association.associatedWith || !Array.isArray(fieldObj.association.associatedWith) || fieldObj.association.associatedWith.length === 0) {\n console.warn('RecordRelationshipsComponent: associatedWith is not available or empty for field', fieldObj.name, 'association:', fieldObj.association);\n return null;\n }\n \n let associatedWith = fieldObj.association.associatedWith[0];\n console.log('RecordRelationshipsComponent: associatedWith:', associatedWith);\n\n console.log('RecordRelationshipsComponent: Calling getFieldNameForAssociatedWithModel');\n let fieldName = this.getFieldNameForAssociatedWithModel(relationshipModelName, associatedWith);\n console.log('RecordRelationshipsComponent: fieldName result:', fieldName);\n\n // TODO: MAKE THIS AUTO REFRESH... maybe make this a signal?\n let ret: any = {\n relationshipModelName: relationshipModelName,\n baseModelName: baseModelName,\n fieldName: fieldName,\n associatedWith: associatedWith\n }\n \n console.log('RecordRelationshipsComponent: Getting relationship model fields for:', relationshipModelName);\n var relationshipModel = this.amplifyOutputs.data.model_introspection.models[relationshipModelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n console.log('RecordRelationshipsComponent: relationshipModel fields:', relationshipModel);\n\n var vals = Object.values(relationshipModel);\n console.log('RecordRelationshipsComponent: Processing', vals.length, 'relationship model fields');\n \n for (var i in vals) {\n const val: any = vals[i];\n console.log('RecordRelationshipsComponent: Processing relationship field:', val.name, 'type:', val.type);\n \n if (typeof val.type != 'object') {\n console.log('RecordRelationshipsComponent: Skipping non-object relationship field:', val.name);\n continue;\n }\n if (!val.type.model) {\n console.log('RecordRelationshipsComponent: Skipping non-model relationship field:', val.name);\n continue;\n }\n if (val.type.model == baseModelName) {\n console.log('RecordRelationshipsComponent: Skipping self-reference field:', val.name);\n continue;\n }\n\n console.log('RecordRelationshipsComponent: Found partner model field:', val.name, 'model:', val.type.model);\n var modelName = val.type.model;\n let refModel = this.amplifyOutputs.data.model_introspection.models[modelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n console.log('RecordRelationshipsComponent: Partner model fields:', refModel);\n\n ret.partnerModelName = modelName;\n console.log('RecordRelationshipsComponent: Set partnerModelName to:', modelName);\n //this.ams.getRelatedItems(ret, this.item.id);\n }\n console.log('RecordRelationshipsComponent: getDetailsForManyToMany final result:', ret);\n return ret;\n }\n\n deleteRelatedItem(item: any) {\n console.log('deleteRelatedItem for item', item);\n }\n\n openDialog(rel: any): void {\n console.log('openDialog clicked for rel', rel);\n this.setModelItem(rel.partnerModelName);\n\n const dialogRef = this.dialog.open(AddRelationshipDialogComponent, {\n data: { rel: rel, modelItem: this.modelItem() },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n this.handleDialogResult(result, rel);\n });\n }\n\n handleDialogResult(result: any, rel: any) {\n console.log('handleDialogResult', result, 'rel', rel);\n if (result !== undefined) {\n this.modelItem.set(result);\n }\n\n let relIdName = rel.partnerModelName.toLowerCase() + 'Id';\n let thisIdName = rel.baseModelName.toLowerCase() + 'Id';\n\n let newRelObj: any = {};\n newRelObj[relIdName] = result.id;\n newRelObj[thisIdName] = this.id || this.item.id;\n\n this.ams.createRelationship(rel.relationshipModelName, newRelObj);\n }\n}","<div class=\"relationship-builder-holder\">\n @if(item){\n <div class=\"relationship-builder\">\n @for (m2m of m2mDetailArrays; track m2m) {\n <snteam-dynamic-relationship-builder [m2m]=\"m2m\" [item]=\"item\" [model]=\"model\"></snteam-dynamic-relationship-builder>\n }\n </div>\n }\n @else {\n <div class=\"blank-relationship-builder\">Create the {{model}} first, then add relationships</div>\n }\n</div>","import { FormControl, FormGroup, Validators, ValidatorFn } from '@angular/forms';\n\nexport class QuestionBase<T> {\n model: string;\n value: T | undefined;\n key: string;\n label: string;\n required: boolean;\n order: number;\n controlType: string;\n type: string;\n options: { key: string, value: string }[];\n tooltip?: string;\n validators?: ValidatorFn[];\n\n constructor(options: {\n model?: string;\n value?: T;\n key?: string;\n label?: string;\n required?: boolean;\n order?: number;\n controlType?: string;\n type?: string;\n options?: { key: string, value: string }[];\n tooltip?: string;\n validators?: ValidatorFn[];\n } = {}) {\n this.model = options.model || '';\n this.value = options.value;\n this.key = options.key || '';\n this.label = options.label || '';\n this.required = !!options.required;\n this.order = options.order === undefined ? 1 : options.order;\n this.controlType = options.controlType || '';\n this.type = options.type || '';\n this.options = options.options || [];\n this.tooltip = options.tooltip || '';\n this.validators = options.validators;\n }\n}\n\nexport class TimePickerQuestion<T> extends QuestionBase<T> {\n override controlType = 'time';\n\n constructor(options: any = {}) {\n super(options);\n }\n}\n\nexport class DatePickerQuestion<T> extends QuestionBase<T> {\n override controlType = 'date';\n min: Date;\n max: Date;\n startDate: Date;\n\n constructor(options: any = {}) {\n super(options);\n this.min = new Date(options['min']) ?? new Date('January 01, 1900 00:00:00');\n var thisYear = new Date().getUTCFullYear;\n this.max = new Date(options['max']) ?? new Date('December 31 ' + thisYear + ' 23:59:59');\n this.startDate = new Date(options['startDate']) ?? new Date();\n }\n}\n\nexport class DateTimePickerQuestion<T> extends QuestionBase<T> {\n override controlType = 'date-time';\n min: Date;\n max: Date;\n startDate: Date;\n\n constructor(options: any = {}) {\n super(options);\n this.min = new Date(options['min']) ?? new Date('January 01, 1900 00:00:00');\n var thisYear = new Date().getUTCFullYear;\n this.max = new Date(options['max']) ?? new Date('December 31 ' + thisYear + ' 23:59:59');\n this.startDate = new Date(options['startDate']) ?? new Date();\n }\n}\n\nexport class SliderQuestion<T> extends QuestionBase<T> {\n override controlType = 'slider';\n min: number;\n max: number;\n\n constructor(options: any = {}) {\n super(options);\n this.min = options['min'] || 0;\n this.max = options['max'] || 100;\n }\n}\n\nexport class NumberQuestion<T> extends QuestionBase<T> {\n override controlType = 'number';\n}\n\nexport class TextboxQuestion<T> extends QuestionBase<T> {\n override controlType = 'textbox';\n}\n\nexport class EmailQuestion<T> extends QuestionBase<T> {\n override controlType = 'email';\n}\n\nexport class PhoneQuestion<T> extends QuestionBase<T> {\n override controlType = 'tel';\n}\n\nexport class DropdownQuestion<T> extends QuestionBase<T> {\n override controlType = 'dropdown';\n}\n\nexport class AsyncDropdownQuestion<T> extends QuestionBase<T> {\n override controlType = 'async-dropdown';\n targetModel: string;\n multiple: boolean;\n ddbKey: string;\n \n constructor(options: any = {}) {\n super(options);\n this.targetModel = options['targetModel'];\n this.multiple = options['multiple'];\n this.ddbKey = options['ddbKey'];\n }\n}\n\nexport class FormGroupQuestion<T> extends QuestionBase<T> {\n override controlType = 'formgroup';\n formGroup: FormGroup;\n questions: QuestionBase<T>[] | null = [];\n \n constructor(options: any = {}) {\n super(options);\n this.formGroup = options['formGroup'];\n this.questions = options['questions'];\n }\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n// Simple phone number validator (can be customized further)\nexport function phoneNumberValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const phoneNumber = control.value;\n\n // Use a regular expression to validate the phone number format\n const regex = /^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$/;\n if (!phoneNumber || regex.test(phoneNumber)) {\n return null; // Valid phone number\n } else {\n return { invalidPhoneNumber: true }; // Invalid phone number\n }\n };\n}","import { Injectable } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n QuestionBase,\n TextboxQuestion,\n NumberQuestion,\n DatePickerQuestion,\n DropdownQuestion,\n AsyncDropdownQuestion,\n FormGroupQuestion,\n PhoneQuestion,\n EmailQuestion\n} from '../classes/questions';\n\nimport { phoneNumberValidator } from '../classes/validators';\nimport { AmplifyModelService } from './amplify-model.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class QuestionControlService {\n\n private outputs: any;\n\n constructor(private ams: AmplifyModelService) { }\n\n /**\n * Initialize the service with Amplify outputs\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeOutputs(outputs: any) {\n console.log('QuestionControlService: initializeOutputs called with:', outputs);\n this.outputs = outputs;\n console.log('QuestionControlService: outputs stored:', this.outputs);\n }\n\n getFieldForFieldObj(fieldObj: any, model: any): QuestionBase<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n console.log('getFieldForFieldObj starting for type', fieldObj.type, 'fieldObj', fieldObj);\n \n switch (fieldObj.type) {\n case 'String':\n return this._addStringQuestion(fieldObj, model);\n case 'Int':\n case 'Float':\n return this._addNumberQuestion(fieldObj, model);\n case 'AWSDate':\n case 'AWSDateTime':\n return this._addDatePickerQuestion(fieldObj, model);\n case 'AWSEmail':\n return this._addEmailQuestion(fieldObj, model);\n case 'AWSPhone':\n return this._addPhoneQuestion(fieldObj, model);\n }\n\n if (typeof fieldObj.type === 'object') {\n if (fieldObj.type.model) {\n return this.getRefModel(fieldObj, model);\n }\n if (fieldObj.type.nonModel) {\n let groupQuestions = this.getNonModelQuestions(fieldObj, model);\n var formGroup = this.toFormGroup(groupQuestions);\n return this._addFormGroupQuestion(fieldObj, formGroup, groupQuestions);\n }\n if (fieldObj.type.enum) {\n return this.getEnumQuestion(fieldObj, model);\n }\n }\n\n return null;\n }\n\n getLabelForFieldName(name: string): string {\n return name.toLowerCase().split('_').map((word: string) => {\n return word.charAt(0).toUpperCase() + word.slice(1);\n }).join(' ');\n }\n\n getQuestionsForModelFields(model: string): QuestionBase<any>[] {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return [];\n }\n\n if (!model) {\n console.error('QuestionControlService: No model name provided');\n return [];\n }\n\n console.log('outputs.data.model_introspection', this.outputs.data.model_introspection);\n console.log('Looking for model:', model);\n \n if (!this.outputs.data || !this.outputs.data.model_introspection || !this.outputs.data.model_introspection.models) {\n console.error('QuestionControlService: Invalid outputs structure', this.outputs);\n return [];\n }\n \n console.log('Available models:', Object.keys(this.outputs.data.model_introspection.models));\n \n const modelData = this.outputs.data.model_introspection.models[model as keyof typeof this.outputs.data.model_introspection.models];\n if (!modelData) {\n console.error(`Model \"${model}\" not found in model introspection. Available models:`, Object.keys(this.outputs.data.model_introspection.models));\n return [];\n }\n \n console.log('Found model data:', modelData);\n \n const fields = modelData.fields;\n if (!fields) {\n console.error(`Fields not found for model \"${model}\"`, modelData);\n return [];\n }\n \n console.log('Found fields:', fields);\n \n const questions: QuestionBase<any>[] = [];\n const values = Object.values(fields);\n const skipFields = ['createdAt', 'updatedAt', 'id'];\n \n for (const fieldObj of values) {\n if (skipFields.indexOf((fieldObj as any).name) > -1) continue;\n\n if (typeof (fieldObj as any).type === 'object' && (fieldObj as any).type.model) {\n continue; // skip model relationship fields\n }\n\n const q = this.getFieldForFieldObj(fieldObj, model);\n if (q) {\n questions.push(q);\n } else {\n console.log('no question returned for fieldObj', fieldObj, 'model', model);\n }\n }\n \n console.log('getQuestionsForModelFields questions', questions);\n return questions;\n }\n\n /** nonModel, form section Methods **/\n getNonModelQuestions(fieldObj: any, model: any): QuestionBase<any>[] {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return [];\n }\n\n const nonModel = fieldObj.type.nonModel;\n const fields = this.outputs.data.model_introspection.nonModels[nonModel as keyof typeof this.outputs.data.model_introspection.nonModels].fields;\n const questions: QuestionBase<any>[] = [];\n const values = Object.values(fields);\n const skipFields = ['createdAt', 'updatedAt'];\n \n for (const nestedFieldObj of values) {\n const question = this.getFieldForFieldObj(nestedFieldObj, model);\n if (question) {\n questions.push(question);\n }\n }\n \n console.log('getNonModelQuestions questions', questions);\n return questions;\n }\n\n getEnumQuestion(fieldObj: any, model: any): DropdownQuestion<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n const enumName = fieldObj.type.enum;\n const e = this.outputs.data.model_introspection.enums[enumName as keyof typeof this.outputs.data.model_introspection.enums];\n console.log('getEnumQuestion e', e);\n \n const choices: any[] = [];\n e.values.forEach((val: string) => {\n choices.push({ key: val, value: val });\n });\n \n return this._addDropdownQuestion(fieldObj, choices, model);\n }\n\n /** Reference Field Methods **/\n getRefModel(fieldObj: any, callingModel: string): AsyncDropdownQuestion<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n console.log('getRefModel starting for fieldObj', fieldObj);\n \n const referenceModel = fieldObj.type.model;\n const relModel = this.outputs.data.model_introspection.models[referenceModel as keyof typeof this.outputs.data.model_introspection.models].fields;\n\n const vals = Object.values(relModel);\n for (const val of vals) {\n const fieldVal = val as any;\n if (typeof fieldVal.type !== 'object') continue;\n if (!fieldVal.type.model) continue;\n if (fieldVal.type.model === callingModel) continue;\n\n const modelName = fieldVal.type.model;\n return this._addRefDropdownQuestion(fieldObj, callingModel, modelName);\n }\n\n return null;\n }\n\n private _addFormGroupQuestion(fieldObj: any, formGroup: FormGroup, questions: QuestionBase<any>[]): FormGroupQuestion<any> {\n const name = fieldObj.name.toString();\n return new FormGroupQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'formgroup',\n formGroup: formGroup,\n questions: questions\n });\n }\n\n private _addDropdownQuestion(fieldObj: any, items: any[], model: string): DropdownQuestion<any> {\n console.log('_addDropdownQuestion for fieldObj', fieldObj, 'items', items);\n \n const name = fieldObj.name.toString();\n return new DropdownQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n options: items,\n type: 'dropdown',\n model: model\n });\n }\n\n private _addRefDropdownQuestion(fieldObj: any, model: string, targetModel: string): AsyncDropdownQuestion<any> {\n console.log('_addRefDropdownQuestion for fieldObj', fieldObj);\n \n const name = fieldObj.name.toString();\n return new AsyncDropdownQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'dropdown',\n model: model,\n targetModel: targetModel,\n multiple: fieldObj.association?.connectionType === \"HAS_MANY\"\n });\n }\n\n private _addDatePickerQuestion(fieldObj: any, model: string): DatePickerQuestion<any> {\n const name = fieldObj.name.toString();\n return new DatePickerQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'date',\n model: model\n });\n }\n\n private _addNumberQuestion(fieldObj: any, model: string): NumberQuestion<any> {\n const name = fieldObj.name.toString();\n return new NumberQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'number',\n model: model\n });\n }\n\n private _addStringQuestion(fieldObj: any, model: string): TextboxQuestion<any> {\n const name = fieldObj.name.toString();\n return new TextboxQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'textbox',\n model: model\n });\n }\n\n private _addEmailQuestion(fieldObj: any, model: string): EmailQuestion<any> {\n const name = fieldObj.name.toString();\n return new EmailQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'email',\n validators: [Validators.email],\n model: model\n });\n }\n\n private _addPhoneQuestion(fieldObj: any, model: string): PhoneQuestion<any> {\n const name = fieldObj.name.toString();\n return new PhoneQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'tel',\n validators: [phoneNumberValidator()],\n model: model\n });\n }\n\n toFormGroup(questions: (QuestionBase<any> | FormGroupQuestion<any>)[]): FormGroup {\n const group: any = {};\n\n questions.forEach(question => {\n if (!question) return;\n \n if ('questions' in question && question.questions) {\n group[question.key] = this.toFormGroup(question.questions as QuestionBase<any>[]);\n } else {\n const validators = [];\n \n if (question.required) {\n validators.push(Validators.required);\n }\n \n if (question.validators) {\n validators.push(...question.validators);\n }\n\n group[question.key] = new FormControl(question.value || '', validators);\n }\n });\n \n return new FormGroup(group);\n }\n}","import { Location } from '@angular/common';\nimport { Component, Input, OnInit, inject, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n FormControl,\n FormGroupDirective,\n NgForm,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { DynamicFormQuestionComponent } from '../dynamic-form-question/dynamic-form-question.component';\nimport { DynamicNestedFormQuestionComponent } from '../dynamic-nested-form-question/dynamic-nested-form-question.component';\nimport { DynamicFormGroupComponent } from '../dynamic-form-group/dynamic-form-group.component';\nimport { QuestionControlService } from '../../services/question-control.service';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { RecordRelationshipsComponent } from '../record-relationships/record-relationships.component';\nimport { QuestionBase, FormGroupQuestion } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar';\nimport { MatButtonModule } from '@angular/material/button';\n\n/** Error when invalid control is dirty, touched, or submitted. */\nexport class MyErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n const isSubmitted = form && form.submitted;\n return !!(control && control.invalid && (control.dirty || control.touched || isSubmitted));\n }\n}\n\n@Component({\n standalone: true,\n selector: 'snteam-dynamic-form',\n imports: [\n CommonModule,\n DynamicFormQuestionComponent,\n DynamicNestedFormQuestionComponent,\n DynamicFormGroupComponent,\n RecordRelationshipsComponent,\n ReactiveFormsModule,\n MatFormFieldModule, \n MatInputModule, \n MatSelectModule, \n MatSnackBarModule, \n MatDividerModule,\n MatButtonModule\n ],\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.css'\n})\nexport class DynamicFormComponent implements OnInit {\n\n @Input() model: string = \"\";\n @Input() itemId: string = \"\";\n @Input() valueMap?: any;\n @Input() hideRelationships: boolean = false;\n @Input() hideSaveButton: boolean = false;\n @Input() amplifyOutputs?: any; // Add amplify outputs input\n @Input() formViewId?: string; // Add FormView ID input\n \n @Output() itemOutput = new EventEmitter<any>();\n @Output() submitOutput = new EventEmitter<any>();\n @Output() formLoaded = new EventEmitter<FormGroup>();\n\n mdl: string = '';\n id: string = '';\n item: any;\n payLoad: any;\n form!: any;\n questions: (QuestionBase<any> | FormGroupQuestion<any>)[] | null = [];\n formView: any; // Store the FormView data\n formViewFields: any[] = []; // Store the FormViewField data\n\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n formGroupInputs: string[] = ['formgroup'];\n refInputs: string[] = [];\n\n private ams = inject(AmplifyModelService);\n private _snackBar = inject(MatSnackBar);\n\n constructor(\n private qcs: QuestionControlService,\n private afb: AmplifyFormBuilderService,\n private location: Location,\n private route: ActivatedRoute\n ) { }\n\n get outputs() {\n return this.amplifyOutputs || (this.qcs as any).outputs;\n }\n\n ngOnInit() {\n console.log('DynamicFormComponent ngOnInit starting');\n this.materialInputs = this.afb.getMaterialInputs();\n this.switchInputs = this.afb.getSwitchInputs();\n this.refInputs = this.afb.getRefInputs();\n \n // Read from route parameters if available, otherwise use inputs\n this.route.paramMap.subscribe((params) => {\n console.log('DynamicFormComponent route params:', params);\n const routeModel = params.get('model');\n const routeId = params.get('id');\n const routeFormViewId = params.get('formViewId'); // Check for formViewId in route\n \n console.log('DynamicFormComponent routeModel:', routeModel, 'routeId:', routeId, 'routeFormViewId:', routeFormViewId);\n \n this.mdl = routeModel || this.model;\n this.id = routeId || this.itemId;\n this.formViewId = routeFormViewId || this.formViewId;\n\n console.log('DynamicFormComponent final mdl:', this.mdl, 'id:', this.id, 'formViewId:', this.formViewId);\n\n // If we have a formViewId, load the FormView first\n if (this.formViewId) {\n this.loadFormView();\n } else {\n // Original behavior - load all model fields\n if (this.id == '-1' || !this.id) {\n console.log('DynamicFormComponent calling setQuestionsAndForm for new item');\n this.setQuestionsAndForm();\n } else {\n console.log('DynamicFormComponent calling getItem for existing item');\n this.getItem();\n }\n }\n });\n }\n\n async loadFormView() {\n if (!this.formViewId) return;\n \n try {\n console.log('DynamicFormComponent: Loading FormView:', this.formViewId);\n \n // Get the FormView with its fields\n const { data: formView } = await this.ams.getItemForModel('FormView', this.formViewId);\n this.formView = formView;\n \n if (this.formView && this.formView.tableConfigId) {\n this.mdl = 'TableConfig'; // Set the model based on FormView's table\n \n // Get the FormViewFields for this FormView\n const formViewFields = await this.ams.listItemsForModel('FormViewField');\n if (formViewFields) {\n formViewFields.subscribe({\n next: ({ items }) => {\n this.formViewFields = items.filter((field: any) => field.formViewId === this.formViewId)\n .sort((a: any, b: any) => (a.order || 0) - (b.order || 0));\n console.log('DynamicFormComponent: FormViewFields loaded:', this.formViewFields);\n \n // Now proceed with form setup\n if (this.id == '-1' || !this.id) {\n this.setQuestionsAndForm();\n } else {\n this.getItem();\n }\n }\n });\n }\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error loading FormView:', error);\n }\n }\n\n async getItem() {\n try {\n console.log('DynamicFormComponent: Getting item for model:', this.mdl, 'id:', this.id);\n const { data: item } = await this.ams.getItemForModel(this.mdl, this.id);\n console.log('DynamicFormComponent: Item retrieved successfully:', item);\n this.item = item;\n this.itemOutput.emit(this.item);\n this.setQuestionsAndForm();\n } catch (error) {\n console.error('DynamicFormComponent: Error getting item:', error);\n // Try to continue without the item\n this.item = null;\n this.setQuestionsAndForm();\n }\n }\n\n setQuestionsAndForm() {\n if (!this.mdl) {\n console.error('DynamicFormComponent: No model specified');\n return;\n }\n\n if (!this.questions || this.questions.length == 0) {\n console.log('DynamicFormComponent: Getting questions for model:', this.mdl);\n try {\n if (this.formViewFields && this.formViewFields.length > 0) {\n // Use FormView fields to generate questions\n this.questions = this.getQuestionsFromFormViewFields();\n console.log('DynamicFormComponent: Questions from FormView received:', this.questions);\n } else {\n // Original behavior - use all model fields\n this.questions = this.qcs.getQuestionsForModelFields(this.mdl);\n console.log('DynamicFormComponent: Questions from model received:', this.questions);\n \n // Apply FieldConfig to all questions when not using FormView\n this.applyFieldConfigToAllQuestions();\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error getting questions for model:', this.mdl, error);\n return;\n }\n }\n\n // Reset question values first\n for (let question of this.questions) {\n question.value = undefined; // Clear previous values\n }\n\n if (this.item) {\n for (let question of this.questions) {\n this.setQuestionValueFromItem(question);\n }\n }\n\n // Apply valueMap if provided\n if (this.valueMap) {\n for (let question of this.questions) {\n this.setQuestionValueFromValueMap(question, this.valueMap);\n }\n }\n\n // Always recreate the form to ensure it reflects current question values\n this.form = this.qcs.toFormGroup(this.questions as QuestionBase<any>[]);\n this.formLoaded.emit(this.form);\n console.log('this.item', this.item);\n }\n\n async applyFieldConfigToAllQuestions() {\n // Apply FieldConfig to all questions when not using FormView\n for (const question of this.questions || []) {\n await this.applyFieldConfigToQuestion(question, question.key);\n }\n }\n\n getQuestionsFromFormViewFields(): QuestionBase<any>[] {\n const questions: QuestionBase<any>[] = [];\n \n for (const formViewField of this.formViewFields) {\n // Create a mock field object that matches the structure expected by QuestionControlService\n const mockFieldObj = {\n name: formViewField.field_name,\n type: formViewField.field_type,\n isRequired: formViewField.required || false,\n attributes: []\n };\n \n const question = this.qcs.getFieldForFieldObj(mockFieldObj, this.mdl);\n if (question) {\n // Override the label if a custom displayLabel is provided\n if (formViewField.display_label) {\n question.label = formViewField.display_label;\n }\n \n // Set required status from FormViewField\n question.required = formViewField.required || false;\n \n // Apply FieldConfig enhancements if available\n this.applyFieldConfigToQuestion(question, formViewField.field_name);\n \n questions.push(question);\n }\n }\n \n return questions;\n }\n\n async applyFieldConfigToQuestion(question: QuestionBase<any>, fieldName: string) {\n try {\n // Look for a FieldConfig record that matches this field name\n const fieldConfigs = await this.ams.listItemsForModel('FieldConfig');\n if (fieldConfigs) {\n fieldConfigs.subscribe({\n next: ({ items }) => {\n const fieldConfig = items.find((config: any) => config.name === fieldName);\n if (fieldConfig) {\n console.log('DynamicFormComponent: Applying FieldConfig to question:', fieldName, fieldConfig);\n \n // Apply default value\n if (fieldConfig.default_value && !question.value) {\n question.value = fieldConfig.default_value;\n }\n \n // Apply validation rules (if it's a JSON string of validation rules)\n if (fieldConfig.validation_rules) {\n try {\n const validationRules = JSON.parse(fieldConfig.validation_rules);\n // Apply validation rules based on the structure\n // This could be extended to support various validation patterns\n console.log('DynamicFormComponent: Validation rules found:', validationRules);\n } catch (e) {\n console.warn('DynamicFormComponent: Invalid validation rules JSON:', fieldConfig.validation_rules);\n }\n }\n \n // Apply choices for dropdown/select fields\n if (question.controlType === 'dropdown' && fieldConfig.choices) {\n this.loadFieldConfigChoices(question, fieldConfig);\n }\n \n // Execute populate script for dynamic choices\n if (fieldConfig.populate_script && question.controlType === 'dropdown') {\n this.executePopulateScript(question, fieldConfig.populate_script);\n }\n }\n }\n });\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error applying FieldConfig:', error);\n }\n }\n\n async loadFieldConfigChoices(question: any, fieldConfig: any) {\n try {\n // Get FieldChoice records for this FieldConfig\n const fieldChoices = await this.ams.listItemsForModel('FieldChoice');\n if (fieldChoices) {\n fieldChoices.subscribe({\n next: ({ items }) => {\n const choices = items\n .filter((choice: any) => choice.fieldConfigId === fieldConfig.id)\n .sort((a: any, b: any) => (a.order || 0) - (b.order || 0))\n .map((choice: any) => ({\n key: choice.value,\n value: choice.label\n }));\n \n if (choices.length > 0) {\n console.log('DynamicFormComponent: Loaded choices for field:', fieldConfig.name, choices);\n question.options = choices;\n }\n }\n });\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error loading FieldConfig choices:', error);\n }\n }\n\n executePopulateScript(question: any, script: string) {\n try {\n console.log('DynamicFormComponent: Executing populate script for field:', question.key);\n \n // Create a safe execution context\n const context = {\n question: question,\n form: this.form,\n item: this.item,\n model: this.mdl,\n // Add other context variables as needed\n console: console,\n fetch: fetch // Allow fetch for API calls\n };\n \n // Create a function from the script\n const scriptFunction = new Function(...Object.keys(context), `\n try {\n ${script}\n } catch (error) {\n console.error('Script execution error:', error);\n return [];\n }\n `);\n \n // Execute the script with the context\n const result = scriptFunction(...Object.values(context));\n \n // Handle the result\n if (Array.isArray(result)) {\n question.options = result.map((item: any) => ({\n key: item.value || item.key || item,\n value: item.label || item.value || item\n }));\n console.log('DynamicFormComponent: Script populated choices:', question.options);\n } else if (result && typeof result.then === 'function') {\n // Handle promises\n result.then((asyncResult: any) => {\n if (Array.isArray(asyncResult)) {\n question.options = asyncResult.map((item: any) => ({\n key: item.value || item.key || item,\n value: item.label || item.value || item\n }));\n console.log('DynamicFormComponent: Async script populated choices:', question.options);\n }\n }).catch((error: any) => {\n console.error('DynamicFormComponent: Async script execution error:', error);\n });\n }\n } catch (error) {\n console.error('DynamicFormComponent: Script execution error:', error);\n }\n }\n\n setQuestionValueFromItem(question: any, item?: any) {\n if (!item) item = this.item;\n if (question.controlType == 'formgroup') {\n for (let q of question.questions) {\n this.setQuestionValueFromItem(q, item[question.key]);\n }\n }\n else if (item[question.key]) {\n question.value = item[question.key];\n } else {\n console.log('setQuestionValueFromItem no item found and not formgroup');\n }\n }\n\n setQuestionValueFromValueMap(question: any, valueMap: any) {\n if (question.controlType == 'formgroup') {\n for (let q of question.questions) {\n this.setQuestionValueFromValueMap(q, valueMap);\n }\n }\n else if (valueMap[question.key] !== undefined) {\n question.value = valueMap[question.key];\n }\n }\n\n getValueForKey(obj: any, key: string): any | null {\n if (obj === null || typeof obj !== 'object') {\n return null;\n }\n\n if (key in obj) {\n return obj[key];\n }\n\n for (const k in obj) {\n const result = this.getValueForKey(obj[k], key);\n if (result !== null) {\n return result;\n }\n }\n\n return null;\n }\n\n setValueForKey(obj: any, key: string, val: any) {\n if (obj === null || typeof obj !== 'object') {\n return;\n }\n\n if (key in obj) {\n obj[key] = val;\n }\n\n for (const k in obj) {\n if (typeof obj[k] == 'object') {\n this.setValueForKey(obj[k], key, val);\n }\n }\n }\n\n setRefQuestionValuesInPayload(questions?: any, payLoadObj?: any) {\n let qs = questions || this.questions;\n\n let refQs = qs.filter((x: any) => x.controlType == 'async-dropdown');\n if (refQs) {\n refQs.forEach((refQ: any) => {\n let keyVal = this.getValueForKey(this.payLoad, refQ.key);\n if (Array.isArray(keyVal)) {\n let relArr: any[] = [];\n for (var v in keyVal) {\n let valObj: any = {};\n valObj[refQ.targetModel.toLowerCase() + 'Id'] = keyVal[v];\n valObj[this.mdl.toLowerCase() + 'Id'] = this.id;\n relArr.push(valObj);\n }\n this.setValueForKey(this.payLoad, refQ.key, relArr)\n }\n else {\n console.log('qs keyVal is not array');\n }\n });\n }\n\n let groupQs = qs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n console.log('qs checking groupQ', groupQ);\n this.setRefQuestionValuesInPayload(groupQ.questions);\n }\n }\n console.log('qs payload', this.payLoad);\n }\n\n questionsIncludesRefType(questions?: any): boolean {\n let qs = questions || this.questions;\n\n let refQ = qs.find((x: any) => x.controlType == 'async-dropdown');\n if (refQ) return true;\n\n let groupQs = qs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n if (this.questionsIncludesRefType(groupQ.questions)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n formHasRelationshipQuestions(): boolean {\n return this.questionsIncludesRefType();\n }\n\n onSubmit() {\n this.payLoad = this.form.getRawValue();\n\n if (this.item && this.item.id) {\n this.payLoad.id = this.item.id;\n console.log('will update because this.item.id', this.item.id);\n this.updateItem();\n }\n else {\n console.log('will create because !this.item.id', this.item);\n this.createItem();\n }\n \n this.submitOutput.emit(this.payLoad);\n console.log('onSubmit payload', this.payLoad, 'this.item', this.item, 'this.form', this.form);\n }\n\n async updateItem() {\n this.prepPayloadObj();\n console.log('updateItem prepped payload', this.payLoad);\n try {\n const { data: item } = await this.ams.updateItemForModel(this.mdl, this.payLoad);\n console.log('updateItem finished res', item);\n \n if (!item) {\n this._snackBar.open('Error updating ' + this.mdl, 'Dismiss');\n return;\n }\n \n this.item = item;\n this.itemOutput.emit(this.item);\n \n // Show success message\n this._snackBar.open(`${this.mdl} updated successfully`, 'Dismiss', {\n duration: 3000\n });\n \n this.setQuestionsAndForm();\n } catch (error) {\n console.error('error in updateItem', error);\n this._snackBar.open('Error updating ' + this.mdl, 'Dismiss');\n }\n }\n\n getQuestionForKey(key: string, questions?: any) {\n let searchQs = questions || this.questions;\n let q = searchQs.find((x: any) => x.key == key);\n if (q) return q;\n\n let groupQs = searchQs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n console.log('searchQs checking groupQ', groupQ);\n q = this.getQuestionForKey(key, groupQ.questions);\n if (q) return q;\n }\n }\n return;\n }\n\n prepPayloadObj(obj?: any) {\n let prepObj = obj || this.payLoad;\n console.log('prepPayloadObj starting for prepObj', prepObj);\n for (let prop in prepObj) {\n let q = this.getQuestionForKey(prop);\n if (q) {\n console.log('q', q);\n if (q.controlType == \"formgroup\") {\n this.prepPayloadObj(prepObj[prop])\n }\n else {\n if (!q.required && prepObj[prop] == '') {\n delete prepObj[prop];\n }\n }\n }\n else {\n console.log('prepPayloadObj no q for prop', prop);\n }\n }\n }\n\n async createItem() {\n this.prepPayloadObj();\n console.log('createItem prepped payload', this.payLoad);\n try {\n let res = await this.ams.createItemPromise(this.mdl, this.payLoad);\n console.log('createItem finished res', res);\n if (!res) {\n this._snackBar.open('Error creating ' + this.mdl, 'Dismiss');\n return;\n }\n\n if (res.errors && res.errors.length > 0) {\n let messages: string[] = [];\n res.errors.forEach((err: any) => {\n messages.push(err.message);\n })\n this._snackBar.open(messages.join('\\n'), 'Dismiss');\n }\n else {\n this.item = res.data;\n this.itemOutput.emit(this.item);\n \n // Update the URL to reflect the new item ID\n if (this.item && this.item.id) {\n this.changePathIdParam(this.item.id);\n this.id = this.item.id; // Update the component's id property\n }\n \n // Show success message\n this._snackBar.open(`${this.mdl} created successfully`, 'Dismiss', {\n duration: 3000\n });\n \n this.setQuestionsAndForm();\n }\n } catch (error) {\n console.error('error in createItem', error);\n }\n }\n\n changePathIdParam(newParamValue: string) {\n const currentUrl = this.location.path();\n let paramValArr = currentUrl.split('/');\n let currentId = paramValArr[paramValArr.length -1];\n const newUrl = currentUrl.replace(currentId, newParamValue);\n this.location.replaceState(newUrl);\n }\n\n isValid(question?: any, q?: any, q2?: any) {\n if (question && q && q2) return this.form.get(question.key + '.' + q.key + '.' + q2.key);\n if (question && q && !q2) return this.form.get(question.key + '.' + q.key);\n if (question && !q && !q2) return this.form.get(question.key);\n return true;\n }\n}","<div class=\"dynamic-form-holder\">\n @if (form && questions) {\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n @for (question of questions; track question) {\n @if (this.switchInputs.includes(question.controlType) || this.materialInputs.includes(question.controlType) || this.refInputs.includes(question.controlType)) {\n <div class=\"form-row\">\n <snteam-dynamic-form-question [question]=\"question\" [formGroup]=\"form\"></snteam-dynamic-form-question>\n </div>\n }\n @if (this.formGroupInputs.includes(question.controlType)) {\n <div class=\"group-row\">\n <snteam-dynamic-form-group [question]=\"question\" [formGroup]=\"form\" [formGroupName]=\"question.key\"></snteam-dynamic-form-group>\n </div>\n }\n }\n @if (!hideSaveButton) {\n <div class=\"form-row\">\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"!form.valid\">Save</button>\n </div>\n }\n </form>\n } @else {\n <div class=\"loading\">Loading...</div>\n }\n\n @if(item && !hideRelationships){\n <div class=\"relationship-holder\">\n <snteam-record-relationships [model]=\"mdl\" [id]=\"id\" [item]=\"item\" [amplifyOutputs]=\"outputs\"></snteam-record-relationships>\n </div>\n }\n</div>","import { Component, OnInit, Input, inject, TemplateRef, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatListModule } from '@angular/material/list';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nexport interface RowAction {\n icon: string;\n label: string;\n color?: 'primary' | 'accent' | 'warn';\n action: (item: any) => void;\n}\n\n@Component({\n selector: 'snteam-list-view',\n standalone: true,\n imports: [CommonModule, MatListModule, MatButtonModule, MatIconModule, MatSnackBarModule, MatTooltipModule],\n templateUrl: './list-view.component.html',\n styleUrl: './list-view.component.css'\n})\nexport class ListViewComponent implements OnInit {\n private ams = inject(AmplifyModelService);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n private snackBar = inject(MatSnackBar);\n \n @Input() modelName: string = '';\n @Input() customItemTemplate?: TemplateRef<any>;\n @Input() hideNewButton: boolean = false;\n @Input() title?: string;\n @Input() useRouter: boolean = true;\n @Input() showRowActions: boolean = false;\n @Input() showDeleteAction: boolean = false;\n @Input() customRowActions: RowAction[] = [];\n \n @Output() itemClick = new EventEmitter<any>();\n @Output() newClick = new EventEmitter<void>();\n @Output() itemsLoaded = new EventEmitter<any[]>();\n @Output() itemDeleted = new EventEmitter<any>();\n \n itemsArr: any[] = [];\n loading: boolean = true;\n error: string | null = null;\n\n ngOnInit(): void {\n // Check if modelName is provided via route parameter\n const routeModel = this.route.snapshot.paramMap.get('model');\n if (routeModel) {\n this.modelName = routeModel;\n }\n \n if (this.modelName) {\n this.listItems();\n }\n }\n\n listItems() {\n console.log('ListViewComponent listItems starting for model:', this.modelName);\n if (this.modelName) {\n this.loading = true;\n this.error = null;\n \n const observable = this.ams.listItemsForModel(this.modelName);\n if (observable) {\n observable.subscribe({\n next: ({ items, isSynced }) => {\n this.itemsArr = items;\n this.loading = false;\n this.itemsLoaded.emit(this.itemsArr);\n console.log('ListViewComponent items loaded:', this.itemsArr);\n },\n error: (err) => {\n console.error('Error loading items:', err);\n this.error = 'Failed to load items';\n this.loading = false;\n }\n });\n } else {\n this.error = 'Service not initialized';\n this.loading = false;\n }\n }\n }\n\n onItemClick(item: any, event?: Event) {\n // Prevent navigation if clicking on action buttons\n if (event && (event.target as HTMLElement).closest('.row-actions')) {\n event.stopPropagation();\n return;\n }\n\n console.log('ListViewComponent itemClick', item);\n this.itemClick.emit(item);\n \n // Navigate to form view if useRouter is enabled\n if (this.useRouter && item.id) {\n this.router.navigate(['/form/' + this.modelName + '/' + item.id]);\n }\n }\n\n onNewClick() {\n console.log('ListViewComponent newClick');\n if (this.useRouter) {\n this.router.navigate(['/form/' + this.modelName + '/-1']);\n } else {\n this.newClick.emit();\n }\n }\n\n async onDeleteItem(item: any, event: Event) {\n event.stopPropagation();\n \n try {\n console.log('ListViewComponent: Deleting item:', item);\n \n const result = await this.ams.deleteItemForModel(this.modelName, item.id);\n \n if (result && result.data) {\n console.log('ListViewComponent: Successfully deleted item:', result.data);\n this.snackBar.open(`${this.modelName} deleted successfully`, 'Dismiss', {\n duration: 3000\n });\n this.itemDeleted.emit(item);\n } else {\n console.error('ListViewComponent: Failed to delete item:', result);\n this.snackBar.open(`Failed to delete ${this.modelName}`, 'Dismiss', {\n duration: 3000\n });\n }\n } catch (error) {\n console.error('ListViewComponent: Error deleting item:', error);\n this.snackBar.open(`Error deleting ${this.modelName}: ${error}`, 'Dismiss', {\n duration: 5000\n });\n }\n }\n\n onCustomAction(action: RowAction, item: any, event: Event) {\n event.stopPropagation();\n action.action(item);\n }\n\n getDisplayText(item: any): string {\n // Try common display fields\n return item.name || item.title || item.label || item.id || 'Unnamed Item';\n }\n\n refresh() {\n this.listItems();\n }\n}","<div class=\"list-view-container\">\n <div class=\"header\">\n <h2>{{ title || modelName }}</h2>\n @if (!hideNewButton) {\n <button mat-raised-button color=\"primary\" (click)=\"onNewClick()\">\n <mat-icon>add</mat-icon>\n New {{ modelName }}\n </button>\n }\n </div>\n\n @if (loading) {\n <div class=\"loading\">Loading {{ modelName }}...</div>\n }\n\n @if (error) {\n <div class=\"error\">\n {{ error }}\n <button mat-button (click)=\"refresh()\">Retry</button>\n </div>\n }\n\n @if (!loading && !error && itemsArr.length === 0) {\n <div class=\"empty-state\">\n <p>No {{ modelName }} found</p>\n @if (!hideNewButton) {\n <button mat-raised-button color=\"primary\" (click)=\"onNewClick()\">\n Create First {{ modelName }}\n </button>\n }\n </div>\n }\n\n @if (!loading && !error && itemsArr.length > 0) {\n <mat-list class=\"items-list\">\n @for (item of itemsArr; track item.id) {\n <mat-list-item (click)=\"onItemClick(item, $event)\" class=\"clickable-item\">\n @if (customItemTemplate) {\n <ng-container [ngTemplateOutlet]=\"customItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n } @else {\n <div class=\"item-content\">\n <div class=\"item-text\">\n <span matListItemTitle>{{ getDisplayText(item) }}</span>\n <span matListItemLine>{{ item.description || (item.createdAt | date) }}</span>\n </div>\n @if (showRowActions || showDeleteAction || customRowActions.length > 0) {\n <div class=\"row-actions\">\n @if (showDeleteAction) {\n <button mat-icon-button color=\"warn\" (click)=\"onDeleteItem(item, $event)\" \n matTooltip=\"Delete\" class=\"action-button\">\n <mat-icon>delete</mat-icon>\n </button>\n }\n @for (action of customRowActions; track action.label) {\n <button mat-icon-button [color]=\"action.color || 'primary'\" \n (click)=\"onCustomAction(action, item, $event)\"\n [matTooltip]=\"action.label\" class=\"action-button\">\n <mat-icon>{{ action.icon }}</mat-icon>\n </button>\n }\n </div>\n }\n </div>\n }\n </mat-list-item>\n }\n </mat-list>\n }\n</div>","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, Validators, ReactiveFormsModule } from '@angular/forms';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';\n\nimport { ListViewComponent } from '../list-view/list-view.component';\nimport { QuestionControlService } from '../../services/question-control.service';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { RelationshipSelectionConfig, RelationshipSelectionSetConfig } from '../../interfaces/relationship-config.interface';\n\n// Extended interface for UI management (includes ID for tracking)\ninterface RelationshipSelectionConfigWithId extends RelationshipSelectionConfig {\n id: string;\n}\n\n@Component({\n selector: 'snteam-configurations',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatExpansionModule,\n MatIconModule,\n MatCardModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n MatTooltipModule,\n MatSnackBarModule,\n ListViewComponent\n ],\n templateUrl: './configurations.component.html',\n styleUrl: './configurations.component.css'\n})\nexport class ConfigurationsComponent implements OnInit {\n @Input() amplifyOutputs?: any;\n\n private qcs = inject(QuestionControlService);\n private ams = inject(AmplifyModelService);\n private snackBar = inject(MatSnackBar);\n private fb = inject(FormBuilder);\n\n // Track which models exist in the schema\n hasTableConfig = false;\n hasFormView = false;\n hasListView = false;\n hasFieldConfig = false;\n hasRelationshipConfig = false;\n\n // Relationship configuration management\n relationshipConfigs: RelationshipSelectionConfigWithId[] = [];\n showAddRelationshipConfig = false;\n editingRelationshipConfig: RelationshipSelectionConfigWithId | null = null;\n relationshipConfigForm: FormGroup;\n availableModels: string[] = [];\n availableFields: { name: string; label: string; type: string }[] = [];\n\n constructor() {\n this.relationshipConfigForm = this.fb.group({\n relationshipModel: ['', Validators.required],\n fieldName: ['', Validators.required],\n selectionSet: ['', Validators.required],\n description: ['']\n });\n }\n\n ngOnInit() {\n this.checkAvailableModels();\n this.loadRelationshipConfigs();\n this.loadAvailableModels();\n }\n\n get outputs() {\n return this.amplifyOutputs || (this.qcs as any).outputs;\n }\n\n checkAvailableModels() {\n if (!this.outputs || !this.outputs.data || !this.outputs.data.model_introspection) {\n console.warn('ConfigurationsComponent: No model introspection data available');\n return;\n }\n\n const models = this.outputs.data.model_introspection.models;\n console.log('ConfigurationsComponent: Available models:', Object.keys(models));\n\n this.hasTableConfig = 'TableConfig' in models;\n this.hasFormView = 'FormView' in models;\n this.hasListView = 'ListView' in models;\n this.hasFieldConfig = 'FieldConfig' in models;\n this.hasRelationshipConfig = 'RelationshipConfig' in models;\n\n console.log('ConfigurationsComponent: Model availability:', {\n TableConfig: this.hasTableConfig,\n FormView: this.hasFormView,\n ListView: this.hasListView,\n FieldConfig: this.hasFieldConfig,\n RelationshipConfig: this.hasRelationshipConfig\n });\n }\n\n async populateDefaultFieldConfigs() {\n try {\n console.log('ConfigurationsComponent: Starting populateDefaultFieldConfigs');\n \n // Create a FieldConfig for the \"field\" field on FieldConfig model\n const fieldConfigForField = {\n name: 'Field Selector Config',\n description: 'Configuration for the field selector dropdown',\n model: 'FieldConfig',\n field: 'field',\n field_type: 'select',\n label: 'Field Name',\n populate_script: `\n// Get all fields for the selected model\nconst modelName = form.get('model')?.value;\nif (!modelName) {\n return [{value: '', label: 'Please select a model first'}];\n}\n\n// Access the model introspection data\nconst outputs = (window as any).amplifyOutputs || question.outputs;\nif (!outputs || !outputs.data || !outputs.data.model_introspection) {\n return [{value: '', label: 'Schema data not available'}];\n}\n\nconst models = outputs.data.model_introspection.models;\nconst modelData = models[modelName];\nif (!modelData || !modelData.fields) {\n return [{value: '', label: 'Model not found or has no fields'}];\n}\n\n// Get all fields from the selected model, excluding system fields\nconst skipFields = ['id', 'createdAt', 'updatedAt'];\nconst fields = Object.values(modelData.fields)\n .filter((field) => !skipFields.includes(field.name))\n .map((field) => ({\n value: field.name,\n label: field.name.charAt(0).toUpperCase() + field.name.slice(1).replace(/_/g, ' ')\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\nreturn fields;\n `.trim()\n };\n\n // Create the FieldConfig record\n const result = await this.ams.createItemPromise('FieldConfig', fieldConfigForField);\n \n if (result && result.data) {\n console.log('ConfigurationsComponent: Successfully created FieldConfig:', result.data);\n this.snackBar.open('Default FieldConfig created successfully!', 'Dismiss', {\n duration: 3000\n });\n } else {\n console.error('ConfigurationsComponent: Failed to create FieldConfig:', result);\n this.snackBar.open('Failed to create FieldConfig', 'Dismiss', {\n duration: 3000\n });\n }\n } catch (error) {\n console.error('ConfigurationsComponent: Error in populateDefaultFieldConfigs:', error);\n this.snackBar.open('Error creating FieldConfig: ' + error, 'Dismiss', {\n duration: 5000\n });\n }\n }\n\n async deleteAllConfigs(modelName: string) {\n try {\n console.log(`ConfigurationsComponent: Starting deleteAllConfigs for ${modelName}`);\n \n // Get all records for the model\n const observable = this.ams.listItemsForModel(modelName);\n if (!observable) {\n this.snackBar.open(`Failed to get ${modelName} records`, 'Dismiss', { duration: 3000 });\n return;\n }\n\n observable.subscribe({\n next: async ({ items }) => {\n if (items.length === 0) {\n this.snackBar.open(`No ${modelName} records found to delete`, 'Dismiss', { duration: 3000 });\n return;\n }\n\n console.log(`ConfigurationsComponent: Found ${items.length} ${modelName} records to delete`);\n\n // Delete all records\n const deletePromises = items.map((item: any) => \n this.ams.deleteItemForModel(modelName, item.id)\n );\n\n try {\n const deleteResults = await Promise.all(deletePromises);\n const successfulDeletes = deleteResults.filter(result => result && result.data);\n \n console.log(`ConfigurationsComponent: Successfully deleted ${successfulDeletes.length} ${modelName} records`);\n \n this.snackBar.open(\n `Deleted ${successfulDeletes.length} ${modelName} records`, \n 'Dismiss', \n { duration: 3000 }\n );\n\n // No need to refresh model field config check since we removed that functionality\n\n } catch (deleteError) {\n console.error(`ConfigurationsComponent: Error deleting ${modelName} records:`, deleteError);\n this.snackBar.open(`Error deleting ${modelName} records: ${deleteError}`, 'Dismiss', {\n duration: 5000\n });\n }\n },\n error: (error) => {\n console.error(`ConfigurationsComponent: Error getting ${modelName} records:`, error);\n this.snackBar.open(`Error getting ${modelName} records: ${error}`, 'Dismiss', {\n duration: 5000\n });\n }\n });\n\n } catch (error) {\n console.error(`ConfigurationsComponent: Error in deleteAllConfigs for ${modelName}:`, error);\n this.snackBar.open(`Error deleting ${modelName} configs: ${error}`, 'Dismiss', {\n duration: 5000\n });\n }\n }\n\n async deleteTableConfigs() {\n await this.deleteAllConfigs('TableConfig');\n }\n\n async deleteFormViews() {\n await this.deleteAllConfigs('FormView');\n }\n\n async deleteListViews() {\n await this.deleteAllConfigs('ListView');\n }\n\n async deleteFieldConfigs() {\n await this.deleteAllConfigs('FieldConfig');\n }\n\n async populateDefaultTableConfigs() {\n try {\n console.log('ConfigurationsComponent: Starting populateDefaultTableConfigs');\n \n // Get all available models from the schema\n const models = this.outputs.data.model_introspection.models;\n const modelNames = Object.keys(models);\n \n let totalCreated = 0;\n let createdTableConfigs: any[] = [];\n let createdFormViews: any[] = [];\n let createdFormViewFields: any[] = [];\n\n // Step 1: Create TableConfig records for each model\n console.log('ConfigurationsComponent: Creating TableConfig records for', modelNames.length, 'models');\n \n for (const modelName of modelNames) {\n const tableConfig = {\n name: modelName,\n description: `Configuration for ${this.formatModelLabel(modelName)} model`,\n label: this.formatModelLabel(modelName),\n hide_in_menu: false\n };\n\n const tableConfigResult = await this.ams.createItemPromise('TableConfig', tableConfig);\n if (tableConfigResult && tableConfigResult.data) {\n createdTableConfigs.push(tableConfigResult.data);\n totalCreated++;\n console.log('ConfigurationsComponent: Created TableConfig for', modelName);\n }\n }\n\n // Step 2: Create FormView records for each model and link to TableConfig\n console.log('ConfigurationsComponent: Creating FormView records');\n \n for (let i = 0; i < modelNames.length; i++) {\n const modelName = modelNames[i];\n const tableConfig = createdTableConfigs[i];\n \n if (tableConfig) {\n const formView = {\n label: `Default ${this.formatModelLabel(modelName)} Form`,\n tableConfigId: tableConfig.id\n };\n\n const formViewResult = await this.ams.createItemPromise('FormView', formView);\n if (formViewResult && formViewResult.data) {\n createdFormViews.push(formViewResult.data);\n totalCreated++;\n console.log('ConfigurationsComponent: Created FormView for', modelName);\n\n // Step 3: Update TableConfig to set this as the default FormView\n const updatedTableConfig = {\n id: tableConfig.id,\n defaultFormViewId: formViewResult.data.id\n };\n\n await this.ams.updateItemForModel('TableConfig', updatedTableConfig);\n console.log('ConfigurationsComponent: Updated TableConfig with default FormView for', modelName);\n }\n }\n }\n\n // Step 4: Create FormViewField records for each field in each model\n console.log('ConfigurationsComponent: Creating FormViewField records');\n \n for (let i = 0; i < modelNames.length; i++) {\n const modelName = modelNames[i];\n const formView = createdFormViews[i];\n const modelData = models[modelName];\n \n if (formView && modelData && modelData.fields) {\n const fields = Object.values(modelData.fields);\n const skipFields = ['id', 'createdAt', 'updatedAt']; // Skip system fields\n let fieldOrder = 0;\n\n for (const field of fields) {\n const fieldData = field as any;\n \n // Skip system fields and relationship fields\n if (skipFields.includes(fieldData.name) || \n (fieldData.association && fieldData.association.connectionType)) {\n continue;\n }\n\n const formViewField = {\n field_name: fieldData.name,\n display_label: this.formatFieldLabel(fieldData.name),\n field_type: this.mapFieldType(fieldData.type),\n required: fieldData.isRequired || false,\n order: fieldOrder++,\n formViewId: formView.id\n };\n\n const formViewFieldResult = await this.ams.createItemPromise('FormViewField', formViewField);\n if (formViewFieldResult && formViewFieldResult.data) {\n createdFormViewFields.push(formViewFieldResult.data);\n totalCreated++;\n }\n }\n \n console.log('ConfigurationsComponent: Created FormViewFields for', modelName, 'with', fieldOrder, 'fields');\n }\n }\n\n console.log('ConfigurationsComponent: Successfully created', totalCreated, 'total records');\n console.log('ConfigurationsComponent: Created', createdTableConfigs.length, 'TableConfigs');\n console.log('ConfigurationsComponent: Created', createdFormViews.length, 'FormViews');\n console.log('ConfigurationsComponent: Created', createdFormViewFields.length, 'FormViewFields');\n \n this.snackBar.open(\n `Created ${totalCreated} configuration records: ${createdTableConfigs.length} TableConfigs, ${createdFormViews.length} FormViews, ${createdFormViewFields.length} FormViewFields`, \n 'Dismiss', \n { duration: 5000 }\n );\n \n } catch (error) {\n console.error('ConfigurationsComponent: Error in populateDefaultTableConfigs:', error);\n this.snackBar.open('Error creating default table configurations: ' + error, 'Dismiss', {\n duration: 5000\n });\n }\n }\n\n private formatModelLabel(modelName: string): string {\n // Convert PascalCase to readable format\n return modelName\n .replace(/([A-Z])/g, ' $1')\n .trim()\n .replace(/^./, str => str.toUpperCase());\n }\n\n private formatFieldLabel(fieldName: string): string {\n // Convert snake_case or camelCase to readable format\n return fieldName\n .replace(/_/g, ' ')\n .replace(/([A-Z])/g, ' $1')\n .trim()\n .replace(/^./, str => str.toUpperCase());\n }\n\n private mapFieldType(fieldType: any): string {\n // Map Amplify field types to form field types\n if (typeof fieldType === 'string') {\n switch (fieldType.toLowerCase()) {\n case 'string':\n case 'awsurl':\n case 'awsemail':\n case 'awsphone':\n return 'text';\n case 'int':\n case 'integer':\n case 'float':\n return 'number';\n case 'boolean':\n return 'checkbox';\n case 'awsdate':\n return 'date';\n case 'awsdatetime':\n return 'datetime-local';\n case 'awstime':\n return 'time';\n default:\n return 'text';\n }\n }\n \n // Handle complex types (relationships, etc.)\n if (typeof fieldType === 'object' && fieldType.model) {\n return 'select'; // Relationship fields become select dropdowns\n }\n \n return 'text'; // Default fallback\n }\n\n // Relationship Configuration Management Methods\n\n private loadAvailableModels(): void {\n if (!this.outputs || !this.outputs.data || !this.outputs.data.model_introspection) {\n console.warn('ConfigurationsComponent: No model introspection data available for relationship configs');\n return;\n }\n\n const models = this.outputs.data.model_introspection.models;\n this.availableModels = Object.keys(models).sort();\n console.log('ConfigurationsComponent: Available models for relationship configs:', this.availableModels);\n }\n\n onRelationshipModelChange(event: any): void {\n const selectedModel = event.value;\n this.loadAvailableFields(selectedModel);\n \n // Reset field name when model changes\n this.relationshipConfigForm.patchValue({ fieldName: '' });\n }\n\n private loadAvailableFields(modelName: string): void {\n if (!this.outputs || !this.outputs.data || !this.outputs.data.model_introspection) {\n this.availableFields = [];\n return;\n }\n\n const models = this.outputs.data.model_introspection.models;\n const modelData = models[modelName];\n \n if (!modelData || !modelData.fields) {\n this.availableFields = [];\n return;\n }\n\n // Get relationship fields from the selected model\n this.availableFields = Object.values(modelData.fields)\n .filter((field: any) => {\n // Include relationship fields (fields that reference other models)\n return field.association && field.association.connectionType;\n })\n .map((field: any) => ({\n name: field.name,\n label: this.formatFieldLabel(field.name),\n type: field.type\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\n console.log('ConfigurationsComponent: Available relationship fields for', modelName, ':', this.availableFields);\n }\n\n private loadRelationshipConfigs(): void {\n if (!this.hasRelationshipConfig) {\n console.warn('ConfigurationsComponent: RelationshipConfig model not available in schema');\n this.relationshipConfigs = [];\n return;\n }\n\n // Load from Amplify RelationshipConfig model only (database-only mode)\n const observable = this.ams.listItemsForModel('RelationshipConfig');\n if (!observable) {\n console.error('ConfigurationsComponent: Failed to get RelationshipConfig observable');\n this.relationshipConfigs = [];\n return;\n }\n\n observable.subscribe({\n next: ({ items }) => {\n this.relationshipConfigs = items\n .filter((item: any) => item.isActive !== false)\n .map((item: any) => ({\n id: item.id,\n relationshipModel: item.relationshipModel,\n fieldName: item.fieldName,\n selectionSet: item.selectionSet || [],\n description: item.description\n }));\n \n console.log('ConfigurationsComponent: Loaded relationship configs from database:', this.relationshipConfigs);\n \n // Update the AmplifyModelService with loaded configurations\n this.updateAmplifyModelService();\n },\n error: (error) => {\n console.error('ConfigurationsComponent: Error loading relationship configs from database:', error);\n this.relationshipConfigs = [];\n }\n });\n }\n\n\n\n private saveRelationshipConfigsToStorage(): void {\n // Database-only mode - no localStorage saving\n this.updateAmplifyModelService();\n console.log('ConfigurationsComponent: Updated AmplifyModelService with relationship configs (database-only mode)');\n }\n\n private updateAmplifyModelService(): void {\n const config: RelationshipSelectionSetConfig = {\n relationships: this.relationshipConfigs.map(({ id, ...config }) => config),\n defaultSelectionSet: ['id'],\n enableFallback: true\n };\n\n this.ams.setRelationshipConfig(config);\n console.log('ConfigurationsComponent: Updated AmplifyModelService with relationship configs');\n }\n\n async saveRelationshipConfig(): Promise<void> {\n if (!this.relationshipConfigForm.valid) {\n this.snackBar.open('Please fill in all required fields', 'Dismiss', { duration: 3000 });\n return;\n }\n\n const formValue = this.relationshipConfigForm.value;\n \n // Parse selection set from textarea (one field per line)\n const selectionSet = formValue.selectionSet\n .split('\\n')\n .map((line: string) => line.trim())\n .filter((line: string) => line.length > 0);\n\n try {\n if (this.editingRelationshipConfig) {\n // Update existing configuration\n await this.updateRelationshipConfig(this.editingRelationshipConfig.id, {\n relationshipModel: formValue.relationshipModel,\n fieldName: formValue.fieldName,\n selectionSet: selectionSet,\n description: formValue.description || undefined\n });\n this.snackBar.open('Relationship configuration updated successfully', 'Dismiss', { duration: 3000 });\n } else {\n // Check for duplicate configuration\n const existing = this.relationshipConfigs.find(c => \n c.relationshipModel === formValue.relationshipModel && \n c.fieldName === formValue.fieldName\n );\n\n if (existing) {\n this.snackBar.open('Configuration for this relationship already exists', 'Dismiss', { duration: 3000 });\n return;\n }\n\n // Create new configuration\n await this.createRelationshipConfig({\n relationshipModel: formValue.relationshipModel,\n fieldName: formValue.fieldName,\n selectionSet: selectionSet,\n description: formValue.description || undefined\n });\n this.snackBar.open('Relationship configuration added successfully', 'Dismiss', { duration: 3000 });\n }\n\n this.cancelRelationshipConfigEdit();\n \n } catch (error) {\n console.error('ConfigurationsComponent: Error saving relationship config:', error);\n this.snackBar.open('Error saving configuration: ' + error, 'Dismiss', { duration: 5000 });\n }\n }\n\n private async createRelationshipConfig(config: Omit<RelationshipSelectionConfig, 'id'>): Promise<void> {\n if (!this.hasRelationshipConfig) {\n throw new Error('RelationshipConfig model not available in schema. Please add it to your Amplify data model.');\n }\n\n const amplifyConfig = {\n relationshipModel: config.relationshipModel,\n fieldName: config.fieldName,\n selectionSet: config.selectionSet,\n description: config.description,\n isActive: true,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString()\n };\n\n const result = await this.ams.createItemPromise('RelationshipConfig', amplifyConfig);\n if (result && result.data) {\n console.log('ConfigurationsComponent: Created RelationshipConfig in Amplify:', result.data);\n // Reload configurations to get the updated list\n this.loadRelationshipConfigs();\n } else {\n throw new Error('Failed to create RelationshipConfig in Amplify');\n }\n }\n\n private async updateRelationshipConfig(id: string, config: Omit<RelationshipSelectionConfig, 'id'>): Promise<void> {\n if (!this.hasRelationshipConfig) {\n throw new Error('RelationshipConfig model not available in schema. Please add it to your Amplify data model.');\n }\n\n const amplifyConfig = {\n id: id,\n relationshipModel: config.relationshipModel,\n fieldName: config.fieldName,\n selectionSet: config.selectionSet,\n description: config.description,\n updatedAt: new Date().toISOString()\n };\n\n const result = await this.ams.updateItemForModel('RelationshipConfig', amplifyConfig);\n if (result && result.data) {\n console.log('ConfigurationsComponent: Updated RelationshipConfig in Amplify:', result.data);\n // Reload configurations to get the updated list\n this.loadRelationshipConfigs();\n } else {\n throw new Error('Failed to update RelationshipConfig in Amplify');\n }\n }\n\n editRelationshipConfig(config: RelationshipSelectionConfigWithId): void {\n this.editingRelationshipConfig = config;\n this.showAddRelationshipConfig = true;\n\n // Load fields for the selected model\n this.loadAvailableFields(config.relationshipModel);\n\n // Populate form with existing values\n this.relationshipConfigForm.patchValue({\n relationshipModel: config.relationshipModel,\n fieldName: config.fieldName,\n selectionSet: config.selectionSet.join('\\n'),\n description: config.description || ''\n });\n }\n\n async deleteRelationshipConfig(config: RelationshipSelectionConfigWithId): Promise<void> {\n try {\n if (!this.hasRelationshipConfig) {\n throw new Error('RelationshipConfig model not available in schema. Please add it to your Amplify data model.');\n }\n\n const result = await this.ams.deleteItemForModel('RelationshipConfig', config.id);\n if (result && result.data) {\n console.log('ConfigurationsComponent: Deleted RelationshipConfig from Amplify:', result.data);\n // Reload configurations to get the updated list\n this.loadRelationshipConfigs();\n this.snackBar.open('Relationship configuration deleted', 'Dismiss', { duration: 3000 });\n } else {\n throw new Error('Failed to delete RelationshipConfig from Amplify');\n }\n } catch (error) {\n console.error('ConfigurationsComponent: Error deleting relationship config:', error);\n this.snackBar.open('Error deleting configuration: ' + error, 'Dismiss', { duration: 5000 });\n }\n }\n\n private generateId(): string {\n return 'config_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n }\n\n cancelRelationshipConfigEdit(): void {\n this.showAddRelationshipConfig = false;\n this.editingRelationshipConfig = null;\n this.relationshipConfigForm.reset();\n this.availableFields = [];\n }\n\n async loadDefaultRelationshipConfigs(): Promise<void> {\n // This method is deprecated - use populateDefaultRelationshipConfigs instead\n console.warn('ConfigurationsComponent: loadDefaultRelationshipConfigs is deprecated, use populateDefaultRelationshipConfigs');\n await this.populateDefaultRelationshipConfigs();\n }\n\n async populateDefaultRelationshipConfigs(): Promise<void> {\n if (!this.hasRelationshipConfig) {\n this.snackBar.open('RelationshipConfig model not available in schema', 'Dismiss', { duration: 3000 });\n return;\n }\n\n // Load some sensible default configurations\n const defaultConfigs: Omit<RelationshipSelectionConfigWithId, 'id'>[] = [\n {\n relationshipModel: 'ListView',\n fieldName: 'table',\n selectionSet: [\n 'id',\n 'table',\n 'table.id',\n 'table.name',\n 'table.label',\n 'table.description'\n ],\n description: 'Configuration for ListView -> Table relationship'\n },\n {\n relationshipModel: 'FormViewField',\n fieldName: 'formView',\n selectionSet: [\n 'id',\n 'formView',\n 'formView.id',\n 'formView.label',\n 'formView.tableConfigId'\n ],\n description: 'Configuration for FormViewField -> FormView relationship'\n },\n {\n relationshipModel: 'FormView',\n fieldName: 'table',\n selectionSet: [\n 'id',\n 'table',\n 'table.id',\n 'table.name',\n 'table.label',\n 'table.description'\n ],\n description: 'Configuration for FormView -> TableConfig relationship'\n },\n {\n relationshipModel: 'FieldChoice',\n fieldName: 'fieldConfig',\n selectionSet: [\n 'id',\n 'fieldConfig',\n 'fieldConfig.id',\n 'fieldConfig.name',\n 'fieldConfig.label',\n 'fieldConfig.field_type'\n ],\n description: 'Configuration for FieldChoice -> FieldConfig relationship'\n },\n {\n relationshipModel: 'ListView',\n fieldName: 'formView',\n selectionSet: [\n 'id',\n 'formView',\n 'formView.id',\n 'formView.label',\n 'formView.tableConfigId'\n ],\n description: 'Configuration for ListView -> FormView relationship'\n },\n {\n relationshipModel: 'ListViewField',\n fieldName: 'listView',\n selectionSet: [\n 'id',\n 'listView',\n 'listView.id',\n 'listView.label',\n 'listView.tableConfigId'\n ],\n description: 'Configuration for ListViewField -> ListView relationship'\n },\n {\n relationshipModel: 'TableConfig',\n fieldName: 'defaultListView',\n selectionSet: [\n 'id',\n 'defaultListView',\n 'defaultListView.id',\n 'defaultListView.label',\n 'defaultListView.tableConfigId'\n ],\n description: 'Configuration for TableConfig -> ListView (defaultListView) relationship'\n },\n {\n relationshipModel: 'TableConfig',\n fieldName: 'defaultFormView',\n selectionSet: [\n 'id',\n 'defaultFormView',\n 'defaultFormView.id',\n 'defaultFormView.label',\n 'defaultFormView.tableConfigId'\n ],\n description: 'Configuration for TableConfig -> FormView (defaultFormView) relationship'\n },\n {\n relationshipModel: 'ServiceCustomer',\n fieldName: 'service',\n selectionSet: [\n 'id',\n 'service',\n 'service.id',\n 'service.title',\n 'service.cost',\n 'service.price'\n ],\n description: 'Configuration for ServiceCustomer -> Service relationship'\n },\n {\n relationshipModel: 'ServiceCustomer',\n fieldName: 'customer',\n selectionSet: [\n 'id',\n 'customer',\n 'customer.id',\n 'customer.name',\n 'customer.contact_preference'\n ],\n description: 'Configuration for ServiceCustomer -> Customer relationship'\n }\n ];\n\n try {\n // Only add configs that don't already exist\n let addedCount = 0;\n for (const defaultConfig of defaultConfigs) {\n const existing = this.relationshipConfigs.find(c => \n c.relationshipModel === defaultConfig.relationshipModel && \n c.fieldName === defaultConfig.fieldName\n );\n\n if (!existing) {\n await this.createRelationshipConfig(defaultConfig);\n addedCount++;\n }\n }\n\n if (addedCount > 0) {\n this.snackBar.open(`Added ${addedCount} default relationship configurations`, 'Dismiss', { duration: 3000 });\n } else {\n this.snackBar.open('All default relationship configurations already exist', 'Dismiss', { duration: 3000 });\n }\n } catch (error) {\n console.error('ConfigurationsComponent: Error loading default relationship configs:', error);\n this.snackBar.open('Error loading default configurations: ' + error, 'Dismiss', { duration: 5000 });\n }\n }\n\n async createDefaultListViews(): Promise<void> {\n if (!this.hasListView || !this.hasTableConfig) {\n this.snackBar.open('ListView or TableConfig model not available in schema', 'Dismiss', { duration: 3000 });\n return;\n }\n\n try {\n console.log('ConfigurationsComponent: Starting createDefaultListViews');\n \n // Get all available models from the schema\n const models = this.outputs.data.model_introspection.models;\n const modelNames = Object.keys(models);\n \n // Get existing TableConfigs to link ListViews to\n const tableConfigObservable = this.ams.listItemsForModel('TableConfig');\n if (!tableConfigObservable) {\n this.snackBar.open('Failed to get TableConfig records', 'Dismiss', { duration: 3000 });\n return;\n }\n\n tableConfigObservable.subscribe({\n next: async ({ items: tableConfigs }) => {\n if (tableConfigs.length === 0) {\n this.snackBar.open('No TableConfig records found. Please create TableConfigs first.', 'Dismiss', { duration: 3000 });\n return;\n }\n\n let totalCreated = 0;\n let createdListViews: any[] = [];\n let createdListViewFields: any[] = [];\n\n // Create ListView records for each TableConfig\n console.log('ConfigurationsComponent: Creating ListView records for', tableConfigs.length, 'TableConfigs');\n \n for (const tableConfig of tableConfigs) {\n const modelName = tableConfig.name;\n const modelData = models[modelName];\n \n if (!modelData) {\n console.warn('ConfigurationsComponent: Model data not found for', modelName);\n continue;\n }\n\n // Check if ListView already exists for this TableConfig\n const existingListViewObservable = this.ams.listItemsForModel('ListView');\n if (existingListViewObservable) {\n const existingListViews = await new Promise<any[]>((resolve) => {\n existingListViewObservable.subscribe({\n next: ({ items }) => resolve(items.filter((lv: any) => lv.tableConfigId === tableConfig.id)),\n error: () => resolve([])\n });\n });\n\n if (existingListViews.length > 0) {\n console.log('ConfigurationsComponent: ListView already exists for', modelName);\n continue;\n }\n }\n\n const listView = {\n label: `Default ${this.formatModelLabel(modelName)} List`,\n tableConfigId: tableConfig.id\n };\n\n const listViewResult = await this.ams.createItemPromise('ListView', listView);\n if (listViewResult && listViewResult.data) {\n createdListViews.push(listViewResult.data);\n totalCreated++;\n console.log('ConfigurationsComponent: Created ListView for', modelName);\n\n // Create ListViewField records for each field in the model\n if (modelData.fields) {\n const fields = Object.values(modelData.fields);\n const skipFields = ['id', 'createdAt', 'updatedAt']; // Skip system fields\n let fieldOrder = 0;\n\n for (const field of fields) {\n const fieldData = field as any;\n \n // Skip system fields and relationship fields for list view\n if (skipFields.includes(fieldData.name) || \n (fieldData.association && fieldData.association.connectionType)) {\n continue;\n }\n\n const listViewField = {\n field_name: fieldData.name,\n display_label: this.formatFieldLabel(fieldData.name),\n field_type: this.mapFieldType(fieldData.type),\n order: fieldOrder++,\n listViewId: listViewResult.data.id\n };\n\n const listViewFieldResult = await this.ams.createItemPromise('ListViewField', listViewField);\n if (listViewFieldResult && listViewFieldResult.data) {\n createdListViewFields.push(listViewFieldResult.data);\n totalCreated++;\n }\n }\n \n console.log('ConfigurationsComponent: Created ListViewFields for', modelName, 'with', fieldOrder, 'fields');\n }\n\n // Update TableConfig to set this as the default ListView if none exists\n if (!tableConfig.defaultListViewId) {\n const updatedTableConfig = {\n id: tableConfig.id,\n defaultListViewId: listViewResult.data.id\n };\n\n await this.ams.updateItemForModel('TableConfig', updatedTableConfig);\n console.log('ConfigurationsComponent: Updated TableConfig with default ListView for', modelName);\n }\n }\n }\n\n console.log('ConfigurationsComponent: Successfully created', totalCreated, 'total records');\n console.log('ConfigurationsComponent: Created', createdListViews.length, 'ListViews');\n console.log('ConfigurationsComponent: Created', createdListViewFields.length, 'ListViewFields');\n \n this.snackBar.open(\n `Created ${totalCreated} ListView records: ${createdListViews.length} ListViews, ${createdListViewFields.length} ListViewFields`, \n 'Dismiss', \n { duration: 5000 }\n );\n },\n error: (error) => {\n console.error('ConfigurationsComponent: Error getting TableConfig records:', error);\n this.snackBar.open('Error getting TableConfig records: ' + error, 'Dismiss', {\n duration: 5000\n });\n }\n });\n \n } catch (error) {\n console.error('ConfigurationsComponent: Error in createDefaultListViews:', error);\n this.snackBar.open('Error creating default ListView configurations: ' + error, 'Dismiss', {\n duration: 5000\n });\n }\n }\n\n async clearAllRelationshipConfigs(): Promise<void> {\n if (!this.hasRelationshipConfig) {\n this.snackBar.open('RelationshipConfig model not available in schema', 'Dismiss', { duration: 3000 });\n return;\n }\n\n if (this.relationshipConfigs.length === 0) {\n this.snackBar.open('No relationship configurations to clear', 'Dismiss', { duration: 3000 });\n return;\n }\n\n try {\n // Delete all configurations from database\n const deletePromises = this.relationshipConfigs.map(config => \n this.ams.deleteItemForModel('RelationshipConfig', config.id)\n );\n\n await Promise.all(deletePromises);\n \n // Reload configurations to get the updated (empty) list\n this.loadRelationshipConfigs();\n this.snackBar.open('All relationship configurations cleared', 'Dismiss', { duration: 3000 });\n \n } catch (error) {\n console.error('ConfigurationsComponent: Error clearing relationship configs:', error);\n this.snackBar.open('Error clearing configurations: ' + error, 'Dismiss', { duration: 5000 });\n }\n }\n}","<div class=\"configurations-container\">\n <h2>System Configurations</h2>\n \n <mat-accordion multi=\"true\">\n \n <!-- Table Configs Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>table_chart</mat-icon>\n <span class=\"panel-title\">Table Configs</span>\n </mat-panel-title>\n <mat-panel-description>\n Manage table configurations and settings\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasTableConfig) {\n <div class=\"section-actions\">\n <button mat-raised-button color=\"accent\" (click)=\"populateDefaultTableConfigs()\" class=\"populate-button\">\n <mat-icon>auto_fix_high</mat-icon>\n Populate Default Table Configs\n </button>\n <button mat-raised-button color=\"warn\" (click)=\"deleteTableConfigs()\" class=\"delete-button\">\n <mat-icon>delete</mat-icon>\n Delete All Table Configs\n </button>\n </div>\n <snteam-list-view \n [modelName]=\"'TableConfig'\"\n [useRouter]=\"true\"\n [showDeleteAction]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>TableConfig Model Not Found</h3>\n <p>The TableConfig model is not available in your Amplify schema. Please add it to your data model to manage table configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- Form Views Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>dynamic_form</mat-icon>\n <span class=\"panel-title\">Form Views</span>\n </mat-panel-title>\n <mat-panel-description>\n Configure custom form layouts and field selections\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasFormView) {\n <div class=\"section-actions\">\n <button mat-raised-button color=\"warn\" (click)=\"deleteFormViews()\" class=\"delete-button\">\n <mat-icon>delete</mat-icon>\n Delete All Form Views\n </button>\n </div>\n <snteam-list-view \n [modelName]=\"'FormView'\"\n [useRouter]=\"true\"\n [showDeleteAction]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>FormView Model Not Found</h3>\n <p>The FormView model is not available in your Amplify schema. Please add it to your data model to create custom form configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- List Views Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>view_list</mat-icon>\n <span class=\"panel-title\">List Views</span>\n </mat-panel-title>\n <mat-panel-description>\n Customize list displays and column configurations\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasListView) {\n <div class=\"section-actions\">\n <button mat-raised-button color=\"accent\" (click)=\"createDefaultListViews()\" class=\"populate-button\">\n <mat-icon>auto_fix_high</mat-icon>\n Create Default ListViews\n </button>\n <button mat-raised-button color=\"warn\" (click)=\"deleteListViews()\" class=\"delete-button\">\n <mat-icon>delete</mat-icon>\n Delete All List Views\n </button>\n </div>\n <snteam-list-view \n [modelName]=\"'ListView'\"\n [useRouter]=\"true\"\n [showDeleteAction]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>ListView Model Not Found</h3>\n <p>The ListView model is not available in your Amplify schema. Please add it to your data model to create custom list view configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- Field Configs Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>settings</mat-icon>\n <span class=\"panel-title\">Field Configs</span>\n </mat-panel-title>\n <mat-panel-description>\n Configure field behavior, validation, and choices\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasFieldConfig) {\n <div class=\"section-actions\">\n <button mat-raised-button color=\"accent\" (click)=\"populateDefaultFieldConfigs()\" class=\"populate-button\">\n <mat-icon>auto_fix_high</mat-icon>\n Populate Default Field Configs\n </button>\n <button mat-raised-button color=\"warn\" (click)=\"deleteFieldConfigs()\" class=\"delete-button\">\n <mat-icon>delete</mat-icon>\n Delete All Field Configs\n </button>\n </div>\n <snteam-list-view \n [modelName]=\"'FieldConfig'\"\n [useRouter]=\"true\"\n [showDeleteAction]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>FieldConfig Model Not Found</h3>\n <p>The FieldConfig model is not available in your Amplify schema. Please add it to your data model to configure field behavior and validation.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- Relationship Configs Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>link</mat-icon>\n <span class=\"panel-title\">Relationship Configs</span>\n </mat-panel-title>\n <mat-panel-description>\n Configure GraphQL selection sets for relationship queries\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasRelationshipConfig) {\n <div class=\"section-actions\">\n <button mat-raised-button color=\"primary\" (click)=\"showAddRelationshipConfig = !showAddRelationshipConfig\" class=\"add-button\">\n <mat-icon>{{ showAddRelationshipConfig ? 'close' : 'add' }}</mat-icon>\n {{ showAddRelationshipConfig ? 'Cancel' : 'Add Relationship Config' }}\n </button>\n <button mat-raised-button color=\"accent\" (click)=\"populateDefaultRelationshipConfigs()\" class=\"populate-button\">\n <mat-icon>auto_fix_high</mat-icon>\n Populate Default Relationship Configs\n </button>\n <button mat-raised-button color=\"warn\" (click)=\"clearAllRelationshipConfigs()\" class=\"delete-button\">\n <mat-icon>delete</mat-icon>\n Clear All Configs\n </button>\n </div>\n\n <!-- Add/Edit Relationship Config Form -->\n @if (showAddRelationshipConfig) {\n <mat-card class=\"config-form-card\">\n <mat-card-header>\n <mat-card-title>\n <mat-icon>{{ editingRelationshipConfig ? 'edit' : 'add' }}</mat-icon>\n {{ editingRelationshipConfig ? 'Edit' : 'Add' }} Relationship Configuration\n </mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <form [formGroup]=\"relationshipConfigForm\" (ngSubmit)=\"saveRelationshipConfig()\">\n <div class=\"form-row\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Relationship Model</mat-label>\n <mat-select formControlName=\"relationshipModel\" (selectionChange)=\"onRelationshipModelChange($event)\">\n @for (model of availableModels; track model) {\n <mat-option [value]=\"model\">{{ model }}</mat-option>\n }\n </mat-select>\n <mat-hint>The model that contains the relationship field</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"form-row\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Field Name</mat-label>\n <mat-select formControlName=\"fieldName\">\n @for (field of availableFields; track field.name) {\n <mat-option [value]=\"field.name\">{{ field.label }}</mat-option>\n }\n </mat-select>\n <mat-hint>The relationship field in the selected model</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"form-row\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Selection Set</mat-label>\n <textarea \n matInput \n formControlName=\"selectionSet\" \n rows=\"6\"\n placeholder=\"Enter GraphQL selection fields, one per line: id table table.id table.name table.title\">\n </textarea>\n <mat-hint>GraphQL fields to select for this relationship (one per line)</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"form-row\">\n <mat-form-field appearance=\"outline\" class=\"full-width\">\n <mat-label>Description</mat-label>\n <input matInput formControlName=\"description\" placeholder=\"Optional description for this configuration\">\n <mat-hint>Optional description to document this configuration</mat-hint>\n </mat-form-field>\n </div>\n\n <div class=\"form-actions\">\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"!relationshipConfigForm.valid\">\n <mat-icon>save</mat-icon>\n {{ editingRelationshipConfig ? 'Update' : 'Save' }} Configuration\n </button>\n <button mat-button type=\"button\" (click)=\"cancelRelationshipConfigEdit()\">\n <mat-icon>cancel</mat-icon>\n Cancel\n </button>\n </div>\n </form>\n </mat-card-content>\n </mat-card>\n }\n\n <!-- Current Relationship Configurations -->\n <div class=\"current-configs\">\n <h3>Current Relationship Configurations</h3>\n @if (relationshipConfigs.length === 0) {\n <mat-card class=\"empty-state-card\">\n <mat-card-content>\n <mat-icon class=\"empty-icon\">link_off</mat-icon>\n <h4>No Relationship Configurations</h4>\n <p>Add relationship configurations to control GraphQL selection sets for relationship queries.</p>\n </mat-card-content>\n </mat-card>\n } @else {\n <div class=\"configs-list\">\n @for (config of relationshipConfigs; track config.id) {\n <mat-card class=\"config-card\">\n <mat-card-header>\n <mat-card-title>{{ config.relationshipModel }} → {{ config.fieldName }}</mat-card-title>\n <mat-card-subtitle>{{ config.description || 'No description' }}</mat-card-subtitle>\n <div class=\"card-actions\">\n <button mat-icon-button (click)=\"editRelationshipConfig(config)\" matTooltip=\"Edit Configuration\">\n <mat-icon>edit</mat-icon>\n </button>\n <button mat-icon-button color=\"warn\" (click)=\"deleteRelationshipConfig(config)\" matTooltip=\"Delete Configuration\">\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n </mat-card-header>\n <mat-card-content>\n <div class=\"selection-set\">\n <strong>Selection Set:</strong>\n <div class=\"selection-fields\">\n @for (field of config.selectionSet; track field) {\n <span class=\"field-chip\">{{ field }}</span>\n }\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n }\n </div>\n }\n </div>\n\n <!-- Configuration Status -->\n <div class=\"config-status\">\n <mat-card class=\"status-card\">\n <mat-card-content>\n <div class=\"status-info\">\n <mat-icon class=\"status-icon\">info</mat-icon>\n <div class=\"status-text\">\n <strong>Active Configurations: {{ relationshipConfigs.length }}</strong>\n <p>These configurations control how relationship data is queried from your GraphQL API.</p>\n </div>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>RelationshipConfig Model Not Found</h3>\n <p>The RelationshipConfig model is not available in your Amplify schema. Please add it to your data model to manage relationship configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n </mat-accordion>\n</div>","/*\n * Public API Surface of @snteam/amplify-angular-core\n */\n\n// Legacy exports for backward compatibility\nexport * from './lib/amplify-angular-core';\n\n// ===== MAIN COMPONENTS =====\n// Primary components for building dynamic forms and list views\nexport * from './lib/components/dynamic-form/dynamic-form.component';\nexport * from './lib/components/list-view/list-view.component';\nexport * from './lib/components/configurations/configurations.component';\n\n// ===== SUPPORTING COMPONENTS =====\n// Components used internally by main components for form rendering\nexport * from './lib/components/dynamic-form-question/dynamic-form-question.component';\nexport * from './lib/components/dynamic-form-group/dynamic-form-group.component';\nexport * from './lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component';\nexport * from './lib/components/record-relationships/record-relationships.component';\nexport * from './lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component';\nexport * from './lib/components/add-relationship-dialog/add-relationship-dialog.component';\n\n// ===== SERVICES =====\n// Core services for Amplify integration and form building\nexport * from './lib/services/amplify-model.service';\nexport * from './lib/services/amplify-form-builder.service';\nexport * from './lib/services/question-control.service';\n\n// ===== INTERFACES AND CONFIGURATION =====\n// Configuration interfaces for relationship selection sets\nexport * from './lib/interfaces/relationship-config.interface';\n// Other interfaces\nexport * from './lib/interfaces/selection-set-generator.interface';\n\n// ===== CLASSES AND TYPES =====\n// Question classes for dynamic form generation\nexport * from './lib/classes/questions';\n// Validation utilities\nexport * from './lib/classes/validators';\n\n// ===== PIPES =====\n// Utility pipes for data transformation\nexport * from './lib/pipes/val-to-title.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ErrorHandlerService","i1.ConfigurationAnalyzerService","i2.SchemaIntrospectorService","i3.ErrorHandlerService","i1.SelectionSetGeneratorService","i2.ErrorHandlerService","i2.AmplifyModelService","i3","i4","i2.AmplifyFormBuilderService","i2","i1.AmplifyModelService","i5","i6","i1.QuestionControlService","i1","i7","i8","i9"],"mappings":"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"}
|