v0.1.8: tap a session for full detail + receipt

- Sessions list items are now tappable -> SessionDetailScreen.
- Past sessions fetch the full receipt (GET /api/ParkingReceipt): vehicle,
  start/end, time purchased, parking/fee/total, payment (MASTERCARD ••1234),
  auth code, meter, city, transaction id. Adds an "Email me this receipt" action.
- Active sessions show zone/space/start/ends/time-remaining.
- Confirm PastSession + ParkingReceipt types from a live DL-zone session (were
  UNCONFIRMED); fix past-session card to show Zone/Description, not blank.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hank 2026-07-13 18:38:39 -07:00
parent 42a96b0cff
commit 4cb5478737
5 changed files with 243 additions and 25 deletions

View file

@ -504,17 +504,34 @@ export interface ActiveSessionsResponse {
[key: string]: unknown;
}
/** UNCONFIRMED element shape (no past sessions on the test account). */
/** CONFIRMED via a live DL-zone session (fields observed on GET /api/Session). */
export interface PastSession {
TransactionID?: number | string;
ZoneName?: string;
Zone?: string;
ZoneID?: number | string;
Space?: string;
SpaceID?: number | string;
StartTime?: string;
EndTime?: string;
TimePurchased?: number | string;
VehicleNumber?: string;
Amount?: number | string;
PaymentType?: string;
TransactionFee?: number | string;
CardFirstSix?: string;
CardLastFour?: string;
PaymentDisplay?: string;
VehiclePlate?: string;
IsPaid?: boolean;
CustomerID?: number | string;
CustomerName?: string;
City?: string;
Description?: string;
MeterTypeId?: number;
Lat?: number | string;
Long?: number | string;
IsFavorite?: boolean;
FavoriteID?: number | string;
Logo?: string;
/** Legacy/alt field some views used; prefer `Zone`. */
ZoneName?: string;
[key: string]: unknown;
}
@ -534,21 +551,41 @@ export interface PastSessionsParams {
/* Receipts */
/* ------------------------------------------------------------------ */
/** CONFIRMED via a live DL-zone receipt (GET /api/ParkingReceipt). */
export interface ParkingReceipt {
TransactionID?: number | string;
ZoneName?: string;
CustomerID?: number | string;
CustomerName?: string;
Space?: string;
SpaceID?: number | string;
MeterNumber?: string;
MeterTypeId?: number;
StartTime?: string;
EndTime?: string;
Amount?: number | string;
Total?: number | string;
TotalCost?: number | string;
TransactionFee?: number | string;
PaymentType?: string;
VehiclePlate?: string;
PaymentDisplay?: string;
CardType?: string | null;
/** Masked card, e.g. "****1234". */
CC?: string;
AuthCode?: string;
VehicleID?: number | string;
Vehicle?: string;
/** Display strings, e.g. "$0.10". */
Amount?: string;
AmountCharged?: string;
TransactionFee?: string;
Total?: string;
/** Numeric equivalents. */
AmountValue?: number;
TransactionFeeValue?: number;
TotalValue?: number;
Logo?: string;
BackgroundColor?: string;
ForegroundColor?: string;
ZoneName?: string;
[key: string]: unknown;
}
/** UNCONFIRMED (no receipts on the test account) — field names from static analysis. */
export interface ReceiptResponse {
ParkingReceipt?: ParkingReceipt;
Response?: ResponseEnvelope;