@snteam/amplify-angular-core 1.0.23 → 1.0.25
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.
|
@@ -865,29 +865,52 @@ class RecordRelationshipsComponent {
|
|
|
865
865
|
modelItem; // = signal('');
|
|
866
866
|
dialog = inject(MatDialog);
|
|
867
867
|
ngOnInit() {
|
|
868
|
-
console.log('
|
|
869
|
-
//this.setModelItem();
|
|
868
|
+
console.log('RecordRelationshipsComponent: Starting ngOnInit for model:', this.model, 'id:', this.id, 'item:', this.item);
|
|
870
869
|
if (!this.amplifyOutputs) {
|
|
871
870
|
console.warn('RecordRelationshipsComponent: amplifyOutputs not provided. Component may not function correctly.');
|
|
872
871
|
return;
|
|
873
872
|
}
|
|
874
|
-
console.log('
|
|
875
|
-
|
|
873
|
+
console.log('RecordRelationshipsComponent: Processing model introspection for model:', this.model);
|
|
874
|
+
console.log('RecordRelationshipsComponent: Available models:', Object.keys(this.amplifyOutputs.data.model_introspection.models));
|
|
875
|
+
const modelData = this.amplifyOutputs.data.model_introspection.models[this.model];
|
|
876
|
+
if (!modelData) {
|
|
877
|
+
console.error('RecordRelationshipsComponent: Model not found:', this.model);
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
console.log('RecordRelationshipsComponent: Model data found:', modelData);
|
|
881
|
+
var fields = modelData.fields;
|
|
876
882
|
var values = Object.values(fields);
|
|
883
|
+
console.log('RecordRelationshipsComponent: Processing', values.length, 'fields');
|
|
877
884
|
for (var v in values) {
|
|
878
885
|
var fieldObj = values[v];
|
|
879
|
-
|
|
886
|
+
console.log('RecordRelationshipsComponent: Processing field:', fieldObj.name, 'type:', fieldObj.type);
|
|
887
|
+
if (typeof fieldObj.type != 'object') {
|
|
888
|
+
console.log('RecordRelationshipsComponent: Skipping non-object field:', fieldObj.name);
|
|
880
889
|
continue;
|
|
881
|
-
|
|
890
|
+
}
|
|
891
|
+
if (!fieldObj.type.model) {
|
|
892
|
+
console.log('RecordRelationshipsComponent: Skipping non-model field:', fieldObj.name);
|
|
882
893
|
continue;
|
|
883
|
-
let m2mDetails = this.getDetailsForManyToMany(fieldObj, this.model);
|
|
884
|
-
if (m2mDetails) {
|
|
885
|
-
this.m2mDetailArrays.push(m2mDetails);
|
|
886
894
|
}
|
|
887
|
-
|
|
888
|
-
|
|
895
|
+
// Skip BELONGS_TO relationships - only process HAS_MANY relationships
|
|
896
|
+
if (fieldObj.association && fieldObj.association.connectionType === 'BELONGS_TO') {
|
|
897
|
+
console.log('RecordRelationshipsComponent: Skipping BELONGS_TO relationship field:', fieldObj.name);
|
|
898
|
+
continue;
|
|
899
|
+
}
|
|
900
|
+
console.log('RecordRelationshipsComponent: Found relationship field:', fieldObj.name, 'to model:', fieldObj.type.model);
|
|
901
|
+
try {
|
|
902
|
+
let m2mDetails = this.getDetailsForManyToMany(fieldObj, this.model);
|
|
903
|
+
console.log('RecordRelationshipsComponent: m2mDetails result:', m2mDetails);
|
|
904
|
+
if (m2mDetails) {
|
|
905
|
+
this.m2mDetailArrays.push(m2mDetails);
|
|
906
|
+
console.log('RecordRelationshipsComponent: Added to m2mDetailArrays, total count:', this.m2mDetailArrays.length);
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
catch (error) {
|
|
910
|
+
console.error('RecordRelationshipsComponent: Error processing field:', fieldObj.name, 'Error:', error);
|
|
911
|
+
}
|
|
889
912
|
}
|
|
890
|
-
console.log('
|
|
913
|
+
console.log('RecordRelationshipsComponent: Final m2mDetailArrays:', this.m2mDetailArrays);
|
|
891
914
|
}
|
|
892
915
|
/**
|
|
893
916
|
Customize this function to include all desired models from your file
|
|
@@ -910,7 +933,7 @@ class RecordRelationshipsComponent {
|
|
|
910
933
|
continue;
|
|
911
934
|
if (!fieldAny.association.targetNames || !Array.isArray(fieldAny.association.targetNames))
|
|
912
935
|
continue;
|
|
913
|
-
if (fieldAny.association.targetNames.indexOf(associatedWith)
|
|
936
|
+
if (fieldAny.association.targetNames.indexOf(associatedWith) === -1)
|
|
914
937
|
continue;
|
|
915
938
|
// there should only be two fields with associations.
|
|
916
939
|
// if we get here we are in the field we want
|
|
@@ -920,39 +943,55 @@ class RecordRelationshipsComponent {
|
|
|
920
943
|
getDetailsForManyToMany(fieldObj, baseModelName) {
|
|
921
944
|
if (!this.amplifyOutputs)
|
|
922
945
|
return null;
|
|
946
|
+
console.log('RecordRelationshipsComponent: getDetailsForManyToMany starting for field:', fieldObj.name, 'baseModel:', baseModelName);
|
|
923
947
|
let relationshipModelName = fieldObj.type.model;
|
|
948
|
+
console.log('RecordRelationshipsComponent: relationshipModelName:', relationshipModelName);
|
|
924
949
|
// Add null check for associatedWith
|
|
925
950
|
if (!fieldObj.association || !fieldObj.association.associatedWith || !Array.isArray(fieldObj.association.associatedWith) || fieldObj.association.associatedWith.length === 0) {
|
|
926
|
-
console.warn('
|
|
951
|
+
console.warn('RecordRelationshipsComponent: associatedWith is not available or empty for field', fieldObj.name, 'association:', fieldObj.association);
|
|
927
952
|
return null;
|
|
928
953
|
}
|
|
929
|
-
let associatedWith = fieldObj.association.associatedWith[0];
|
|
930
|
-
console.log('
|
|
931
|
-
|
|
954
|
+
let associatedWith = fieldObj.association.associatedWith[0];
|
|
955
|
+
console.log('RecordRelationshipsComponent: associatedWith:', associatedWith);
|
|
956
|
+
console.log('RecordRelationshipsComponent: Calling getFieldNameForAssociatedWithModel');
|
|
957
|
+
let fieldName = this.getFieldNameForAssociatedWithModel(relationshipModelName, associatedWith);
|
|
958
|
+
console.log('RecordRelationshipsComponent: fieldName result:', fieldName);
|
|
932
959
|
// TODO: MAKE THIS AUTO REFRESH... maybe make this a signal?
|
|
933
960
|
let ret = {
|
|
934
961
|
relationshipModelName: relationshipModelName,
|
|
935
962
|
baseModelName: baseModelName,
|
|
936
|
-
fieldName:
|
|
963
|
+
fieldName: fieldName,
|
|
937
964
|
associatedWith: associatedWith
|
|
938
965
|
};
|
|
966
|
+
console.log('RecordRelationshipsComponent: Getting relationship model fields for:', relationshipModelName);
|
|
939
967
|
var relationshipModel = this.amplifyOutputs.data.model_introspection.models[relationshipModelName].fields;
|
|
968
|
+
console.log('RecordRelationshipsComponent: relationshipModel fields:', relationshipModel);
|
|
940
969
|
var vals = Object.values(relationshipModel);
|
|
970
|
+
console.log('RecordRelationshipsComponent: Processing', vals.length, 'relationship model fields');
|
|
941
971
|
for (var i in vals) {
|
|
942
972
|
const val = vals[i];
|
|
943
|
-
|
|
973
|
+
console.log('RecordRelationshipsComponent: Processing relationship field:', val.name, 'type:', val.type);
|
|
974
|
+
if (typeof val.type != 'object') {
|
|
975
|
+
console.log('RecordRelationshipsComponent: Skipping non-object relationship field:', val.name);
|
|
944
976
|
continue;
|
|
945
|
-
|
|
977
|
+
}
|
|
978
|
+
if (!val.type.model) {
|
|
979
|
+
console.log('RecordRelationshipsComponent: Skipping non-model relationship field:', val.name);
|
|
946
980
|
continue;
|
|
947
|
-
|
|
981
|
+
}
|
|
982
|
+
if (val.type.model == baseModelName) {
|
|
983
|
+
console.log('RecordRelationshipsComponent: Skipping self-reference field:', val.name);
|
|
948
984
|
continue;
|
|
949
|
-
|
|
985
|
+
}
|
|
986
|
+
console.log('RecordRelationshipsComponent: Found partner model field:', val.name, 'model:', val.type.model);
|
|
950
987
|
var modelName = val.type.model;
|
|
951
988
|
let refModel = this.amplifyOutputs.data.model_introspection.models[modelName].fields;
|
|
989
|
+
console.log('RecordRelationshipsComponent: Partner model fields:', refModel);
|
|
952
990
|
ret.partnerModelName = modelName;
|
|
991
|
+
console.log('RecordRelationshipsComponent: Set partnerModelName to:', modelName);
|
|
953
992
|
//this.ams.getRelatedItems(ret, this.item.id);
|
|
954
993
|
}
|
|
955
|
-
console.log('getDetailsForManyToMany
|
|
994
|
+
console.log('RecordRelationshipsComponent: getDetailsForManyToMany final result:', ret);
|
|
956
995
|
return ret;
|
|
957
996
|
}
|
|
958
997
|
deleteRelatedItem(item) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snteam-amplify-angular-core.mjs","sources":["../../../projects/amplify-angular-core/src/lib/amplify-angular-core.ts","../../../projects/amplify-angular-core/src/lib/services/amplify-form-builder.service.ts","../../../projects/amplify-angular-core/src/lib/pipes/val-to-title.pipe.ts","../../../projects/amplify-angular-core/src/lib/services/amplify-model.service.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-question/dynamic-form-question.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-question/dynamic-form-question.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-group/dynamic-form-group.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-group/dynamic-form-group.component.html","../../../projects/amplify-angular-core/src/lib/components/add-relationship-dialog/add-relationship-dialog.component.ts","../../../projects/amplify-angular-core/src/lib/components/add-relationship-dialog/add-relationship-dialog.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component.html","../../../projects/amplify-angular-core/src/lib/components/record-relationships/record-relationships.component.ts","../../../projects/amplify-angular-core/src/lib/components/record-relationships/record-relationships.component.html","../../../projects/amplify-angular-core/src/lib/classes/questions.ts","../../../projects/amplify-angular-core/src/lib/classes/validators.ts","../../../projects/amplify-angular-core/src/lib/services/question-control.service.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/amplify-angular-core/src/lib/components/list-view/list-view.component.ts","../../../projects/amplify-angular-core/src/lib/components/list-view/list-view.component.html","../../../projects/amplify-angular-core/src/lib/components/configurations/configurations.component.ts","../../../projects/amplify-angular-core/src/lib/components/configurations/configurations.component.html","../../../projects/amplify-angular-core/src/public-api.ts","../../../projects/amplify-angular-core/src/snteam-amplify-angular-core.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'snteam-amplify-angular-core',\n imports: [],\n template: `\n <p>\n amplify-angular-core works!\n </p>\n `,\n styles: ``,\n})\nexport class AmplifyAngularCore {\n\n}\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, Validators, AbstractControl } from '@angular/forms';\nimport {\n QuestionBase,\n TextboxQuestion,\n NumberQuestion,\n DatePickerQuestion,\n DropdownQuestion,\n FormGroupQuestion\n} from '../classes/questions';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmplifyFormBuilderService {\n\n skipFields: string[] = ['createdAt', 'updatedAt'];\n\n materialInputs: string[] = [\n 'textbox',\n 'int',\n 'number',\n 'color',\n 'email',\n 'month',\n 'number',\n 'password',\n 'search',\n 'tel',\n 'text',\n 'time',\n 'url',\n 'week'\n ];\n \n switchInputs: string[] = ['dropdown'];\n refInputs: string[] = ['async-dropdown'];\n formGroupInputs: string[] = ['formgroup']; // we skip these and handle them in the form\n datePickerInputs = ['date', 'datepicker', 'datetime-local'];\n\n private outputs: any;\n\n constructor(private fb: FormBuilder) { }\n\n /**\n * Initialize the service with Amplify outputs\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeOutputs(outputs: any) {\n this.outputs = outputs;\n }\n\n getInputTypeFromFieldType(type: string): string | undefined {\n if (this.materialInputs.includes(type)) return 'materialInputs';\n if (this.switchInputs.includes(type)) return 'switchInputs';\n if (this.refInputs.includes(type)) return 'refInputs';\n if (this.formGroupInputs.includes(type)) return 'formGroupInputs';\n if (this.datePickerInputs.includes(type)) return 'datePickerInputs';\n\n return undefined;\n }\n\n getMaterialInputs(): string[] {\n return this.materialInputs;\n }\n\n getSwitchInputs(): string[] {\n return this.switchInputs;\n }\n\n getRefInputs(): string[] {\n return this.refInputs;\n }\n\n getErrorStrForControl(ctrl: AbstractControl, label?: string): string {\n const errorMap: { [key: string]: string } = {\n email: 'Please enter a valid email address',\n invalidPhoneNumber: 'Please enter a phone number in (111) 222-3333 format.',\n required: (label || 'This field') + ' is required.'\n };\n\n if (!ctrl.errors) return '';\n \n let errStrs: string[] = [];\n let keys = Object.keys(ctrl.errors);\n \n for (let err of keys) {\n if (errorMap[err]) {\n errStrs.push(errorMap[err]);\n } else {\n errStrs.push(`Invalid ${err}`);\n }\n }\n \n return errStrs.join(', ');\n }\n\n /** Shared Methods for FormControls **/\n getPathFromRoot(searchKey: string, controls: any, pathArr?: string[]): string {\n if (!pathArr) pathArr = [];\n\n const isInControls = Object.keys(controls).find(name => name === searchKey);\n if (isInControls) {\n pathArr.push(searchKey);\n return pathArr.join('.');\n } else {\n const tempArr: string[] = [];\n const entries = Object.entries(controls);\n \n for (let e of entries) {\n let controlName = e[0];\n let controlObj = e[1];\n \n if (controlObj instanceof FormGroup) {\n console.log('getPathFromRoot controlName', typeof controlName, controlName, 'controlObj', controlObj);\n tempArr.push(controlName);\n console.log('getPathFromRoot', controlName, 'is a FormGroup in path tempArr', tempArr);\n \n const childControls = (controls[controlName] as FormGroup).controls;\n console.log('getPathFromRoot childControls', childControls);\n \n let childPath = this.getPathFromRoot(searchKey, childControls, [...pathArr, ...tempArr]);\n if (childPath !== '') return childPath;\n }\n }\n return '';\n }\n }\n\n /** FormBuilder Methods **/\n\n private _getFormGroupFromFieldsArr(fields: any): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n console.log('_getFormGroupFromFieldsArr fields', fields);\n const formGroup = this.fb.group({});\n const fieldsArr = Object.values(fields);\n \n fieldsArr.forEach((field: any) => {\n if (this.skipFields.indexOf(field.name) > -1) return;\n\n if (typeof field.type === 'object') {\n if (field.type.model) {\n formGroup.addControl(field.name, this._getControlForField(field));\n }\n if (field.type.nonModel) {\n formGroup.addControl(field.name, this._getGroupControlForNonModel(field));\n }\n } else {\n formGroup.addControl(field.name, this._getControlForField(field));\n }\n });\n \n return formGroup;\n }\n\n private _getGroupControlForNonModel(field: any): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n const nonModel = field.type.nonModel;\n const fields = this.outputs.data.model_introspection.nonModels[nonModel as keyof typeof this.outputs.data.model_introspection.nonModels].fields;\n return this._getFormGroupFromFieldsArr(fields);\n }\n\n private _getControlForField(field: any): FormControl {\n const validators = field.required ? [Validators.required] : [];\n return new FormControl(field.value || '', validators);\n }\n\n buildFormForModel(model: string): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n const config = this.outputs.data.model_introspection.models[model as keyof typeof this.outputs.data.model_introspection.models].fields;\n const formGroup = this._getFormGroupFromFieldsArr(config);\n return formGroup;\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'valToTitle',\n standalone: true\n})\nexport class ValToTitlePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value) {\n return '';\n }\n\n let fixed = value.replace(new RegExp('_', 'g'), ' ').split(' ')\n .map(w => w.length > 0 ? w[0].toUpperCase() + w.substring(1).toLowerCase() : '')\n .join(' ');\n\n return fixed;\n }\n}","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmplifyModelService {\n\n private client: any;\n\n constructor() { \n // Client will be initialized when Amplify is configured by the consuming application\n }\n\n /**\n * Initialize the service with the Amplify client\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeClient<T>(schema?: T) {\n // Dynamic import to avoid build-time dependency\n try {\n // This will be provided by the consuming application\n this.client = (globalThis as any).amplifyClient;\n if (!this.client) {\n console.warn('AmplifyModelService: No client provided. Call with generateClient result.');\n }\n } catch (error) {\n console.error('Failed to initialize Amplify client:', error);\n }\n }\n\n /**\n * Set the client directly (for consuming applications)\n */\n setClient(client: any) {\n this.client = client;\n }\n\n getMenuLinksFromModels(outputs: any, config?: { skipModels?: string[] }): any[] {\n const defaultConfig = { skipModels: ['ServiceCustomer', 'ServiceProduct', 'Todo'] };\n const finalConfig = { ...defaultConfig, ...config };\n\n let pageButtons: any[] = [\n { label: 'Home', route: '/' },\n { label: 'Configurations', route: '/configurations' }\n ];\n let models = outputs.data.model_introspection.models;\n\n Object.values(models).forEach((model: any) => {\n if (finalConfig.skipModels!.includes(model.name)) return;\n console.log('model', model);\n pageButtons.push({ label: model.name, route: '/list/' + model.name });\n });\n console.log('models', models);\n\n return pageButtons;\n }\n\n /**\n * TODO: Make this generate dynamically using refModel Names and types\n * TODO: Bring the refModel generation in here.\n * Edit this function with form fields...\n * \n * ... probably don't need this...\n */\n getEmptyObjectForModel(model: string): any {\n switch (model) {\n case 'Customer':\n return {\n name: '',\n contact: {},\n services: [],\n contact_preference: '',\n notes: [],\n };\n case 'Service':\n return {\n cost: 0.00,\n price: 0.00,\n customers: [],\n products: [],\n id: '',\n title: ''\n };\n default:\n return {};\n }\n }\n\n getRelationshipChoices(config: any, selectedOptions?: any[]): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter: any = {};\n /*if (selectedOptions){ //TODO: FILTER OUT SELECTED ITEMS\n filter = {id: {nin: [...selectedOptions]}};\n }*/\n console.log('getRelationshipChoices filter', filter);\n\n try {\n const modelName = config.partnerModelName;\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ filter: filter });\n } else {\n console.error(`Model ${modelName} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + config.partnerModelName + 'items', error);\n return null;\n }\n }\n\n getRefChoices(config: any, itemId: string, selectedOptions?: any[]): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter = this.getRelationshipFilter(config, itemId, selectedOptions);\n console.log('getRefChoices getRelationshipFilter model', config.partnerModelName, 'filter', filter);\n \n try {\n const modelName = config.partnerModelName;\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ filter: filter });\n } else {\n console.error(`Model ${modelName} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + config.partnerModelName + 'items', error);\n return null;\n }\n }\n\n async deleteRelationship(relModel: string, relId: string): Promise<any> {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let obj = { id: relId };\n \n if (this.client.models[relModel]) {\n return this.client.models[relModel].delete(obj);\n } else {\n console.error(`Relationship model ${relModel} not found in client`);\n return null;\n }\n }\n\n createRelationship(relModel: string, relItem: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('createRelationship starting for relModel', relModel, 'relItem', relItem);\n \n if (this.client.models[relModel]) {\n return this.client.models[relModel].create(relItem);\n } else {\n console.error(`Relationship model ${relModel} not found in client`);\n return null;\n }\n }\n\n getRelationshipFilter(config: any, baseId?: string, removeIds?: string[]): any {\n let condition: any = {};\n condition[config.associatedWith] = { eq: baseId };\n \n if (removeIds && removeIds.length > 0) {\n let conditionArr = [\n condition,\n { id: { ne: removeIds } }\n ];\n let andCondition = { and: conditionArr };\n console.log('getRelationshipFilter has andCondition', andCondition);\n return andCondition;\n } else {\n condition[config.associatedWith] = { eq: baseId };\n console.log('getRelationshipFilter config', config, 'condition', condition);\n return condition;\n }\n }\n\n getAmplifySelectionSet(config: any, baseId: string): any {\n switch (config.fieldName) {\n case 'service':\n return ['id', 'service.title', 'service.price', 'service.id'] as const;\n case 'customer':\n return ['id', 'customer.*'] as const;\n default: \n return [];\n }\n }\n\n setRelatedSub(config: any, baseId: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter = this.getRelationshipFilter(config, baseId);\n const modelName = config.relationshipModelName;\n \n if (this.client.models[modelName]) {\n return this.client.models[modelName].onCreate({ filter: filter });\n } else {\n console.error(`Relationship model ${modelName} not found in client`);\n return null;\n }\n }\n\n /**\n * @param config {object} - see dynamic-relationship-builder.component getDetailsForManyToMany() for example of building config\n */\n getRelatedItems(config: any, baseId: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter = this.getRelationshipFilter(config, baseId);\n let selectionSet = this.getAmplifySelectionSet(config, baseId);\n const modelName = config.relationshipModelName;\n\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ \n filter: filter, \n selectionSet: [...selectionSet] \n });\n } else {\n console.error(`Relationship model ${modelName} not found in client`);\n return null;\n }\n }\n\n createItemPromise(model: string, payload: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n if (this.client.models[model]) {\n return this.client.models[model].create(payload);\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n updateItemForModel(model: string, payload: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n if (this.client.models[model]) {\n return this.client.models[model].update(payload);\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n getItemForModel(model: string, id: string): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('AmplifyModelService: Getting item for model:', model, 'id:', id);\n\n if (this.client.models[model]) {\n try {\n return this.client.models[model].get({ id: id });\n } catch (error) {\n console.error(`AmplifyModelService: Error getting item for model ${model}:`, error);\n throw error;\n }\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n listItemsForModel(model: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('this.listItems starting');\n \n try {\n if (this.client.models[model]) {\n return this.client.models[model].observeQuery();\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + model, error);\n return null;\n }\n }\n}","import { ChangeDetectionStrategy, Component, Input, OnInit, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n FormControl,\n FormControlName,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { CommonModule } from '@angular/common';\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\nimport { QuestionBase } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { provideNativeDateAdapter } from '@angular/material/core';\n\n\n@Component({\n selector: 'snteam-dynamic-form-question',\n standalone: true,\n providers: [provideNativeDateAdapter()],\n imports: [CommonModule, ReactiveFormsModule, ValToTitlePipe, MatFormFieldModule, MatInputModule, MatSelectModule, MatDatepickerModule],\n templateUrl: './dynamic-form-question.component.html',\n styleUrl: './dynamic-form-question.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicFormQuestionComponent implements OnInit {\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n formControlPath: string = '';\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n refInputs: string[] = [];\n form!: any;\n ctrl!: any;\n items$!: Observable<any>\n\n afbs = inject(AmplifyFormBuilderService);\n\n constructor(private rootFormGroup: FormGroupDirective, private ams: AmplifyModelService) { }\n\n ngOnInit() {\n console.log('DynamicFormQuestionComponent question', this.question);\n this.form = this.rootFormGroup.control;\n this.ctrl = this.rootFormGroup.control.get(this.question.key);\n\n if (this.question.controlType == 'async-dropdown') {\n console.log('DynamicFormQuestionComponent has async-dropdown!');\n //this.items$ = this.ams.getRefChoices(this.question.targetModel);\n }\n }\n\n showError(): string {\n return this.afbs.getErrorStrForControl(this.ctrl, this.question.label);\n }\n}","<form [formGroup]=\"form\">\n @switch (afbs.getInputTypeFromFieldType(question.controlType)) {\n @case ('materialInputs'){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\">\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('datePickerInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [matDatepicker]=\"picker\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('switchInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @for (opt of question.options; track opt) {\n <mat-option [value]=\"opt.key\">{{opt.value | valToTitle}}</mat-option>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('refInputs') {\n @if (question.multiple){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\" multiple>\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n @else {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n }\n }\n</form>","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n FormControl,\n FormControlName,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { CommonModule } from '@angular/common';\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\nimport { QuestionBase } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport {MatSelectModule} from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { provideNativeDateAdapter } from '@angular/material/core';\n\n\n@Component({\n selector: 'snteam-dynamic-nested-form-question',\n standalone: true,\n providers: [provideNativeDateAdapter()],\n imports: [CommonModule, ReactiveFormsModule, ValToTitlePipe, MatFormFieldModule, MatInputModule, MatSelectModule, MatDatepickerModule],\n templateUrl: './dynamic-nested-form-question.component.html',\n styleUrl: './dynamic-nested-form-question.component.css'\n})\nexport class DynamicNestedFormQuestionComponent {\n\n @Input() groupName!: string;\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n formControlPath: string = '';\n form!: any;\n ctrl!: any;\n items$!: Observable<any>;\n afbs = inject(AmplifyFormBuilderService);\n\n\n constructor(private rootFormGroup: FormGroupDirective) {}\n\n ngOnInit() {\n console.log('DynamicNestedFormQuestionComponent question', this.question);\n var searchKey = this.groupName;\n var controls = this.rootFormGroup.control.controls;\n var pathStr = this.afbs.getPathFromRoot(searchKey, controls)//this.getPathFromRoot();\n this.form = this.rootFormGroup.control;\n this.formControlPath = pathStr + '.' + this.question.key;\n this.ctrl = this.rootFormGroup.control.get(this.formControlPath);\n if (this.question.key == 'services') console.log('DynamicNestedFormQuestionComponent has services');\n }\n\n showError():string {\n return this.afbs.getErrorStrForControl(this.ctrl, this.question.label);\n }\n}","<form autocomplete=\"off\" [formGroup]=\"formGroup\">\n <div [formGroupName]=\"groupName\">\n\n @switch (afbs.getInputTypeFromFieldType(question.controlType)) {\n @case ('materialInputs'){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\">\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('datePickerInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [matDatepicker]=\"picker\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('switchInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @for (opt of question.options; track opt) {\n <mat-option [value]=\"opt.key\">{{opt.value | valToTitle}}</mat-option>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('refInputs') {\n @if (question.multiple){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\" multiple>\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n @else {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n }\n }\n\n\n </div>\n</form>","import { Component, Input, OnInit } from '@angular/core';\nimport {\n FormControl,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup,\n AbstractControl\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\n\nimport { MatDividerModule } from '@angular/material/divider';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { DynamicNestedFormQuestionComponent } from '../dynamic-nested-form-question/dynamic-nested-form-question.component';\n\n@Component({\n selector: 'snteam-dynamic-form-group',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule,\n MatDividerModule,\n ValToTitlePipe, DynamicNestedFormQuestionComponent],\n templateUrl: './dynamic-form-group.component.html',\n styleUrl: './dynamic-form-group.component.css'\n})\nexport class DynamicFormGroupComponent {\n @Input() formGroupName!: string;\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n refInputs: string[] = [];\n formGroupInputs: string[] = ['formgroup'];\n form!: any;\n ctrl!: any;\n\n constructor(private rootFormGroup: FormGroupDirective, private afbs: AmplifyFormBuilderService) { }\n\n getControlName(c: AbstractControl): string | null {\n if (c.parent) {\n const formGroup: any = c.parent.controls;\n return Object.keys(formGroup).find(name => c === formGroup[name]) || null;\n }\n return null;\n }\n\n getPathFromRoot(controls?: any, pathArr?: string[]): string {\n if (!controls) controls = this.rootFormGroup.control.controls;\n if (!pathArr) pathArr = [];\n\n var isInControls = Object.keys(controls).find(name => name === this.question.key);\n if (isInControls) {\n pathArr.push(this.question.key);\n return pathArr.join('.');\n } else {\n var tempArr: string[] = [];\n var entries = Object.entries(controls);\n for (let e of entries) {\n let controlName = e[0];\n let controlObj = e[1];\n if (controlObj instanceof FormGroup) {\n //if (tempArr.length > 10) return '';\n tempArr.push(controlName);\n var childControls = controls[controlName].controls;\n let childPath = this.getPathFromRoot(childControls, tempArr);\n if (childPath != '') return childPath;\n };\n }\n return '';\n }\n\n return '';\n\n }\n\n ngOnInit() {\n //console.log('DynamicFormGroupComponent key starting:', this.question.key);\n\n this.materialInputs = this.afbs.getMaterialInputs();\n this.switchInputs = this.afbs.getSwitchInputs();\n this.refInputs = this.afbs.getRefInputs();\n\n if (this.formGroupName) {\n var searchKey = this.question.key;\n var controls = this.rootFormGroup.control.controls;\n var pathStr = this.afbs.getPathFromRoot(searchKey, controls)//this.getPathFromRoot();\n this.form = this.rootFormGroup.control.get(pathStr) as FormGroup;\n var controlName = this.getControlName(this.form);\n this.ctrl = this.rootFormGroup.control.get(this.question.key);\n console.log('DynamicFormGroupComponent init vals:', {\n formGroupName: this.formGroupName,\n question: this.question,\n key: this.question.key,\n searchKey: searchKey,\n controls: controls,\n pathStr: pathStr,\n controlName: controlName,\n ctrl: this.ctrl\n })\n }\n else {\n //console.log('DynamicFormGroupComponent will get main control form');\n this.form = this.rootFormGroup.control;\n }\n //console.log('DynamicFormGroupComponent question', this.question, 'form', this.form, 'formGroupName', typeof this.formGroupName, this.formGroupName);\n }\n}","<form autocomplete=\"off\" [formGroup]=\"form\">\n <h2>{{question.key | valToTitle}}</h2>\n <mat-divider></mat-divider>\n @for (q of $any(question).questions; track q) {\n @if (q.controlType != 'formgroup') {\n <div class=\"form-row\">\n <snteam-dynamic-nested-form-question [question]=\"q\" [formGroup]=\"formGroup\" [groupName]=\"question.key\"></snteam-dynamic-nested-form-question>\n </div>\n }\n @if (q.controlType == 'formgroup') {\n <div class=\"group-row\">\n <snteam-dynamic-form-group [question]=\"q\" [formGroup]=\"form\" [formGroupName]=\"q.key\"></snteam-dynamic-form-group>\n </div>\n }\n }\n <mat-divider></mat-divider>\n</form>","import { ChangeDetectionStrategy, Component, OnInit, inject, model, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Observable } from 'rxjs';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nexport interface DialogData {\n modelItem: any;\n rel: any;\n selectedItems: any[];\n}\n\n@Component({\n selector: 'snteam-add-relationship-dialog',\n standalone: true,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n MatSelectModule,\n MatButtonModule,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,],\n templateUrl: './add-relationship-dialog.component.html',\n styleUrl: './add-relationship-dialog.component.css'\n})\nexport class AddRelationshipDialogComponent implements OnInit {\n readonly dialogRef = inject(MatDialogRef<AddRelationshipDialogComponent>);\n readonly data = inject<DialogData>(MAT_DIALOG_DATA);\n readonly modelItem = model(this.data.modelItem);\n private ams = inject(AmplifyModelService);\n items$!: Observable<any>;\n\n ngOnInit() {\n console.log('AddRelationshipDialogComponent init this.data', this.data);\n let selectedIdsArr: string[] = [];\n if (this.data.selectedItems && this.data.selectedItems.length > 0){\n this.data.selectedItems.forEach(item => {\n console.log('item', item, 'this.data.rel', this.data.rel);\n selectedIdsArr.push(item[this.data.rel.fieldName].id);\n });\n }\n console.log('AddRelationshipDialogComponent selectedIdsArr', selectedIdsArr);\n const relationshipChoices = this.ams.getRelationshipChoices(this.data.rel, selectedIdsArr);\n if (relationshipChoices) {\n this.items$ = relationshipChoices;\n }\n console.log('AddRelationshipDialogComponent this.items$', this.items$);\n }\n\n onNoClick(): void {\n this.dialogRef.close();\n }\n}","<h2 mat-dialog-title>Add New {{data.rel.partnerModelName}}</h2>\n<mat-dialog-content>\n <mat-select [(ngModel)]=\"modelItem\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n</mat-dialog-content>\n<mat-dialog-actions>\n <button mat-button (click)=\"onNoClick()\">Cancel</button>\n <button mat-button [mat-dialog-close]=\"modelItem()\" cdkFocusInitial>Add</button>\n</mat-dialog-actions>","import { Component, Input, OnInit, ChangeDetectionStrategy, inject, model, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nimport { AddRelationshipDialogComponent } from '../add-relationship-dialog/add-relationship-dialog.component';\n\n// Note: These imports will need to be updated based on the actual Amplify setup in the consuming application\n// import type { Schema } from '../../../../amplify/data/resource';\n// import outputs from '../../../../amplify_outputs.json';\n\n@Component({\n selector: 'snteam-dynamic-relationship-builder',\n standalone: true,\n imports: [MatToolbarModule, MatButtonModule, MatIconModule, MatFormFieldModule, MatInputModule, MatListModule,\n FormsModule,\n CommonModule],\n templateUrl: './dynamic-relationship-builder.component.html',\n styleUrl: './dynamic-relationship-builder.component.css'\n})\nexport class DynamicRelationshipBuilderComponent implements OnInit {\n @Input() m2m!: any;\n @Input() item!: any;\n @Input() model!: string;\n\n m2mItems: any;\n\n constructor(private ams: AmplifyModelService) { }\n\n modelItem!: any;// = signal('');\n readonly dialog = inject(MatDialog);\n\n ngOnInit() {\n console.log('DynamicRelationshipBuilderComponent model', this.m2m);\n this.listItems();\n this.setCreateSubscription();\n }\n\n async perhapsAddM2MItem (item: any){\n let m2mItem:any = {id: item.id};\n const { data: retItem } = await item[this.m2m.fieldName]();\n m2mItem[this.m2m.fieldName] = retItem;\n\n let existingInd = this.m2mItems.findIndex((x: any) => x.id == item.id);\n if (existingInd > -1){\n if (!this.m2mItems[existingInd][this.m2m.fieldName]) {\n console.log('would delete existing', this.m2mItems[existingInd]);\n this.m2mItems.splice(existingInd, 1);\n }\n }\n this.m2mItems.push(m2mItem);\n //console.log('perhapsAddM2MItem', item, 'm2m', this.m2m);\n }\n\n setCreateSubscription() {\n this.ams.setRelatedSub(this.m2m, this.item.id)?.subscribe({\n next: (data) => this.perhapsAddM2MItem(data),//(console.log('setRelatedSub m2mItems', this.m2mItems, 'data', data),\n error: (error) => console.warn(error),\n });\n }\n\n listItems() {\n this.ams.getRelatedItems(this.m2m, this.item.id)?.subscribe({\n next: ({ items, isSynced }) => {\n this.m2mItems = items;\n },\n });\n }\n\n /**\n Customize this function to include all desired models from your file\n */\n setModelItem(model?: string) {\n let mdl = model || this.model;\n console.log('setModelItem mdl', mdl);\n this.modelItem = signal<any>(this.ams.getEmptyObjectForModel(mdl));\n }\n\n async deleteRelatedItem(item: any) {\n console.log('deleteRelatedItem for item', item, 'm2m', this.m2m);\n //this.ams.deleteRelationship(this.m2m.relationshipModelName, item.id);\n await this.ams.deleteRelationship(this.m2m.relationshipModelName, item.id);\n }\n\n openDialog(rel: any): void {\n console.log('openDialog clicked for rel', rel);\n this.setModelItem(rel.partnerModelName);\n\n const dialogRef = this.dialog.open(AddRelationshipDialogComponent, {\n data: { rel: rel, modelItem: this.modelItem(), selectedItems: this.m2mItems },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) this.handleDialogResult(result, rel);\n });\n }\n\n handleDialogResult(result: any, rel: any) {\n if (!result) return;\n console.log('handleDialogResult', result, 'rel', rel);\n if (result !== undefined) {\n this.modelItem.set(result);\n }\n\n let relIdName = rel.partnerModelName.toLowerCase() + 'Id';\n let thisIdName = rel.baseModelName.toLowerCase() + 'Id';\n\n let newRelObj: any = {};\n newRelObj[relIdName] = result.id;\n newRelObj[thisIdName] = this.item.id;\n\n this.ams.createRelationship(rel.relationshipModelName, newRelObj);\n }\n}","<div class=\"record-relationship-holder\">\n <div class=\"relationship-type\">\n <mat-toolbar>\n <span>{{m2m.partnerModelName}} Management</span>\n <span class=\"rel-title-spacer\"></span>\n <button mat-icon-button attr.aria-label=\"Add {{m2m.name}}\" (click)=\"openDialog(m2m)\">\n <mat-icon>add</mat-icon>\n </button>\n </mat-toolbar>\n @if(m2mItems && m2mItems.length > 0){\n <mat-list>\n @for (item of m2mItems; track item?.id) {\n @if(item[m2m.fieldName]){\n <mat-list-item>\n <span matListItemTitle>{{item[m2m.fieldName].name || item[m2m.fieldName].title}}</span>\n <button mat-icon-button (click)=\"deleteRelatedItem(item)\" matListItemMeta>\n <mat-icon>delete</mat-icon>\n </button>\n </mat-list-item>\n }\n }\n </mat-list>\n }\n @else {\n Add your first {{m2m.partnerModelName}}\n }\n </div>\n</div>","import { Component, Input, OnInit, ChangeDetectionStrategy, inject, model, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nimport { DynamicRelationshipBuilderComponent } from '../dynamic-relationship-builder/dynamic-relationship-builder.component';\nimport { AddRelationshipDialogComponent } from '../add-relationship-dialog/add-relationship-dialog.component';\n\n// Note: These imports will need to be updated based on the actual Amplify setup in the consuming application\n// import type { Schema } from '../../../../amplify/data/resource';\n// import outputs from '../../../../amplify_outputs.json';\n\n@Component({\n selector: 'snteam-record-relationships',\n standalone: true,\n imports: [MatToolbarModule, MatButtonModule, MatIconModule, MatFormFieldModule, MatInputModule, MatListModule,\n DynamicRelationshipBuilderComponent,\n FormsModule,\n CommonModule],\n templateUrl: './record-relationships.component.html',\n styleUrl: './record-relationships.component.css'\n})\nexport class RecordRelationshipsComponent implements OnInit {\n\n @Input() model: string = '';\n @Input() id?: string;\n @Input() item?: any;\n @Input() amplifyOutputs?: any; // Allow injection of amplify outputs\n\n constructor(private ams: AmplifyModelService) { }\n\n m2mDetailArrays: any[] = [];\n\n //readonly animal = signal('');\n modelItem!: any;// = signal('');\n readonly dialog = inject(MatDialog);\n\n ngOnInit() {\n console.log('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 || !Array.isArray(fieldAny.association.targetNames)) continue;\n if (fieldAny.association.targetNames.indexOf(associatedWith) > -1) continue;\n // there should only be two fields with associations.\n // if we get here we are in the field we want\n return fieldAny.name;\n }\n }\n\n getDetailsForManyToMany(fieldObj: any, baseModelName: string): any {\n if (!this.amplifyOutputs) return null;\n \n let relationshipModelName = fieldObj.type.model;\n \n // Add null check for associatedWith\n if (!fieldObj.association || !fieldObj.association.associatedWith || !Array.isArray(fieldObj.association.associatedWith) || fieldObj.association.associatedWith.length === 0) {\n console.warn('getDetailsForManyToMany: associatedWith is not available or empty for field', fieldObj);\n return null;\n }\n \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 console.log('QuestionControlService: initializeOutputs called with:', outputs);\n this.outputs = outputs;\n console.log('QuestionControlService: outputs stored:', this.outputs);\n }\n\n getFieldForFieldObj(fieldObj: any, model: any): QuestionBase<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n console.log('getFieldForFieldObj starting for type', fieldObj.type, 'fieldObj', fieldObj);\n \n switch (fieldObj.type) {\n case 'String':\n return this._addStringQuestion(fieldObj, model);\n case 'Int':\n case 'Float':\n return this._addNumberQuestion(fieldObj, model);\n case 'AWSDate':\n case 'AWSDateTime':\n return this._addDatePickerQuestion(fieldObj, model);\n case 'AWSEmail':\n return this._addEmailQuestion(fieldObj, model);\n case 'AWSPhone':\n return this._addPhoneQuestion(fieldObj, model);\n }\n\n if (typeof fieldObj.type === 'object') {\n if (fieldObj.type.model) {\n return this.getRefModel(fieldObj, model);\n }\n if (fieldObj.type.nonModel) {\n let groupQuestions = this.getNonModelQuestions(fieldObj, model);\n var formGroup = this.toFormGroup(groupQuestions);\n return this._addFormGroupQuestion(fieldObj, formGroup, groupQuestions);\n }\n if (fieldObj.type.enum) {\n return this.getEnumQuestion(fieldObj, model);\n }\n }\n\n return null;\n }\n\n getLabelForFieldName(name: string): string {\n return name.toLowerCase().split('_').map((word: string) => {\n return word.charAt(0).toUpperCase() + word.slice(1);\n }).join(' ');\n }\n\n getQuestionsForModelFields(model: string): QuestionBase<any>[] {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return [];\n }\n\n if (!model) {\n console.error('QuestionControlService: No model name provided');\n return [];\n }\n\n console.log('outputs.data.model_introspection', this.outputs.data.model_introspection);\n console.log('Looking for model:', model);\n \n if (!this.outputs.data || !this.outputs.data.model_introspection || !this.outputs.data.model_introspection.models) {\n console.error('QuestionControlService: Invalid outputs structure', this.outputs);\n return [];\n }\n \n console.log('Available models:', Object.keys(this.outputs.data.model_introspection.models));\n \n const modelData = this.outputs.data.model_introspection.models[model as keyof typeof this.outputs.data.model_introspection.models];\n if (!modelData) {\n console.error(`Model \"${model}\" not found in model introspection. Available models:`, Object.keys(this.outputs.data.model_introspection.models));\n return [];\n }\n \n console.log('Found model data:', modelData);\n \n const fields = modelData.fields;\n if (!fields) {\n console.error(`Fields not found for model \"${model}\"`, modelData);\n return [];\n }\n \n console.log('Found fields:', fields);\n \n const questions: QuestionBase<any>[] = [];\n const values = Object.values(fields);\n const skipFields = ['createdAt', 'updatedAt', 'id'];\n \n for (const fieldObj of values) {\n if (skipFields.indexOf((fieldObj as any).name) > -1) continue;\n\n if (typeof (fieldObj as any).type === 'object' && (fieldObj as any).type.model) {\n continue; // skip model relationship fields\n }\n\n const q = this.getFieldForFieldObj(fieldObj, model);\n if (q) {\n questions.push(q);\n } else {\n console.log('no question returned for fieldObj', fieldObj, 'model', model);\n }\n }\n \n console.log('getQuestionsForModelFields questions', questions);\n return questions;\n }\n\n /** nonModel, form section Methods **/\n getNonModelQuestions(fieldObj: any, model: any): QuestionBase<any>[] {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return [];\n }\n\n const nonModel = fieldObj.type.nonModel;\n const fields = this.outputs.data.model_introspection.nonModels[nonModel as keyof typeof this.outputs.data.model_introspection.nonModels].fields;\n const questions: QuestionBase<any>[] = [];\n const values = Object.values(fields);\n const skipFields = ['createdAt', 'updatedAt'];\n \n for (const nestedFieldObj of values) {\n const question = this.getFieldForFieldObj(nestedFieldObj, model);\n if (question) {\n questions.push(question);\n }\n }\n \n console.log('getNonModelQuestions questions', questions);\n return questions;\n }\n\n getEnumQuestion(fieldObj: any, model: any): DropdownQuestion<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n const enumName = fieldObj.type.enum;\n const e = this.outputs.data.model_introspection.enums[enumName as keyof typeof this.outputs.data.model_introspection.enums];\n console.log('getEnumQuestion e', e);\n \n const choices: any[] = [];\n e.values.forEach((val: string) => {\n choices.push({ key: val, value: val });\n });\n \n return this._addDropdownQuestion(fieldObj, choices, model);\n }\n\n /** Reference Field Methods **/\n getRefModel(fieldObj: any, callingModel: string): AsyncDropdownQuestion<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n console.log('getRefModel starting for fieldObj', fieldObj);\n \n const referenceModel = fieldObj.type.model;\n const relModel = this.outputs.data.model_introspection.models[referenceModel as keyof typeof this.outputs.data.model_introspection.models].fields;\n\n const vals = Object.values(relModel);\n for (const val of vals) {\n const fieldVal = val as any;\n if (typeof fieldVal.type !== 'object') continue;\n if (!fieldVal.type.model) continue;\n if (fieldVal.type.model === callingModel) continue;\n\n const modelName = fieldVal.type.model;\n return this._addRefDropdownQuestion(fieldObj, callingModel, modelName);\n }\n\n return null;\n }\n\n private _addFormGroupQuestion(fieldObj: any, formGroup: FormGroup, questions: QuestionBase<any>[]): FormGroupQuestion<any> {\n const name = fieldObj.name.toString();\n return new FormGroupQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'formgroup',\n formGroup: formGroup,\n questions: questions\n });\n }\n\n private _addDropdownQuestion(fieldObj: any, items: any[], model: string): DropdownQuestion<any> {\n console.log('_addDropdownQuestion for fieldObj', fieldObj, 'items', items);\n \n const name = fieldObj.name.toString();\n return new DropdownQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n options: items,\n type: 'dropdown',\n model: model\n });\n }\n\n private _addRefDropdownQuestion(fieldObj: any, model: string, targetModel: string): AsyncDropdownQuestion<any> {\n console.log('_addRefDropdownQuestion for fieldObj', fieldObj);\n \n const name = fieldObj.name.toString();\n return new AsyncDropdownQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'dropdown',\n model: model,\n targetModel: targetModel,\n multiple: fieldObj.association?.connectionType === \"HAS_MANY\"\n });\n }\n\n private _addDatePickerQuestion(fieldObj: any, model: string): DatePickerQuestion<any> {\n const name = fieldObj.name.toString();\n return new DatePickerQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'date',\n model: model\n });\n }\n\n private _addNumberQuestion(fieldObj: any, model: string): NumberQuestion<any> {\n const name = fieldObj.name.toString();\n return new NumberQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'number',\n model: model\n });\n }\n\n private _addStringQuestion(fieldObj: any, model: string): TextboxQuestion<any> {\n const name = fieldObj.name.toString();\n return new TextboxQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'textbox',\n model: model\n });\n }\n\n private _addEmailQuestion(fieldObj: any, model: string): EmailQuestion<any> {\n const name = fieldObj.name.toString();\n return new EmailQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'email',\n validators: [Validators.email],\n model: model\n });\n }\n\n private _addPhoneQuestion(fieldObj: any, model: string): PhoneQuestion<any> {\n const name = fieldObj.name.toString();\n return new PhoneQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'tel',\n validators: [phoneNumberValidator()],\n model: model\n });\n }\n\n toFormGroup(questions: (QuestionBase<any> | FormGroupQuestion<any>)[]): FormGroup {\n const group: any = {};\n\n questions.forEach(question => {\n if (!question) return;\n \n if ('questions' in question && question.questions) {\n group[question.key] = this.toFormGroup(question.questions as QuestionBase<any>[]);\n } else {\n const validators = [];\n \n if (question.required) {\n validators.push(Validators.required);\n }\n \n if (question.validators) {\n validators.push(...question.validators);\n }\n\n group[question.key] = new FormControl(question.value || '', validators);\n }\n });\n \n return new FormGroup(group);\n }\n}","import { Location } from '@angular/common';\nimport { Component, Input, OnInit, inject, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n FormControl,\n FormGroupDirective,\n NgForm,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { DynamicFormQuestionComponent } from '../dynamic-form-question/dynamic-form-question.component';\nimport { DynamicNestedFormQuestionComponent } from '../dynamic-nested-form-question/dynamic-nested-form-question.component';\nimport { DynamicFormGroupComponent } from '../dynamic-form-group/dynamic-form-group.component';\nimport { QuestionControlService } from '../../services/question-control.service';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { RecordRelationshipsComponent } from '../record-relationships/record-relationships.component';\nimport { QuestionBase, FormGroupQuestion } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar';\nimport { MatButtonModule } from '@angular/material/button';\n\n/** Error when invalid control is dirty, touched, or submitted. */\nexport class MyErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n const isSubmitted = form && form.submitted;\n return !!(control && control.invalid && (control.dirty || control.touched || isSubmitted));\n }\n}\n\n@Component({\n standalone: true,\n selector: 'snteam-dynamic-form',\n imports: [\n CommonModule,\n DynamicFormQuestionComponent,\n DynamicNestedFormQuestionComponent,\n DynamicFormGroupComponent,\n RecordRelationshipsComponent,\n ReactiveFormsModule,\n MatFormFieldModule, \n MatInputModule, \n MatSelectModule, \n MatSnackBarModule, \n MatDividerModule,\n MatButtonModule\n ],\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.css'\n})\nexport class DynamicFormComponent implements OnInit {\n\n @Input() model: string = \"\";\n @Input() itemId: string = \"\";\n @Input() valueMap?: any;\n @Input() hideRelationships: boolean = false;\n @Input() hideSaveButton: boolean = false;\n @Input() amplifyOutputs?: any; // Add amplify outputs input\n @Input() formViewId?: string; // Add FormView ID input\n \n @Output() itemOutput = new EventEmitter<any>();\n @Output() submitOutput = new EventEmitter<any>();\n @Output() formLoaded = new EventEmitter<FormGroup>();\n\n mdl: string = '';\n id: string = '';\n item: any;\n payLoad: any;\n form!: any;\n questions: (QuestionBase<any> | FormGroupQuestion<any>)[] | null = [];\n formView: any; // Store the FormView data\n formViewFields: any[] = []; // Store the FormViewField data\n\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n formGroupInputs: string[] = ['formgroup'];\n refInputs: string[] = [];\n\n private ams = inject(AmplifyModelService);\n private _snackBar = inject(MatSnackBar);\n\n constructor(\n private qcs: QuestionControlService,\n private afb: AmplifyFormBuilderService,\n private location: Location,\n private route: ActivatedRoute\n ) { }\n\n get outputs() {\n return this.amplifyOutputs || (this.qcs as any).outputs;\n }\n\n ngOnInit() {\n console.log('DynamicFormComponent ngOnInit starting');\n this.materialInputs = this.afb.getMaterialInputs();\n this.switchInputs = this.afb.getSwitchInputs();\n this.refInputs = this.afb.getRefInputs();\n \n // Read from route parameters if available, otherwise use inputs\n this.route.paramMap.subscribe((params) => {\n console.log('DynamicFormComponent route params:', params);\n const routeModel = params.get('model');\n const routeId = params.get('id');\n const routeFormViewId = params.get('formViewId'); // Check for formViewId in route\n \n console.log('DynamicFormComponent routeModel:', routeModel, 'routeId:', routeId, 'routeFormViewId:', routeFormViewId);\n \n this.mdl = routeModel || this.model;\n this.id = routeId || this.itemId;\n this.formViewId = routeFormViewId || this.formViewId;\n\n console.log('DynamicFormComponent final mdl:', this.mdl, 'id:', this.id, 'formViewId:', this.formViewId);\n\n // If we have a formViewId, load the FormView first\n if (this.formViewId) {\n this.loadFormView();\n } else {\n // Original behavior - load all model fields\n if (this.id == '-1' || !this.id) {\n console.log('DynamicFormComponent calling setQuestionsAndForm for new item');\n this.setQuestionsAndForm();\n } else {\n console.log('DynamicFormComponent calling getItem for existing item');\n this.getItem();\n }\n }\n });\n }\n\n async loadFormView() {\n if (!this.formViewId) return;\n \n try {\n console.log('DynamicFormComponent: Loading FormView:', this.formViewId);\n \n // Get the FormView with its fields\n const { data: formView } = await this.ams.getItemForModel('FormView', this.formViewId);\n this.formView = formView;\n \n if (this.formView && this.formView.tableConfigId) {\n this.mdl = 'TableConfig'; // Set the model based on FormView's table\n \n // Get the FormViewFields for this FormView\n const formViewFields = await this.ams.listItemsForModel('FormViewField');\n if (formViewFields) {\n formViewFields.subscribe({\n next: ({ items }) => {\n this.formViewFields = items.filter((field: any) => field.formViewId === this.formViewId)\n .sort((a: any, b: any) => (a.order || 0) - (b.order || 0));\n console.log('DynamicFormComponent: FormViewFields loaded:', this.formViewFields);\n \n // Now proceed with form setup\n if (this.id == '-1' || !this.id) {\n this.setQuestionsAndForm();\n } else {\n this.getItem();\n }\n }\n });\n }\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error loading FormView:', error);\n }\n }\n\n async getItem() {\n try {\n console.log('DynamicFormComponent: Getting item for model:', this.mdl, 'id:', this.id);\n const { data: item } = await this.ams.getItemForModel(this.mdl, this.id);\n console.log('DynamicFormComponent: Item retrieved successfully:', item);\n this.item = item;\n this.itemOutput.emit(this.item);\n this.setQuestionsAndForm();\n } catch (error) {\n console.error('DynamicFormComponent: Error getting item:', error);\n // Try to continue without the item\n this.item = null;\n this.setQuestionsAndForm();\n }\n }\n\n setQuestionsAndForm() {\n if (!this.mdl) {\n console.error('DynamicFormComponent: No model specified');\n return;\n }\n\n if (!this.questions || this.questions.length == 0) {\n console.log('DynamicFormComponent: Getting questions for model:', this.mdl);\n try {\n if (this.formViewFields && this.formViewFields.length > 0) {\n // Use FormView fields to generate questions\n this.questions = this.getQuestionsFromFormViewFields();\n console.log('DynamicFormComponent: Questions from FormView received:', this.questions);\n } else {\n // Original behavior - use all model fields\n this.questions = this.qcs.getQuestionsForModelFields(this.mdl);\n console.log('DynamicFormComponent: Questions from model received:', this.questions);\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error getting questions for model:', this.mdl, error);\n return;\n }\n }\n\n // Reset question values first\n for (let question of this.questions) {\n question.value = undefined; // Clear previous values\n }\n\n if (this.item) {\n for (let question of this.questions) {\n this.setQuestionValueFromItem(question);\n }\n }\n\n // Apply valueMap if provided\n if (this.valueMap) {\n for (let question of this.questions) {\n this.setQuestionValueFromValueMap(question, this.valueMap);\n }\n }\n\n // Always recreate the form to ensure it reflects current question values\n this.form = this.qcs.toFormGroup(this.questions as QuestionBase<any>[]);\n this.formLoaded.emit(this.form);\n console.log('this.item', this.item);\n }\n\n getQuestionsFromFormViewFields(): QuestionBase<any>[] {\n const questions: QuestionBase<any>[] = [];\n \n for (const formViewField of this.formViewFields) {\n // Create a mock field object that matches the structure expected by QuestionControlService\n const mockFieldObj = {\n name: formViewField.field_name,\n type: formViewField.field_type,\n isRequired: formViewField.required || false,\n attributes: []\n };\n \n const question = this.qcs.getFieldForFieldObj(mockFieldObj, this.mdl);\n if (question) {\n // Override the label if a custom displayLabel is provided\n if (formViewField.display_label) {\n question.label = formViewField.display_label;\n }\n \n // Set required status from FormViewField\n question.required = formViewField.required || false;\n \n questions.push(question);\n }\n }\n \n return questions;\n }\n\n setQuestionValueFromItem(question: any, item?: any) {\n if (!item) item = this.item;\n if (question.controlType == 'formgroup') {\n for (let q of question.questions) {\n this.setQuestionValueFromItem(q, item[question.key]);\n }\n }\n else if (item[question.key]) {\n question.value = item[question.key];\n } else {\n console.log('setQuestionValueFromItem no item found and not formgroup');\n }\n }\n\n setQuestionValueFromValueMap(question: any, valueMap: any) {\n if (question.controlType == 'formgroup') {\n for (let q of question.questions) {\n this.setQuestionValueFromValueMap(q, valueMap);\n }\n }\n else if (valueMap[question.key] !== undefined) {\n question.value = valueMap[question.key];\n }\n }\n\n getValueForKey(obj: any, key: string): any | null {\n if (obj === null || typeof obj !== 'object') {\n return null;\n }\n\n if (key in obj) {\n return obj[key];\n }\n\n for (const k in obj) {\n const result = this.getValueForKey(obj[k], key);\n if (result !== null) {\n return result;\n }\n }\n\n return null;\n }\n\n setValueForKey(obj: any, key: string, val: any) {\n if (obj === null || typeof obj !== 'object') {\n return;\n }\n\n if (key in obj) {\n obj[key] = val;\n }\n\n for (const k in obj) {\n if (typeof obj[k] == 'object') {\n this.setValueForKey(obj[k], key, val);\n }\n }\n }\n\n setRefQuestionValuesInPayload(questions?: any, payLoadObj?: any) {\n let qs = questions || this.questions;\n\n let refQs = qs.filter((x: any) => x.controlType == 'async-dropdown');\n if (refQs) {\n refQs.forEach((refQ: any) => {\n let keyVal = this.getValueForKey(this.payLoad, refQ.key);\n if (Array.isArray(keyVal)) {\n let relArr: any[] = [];\n for (var v in keyVal) {\n let valObj: any = {};\n valObj[refQ.targetModel.toLowerCase() + 'Id'] = keyVal[v];\n valObj[this.mdl.toLowerCase() + 'Id'] = this.id;\n relArr.push(valObj);\n }\n this.setValueForKey(this.payLoad, refQ.key, relArr)\n }\n else {\n console.log('qs keyVal is not array');\n }\n });\n }\n\n let groupQs = qs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n console.log('qs checking groupQ', groupQ);\n this.setRefQuestionValuesInPayload(groupQ.questions);\n }\n }\n console.log('qs payload', this.payLoad);\n }\n\n questionsIncludesRefType(questions?: any): boolean {\n let qs = questions || this.questions;\n\n let refQ = qs.find((x: any) => x.controlType == 'async-dropdown');\n if (refQ) return true;\n\n let groupQs = qs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n if (this.questionsIncludesRefType(groupQ.questions)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n formHasRelationshipQuestions(): boolean {\n return this.questionsIncludesRefType();\n }\n\n onSubmit() {\n this.payLoad = this.form.getRawValue();\n\n if (this.item && this.item.id) {\n this.payLoad.id = this.item.id;\n console.log('will update because this.item.id', this.item.id);\n this.updateItem();\n }\n else {\n console.log('will create because !this.item.id', this.item);\n this.createItem();\n }\n \n this.submitOutput.emit(this.payLoad);\n console.log('onSubmit payload', this.payLoad, 'this.item', this.item, 'this.form', this.form);\n }\n\n async updateItem() {\n this.prepPayloadObj();\n console.log('updateItem prepped payload', this.payLoad);\n try {\n const { data: item } = await this.ams.updateItemForModel(this.mdl, this.payLoad);\n console.log('updateItem finished res', item);\n \n if (!item) {\n this._snackBar.open('Error updating ' + this.mdl, 'Dismiss');\n return;\n }\n \n this.item = item;\n this.itemOutput.emit(this.item);\n \n // Show success message\n this._snackBar.open(`${this.mdl} updated successfully`, 'Dismiss', {\n duration: 3000\n });\n \n this.setQuestionsAndForm();\n } catch (error) {\n console.error('error in updateItem', error);\n this._snackBar.open('Error updating ' + this.mdl, 'Dismiss');\n }\n }\n\n getQuestionForKey(key: string, questions?: any) {\n let searchQs = questions || this.questions;\n let q = searchQs.find((x: any) => x.key == key);\n if (q) return q;\n\n let groupQs = searchQs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n console.log('searchQs checking groupQ', groupQ);\n q = this.getQuestionForKey(key, groupQ.questions);\n if (q) return q;\n }\n }\n return;\n }\n\n prepPayloadObj(obj?: any) {\n let prepObj = obj || this.payLoad;\n console.log('prepPayloadObj starting for prepObj', prepObj);\n for (let prop in prepObj) {\n let q = this.getQuestionForKey(prop);\n if (q) {\n console.log('q', q);\n if (q.controlType == \"formgroup\") {\n this.prepPayloadObj(prepObj[prop])\n }\n else {\n if (!q.required && prepObj[prop] == '') {\n delete prepObj[prop];\n }\n }\n }\n else {\n console.log('prepPayloadObj no q for prop', prop);\n }\n }\n }\n\n async createItem() {\n this.prepPayloadObj();\n console.log('createItem prepped payload', this.payLoad);\n try {\n let res = await this.ams.createItemPromise(this.mdl, this.payLoad);\n console.log('createItem finished res', res);\n if (!res) {\n this._snackBar.open('Error creating ' + this.mdl, 'Dismiss');\n return;\n }\n\n if (res.errors && res.errors.length > 0) {\n let messages: string[] = [];\n res.errors.forEach((err: any) => {\n messages.push(err.message);\n })\n this._snackBar.open(messages.join('\\n'), 'Dismiss');\n }\n else {\n this.item = res.data;\n this.itemOutput.emit(this.item);\n \n // Update the URL to reflect the new item ID\n if (this.item && this.item.id) {\n this.changePathIdParam(this.item.id);\n this.id = this.item.id; // Update the component's id property\n }\n \n // Show success message\n this._snackBar.open(`${this.mdl} created successfully`, 'Dismiss', {\n duration: 3000\n });\n \n this.setQuestionsAndForm();\n }\n } catch (error) {\n console.error('error in createItem', error);\n }\n }\n\n changePathIdParam(newParamValue: string) {\n const currentUrl = this.location.path();\n let paramValArr = currentUrl.split('/');\n let currentId = paramValArr[paramValArr.length -1];\n const newUrl = currentUrl.replace(currentId, newParamValue);\n this.location.replaceState(newUrl);\n }\n\n isValid(question?: any, q?: any, q2?: any) {\n if (question && q && q2) return this.form.get(question.key + '.' + q.key + '.' + q2.key);\n if (question && q && !q2) return this.form.get(question.key + '.' + q.key);\n if (question && !q && !q2) return this.form.get(question.key);\n return true;\n }\n}","<div class=\"dynamic-form-holder\">\n @if (form && questions) {\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n @for (question of questions; track question) {\n @if (this.switchInputs.includes(question.controlType) || this.materialInputs.includes(question.controlType) || this.refInputs.includes(question.controlType)) {\n <div class=\"form-row\">\n <snteam-dynamic-form-question [question]=\"question\" [formGroup]=\"form\"></snteam-dynamic-form-question>\n </div>\n }\n @if (this.formGroupInputs.includes(question.controlType)) {\n <div class=\"group-row\">\n <snteam-dynamic-form-group [question]=\"question\" [formGroup]=\"form\" [formGroupName]=\"question.key\"></snteam-dynamic-form-group>\n </div>\n }\n }\n @if (!hideSaveButton) {\n <div class=\"form-row\">\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"!form.valid\">Save</button>\n </div>\n }\n </form>\n } @else {\n <div class=\"loading\">Loading...</div>\n }\n\n @if(item && !hideRelationships){\n <div class=\"relationship-holder\">\n <snteam-record-relationships [model]=\"mdl\" [id]=\"id\" [item]=\"item\" [amplifyOutputs]=\"outputs\"></snteam-record-relationships>\n </div>\n }\n</div>","import { Component, OnInit, Input, inject, TemplateRef, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatListModule } from '@angular/material/list';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\n@Component({\n selector: 'snteam-list-view',\n standalone: true,\n imports: [CommonModule, MatListModule, MatButtonModule, MatIconModule],\n templateUrl: './list-view.component.html',\n styleUrl: './list-view.component.css'\n})\nexport class ListViewComponent implements OnInit {\n private ams = inject(AmplifyModelService);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n \n @Input() modelName: string = '';\n @Input() customItemTemplate?: TemplateRef<any>;\n @Input() hideNewButton: boolean = false;\n @Input() title?: string;\n @Input() useRouter: boolean = true;\n \n @Output() itemClick = new EventEmitter<any>();\n @Output() newClick = new EventEmitter<void>();\n @Output() itemsLoaded = new EventEmitter<any[]>();\n \n itemsArr: any[] = [];\n loading: boolean = true;\n error: string | null = null;\n\n ngOnInit(): void {\n // Check if modelName is provided via route parameter\n const routeModel = this.route.snapshot.paramMap.get('model');\n if (routeModel) {\n this.modelName = routeModel;\n }\n \n if (this.modelName) {\n this.listItems();\n }\n }\n\n listItems() {\n console.log('ListViewComponent listItems starting for model:', this.modelName);\n if (this.modelName) {\n this.loading = true;\n this.error = null;\n \n const observable = this.ams.listItemsForModel(this.modelName);\n if (observable) {\n observable.subscribe({\n next: ({ items, isSynced }) => {\n this.itemsArr = items;\n this.loading = false;\n this.itemsLoaded.emit(this.itemsArr);\n console.log('ListViewComponent items loaded:', this.itemsArr);\n },\n error: (err) => {\n console.error('Error loading items:', err);\n this.error = 'Failed to load items';\n this.loading = false;\n }\n });\n } else {\n this.error = 'Service not initialized';\n this.loading = false;\n }\n }\n }\n\n onItemClick(item: any) {\n console.log('ListViewComponent itemClick', item);\n this.itemClick.emit(item);\n \n // Navigate to form view if useRouter is enabled\n if (this.useRouter && item.id) {\n this.router.navigate(['/form/' + this.modelName + '/' + item.id]);\n }\n }\n\n onNewClick() {\n console.log('ListViewComponent newClick');\n if (this.useRouter) {\n this.router.navigate(['/form/' + this.modelName + '/-1']);\n } else {\n this.newClick.emit();\n }\n }\n\n getDisplayText(item: any): string {\n // Try common display fields\n return item.name || item.title || item.label || item.id || 'Unnamed Item';\n }\n\n refresh() {\n this.listItems();\n }\n}","<div class=\"list-view-container\">\n <div class=\"header\">\n <h2>{{ title || modelName }}</h2>\n @if (!hideNewButton) {\n <button mat-raised-button color=\"primary\" (click)=\"onNewClick()\">\n <mat-icon>add</mat-icon>\n New {{ modelName }}\n </button>\n }\n </div>\n\n @if (loading) {\n <div class=\"loading\">Loading {{ modelName }}...</div>\n }\n\n @if (error) {\n <div class=\"error\">\n {{ error }}\n <button mat-button (click)=\"refresh()\">Retry</button>\n </div>\n }\n\n @if (!loading && !error && itemsArr.length === 0) {\n <div class=\"empty-state\">\n <p>No {{ modelName }} found</p>\n @if (!hideNewButton) {\n <button mat-raised-button color=\"primary\" (click)=\"onNewClick()\">\n Create First {{ modelName }}\n </button>\n }\n </div>\n }\n\n @if (!loading && !error && itemsArr.length > 0) {\n <mat-list class=\"items-list\">\n @for (item of itemsArr; track item.id) {\n <mat-list-item (click)=\"onItemClick(item)\" class=\"clickable-item\">\n @if (customItemTemplate) {\n <ng-container [ngTemplateOutlet]=\"customItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n } @else {\n <span matListItemTitle>{{ getDisplayText(item) }}</span>\n <span matListItemLine>{{ item.description || item.createdAt | date }}</span>\n }\n </mat-list-item>\n }\n </mat-list>\n }\n</div>","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { ListViewComponent } from '../list-view/list-view.component';\nimport { QuestionControlService } from '../../services/question-control.service';\n\n@Component({\n selector: 'snteam-configurations',\n standalone: true,\n imports: [\n CommonModule,\n MatExpansionModule,\n MatIconModule,\n MatCardModule,\n MatButtonModule,\n ListViewComponent\n ],\n templateUrl: './configurations.component.html',\n styleUrl: './configurations.component.css'\n})\nexport class ConfigurationsComponent implements OnInit {\n @Input() amplifyOutputs?: any;\n\n private qcs = inject(QuestionControlService);\n\n // Track which models exist in the schema\n hasTableConfig = false;\n hasFormView = false;\n hasListView = false;\n\n ngOnInit() {\n this.checkAvailableModels();\n }\n\n get outputs() {\n return this.amplifyOutputs || (this.qcs as any).outputs;\n }\n\n checkAvailableModels() {\n if (!this.outputs || !this.outputs.data || !this.outputs.data.model_introspection) {\n console.warn('ConfigurationsComponent: No model introspection data available');\n return;\n }\n\n const models = this.outputs.data.model_introspection.models;\n console.log('ConfigurationsComponent: Available models:', Object.keys(models));\n\n this.hasTableConfig = 'TableConfig' in models;\n this.hasFormView = 'FormView' in models;\n this.hasListView = 'ListView' in models;\n\n console.log('ConfigurationsComponent: Model availability:', {\n TableConfig: this.hasTableConfig,\n FormView: this.hasFormView,\n ListView: this.hasListView\n });\n }\n}","<div class=\"configurations-container\">\n <h2>System Configurations</h2>\n \n <mat-accordion multi=\"true\">\n \n <!-- Table Configs Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>table_chart</mat-icon>\n <span class=\"panel-title\">Table Configs</span>\n </mat-panel-title>\n <mat-panel-description>\n Manage table configurations and settings\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasTableConfig) {\n <snteam-list-view \n [modelName]=\"'TableConfig'\"\n [useRouter]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>TableConfig Model Not Found</h3>\n <p>The TableConfig model is not available in your Amplify schema. Please add it to your data model to manage table configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- Form Views Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>dynamic_form</mat-icon>\n <span class=\"panel-title\">Form Views</span>\n </mat-panel-title>\n <mat-panel-description>\n Configure custom form layouts and field selections\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasFormView) {\n <snteam-list-view \n [modelName]=\"'FormView'\"\n [useRouter]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>FormView Model Not Found</h3>\n <p>The FormView model is not available in your Amplify schema. Please add it to your data model to create custom form configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- List Views Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>view_list</mat-icon>\n <span class=\"panel-title\">List Views</span>\n </mat-panel-title>\n <mat-panel-description>\n Customize list displays and column configurations\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasListView) {\n <snteam-list-view \n [modelName]=\"'ListView'\"\n [useRouter]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>ListView Model Not Found</h3>\n <p>The ListView model is not available in your Amplify schema. Please add it to your data model to create custom list view configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n </mat-accordion>\n</div>","/*\n * Public API Surface of @snteam/amplify-angular-core\n */\n\n// Legacy exports for backward compatibility\nexport * from './lib/amplify-angular-core';\n\n// ===== MAIN COMPONENTS =====\n// Primary components for building dynamic forms and list views\nexport * from './lib/components/dynamic-form/dynamic-form.component';\nexport * from './lib/components/list-view/list-view.component';\nexport * from './lib/components/configurations/configurations.component';\n\n// ===== SUPPORTING COMPONENTS =====\n// Components used internally by main components for form rendering\nexport * from './lib/components/dynamic-form-question/dynamic-form-question.component';\nexport * from './lib/components/dynamic-form-group/dynamic-form-group.component';\nexport * from './lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component';\nexport * from './lib/components/record-relationships/record-relationships.component';\nexport * from './lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component';\nexport * from './lib/components/add-relationship-dialog/add-relationship-dialog.component';\n\n// ===== SERVICES =====\n// Core services for Amplify integration and form building\nexport * from './lib/services/amplify-model.service';\nexport * from './lib/services/amplify-form-builder.service';\nexport * from './lib/services/question-control.service';\n\n// ===== CLASSES AND TYPES =====\n// Question classes for dynamic form generation\nexport * from './lib/classes/questions';\n// Validation utilities\nexport * from './lib/classes/validators';\n\n// ===== PIPES =====\n// Utility pipes for data transformation\nexport * from './lib/pipes/val-to-title.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.AmplifyModelService","i3","i4","i2.AmplifyFormBuilderService","i2","i1.AmplifyModelService","i5","i1.QuestionControlService","i6","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"snteam-amplify-angular-core.mjs","sources":["../../../projects/amplify-angular-core/src/lib/amplify-angular-core.ts","../../../projects/amplify-angular-core/src/lib/services/amplify-form-builder.service.ts","../../../projects/amplify-angular-core/src/lib/pipes/val-to-title.pipe.ts","../../../projects/amplify-angular-core/src/lib/services/amplify-model.service.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-question/dynamic-form-question.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-question/dynamic-form-question.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-group/dynamic-form-group.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form-group/dynamic-form-group.component.html","../../../projects/amplify-angular-core/src/lib/components/add-relationship-dialog/add-relationship-dialog.component.ts","../../../projects/amplify-angular-core/src/lib/components/add-relationship-dialog/add-relationship-dialog.component.html","../../../projects/amplify-angular-core/src/lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component.html","../../../projects/amplify-angular-core/src/lib/components/record-relationships/record-relationships.component.ts","../../../projects/amplify-angular-core/src/lib/components/record-relationships/record-relationships.component.html","../../../projects/amplify-angular-core/src/lib/classes/questions.ts","../../../projects/amplify-angular-core/src/lib/classes/validators.ts","../../../projects/amplify-angular-core/src/lib/services/question-control.service.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form/dynamic-form.component.ts","../../../projects/amplify-angular-core/src/lib/components/dynamic-form/dynamic-form.component.html","../../../projects/amplify-angular-core/src/lib/components/list-view/list-view.component.ts","../../../projects/amplify-angular-core/src/lib/components/list-view/list-view.component.html","../../../projects/amplify-angular-core/src/lib/components/configurations/configurations.component.ts","../../../projects/amplify-angular-core/src/lib/components/configurations/configurations.component.html","../../../projects/amplify-angular-core/src/public-api.ts","../../../projects/amplify-angular-core/src/snteam-amplify-angular-core.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'snteam-amplify-angular-core',\n imports: [],\n template: `\n <p>\n amplify-angular-core works!\n </p>\n `,\n styles: ``,\n})\nexport class AmplifyAngularCore {\n\n}\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, Validators, AbstractControl } from '@angular/forms';\nimport {\n QuestionBase,\n TextboxQuestion,\n NumberQuestion,\n DatePickerQuestion,\n DropdownQuestion,\n FormGroupQuestion\n} from '../classes/questions';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmplifyFormBuilderService {\n\n skipFields: string[] = ['createdAt', 'updatedAt'];\n\n materialInputs: string[] = [\n 'textbox',\n 'int',\n 'number',\n 'color',\n 'email',\n 'month',\n 'number',\n 'password',\n 'search',\n 'tel',\n 'text',\n 'time',\n 'url',\n 'week'\n ];\n \n switchInputs: string[] = ['dropdown'];\n refInputs: string[] = ['async-dropdown'];\n formGroupInputs: string[] = ['formgroup']; // we skip these and handle them in the form\n datePickerInputs = ['date', 'datepicker', 'datetime-local'];\n\n private outputs: any;\n\n constructor(private fb: FormBuilder) { }\n\n /**\n * Initialize the service with Amplify outputs\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeOutputs(outputs: any) {\n this.outputs = outputs;\n }\n\n getInputTypeFromFieldType(type: string): string | undefined {\n if (this.materialInputs.includes(type)) return 'materialInputs';\n if (this.switchInputs.includes(type)) return 'switchInputs';\n if (this.refInputs.includes(type)) return 'refInputs';\n if (this.formGroupInputs.includes(type)) return 'formGroupInputs';\n if (this.datePickerInputs.includes(type)) return 'datePickerInputs';\n\n return undefined;\n }\n\n getMaterialInputs(): string[] {\n return this.materialInputs;\n }\n\n getSwitchInputs(): string[] {\n return this.switchInputs;\n }\n\n getRefInputs(): string[] {\n return this.refInputs;\n }\n\n getErrorStrForControl(ctrl: AbstractControl, label?: string): string {\n const errorMap: { [key: string]: string } = {\n email: 'Please enter a valid email address',\n invalidPhoneNumber: 'Please enter a phone number in (111) 222-3333 format.',\n required: (label || 'This field') + ' is required.'\n };\n\n if (!ctrl.errors) return '';\n \n let errStrs: string[] = [];\n let keys = Object.keys(ctrl.errors);\n \n for (let err of keys) {\n if (errorMap[err]) {\n errStrs.push(errorMap[err]);\n } else {\n errStrs.push(`Invalid ${err}`);\n }\n }\n \n return errStrs.join(', ');\n }\n\n /** Shared Methods for FormControls **/\n getPathFromRoot(searchKey: string, controls: any, pathArr?: string[]): string {\n if (!pathArr) pathArr = [];\n\n const isInControls = Object.keys(controls).find(name => name === searchKey);\n if (isInControls) {\n pathArr.push(searchKey);\n return pathArr.join('.');\n } else {\n const tempArr: string[] = [];\n const entries = Object.entries(controls);\n \n for (let e of entries) {\n let controlName = e[0];\n let controlObj = e[1];\n \n if (controlObj instanceof FormGroup) {\n console.log('getPathFromRoot controlName', typeof controlName, controlName, 'controlObj', controlObj);\n tempArr.push(controlName);\n console.log('getPathFromRoot', controlName, 'is a FormGroup in path tempArr', tempArr);\n \n const childControls = (controls[controlName] as FormGroup).controls;\n console.log('getPathFromRoot childControls', childControls);\n \n let childPath = this.getPathFromRoot(searchKey, childControls, [...pathArr, ...tempArr]);\n if (childPath !== '') return childPath;\n }\n }\n return '';\n }\n }\n\n /** FormBuilder Methods **/\n\n private _getFormGroupFromFieldsArr(fields: any): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n console.log('_getFormGroupFromFieldsArr fields', fields);\n const formGroup = this.fb.group({});\n const fieldsArr = Object.values(fields);\n \n fieldsArr.forEach((field: any) => {\n if (this.skipFields.indexOf(field.name) > -1) return;\n\n if (typeof field.type === 'object') {\n if (field.type.model) {\n formGroup.addControl(field.name, this._getControlForField(field));\n }\n if (field.type.nonModel) {\n formGroup.addControl(field.name, this._getGroupControlForNonModel(field));\n }\n } else {\n formGroup.addControl(field.name, this._getControlForField(field));\n }\n });\n \n return formGroup;\n }\n\n private _getGroupControlForNonModel(field: any): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n const nonModel = field.type.nonModel;\n const fields = this.outputs.data.model_introspection.nonModels[nonModel as keyof typeof this.outputs.data.model_introspection.nonModels].fields;\n return this._getFormGroupFromFieldsArr(fields);\n }\n\n private _getControlForField(field: any): FormControl {\n const validators = field.required ? [Validators.required] : [];\n return new FormControl(field.value || '', validators);\n }\n\n buildFormForModel(model: string): FormGroup {\n if (!this.outputs) {\n console.error('AmplifyFormBuilderService: Outputs not initialized. Call initializeOutputs() first.');\n return this.fb.group({});\n }\n\n const config = this.outputs.data.model_introspection.models[model as keyof typeof this.outputs.data.model_introspection.models].fields;\n const formGroup = this._getFormGroupFromFieldsArr(config);\n return formGroup;\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'valToTitle',\n standalone: true\n})\nexport class ValToTitlePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value) {\n return '';\n }\n\n let fixed = value.replace(new RegExp('_', 'g'), ' ').split(' ')\n .map(w => w.length > 0 ? w[0].toUpperCase() + w.substring(1).toLowerCase() : '')\n .join(' ');\n\n return fixed;\n }\n}","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AmplifyModelService {\n\n private client: any;\n\n constructor() { \n // Client will be initialized when Amplify is configured by the consuming application\n }\n\n /**\n * Initialize the service with the Amplify client\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeClient<T>(schema?: T) {\n // Dynamic import to avoid build-time dependency\n try {\n // This will be provided by the consuming application\n this.client = (globalThis as any).amplifyClient;\n if (!this.client) {\n console.warn('AmplifyModelService: No client provided. Call with generateClient result.');\n }\n } catch (error) {\n console.error('Failed to initialize Amplify client:', error);\n }\n }\n\n /**\n * Set the client directly (for consuming applications)\n */\n setClient(client: any) {\n this.client = client;\n }\n\n getMenuLinksFromModels(outputs: any, config?: { skipModels?: string[] }): any[] {\n const defaultConfig = { skipModels: ['ServiceCustomer', 'ServiceProduct', 'Todo'] };\n const finalConfig = { ...defaultConfig, ...config };\n\n let pageButtons: any[] = [\n { label: 'Home', route: '/' },\n { label: 'Configurations', route: '/configurations' }\n ];\n let models = outputs.data.model_introspection.models;\n\n Object.values(models).forEach((model: any) => {\n if (finalConfig.skipModels!.includes(model.name)) return;\n console.log('model', model);\n pageButtons.push({ label: model.name, route: '/list/' + model.name });\n });\n console.log('models', models);\n\n return pageButtons;\n }\n\n /**\n * TODO: Make this generate dynamically using refModel Names and types\n * TODO: Bring the refModel generation in here.\n * Edit this function with form fields...\n * \n * ... probably don't need this...\n */\n getEmptyObjectForModel(model: string): any {\n switch (model) {\n case 'Customer':\n return {\n name: '',\n contact: {},\n services: [],\n contact_preference: '',\n notes: [],\n };\n case 'Service':\n return {\n cost: 0.00,\n price: 0.00,\n customers: [],\n products: [],\n id: '',\n title: ''\n };\n default:\n return {};\n }\n }\n\n getRelationshipChoices(config: any, selectedOptions?: any[]): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter: any = {};\n /*if (selectedOptions){ //TODO: FILTER OUT SELECTED ITEMS\n filter = {id: {nin: [...selectedOptions]}};\n }*/\n console.log('getRelationshipChoices filter', filter);\n\n try {\n const modelName = config.partnerModelName;\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ filter: filter });\n } else {\n console.error(`Model ${modelName} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + config.partnerModelName + 'items', error);\n return null;\n }\n }\n\n getRefChoices(config: any, itemId: string, selectedOptions?: any[]): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter = this.getRelationshipFilter(config, itemId, selectedOptions);\n console.log('getRefChoices getRelationshipFilter model', config.partnerModelName, 'filter', filter);\n \n try {\n const modelName = config.partnerModelName;\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ filter: filter });\n } else {\n console.error(`Model ${modelName} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + config.partnerModelName + 'items', error);\n return null;\n }\n }\n\n async deleteRelationship(relModel: string, relId: string): Promise<any> {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let obj = { id: relId };\n \n if (this.client.models[relModel]) {\n return this.client.models[relModel].delete(obj);\n } else {\n console.error(`Relationship model ${relModel} not found in client`);\n return null;\n }\n }\n\n createRelationship(relModel: string, relItem: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('createRelationship starting for relModel', relModel, 'relItem', relItem);\n \n if (this.client.models[relModel]) {\n return this.client.models[relModel].create(relItem);\n } else {\n console.error(`Relationship model ${relModel} not found in client`);\n return null;\n }\n }\n\n getRelationshipFilter(config: any, baseId?: string, removeIds?: string[]): any {\n let condition: any = {};\n condition[config.associatedWith] = { eq: baseId };\n \n if (removeIds && removeIds.length > 0) {\n let conditionArr = [\n condition,\n { id: { ne: removeIds } }\n ];\n let andCondition = { and: conditionArr };\n console.log('getRelationshipFilter has andCondition', andCondition);\n return andCondition;\n } else {\n condition[config.associatedWith] = { eq: baseId };\n console.log('getRelationshipFilter config', config, 'condition', condition);\n return condition;\n }\n }\n\n getAmplifySelectionSet(config: any, baseId: string): any {\n switch (config.fieldName) {\n case 'service':\n return ['id', 'service.title', 'service.price', 'service.id'] as const;\n case 'customer':\n return ['id', 'customer.*'] as const;\n default: \n return [];\n }\n }\n\n setRelatedSub(config: any, baseId: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter = this.getRelationshipFilter(config, baseId);\n const modelName = config.relationshipModelName;\n \n if (this.client.models[modelName]) {\n return this.client.models[modelName].onCreate({ filter: filter });\n } else {\n console.error(`Relationship model ${modelName} not found in client`);\n return null;\n }\n }\n\n /**\n * @param config {object} - see dynamic-relationship-builder.component getDetailsForManyToMany() for example of building config\n */\n getRelatedItems(config: any, baseId: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n let filter = this.getRelationshipFilter(config, baseId);\n let selectionSet = this.getAmplifySelectionSet(config, baseId);\n const modelName = config.relationshipModelName;\n\n if (this.client.models[modelName]) {\n return this.client.models[modelName].observeQuery({ \n filter: filter, \n selectionSet: [...selectionSet] \n });\n } else {\n console.error(`Relationship model ${modelName} not found in client`);\n return null;\n }\n }\n\n createItemPromise(model: string, payload: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n if (this.client.models[model]) {\n return this.client.models[model].create(payload);\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n updateItemForModel(model: string, payload: any): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n if (this.client.models[model]) {\n return this.client.models[model].update(payload);\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n getItemForModel(model: string, id: string): Promise<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('AmplifyModelService: Getting item for model:', model, 'id:', id);\n\n if (this.client.models[model]) {\n try {\n return this.client.models[model].get({ id: id });\n } catch (error) {\n console.error(`AmplifyModelService: Error getting item for model ${model}:`, error);\n throw error;\n }\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n }\n\n listItemsForModel(model: string): Observable<any> | null {\n if (!this.client) {\n console.error('AmplifyModelService: Client not initialized. Call initializeClient() first.');\n return null;\n }\n\n console.log('this.listItems starting');\n \n try {\n if (this.client.models[model]) {\n return this.client.models[model].observeQuery();\n } else {\n console.error(`Model ${model} not found in client`);\n return null;\n }\n } catch (error) {\n console.error('error fetching ' + model, error);\n return null;\n }\n }\n}","import { ChangeDetectionStrategy, Component, Input, OnInit, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n FormControl,\n FormControlName,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { CommonModule } from '@angular/common';\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\nimport { QuestionBase } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { provideNativeDateAdapter } from '@angular/material/core';\n\n\n@Component({\n selector: 'snteam-dynamic-form-question',\n standalone: true,\n providers: [provideNativeDateAdapter()],\n imports: [CommonModule, ReactiveFormsModule, ValToTitlePipe, MatFormFieldModule, MatInputModule, MatSelectModule, MatDatepickerModule],\n templateUrl: './dynamic-form-question.component.html',\n styleUrl: './dynamic-form-question.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DynamicFormQuestionComponent implements OnInit {\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n formControlPath: string = '';\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n refInputs: string[] = [];\n form!: any;\n ctrl!: any;\n items$!: Observable<any>\n\n afbs = inject(AmplifyFormBuilderService);\n\n constructor(private rootFormGroup: FormGroupDirective, private ams: AmplifyModelService) { }\n\n ngOnInit() {\n console.log('DynamicFormQuestionComponent question', this.question);\n this.form = this.rootFormGroup.control;\n this.ctrl = this.rootFormGroup.control.get(this.question.key);\n\n if (this.question.controlType == 'async-dropdown') {\n console.log('DynamicFormQuestionComponent has async-dropdown!');\n //this.items$ = this.ams.getRefChoices(this.question.targetModel);\n }\n }\n\n showError(): string {\n return this.afbs.getErrorStrForControl(this.ctrl, this.question.label);\n }\n}","<form [formGroup]=\"form\">\n @switch (afbs.getInputTypeFromFieldType(question.controlType)) {\n @case ('materialInputs'){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\">\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('datePickerInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [matDatepicker]=\"picker\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('switchInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @for (opt of question.options; track opt) {\n <mat-option [value]=\"opt.key\">{{opt.value | valToTitle}}</mat-option>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('refInputs') {\n @if (question.multiple){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\" multiple>\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n @else {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n }\n }\n</form>","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n FormControl,\n FormControlName,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { CommonModule } from '@angular/common';\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\nimport { QuestionBase } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport {MatSelectModule} from '@angular/material/select';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { provideNativeDateAdapter } from '@angular/material/core';\n\n\n@Component({\n selector: 'snteam-dynamic-nested-form-question',\n standalone: true,\n providers: [provideNativeDateAdapter()],\n imports: [CommonModule, ReactiveFormsModule, ValToTitlePipe, MatFormFieldModule, MatInputModule, MatSelectModule, MatDatepickerModule],\n templateUrl: './dynamic-nested-form-question.component.html',\n styleUrl: './dynamic-nested-form-question.component.css'\n})\nexport class DynamicNestedFormQuestionComponent {\n\n @Input() groupName!: string;\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n formControlPath: string = '';\n form!: any;\n ctrl!: any;\n items$!: Observable<any>;\n afbs = inject(AmplifyFormBuilderService);\n\n\n constructor(private rootFormGroup: FormGroupDirective) {}\n\n ngOnInit() {\n console.log('DynamicNestedFormQuestionComponent question', this.question);\n var searchKey = this.groupName;\n var controls = this.rootFormGroup.control.controls;\n var pathStr = this.afbs.getPathFromRoot(searchKey, controls)//this.getPathFromRoot();\n this.form = this.rootFormGroup.control;\n this.formControlPath = pathStr + '.' + this.question.key;\n this.ctrl = this.rootFormGroup.control.get(this.formControlPath);\n if (this.question.key == 'services') console.log('DynamicNestedFormQuestionComponent has services');\n }\n\n showError():string {\n return this.afbs.getErrorStrForControl(this.ctrl, this.question.label);\n }\n}","<form autocomplete=\"off\" [formGroup]=\"formGroup\">\n <div [formGroupName]=\"groupName\">\n\n @switch (afbs.getInputTypeFromFieldType(question.controlType)) {\n @case ('materialInputs'){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [formControlName]=\"question.key\" [id]=\"question.key\" [type]=\"question.type\">\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('datePickerInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <input matInput [matDatepicker]=\"picker\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('switchInputs') {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @for (opt of question.options; track opt) {\n <mat-option [value]=\"opt.key\">{{opt.value | valToTitle}}</mat-option>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n\n @case ('refInputs') {\n @if (question.multiple){\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\" multiple>\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n @else {\n <mat-form-field class=\"full-width\" appearance=\"outline\">\n <mat-label [attr.for]=\"question.key\">{{ question.label }}</mat-label>\n <mat-select [id]=\"question.key\" [formControlName]=\"question.key\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title | valToTitle}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n @if (ctrl.errors) {\n <mat-error>{{showError()}}</mat-error>\n }\n </mat-form-field>\n }\n }\n }\n\n\n </div>\n</form>","import { Component, Input, OnInit } from '@angular/core';\nimport {\n FormControl,\n FormGroupDirective,\n NgForm,\n Validators,\n FormsModule,\n ReactiveFormsModule,\n FormGroup,\n AbstractControl\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\nimport { ValToTitlePipe } from '../../pipes/val-to-title.pipe';\n\nimport { MatDividerModule } from '@angular/material/divider';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { DynamicNestedFormQuestionComponent } from '../dynamic-nested-form-question/dynamic-nested-form-question.component';\n\n@Component({\n selector: 'snteam-dynamic-form-group',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule,\n MatDividerModule,\n ValToTitlePipe, DynamicNestedFormQuestionComponent],\n templateUrl: './dynamic-form-group.component.html',\n styleUrl: './dynamic-form-group.component.css'\n})\nexport class DynamicFormGroupComponent {\n @Input() formGroupName!: string;\n @Input() question!: any; //QuestionBase<string>;\n @Input() formGroup!: FormGroup;\n\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n refInputs: string[] = [];\n formGroupInputs: string[] = ['formgroup'];\n form!: any;\n ctrl!: any;\n\n constructor(private rootFormGroup: FormGroupDirective, private afbs: AmplifyFormBuilderService) { }\n\n getControlName(c: AbstractControl): string | null {\n if (c.parent) {\n const formGroup: any = c.parent.controls;\n return Object.keys(formGroup).find(name => c === formGroup[name]) || null;\n }\n return null;\n }\n\n getPathFromRoot(controls?: any, pathArr?: string[]): string {\n if (!controls) controls = this.rootFormGroup.control.controls;\n if (!pathArr) pathArr = [];\n\n var isInControls = Object.keys(controls).find(name => name === this.question.key);\n if (isInControls) {\n pathArr.push(this.question.key);\n return pathArr.join('.');\n } else {\n var tempArr: string[] = [];\n var entries = Object.entries(controls);\n for (let e of entries) {\n let controlName = e[0];\n let controlObj = e[1];\n if (controlObj instanceof FormGroup) {\n //if (tempArr.length > 10) return '';\n tempArr.push(controlName);\n var childControls = controls[controlName].controls;\n let childPath = this.getPathFromRoot(childControls, tempArr);\n if (childPath != '') return childPath;\n };\n }\n return '';\n }\n\n return '';\n\n }\n\n ngOnInit() {\n //console.log('DynamicFormGroupComponent key starting:', this.question.key);\n\n this.materialInputs = this.afbs.getMaterialInputs();\n this.switchInputs = this.afbs.getSwitchInputs();\n this.refInputs = this.afbs.getRefInputs();\n\n if (this.formGroupName) {\n var searchKey = this.question.key;\n var controls = this.rootFormGroup.control.controls;\n var pathStr = this.afbs.getPathFromRoot(searchKey, controls)//this.getPathFromRoot();\n this.form = this.rootFormGroup.control.get(pathStr) as FormGroup;\n var controlName = this.getControlName(this.form);\n this.ctrl = this.rootFormGroup.control.get(this.question.key);\n console.log('DynamicFormGroupComponent init vals:', {\n formGroupName: this.formGroupName,\n question: this.question,\n key: this.question.key,\n searchKey: searchKey,\n controls: controls,\n pathStr: pathStr,\n controlName: controlName,\n ctrl: this.ctrl\n })\n }\n else {\n //console.log('DynamicFormGroupComponent will get main control form');\n this.form = this.rootFormGroup.control;\n }\n //console.log('DynamicFormGroupComponent question', this.question, 'form', this.form, 'formGroupName', typeof this.formGroupName, this.formGroupName);\n }\n}","<form autocomplete=\"off\" [formGroup]=\"form\">\n <h2>{{question.key | valToTitle}}</h2>\n <mat-divider></mat-divider>\n @for (q of $any(question).questions; track q) {\n @if (q.controlType != 'formgroup') {\n <div class=\"form-row\">\n <snteam-dynamic-nested-form-question [question]=\"q\" [formGroup]=\"formGroup\" [groupName]=\"question.key\"></snteam-dynamic-nested-form-question>\n </div>\n }\n @if (q.controlType == 'formgroup') {\n <div class=\"group-row\">\n <snteam-dynamic-form-group [question]=\"q\" [formGroup]=\"form\" [formGroupName]=\"q.key\"></snteam-dynamic-form-group>\n </div>\n }\n }\n <mat-divider></mat-divider>\n</form>","import { ChangeDetectionStrategy, Component, OnInit, inject, model, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Observable } from 'rxjs';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nexport interface DialogData {\n modelItem: any;\n rel: any;\n selectedItems: any[];\n}\n\n@Component({\n selector: 'snteam-add-relationship-dialog',\n standalone: true,\n imports: [\n CommonModule,\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n MatSelectModule,\n MatButtonModule,\n MatDialogTitle,\n MatDialogContent,\n MatDialogActions,\n MatDialogClose,],\n templateUrl: './add-relationship-dialog.component.html',\n styleUrl: './add-relationship-dialog.component.css'\n})\nexport class AddRelationshipDialogComponent implements OnInit {\n readonly dialogRef = inject(MatDialogRef<AddRelationshipDialogComponent>);\n readonly data = inject<DialogData>(MAT_DIALOG_DATA);\n readonly modelItem = model(this.data.modelItem);\n private ams = inject(AmplifyModelService);\n items$!: Observable<any>;\n\n ngOnInit() {\n console.log('AddRelationshipDialogComponent init this.data', this.data);\n let selectedIdsArr: string[] = [];\n if (this.data.selectedItems && this.data.selectedItems.length > 0){\n this.data.selectedItems.forEach(item => {\n console.log('item', item, 'this.data.rel', this.data.rel);\n selectedIdsArr.push(item[this.data.rel.fieldName].id);\n });\n }\n console.log('AddRelationshipDialogComponent selectedIdsArr', selectedIdsArr);\n const relationshipChoices = this.ams.getRelationshipChoices(this.data.rel, selectedIdsArr);\n if (relationshipChoices) {\n this.items$ = relationshipChoices;\n }\n console.log('AddRelationshipDialogComponent this.items$', this.items$);\n }\n\n onNoClick(): void {\n this.dialogRef.close();\n }\n}","<h2 mat-dialog-title>Add New {{data.rel.partnerModelName}}</h2>\n<mat-dialog-content>\n <mat-select [(ngModel)]=\"modelItem\">\n @if (items$ | async; as items) {\n @for (item of items.items; track item?.id) {\n <mat-option [value]=\"item\">{{item.title}}</mat-option>\n }\n } @else {\n <p>Loading Items...</p>\n }\n </mat-select>\n</mat-dialog-content>\n<mat-dialog-actions>\n <button mat-button (click)=\"onNoClick()\">Cancel</button>\n <button mat-button [mat-dialog-close]=\"modelItem()\" cdkFocusInitial>Add</button>\n</mat-dialog-actions>","import { Component, Input, OnInit, ChangeDetectionStrategy, inject, model, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nimport { AddRelationshipDialogComponent } from '../add-relationship-dialog/add-relationship-dialog.component';\n\n// Note: These imports will need to be updated based on the actual Amplify setup in the consuming application\n// import type { Schema } from '../../../../amplify/data/resource';\n// import outputs from '../../../../amplify_outputs.json';\n\n@Component({\n selector: 'snteam-dynamic-relationship-builder',\n standalone: true,\n imports: [MatToolbarModule, MatButtonModule, MatIconModule, MatFormFieldModule, MatInputModule, MatListModule,\n FormsModule,\n CommonModule],\n templateUrl: './dynamic-relationship-builder.component.html',\n styleUrl: './dynamic-relationship-builder.component.css'\n})\nexport class DynamicRelationshipBuilderComponent implements OnInit {\n @Input() m2m!: any;\n @Input() item!: any;\n @Input() model!: string;\n\n m2mItems: any;\n\n constructor(private ams: AmplifyModelService) { }\n\n modelItem!: any;// = signal('');\n readonly dialog = inject(MatDialog);\n\n ngOnInit() {\n console.log('DynamicRelationshipBuilderComponent model', this.m2m);\n this.listItems();\n this.setCreateSubscription();\n }\n\n async perhapsAddM2MItem (item: any){\n let m2mItem:any = {id: item.id};\n const { data: retItem } = await item[this.m2m.fieldName]();\n m2mItem[this.m2m.fieldName] = retItem;\n\n let existingInd = this.m2mItems.findIndex((x: any) => x.id == item.id);\n if (existingInd > -1){\n if (!this.m2mItems[existingInd][this.m2m.fieldName]) {\n console.log('would delete existing', this.m2mItems[existingInd]);\n this.m2mItems.splice(existingInd, 1);\n }\n }\n this.m2mItems.push(m2mItem);\n //console.log('perhapsAddM2MItem', item, 'm2m', this.m2m);\n }\n\n setCreateSubscription() {\n this.ams.setRelatedSub(this.m2m, this.item.id)?.subscribe({\n next: (data) => this.perhapsAddM2MItem(data),//(console.log('setRelatedSub m2mItems', this.m2mItems, 'data', data),\n error: (error) => console.warn(error),\n });\n }\n\n listItems() {\n this.ams.getRelatedItems(this.m2m, this.item.id)?.subscribe({\n next: ({ items, isSynced }) => {\n this.m2mItems = items;\n },\n });\n }\n\n /**\n Customize this function to include all desired models from your file\n */\n setModelItem(model?: string) {\n let mdl = model || this.model;\n console.log('setModelItem mdl', mdl);\n this.modelItem = signal<any>(this.ams.getEmptyObjectForModel(mdl));\n }\n\n async deleteRelatedItem(item: any) {\n console.log('deleteRelatedItem for item', item, 'm2m', this.m2m);\n //this.ams.deleteRelationship(this.m2m.relationshipModelName, item.id);\n await this.ams.deleteRelationship(this.m2m.relationshipModelName, item.id);\n }\n\n openDialog(rel: any): void {\n console.log('openDialog clicked for rel', rel);\n this.setModelItem(rel.partnerModelName);\n\n const dialogRef = this.dialog.open(AddRelationshipDialogComponent, {\n data: { rel: rel, modelItem: this.modelItem(), selectedItems: this.m2mItems },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n if (result) this.handleDialogResult(result, rel);\n });\n }\n\n handleDialogResult(result: any, rel: any) {\n if (!result) return;\n console.log('handleDialogResult', result, 'rel', rel);\n if (result !== undefined) {\n this.modelItem.set(result);\n }\n\n let relIdName = rel.partnerModelName.toLowerCase() + 'Id';\n let thisIdName = rel.baseModelName.toLowerCase() + 'Id';\n\n let newRelObj: any = {};\n newRelObj[relIdName] = result.id;\n newRelObj[thisIdName] = this.item.id;\n\n this.ams.createRelationship(rel.relationshipModelName, newRelObj);\n }\n}","<div class=\"record-relationship-holder\">\n <div class=\"relationship-type\">\n <mat-toolbar>\n <span>{{m2m.partnerModelName}} Management</span>\n <span class=\"rel-title-spacer\"></span>\n <button mat-icon-button attr.aria-label=\"Add {{m2m.name}}\" (click)=\"openDialog(m2m)\">\n <mat-icon>add</mat-icon>\n </button>\n </mat-toolbar>\n @if(m2mItems && m2mItems.length > 0){\n <mat-list>\n @for (item of m2mItems; track item?.id) {\n @if(item[m2m.fieldName]){\n <mat-list-item>\n <span matListItemTitle>{{item[m2m.fieldName].name || item[m2m.fieldName].title}}</span>\n <button mat-icon-button (click)=\"deleteRelatedItem(item)\" matListItemMeta>\n <mat-icon>delete</mat-icon>\n </button>\n </mat-list-item>\n }\n }\n </mat-list>\n }\n @else {\n Add your first {{m2m.partnerModelName}}\n }\n </div>\n</div>","import { Component, Input, OnInit, ChangeDetectionStrategy, inject, model, signal } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\nimport {\n MAT_DIALOG_DATA,\n MatDialog,\n MatDialogActions,\n MatDialogClose,\n MatDialogContent,\n MatDialogRef,\n MatDialogTitle,\n} from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\nimport { DynamicRelationshipBuilderComponent } from '../dynamic-relationship-builder/dynamic-relationship-builder.component';\nimport { AddRelationshipDialogComponent } from '../add-relationship-dialog/add-relationship-dialog.component';\n\n// Note: These imports will need to be updated based on the actual Amplify setup in the consuming application\n// import type { Schema } from '../../../../amplify/data/resource';\n// import outputs from '../../../../amplify_outputs.json';\n\n@Component({\n selector: 'snteam-record-relationships',\n standalone: true,\n imports: [MatToolbarModule, MatButtonModule, MatIconModule, MatFormFieldModule, MatInputModule, MatListModule,\n DynamicRelationshipBuilderComponent,\n FormsModule,\n CommonModule],\n templateUrl: './record-relationships.component.html',\n styleUrl: './record-relationships.component.css'\n})\nexport class RecordRelationshipsComponent implements OnInit {\n\n @Input() model: string = '';\n @Input() id?: string;\n @Input() item?: any;\n @Input() amplifyOutputs?: any; // Allow injection of amplify outputs\n\n constructor(private ams: AmplifyModelService) { }\n\n m2mDetailArrays: any[] = [];\n\n //readonly animal = signal('');\n modelItem!: any;// = signal('');\n readonly dialog = inject(MatDialog);\n\n ngOnInit() {\n console.log('RecordRelationshipsComponent: Starting ngOnInit for model:', this.model, 'id:', this.id, 'item:', this.item);\n\n if (!this.amplifyOutputs) {\n console.warn('RecordRelationshipsComponent: amplifyOutputs not provided. Component may not function correctly.');\n return;\n }\n\n console.log('RecordRelationshipsComponent: Processing model introspection for model:', this.model);\n console.log('RecordRelationshipsComponent: Available models:', Object.keys(this.amplifyOutputs.data.model_introspection.models));\n \n const modelData = this.amplifyOutputs.data.model_introspection.models[this.model as keyof typeof this.amplifyOutputs.data.model_introspection.models];\n if (!modelData) {\n console.error('RecordRelationshipsComponent: Model not found:', this.model);\n return;\n }\n \n console.log('RecordRelationshipsComponent: Model data found:', modelData);\n var fields = modelData.fields;\n var values = Object.values(fields);\n\n console.log('RecordRelationshipsComponent: Processing', values.length, 'fields');\n\n for (var v in values) {\n var fieldObj: any = values[v];\n console.log('RecordRelationshipsComponent: Processing field:', fieldObj.name, 'type:', fieldObj.type);\n \n if (typeof fieldObj.type != 'object') {\n console.log('RecordRelationshipsComponent: Skipping non-object field:', fieldObj.name);\n continue;\n }\n if (!fieldObj.type.model) {\n console.log('RecordRelationshipsComponent: Skipping non-model field:', fieldObj.name);\n continue;\n }\n\n // Skip BELONGS_TO relationships - only process HAS_MANY relationships\n if (fieldObj.association && fieldObj.association.connectionType === 'BELONGS_TO') {\n console.log('RecordRelationshipsComponent: Skipping BELONGS_TO relationship field:', fieldObj.name);\n continue;\n }\n\n console.log('RecordRelationshipsComponent: Found relationship field:', fieldObj.name, 'to model:', fieldObj.type.model);\n\n try {\n let m2mDetails = this.getDetailsForManyToMany(fieldObj, this.model);\n console.log('RecordRelationshipsComponent: m2mDetails result:', m2mDetails);\n\n if (m2mDetails) {\n this.m2mDetailArrays.push(m2mDetails);\n console.log('RecordRelationshipsComponent: Added to m2mDetailArrays, total count:', this.m2mDetailArrays.length);\n }\n } catch (error) {\n console.error('RecordRelationshipsComponent: Error processing field:', fieldObj.name, 'Error:', error);\n }\n }\n console.log('RecordRelationshipsComponent: Final m2mDetailArrays:', this.m2mDetailArrays);\n }\n\n /**\n Customize this function to include all desired models from your file\n */\n setModelItem(model?: string) {\n let mdl = model || this.model;\n console.log('setModelItem mdl', mdl);\n signal<any>(this.ams.getEmptyObjectForModel(mdl));\n }\n\n getFieldNameForAssociatedWithModel(relationshipModelName: string, associatedWith: string) {\n if (!this.amplifyOutputs) return;\n \n var relationshipModel = this.amplifyOutputs.data.model_introspection.models[relationshipModelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n console.log('getFieldNameForAssociatedWithModel relationshipModel', relationshipModel);\n var fieldVals = Object.values(relationshipModel);\n for (let field of fieldVals) {\n const fieldAny = field as any;\n console.log('getFieldNameForAssociatedWithModel field', field);\n if (!fieldAny.association) continue;\n if (!fieldAny.association.targetNames || !Array.isArray(fieldAny.association.targetNames)) continue;\n if (fieldAny.association.targetNames.indexOf(associatedWith) === -1) continue;\n // there should only be two fields with associations.\n // if we get here we are in the field we want\n return fieldAny.name;\n }\n }\n\n getDetailsForManyToMany(fieldObj: any, baseModelName: string): any {\n if (!this.amplifyOutputs) return null;\n \n console.log('RecordRelationshipsComponent: getDetailsForManyToMany starting for field:', fieldObj.name, 'baseModel:', baseModelName);\n \n let relationshipModelName = fieldObj.type.model;\n console.log('RecordRelationshipsComponent: relationshipModelName:', relationshipModelName);\n \n // Add null check for associatedWith\n if (!fieldObj.association || !fieldObj.association.associatedWith || !Array.isArray(fieldObj.association.associatedWith) || fieldObj.association.associatedWith.length === 0) {\n console.warn('RecordRelationshipsComponent: associatedWith is not available or empty for field', fieldObj.name, 'association:', fieldObj.association);\n return null;\n }\n \n let associatedWith = fieldObj.association.associatedWith[0];\n console.log('RecordRelationshipsComponent: associatedWith:', associatedWith);\n\n console.log('RecordRelationshipsComponent: Calling getFieldNameForAssociatedWithModel');\n let fieldName = this.getFieldNameForAssociatedWithModel(relationshipModelName, associatedWith);\n console.log('RecordRelationshipsComponent: fieldName result:', fieldName);\n\n // TODO: MAKE THIS AUTO REFRESH... maybe make this a signal?\n let ret: any = {\n relationshipModelName: relationshipModelName,\n baseModelName: baseModelName,\n fieldName: fieldName,\n associatedWith: associatedWith\n }\n \n console.log('RecordRelationshipsComponent: Getting relationship model fields for:', relationshipModelName);\n var relationshipModel = this.amplifyOutputs.data.model_introspection.models[relationshipModelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n console.log('RecordRelationshipsComponent: relationshipModel fields:', relationshipModel);\n\n var vals = Object.values(relationshipModel);\n console.log('RecordRelationshipsComponent: Processing', vals.length, 'relationship model fields');\n \n for (var i in vals) {\n const val: any = vals[i];\n console.log('RecordRelationshipsComponent: Processing relationship field:', val.name, 'type:', val.type);\n \n if (typeof val.type != 'object') {\n console.log('RecordRelationshipsComponent: Skipping non-object relationship field:', val.name);\n continue;\n }\n if (!val.type.model) {\n console.log('RecordRelationshipsComponent: Skipping non-model relationship field:', val.name);\n continue;\n }\n if (val.type.model == baseModelName) {\n console.log('RecordRelationshipsComponent: Skipping self-reference field:', val.name);\n continue;\n }\n\n console.log('RecordRelationshipsComponent: Found partner model field:', val.name, 'model:', val.type.model);\n var modelName = val.type.model;\n let refModel = this.amplifyOutputs.data.model_introspection.models[modelName as keyof typeof this.amplifyOutputs.data.model_introspection.models].fields;\n console.log('RecordRelationshipsComponent: Partner model fields:', refModel);\n\n ret.partnerModelName = modelName;\n console.log('RecordRelationshipsComponent: Set partnerModelName to:', modelName);\n //this.ams.getRelatedItems(ret, this.item.id);\n }\n console.log('RecordRelationshipsComponent: getDetailsForManyToMany final result:', ret);\n return ret;\n }\n\n deleteRelatedItem(item: any) {\n console.log('deleteRelatedItem for item', item);\n }\n\n openDialog(rel: any): void {\n console.log('openDialog clicked for rel', rel);\n this.setModelItem(rel.partnerModelName);\n\n const dialogRef = this.dialog.open(AddRelationshipDialogComponent, {\n data: { rel: rel, modelItem: this.modelItem() },\n });\n\n dialogRef.afterClosed().subscribe(result => {\n console.log('The dialog was closed');\n this.handleDialogResult(result, rel);\n });\n }\n\n handleDialogResult(result: any, rel: any) {\n console.log('handleDialogResult', result, 'rel', rel);\n if (result !== undefined) {\n this.modelItem.set(result);\n }\n\n let relIdName = rel.partnerModelName.toLowerCase() + 'Id';\n let thisIdName = rel.baseModelName.toLowerCase() + 'Id';\n\n let newRelObj: any = {};\n newRelObj[relIdName] = result.id;\n newRelObj[thisIdName] = this.id || this.item.id;\n\n this.ams.createRelationship(rel.relationshipModelName, newRelObj);\n }\n}","<div class=\"relationship-builder-holder\">\n @if(item){\n <div class=\"relationship-builder\">\n @for (m2m of m2mDetailArrays; track m2m) {\n <snteam-dynamic-relationship-builder [m2m]=\"m2m\" [item]=\"item\" [model]=\"model\"></snteam-dynamic-relationship-builder>\n }\n </div>\n }\n @else {\n <div class=\"blank-relationship-builder\">Create the {{model}} first, then add relationships</div>\n }\n</div>","import { FormControl, FormGroup, Validators, ValidatorFn } from '@angular/forms';\n\nexport class QuestionBase<T> {\n model: string;\n value: T | undefined;\n key: string;\n label: string;\n required: boolean;\n order: number;\n controlType: string;\n type: string;\n options: { key: string, value: string }[];\n tooltip?: string;\n validators?: ValidatorFn[];\n\n constructor(options: {\n model?: string;\n value?: T;\n key?: string;\n label?: string;\n required?: boolean;\n order?: number;\n controlType?: string;\n type?: string;\n options?: { key: string, value: string }[];\n tooltip?: string;\n validators?: ValidatorFn[];\n } = {}) {\n this.model = options.model || '';\n this.value = options.value;\n this.key = options.key || '';\n this.label = options.label || '';\n this.required = !!options.required;\n this.order = options.order === undefined ? 1 : options.order;\n this.controlType = options.controlType || '';\n this.type = options.type || '';\n this.options = options.options || [];\n this.tooltip = options.tooltip || '';\n this.validators = options.validators;\n }\n}\n\nexport class TimePickerQuestion<T> extends QuestionBase<T> {\n override controlType = 'time';\n\n constructor(options: any = {}) {\n super(options);\n }\n}\n\nexport class DatePickerQuestion<T> extends QuestionBase<T> {\n override controlType = 'date';\n min: Date;\n max: Date;\n startDate: Date;\n\n constructor(options: any = {}) {\n super(options);\n this.min = new Date(options['min']) ?? new Date('January 01, 1900 00:00:00');\n var thisYear = new Date().getUTCFullYear;\n this.max = new Date(options['max']) ?? new Date('December 31 ' + thisYear + ' 23:59:59');\n this.startDate = new Date(options['startDate']) ?? new Date();\n }\n}\n\nexport class DateTimePickerQuestion<T> extends QuestionBase<T> {\n override controlType = 'date-time';\n min: Date;\n max: Date;\n startDate: Date;\n\n constructor(options: any = {}) {\n super(options);\n this.min = new Date(options['min']) ?? new Date('January 01, 1900 00:00:00');\n var thisYear = new Date().getUTCFullYear;\n this.max = new Date(options['max']) ?? new Date('December 31 ' + thisYear + ' 23:59:59');\n this.startDate = new Date(options['startDate']) ?? new Date();\n }\n}\n\nexport class SliderQuestion<T> extends QuestionBase<T> {\n override controlType = 'slider';\n min: number;\n max: number;\n\n constructor(options: any = {}) {\n super(options);\n this.min = options['min'] || 0;\n this.max = options['max'] || 100;\n }\n}\n\nexport class NumberQuestion<T> extends QuestionBase<T> {\n override controlType = 'number';\n}\n\nexport class TextboxQuestion<T> extends QuestionBase<T> {\n override controlType = 'textbox';\n}\n\nexport class EmailQuestion<T> extends QuestionBase<T> {\n override controlType = 'email';\n}\n\nexport class PhoneQuestion<T> extends QuestionBase<T> {\n override controlType = 'tel';\n}\n\nexport class DropdownQuestion<T> extends QuestionBase<T> {\n override controlType = 'dropdown';\n}\n\nexport class AsyncDropdownQuestion<T> extends QuestionBase<T> {\n override controlType = 'async-dropdown';\n targetModel: string;\n multiple: boolean;\n ddbKey: string;\n \n constructor(options: any = {}) {\n super(options);\n this.targetModel = options['targetModel'];\n this.multiple = options['multiple'];\n this.ddbKey = options['ddbKey'];\n }\n}\n\nexport class FormGroupQuestion<T> extends QuestionBase<T> {\n override controlType = 'formgroup';\n formGroup: FormGroup;\n questions: QuestionBase<T>[] | null = [];\n \n constructor(options: any = {}) {\n super(options);\n this.formGroup = options['formGroup'];\n this.questions = options['questions'];\n }\n}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\n// Simple phone number validator (can be customized further)\nexport function phoneNumberValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const phoneNumber = control.value;\n\n // Use a regular expression to validate the phone number format\n const regex = /^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$/;\n if (!phoneNumber || regex.test(phoneNumber)) {\n return null; // Valid phone number\n } else {\n return { invalidPhoneNumber: true }; // Invalid phone number\n }\n };\n}","import { Injectable } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n QuestionBase,\n TextboxQuestion,\n NumberQuestion,\n DatePickerQuestion,\n DropdownQuestion,\n AsyncDropdownQuestion,\n FormGroupQuestion,\n PhoneQuestion,\n EmailQuestion\n} from '../classes/questions';\n\nimport { phoneNumberValidator } from '../classes/validators';\nimport { AmplifyModelService } from './amplify-model.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class QuestionControlService {\n\n private outputs: any;\n\n constructor(private ams: AmplifyModelService) { }\n\n /**\n * Initialize the service with Amplify outputs\n * This should be called by the consuming application after Amplify.configure()\n */\n initializeOutputs(outputs: any) {\n console.log('QuestionControlService: initializeOutputs called with:', outputs);\n this.outputs = outputs;\n console.log('QuestionControlService: outputs stored:', this.outputs);\n }\n\n getFieldForFieldObj(fieldObj: any, model: any): QuestionBase<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n console.log('getFieldForFieldObj starting for type', fieldObj.type, 'fieldObj', fieldObj);\n \n switch (fieldObj.type) {\n case 'String':\n return this._addStringQuestion(fieldObj, model);\n case 'Int':\n case 'Float':\n return this._addNumberQuestion(fieldObj, model);\n case 'AWSDate':\n case 'AWSDateTime':\n return this._addDatePickerQuestion(fieldObj, model);\n case 'AWSEmail':\n return this._addEmailQuestion(fieldObj, model);\n case 'AWSPhone':\n return this._addPhoneQuestion(fieldObj, model);\n }\n\n if (typeof fieldObj.type === 'object') {\n if (fieldObj.type.model) {\n return this.getRefModel(fieldObj, model);\n }\n if (fieldObj.type.nonModel) {\n let groupQuestions = this.getNonModelQuestions(fieldObj, model);\n var formGroup = this.toFormGroup(groupQuestions);\n return this._addFormGroupQuestion(fieldObj, formGroup, groupQuestions);\n }\n if (fieldObj.type.enum) {\n return this.getEnumQuestion(fieldObj, model);\n }\n }\n\n return null;\n }\n\n getLabelForFieldName(name: string): string {\n return name.toLowerCase().split('_').map((word: string) => {\n return word.charAt(0).toUpperCase() + word.slice(1);\n }).join(' ');\n }\n\n getQuestionsForModelFields(model: string): QuestionBase<any>[] {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return [];\n }\n\n if (!model) {\n console.error('QuestionControlService: No model name provided');\n return [];\n }\n\n console.log('outputs.data.model_introspection', this.outputs.data.model_introspection);\n console.log('Looking for model:', model);\n \n if (!this.outputs.data || !this.outputs.data.model_introspection || !this.outputs.data.model_introspection.models) {\n console.error('QuestionControlService: Invalid outputs structure', this.outputs);\n return [];\n }\n \n console.log('Available models:', Object.keys(this.outputs.data.model_introspection.models));\n \n const modelData = this.outputs.data.model_introspection.models[model as keyof typeof this.outputs.data.model_introspection.models];\n if (!modelData) {\n console.error(`Model \"${model}\" not found in model introspection. Available models:`, Object.keys(this.outputs.data.model_introspection.models));\n return [];\n }\n \n console.log('Found model data:', modelData);\n \n const fields = modelData.fields;\n if (!fields) {\n console.error(`Fields not found for model \"${model}\"`, modelData);\n return [];\n }\n \n console.log('Found fields:', fields);\n \n const questions: QuestionBase<any>[] = [];\n const values = Object.values(fields);\n const skipFields = ['createdAt', 'updatedAt', 'id'];\n \n for (const fieldObj of values) {\n if (skipFields.indexOf((fieldObj as any).name) > -1) continue;\n\n if (typeof (fieldObj as any).type === 'object' && (fieldObj as any).type.model) {\n continue; // skip model relationship fields\n }\n\n const q = this.getFieldForFieldObj(fieldObj, model);\n if (q) {\n questions.push(q);\n } else {\n console.log('no question returned for fieldObj', fieldObj, 'model', model);\n }\n }\n \n console.log('getQuestionsForModelFields questions', questions);\n return questions;\n }\n\n /** nonModel, form section Methods **/\n getNonModelQuestions(fieldObj: any, model: any): QuestionBase<any>[] {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return [];\n }\n\n const nonModel = fieldObj.type.nonModel;\n const fields = this.outputs.data.model_introspection.nonModels[nonModel as keyof typeof this.outputs.data.model_introspection.nonModels].fields;\n const questions: QuestionBase<any>[] = [];\n const values = Object.values(fields);\n const skipFields = ['createdAt', 'updatedAt'];\n \n for (const nestedFieldObj of values) {\n const question = this.getFieldForFieldObj(nestedFieldObj, model);\n if (question) {\n questions.push(question);\n }\n }\n \n console.log('getNonModelQuestions questions', questions);\n return questions;\n }\n\n getEnumQuestion(fieldObj: any, model: any): DropdownQuestion<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n const enumName = fieldObj.type.enum;\n const e = this.outputs.data.model_introspection.enums[enumName as keyof typeof this.outputs.data.model_introspection.enums];\n console.log('getEnumQuestion e', e);\n \n const choices: any[] = [];\n e.values.forEach((val: string) => {\n choices.push({ key: val, value: val });\n });\n \n return this._addDropdownQuestion(fieldObj, choices, model);\n }\n\n /** Reference Field Methods **/\n getRefModel(fieldObj: any, callingModel: string): AsyncDropdownQuestion<any> | null {\n if (!this.outputs) {\n console.error('QuestionControlService: Outputs not initialized. Call initializeOutputs() first.');\n return null;\n }\n\n console.log('getRefModel starting for fieldObj', fieldObj);\n \n const referenceModel = fieldObj.type.model;\n const relModel = this.outputs.data.model_introspection.models[referenceModel as keyof typeof this.outputs.data.model_introspection.models].fields;\n\n const vals = Object.values(relModel);\n for (const val of vals) {\n const fieldVal = val as any;\n if (typeof fieldVal.type !== 'object') continue;\n if (!fieldVal.type.model) continue;\n if (fieldVal.type.model === callingModel) continue;\n\n const modelName = fieldVal.type.model;\n return this._addRefDropdownQuestion(fieldObj, callingModel, modelName);\n }\n\n return null;\n }\n\n private _addFormGroupQuestion(fieldObj: any, formGroup: FormGroup, questions: QuestionBase<any>[]): FormGroupQuestion<any> {\n const name = fieldObj.name.toString();\n return new FormGroupQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'formgroup',\n formGroup: formGroup,\n questions: questions\n });\n }\n\n private _addDropdownQuestion(fieldObj: any, items: any[], model: string): DropdownQuestion<any> {\n console.log('_addDropdownQuestion for fieldObj', fieldObj, 'items', items);\n \n const name = fieldObj.name.toString();\n return new DropdownQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n options: items,\n type: 'dropdown',\n model: model\n });\n }\n\n private _addRefDropdownQuestion(fieldObj: any, model: string, targetModel: string): AsyncDropdownQuestion<any> {\n console.log('_addRefDropdownQuestion for fieldObj', fieldObj);\n \n const name = fieldObj.name.toString();\n return new AsyncDropdownQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'dropdown',\n model: model,\n targetModel: targetModel,\n multiple: fieldObj.association?.connectionType === \"HAS_MANY\"\n });\n }\n\n private _addDatePickerQuestion(fieldObj: any, model: string): DatePickerQuestion<any> {\n const name = fieldObj.name.toString();\n return new DatePickerQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'date',\n model: model\n });\n }\n\n private _addNumberQuestion(fieldObj: any, model: string): NumberQuestion<any> {\n const name = fieldObj.name.toString();\n return new NumberQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'number',\n model: model\n });\n }\n\n private _addStringQuestion(fieldObj: any, model: string): TextboxQuestion<any> {\n const name = fieldObj.name.toString();\n return new TextboxQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'textbox',\n model: model\n });\n }\n\n private _addEmailQuestion(fieldObj: any, model: string): EmailQuestion<any> {\n const name = fieldObj.name.toString();\n return new EmailQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'email',\n validators: [Validators.email],\n model: model\n });\n }\n\n private _addPhoneQuestion(fieldObj: any, model: string): PhoneQuestion<any> {\n const name = fieldObj.name.toString();\n return new PhoneQuestion({\n key: name,\n label: this.getLabelForFieldName(fieldObj.name),\n required: fieldObj.isRequired,\n type: 'tel',\n validators: [phoneNumberValidator()],\n model: model\n });\n }\n\n toFormGroup(questions: (QuestionBase<any> | FormGroupQuestion<any>)[]): FormGroup {\n const group: any = {};\n\n questions.forEach(question => {\n if (!question) return;\n \n if ('questions' in question && question.questions) {\n group[question.key] = this.toFormGroup(question.questions as QuestionBase<any>[]);\n } else {\n const validators = [];\n \n if (question.required) {\n validators.push(Validators.required);\n }\n \n if (question.validators) {\n validators.push(...question.validators);\n }\n\n group[question.key] = new FormControl(question.value || '', validators);\n }\n });\n \n return new FormGroup(group);\n }\n}","import { Location } from '@angular/common';\nimport { Component, Input, OnInit, inject, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport {\n FormControl,\n FormGroupDirective,\n NgForm,\n ReactiveFormsModule,\n FormGroup\n} from '@angular/forms';\nimport { DynamicFormQuestionComponent } from '../dynamic-form-question/dynamic-form-question.component';\nimport { DynamicNestedFormQuestionComponent } from '../dynamic-nested-form-question/dynamic-nested-form-question.component';\nimport { DynamicFormGroupComponent } from '../dynamic-form-group/dynamic-form-group.component';\nimport { QuestionControlService } from '../../services/question-control.service';\nimport { AmplifyFormBuilderService } from '../../services/amplify-form-builder.service';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\nimport { RecordRelationshipsComponent } from '../record-relationships/record-relationships.component';\nimport { QuestionBase, FormGroupQuestion } from '../../classes/questions';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSnackBarModule, MatSnackBar } from '@angular/material/snack-bar';\nimport { MatButtonModule } from '@angular/material/button';\n\n/** Error when invalid control is dirty, touched, or submitted. */\nexport class MyErrorStateMatcher implements ErrorStateMatcher {\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n const isSubmitted = form && form.submitted;\n return !!(control && control.invalid && (control.dirty || control.touched || isSubmitted));\n }\n}\n\n@Component({\n standalone: true,\n selector: 'snteam-dynamic-form',\n imports: [\n CommonModule,\n DynamicFormQuestionComponent,\n DynamicNestedFormQuestionComponent,\n DynamicFormGroupComponent,\n RecordRelationshipsComponent,\n ReactiveFormsModule,\n MatFormFieldModule, \n MatInputModule, \n MatSelectModule, \n MatSnackBarModule, \n MatDividerModule,\n MatButtonModule\n ],\n templateUrl: './dynamic-form.component.html',\n styleUrl: './dynamic-form.component.css'\n})\nexport class DynamicFormComponent implements OnInit {\n\n @Input() model: string = \"\";\n @Input() itemId: string = \"\";\n @Input() valueMap?: any;\n @Input() hideRelationships: boolean = false;\n @Input() hideSaveButton: boolean = false;\n @Input() amplifyOutputs?: any; // Add amplify outputs input\n @Input() formViewId?: string; // Add FormView ID input\n \n @Output() itemOutput = new EventEmitter<any>();\n @Output() submitOutput = new EventEmitter<any>();\n @Output() formLoaded = new EventEmitter<FormGroup>();\n\n mdl: string = '';\n id: string = '';\n item: any;\n payLoad: any;\n form!: any;\n questions: (QuestionBase<any> | FormGroupQuestion<any>)[] | null = [];\n formView: any; // Store the FormView data\n formViewFields: any[] = []; // Store the FormViewField data\n\n materialInputs: string[] = [];\n switchInputs: string[] = [];\n formGroupInputs: string[] = ['formgroup'];\n refInputs: string[] = [];\n\n private ams = inject(AmplifyModelService);\n private _snackBar = inject(MatSnackBar);\n\n constructor(\n private qcs: QuestionControlService,\n private afb: AmplifyFormBuilderService,\n private location: Location,\n private route: ActivatedRoute\n ) { }\n\n get outputs() {\n return this.amplifyOutputs || (this.qcs as any).outputs;\n }\n\n ngOnInit() {\n console.log('DynamicFormComponent ngOnInit starting');\n this.materialInputs = this.afb.getMaterialInputs();\n this.switchInputs = this.afb.getSwitchInputs();\n this.refInputs = this.afb.getRefInputs();\n \n // Read from route parameters if available, otherwise use inputs\n this.route.paramMap.subscribe((params) => {\n console.log('DynamicFormComponent route params:', params);\n const routeModel = params.get('model');\n const routeId = params.get('id');\n const routeFormViewId = params.get('formViewId'); // Check for formViewId in route\n \n console.log('DynamicFormComponent routeModel:', routeModel, 'routeId:', routeId, 'routeFormViewId:', routeFormViewId);\n \n this.mdl = routeModel || this.model;\n this.id = routeId || this.itemId;\n this.formViewId = routeFormViewId || this.formViewId;\n\n console.log('DynamicFormComponent final mdl:', this.mdl, 'id:', this.id, 'formViewId:', this.formViewId);\n\n // If we have a formViewId, load the FormView first\n if (this.formViewId) {\n this.loadFormView();\n } else {\n // Original behavior - load all model fields\n if (this.id == '-1' || !this.id) {\n console.log('DynamicFormComponent calling setQuestionsAndForm for new item');\n this.setQuestionsAndForm();\n } else {\n console.log('DynamicFormComponent calling getItem for existing item');\n this.getItem();\n }\n }\n });\n }\n\n async loadFormView() {\n if (!this.formViewId) return;\n \n try {\n console.log('DynamicFormComponent: Loading FormView:', this.formViewId);\n \n // Get the FormView with its fields\n const { data: formView } = await this.ams.getItemForModel('FormView', this.formViewId);\n this.formView = formView;\n \n if (this.formView && this.formView.tableConfigId) {\n this.mdl = 'TableConfig'; // Set the model based on FormView's table\n \n // Get the FormViewFields for this FormView\n const formViewFields = await this.ams.listItemsForModel('FormViewField');\n if (formViewFields) {\n formViewFields.subscribe({\n next: ({ items }) => {\n this.formViewFields = items.filter((field: any) => field.formViewId === this.formViewId)\n .sort((a: any, b: any) => (a.order || 0) - (b.order || 0));\n console.log('DynamicFormComponent: FormViewFields loaded:', this.formViewFields);\n \n // Now proceed with form setup\n if (this.id == '-1' || !this.id) {\n this.setQuestionsAndForm();\n } else {\n this.getItem();\n }\n }\n });\n }\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error loading FormView:', error);\n }\n }\n\n async getItem() {\n try {\n console.log('DynamicFormComponent: Getting item for model:', this.mdl, 'id:', this.id);\n const { data: item } = await this.ams.getItemForModel(this.mdl, this.id);\n console.log('DynamicFormComponent: Item retrieved successfully:', item);\n this.item = item;\n this.itemOutput.emit(this.item);\n this.setQuestionsAndForm();\n } catch (error) {\n console.error('DynamicFormComponent: Error getting item:', error);\n // Try to continue without the item\n this.item = null;\n this.setQuestionsAndForm();\n }\n }\n\n setQuestionsAndForm() {\n if (!this.mdl) {\n console.error('DynamicFormComponent: No model specified');\n return;\n }\n\n if (!this.questions || this.questions.length == 0) {\n console.log('DynamicFormComponent: Getting questions for model:', this.mdl);\n try {\n if (this.formViewFields && this.formViewFields.length > 0) {\n // Use FormView fields to generate questions\n this.questions = this.getQuestionsFromFormViewFields();\n console.log('DynamicFormComponent: Questions from FormView received:', this.questions);\n } else {\n // Original behavior - use all model fields\n this.questions = this.qcs.getQuestionsForModelFields(this.mdl);\n console.log('DynamicFormComponent: Questions from model received:', this.questions);\n }\n } catch (error) {\n console.error('DynamicFormComponent: Error getting questions for model:', this.mdl, error);\n return;\n }\n }\n\n // Reset question values first\n for (let question of this.questions) {\n question.value = undefined; // Clear previous values\n }\n\n if (this.item) {\n for (let question of this.questions) {\n this.setQuestionValueFromItem(question);\n }\n }\n\n // Apply valueMap if provided\n if (this.valueMap) {\n for (let question of this.questions) {\n this.setQuestionValueFromValueMap(question, this.valueMap);\n }\n }\n\n // Always recreate the form to ensure it reflects current question values\n this.form = this.qcs.toFormGroup(this.questions as QuestionBase<any>[]);\n this.formLoaded.emit(this.form);\n console.log('this.item', this.item);\n }\n\n getQuestionsFromFormViewFields(): QuestionBase<any>[] {\n const questions: QuestionBase<any>[] = [];\n \n for (const formViewField of this.formViewFields) {\n // Create a mock field object that matches the structure expected by QuestionControlService\n const mockFieldObj = {\n name: formViewField.field_name,\n type: formViewField.field_type,\n isRequired: formViewField.required || false,\n attributes: []\n };\n \n const question = this.qcs.getFieldForFieldObj(mockFieldObj, this.mdl);\n if (question) {\n // Override the label if a custom displayLabel is provided\n if (formViewField.display_label) {\n question.label = formViewField.display_label;\n }\n \n // Set required status from FormViewField\n question.required = formViewField.required || false;\n \n questions.push(question);\n }\n }\n \n return questions;\n }\n\n setQuestionValueFromItem(question: any, item?: any) {\n if (!item) item = this.item;\n if (question.controlType == 'formgroup') {\n for (let q of question.questions) {\n this.setQuestionValueFromItem(q, item[question.key]);\n }\n }\n else if (item[question.key]) {\n question.value = item[question.key];\n } else {\n console.log('setQuestionValueFromItem no item found and not formgroup');\n }\n }\n\n setQuestionValueFromValueMap(question: any, valueMap: any) {\n if (question.controlType == 'formgroup') {\n for (let q of question.questions) {\n this.setQuestionValueFromValueMap(q, valueMap);\n }\n }\n else if (valueMap[question.key] !== undefined) {\n question.value = valueMap[question.key];\n }\n }\n\n getValueForKey(obj: any, key: string): any | null {\n if (obj === null || typeof obj !== 'object') {\n return null;\n }\n\n if (key in obj) {\n return obj[key];\n }\n\n for (const k in obj) {\n const result = this.getValueForKey(obj[k], key);\n if (result !== null) {\n return result;\n }\n }\n\n return null;\n }\n\n setValueForKey(obj: any, key: string, val: any) {\n if (obj === null || typeof obj !== 'object') {\n return;\n }\n\n if (key in obj) {\n obj[key] = val;\n }\n\n for (const k in obj) {\n if (typeof obj[k] == 'object') {\n this.setValueForKey(obj[k], key, val);\n }\n }\n }\n\n setRefQuestionValuesInPayload(questions?: any, payLoadObj?: any) {\n let qs = questions || this.questions;\n\n let refQs = qs.filter((x: any) => x.controlType == 'async-dropdown');\n if (refQs) {\n refQs.forEach((refQ: any) => {\n let keyVal = this.getValueForKey(this.payLoad, refQ.key);\n if (Array.isArray(keyVal)) {\n let relArr: any[] = [];\n for (var v in keyVal) {\n let valObj: any = {};\n valObj[refQ.targetModel.toLowerCase() + 'Id'] = keyVal[v];\n valObj[this.mdl.toLowerCase() + 'Id'] = this.id;\n relArr.push(valObj);\n }\n this.setValueForKey(this.payLoad, refQ.key, relArr)\n }\n else {\n console.log('qs keyVal is not array');\n }\n });\n }\n\n let groupQs = qs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n console.log('qs checking groupQ', groupQ);\n this.setRefQuestionValuesInPayload(groupQ.questions);\n }\n }\n console.log('qs payload', this.payLoad);\n }\n\n questionsIncludesRefType(questions?: any): boolean {\n let qs = questions || this.questions;\n\n let refQ = qs.find((x: any) => x.controlType == 'async-dropdown');\n if (refQ) return true;\n\n let groupQs = qs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n if (this.questionsIncludesRefType(groupQ.questions)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n formHasRelationshipQuestions(): boolean {\n return this.questionsIncludesRefType();\n }\n\n onSubmit() {\n this.payLoad = this.form.getRawValue();\n\n if (this.item && this.item.id) {\n this.payLoad.id = this.item.id;\n console.log('will update because this.item.id', this.item.id);\n this.updateItem();\n }\n else {\n console.log('will create because !this.item.id', this.item);\n this.createItem();\n }\n \n this.submitOutput.emit(this.payLoad);\n console.log('onSubmit payload', this.payLoad, 'this.item', this.item, 'this.form', this.form);\n }\n\n async updateItem() {\n this.prepPayloadObj();\n console.log('updateItem prepped payload', this.payLoad);\n try {\n const { data: item } = await this.ams.updateItemForModel(this.mdl, this.payLoad);\n console.log('updateItem finished res', item);\n \n if (!item) {\n this._snackBar.open('Error updating ' + this.mdl, 'Dismiss');\n return;\n }\n \n this.item = item;\n this.itemOutput.emit(this.item);\n \n // Show success message\n this._snackBar.open(`${this.mdl} updated successfully`, 'Dismiss', {\n duration: 3000\n });\n \n this.setQuestionsAndForm();\n } catch (error) {\n console.error('error in updateItem', error);\n this._snackBar.open('Error updating ' + this.mdl, 'Dismiss');\n }\n }\n\n getQuestionForKey(key: string, questions?: any) {\n let searchQs = questions || this.questions;\n let q = searchQs.find((x: any) => x.key == key);\n if (q) return q;\n\n let groupQs = searchQs.filter((x: any) => x.controlType == 'formgroup');\n if (groupQs) {\n for (let groupQ of groupQs) {\n console.log('searchQs checking groupQ', groupQ);\n q = this.getQuestionForKey(key, groupQ.questions);\n if (q) return q;\n }\n }\n return;\n }\n\n prepPayloadObj(obj?: any) {\n let prepObj = obj || this.payLoad;\n console.log('prepPayloadObj starting for prepObj', prepObj);\n for (let prop in prepObj) {\n let q = this.getQuestionForKey(prop);\n if (q) {\n console.log('q', q);\n if (q.controlType == \"formgroup\") {\n this.prepPayloadObj(prepObj[prop])\n }\n else {\n if (!q.required && prepObj[prop] == '') {\n delete prepObj[prop];\n }\n }\n }\n else {\n console.log('prepPayloadObj no q for prop', prop);\n }\n }\n }\n\n async createItem() {\n this.prepPayloadObj();\n console.log('createItem prepped payload', this.payLoad);\n try {\n let res = await this.ams.createItemPromise(this.mdl, this.payLoad);\n console.log('createItem finished res', res);\n if (!res) {\n this._snackBar.open('Error creating ' + this.mdl, 'Dismiss');\n return;\n }\n\n if (res.errors && res.errors.length > 0) {\n let messages: string[] = [];\n res.errors.forEach((err: any) => {\n messages.push(err.message);\n })\n this._snackBar.open(messages.join('\\n'), 'Dismiss');\n }\n else {\n this.item = res.data;\n this.itemOutput.emit(this.item);\n \n // Update the URL to reflect the new item ID\n if (this.item && this.item.id) {\n this.changePathIdParam(this.item.id);\n this.id = this.item.id; // Update the component's id property\n }\n \n // Show success message\n this._snackBar.open(`${this.mdl} created successfully`, 'Dismiss', {\n duration: 3000\n });\n \n this.setQuestionsAndForm();\n }\n } catch (error) {\n console.error('error in createItem', error);\n }\n }\n\n changePathIdParam(newParamValue: string) {\n const currentUrl = this.location.path();\n let paramValArr = currentUrl.split('/');\n let currentId = paramValArr[paramValArr.length -1];\n const newUrl = currentUrl.replace(currentId, newParamValue);\n this.location.replaceState(newUrl);\n }\n\n isValid(question?: any, q?: any, q2?: any) {\n if (question && q && q2) return this.form.get(question.key + '.' + q.key + '.' + q2.key);\n if (question && q && !q2) return this.form.get(question.key + '.' + q.key);\n if (question && !q && !q2) return this.form.get(question.key);\n return true;\n }\n}","<div class=\"dynamic-form-holder\">\n @if (form && questions) {\n <form (ngSubmit)=\"onSubmit()\" [formGroup]=\"form\">\n @for (question of questions; track question) {\n @if (this.switchInputs.includes(question.controlType) || this.materialInputs.includes(question.controlType) || this.refInputs.includes(question.controlType)) {\n <div class=\"form-row\">\n <snteam-dynamic-form-question [question]=\"question\" [formGroup]=\"form\"></snteam-dynamic-form-question>\n </div>\n }\n @if (this.formGroupInputs.includes(question.controlType)) {\n <div class=\"group-row\">\n <snteam-dynamic-form-group [question]=\"question\" [formGroup]=\"form\" [formGroupName]=\"question.key\"></snteam-dynamic-form-group>\n </div>\n }\n }\n @if (!hideSaveButton) {\n <div class=\"form-row\">\n <button mat-raised-button color=\"primary\" type=\"submit\" [disabled]=\"!form.valid\">Save</button>\n </div>\n }\n </form>\n } @else {\n <div class=\"loading\">Loading...</div>\n }\n\n @if(item && !hideRelationships){\n <div class=\"relationship-holder\">\n <snteam-record-relationships [model]=\"mdl\" [id]=\"id\" [item]=\"item\" [amplifyOutputs]=\"outputs\"></snteam-record-relationships>\n </div>\n }\n</div>","import { Component, OnInit, Input, inject, TemplateRef, Output, EventEmitter } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatListModule } from '@angular/material/list';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AmplifyModelService } from '../../services/amplify-model.service';\n\n@Component({\n selector: 'snteam-list-view',\n standalone: true,\n imports: [CommonModule, MatListModule, MatButtonModule, MatIconModule],\n templateUrl: './list-view.component.html',\n styleUrl: './list-view.component.css'\n})\nexport class ListViewComponent implements OnInit {\n private ams = inject(AmplifyModelService);\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n \n @Input() modelName: string = '';\n @Input() customItemTemplate?: TemplateRef<any>;\n @Input() hideNewButton: boolean = false;\n @Input() title?: string;\n @Input() useRouter: boolean = true;\n \n @Output() itemClick = new EventEmitter<any>();\n @Output() newClick = new EventEmitter<void>();\n @Output() itemsLoaded = new EventEmitter<any[]>();\n \n itemsArr: any[] = [];\n loading: boolean = true;\n error: string | null = null;\n\n ngOnInit(): void {\n // Check if modelName is provided via route parameter\n const routeModel = this.route.snapshot.paramMap.get('model');\n if (routeModel) {\n this.modelName = routeModel;\n }\n \n if (this.modelName) {\n this.listItems();\n }\n }\n\n listItems() {\n console.log('ListViewComponent listItems starting for model:', this.modelName);\n if (this.modelName) {\n this.loading = true;\n this.error = null;\n \n const observable = this.ams.listItemsForModel(this.modelName);\n if (observable) {\n observable.subscribe({\n next: ({ items, isSynced }) => {\n this.itemsArr = items;\n this.loading = false;\n this.itemsLoaded.emit(this.itemsArr);\n console.log('ListViewComponent items loaded:', this.itemsArr);\n },\n error: (err) => {\n console.error('Error loading items:', err);\n this.error = 'Failed to load items';\n this.loading = false;\n }\n });\n } else {\n this.error = 'Service not initialized';\n this.loading = false;\n }\n }\n }\n\n onItemClick(item: any) {\n console.log('ListViewComponent itemClick', item);\n this.itemClick.emit(item);\n \n // Navigate to form view if useRouter is enabled\n if (this.useRouter && item.id) {\n this.router.navigate(['/form/' + this.modelName + '/' + item.id]);\n }\n }\n\n onNewClick() {\n console.log('ListViewComponent newClick');\n if (this.useRouter) {\n this.router.navigate(['/form/' + this.modelName + '/-1']);\n } else {\n this.newClick.emit();\n }\n }\n\n getDisplayText(item: any): string {\n // Try common display fields\n return item.name || item.title || item.label || item.id || 'Unnamed Item';\n }\n\n refresh() {\n this.listItems();\n }\n}","<div class=\"list-view-container\">\n <div class=\"header\">\n <h2>{{ title || modelName }}</h2>\n @if (!hideNewButton) {\n <button mat-raised-button color=\"primary\" (click)=\"onNewClick()\">\n <mat-icon>add</mat-icon>\n New {{ modelName }}\n </button>\n }\n </div>\n\n @if (loading) {\n <div class=\"loading\">Loading {{ modelName }}...</div>\n }\n\n @if (error) {\n <div class=\"error\">\n {{ error }}\n <button mat-button (click)=\"refresh()\">Retry</button>\n </div>\n }\n\n @if (!loading && !error && itemsArr.length === 0) {\n <div class=\"empty-state\">\n <p>No {{ modelName }} found</p>\n @if (!hideNewButton) {\n <button mat-raised-button color=\"primary\" (click)=\"onNewClick()\">\n Create First {{ modelName }}\n </button>\n }\n </div>\n }\n\n @if (!loading && !error && itemsArr.length > 0) {\n <mat-list class=\"items-list\">\n @for (item of itemsArr; track item.id) {\n <mat-list-item (click)=\"onItemClick(item)\" class=\"clickable-item\">\n @if (customItemTemplate) {\n <ng-container [ngTemplateOutlet]=\"customItemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n } @else {\n <span matListItemTitle>{{ getDisplayText(item) }}</span>\n <span matListItemLine>{{ item.description || item.createdAt | date }}</span>\n }\n </mat-list-item>\n }\n </mat-list>\n }\n</div>","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { ListViewComponent } from '../list-view/list-view.component';\nimport { QuestionControlService } from '../../services/question-control.service';\n\n@Component({\n selector: 'snteam-configurations',\n standalone: true,\n imports: [\n CommonModule,\n MatExpansionModule,\n MatIconModule,\n MatCardModule,\n MatButtonModule,\n ListViewComponent\n ],\n templateUrl: './configurations.component.html',\n styleUrl: './configurations.component.css'\n})\nexport class ConfigurationsComponent implements OnInit {\n @Input() amplifyOutputs?: any;\n\n private qcs = inject(QuestionControlService);\n\n // Track which models exist in the schema\n hasTableConfig = false;\n hasFormView = false;\n hasListView = false;\n\n ngOnInit() {\n this.checkAvailableModels();\n }\n\n get outputs() {\n return this.amplifyOutputs || (this.qcs as any).outputs;\n }\n\n checkAvailableModels() {\n if (!this.outputs || !this.outputs.data || !this.outputs.data.model_introspection) {\n console.warn('ConfigurationsComponent: No model introspection data available');\n return;\n }\n\n const models = this.outputs.data.model_introspection.models;\n console.log('ConfigurationsComponent: Available models:', Object.keys(models));\n\n this.hasTableConfig = 'TableConfig' in models;\n this.hasFormView = 'FormView' in models;\n this.hasListView = 'ListView' in models;\n\n console.log('ConfigurationsComponent: Model availability:', {\n TableConfig: this.hasTableConfig,\n FormView: this.hasFormView,\n ListView: this.hasListView\n });\n }\n}","<div class=\"configurations-container\">\n <h2>System Configurations</h2>\n \n <mat-accordion multi=\"true\">\n \n <!-- Table Configs Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>table_chart</mat-icon>\n <span class=\"panel-title\">Table Configs</span>\n </mat-panel-title>\n <mat-panel-description>\n Manage table configurations and settings\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasTableConfig) {\n <snteam-list-view \n [modelName]=\"'TableConfig'\"\n [useRouter]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>TableConfig Model Not Found</h3>\n <p>The TableConfig model is not available in your Amplify schema. Please add it to your data model to manage table configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- Form Views Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>dynamic_form</mat-icon>\n <span class=\"panel-title\">Form Views</span>\n </mat-panel-title>\n <mat-panel-description>\n Configure custom form layouts and field selections\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasFormView) {\n <snteam-list-view \n [modelName]=\"'FormView'\"\n [useRouter]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>FormView Model Not Found</h3>\n <p>The FormView model is not available in your Amplify schema. Please add it to your data model to create custom form configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n <!-- List Views Section -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon>view_list</mat-icon>\n <span class=\"panel-title\">List Views</span>\n </mat-panel-title>\n <mat-panel-description>\n Customize list displays and column configurations\n </mat-panel-description>\n </mat-expansion-panel-header>\n \n <div class=\"panel-content\">\n @if (hasListView) {\n <snteam-list-view \n [modelName]=\"'ListView'\"\n [useRouter]=\"true\">\n </snteam-list-view>\n } @else {\n <mat-card class=\"error-card\">\n <mat-card-content>\n <mat-icon class=\"error-icon\">error_outline</mat-icon>\n <h3>ListView Model Not Found</h3>\n <p>The ListView model is not available in your Amplify schema. Please add it to your data model to create custom list view configurations.</p>\n <button mat-raised-button color=\"primary\" class=\"help-button\">\n <mat-icon>help</mat-icon>\n View Documentation\n </button>\n </mat-card-content>\n </mat-card>\n }\n </div>\n </mat-expansion-panel>\n\n </mat-accordion>\n</div>","/*\n * Public API Surface of @snteam/amplify-angular-core\n */\n\n// Legacy exports for backward compatibility\nexport * from './lib/amplify-angular-core';\n\n// ===== MAIN COMPONENTS =====\n// Primary components for building dynamic forms and list views\nexport * from './lib/components/dynamic-form/dynamic-form.component';\nexport * from './lib/components/list-view/list-view.component';\nexport * from './lib/components/configurations/configurations.component';\n\n// ===== SUPPORTING COMPONENTS =====\n// Components used internally by main components for form rendering\nexport * from './lib/components/dynamic-form-question/dynamic-form-question.component';\nexport * from './lib/components/dynamic-form-group/dynamic-form-group.component';\nexport * from './lib/components/dynamic-nested-form-question/dynamic-nested-form-question.component';\nexport * from './lib/components/record-relationships/record-relationships.component';\nexport * from './lib/components/dynamic-relationship-builder/dynamic-relationship-builder.component';\nexport * from './lib/components/add-relationship-dialog/add-relationship-dialog.component';\n\n// ===== SERVICES =====\n// Core services for Amplify integration and form building\nexport * from './lib/services/amplify-model.service';\nexport * from './lib/services/amplify-form-builder.service';\nexport * from './lib/services/question-control.service';\n\n// ===== CLASSES AND TYPES =====\n// Question classes for dynamic form generation\nexport * from './lib/classes/questions';\n// Validation utilities\nexport * from './lib/classes/validators';\n\n// ===== PIPES =====\n// Utility pipes for data transformation\nexport * from './lib/pipes/val-to-title.pipe';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.AmplifyModelService","i3","i4","i2.AmplifyFormBuilderService","i2","i1.AmplifyModelService","i5","i1.QuestionControlService","i6","i1"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@snteam/amplify-angular-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.25",
|
|
4
4
|
"description": "Angular 20 components for building dynamic forms and list views with AWS Amplify Data",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"angular",
|
|
@@ -13,10 +13,6 @@
|
|
|
13
13
|
],
|
|
14
14
|
"author": "SNTeam",
|
|
15
15
|
"license": "MIT",
|
|
16
|
-
"repository": {
|
|
17
|
-
"type": "git",
|
|
18
|
-
"url": "https://github.com/snteam/amplify-angular-core.git"
|
|
19
|
-
},
|
|
20
16
|
"homepage": "https://github.com/snteam/amplify-angular-core#readme",
|
|
21
17
|
"bugs": {
|
|
22
18
|
"url": "https://github.com/snteam/amplify-angular-core/issues"
|