@snteam/amplify-angular-core 1.0.3 → 1.0.4

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.
@@ -25,7 +25,7 @@ import * as i5$1 from '@angular/material/list';
25
25
  import { MatListModule } from '@angular/material/list';
26
26
  import { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose, MatDialog } from '@angular/material/dialog';
27
27
  import { MatSnackBar, MatSnackBarModule } from '@angular/material/snack-bar';
28
- import { ActivatedRoute } from '@angular/router';
28
+ import { ActivatedRoute, Router } from '@angular/router';
29
29
 
30
30
  class AmplifyAngularCore {
31
31
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AmplifyAngularCore, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -1674,10 +1674,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1674
1674
  class ListViewComponent {
1675
1675
  ams = inject(AmplifyModelService);
1676
1676
  route = inject(ActivatedRoute);
1677
+ router = inject(Router);
1677
1678
  modelName = '';
1678
1679
  customItemTemplate;
1679
1680
  hideNewButton = false;
1680
1681
  title;
1682
+ useRouter = true;
1681
1683
  itemClick = new EventEmitter();
1682
1684
  newClick = new EventEmitter();
1683
1685
  itemsLoaded = new EventEmitter();
@@ -1727,7 +1729,12 @@ class ListViewComponent {
1727
1729
  }
1728
1730
  onNewClick() {
1729
1731
  console.log('ListViewComponent newClick');
1730
- this.newClick.emit();
1732
+ if (this.useRouter) {
1733
+ this.router.navigate(['/form/' + this.modelName + '/-1']);
1734
+ }
1735
+ else {
1736
+ this.newClick.emit();
1737
+ }
1731
1738
  }
1732
1739
  getDisplayText(item) {
1733
1740
  // Try common display fields
@@ -1737,7 +1744,7 @@ class ListViewComponent {
1737
1744
  this.listItems();
1738
1745
  }
1739
1746
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ListViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1740
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ListViewComponent, isStandalone: true, selector: "snteam-list-view", inputs: { modelName: "modelName", customItemTemplate: "customItemTemplate", hideNewButton: "hideNewButton", title: "title" }, outputs: { itemClick: "itemClick", newClick: "newClick", itemsLoaded: "itemsLoaded" }, ngImport: i0, template: "<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>", styles: [".list-view-container{padding:20px;width:100%}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.header h2{margin:0;color:#333}.loading,.error,.empty-state{padding:40px 20px;text-align:center;color:#666}.error{color:#d32f2f}.empty-state p{margin-bottom:20px;font-size:16px}.items-list{border:1px solid #e0e0e0;border-radius:4px}.clickable-item{cursor:pointer;transition:background-color .2s}.clickable-item:hover{background-color:#f5f5f5}.clickable-item:not(:last-child){border-bottom:1px solid #e0e0e0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i5$1.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i5$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i5$1.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i5$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i3$1.DatePipe, name: "date" }] });
1747
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: ListViewComponent, isStandalone: true, selector: "snteam-list-view", inputs: { modelName: "modelName", customItemTemplate: "customItemTemplate", hideNewButton: "hideNewButton", title: "title", useRouter: "useRouter" }, outputs: { itemClick: "itemClick", newClick: "newClick", itemsLoaded: "itemsLoaded" }, ngImport: i0, template: "<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>", styles: [".list-view-container{padding:20px;width:100%}.header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.header h2{margin:0;color:#333}.loading,.error,.empty-state{padding:40px 20px;text-align:center;color:#666}.error{color:#d32f2f}.empty-state p{margin-bottom:20px;font-size:16px}.items-list{border:1px solid #e0e0e0;border-radius:4px}.clickable-item{cursor:pointer;transition:background-color .2s}.clickable-item:hover{background-color:#f5f5f5}.clickable-item:not(:last-child){border-bottom:1px solid #e0e0e0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i5$1.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i5$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i5$1.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i5$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i3$1.DatePipe, name: "date" }] });
1741
1748
  }
1742
1749
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ListViewComponent, decorators: [{
1743
1750
  type: Component,
@@ -1750,6 +1757,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
1750
1757
  type: Input
1751
1758
  }], title: [{
1752
1759
  type: Input
1760
+ }], useRouter: [{
1761
+ type: Input
1753
1762
  }], itemClick: [{
1754
1763
  type: Output
1755
1764
  }], newClick: [{
@@ -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/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[] = [{ label: 'Home', route: '/' }];\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 if (this.client.models[model]) {\n return this.client.models[model].get({ id: id });\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('DynamicRelationshipBuilderComponent model', this.model, 'id', this.id, 'item', this.item);\n //this.setModelItem();\n\n if (!this.amplifyOutputs) {\n console.warn('RecordRelationshipsComponent: amplifyOutputs not provided. Component may not function correctly.');\n return;\n }\n\n console.log('DynamicRelationshipBuilderComponent outputs.data.model_introspection.models', this.amplifyOutputs.data.model_introspection.models);\n var fields = this.amplifyOutputs.data.model_introspection.models[this.model as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n var values = Object.values(fields);\n\n for (var v in values) {\n var fieldObj: any = values[v];\n if (typeof fieldObj.type != 'object') continue;\n if (!fieldObj.type.model) continue;\n\n let m2mDetails = this.getDetailsForManyToMany(fieldObj, this.model);\n\n if (m2mDetails) {\n this.m2mDetailArrays.push(m2mDetails);\n }\n\n console.log('DynamicRelationshipBuilderComponent ref field', fieldObj);\n console.log('DynamicRelationshipBuilderComponent m2mDetails', m2mDetails);\n }\n console.log('DynamicRelationshipBuilderComponent 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.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 let relationshipModelName = fieldObj.type.model;\n let associatedWith = fieldObj.association.associatedWith[0]; //TODO this may not work for more complex Schemas!!!\n\n console.log('getDetailsForManyToMany relationshipModelName', relationshipModelName, 'baseModelName', baseModelName);\n this.getFieldNameForAssociatedWithModel(relationshipModelName, associatedWith);\n\n // TODO: MAKE THIS AUTO REFRESH... maybe make this a signal?\n let ret: any = {\n relationshipModelName: relationshipModelName,\n baseModelName: baseModelName,\n fieldName: this.getFieldNameForAssociatedWithModel(relationshipModelName, associatedWith),\n associatedWith: associatedWith\n }\n var relationshipModel = this.amplifyOutputs.data.model_introspection.models[relationshipModelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n\n var vals = Object.values(relationshipModel);\n for (var i in vals) {\n const val: any = vals[i];\n if (typeof val.type != 'object') continue;\n if (!val.type.model) continue;\n if (val.type.model == baseModelName) continue;\n\n console.log('vals[i]', vals[i]);\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\n ret.partnerModelName = modelName;\n //this.ams.getRelatedItems(ret, this.item.id);\n }\n console.log('getDetailsForManyToMany ret', 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 this.outputs = 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 console.log('outputs.data.model_introspection', this.outputs.data.model_introspection);\n \n const fields = this.outputs.data.model_introspection.models[model as keyof typeof this.outputs.data.model_introspection.models].fields;\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 {\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 \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\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 ) { }\n\n ngOnInit() {\n this.materialInputs = this.afb.getMaterialInputs();\n this.switchInputs = this.afb.getSwitchInputs();\n this.refInputs = this.afb.getRefInputs();\n \n // Use inputs instead of route params\n this.mdl = this.model;\n this.id = this.itemId;\n\n if (this.id == '-1' || !this.id) {\n this.setQuestionsAndForm();\n } else {\n this.getItem();\n }\n }\n\n setFormBuilderForm() {\n this.form = this.afb.buildFormForModel(this.mdl);\n }\n\n async getItem() {\n const { data: item } = await this.ams.getItemForModel(this.mdl, this.id);\n this.item = item;\n this.itemOutput.emit(this.item);\n this.setQuestionsAndForm();\n }\n\n setQuestionsAndForm() {\n if (!this.questions || this.questions.length == 0) {\n this.questions = this.qcs.getQuestionsForModelFields(this.mdl);\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 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 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 const { data: item } = await this.ams.updateItemForModel(this.mdl, this.payLoad);\n this.item = item;\n this.itemOutput.emit(this.item);\n this.setQuestionsAndForm();\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 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\"></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 } 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 \n @Input() modelName: string = '';\n @Input() customItemTemplate?: TemplateRef<any>;\n @Input() hideNewButton: boolean = false;\n @Input() title?: string;\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\n onNewClick() {\n console.log('ListViewComponent newClick');\n this.newClick.emit();\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>","/*\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';\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","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/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[] = [{ label: 'Home', route: '/' }];\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 if (this.client.models[model]) {\n return this.client.models[model].get({ id: id });\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('DynamicRelationshipBuilderComponent model', this.model, 'id', this.id, 'item', this.item);\n //this.setModelItem();\n\n if (!this.amplifyOutputs) {\n console.warn('RecordRelationshipsComponent: amplifyOutputs not provided. Component may not function correctly.');\n return;\n }\n\n console.log('DynamicRelationshipBuilderComponent outputs.data.model_introspection.models', this.amplifyOutputs.data.model_introspection.models);\n var fields = this.amplifyOutputs.data.model_introspection.models[this.model as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n var values = Object.values(fields);\n\n for (var v in values) {\n var fieldObj: any = values[v];\n if (typeof fieldObj.type != 'object') continue;\n if (!fieldObj.type.model) continue;\n\n let m2mDetails = this.getDetailsForManyToMany(fieldObj, this.model);\n\n if (m2mDetails) {\n this.m2mDetailArrays.push(m2mDetails);\n }\n\n console.log('DynamicRelationshipBuilderComponent ref field', fieldObj);\n console.log('DynamicRelationshipBuilderComponent m2mDetails', m2mDetails);\n }\n console.log('DynamicRelationshipBuilderComponent 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.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 let relationshipModelName = fieldObj.type.model;\n let associatedWith = fieldObj.association.associatedWith[0]; //TODO this may not work for more complex Schemas!!!\n\n console.log('getDetailsForManyToMany relationshipModelName', relationshipModelName, 'baseModelName', baseModelName);\n this.getFieldNameForAssociatedWithModel(relationshipModelName, associatedWith);\n\n // TODO: MAKE THIS AUTO REFRESH... maybe make this a signal?\n let ret: any = {\n relationshipModelName: relationshipModelName,\n baseModelName: baseModelName,\n fieldName: this.getFieldNameForAssociatedWithModel(relationshipModelName, associatedWith),\n associatedWith: associatedWith\n }\n var relationshipModel = this.amplifyOutputs.data.model_introspection.models[relationshipModelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n\n var vals = Object.values(relationshipModel);\n for (var i in vals) {\n const val: any = vals[i];\n if (typeof val.type != 'object') continue;\n if (!val.type.model) continue;\n if (val.type.model == baseModelName) continue;\n\n console.log('vals[i]', vals[i]);\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\n ret.partnerModelName = modelName;\n //this.ams.getRelatedItems(ret, this.item.id);\n }\n console.log('getDetailsForManyToMany ret', 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 this.outputs = 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 console.log('outputs.data.model_introspection', this.outputs.data.model_introspection);\n \n const fields = this.outputs.data.model_introspection.models[model as keyof typeof this.outputs.data.model_introspection.models].fields;\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 {\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 \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\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 ) { }\n\n ngOnInit() {\n this.materialInputs = this.afb.getMaterialInputs();\n this.switchInputs = this.afb.getSwitchInputs();\n this.refInputs = this.afb.getRefInputs();\n \n // Use inputs instead of route params\n this.mdl = this.model;\n this.id = this.itemId;\n\n if (this.id == '-1' || !this.id) {\n this.setQuestionsAndForm();\n } else {\n this.getItem();\n }\n }\n\n setFormBuilderForm() {\n this.form = this.afb.buildFormForModel(this.mdl);\n }\n\n async getItem() {\n const { data: item } = await this.ams.getItemForModel(this.mdl, this.id);\n this.item = item;\n this.itemOutput.emit(this.item);\n this.setQuestionsAndForm();\n }\n\n setQuestionsAndForm() {\n if (!this.questions || this.questions.length == 0) {\n this.questions = this.qcs.getQuestionsForModelFields(this.mdl);\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 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 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 const { data: item } = await this.ams.updateItemForModel(this.mdl, this.payLoad);\n this.item = item;\n this.itemOutput.emit(this.item);\n this.setQuestionsAndForm();\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 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\"></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\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>","/*\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';\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","i1"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -253,10 +253,12 @@ declare class DynamicFormComponent implements OnInit {
253
253
  declare class ListViewComponent implements OnInit {
254
254
  private ams;
255
255
  private route;
256
+ private router;
256
257
  modelName: string;
257
258
  customItemTemplate?: TemplateRef<any>;
258
259
  hideNewButton: boolean;
259
260
  title?: string;
261
+ useRouter: boolean;
260
262
  itemClick: EventEmitter<any>;
261
263
  newClick: EventEmitter<void>;
262
264
  itemsLoaded: EventEmitter<any[]>;
@@ -270,7 +272,7 @@ declare class ListViewComponent implements OnInit {
270
272
  getDisplayText(item: any): string;
271
273
  refresh(): void;
272
274
  static ɵfac: i0.ɵɵFactoryDeclaration<ListViewComponent, never>;
273
- static ɵcmp: i0.ɵɵComponentDeclaration<ListViewComponent, "snteam-list-view", never, { "modelName": { "alias": "modelName"; "required": false; }; "customItemTemplate": { "alias": "customItemTemplate"; "required": false; }; "hideNewButton": { "alias": "hideNewButton"; "required": false; }; "title": { "alias": "title"; "required": false; }; }, { "itemClick": "itemClick"; "newClick": "newClick"; "itemsLoaded": "itemsLoaded"; }, never, never, true, never>;
275
+ static ɵcmp: i0.ɵɵComponentDeclaration<ListViewComponent, "snteam-list-view", never, { "modelName": { "alias": "modelName"; "required": false; }; "customItemTemplate": { "alias": "customItemTemplate"; "required": false; }; "hideNewButton": { "alias": "hideNewButton"; "required": false; }; "title": { "alias": "title"; "required": false; }; "useRouter": { "alias": "useRouter"; "required": false; }; }, { "itemClick": "itemClick"; "newClick": "newClick"; "itemsLoaded": "itemsLoaded"; }, never, never, true, never>;
274
276
  }
275
277
 
276
278
  declare class DynamicFormQuestionComponent implements OnInit {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snteam/amplify-angular-core",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Angular 20 components for building dynamic forms and list views with AWS Amplify Data",
5
5
  "keywords": [
6
6
  "angular",