diff --git a/lib/ui/group/group_screen.dart b/lib/ui/group/group_screen.dart index 39c792a38..1f7c18b41 100644 --- a/lib/ui/group/group_screen.dart +++ b/lib/ui/group/group_screen.dart @@ -45,6 +45,9 @@ class GroupSettingsScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterGroups(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterGroupsByState(state)); + }, ), onCheckboxPressed: () { if (store.state.groupListState.isInMultiselect()) { diff --git a/lib/ui/payment_term/payment_term_screen.dart b/lib/ui/payment_term/payment_term_screen.dart index 21d5f4c08..2645a9abe 100644 --- a/lib/ui/payment_term/payment_term_screen.dart +++ b/lib/ui/payment_term/payment_term_screen.dart @@ -49,6 +49,9 @@ class PaymentTermScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterPaymentTerms(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterPaymentTermsByState(state)); + }, ), onCheckboxPressed: () { if (store.state.paymentTermListState.isInMultiselect()) { diff --git a/lib/ui/quote/quote_screen.dart b/lib/ui/quote/quote_screen.dart index 5d8056500..309e2955f 100644 --- a/lib/ui/quote/quote_screen.dart +++ b/lib/ui/quote/quote_screen.dart @@ -36,6 +36,33 @@ class QuoteScreen extends StatelessWidget { final company = store.state.company; final userCompany = store.state.userCompany; final localization = AppLocalization.of(context); + final statuses = [ + InvoiceStatusEntity().rebuild( + (b) => b + ..id = kQuoteStatusDraft + ..name = localization.draft, + ), + InvoiceStatusEntity().rebuild( + (b) => b + ..id = kQuoteStatusSent + ..name = localization.sent, + ), + InvoiceStatusEntity().rebuild( + (b) => b + ..id = kQuoteStatusViewed + ..name = localization.viewed, + ), + InvoiceStatusEntity().rebuild( + (b) => b + ..id = kQuoteStatusApproved + ..name = localization.approved, + ), + InvoiceStatusEntity().rebuild( + (b) => b + ..id = kQuoteStatusExpired + ..name = localization.expired, + ), + ]; return ListScaffold( entityType: EntityType.quote, @@ -48,6 +75,13 @@ class QuoteScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterQuotes(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterQuotesByState(state)); + }, + onSelectedStatus: (EntityStatus status, value) { + store.dispatch(FilterQuotesByStatus(status)); + }, + statuses: statuses, ), onCheckboxPressed: () { if (store.state.quoteListState.isInMultiselect()) { @@ -90,33 +124,7 @@ class QuoteScreen extends StatelessWidget { onSelectedStatus: (EntityStatus status, value) { store.dispatch(FilterQuotesByStatus(status)); }, - statuses: [ - InvoiceStatusEntity().rebuild( - (b) => b - ..id = kQuoteStatusDraft - ..name = localization.draft, - ), - InvoiceStatusEntity().rebuild( - (b) => b - ..id = kQuoteStatusSent - ..name = localization.sent, - ), - InvoiceStatusEntity().rebuild( - (b) => b - ..id = kQuoteStatusViewed - ..name = localization.viewed, - ), - InvoiceStatusEntity().rebuild( - (b) => b - ..id = kQuoteStatusApproved - ..name = localization.approved, - ), - InvoiceStatusEntity().rebuild( - (b) => b - ..id = kQuoteStatusExpired - ..name = localization.expired, - ), - ], + statuses: statuses, onCheckboxPressed: () { if (store.state.quoteListState.isInMultiselect()) { store.dispatch(ClearQuoteMultiselect()); diff --git a/lib/ui/recurring_expense/recurring_expense_screen.dart b/lib/ui/recurring_expense/recurring_expense_screen.dart index 5a06d801a..63d20f4a9 100644 --- a/lib/ui/recurring_expense/recurring_expense_screen.dart +++ b/lib/ui/recurring_expense/recurring_expense_screen.dart @@ -49,6 +49,9 @@ class RecurringExpenseScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterRecurringExpenses(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterRecurringExpensesByState(state)); + }, ), onCheckboxPressed: () { if (store.state.recurringExpenseListState.isInMultiselect()) { diff --git a/lib/ui/recurring_invoice/recurring_invoice_screen.dart b/lib/ui/recurring_invoice/recurring_invoice_screen.dart index 7a71f28e0..6446d51b3 100644 --- a/lib/ui/recurring_invoice/recurring_invoice_screen.dart +++ b/lib/ui/recurring_invoice/recurring_invoice_screen.dart @@ -37,6 +37,34 @@ class RecurringInvoiceScreen extends StatelessWidget { final userCompany = state.userCompany; final localization = AppLocalization.of(context); + final statuses = [ + InvoiceStatusEntity().rebuild( + (b) => b + ..id = kRecurringInvoiceStatusDraft + ..name = localization.draft, + ), + InvoiceStatusEntity().rebuild( + (b) => b + ..id = kRecurringInvoiceStatusPending + ..name = localization.pending, + ), + InvoiceStatusEntity().rebuild( + (b) => b + ..id = kRecurringInvoiceStatusActive + ..name = localization.active, + ), + InvoiceStatusEntity().rebuild( + (b) => b + ..id = kRecurringInvoiceStatusPaused + ..name = localization.paused, + ), + InvoiceStatusEntity().rebuild( + (b) => b + ..id = kRecurringInvoiceStatusCompleted + ..name = localization.completed, + ), + ]; + return ListScaffold( entityType: EntityType.recurringInvoice, onHamburgerLongPress: () => @@ -50,6 +78,13 @@ class RecurringInvoiceScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterRecurringInvoices(value)); }, + onSelectedStatus: (EntityStatus status, value) { + store.dispatch(FilterRecurringInvoicesByStatus(status)); + }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterRecurringInvoicesByState(state)); + }, + statuses: statuses, ), onCheckboxPressed: () { if (store.state.recurringInvoiceListState.isInMultiselect()) { @@ -85,33 +120,7 @@ class RecurringInvoiceScreen extends StatelessWidget { store.dispatch(StartRecurringInvoiceMultiselect()); } }, - statuses: [ - InvoiceStatusEntity().rebuild( - (b) => b - ..id = kRecurringInvoiceStatusDraft - ..name = localization.draft, - ), - InvoiceStatusEntity().rebuild( - (b) => b - ..id = kRecurringInvoiceStatusPending - ..name = localization.pending, - ), - InvoiceStatusEntity().rebuild( - (b) => b - ..id = kRecurringInvoiceStatusActive - ..name = localization.active, - ), - InvoiceStatusEntity().rebuild( - (b) => b - ..id = kRecurringInvoiceStatusPaused - ..name = localization.paused, - ), - InvoiceStatusEntity().rebuild( - (b) => b - ..id = kRecurringInvoiceStatusCompleted - ..name = localization.completed, - ), - ], + statuses: statuses, customValues1: company.getCustomFieldValues(CustomFieldType.invoice1, excludeBlank: true), customValues2: company.getCustomFieldValues(CustomFieldType.invoice2, diff --git a/lib/ui/subscription/subscription_screen.dart b/lib/ui/subscription/subscription_screen.dart index 6046d3bce..09df21fd2 100644 --- a/lib/ui/subscription/subscription_screen.dart +++ b/lib/ui/subscription/subscription_screen.dart @@ -48,6 +48,9 @@ class SubscriptionScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterSubscriptions(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterSubscriptionsByState(state)); + }, ), onCheckboxPressed: () { if (store.state.subscriptionListState.isInMultiselect()) { diff --git a/lib/ui/task/task_screen.dart b/lib/ui/task/task_screen.dart index 446d9be70..c8a92340d 100644 --- a/lib/ui/task/task_screen.dart +++ b/lib/ui/task/task_screen.dart @@ -40,6 +40,18 @@ class TaskScreen extends StatelessWidget { final company = store.state.company; final userCompany = store.state.userCompany; final localization = AppLocalization.of(context); + final statuses = [ + if (!state.prefState.showKanban) + TaskStatusEntity().rebuild((b) => b + ..id = kTaskStatusInvoiced + ..name = localization.invoiced), + TaskStatusEntity().rebuild((b) => b + ..id = kTaskStatusLogged + ..name = localization.logged), + TaskStatusEntity().rebuild((b) => b + ..id = kTaskStatusRunning + ..name = localization.running), + ]; return ListScaffold( entityType: EntityType.task, @@ -52,6 +64,13 @@ class TaskScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterTasks(value)); }, + statuses: statuses, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterTasksByState(state)); + }, + onSelectedStatus: (EntityStatus status, value) { + store.dispatch(FilterTasksByStatus(status)); + }, ), onCheckboxPressed: () { if (store.state.taskListState.isInMultiselect()) { @@ -120,18 +139,7 @@ class TaskScreen extends StatelessWidget { TaskFields.duration, TaskFields.updatedAt, ], - statuses: [ - if (!state.prefState.showKanban) - TaskStatusEntity().rebuild((b) => b - ..id = kTaskStatusInvoiced - ..name = localization.invoiced), - TaskStatusEntity().rebuild((b) => b - ..id = kTaskStatusLogged - ..name = localization.logged), - TaskStatusEntity().rebuild((b) => b - ..id = kTaskStatusRunning - ..name = localization.running), - ], + statuses: statuses, onSelectedState: (EntityState state, value) { store.dispatch(FilterTasksByState(state)); }, diff --git a/lib/ui/task_status/task_status_screen.dart b/lib/ui/task_status/task_status_screen.dart index e671aa295..dabba9ec7 100644 --- a/lib/ui/task_status/task_status_screen.dart +++ b/lib/ui/task_status/task_status_screen.dart @@ -48,6 +48,9 @@ class TaskStatusScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterTaskStatuses(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterTaskStatusesByState(state)); + }, ), onCheckboxPressed: () { if (store.state.taskStatusListState.isInMultiselect()) { diff --git a/lib/ui/tax_rate/tax_rate_screen.dart b/lib/ui/tax_rate/tax_rate_screen.dart index 2950e29ee..4fe1a0801 100644 --- a/lib/ui/tax_rate/tax_rate_screen.dart +++ b/lib/ui/tax_rate/tax_rate_screen.dart @@ -45,6 +45,9 @@ class TaxRateSettingsScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterTaxRates(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterTaxRatesByState(state)); + }, ), onCheckboxPressed: () { if (store.state.taxRateListState.isInMultiselect()) { diff --git a/lib/ui/token/token_screen.dart b/lib/ui/token/token_screen.dart index 8c02c4115..25bea8585 100644 --- a/lib/ui/token/token_screen.dart +++ b/lib/ui/token/token_screen.dart @@ -48,6 +48,9 @@ class TokenScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterTokens(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterTokensByState(state)); + }, ), onCheckboxPressed: () { if (store.state.tokenListState.isInMultiselect()) { diff --git a/lib/ui/user/user_screen.dart b/lib/ui/user/user_screen.dart index 19a610530..8b0261878 100644 --- a/lib/ui/user/user_screen.dart +++ b/lib/ui/user/user_screen.dart @@ -45,6 +45,9 @@ class UserScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterUsers(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterUsersByState(state)); + }, ), onCheckboxPressed: () { if (store.state.userListState.isInMultiselect()) { diff --git a/lib/ui/vendor/vendor_screen.dart b/lib/ui/vendor/vendor_screen.dart index d7ff1f1f1..a2bf5e701 100644 --- a/lib/ui/vendor/vendor_screen.dart +++ b/lib/ui/vendor/vendor_screen.dart @@ -46,6 +46,9 @@ class VendorScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterVendors(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterVendorsByState(state)); + }, ), onCheckboxPressed: () { if (store.state.vendorListState.isInMultiselect()) { diff --git a/lib/ui/webhook/webhook_screen.dart b/lib/ui/webhook/webhook_screen.dart index e02de6804..79a1b35a9 100644 --- a/lib/ui/webhook/webhook_screen.dart +++ b/lib/ui/webhook/webhook_screen.dart @@ -47,6 +47,9 @@ class WebhookScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterWebhooks(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterWebhooksByState(state)); + }, ), onCheckboxPressed: () { if (store.state.webhookListState.isInMultiselect()) { diff --git a/stubs/ui/stub/stub_screen b/stubs/ui/stub/stub_screen index 83c0943e5..1629b2236 100644 --- a/stubs/ui/stub/stub_screen +++ b/stubs/ui/stub/stub_screen @@ -42,6 +42,9 @@ class StubScreen extends StatelessWidget { onFilterChanged: (value) { store.dispatch(FilterStubs(value)); }, + onSelectedState: (EntityState state, value) { + store.dispatch(FilterStubsByState(state)); + }, ), onCheckboxPressed: () { if (store.state.stubListState.isInMultiselect()) {