Reports
This commit is contained in:
parent
984f0cc993
commit
fce21cba73
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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((_) {
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)));
|
)));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue