From ebc9601ce9d3dc14f7147d0bb2bcabdc1cdff675 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Tue, 21 Jul 2020 14:24:50 +0300 Subject: [PATCH] Dashboard --- lib/redux/app/app_state.dart | 2 +- lib/redux/dashboard/dashboard_reducer.dart | 6 -- lib/redux/dashboard/dashboard_state.dart | 4 - lib/redux/dashboard/dashboard_state.g.dart | 93 ++++++---------------- lib/redux/ui/ui_reducer.dart | 14 +++- lib/redux/ui/ui_state.dart | 4 + lib/redux/ui/ui_state.g.dart | 36 ++++++++- lib/ui/dashboard/dashboard_screen.dart | 2 +- 8 files changed, 76 insertions(+), 85 deletions(-) diff --git a/lib/redux/app/app_state.dart b/lib/redux/app/app_state.dart index 1361319e5..ea6fa146a 100644 --- a/lib/redux/app/app_state.dart +++ b/lib/redux/app/app_state.dart @@ -617,7 +617,7 @@ abstract class AppState implements Built { //return 'Client Count: ${userCompanyState.clientState.list.length}, Last Updated: ${userCompanyState.lastUpdated}'; //return 'Token: ${credentials.token} - ${userCompanyStates.map((state) => state?.token?.token ?? '').where((name) => name.isNotEmpty).join(',')}'; //return 'Payment Terms: ${company.settings.defaultPaymentTerms}'; - return 'Dashboard: ${dashboardUIState.selectedEntities}'; + return 'Dashboard: ${uiState.selectedEntities}'; return '\n\nURL: ${authState.url}\nRoute: ${uiState.currentRoute}\nPrev: ${uiState.previousRoute}\nis Large: ${(company?.isLarge ?? false) ? 'Yes' : 'No'}\nCompany: $companyUpdated${userCompanyState.isStale ? ' [S]' : ''}\nStatic: $staticUpdated${staticState.isStale ? ' [S]' : ''}\n'; } } diff --git a/lib/redux/dashboard/dashboard_reducer.dart b/lib/redux/dashboard/dashboard_reducer.dart index 3e22cf1a8..866bda78b 100644 --- a/lib/redux/dashboard/dashboard_reducer.dart +++ b/lib/redux/dashboard/dashboard_reducer.dart @@ -1,4 +1,3 @@ -import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja_flutter/redux/company/company_actions.dart'; import 'package:invoiceninja_flutter/redux/dashboard/dashboard_actions.dart'; import 'package:invoiceninja_flutter/redux/dashboard/dashboard_state.dart'; @@ -21,11 +20,6 @@ DashboardUIState dashboardUIReducer(DashboardUIState state, dynamic action) { } else if (action.currencyId != null) { return state.rebuild((b) => b..currencyId = action.currencyId); } - } else if (action is UpdateDashboardSelection) { - return state.rebuild((b) => b - ..selectedEntities[action.entityType] = action.entityIds == null - ? null - : BuiltList(action.entityIds)); } else if (action is SelectCompany) { //return state.rebuild((b) => b..currencyId = action.company.currencyId); // TODO re-enable diff --git a/lib/redux/dashboard/dashboard_state.dart b/lib/redux/dashboard/dashboard_state.dart index 3e36947f2..cea2ec84f 100644 --- a/lib/redux/dashboard/dashboard_state.dart +++ b/lib/redux/dashboard/dashboard_state.dart @@ -1,4 +1,3 @@ -import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/data/models/dashboard_model.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; @@ -22,7 +21,6 @@ abstract class DashboardUIState compareCustomEndDate: convertDateTimeToSqlDate(), offset: 0, currencyId: kCurrencyAll, - selectedEntities: BuiltMap>(), ); } @@ -50,8 +48,6 @@ abstract class DashboardUIState String get currencyId; - BuiltMap> get selectedEntities; - static Serializer get serializer => _$dashboardUIStateSerializer; bool matchesCurrency(String match) { diff --git a/lib/redux/dashboard/dashboard_state.g.dart b/lib/redux/dashboard/dashboard_state.g.dart index 296ee7f9d..74cee7ba4 100644 --- a/lib/redux/dashboard/dashboard_state.g.dart +++ b/lib/redux/dashboard/dashboard_state.g.dart @@ -46,12 +46,6 @@ class _$DashboardUIStateSerializer 'currencyId', serializers.serialize(object.currencyId, specifiedType: const FullType(String)), - 'selectedEntities', - serializers.serialize(object.selectedEntities, - specifiedType: const FullType(BuiltMap, const [ - const FullType(EntityType), - const FullType(BuiltList, const [const FullType(String)]) - ])), ]; return result; @@ -106,13 +100,6 @@ class _$DashboardUIStateSerializer result.currencyId = serializers.deserialize(value, specifiedType: const FullType(String)) as String; break; - case 'selectedEntities': - result.selectedEntities.replace(serializers.deserialize(value, - specifiedType: const FullType(BuiltMap, const [ - const FullType(EntityType), - const FullType(BuiltList, const [const FullType(String)]) - ]))); - break; } } @@ -139,8 +126,6 @@ class _$DashboardUIState extends DashboardUIState { final int offset; @override final String currencyId; - @override - final BuiltMap> selectedEntities; factory _$DashboardUIState( [void Function(DashboardUIStateBuilder) updates]) => @@ -155,8 +140,7 @@ class _$DashboardUIState extends DashboardUIState { this.compareCustomStartDate, this.compareCustomEndDate, this.offset, - this.currencyId, - this.selectedEntities}) + this.currencyId}) : super._() { if (dateRange == null) { throw new BuiltValueNullFieldError('DashboardUIState', 'dateRange'); @@ -189,10 +173,6 @@ class _$DashboardUIState extends DashboardUIState { if (currencyId == null) { throw new BuiltValueNullFieldError('DashboardUIState', 'currencyId'); } - if (selectedEntities == null) { - throw new BuiltValueNullFieldError( - 'DashboardUIState', 'selectedEntities'); - } } @override @@ -215,8 +195,7 @@ class _$DashboardUIState extends DashboardUIState { compareCustomStartDate == other.compareCustomStartDate && compareCustomEndDate == other.compareCustomEndDate && offset == other.offset && - currencyId == other.currencyId && - selectedEntities == other.selectedEntities; + currencyId == other.currencyId; } int __hashCode; @@ -229,17 +208,15 @@ class _$DashboardUIState extends DashboardUIState { $jc( $jc( $jc( - $jc( - $jc($jc(0, dateRange.hashCode), - customStartDate.hashCode), - customEndDate.hashCode), - enableComparison.hashCode), - compareDateRange.hashCode), - compareCustomStartDate.hashCode), - compareCustomEndDate.hashCode), - offset.hashCode), - currencyId.hashCode), - selectedEntities.hashCode)); + $jc($jc(0, dateRange.hashCode), + customStartDate.hashCode), + customEndDate.hashCode), + enableComparison.hashCode), + compareDateRange.hashCode), + compareCustomStartDate.hashCode), + compareCustomEndDate.hashCode), + offset.hashCode), + currencyId.hashCode)); } @override @@ -253,8 +230,7 @@ class _$DashboardUIState extends DashboardUIState { ..add('compareCustomStartDate', compareCustomStartDate) ..add('compareCustomEndDate', compareCustomEndDate) ..add('offset', offset) - ..add('currencyId', currencyId) - ..add('selectedEntities', selectedEntities)) + ..add('currencyId', currencyId)) .toString(); } } @@ -305,14 +281,6 @@ class DashboardUIStateBuilder String get currencyId => _$this._currencyId; set currencyId(String currencyId) => _$this._currencyId = currencyId; - MapBuilder> _selectedEntities; - MapBuilder> get selectedEntities => - _$this._selectedEntities ??= - new MapBuilder>(); - set selectedEntities( - MapBuilder> selectedEntities) => - _$this._selectedEntities = selectedEntities; - DashboardUIStateBuilder(); DashboardUIStateBuilder get _$this { @@ -326,7 +294,6 @@ class DashboardUIStateBuilder _compareCustomEndDate = _$v.compareCustomEndDate; _offset = _$v.offset; _currencyId = _$v.currencyId; - _selectedEntities = _$v.selectedEntities?.toBuilder(); _$v = null; } return this; @@ -347,31 +314,17 @@ class DashboardUIStateBuilder @override _$DashboardUIState build() { - _$DashboardUIState _$result; - try { - _$result = _$v ?? - new _$DashboardUIState._( - dateRange: dateRange, - customStartDate: customStartDate, - customEndDate: customEndDate, - enableComparison: enableComparison, - compareDateRange: compareDateRange, - compareCustomStartDate: compareCustomStartDate, - compareCustomEndDate: compareCustomEndDate, - offset: offset, - currencyId: currencyId, - selectedEntities: selectedEntities.build()); - } catch (_) { - String _$failedField; - try { - _$failedField = 'selectedEntities'; - selectedEntities.build(); - } catch (e) { - throw new BuiltValueNestedFieldError( - 'DashboardUIState', _$failedField, e.toString()); - } - rethrow; - } + final _$result = _$v ?? + new _$DashboardUIState._( + dateRange: dateRange, + customStartDate: customStartDate, + customEndDate: customEndDate, + enableComparison: enableComparison, + compareDateRange: compareDateRange, + compareCustomStartDate: compareCustomStartDate, + compareCustomEndDate: compareCustomEndDate, + offset: offset, + currencyId: currencyId); replace(_$result); return _$result; } diff --git a/lib/redux/ui/ui_reducer.dart b/lib/redux/ui/ui_reducer.dart index 5d6ae9dae..8cdb34f0f 100644 --- a/lib/redux/ui/ui_reducer.dart +++ b/lib/redux/ui/ui_reducer.dart @@ -1,3 +1,4 @@ +import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/client/client_actions.dart'; @@ -21,11 +22,10 @@ import 'package:invoiceninja_flutter/redux/project/project_reducer.dart'; import 'package:invoiceninja_flutter/redux/quote/quote_reducer.dart'; import 'package:invoiceninja_flutter/redux/task/task_reducer.dart'; import 'package:invoiceninja_flutter/redux/vendor/vendor_reducer.dart'; + // STARTER: import - do not remove comment import 'package:invoiceninja_flutter/redux/webhook/webhook_reducer.dart'; - import 'package:invoiceninja_flutter/redux/token/token_reducer.dart'; - import 'package:invoiceninja_flutter/redux/payment_term/payment_term_reducer.dart'; import 'package:invoiceninja_flutter/redux/design/design_reducer.dart'; import 'package:invoiceninja_flutter/redux/credit/credit_reducer.dart'; @@ -89,6 +89,16 @@ UIState uiReducer(UIState state, dynamic action) { .replace(settingsUIReducer(state.settingsUIState, action))); } +Reducer>> selectedEntitiesReducer = + combineReducers([ + TypedReducer>, + UpdateDashboardSelection>((state, action) { + return state.rebuild((b) => b + ..[action.entityType] = + action.entityIds == null ? null : BuiltList(action.entityIds)); + }), +]); + Reducer filterReducer = combineReducers([ TypedReducer((filter, action) { return action.filter; diff --git a/lib/redux/ui/ui_state.dart b/lib/redux/ui/ui_state.dart index 4988e4c60..714085211 100644 --- a/lib/redux/ui/ui_state.dart +++ b/lib/redux/ui/ui_state.dart @@ -1,3 +1,4 @@ +import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart'; @@ -36,6 +37,7 @@ abstract class UIState implements Built { currentRoute: currentRoute ?? LoginScreen.route, previousRoute: '', dashboardUIState: DashboardUIState(), + selectedEntities: BuiltMap>(), productUIState: ProductUIState(), clientUIState: ClientUIState(), invoiceUIState: InvoiceUIState(), @@ -69,6 +71,8 @@ abstract class UIState implements Built { int get selectedCompanyIndex; + BuiltMap> get selectedEntities; + String get currentRoute; String get previousRoute; diff --git a/lib/redux/ui/ui_state.g.dart b/lib/redux/ui/ui_state.g.dart index 85ad5d56f..797cfec26 100644 --- a/lib/redux/ui/ui_state.g.dart +++ b/lib/redux/ui/ui_state.g.dart @@ -21,6 +21,12 @@ class _$UIStateSerializer implements StructuredSerializer { 'selectedCompanyIndex', serializers.serialize(object.selectedCompanyIndex, specifiedType: const FullType(int)), + 'selectedEntities', + serializers.serialize(object.selectedEntities, + specifiedType: const FullType(BuiltMap, const [ + const FullType(EntityType), + const FullType(BuiltList, const [const FullType(String)]) + ])), 'currentRoute', serializers.serialize(object.currentRoute, specifiedType: const FullType(String)), @@ -133,6 +139,13 @@ class _$UIStateSerializer implements StructuredSerializer { result.selectedCompanyIndex = serializers.deserialize(value, specifiedType: const FullType(int)) as int; break; + case 'selectedEntities': + result.selectedEntities.replace(serializers.deserialize(value, + specifiedType: const FullType(BuiltMap, const [ + const FullType(EntityType), + const FullType(BuiltList, const [const FullType(String)]) + ]))); + break; case 'currentRoute': result.currentRoute = serializers.deserialize(value, specifiedType: const FullType(String)) as String; @@ -261,6 +274,8 @@ class _$UIState extends UIState { @override final int selectedCompanyIndex; @override + final BuiltMap> selectedEntities; + @override final String currentRoute; @override final String previousRoute; @@ -322,6 +337,7 @@ class _$UIState extends UIState { _$UIState._( {this.selectedCompanyIndex, + this.selectedEntities, this.currentRoute, this.previousRoute, this.filterEntityId, @@ -354,6 +370,9 @@ class _$UIState extends UIState { if (selectedCompanyIndex == null) { throw new BuiltValueNullFieldError('UIState', 'selectedCompanyIndex'); } + if (selectedEntities == null) { + throw new BuiltValueNullFieldError('UIState', 'selectedEntities'); + } if (currentRoute == null) { throw new BuiltValueNullFieldError('UIState', 'currentRoute'); } @@ -443,6 +462,7 @@ class _$UIState extends UIState { if (identical(other, this)) return true; return other is UIState && selectedCompanyIndex == other.selectedCompanyIndex && + selectedEntities == other.selectedEntities && currentRoute == other.currentRoute && previousRoute == other.previousRoute && filterEntityId == other.filterEntityId && @@ -494,7 +514,7 @@ class _$UIState extends UIState { $jc( $jc( $jc( - $jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc(0, selectedCompanyIndex.hashCode), currentRoute.hashCode), previousRoute.hashCode), filterEntityId.hashCode), filterEntityType.hashCode), filter.hashCode), filterClearedAt.hashCode), dashboardUIState.hashCode), productUIState.hashCode), clientUIState.hashCode), + $jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc($jc(0, selectedCompanyIndex.hashCode), selectedEntities.hashCode), currentRoute.hashCode), previousRoute.hashCode), filterEntityId.hashCode), filterEntityType.hashCode), filter.hashCode), filterClearedAt.hashCode), dashboardUIState.hashCode), productUIState.hashCode), clientUIState.hashCode), invoiceUIState.hashCode), webhookUIState.hashCode), tokenUIState.hashCode), @@ -520,6 +540,7 @@ class _$UIState extends UIState { String toString() { return (newBuiltValueToStringHelper('UIState') ..add('selectedCompanyIndex', selectedCompanyIndex) + ..add('selectedEntities', selectedEntities) ..add('currentRoute', currentRoute) ..add('previousRoute', previousRoute) ..add('filterEntityId', filterEntityId) @@ -560,6 +581,14 @@ class UIStateBuilder implements Builder { set selectedCompanyIndex(int selectedCompanyIndex) => _$this._selectedCompanyIndex = selectedCompanyIndex; + MapBuilder> _selectedEntities; + MapBuilder> get selectedEntities => + _$this._selectedEntities ??= + new MapBuilder>(); + set selectedEntities( + MapBuilder> selectedEntities) => + _$this._selectedEntities = selectedEntities; + String _currentRoute; String get currentRoute => _$this._currentRoute; set currentRoute(String currentRoute) => _$this._currentRoute = currentRoute; @@ -726,6 +755,7 @@ class UIStateBuilder implements Builder { UIStateBuilder get _$this { if (_$v != null) { _selectedCompanyIndex = _$v.selectedCompanyIndex; + _selectedEntities = _$v.selectedEntities?.toBuilder(); _currentRoute = _$v.currentRoute; _previousRoute = _$v.previousRoute; _filterEntityId = _$v.filterEntityId; @@ -779,6 +809,7 @@ class UIStateBuilder implements Builder { _$result = _$v ?? new _$UIState._( selectedCompanyIndex: selectedCompanyIndex, + selectedEntities: selectedEntities.build(), currentRoute: currentRoute, previousRoute: previousRoute, filterEntityId: filterEntityId, @@ -810,6 +841,9 @@ class UIStateBuilder implements Builder { } catch (_) { String _$failedField; try { + _$failedField = 'selectedEntities'; + selectedEntities.build(); + _$failedField = 'dashboardUIState'; dashboardUIState.build(); _$failedField = 'productUIState'; diff --git a/lib/ui/dashboard/dashboard_screen.dart b/lib/ui/dashboard/dashboard_screen.dart index 82770b050..6e1130b22 100644 --- a/lib/ui/dashboard/dashboard_screen.dart +++ b/lib/ui/dashboard/dashboard_screen.dart @@ -263,7 +263,7 @@ class _InvoiceSidebar extends StatelessWidget { final state = store.state; final invoices = memoizedUpcomingInvoices(state.invoiceState.map); final selectedIds = - state.dashboardUIState.selectedEntities[EntityType.invoice]; + state.uiState.selectedEntities[EntityType.invoice]; return _DashboardSidebar( label1: localization.upcomingInvoices,