Skip to content

Resource Screens

The admin dashboard provides 48 registered resources across 42 resource directories, each following a consistent file structure.

Resource File Convention

admin/{resource}/
├── index.ts               # Barrel export + MUI icon
├── {Resource}List.tsx      # List view with filters, sorting, pagination
├── {Resource}Show.tsx      # Detail view (SimpleShowLayout or TabbedShowLayout)
├── {Resource}Create.tsx    # Create form (optional)
├── {Resource}Edit.tsx      # Edit form (optional)
├── {Resource}Actions.tsx   # Action buttons (optional)
├── *Dialog.tsx             # Custom dialogs for complex actions (optional)
├── Nested*.tsx             # Nested resource tables (optional)
└── __tests__/              # Vitest tests

Index File Pattern

Each resource directory exports its views and an icon:

// borrowers/index.ts
import PeopleIcon from "@mui/icons-material/People";

export { default as BorrowerList } from "./BorrowerList";
export { default as BorrowerCreate } from "./BorrowerCreate";
export { default as BorrowerEdit } from "./BorrowerEdit";
export { default as BorrowerShow } from "./BorrowerShow";
export const borrowerIcon = PeopleIcon;

Resource Inventory

Origination

Resource Views Description
borrowers List, Show, Create, Edit Borrower profiles with nested contacts, identities, instruments
loans List, Show, Create, Edit Loan records with lifecycle actions and nested resources
programs List, Show, Create, Edit Lending programs (installment, lease, LOC)
products List, Show, Create, Edit Loan products under programs
promotional-programs List, Show, Create, Edit Promotional rate/payment programs

Servicing

Resource Views Description
payments List, Show Payment records with reversal/refund actions
fees List, Show Assessed fees with waive action
fee-schedules List, Show, Create, Edit Fee schedule configuration
disbursements List, Show Disbursement records with process/complete actions
collateral List, Show, Create, Edit Collateral items with nested liens and valuations
modifications List, Show Loan modifications with approve/reject/apply workflow
forbearances List, Show Forbearance agreements with complete/cancel actions
deferments List, Show Payment deferments with complete/cancel actions
payoff-quotes List, Show Payoff quote generation and expiry
suspense List, Show Suspense entries with apply/refund actions

Collections

Resource Views Description
delinquency List, Show Delinquency records (read-only, system-managed)
collection-queues List, Show, Create, Edit Collection queue configuration with dashboard
dunning-schedules List, Show, Create, Edit Automated dunning sequence configuration
collection-agencies List, Show, Create, Edit External collection agency management

Case Management

Resource Views Description
cases List, Show, Create Support cases with escalate/close/reopen/snooze actions
supercases List, Show, Create Bulk case grouping with populations
campaigns List, Show, Create, Edit Mass outreach campaigns with launch/pause
interactions List, Show Borrower interaction records
pre-delinquency-rules List, Show, Create, Edit Early warning rule configuration

Portfolio & Compliance

Resource Views Description
portfolios List, Show, Create, Edit Portfolio management with auto-assign and sell actions
investors List, Show, Create, Edit Investor profiles with settlement instruments
loan-tape-configs List, Show, Create, Edit Loan tape generation configuration
compliance-rules List, Show, Create, Edit Regulatory compliance rule definitions
compliance-monitors List, Show Ongoing compliance monitoring results
credit-reporting List, Show Credit bureau reporting records
credit-disputes List, Show, Create Credit dispute investigation and resolution

Communications

Resource Views Description
communication-templates List, Show, Create, Edit Jinja2 message templates
communication-logs List, Show Communication delivery logs

Accounting

Resource Views Description
gl-accounts List, Show, Create General ledger accounts
journal-entries List, Show Journal entries with post/reverse actions

Administration

Resource Views Description
users List, Show, Edit Tenant user management with role assignment
webhooks List, Show, Create, Edit Webhook subscription management
index-rates List, Show, Create Interest rate index management
provider-configs List, Show, Create, Edit Provider credential configuration
program-provider-assignments List, Create Provider-to-program mapping
reports List, Show Report generation and viewing
documents List, Show Document management

View Patterns

List Views

All list views use react-admin's <List> with:

  • Filters: <SelectInput> with static choice arrays for enum fields, <TextInput> for search
  • Sorting: Clickable column headers
  • Pagination: Bottom pagination controls
  • Datagrid: Columns with field components (TextField, DateField, ReferenceField, MoneyField, StatusField)

Show Views

Two patterns based on complexity:

Simple resources use <SimpleShowLayout>:

<Show>
  <SimpleShowLayout>
    <TextField source="name" />
    <StatusField source="status" />
    <MoneyField source="amount" />
  </SimpleShowLayout>
</Show>

Complex resources (Borrowers, Loans) use <TabbedShowLayout> with tabs for nested resources:

<Show>
  <TabbedShowLayout>
    <TabbedShowLayout.Tab label="Summary">
      <TextField source="loan_number" />
      ...
    </TabbedShowLayout.Tab>
    <TabbedShowLayout.Tab label="Payments">
      <ReferenceManyField reference="payments" target="loan_id">
        <Datagrid>...</Datagrid>
      </ReferenceManyField>
    </TabbedShowLayout.Tab>
  </TabbedShowLayout>
</Show>

Nested Resources

Two approaches for child resources:

  1. <ReferenceManyField> --- For child resources with flat endpoints (payments, fees, disbursements). react-admin handles fetching automatically.

  2. Custom MUI tables --- For child resources with only nested endpoints (liens, valuations). Uses dataProvider.getNestedList() directly.

Action Buttons

Business actions use the shared <ActionButton> component with optional confirmation dialogs. For actions requiring form input, standalone MUI <Dialog> components collect data before calling dataProvider.action().

See Also