This commit is contained in:
Hillel Coren 2020-02-10 16:01:57 +02:00
parent a5feba40c6
commit fca0ea24db
8 changed files with 84 additions and 5 deletions

View File

@ -21,6 +21,7 @@ import 'package:invoiceninja_flutter/redux/static/static_state.dart';
import 'package:invoiceninja_flutter/redux/auth/auth_state.dart';
import 'package:invoiceninja_flutter/redux/company/company_state.dart';
import 'package:invoiceninja_flutter/redux/dashboard/dashboard_state.dart';
import 'package:invoiceninja_flutter/redux/reports/reports_state.dart';
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
import 'package:invoiceninja_flutter/redux/product/product_state.dart';
import 'package:invoiceninja_flutter/redux/client/client_state.dart';

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/dashboard_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
class ViewReports extends AbstractNavigatorAction implements PersistUI {
@ -11,3 +12,19 @@ class ViewReports extends AbstractNavigatorAction implements PersistUI {
final bool force;
final String report;
}
class UpdateReportSettings implements PersistUI {
UpdateReportSettings({
this.report,
this.dateRange,
this.customStartDate,
this.customEndDate,
this.currencyId,
});
final String report;
final DateRange dateRange;
final String customStartDate;
final String customEndDate;
final String currencyId;
}

View File

@ -0,0 +1,20 @@
import 'package:invoiceninja_flutter/redux/company/company_actions.dart';
import 'package:invoiceninja_flutter/redux/reports/reports_actions.dart';
import 'package:invoiceninja_flutter/redux/reports/reports_state.dart';
ReportsUIState reportsUIReducer(ReportsUIState state, dynamic action) {
if (action is UpdateReportSettings) {
return state.rebuild((b) => b
..report = action.report ?? state.report
..dateRange = action.dateRange ?? state.dateRange
..customStartDate = action.customStartDate ?? state.customStartDate
..customEndDate = action.customEndDate ?? state.customEndDate
..currencyId = action.currencyId ?? state.currencyId);
} else if (action is SelectCompany) {
//return state.rebuild((b) => b..currencyId = action.company.jcurrencyId);
// TODO re-enable
return state;
}
return state;
}

View File

@ -10,6 +10,7 @@ abstract class ReportsUIState
implements Built<ReportsUIState, ReportsUIStateBuilder> {
factory ReportsUIState() {
return _$ReportsUIState._(
report: kReportActivity,
dateRange: DateRange.last30Days,
customStartDate: '',
customEndDate: convertDateTimeToSqlDate(),
@ -19,6 +20,8 @@ abstract class ReportsUIState
ReportsUIState._();
String get report;
DateRange get dateRange;
String get customStartDate;

View File

@ -20,6 +20,9 @@ class _$ReportsUIStateSerializer
Iterable<Object> serialize(Serializers serializers, ReportsUIState object,
{FullType specifiedType = FullType.unspecified}) {
final result = <Object>[
'report',
serializers.serialize(object.report,
specifiedType: const FullType(String)),
'dateRange',
serializers.serialize(object.dateRange,
specifiedType: const FullType(DateRange)),
@ -49,6 +52,10 @@ class _$ReportsUIStateSerializer
iterator.moveNext();
final dynamic value = iterator.current;
switch (key) {
case 'report':
result.report = serializers.deserialize(value,
specifiedType: const FullType(String)) as String;
break;
case 'dateRange':
result.dateRange = serializers.deserialize(value,
specifiedType: const FullType(DateRange)) as DateRange;
@ -73,6 +80,8 @@ class _$ReportsUIStateSerializer
}
class _$ReportsUIState extends ReportsUIState {
@override
final String report;
@override
final DateRange dateRange;
@override
@ -86,11 +95,15 @@ class _$ReportsUIState extends ReportsUIState {
(new ReportsUIStateBuilder()..update(updates)).build();
_$ReportsUIState._(
{this.dateRange,
{this.report,
this.dateRange,
this.customStartDate,
this.customEndDate,
this.currencyId})
: super._() {
if (report == null) {
throw new BuiltValueNullFieldError('ReportsUIState', 'report');
}
if (dateRange == null) {
throw new BuiltValueNullFieldError('ReportsUIState', 'dateRange');
}
@ -117,6 +130,7 @@ class _$ReportsUIState extends ReportsUIState {
bool operator ==(Object other) {
if (identical(other, this)) return true;
return other is ReportsUIState &&
report == other.report &&
dateRange == other.dateRange &&
customStartDate == other.customStartDate &&
customEndDate == other.customEndDate &&
@ -126,7 +140,9 @@ class _$ReportsUIState extends ReportsUIState {
@override
int get hashCode {
return $jf($jc(
$jc($jc($jc(0, dateRange.hashCode), customStartDate.hashCode),
$jc(
$jc($jc($jc(0, report.hashCode), dateRange.hashCode),
customStartDate.hashCode),
customEndDate.hashCode),
currencyId.hashCode));
}
@ -134,6 +150,7 @@ class _$ReportsUIState extends ReportsUIState {
@override
String toString() {
return (newBuiltValueToStringHelper('ReportsUIState')
..add('report', report)
..add('dateRange', dateRange)
..add('customStartDate', customStartDate)
..add('customEndDate', customEndDate)
@ -146,6 +163,10 @@ class ReportsUIStateBuilder
implements Builder<ReportsUIState, ReportsUIStateBuilder> {
_$ReportsUIState _$v;
String _report;
String get report => _$this._report;
set report(String report) => _$this._report = report;
DateRange _dateRange;
DateRange get dateRange => _$this._dateRange;
set dateRange(DateRange dateRange) => _$this._dateRange = dateRange;
@ -168,6 +189,7 @@ class ReportsUIStateBuilder
ReportsUIStateBuilder get _$this {
if (_$v != null) {
_report = _$v.report;
_dateRange = _$v.dateRange;
_customStartDate = _$v.customStartDate;
_customEndDate = _$v.customEndDate;
@ -194,6 +216,7 @@ class ReportsUIStateBuilder
_$ReportsUIState build() {
final _$result = _$v ??
new _$ReportsUIState._(
report: report,
dateRange: dateRange,
customStartDate: customStartDate,
customEndDate: customEndDate,

View File

@ -8,6 +8,7 @@ import 'package:invoiceninja_flutter/redux/company/company_state.dart';
import 'package:invoiceninja_flutter/redux/dashboard/dashboard_actions.dart';
import 'package:invoiceninja_flutter/redux/dashboard/dashboard_reducer.dart';
import 'package:invoiceninja_flutter/redux/group/group_actions.dart';
import 'package:invoiceninja_flutter/redux/reports/reports_reducer.dart';
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_state.dart';
@ -47,6 +48,7 @@ UIState uiReducer(UIState state, dynamic action) {
..invoiceUIState.replace(invoiceUIReducer(state.invoiceUIState, action))
..dashboardUIState
.replace(dashboardUIReducer(state.dashboardUIState, action))
..reportsUIState.replace(reportsUIReducer(state.reportsUIState, action))
// STARTER: reducer - do not remove comment
..userUIState.replace(userUIReducer(state.userUIState, action))
..taxRateUIState.replace(taxRateUIReducer(state.taxRateUIState, action))

View File

@ -53,8 +53,9 @@ class ReportsScreen extends StatelessWidget {
children: <Widget>[
AppDropdownButton(
labelText: localization.report,
value: null,
onChanged: (dynamic value) => null,
value: state.uiState.reportsUIState.report,
onChanged: (dynamic value) =>
viewModel.onSettingsChanged(value),
items: [
kReportActivity,
kReportAging,

View File

@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/reports/reports_actions.dart';
import 'package:invoiceninja_flutter/redux/reports/reports_state.dart';
import 'package:invoiceninja_flutter/ui/reports/reports_screen.dart';
import 'package:redux/redux.dart';
@ -25,14 +27,24 @@ class ReportsScreenBuilder extends StatelessWidget {
}
class ReportsScreenVM {
ReportsScreenVM({@required this.state});
ReportsScreenVM({
@required this.state,
@required this.onSettingsChanged,
});
final AppState state;
final Function(String report) onSettingsChanged;
static ReportsScreenVM fromStore(Store<AppState> store) {
final state = store.state;
return ReportsScreenVM(
state: state,
onSettingsChanged: (String report) {
store.dispatch(UpdateReportSettings(
report: report,
));
},
);
}
}