This commit is contained in:
Hillel Coren 2020-02-11 20:44:54 +02:00
parent 984f0cc993
commit fce21cba73
5 changed files with 57 additions and 20 deletions

View File

@ -84,7 +84,6 @@ class _MultiSelectListState extends State<_MultiSelectList> {
.toList(), .toList(),
value: null, value: null,
onChanged: (dynamic value) { onChanged: (dynamic value) {
print('## selected $value');
if (selected.contains(value)) { if (selected.contains(value)) {
return; return;
} }
@ -109,7 +108,7 @@ class _MultiSelectListState extends State<_MultiSelectList> {
child: Text( child: Text(
localization.lookup(option), localization.lookup(option),
textAlign: TextAlign.left, textAlign: TextAlign.left,
style: Theme.of(context).textTheme.headline5, style: Theme.of(context).textTheme.headline6,
), ),
), ),
IconButton( IconButton(

View File

@ -123,21 +123,23 @@ class ReportsScreen extends StatelessWidget {
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[ children: <Widget>[
FlatButton( Builder(builder: (BuildContext context) {
child: Text(localization.editColumns.toUpperCase()), return FlatButton(
onPressed: () { child: Text(localization.editColumns.toUpperCase()),
multiselectDialog( onPressed: () {
context: context, multiselectDialog(
onSelected: (selected) { context: context,
print('## ON SELECTED: $selected'); onSelected: (selected) {
}, viewModel.onReportColumnsChanged(context, selected);
options: reportResult.allColumns, },
selected: reportResult.columns, options: reportResult.allColumns,
title: localization.editColumns, selected: reportResult.columns,
addTitle: localization.addColumn, title: localization.editColumns,
); addTitle: localization.addColumn,
}, );
) },
);
}),
], ],
), ),
FormCard( FormCard(

View File

@ -1,3 +1,4 @@
import 'package:built_collection/built_collection.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@ -6,8 +7,13 @@ import 'package:invoiceninja_flutter/data/models/dashboard_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.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_actions.dart';
import 'package:invoiceninja_flutter/redux/reports/reports_selectors.dart'; import 'package:invoiceninja_flutter/redux/reports/reports_selectors.dart';
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
import 'package:invoiceninja_flutter/ui/app/app_builder.dart';
import 'package:invoiceninja_flutter/ui/reports/client_report.dart'; import 'package:invoiceninja_flutter/ui/reports/client_report.dart';
import 'package:invoiceninja_flutter/ui/reports/reports_screen.dart'; import 'package:invoiceninja_flutter/ui/reports/reports_screen.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/dialogs.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'reports_screen.dart'; import 'reports_screen.dart';
@ -32,11 +38,13 @@ class ReportsScreenVM {
ReportsScreenVM({ ReportsScreenVM({
@required this.state, @required this.state,
@required this.onSettingsChanged, @required this.onSettingsChanged,
@required this.onReportColumnsChanged,
@required this.reportResult, @required this.reportResult,
}); });
final AppState state; final AppState state;
final ReportResult reportResult; final ReportResult reportResult;
final Function(BuildContext, List<String>) onReportColumnsChanged;
final Function({ final Function({
String report, String report,
DateRange dateRange, DateRange dateRange,
@ -61,6 +69,35 @@ class ReportsScreenVM {
return ReportsScreenVM( return ReportsScreenVM(
state: state, state: state,
reportResult: reportResult, reportResult: reportResult,
onReportColumnsChanged: (context, columns) {
final completer = snackBarCompleter<Null>(
context, AppLocalization.of(context).savedSettings);
final user = state.user.rebuild((b) => b
..userCompany
.settings
.reportColumns[state.uiState.reportsUIState.report] =
BuiltList<String>(columns));
if (state.authState.hasRecentlyEnteredPassword) {
store.dispatch(
SaveUserSettingsRequest(
completer: completer,
user: user,
),
);
} else {
passwordCallback(
context: context,
callback: (password) {
store.dispatch(
SaveUserSettingsRequest(
completer: completer,
user: user,
password: password,
),
);
});
}
},
onSettingsChanged: ({ onSettingsChanged: ({
String report, String report,
DateRange dateRange, DateRange dateRange,

View File

@ -45,8 +45,6 @@ class UserDetailsVM {
user: state.uiState.settingsUIState.user, user: state.uiState.settingsUIState.user,
onChanged: (user) => store.dispatch(UpdateUserSettings(user: user)), onChanged: (user) => store.dispatch(UpdateUserSettings(user: user)),
onSavePressed: (context) { onSavePressed: (context) {
print(
'hasRecentlyEnteredPassword: ${state.authState.hasRecentlyEnteredPassword}');
final completer = snackBarCompleter<Null>( final completer = snackBarCompleter<Null>(
context, AppLocalization.of(context).savedSettings); context, AppLocalization.of(context).savedSettings);
completer.future.then((_) { completer.future.then((_) {

View File

@ -28,13 +28,14 @@ Completer<Null> refreshCompleter(BuildContext context) {
Completer<T> snackBarCompleter<T>(BuildContext context, String message, Completer<T> snackBarCompleter<T>(BuildContext context, String message,
{bool shouldPop = false}) { {bool shouldPop = false}) {
final scaffold = Scaffold.of(context);
final Completer<T> completer = Completer<T>(); final Completer<T> completer = Completer<T>();
completer.future.then((_) { completer.future.then((_) {
if (shouldPop) { if (shouldPop) {
Navigator.of(context).pop(); Navigator.of(context).pop();
} }
Scaffold.of(context).showSnackBar(SnackBar( scaffold.showSnackBar(SnackBar(
content: SnackBarRow( content: SnackBarRow(
message: message, message: message,
))); )));