Files
cbsnexora/src/app/shared/notifications-tray/notifications-tray.component.html
T
AdityaandClaude Opus 4.7 595054b0b8 feat(digital+toolbar): NEFT/RTGS module, AI menu, polished header icons
- Add /digital/neft-rtgs (entry) and /digital/neft-rtgs-report (analytics):
  KPIs, tabbed views (Trends, Bank-wise, Date-wise, Pending/Pass/Return,
  Branch/Mobile, User-wise), filterable transaction table with CSV export,
  and a non-dismissible Initiate dialog launched from a floating action.
- Make BANL verification mandatory before NEFT/RTGS submit; auto-fill and
  lock beneficiary name from the lookup response, invalidate match on
  A/C or IFSC edit, demo fallback for unknown accounts.
- Add Digital menu links (NEFT/RTGS + Report) in shell top-nav.
- Replace toolbar theme toggle with AI / Intelligence Modules mega menu:
  4 colour-coded columns covering Lending & Risk, Investment & Profit,
  Compliance & Advisory, Governance (9 modules total). Wire RBI
  Notifications Monitoring to /rbi-circulars.
- Unify notifications, settings, AI, and profile toolbar buttons into a
  26px ring style; colourful gradient bell SVG for notifications,
  custom gear+petals AI mark, online dot on the avatar.
- Trim ISO 27001 chip in the top bar.
- Add MPL header to generated .env.ts and its template in version.js.
- Bundles other pending working-tree changes (clients family/nominee
  tab tweaks, auth/2FA fixes, translations) into the same push.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 11:50:26 +05:30

94 lines
3.4 KiB
HTML

<!--
Copyright since 2025 Mifos Initiative
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
-->
<button
mat-icon-button
class="ml-1"
[attr.aria-label]="'tooltips.Notifications' | translate"
matTooltip="{{ 'tooltips.Notifications' | translate }}"
[matMenuTriggerFor]="notificationsMenu"
(menuClosed)="menuClosed()"
[matBadge]="unreadNotifications.length"
[matBadgeHidden]="!unreadNotifications.length"
matBadgeColor="warn"
matBadgeSize="medium"
>
<span class="sr-only">{{ 'tooltips.Notifications' | translate }}</span>
<!-- Custom colorful bell mark — same size language as the AI icon -->
<svg class="t-notif-svg" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<defs>
<linearGradient id="cbsNotifBell" x1="32" y1="14" x2="32" y2="50" gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="#fde68a" />
<stop offset="55%" stop-color="#fbbf24" />
<stop offset="100%" stop-color="#f59e0b" />
</linearGradient>
</defs>
<!-- top loop / handle -->
<circle cx="32" cy="12" r="3.2" fill="#b45309" />
<!-- bell body -->
<path
d="M32 15 c-10 0 -15 7 -15 17 v8 c0 1 -1 2 -2 2 h-2 v3 h38 v-3 h-2 c-1 0 -2 -1 -2 -2 v-8 c0 -10 -5 -17 -15 -17 z"
fill="url(#cbsNotifBell)"
stroke="#b45309"
stroke-width="1.4"
/>
<!-- inside highlight -->
<path
d="M22 23 c-2 4 -2 9 -2 12"
stroke="#ffffff"
stroke-width="2.6"
stroke-linecap="round"
fill="none"
opacity="0.55"
/>
<!-- clapper -->
<circle cx="32" cy="52" r="3.6" fill="#b45309" />
</svg>
</button>
<mat-menu
class="mifosx-notifications-menu"
#notificationsMenu="matMenu"
[overlapTrigger]="false"
xPosition="before"
yPosition="below"
>
<div class="notifications-container">
@if (unreadNotifications.length === 0 && displayedReadNotifications.length === 0) {
<div class="no-notifications">
<mat-icon class="no-notifications-icon">notifications_none</mat-icon>
<p class="no-notifications-text">{{ 'labels.text.No notifications' | translate }}</p>
</div>
} @else {
<div class="notifications-header">
<h3 class="notifications-title">{{ 'labels.menus.Notifications' | translate }}</h3>
</div>
<div class="notifications-list">
@for (notification of unreadNotifications; track notification) {
<button mat-menu-item class="notification-item unread" (click)="navigateToNotification(notification, $event)">
<div class="notification-content">
<span class="notification-text">{{ notification.content }}</span>
<span class="unread-indicator">●</span>
</div>
<span class="notification-time">{{ notification.createdAt }}</span>
</button>
}
@for (notification of displayedReadNotifications; track notification) {
<button mat-menu-item class="notification-item read" (click)="navigateToNotification(notification, $event)">
<div class="notification-content">
<span class="notification-text">{{ notification.content }}</span>
</div>
<span class="notification-time">{{ notification.createdAt }}</span>
</button>
}
</div>
}
</div>
</mat-menu>