Operator guideEN

Transactions / Casino Transaction Detail

Read-only detail page for a single casino transaction identified by `casinoTransactionId`.

How to use this guide

Start with the main guide

Follow the explanation and examples first. Extra definitions and formulas are available below when you need them.

What this surface shows

This route shows one casino transaction selected by the legacy transactionId URL segment.

At runtime the page does not treat that segment as the generic transaction id. It passes the value into useTransactions({ casinoTransactionId }), so the route behaves as a detail view keyed by casinoTransactionId.

It is a read-only inspection page designed for cases where the operator needs a single transaction in a fuller layout than the list row can provide.

How to read it

The page fetches the transaction by casinoTransactionId through the same admin list source used by the casino-transactions grid and then renders the first returned row as a key-value summary.

When casinoTransactionId is present, the page does not send the normal startDate and endDate list filters. The source applies an exact casino_transaction_id filter to the standard casino transaction query.

The detail view is strongest for:

  • checking the exact transaction id
  • checking the internal casinoTransactionId versus the stored transactionId
  • confirming player email
  • confirming the game and provider
  • confirming the timestamps rendered by the shared key-value component
  • reading the non-null payload keys returned for that single row

Known caveats

  • The page fetches through the same casino transaction hook used by the list, but with casinoTransactionId pinned.
  • This is a list-query shim, not a dedicated detail endpoint. It uses the same casino transaction list source with an exact id filter.
  • The hook omits list date filters when casinoTransactionId is present, so the exact id lookup is not constrained by the default casino transaction list date range.
  • The route has no dedicated action bar, modal stack, or edit flow. It is a read-only detail page that relies on standard module navigation to leave the screen.
  • TransactionGamingDetails returns null while the query is loading and also returns null when the filtered query comes back empty. There is no dedicated empty-state card on this route.
  • The visible field inventory depends on the transaction object returned by the hook. KeyValueDisplay removes null and undefined keys before rendering.
  • The visible sections are generated by page heuristics, not by a source-authored display schema. Non-null keys are grouped into Identifiers, Financial Details, Dates & Timestamps, Status Information, and Additional Details.
  • The dedicated detail page is not the same renderer as the inline expansion panel in the casino-transactions list. The list uses a bespoke card layout with UTC wording and explicit status mapping, while this route shows raw payload keys through KeyValueDisplay.
  • KeyValueDisplay formats createdAt and updatedAt in the browser or workstation timezone because no explicit timezone is passed into getFormattedDateTime().
  • The Status row on this route uses the generic KeyValueDisplay status formatter. Numeric payload values such as 0/1/2/3 can therefore appear more raw than the humanized Pending / Complete / Failed / Rollback labels shown in the list row.
  • The numeric sanitizer replaces non-finite numeric sentinels such as NaN and Infinity with null; those null values are then hidden by KeyValueDisplay.

The exact id filter, row sanitizer, and key-value rendering have been traced. Field presence is still payload-dependent because the page renders only non-null keys returned by the list-query payload and does not own a separate empty-state or label-mapping layer.

More details

Definitions and formulas

Open only the section you need. The relevant section opens automatically when you request help for a specific item on screen.

Calculations9 topicsOpen details

Route param to casino transaction id

How It Works
The URL segment is named `transactionId`, but `TransactionGamingDetails` passes it into `useTransactions({ casinoTransactionId })`.
What To Check
Treat the dedicated detail route as a `casinoTransactionId` lookup, not as a generic transaction-id detail endpoint.

Detail fetch shape

How It Works
The detail route reuses the casino-transactions query filtered by `casinoTransactionId` instead of owning a dedicated detail payload contract.
What To Check
Treat field presence as payload-dependent rather than guaranteed across all casino transaction types.

Exact id query

How It Works
The hook omits `startDate` and `endDate` when `casinoTransactionId` is present; the source adds `casino_transaction_id = casinoTransactionId` to the standard casino transaction query.
What To Check
The detail lookup is not constrained by the list page's default date range.

First row selection

How It Works
`const transaction = transactionsList[0]` after the filtered list hook returns.
What To Check
If the source returned more than one row for the exact id filter, the detail page would render only the first row.

