feat: edit client — save per tab, DOB re-KYC alert, audit logs, KYC improvements

- Edit button per tab with Save & Next confirmation dialog
- DOB change triggers re-KYC alert, resets PAN verification, auto-fills remarks
- Mobile/email changes logged as audit notes via client notes API
- Redesigned confirmation dialog with icon + title, type-based theming
- KYC re-edit flow: remarks mandatory for VERIFIED records, re-edit API command
- Load existing photo & signature in edit KYC, immediate upload on change
- Populate all KYC fields (document, AML, form60/15) from API on edit
- Non-individual PAN verification uses same flow as individual
- Fix table overflow when sidebar panel is open
- Add fr unit to stylelint allowed-list

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Aditya
2026-04-07 15:08:07 +05:30
co-authored by Claude Opus 4.6
parent b890d24bb7
commit 79e455c4ed
14 changed files with 1699 additions and 398 deletions
+33 -9
View File
@@ -90,6 +90,15 @@ $color: #e2e4ec;
.sidenav {
overflow-x: hidden;
position: relative;
// Constrain routed page content so tables/cards shrink when sidebar opens
mifosx-content {
display: block;
min-width: 0;
max-width: 100%;
overflow-x: hidden;
box-sizing: border-box;
}
}
// ===== 2-Row Main Header =====
@@ -142,15 +151,28 @@ $gray-700: #334155;
font-size: 11px;
font-weight: 500;
letter-spacing: 0.01em;
transition: background 0.12s, color 0.12s;
transition:
background 0.12s,
color 0.12s;
user-select: none;
border-right: 1px solid $gray-200;
text-decoration: none;
font-family: 'DM Sans', 'Roboto', sans-serif;
font-family: 'DM Sans', Roboto, sans-serif;
&:last-child { border-right: none; }
&:hover { background: $brand-hover; color: $brand; }
&.active { background: $brand-light; color: $brand; font-weight: 600; }
&:last-child {
border-right: none;
}
&:hover {
background: $brand-hover;
color: $brand;
}
&.active {
background: $brand-light;
color: $brand;
font-weight: 600;
}
&.active::before {
content: '';
@@ -178,7 +200,9 @@ $gray-700: #334155;
.ni-caret {
font-size: 8px;
opacity: 0.3;
transition: transform 0.18s, opacity 0.18s;
transition:
transform 0.18s,
opacity 0.18s;
flex-shrink: 0;
.ni:hover & {
@@ -211,7 +235,7 @@ $gray-700: #334155;
min-height: 34px !important;
padding: 0 14px !important;
color: $gray-700 !important;
font-family: 'DM Sans', 'Roboto', sans-serif !important;
font-family: 'DM Sans', Roboto, sans-serif !important;
&:hover {
background: $brand-hover !important;
@@ -266,7 +290,7 @@ $gray-700: #334155;
width: 860px;
max-width: 95vw;
padding: 20px 24px;
box-shadow: 0 6px 24px rgba(0, 0, 0, 0.22);
box-shadow: 0 6px 24px rgb(0 0 0 / 22%);
border-radius: 0 0 10px 10px;
z-index: 1000;
border-top: 3px solid #0d47a1;
@@ -307,7 +331,7 @@ $gray-700: #334155;
outline: none;
border-color: #0d47a1;
background: #fff;
box-shadow: 0 0 0 3px rgba(13, 71, 161, 0.1);
box-shadow: 0 0 0 3px rgb(13 71 161 / 10%);
}
}