@snteam/amplify-angular-core 1.0.25 → 1.0.27

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.
@@ -261,7 +261,7 @@ class AmplifyModelService {
261
261
  setClient(client) {
262
262
  this.client = client;
263
263
  }
264
- getMenuLinksFromModels(outputs, config) {
264
+ async getMenuLinksFromModels(outputs, config) {
265
265
  const defaultConfig = { skipModels: ['ServiceCustomer', 'ServiceProduct', 'Todo'] };
266
266
  const finalConfig = { ...defaultConfig, ...config };
267
267
  let pageButtons = [
@@ -269,11 +269,32 @@ class AmplifyModelService {
269
269
  { label: 'Configurations', route: '/configurations' }
270
270
  ];
271
271
  let models = outputs.data.model_introspection.models;
272
+ // Get TableConfig records to check hide_in_menu settings
273
+ let tableConfigs = [];
274
+ try {
275
+ if (this.client && this.client.models && this.client.models.TableConfig) {
276
+ const tableConfigsResult = await this.client.models.TableConfig.list();
277
+ if (tableConfigsResult && tableConfigsResult.data) {
278
+ tableConfigs = tableConfigsResult.data;
279
+ }
280
+ }
281
+ }
282
+ catch (error) {
283
+ console.warn('AmplifyModelService: Could not fetch TableConfig records for menu filtering:', error);
284
+ }
272
285
  Object.values(models).forEach((model) => {
273
286
  if (finalConfig.skipModels.includes(model.name))
274
287
  return;
288
+ // Check if this model should be hidden based on TableConfig
289
+ const tableConfig = tableConfigs.find((config) => config.name === model.name);
290
+ if (tableConfig && tableConfig.hide_in_menu === true) {
291
+ console.log('AmplifyModelService: Hiding model from menu:', model.name);
292
+ return; // Skip this model
293
+ }
294
+ // Use TableConfig label if available, otherwise use model name
295
+ const label = tableConfig && tableConfig.label ? tableConfig.label : model.name;
275
296
  console.log('model', model);
276
- pageButtons.push({ label: model.name, route: '/list/' + model.name });
297
+ pageButtons.push({ label: label, route: '/list/' + model.name });
277
298
  });
278
299
  console.log('models', models);
279
300
  return pageButtons;
@@ -1584,6 +1605,8 @@ class DynamicFormComponent {
1584
1605
  // Original behavior - use all model fields
1585
1606
  this.questions = this.qcs.getQuestionsForModelFields(this.mdl);
1586
1607
  console.log('DynamicFormComponent: Questions from model received:', this.questions);
1608
+ // Apply FieldConfig to all questions when not using FormView
1609
+ this.applyFieldConfigToAllQuestions();
1587
1610
  }
1588
1611
  }
1589
1612
  catch (error) {
@@ -1611,6 +1634,12 @@ class DynamicFormComponent {
1611
1634
  this.formLoaded.emit(this.form);
1612
1635
  console.log('this.item', this.item);
1613
1636
  }
1637
+ async applyFieldConfigToAllQuestions() {
1638
+ // Apply FieldConfig to all questions when not using FormView
1639
+ for (const question of this.questions || []) {
1640
+ await this.applyFieldConfigToQuestion(question, question.key);
1641
+ }
1642
+ }
1614
1643
  getQuestionsFromFormViewFields() {
1615
1644
  const questions = [];
1616
1645
  for (const formViewField of this.formViewFields) {
@@ -1629,11 +1658,133 @@ class DynamicFormComponent {
1629
1658
  }
1630
1659
  // Set required status from FormViewField
1631
1660
  question.required = formViewField.required || false;
1661
+ // Apply FieldConfig enhancements if available
1662
+ this.applyFieldConfigToQuestion(question, formViewField.field_name);
1632
1663
  questions.push(question);
1633
1664
  }
1634
1665
  }
1635
1666
  return questions;
1636
1667
  }
1668
+ async applyFieldConfigToQuestion(question, fieldName) {
1669
+ try {
1670
+ // Look for a FieldConfig record that matches this field name
1671
+ const fieldConfigs = await this.ams.listItemsForModel('FieldConfig');
1672
+ if (fieldConfigs) {
1673
+ fieldConfigs.subscribe({
1674
+ next: ({ items }) => {
1675
+ const fieldConfig = items.find((config) => config.name === fieldName);
1676
+ if (fieldConfig) {
1677
+ console.log('DynamicFormComponent: Applying FieldConfig to question:', fieldName, fieldConfig);
1678
+ // Apply default value
1679
+ if (fieldConfig.default_value && !question.value) {
1680
+ question.value = fieldConfig.default_value;
1681
+ }
1682
+ // Apply validation rules (if it's a JSON string of validation rules)
1683
+ if (fieldConfig.validation_rules) {
1684
+ try {
1685
+ const validationRules = JSON.parse(fieldConfig.validation_rules);
1686
+ // Apply validation rules based on the structure
1687
+ // This could be extended to support various validation patterns
1688
+ console.log('DynamicFormComponent: Validation rules found:', validationRules);
1689
+ }
1690
+ catch (e) {
1691
+ console.warn('DynamicFormComponent: Invalid validation rules JSON:', fieldConfig.validation_rules);
1692
+ }
1693
+ }
1694
+ // Apply choices for dropdown/select fields
1695
+ if (question.controlType === 'dropdown' && fieldConfig.choices) {
1696
+ this.loadFieldConfigChoices(question, fieldConfig);
1697
+ }
1698
+ // Execute populate script for dynamic choices
1699
+ if (fieldConfig.populate_script && question.controlType === 'dropdown') {
1700
+ this.executePopulateScript(question, fieldConfig.populate_script);
1701
+ }
1702
+ }
1703
+ }
1704
+ });
1705
+ }
1706
+ }
1707
+ catch (error) {
1708
+ console.error('DynamicFormComponent: Error applying FieldConfig:', error);
1709
+ }
1710
+ }
1711
+ async loadFieldConfigChoices(question, fieldConfig) {
1712
+ try {
1713
+ // Get FieldChoice records for this FieldConfig
1714
+ const fieldChoices = await this.ams.listItemsForModel('FieldChoice');
1715
+ if (fieldChoices) {
1716
+ fieldChoices.subscribe({
1717
+ next: ({ items }) => {
1718
+ const choices = items
1719
+ .filter((choice) => choice.fieldConfigId === fieldConfig.id)
1720
+ .sort((a, b) => (a.order || 0) - (b.order || 0))
1721
+ .map((choice) => ({
1722
+ key: choice.value,
1723
+ value: choice.label
1724
+ }));
1725
+ if (choices.length > 0) {
1726
+ console.log('DynamicFormComponent: Loaded choices for field:', fieldConfig.name, choices);
1727
+ question.options = choices;
1728
+ }
1729
+ }
1730
+ });
1731
+ }
1732
+ }
1733
+ catch (error) {
1734
+ console.error('DynamicFormComponent: Error loading FieldConfig choices:', error);
1735
+ }
1736
+ }
1737
+ executePopulateScript(question, script) {
1738
+ try {
1739
+ console.log('DynamicFormComponent: Executing populate script for field:', question.key);
1740
+ // Create a safe execution context
1741
+ const context = {
1742
+ question: question,
1743
+ form: this.form,
1744
+ item: this.item,
1745
+ model: this.mdl,
1746
+ // Add other context variables as needed
1747
+ console: console,
1748
+ fetch: fetch // Allow fetch for API calls
1749
+ };
1750
+ // Create a function from the script
1751
+ const scriptFunction = new Function(...Object.keys(context), `
1752
+ try {
1753
+ ${script}
1754
+ } catch (error) {
1755
+ console.error('Script execution error:', error);
1756
+ return [];
1757
+ }
1758
+ `);
1759
+ // Execute the script with the context
1760
+ const result = scriptFunction(...Object.values(context));
1761
+ // Handle the result
1762
+ if (Array.isArray(result)) {
1763
+ question.options = result.map((item) => ({
1764
+ key: item.value || item.key || item,
1765
+ value: item.label || item.value || item
1766
+ }));
1767
+ console.log('DynamicFormComponent: Script populated choices:', question.options);
1768
+ }
1769
+ else if (result && typeof result.then === 'function') {
1770
+ // Handle promises
1771
+ result.then((asyncResult) => {
1772
+ if (Array.isArray(asyncResult)) {
1773
+ question.options = asyncResult.map((item) => ({
1774
+ key: item.value || item.key || item,
1775
+ value: item.label || item.value || item
1776
+ }));
1777
+ console.log('DynamicFormComponent: Async script populated choices:', question.options);
1778
+ }
1779
+ }).catch((error) => {
1780
+ console.error('DynamicFormComponent: Async script execution error:', error);
1781
+ });
1782
+ }
1783
+ }
1784
+ catch (error) {
1785
+ console.error('DynamicFormComponent: Script execution error:', error);
1786
+ }
1787
+ }
1637
1788
  setQuestionValueFromItem(question, item) {
1638
1789
  if (!item)
1639
1790
  item = this.item;
@@ -1 +1 @@
1
- {"version":3,"file":"snteam-amplify-angular-core.mjs","sources":["../../../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":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'snteam-amplify-angular-core',\n imports: [],\n template: `\n <p>\n amplify-angular-core works!\n </p>\n `,\n styles: ``,\n})\nexport class AmplifyAngularCore {\n\n}\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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmplifyModelService {\n\n private client: any;\n\n constructor() { \n // Client will be initialized when Amplify is configured by the consuming application\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 getMenuLinksFromModels(outputs: any, config?: { skipModels?: string[] }): 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 Object.values(models).forEach((model: any) => {\n if (finalConfig.skipModels!.includes(model.name)) return;\n console.log('model', model);\n pageButtons.push({ label: model.name, 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 getAmplifySelectionSet(config: any, baseId: string): any {\n switch (config.fieldName) {\n case 'service':\n return ['id', 'service.title', 'service.price', 'service.id'] as const;\n case 'customer':\n return ['id', 'customer.*'] as const;\n default: \n return [];\n }\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 * @param config {object} - see dynamic-relationship-builder.component getDetailsForManyToMany() for example of building config\n */\n getRelatedItems(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 let selectionSet = this.getAmplifySelectionSet(config, baseId);\n const modelName = config.relationshipModelName;\n\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ \n filter: filter, \n selectionSet: [...selectionSet] \n });\n } else {\n console.error(`Relationship model ${modelName} not found in client`);\n return null;\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 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';\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\n constructor(private ams: AmplifyModelService) { }\n\n modelItem!: any;// = signal('');\n readonly dialog = inject(MatDialog);\n\n ngOnInit() {\n console.log('DynamicRelationshipBuilderComponent model', this.m2m);\n this.listItems();\n this.setCreateSubscription();\n }\n\n async perhapsAddM2MItem (item: any){\n let m2mItem:any = {id: item.id};\n const { data: retItem } = await item[this.m2m.fieldName]();\n m2mItem[this.m2m.fieldName] = retItem;\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('would delete existing', this.m2mItems[existingInd]);\n this.m2mItems.splice(existingInd, 1);\n }\n }\n this.m2mItems.push(m2mItem);\n //console.log('perhapsAddM2MItem', item, 'm2m', this.m2m);\n }\n\n setCreateSubscription() {\n this.ams.setRelatedSub(this.m2m, this.item.id)?.subscribe({\n next: (data) => this.perhapsAddM2MItem(data),//(console.log('setRelatedSub m2mItems', this.m2mItems, 'data', data),\n error: (error) => console.warn(error),\n });\n }\n\n listItems() {\n this.ams.getRelatedItems(this.m2m, this.item.id)?.subscribe({\n next: ({ items, isSynced }) => {\n this.m2mItems = items;\n },\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 console.log('deleteRelatedItem for item', item, 'm2m', this.m2m);\n //this.ams.deleteRelationship(this.m2m.relationshipModelName, item.id);\n await this.ams.deleteRelationship(this.m2m.relationshipModelName, item.id);\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(), selectedItems: this.m2mItems },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) this.handleDialogResult(result, rel);\n });\n }\n\n handleDialogResult(result: any, rel: any) {\n if (!result) return;\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.item.id;\n\n this.ams.createRelationship(rel.relationshipModelName, newRelObj);\n }\n}","<div class=\"record-relationship-holder\">\n <div class=\"relationship-type\">\n <mat-toolbar>\n <span>{{m2m.partnerModelName}} Management</span>\n <span class=\"rel-title-spacer\"></span>\n <button mat-icon-button attr.aria-label=\"Add {{m2m.name}}\" (click)=\"openDialog(m2m)\">\n <mat-icon>add</mat-icon>\n </button>\n </mat-toolbar>\n @if(m2mItems && m2mItems.length > 0){\n <mat-list>\n @for (item of m2mItems; track item?.id) {\n @if(item[m2m.fieldName]){\n <mat-list-item>\n <span matListItemTitle>{{item[m2m.fieldName].name || item[m2m.fieldName].title}}</span>\n <button mat-icon-button (click)=\"deleteRelatedItem(item)\" matListItemMeta>\n <mat-icon>delete</mat-icon>\n </button>\n </mat-list-item>\n }\n }\n </mat-list>\n }\n @else {\n Add your first {{m2m.partnerModelName}}\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 } 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 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 questions.push(question);\n }\n }\n \n return questions;\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 { ActivatedRoute, Router } from '@angular/router';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\n@Component({\n selector: 'snteam-list-view',\n standalone: true,\n imports: [CommonModule, MatListModule, MatButtonModule, MatIconModule],\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 \n @Input() modelName: string = '';\n @Input() customItemTemplate?: TemplateRef<any>;\n @Input() hideNewButton: boolean = false;\n @Input() title?: string;\n @Input() useRouter: boolean = true;\n \n @Output() itemClick = new EventEmitter<any>();\n @Output() newClick = new EventEmitter<void>();\n @Output() itemsLoaded = 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) {\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 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)\" class=\"clickable-item\">\n @if (customItemTemplate) {\n <ng-container [ngTemplateOutlet]=\"customItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n } @else {\n <span matListItemTitle>{{ getDisplayText(item) }}</span>\n <span matListItemLine>{{ item.description || item.createdAt | date }}</span>\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 { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { ListViewComponent } from '../list-view/list-view.component';\nimport { QuestionControlService } from '../../services/question-control.service';\n\n@Component({\n selector: 'snteam-configurations',\n standalone: true,\n imports: [\n CommonModule,\n MatExpansionModule,\n MatIconModule,\n MatCardModule,\n MatButtonModule,\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\n // Track which models exist in the schema\n hasTableConfig = false;\n hasFormView = false;\n hasListView = false;\n\n ngOnInit() {\n this.checkAvailableModels();\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\n console.log('ConfigurationsComponent: Model availability:', {\n TableConfig: this.hasTableConfig,\n FormView: this.hasFormView,\n ListView: this.hasListView\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 <snteam-list-view \n [modelName]=\"'TableConfig'\"\n [useRouter]=\"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 <snteam-list-view \n [modelName]=\"'FormView'\"\n [useRouter]=\"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 <snteam-list-view \n [modelName]=\"'ListView'\"\n [useRouter]=\"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 </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// ===== 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":["i2.AmplifyModelService","i3","i4","i2.AmplifyFormBuilderService","i2","i1.AmplifyModelService","i5","i1.QuestionControlService","i6","i1"],"mappings":"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"}
1
+ {"version":3,"file":"snteam-amplify-angular-core.mjs","sources":["../../../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":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'snteam-amplify-angular-core',\n imports: [],\n template: `\n <p>\n amplify-angular-core works!\n </p>\n `,\n styles: ``,\n})\nexport class AmplifyAngularCore {\n\n}\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';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmplifyModelService {\n\n private client: any;\n\n constructor() { \n // Client will be initialized when Amplify is configured by the consuming application\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 getAmplifySelectionSet(config: any, baseId: string): any {\n switch (config.fieldName) {\n case 'service':\n return ['id', 'service.title', 'service.price', 'service.id'] as const;\n case 'customer':\n return ['id', 'customer.*'] as const;\n default: \n return [];\n }\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 * @param config {object} - see dynamic-relationship-builder.component getDetailsForManyToMany() for example of building config\n */\n getRelatedItems(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 let selectionSet = this.getAmplifySelectionSet(config, baseId);\n const modelName = config.relationshipModelName;\n\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ \n filter: filter, \n selectionSet: [...selectionSet] \n });\n } else {\n console.error(`Relationship model ${modelName} not found in client`);\n return null;\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 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';\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\n constructor(private ams: AmplifyModelService) { }\n\n modelItem!: any;// = signal('');\n readonly dialog = inject(MatDialog);\n\n ngOnInit() {\n console.log('DynamicRelationshipBuilderComponent model', this.m2m);\n this.listItems();\n this.setCreateSubscription();\n }\n\n async perhapsAddM2MItem (item: any){\n let m2mItem:any = {id: item.id};\n const { data: retItem } = await item[this.m2m.fieldName]();\n m2mItem[this.m2m.fieldName] = retItem;\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('would delete existing', this.m2mItems[existingInd]);\n this.m2mItems.splice(existingInd, 1);\n }\n }\n this.m2mItems.push(m2mItem);\n //console.log('perhapsAddM2MItem', item, 'm2m', this.m2m);\n }\n\n setCreateSubscription() {\n this.ams.setRelatedSub(this.m2m, this.item.id)?.subscribe({\n next: (data) => this.perhapsAddM2MItem(data),//(console.log('setRelatedSub m2mItems', this.m2mItems, 'data', data),\n error: (error) => console.warn(error),\n });\n }\n\n listItems() {\n this.ams.getRelatedItems(this.m2m, this.item.id)?.subscribe({\n next: ({ items, isSynced }) => {\n this.m2mItems = items;\n },\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 console.log('deleteRelatedItem for item', item, 'm2m', this.m2m);\n //this.ams.deleteRelationship(this.m2m.relationshipModelName, item.id);\n await this.ams.deleteRelationship(this.m2m.relationshipModelName, item.id);\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(), selectedItems: this.m2mItems },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) this.handleDialogResult(result, rel);\n });\n }\n\n handleDialogResult(result: any, rel: any) {\n if (!result) return;\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.item.id;\n\n this.ams.createRelationship(rel.relationshipModelName, newRelObj);\n }\n}","<div class=\"record-relationship-holder\">\n <div class=\"relationship-type\">\n <mat-toolbar>\n <span>{{m2m.partnerModelName}} Management</span>\n <span class=\"rel-title-spacer\"></span>\n <button mat-icon-button attr.aria-label=\"Add {{m2m.name}}\" (click)=\"openDialog(m2m)\">\n <mat-icon>add</mat-icon>\n </button>\n </mat-toolbar>\n @if(m2mItems && m2mItems.length > 0){\n <mat-list>\n @for (item of m2mItems; track item?.id) {\n @if(item[m2m.fieldName]){\n <mat-list-item>\n <span matListItemTitle>{{item[m2m.fieldName].name || item[m2m.fieldName].title}}</span>\n <button mat-icon-button (click)=\"deleteRelatedItem(item)\" matListItemMeta>\n <mat-icon>delete</mat-icon>\n </button>\n </mat-list-item>\n }\n }\n </mat-list>\n }\n @else {\n Add your first {{m2m.partnerModelName}}\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 { ActivatedRoute, Router } from '@angular/router';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\n@Component({\n selector: 'snteam-list-view',\n standalone: true,\n imports: [CommonModule, MatListModule, MatButtonModule, MatIconModule],\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 \n @Input() modelName: string = '';\n @Input() customItemTemplate?: TemplateRef<any>;\n @Input() hideNewButton: boolean = false;\n @Input() title?: string;\n @Input() useRouter: boolean = true;\n \n @Output() itemClick = new EventEmitter<any>();\n @Output() newClick = new EventEmitter<void>();\n @Output() itemsLoaded = 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) {\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 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)\" class=\"clickable-item\">\n @if (customItemTemplate) {\n <ng-container [ngTemplateOutlet]=\"customItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n } @else {\n <span matListItemTitle>{{ getDisplayText(item) }}</span>\n <span matListItemLine>{{ item.description || item.createdAt | date }}</span>\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 { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { ListViewComponent } from '../list-view/list-view.component';\nimport { QuestionControlService } from '../../services/question-control.service';\n\n@Component({\n selector: 'snteam-configurations',\n standalone: true,\n imports: [\n CommonModule,\n MatExpansionModule,\n MatIconModule,\n MatCardModule,\n MatButtonModule,\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\n // Track which models exist in the schema\n hasTableConfig = false;\n hasFormView = false;\n hasListView = false;\n\n ngOnInit() {\n this.checkAvailableModels();\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\n console.log('ConfigurationsComponent: Model availability:', {\n TableConfig: this.hasTableConfig,\n FormView: this.hasFormView,\n ListView: this.hasListView\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 <snteam-list-view \n [modelName]=\"'TableConfig'\"\n [useRouter]=\"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 <snteam-list-view \n [modelName]=\"'FormView'\"\n [useRouter]=\"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 <snteam-list-view \n [modelName]=\"'ListView'\"\n [useRouter]=\"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 </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// ===== 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":["i2.AmplifyModelService","i3","i4","i2.AmplifyFormBuilderService","i2","i1.AmplifyModelService","i5","i1.QuestionControlService","i6","i1"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -111,7 +111,7 @@ declare class AmplifyModelService {
111
111
  setClient(client: any): void;
112
112
  getMenuLinksFromModels(outputs: any, config?: {
113
113
  skipModels?: string[];
114
- }): any[];
114
+ }): Promise<any[]>;
115
115
  /**
116
116
  * TODO: Make this generate dynamically using refModel Names and types
117
117
  * TODO: Bring the refModel generation in here.
@@ -239,7 +239,11 @@ declare class DynamicFormComponent implements OnInit {
239
239
  loadFormView(): Promise<void>;
240
240
  getItem(): Promise<void>;
241
241
  setQuestionsAndForm(): void;
242
+ applyFieldConfigToAllQuestions(): Promise<void>;
242
243
  getQuestionsFromFormViewFields(): QuestionBase<any>[];
244
+ applyFieldConfigToQuestion(question: QuestionBase<any>, fieldName: string): Promise<void>;
245
+ loadFieldConfigChoices(question: any, fieldConfig: any): Promise<void>;
246
+ executePopulateScript(question: any, script: string): void;
243
247
  setQuestionValueFromItem(question: any, item?: any): void;
244
248
  setQuestionValueFromValueMap(question: any, valueMap: any): void;
245
249
  getValueForKey(obj: any, key: string): any | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snteam/amplify-angular-core",
3
- "version": "1.0.25",
3
+ "version": "1.0.27",
4
4
  "description": "Angular 20 components for building dynamic forms and list views with AWS Amplify Data",
5
5
  "keywords": [
6
6
  "angular",