Add transactions page with fuzzy search and success dialog for expenses

Features:
- Created TransactionsPage with mobile-optimized layout
  - Card-based transaction items with status indicators
  - Fuzzy search by description, payee, reference, username, and tags
  - Day filter options (5, 30, 60, 90 days)
  - Pagination support
  - Responsive design for mobile and desktop
- Added getUserTransactions API method to ExpensesAPI
  - Supports filtering by days, user ID, and account type
  - Returns paginated transaction data
- Updated AddExpense component with success confirmation
  - Shows success message in same dialog after submission
  - Provides option to navigate to transactions page
  - Clean single-dialog approach
- Added "My Transactions" link to navbar menu
- Added Transaction and TransactionListResponse types
- Added permission management types and API methods (grantPermission, listPermissions, revokePermission)
- Installed alert-dialog component for UI consistency

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
padreug 2025-11-13 09:57:28 +01:00
parent 78fba2a637
commit be00c61c77
20 changed files with 914 additions and 74 deletions

View file

@ -61,30 +61,40 @@ export function useModularNavigation() {
// Events module items
if (appConfig.modules.events.enabled) {
items.push({
name: 'My Tickets',
href: '/my-tickets',
items.push({
name: 'My Tickets',
href: '/my-tickets',
icon: 'Ticket',
requiresAuth: true
requiresAuth: true
})
}
// Market module items
// Market module items
if (appConfig.modules.market.enabled) {
items.push({
name: 'Market Dashboard',
href: '/market-dashboard',
items.push({
name: 'Market Dashboard',
href: '/market-dashboard',
icon: 'Store',
requiresAuth: true
requiresAuth: true
})
}
// Expenses module items
if (appConfig.modules.expenses.enabled) {
items.push({
name: 'My Transactions',
href: '/expenses/transactions',
icon: 'Receipt',
requiresAuth: true
})
}
// Base module items (always available)
items.push({
name: 'Relay Hub Status',
href: '/relay-hub-status',
items.push({
name: 'Relay Hub Status',
href: '/relay-hub-status',
icon: 'Activity',
requiresAuth: true
requiresAuth: true
})
return items