Persist table sorting

This commit is contained in:
Hillel Coren 2021-06-29 20:02:20 +03:00
parent faba03b94f
commit d8fe1c4573
26 changed files with 105 additions and 29 deletions

View File

@ -234,7 +234,7 @@ class FilterClients implements PersistUI {
final String filter; final String filter;
} }
class SortClients implements PersistUI { class SortClients implements PersistUI, PersistPrefs {
SortClients(this.field); SortClients(this.field);
final String field; final String field;

View File

@ -198,7 +198,7 @@ class FilterCompanyGateways implements PersistUI {
final String filter; final String filter;
} }
class SortCompanyGateways implements PersistUI { class SortCompanyGateways implements PersistUI, PersistPrefs {
SortCompanyGateways(this.field); SortCompanyGateways(this.field);
final String field; final String field;

View File

@ -347,7 +347,7 @@ class FilterCredits implements PersistUI {
final String filter; final String filter;
} }
class SortCredits implements PersistUI { class SortCredits implements PersistUI, PersistPrefs {
SortCredits(this.field); SortCredits(this.field);
final String field; final String field;

View File

@ -202,7 +202,7 @@ class FilterDesigns implements PersistUI {
final String filter; final String filter;
} }
class SortDesigns implements PersistUI { class SortDesigns implements PersistUI, PersistPrefs {
SortDesigns(this.field); SortDesigns(this.field);
final String field; final String field;

View File

@ -206,7 +206,7 @@ class FilterDocuments implements PersistUI {
final String filter; final String filter;
} }
class SortDocuments implements PersistUI { class SortDocuments implements PersistUI, PersistPrefs {
SortDocuments(this.field); SortDocuments(this.field);
final String field; final String field;

View File

@ -199,7 +199,7 @@ class FilterExpenses implements PersistUI {
final String filter; final String filter;
} }
class SortExpenses implements PersistUI { class SortExpenses implements PersistUI, PersistPrefs {
SortExpenses(this.field); SortExpenses(this.field);
final String field; final String field;

View File

@ -202,7 +202,7 @@ class FilterExpenseCategories implements PersistUI {
final String filter; final String filter;
} }
class SortExpenseCategories implements PersistUI { class SortExpenseCategories implements PersistUI, PersistPrefs {
SortExpenseCategories(this.field); SortExpenseCategories(this.field);
final String field; final String field;

View File

@ -200,7 +200,7 @@ class FilterGroups implements PersistUI {
final String filter; final String filter;
} }
class SortGroups implements PersistUI { class SortGroups implements PersistUI, PersistPrefs {
SortGroups(this.field); SortGroups(this.field);
final String field; final String field;

View File

@ -410,7 +410,7 @@ class FilterInvoices implements PersistUI {
final String filter; final String filter;
} }
class SortInvoices implements PersistUI { class SortInvoices implements PersistUI, PersistPrefs {
SortInvoices(this.field); SortInvoices(this.field);
final String field; final String field;

View File

@ -246,7 +246,7 @@ class FilterPayments implements PersistUI {
final String filter; final String filter;
} }
class SortPayments implements PersistUI { class SortPayments implements PersistUI, PersistPrefs {
SortPayments(this.field); SortPayments(this.field);
final String field; final String field;

View File

@ -203,7 +203,7 @@ class FilterPaymentTerms implements PersistUI {
final String filter; final String filter;
} }
class SortPaymentTerms implements PersistUI { class SortPaymentTerms implements PersistUI, PersistPrefs {
SortPaymentTerms(this.field); SortPaymentTerms(this.field);
final String field; final String field;

View File

@ -188,7 +188,7 @@ class FilterProducts implements PersistUI {
final String filter; final String filter;
} }
class SortProducts implements PersistUI { class SortProducts implements PersistUI, PersistPrefs {
SortProducts(this.field); SortProducts(this.field);
final String field; final String field;

View File

@ -204,7 +204,7 @@ class FilterProjects implements PersistUI {
final String filter; final String filter;
} }
class SortProjects implements PersistUI { class SortProjects implements PersistUI, PersistPrefs {
SortProjects(this.field); SortProjects(this.field);
final String field; final String field;

View File

@ -347,7 +347,7 @@ class FilterQuotes implements PersistUI {
final String filter; final String filter;
} }
class SortQuotes implements PersistUI { class SortQuotes implements PersistUI, PersistPrefs {
SortQuotes(this.field); SortQuotes(this.field);
final String field; final String field;

View File

@ -308,7 +308,7 @@ class FilterRecurringInvoices implements PersistUI {
final String filter; final String filter;
} }
class SortRecurringInvoices implements PersistUI { class SortRecurringInvoices implements PersistUI, PersistPrefs {
SortRecurringInvoices(this.field); SortRecurringInvoices(this.field);
final String field; final String field;

View File

@ -202,7 +202,7 @@ class FilterSubscriptions implements PersistUI {
final String filter; final String filter;
} }
class SortSubscriptions implements PersistUI { class SortSubscriptions implements PersistUI, PersistPrefs {
SortSubscriptions(this.field); SortSubscriptions(this.field);
final String field; final String field;

View File

@ -257,7 +257,7 @@ class FilterTasks implements PersistUI {
final String filter; final String filter;
} }
class SortTasks implements PersistUI { class SortTasks implements PersistUI, PersistPrefs {
SortTasks(this.field); SortTasks(this.field);
final String field; final String field;

View File

@ -202,7 +202,7 @@ class FilterTaskStatuses implements PersistUI {
final String filter; final String filter;
} }
class SortTaskStatuses implements PersistUI { class SortTaskStatuses implements PersistUI, PersistPrefs {
SortTaskStatuses(this.field); SortTaskStatuses(this.field);
final String field; final String field;

View File

@ -196,7 +196,7 @@ class FilterTaxRates implements PersistUI {
final String filter; final String filter;
} }
class SortTaxRates implements PersistUI { class SortTaxRates implements PersistUI, PersistPrefs {
SortTaxRates(this.field); SortTaxRates(this.field);
final String field; final String field;

View File

@ -215,7 +215,7 @@ class FilterTokens implements PersistUI {
final String filter; final String filter;
} }
class SortTokens implements PersistUI { class SortTokens implements PersistUI, PersistPrefs {
SortTokens(this.field); SortTokens(this.field);
final String field; final String field;

View File

@ -17,6 +17,7 @@ import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart';
import 'package:invoiceninja_flutter/redux/reports/reports_actions.dart'; import 'package:invoiceninja_flutter/redux/reports/reports_actions.dart';
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart'; import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
import 'package:invoiceninja_flutter/redux/task/task_actions.dart'; import 'package:invoiceninja_flutter/redux/task/task_actions.dart';
import 'package:invoiceninja_flutter/redux/tax_rate/tax_rate_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/pref_state.dart'; import 'package:invoiceninja_flutter/redux/ui/pref_state.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/redux/user/user_actions.dart'; import 'package:invoiceninja_flutter/redux/user/user_actions.dart';
@ -62,11 +63,86 @@ PrefState prefReducer(
..requireAuthentication = ..requireAuthentication =
requireAuthenticationReducer(state.requireAuthentication, action) requireAuthenticationReducer(state.requireAuthentication, action)
..colorTheme = colorThemeReducer(state.colorTheme, action) ..colorTheme = colorThemeReducer(state.colorTheme, action)
..useSidebarEditor ..useSidebarEditor.replace(
.replace(sidebarEditorReducer(state.useSidebarEditor, action)), sidebarEditorReducer(state.useSidebarEditor, action),
)
..sortFields.replace(sortFieldsReducer(state.sortFields, action)),
); );
} }
BuiltMap<EntityType, PrefStateSortField> _resortFields(
BuiltMap<EntityType, PrefStateSortField> value,
EntityType entityType,
String field) {
final sortField = value[entityType] ?? PrefStateSortField(field);
final directon = sortField.rebuild((b) => b
..ascending = sortField.field != field || !sortField.ascending
..field = field);
return value.rebuild((b) => b..[entityType] = directon);
}
Reducer<BuiltMap<EntityType, PrefStateSortField>> sortFieldsReducer =
combineReducers([
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortClients>(
(value, action) => _resortFields(value, EntityType.client, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortProducts>(
(value, action) =>
_resortFields(value, EntityType.product, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortInvoices>(
(value, action) =>
_resortFields(value, EntityType.invoice, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortPayments>(
(value, action) =>
_resortFields(value, EntityType.payment, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortRecurringInvoices>(
(value, action) =>
_resortFields(value, EntityType.recurringInvoice, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortQuotes>(
(value, action) => _resortFields(value, EntityType.quote, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortCredits>(
(value, action) => _resortFields(value, EntityType.credit, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortProjects>(
(value, action) =>
_resortFields(value, EntityType.project, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortTasks>(
(value, action) => _resortFields(value, EntityType.task, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortVendors>(
(value, action) => _resortFields(value, EntityType.vendor, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortExpenses>(
(value, action) =>
_resortFields(value, EntityType.expense, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortPaymentTerms>(
(value, action) =>
_resortFields(value, EntityType.payment, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortTaxRates>(
(value, action) =>
_resortFields(value, EntityType.taxRate, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortCompanyGateways>(
(value, action) =>
_resortFields(value, EntityType.companyGateway, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortUsers>(
(value, action) => _resortFields(value, EntityType.user, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortGroups>(
(value, action) => _resortFields(value, EntityType.group, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortDesigns>(
(value, action) => _resortFields(value, EntityType.design, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortTokens>(
(value, action) => _resortFields(value, EntityType.token, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortWebhooks>(
(value, action) =>
_resortFields(value, EntityType.webhook, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortExpenseCategories>(
(value, action) =>
_resortFields(value, EntityType.expenseCategory, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortTaskStatuses>(
(value, action) =>
_resortFields(value, EntityType.taskStatus, action.field)),
TypedReducer<BuiltMap<EntityType, PrefStateSortField>, SortSubscriptions>(
(value, action) =>
_resortFields(value, EntityType.subscription, action.field)),
// TODO add to starter.sh
]);
Reducer<BuiltMap<EntityType, bool>> sidebarEditorReducer = combineReducers([ Reducer<BuiltMap<EntityType, bool>> sidebarEditorReducer = combineReducers([
TypedReducer<BuiltMap<EntityType, bool>, ToggleEditorLayout>((value, action) { TypedReducer<BuiltMap<EntityType, bool>, ToggleEditorLayout>((value, action) {
final entityType = action.entityType; final entityType = action.entityType;

View File

@ -131,10 +131,10 @@ abstract class PrefState implements Built<PrefState, PrefStateBuilder> {
abstract class PrefStateSortField abstract class PrefStateSortField
implements Built<PrefStateSortField, PrefStateSortFieldBuilder> { implements Built<PrefStateSortField, PrefStateSortFieldBuilder> {
factory PrefStateSortField() { factory PrefStateSortField(String field) {
return _$PrefStateSortField._( return _$PrefStateSortField._(
field: '', field: field ?? '',
ascending: false, ascending: true,
); );
} }

View File

@ -290,7 +290,7 @@ class FilterUsers {
final String filter; final String filter;
} }
class SortUsers implements PersistUI { class SortUsers implements PersistUI, PersistPrefs {
SortUsers(this.field); SortUsers(this.field);
final String field; final String field;

View File

@ -229,7 +229,7 @@ class FilterVendors implements PersistUI {
final String filter; final String filter;
} }
class SortVendors implements PersistUI { class SortVendors implements PersistUI, PersistPrefs {
SortVendors(this.field); SortVendors(this.field);
final String field; final String field;

View File

@ -205,7 +205,7 @@ class FilterWebhooks implements PersistUI {
final String filter; final String filter;
} }
class SortWebhooks implements PersistUI { class SortWebhooks implements PersistUI, PersistPrefs {
SortWebhooks(this.field); SortWebhooks(this.field);
final String field; final String field;

View File

@ -210,7 +210,7 @@ class FilterStubs implements PersistUI {
final String filter; final String filter;
} }
class SortStubs implements PersistUI { class SortStubs implements PersistUI, PersistPrefs {
SortStubs(this.field); SortStubs(this.field);
final String field; final String field;