Files
cbsnexora/src/app/tasks/tasks-routing.module.ts
T
nitesh 1efb520009 feat(tasks): backend-driven pagination, search and date filters for Client Approval
Client Approval previously fetched up to 1000 pending clients via a route
resolver and did name-search/sorting client-side (the search box was
actually dead — it set a MatTableDataSource filter that the grouped-table
view never read). Reworked to mirror PendingClientEditsComponent: real
mat-paginator against /clients (offset/limit), server-side displayName
search, orderBy=submittedOnDate for latest-first, and All/Today/Yesterday
presets backed by the new fromDate/toDate params. Dropped the now-unused
GetGroupedClientsData resolver.

Also: Account Number column -> Client ID (element.id), disabled the
Approve button with a "N selected" indicator when nothing's checked, and
a redesigned action bar / empty-state (context-aware message for
zero-results-from-search vs. zero-results-from-date-filter vs. truly
nothing pending) — plus the plain-div search box and matched heights
across chips/search/button, replacing an earlier mat-form-field version
that Material's own outlined-field box model kept misaligning against the
pill buttons.
2026-07-30 10:31:55 +05:30

240 lines
9.5 KiB
TypeScript

/**
* 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/.
*/
/** Angular Imports */
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
/** Routing Imports */
import { Route } from '../core/route/route.service';
/** Custom Components */
import { CheckerInboxAndTasksComponent } from './checker-inbox-and-tasks/checker-inbox-and-tasks.component';
import { CheckerInboxComponent } from './checker-inbox-and-tasks-tabs/checker-inbox/checker-inbox.component';
import { WithdrawalRequestsComponent } from './checker-inbox-and-tasks-tabs/withdrawal-requests/withdrawal-requests.component';
import { DepositRequestsComponent } from './checker-inbox-and-tasks-tabs/deposit-requests/deposit-requests.component';
import { DisbursementRequestsComponent } from './checker-inbox-and-tasks-tabs/disbursement-requests/disbursement-requests.component';
import { ClientApprovalComponent } from './checker-inbox-and-tasks-tabs/client-approval/client-approval.component';
import { LoanApprovalComponent } from './checker-inbox-and-tasks-tabs/loan-approval/loan-approval.component';
import { LoanDisbursalComponent } from './checker-inbox-and-tasks-tabs/loan-disbursal/loan-disbursal.component';
import { RescheduleLoanComponent } from './checker-inbox-and-tasks-tabs/reschedule-loan/reschedule-loan.component';
import { PendingAccountComponent } from './checker-inbox-and-tasks-tabs/pending-account/pending-account.component';
import { RejectedAccountComponent } from './checker-inbox-and-tasks-tabs/rejected-account/rejected-account.component';
import { TerminatedAccountComponent } from './checker-inbox-and-tasks-tabs/terminated-account/terminated-account.component';
import { PendingSavingsProductsComponent } from './checker-inbox-and-tasks-tabs/pending-savings-products/pending-savings-products.component';
import { ChequebookRequestsComponent } from './checker-inbox-and-tasks-tabs/chequebook-requests/chequebook-requests.component';
import { PendingSavingsAccountEditsComponent } from './checker-inbox-and-tasks-tabs/pending-savings-account-edits/pending-savings-account-edits.component';
import { PendingShareAccountEditsComponent } from './checker-inbox-and-tasks-tabs/pending-share-account-edits/pending-share-account-edits.component';
import { PendingClientEditsComponent } from './checker-inbox-and-tasks-tabs/pending-client-edits/pending-client-edits.component';
import { ViewCheckerInboxComponent } from './view-checker-inbox/view-checker-inbox.component';
/** Custom Resolvers */
import { GetMakerCheckers } from './common-resolvers/getmakercheckers.resolver';
import { GetOffices } from './common-resolvers/getOffices.resolver';
import { GetLoansToBeApproved } from './common-resolvers/getLoansToBeApproved.resolver';
import { GetLoansToBeDisbursed } from './common-resolvers/getLoansToBeDisbursed.resolver';
import { GetRescheduleLoans } from './common-resolvers/getRescheduleLoans.resolver';
import { MakerCheckerTemplate } from './common-resolvers/makerCheckerTemplate.resolver';
import { GetCheckerInboxDetailResolver } from './common-resolvers/getCheckerInboxDetail.resolver';
import { GetPendingAccounts } from './common-resolvers/getPendingAccounts.resolver';
import { GetRejectedAccounts } from './common-resolvers/getRejectedAccounts.resolver';
import { GetTerminatedAccounts } from './common-resolvers/getTerminatedAccounts.resolver';
import { GetPendingSavingsProducts } from './common-resolvers/getPendingSavingsProducts.resolver';
import { GetPendingSavingsAccountEdits } from './common-resolvers/getPendingSavingsAccountEdits.resolver';
import { GetPendingCurrentAccountEdits } from './common-resolvers/getPendingCurrentAccountEdits.resolver';
import { GetPendingShareAccountEdits } from './common-resolvers/getPendingShareAccountEdits.resolver';
/** Tasks Routes */
const routes: Routes = [
Route.withShell([
{
path: 'checker-inbox-and-tasks',
component: CheckerInboxAndTasksComponent,
data: { title: 'Checker Inbox & Tasks', breadcrumb: 'Checker Inbox & Tasks' },
children: [
{
path: 'checker-inbox',
component: CheckerInboxComponent,
data: { title: 'Checker Inbox' },
resolve: {
makerCheckerResource: GetMakerCheckers,
makerCheckerTemplate: MakerCheckerTemplate
}
},
{
path: 'client-approval',
component: ClientApprovalComponent,
data: { title: 'Client Approval' }
},
{
path: 'loan-approval',
component: LoanApprovalComponent,
data: { title: 'Laon Approval' },
resolve: {
officesData: GetOffices,
loansData: GetLoansToBeApproved
}
},
{
path: 'loan-disbursal',
component: LoanDisbursalComponent,
data: { title: 'Loan Disbursal' },
resolve: {
loansData: GetLoansToBeDisbursed
}
},
{
path: 'reschedule-loan',
component: RescheduleLoanComponent,
data: { title: 'Reschedule Loan' },
resolve: {
rescheduleLoansData: GetRescheduleLoans
}
},
{
path: 'pending-account',
component: PendingAccountComponent,
data: { title: 'Pending Account' },
resolve: {
pendingAccountsData: GetPendingAccounts
}
},
{
path: 'rejected-account',
component: RejectedAccountComponent,
data: { title: 'Rejected Account' },
resolve: {
rejectedAccountsData: GetRejectedAccounts
}
},
{
path: 'terminated-account',
component: TerminatedAccountComponent,
data: { title: 'Terminated Account' },
resolve: {
terminatedAccountsData: GetTerminatedAccounts
}
},
{
path: 'pending-savings-products',
component: PendingSavingsProductsComponent,
data: { title: 'Pending Savings Product Edits' },
resolve: {
pendingSavingsProductsData: GetPendingSavingsProducts
}
},
{
path: 'pending-savings-account-edits',
component: PendingSavingsAccountEditsComponent,
data: { title: 'Pending Account Edits' },
resolve: {
pendingSavingsAccountEditsData: GetPendingSavingsAccountEdits,
pendingCurrentAccountEditsData: GetPendingCurrentAccountEdits
}
},
{
path: 'pending-current-account-edits',
redirectTo: 'pending-savings-account-edits'
},
{
path: 'pending-share-account-edits',
component: PendingShareAccountEditsComponent,
data: { title: 'Pending Share Account Edits' },
resolve: {
pendingShareAccountEditsData: GetPendingShareAccountEdits
}
},
{
path: 'pending-client-edits',
component: PendingClientEditsComponent,
data: { title: 'Pending Client Edits' }
},
{
path: 'withdrawal-requests',
component: WithdrawalRequestsComponent,
data: { title: 'Withdrawal Requests' }
},
{
path: 'deposit-requests',
component: DepositRequestsComponent,
data: { title: 'Deposit Requests' }
},
{
path: 'disbursement-requests',
component: DisbursementRequestsComponent,
data: { title: 'Disbursement Requests' }
},
{
path: 'chequebook-requests',
component: ChequebookRequestsComponent,
data: { title: 'Cheque Book Requests' }
}
]
},
{
path: 'checker-inbox-and-tasks/checker-inbox',
children: [
{
path: ':id/view',
component: ViewCheckerInboxComponent,
data: { title: 'View Checker Inbox Component', routeParamBreadcrumb: 'clientId' },
resolve: {
checkerInboxDetail: GetCheckerInboxDetailResolver
}
}
]
},
{
path: 'checker-inbox-and-tasks/withdrawal-requests',
children: [
{
path: ':id/review',
loadComponent: () =>
import('../clerk/withdrawal-review/withdrawal-review.component').then((m) => m.WithdrawalReviewComponent),
data: { title: 'Review Withdrawal Request', breadcrumb: 'Review Withdrawal' }
}
]
},
{
path: 'checker-inbox-and-tasks/disbursement-requests',
children: [
{
path: ':id/review',
loadComponent: () =>
import('../clerk/disbursement-review/disbursement-review.component').then(
(m) => m.DisbursementReviewComponent
),
data: { title: 'Review Disbursement Request', breadcrumb: 'Review Disbursement' }
}
]
}
])
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
providers: [
GetMakerCheckers,
GetOffices,
GetLoansToBeApproved,
GetLoansToBeDisbursed,
GetRescheduleLoans,
MakerCheckerTemplate,
GetCheckerInboxDetailResolver,
GetPendingAccounts,
GetRejectedAccounts,
GetTerminatedAccounts,
GetPendingSavingsProducts,
GetPendingSavingsAccountEdits,
GetPendingCurrentAccountEdits,
GetPendingShareAccountEdits
]
})
export class TasksRoutingModule {}