Merge branch 'dev' into feature/bugfix

Conflicts resolved in:
- src/app/clients/clients-view/ckyc-tab/ckyc-tab.component.html
- src/app/clients/clients-view/ckyc-tab/ckyc-tab.component.ts

Kept dev's CKYC architecture (upload dialog, real per-artefact endpoints)
and layered feature/bugfix's fixes on top: upload file validation,
missing-file badge, silent preview download, and image/PDF view button.
Also includes the CKYC "Image of Client" upload-state fix and the
client-change state-leak fix in the same component.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-16 16:55:32 +05:30
co-authored by Claude Sonnet 5
105 changed files with 7140 additions and 1902 deletions
@@ -226,6 +226,12 @@
<fa-icon icon="print" class="ac-tab__ic"></fa-icon>
<span>DD Reprint Requests</span>
</a>
<!-- Beside the reprint queue because the two arrive together from the counter, but they are
different decisions: a reprint re-prints the same leaflet, a revoke spends a fresh one. -->
<a class="ac-tab" routerLink="./dd-revoke-approvals" routerLinkActive="ac-tab--active">
<fa-icon icon="ban" class="ac-tab__ic"></fa-icon>
<span>DD Revoke Requests</span>
</a>
</nav>
<div class="ac-tab-panel">
+8
View File
@@ -235,6 +235,14 @@ const routes: Routes = [
(m) => m.DdReprintApprovalsComponent
),
data: { title: 'DD Reprint Approvals' }
},
{
path: 'dd-revoke-approvals',
loadComponent: () =>
import('../sponsor-dd/dd-revoke-approvals/dd-revoke-approvals.component').then(
(m) => m.DdRevokeApprovalsComponent
),
data: { title: 'DD Revoke Approvals' }
}
]
},