|
1 | 1 | @page "/transaction" |
2 | 2 |
|
| 3 | +@using OpenBudgeteer.Blazor.Shared.Selector |
3 | 4 | @using OpenBudgeteer.Core.ViewModels |
4 | 5 | @using OpenBudgeteer.Core.Common.Database |
5 | 6 | @using Microsoft.EntityFrameworkCore |
|
35 | 36 | } |
36 | 37 | </div> |
37 | 38 | <div class="col-md-auto"> |
38 | | - <select class="form-select form-select-sm" style="width: auto" @onchange="@Filter_SelectionChanged"> |
39 | | - @foreach (var filter in Enum.GetValues<TransactionViewModelFilter>()) |
40 | | - { |
41 | | - if (filter == _dataContext.CurrentFilter) |
42 | | - { |
43 | | - <option selected value="@filter">@filter.GetStringValue()</option> |
44 | | - } |
45 | | - else |
46 | | - { |
47 | | - <option value="@filter">@filter.GetStringValue()</option> |
48 | | - } |
49 | | - |
50 | | - } |
51 | | - </select> |
| 39 | + <ObjectSelect |
| 40 | + GetSelectedItemIdHandler="@(e => e.ToString())" |
| 41 | + SetSelectedItemHandler="@(e => Enum.TryParse(typeof(TransactionViewModelFilter), e, out var result) ? |
| 42 | + (TransactionViewModelFilter)result : TransactionViewModelFilter.NoFilter)" |
| 43 | + @bind-SelectedItem="@_dataContext.CurrentFilter" |
| 44 | + AvailableItems="@(Enum.GetValues<TransactionViewModelFilter>())" |
| 45 | + SelectClasses="form-select form-select-sm" |
| 46 | + SelectStyles="width: auto"> |
| 47 | + <SelectOption Context="filter"> |
| 48 | + <option value="@filter">@filter.GetStringValue()</option> |
| 49 | + </SelectOption> |
| 50 | + </ObjectSelect> |
52 | 51 | </div> |
53 | 52 | <YearMonthSelector DataContext="YearMonthDataContext" /> |
54 | 53 | </div> |
|
73 | 72 | <input class="form-control form-control-sm number-input" type="date" @bind="_dataContext.NewTransaction.Transaction.TransactionDate" /> |
74 | 73 | </td> |
75 | 74 | <td> |
76 | | - |
77 | | - <select class="form-select form-select-sm" @onchange=@(e => _dataContext.NewTransaction.SelectedAccount = _dataContext.NewTransaction.AvailableAccounts.First(i => i.AccountId == Convert.ToInt32(e.Value)))> |
78 | | - @foreach (var account in _dataContext.NewTransaction.AvailableAccounts) |
79 | | - { |
80 | | - if (account.AccountId == _dataContext.NewTransaction.SelectedAccount.AccountId) |
81 | | - { |
82 | | - <option selected value="@account.AccountId">@account.Name</option> |
83 | | - } |
84 | | - else |
85 | | - { |
86 | | - <option value="@account.AccountId">@account.Name</option> |
87 | | - } |
88 | | - } |
89 | | - </select> |
| 75 | + <ObjectSelect |
| 76 | + GetSelectedItemIdHandler="@(e => e.AccountId.ToString())" |
| 77 | + SetSelectedItemHandler="@(e => _dataContext.NewTransaction.AvailableAccounts.First(i => i.AccountId == Convert.ToInt32(e)))" |
| 78 | + @bind-SelectedItem="@_dataContext.NewTransaction.SelectedAccount" |
| 79 | + AvailableItems="@_dataContext.NewTransaction.AvailableAccounts" |
| 80 | + SelectClasses="form-select form-select-sm"> |
| 81 | + <SelectOption Context="account"> |
| 82 | + <option value="@account.AccountId">@account.Name</option> |
| 83 | + </SelectOption> |
| 84 | + </ObjectSelect> |
90 | 85 | </td> |
91 | 86 | <td><input class="form-control form-control-sm" type="text" @bind="_dataContext.NewTransaction.Transaction.Payee" /></td> |
92 | 87 | <td><textarea class="form-control form-control-sm" rows="1" @bind="_dataContext.NewTransaction.Transaction.Memo"></textarea></td> |
|
98 | 93 | { |
99 | 94 | <tr> |
100 | 95 | <td> |
101 | | - <select class="form-select form-select-sm" style="background-color: @ColorTranslator.ToHtml(bucket.SelectedBucket.Color)" |
102 | | - @onchange=@((e) => bucket.SelectedBucket = bucket.AvailableBuckets.First(i => i.BucketId == Convert.ToInt32(e.Value)))> |
103 | | - @foreach (var availableBucket in bucket.AvailableBuckets) |
104 | | - { |
105 | | - if (bucket.SelectedBucket.BucketId == availableBucket.BucketId) |
106 | | - { |
107 | | - <option selected style="background-color: @ColorTranslator.ToHtml(availableBucket.Color)" value="@availableBucket.BucketId">@availableBucket.Name</option> |
108 | | - } |
109 | | - else |
110 | | - { |
111 | | - <option style="background-color: @ColorTranslator.ToHtml(availableBucket.Color)" value="@availableBucket.BucketId">@availableBucket.Name</option> |
112 | | - } |
113 | | - } |
114 | | - </select> |
| 96 | + <BucketSelect |
| 97 | + @bind-SelectedItem="@bucket.SelectedBucket" |
| 98 | + AvailableItems="@bucket.AvailableBuckets"/> |
115 | 99 | </td> |
116 | 100 | <td style="width: 90px"><input class="form-control form-control-sm number-input" type="number" @bind="bucket.Amount" /></td> |
117 | 101 | <td><button class="btn btn-sm btn-danger bi bi-trash3" @onclick="@(() => bucket.DeleteBucket())"></button></td> |
|
160 | 144 | <input class="form-control form-control-sm number-input" type="date" @bind="transaction.Transaction.TransactionDate" /> |
161 | 145 | </td> |
162 | 146 | <td> |
163 | | - <select class="form-select form-select-sm" @onchange=@(e => transaction.SelectedAccount = transaction.AvailableAccounts.First(i => i.AccountId == Convert.ToInt32(e.Value)))> |
164 | | - @foreach (var account in transaction.AvailableAccounts) |
165 | | - { |
166 | | - if (account.AccountId == transaction.SelectedAccount.AccountId) |
167 | | - { |
168 | | - <option selected value="@account.AccountId">@account.Name</option> |
169 | | - } |
170 | | - else |
171 | | - { |
172 | | - <option value="@account.AccountId">@account.Name</option> |
173 | | - } |
174 | | - } |
175 | | - </select> |
| 147 | + <ObjectSelect |
| 148 | + GetSelectedItemIdHandler="@(e => e.AccountId.ToString())" |
| 149 | + SetSelectedItemHandler="@(e => transaction.AvailableAccounts.First(i => i.AccountId == Convert.ToInt32(e)))" |
| 150 | + @bind-SelectedItem="@transaction.SelectedAccount" |
| 151 | + AvailableItems="@transaction.AvailableAccounts" |
| 152 | + SelectClasses="form-select form-select-sm"> |
| 153 | + <SelectOption Context="account"> |
| 154 | + <option value="@account.AccountId">@account.Name</option> |
| 155 | + </SelectOption> |
| 156 | + </ObjectSelect> |
176 | 157 | </td> |
177 | 158 | <td><input class="form-control form-control-sm" type="text" @bind="transaction.Transaction.Payee" /></td> |
178 | 159 | <td><textarea class="form-control form-control-sm" rows="1" @bind="transaction.Transaction.Memo"></textarea></td> |
|
184 | 165 | { |
185 | 166 | <tr> |
186 | 167 | <td> |
187 | | - <select class="form-select form-select-sm" style="background-color: @ColorTranslator.ToHtml(bucket.SelectedBucket.Color)" |
188 | | - @onchange=@((e) => bucket.SelectedBucket = bucket.AvailableBuckets.First(i => i.BucketId == Convert.ToInt32(e.Value)))> |
189 | | - @foreach (var availableBucket in bucket.AvailableBuckets) |
190 | | - { |
191 | | - if (bucket.SelectedBucket.BucketId == availableBucket.BucketId) |
192 | | - { |
193 | | - <option selected style="background-color: @ColorTranslator.ToHtml(availableBucket.Color)" value="@availableBucket.BucketId">@availableBucket.Name</option> |
194 | | - } |
195 | | - else |
196 | | - { |
197 | | - <option style="background-color: @ColorTranslator.ToHtml(availableBucket.Color)" value="@availableBucket.BucketId">@availableBucket.Name</option> |
198 | | - } |
199 | | - } |
200 | | - </select> |
| 168 | + <BucketSelect |
| 169 | + @bind-SelectedItem="@bucket.SelectedBucket" |
| 170 | + AvailableItems="@bucket.AvailableBuckets"> |
| 171 | + </BucketSelect> |
201 | 172 | </td> |
202 | 173 | <td style="width: 90px"><input class="form-control form-control-sm number-input" type="number" @bind="bucket.Amount" /></td> |
203 | 174 | <td><button class="btn btn-sm btn-danger bi bi-trash3" @onclick="@(() => bucket.DeleteBucket())"></button></td> |
|
268 | 239 | } |
269 | 240 |
|
270 | 241 | <RecurringTransactionDialog |
271 | | - DataContext="_recurringTransactionViewModel" |
| 242 | + DataContext="@_recurringTransactionViewModel" |
272 | 243 | IsDialogVisible="@_isRecurringTransactionModalDialogVisible" |
273 | 244 | OnClickCallback="@(() => _isRecurringTransactionModalDialogVisible = false)" |
274 | 245 | /> |
|
0 commit comments