package transaction import "fmt" import "time" import "spend-sparrow/internal/template/svg" import "spend-sparrow/internal/types" import "github.com/google/uuid" templ Transaction(items templ.Component, filter types.TransactionItemsFilter, accounts []*types.Account, treasureChests []*types.TreasureChest) {
@items
} templ TransactionItems(transactions []*types.Transaction, accounts, treasureChests map[uuid.UUID]string) {
for _, transaction := range transactions { @TransactionItem(transaction, accounts, treasureChests) }
} templ EditTransaction(transaction *types.Transaction, accounts []*types.Account, treasureChests []*types.TreasureChest) { {{ var ( timestamp time.Time id string cancelUrl string ) party := "" description := "" accountId := "" value := "0.00" treasureChestId := "" if transaction == nil { timestamp = time.Now().UTC().Truncate(time.Minute) id = "new" cancelUrl = "/empty" } else { timestamp = transaction.Timestamp.UTC().Truncate(time.Minute) party = transaction.Party description = transaction.Description if transaction.AccountId != nil { accountId = transaction.AccountId.String() } if transaction.TreasureChestId != nil { treasureChestId = transaction.TreasureChestId.String() } value = formatFloat(transaction.Value) id = transaction.Id.String() cancelUrl = "/transaction/" + id } }}
} templ TransactionItem(transaction *types.Transaction, accounts, treasureChests map[uuid.UUID]string) { {{ background := "bg-gray-50" if transaction.Error != nil { background = "bg-yellow-50" } }}

{ transaction.Timestamp.String() }

if transaction.Error != nil { @svg.Info() }

if transaction.AccountId != nil { { accounts[*transaction.AccountId] } } else {   }

if transaction.TreasureChestId != nil { { treasureChests[*transaction.TreasureChestId] } } else {   }

if transaction.Party != "" { { transaction.Party } } else {   }

if transaction.Description != "" { { transaction.Description } } else {   }

if transaction.Value < 0 {

{ types.FormatEuros(transaction.Value) }

} else {

{ types.FormatEuros(transaction.Value) }

}
} func formatFloat(balance int64) string { euros := float64(balance) / 100 return fmt.Sprintf("%.2f", euros) }