Merge remote-tracking branch 'origin/uate' into uate

This commit is contained in:
2026-07-28 10:53:26 +05:30
23 changed files with 305 additions and 101 deletions
@@ -71,6 +71,7 @@
<mifosx-client-kyc-step
#clientKyc
[isNonIndividual]="legalFormType === 2"
[isMinor]="clientGeneralStep?.isMinor || false"
[clientId]="createdClientId"
[constitutionMeta]="clientGeneralStep?.selectedConstitution"
[entityName]="clientGeneralStep?.createClientForm?.get('fullname')?.value || ''"
@@ -146,6 +147,7 @@
}
<mifosx-client-india-address-step
#clientIndiaAddress
[isMinor]="clientGeneralStep?.isMinor || false"
[readOnly]="isTabReadOnly(addressTabIdx)"
></mifosx-client-india-address-step>
</div>
@@ -111,6 +111,12 @@ export class CreateClientComponent {
this.route.data.subscribe((data: { clientTemplate: any; clientAddressFieldConfig: any }) => {
this.clientTemplate = data.clientTemplate;
this.clientAddressFieldConfig = data.clientAddressFieldConfig;
// This app's RouteReusableStrategy keeps this SAME component instance alive across
// repeat visits to /clients/create, so ngOnInit/constructor won't re-run for a second
// "create new client" session — reset transient state here instead, since `route.data`
// re-emits on every navigation regardless of whether the component was reused. Must run
// BEFORE setDatatables(), which reads legalFormType to filter clientTemplate.datatables.
this.resetForNewClient();
this.setDatatables();
});
// Read pre-fill data set by "Create as Client" from a manual family member
@@ -121,6 +127,20 @@ export class CreateClientComponent {
}
}
/** Resets session state that could otherwise leak between clients when the route is reused. */
private resetForNewClient(): void {
this.legalFormType = 1;
this.selectedTabIndex = 0;
this.createdClientId = '';
this.savingClient = false;
this.saveProgress = 0;
this.tabEditMode = {};
this.highestTabReached = 0;
this.validationError = '';
this.prefillData = null;
this.clientGeneralStep?.resetForNewClient();
}
/** Check if a tab is in read-only mode (completed tab navigated back to) */
isTabReadOnly(tabIndex: number): boolean {
// Only tabs that have been passed (below highest reached) AND not explicitly set to edit mode