feat: recurring deposit enhancements, dashboard, chart, and account view updates
This commit is contained in:
@@ -377,6 +377,8 @@
|
||||
</button>
|
||||
}
|
||||
@if (selectedTabIndex < totalTabs - 1) {
|
||||
<!-- Tooltip sits on a wrapper: a disabled button fires no mouse events, so it can't host it. -->
|
||||
<span [matTooltip]="currentStepBlockerMessage" [matTooltipDisabled]="!currentStepBlockerMessage">
|
||||
<button mat-raised-button color="primary" (click)="onNext()" [disabled]="savingClient || !currentStepValid">
|
||||
@if (savingClient) {
|
||||
<mat-progress-spinner diameter="18" mode="indeterminate" class="m-r-10"></mat-progress-spinner>
|
||||
@@ -390,6 +392,7 @@
|
||||
<fa-icon icon="arrow-right" class="m-l-10"></fa-icon>
|
||||
}
|
||||
</button>
|
||||
</span>
|
||||
}
|
||||
@if (selectedTabIndex === totalTabs - 1) {
|
||||
<button mat-raised-button color="primary" [routerLink]="['../']">
|
||||
|
||||
@@ -393,6 +393,12 @@ export class EditClientComponent {
|
||||
if (this.selectedTabIndex === 0 && this.clientGeneralForm?.valid && !this.contactVerificationComplete) {
|
||||
return 'Verify the OTP sent to both the old and new mobile number/email before saving.';
|
||||
}
|
||||
if (this.selectedTabIndex === 0 && this.clientGeneralForm && !this.clientGeneralForm.valid) {
|
||||
const labels = this.invalidGeneralFieldLabels();
|
||||
if (labels.length) {
|
||||
return `Please fill/correct: ${labels.join(', ')}.`;
|
||||
}
|
||||
}
|
||||
if (this.selectedTabIndex === 1) {
|
||||
const labels = this.clientKycStep?.invalidFieldLabels || [];
|
||||
if (labels.length) {
|
||||
@@ -408,6 +414,42 @@ export class EditClientComponent {
|
||||
return 'Please fill all mandatory fields on this tab to continue.';
|
||||
}
|
||||
|
||||
/**
|
||||
* Readable names of the General-tab controls that are invalid. Older clients can be missing
|
||||
* fields that are now mandatory (e.g. mobile/email), which leaves Save disabled with nothing
|
||||
* on screen saying why — this feeds the button tooltip.
|
||||
*/
|
||||
private invalidGeneralFieldLabels(): string[] {
|
||||
const labels: Record<string, string> = {
|
||||
officeId: 'Office',
|
||||
legalFormId: 'Legal Form',
|
||||
genderId: 'Gender',
|
||||
mobileNo: 'Mobile No',
|
||||
alternateMobileNo: 'Alternate Mobile No',
|
||||
emailAddress: 'Email',
|
||||
dateOfBirth: 'Date of Birth',
|
||||
submittedOnDate: 'Submitted On',
|
||||
activationDate: 'Activation Date',
|
||||
savingsProductId: 'Savings Product',
|
||||
firstname: 'First Name',
|
||||
middlename: 'Middle Name',
|
||||
lastname: 'Last Name',
|
||||
fullname: 'Name',
|
||||
monthlyIncome: 'Monthly Income',
|
||||
annualIncome: 'Annual Income',
|
||||
monthlyTurnover: 'Monthly Turnover',
|
||||
annualTurnover: 'Yearly Turnover',
|
||||
agricultureIncome: 'Agriculture Income',
|
||||
nonAgricultureIncome: 'Non-Agriculture Income',
|
||||
guardianDetails: 'Guardian',
|
||||
clientNonPersonDetails: 'Entity Details'
|
||||
};
|
||||
const controls = this.clientGeneralForm?.controls || {};
|
||||
return Object.keys(controls)
|
||||
.filter((name) => controls[name].invalid)
|
||||
.map((name) => labels[name] || name);
|
||||
}
|
||||
|
||||
/** Whether the current tab has unsaved edits */
|
||||
isCurrentTabEdited(): boolean {
|
||||
return this.tabEditMode[this.selectedTabIndex] === true;
|
||||
|
||||
Reference in New Issue
Block a user