54 lines
1.4 KiB
Plaintext
54 lines
1.4 KiB
Plaintext
package dashboard
|
|
|
|
import "spend-sparrow/internal/types"
|
|
|
|
templ Dashboard(summary *types.DashboardMonthlySummary) {
|
|
<div class="mt-10">
|
|
<form hx-get="/" hx-target="#dashboard" hx-trigger="change" hx-push-url="true">
|
|
<label for="month">Select Month:</label>
|
|
<input
|
|
name="month"
|
|
type="date"
|
|
class="input datetime"
|
|
value={ summary.Month.String() }
|
|
/>
|
|
</form>
|
|
<div id="dashboard">
|
|
@DashboardData(summary)
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
templ DashboardData(summary *types.DashboardMonthlySummary) {
|
|
<div class="mt-10">
|
|
<section class="grid grid-cols-[auto_auto_auto_auto_1fr] gap-4">
|
|
<span>Savings</span>
|
|
<span>Income</span>
|
|
<span>Expenses</span>
|
|
<span>Total</span>
|
|
<span></span>
|
|
<span>{ types.FormatEuros(summary.Savings) }</span>
|
|
@balance(summary.Income)
|
|
@balance(summary.Expenses)
|
|
@balance(summary.Total)
|
|
</section>
|
|
<section class="grid grid-cols-[auto_auto_auto_1fr] gap-4">
|
|
<span>Total Savings</span>
|
|
<span>Total Account Balance</span>
|
|
<span>Net</span>
|
|
<span></span>
|
|
<span>{ types.FormatEuros(summary.SumOfSavings) }</span>
|
|
<span>{ types.FormatEuros(summary.SumOfAccounts) }</span>
|
|
@balance(summary.SumOfAccounts - summary.SumOfSavings)
|
|
</section>
|
|
</div>
|
|
}
|
|
|
|
templ balance(balance int64) {
|
|
if balance < 0 {
|
|
<span class="text-red-700">{ types.FormatEuros(balance) }</span>
|
|
} else {
|
|
<span class="text-green-700">{ types.FormatEuros(balance) }</span>
|
|
}
|
|
}
|