Add desktop state/status filters

This commit is contained in:
Hillel Coren 2022-02-10 22:11:59 +02:00
parent de51f328b8
commit bbf83c8324
14 changed files with 124 additions and 66 deletions

View File

@ -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()) {

View File

@ -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()) {

View File

@ -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());

View File

@ -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()) {

View File

@ -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,

View File

@ -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()) {

View File

@ -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));
},

View File

@ -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()) {

View File

@ -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()) {

View File

@ -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()) {

View File

@ -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()) {

View File

@ -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()) {

View File

@ -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()) {

View File

@ -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()) {