refactor(libra): redesign transactions list status + type encoding #93
No reviewers
Labels
No labels
app:activities
app:chat
app:events
app:forum
app:libra
app:market
app:restaurant
app:tasks
app:wallet
app:webapp
bug
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
aiolabs/webapp!93
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/libra-tx-status-encoding"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Follow-up to #92. Reworks the libra standalone transactions list so each visual channel does one job and the filter UI matches the underlying axes.
Encoding
+green /-red)Badge order on each row:
[Income | Expense] [Voided | Pending approval]? [user tags...]. Type sits first, status (mutually exclusive between Voided and Pending) sits after.Filter UI
Replaces the previous type radio + voided switch with three category chips in one row:
Each chip independently toggles inclusion of one bucket of rows. Every row belongs to exactly one bucket — voided rows go to the Voided bucket regardless of their underlying type — so the model stays simple.
Defaults: Income + Expenses on, Voided off (voided is noise day-to-day; the user already saw and rejected them). The empty-selection state nudges the user to enable a category instead of showing a generic "try a different time period".
Test plan
-red amount + orange Expense badge+green amount + green Income badgeOriginal styling used the left border for entry-type (green=income, red=expense), which clashed visually with the status icons: a red border on a pending expense suggested "rejected". Split the visual channels so each conveys one thing: - Left border + status icon = workflow state (green accepted, yellow pending, red rejected/voided) - Signed/tinted amount = type (+green income, -red expense) - Strike-through + muted amount = voided - Badges = user-added tags only; income-entry / expense-entry suppressed (redundant with the amount), Voided kept as a high-signal status badge Follows the conventional bank-statement / personal-finance encoding (Wise, Mint, YNAB), where amount sign carries direction and chrome carries state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>Each chip toggles inclusion of one bucket of rows. Every row belongs to exactly one bucket — voided rows go to the Voided bucket regardless of their underlying type — so the model is straightforward: [Income] [Expenses] [Voided] | | | income expense voided (non-voided only) (any type) Defaults: Income + Expenses on, Voided off. Independent multi-select. Empty selection shows the empty state with a 'select a category' hint instead of an open-ended 'try a different time period'. Replaces the previous 'type radio + voided switch' pair: same axes, one control type, no left/right visual split. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>58cf5cb762to46e255315d46e255315dto9343bc19079343bc1907to1fc382c0291fc382c029to75dfd8a541refactor(libra): encode status on border, type on signed amountto refactor(libra): redesign transactions list status + type encoding