Loading and empty render behavior

How It Works
`TransactionGamingDetails` returns `null` while the list hook is loading and also returns `null` when the filtered query returns no rows.
What To Check
The route does not show a dedicated spinner or empty-state card for a missing transaction.

Label and group generation

How It Works
The page humanizes raw keys and `KeyValueDisplay` groups non-null fields into identifiers, financial, dates, status, or other buckets.
What To Check
A row can disappear from the page simply because its source value is `null` or `undefined` in the selected transaction payload.

Non-finite numeric sanitizer

How It Works
The source replaces `NaN`, `Infinity`, and `-Infinity` sentinels in numeric response fields with `null`; `KeyValueDisplay` then filters out null values.
What To Check
Some problematic numeric values are hidden rather than displayed as raw sentinels.

Generic currency rendering

How It Works
`TransactionGamingDetails` passes `currencyFields` into `KeyValueDisplay`, but does not pass an explicit row `currencyCode` prop.
What To Check
Currency-looking fields use the shared generic formatter behavior, not the list row's explicit `currencyCode` display path.

Dedicated detail renderer differs from inline list detail

How It Works
The route uses `KeyValueDisplay`, while the casino-transactions list row uses a bespoke expansion card with explicit status labels and UTC timestamp wording.
What To Check
Operators can see the same transaction described slightly differently on the list row versus the dedicated detail page.
Metrics5 topicsOpen details

Amount

Monetary amount shown for the selected casino transaction.

Source Basis
Selected from `CasinoTransaction.amount` by the row source after exact `casino_transaction_id` filtering.
Display Behavior
Rendered by `KeyValueDisplay` when non-null; hidden if the sanitizer returns null.
Currency Basis
Display Currency: Shared `KeyValueDisplay` formatter default because this detail component does not pass an explicit `currencyCode` prop. | Source Currency: Row `currencyCode` is available separately in the payload.

Before Balance

Wallet balance before the selected transaction when present.

Source Basis
Selected from `CasinoTransaction.before_balance` by the row source.
Display Behavior
Rendered by `KeyValueDisplay` when non-null; hidden if the sanitizer returns null.
Currency Basis
Display Currency: Shared `KeyValueDisplay` formatter default because this detail component does not pass an explicit `currencyCode` prop. | Source Currency: Row `currencyCode` is available separately in the payload.

After Balance

Wallet balance after the selected transaction when present.

Source Basis
Selected from `CasinoTransaction.after_balance` by the row source.
Display Behavior
Rendered by `KeyValueDisplay` when non-null; hidden if the sanitizer returns null.
Currency Basis
Display Currency: Shared `KeyValueDisplay` formatter default because this detail component does not pass an explicit `currencyCode` prop. | Source Currency: Row `currencyCode` is available separately in the payload.

Primary Currency Amount

Source-provided primary-currency amount for the selected transaction when present.

Source Basis
Selected from `CasinoTransaction.primary_currency_amount` by the row source.
Display Behavior
Rendered by `KeyValueDisplay` when non-null; hidden if the sanitizer returns null.

Conversion Rate

Stored conversion rate value returned for the selected transaction when present.

Source Basis
Selected from `CasinoTransaction.conversion_rate` by the row source.
Display Behavior
Rendered as a normal key-value row when non-null; hidden if the sanitizer returns null.
More help

Related pages

Transactions / Banking

Filterable banking transaction dashboard with weekly summary cards, backend stats charts, CSV export, and a detailed ledger-style table.

Transactions / Casino

Game transaction dashboard with real-time list mode, monthly analytics mode, filterable table, and a dedicated transaction detail route.

Transactions / Failed Deposit

Triage grid for failed deposit rows, provider failure reasons, normalized error groups, raw detail inspection, and CSV export.

Transactions / Failed Deposit Error Groups

Configuration surface for creating, editing, importing, exporting, and assigning failed-deposit error groups and their reasons.

Transactions / KYC

Action-heavy KYC document queue exposed under the transactions area for document review, verification, re-request, download, and third-party checks.

Transactions / Shared Detail Modals

Reusable read-only transaction payload modals for banking-style rows on banking, withdrawals, and failed-deposit surfaces.