You have a serious loop occurring in your project with the way you are subscribing to form changes, and then updating FormControl values based on the emit.
Essentially, you would change the value in the form, it would trigger scmTypeCheck() via the valueChanges subscription, which would set new values, then emit another change via valueChanges and trigger scmTypeCheck() again and again and again...
Then clicking Add More Row made it worse because the loop is growing exponentially, eventually exceeding the call stack limits.
In my Stackblitz example I replaced your valueChanges subscription with selectionChange event on your mat-select... this ensures there is no loop and your FormControl values are only updated once.
I also replaced your entire scmTypeCheck() logic with the following.
setDomainName(i, value) {
//get the index of the selected value in the scmDummyStructure to use for default values
const index = this.scmDummyStructure.findIndex(x => x.type === value);
//get the url control to set state and default on user change
const urlControl = this.scmForm.get('scmDatas')['controls'][i].get('url');
//set default value
urlControl.setValue(this.scmDummyStructure[index].url);
//if custom type enable and clear any existing value if field not pristine else disable
if (value === 'custom') {
if (!urlControl.pristine && urlControl.value != '') {
urlControl.setValue('');
urlControl.enable();
}else{
urlControl.enable();
}
} else {
urlControl.disable();
}
}
Stackblitz
https://stackblitz.com/edit/angular-b7bjj6?embed=1&file=src/app/app.component.ts