From d67ddcad86d6ebbb7d77ed34b509bdbbc44bee6e Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Wed, 12 Feb 2020 23:13:33 +0200 Subject: [PATCH] Reports --- lib/ui/reports/reports_screen.dart | 155 +++++++++++++++-------------- 1 file changed, 80 insertions(+), 75 deletions(-) diff --git a/lib/ui/reports/reports_screen.dart b/lib/ui/reports/reports_screen.dart index bca22a714..753d6ff39 100644 --- a/lib/ui/reports/reports_screen.dart +++ b/lib/ui/reports/reports_screen.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart'; -import 'package:intl/intl.dart'; import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; @@ -52,11 +51,10 @@ class ReportsScreen extends StatelessWidget { leading: isMobile(context) || state.prefState.isMenuFloated ? null : IconButton( - icon: Icon(Icons.menu), - onPressed: () => - store - .dispatch(UserSettingsChanged(sidebar: AppSidebar.menu)), - ), + icon: Icon(Icons.menu), + onPressed: () => store + .dispatch(UserSettingsChanged(sidebar: AppSidebar.menu)), + ), title: Row( mainAxisSize: MainAxisSize.min, children: [ @@ -94,11 +92,10 @@ class ReportsScreen extends StatelessWidget { kReportTaxRate, kReportQuote, ] - .map((report) => - DropdownMenuItem( - value: report, - child: Text(localization.lookup(report)), - )) + .map((report) => DropdownMenuItem( + value: report, + child: Text(localization.lookup(report)), + )) .toList(), ), @@ -179,7 +176,7 @@ class ReportDataTable extends StatefulWidget { class _ReportDataTableState extends State { final Map> - _textEditingControllers = {}; + _textEditingControllers = {}; @override void didChangeDependencies() { @@ -238,19 +235,26 @@ class _ReportDataTableState extends State { SingleChildScrollView( scrollDirection: Axis.horizontal, child: DataTable( + sortColumnIndex: state.userCompany.settings + .reportSettings[state.uiState.reportsUIState.report].sortIndex, + sortAscending: state + .userCompany + .settings + .reportSettings[state.uiState.reportsUIState.report] + .sortAscending, columns: reportResult.tableColumns( context, - (index, ascending) => + (index, ascending) => widget.viewModel.onReportSorted(index, ascending)), rows: [ reportResult.tableFilters(context, _textEditingControllers[state.uiState.reportsUIState.report], - (column, value) { - widget.viewModel.onReportFiltersChanged( - context, - state.uiState.reportsUIState.filters - .rebuild((b) => b..addAll({column: value}))); - }), + (column, value) { + widget.viewModel.onReportFiltersChanged( + context, + state.uiState.reportsUIState.filters + .rebuild((b) => b..addAll({column: value}))); + }), ...reportResult.tableRows(context), ], ), @@ -271,8 +275,8 @@ class ReportResult { final List allColumns; final List> data; - List tableColumns(BuildContext context, - Function(int, bool) onSortCallback) { + List tableColumns( + BuildContext context, Function(int, bool) onSortCallback) { final localization = AppLocalization.of(context); return [ @@ -288,62 +292,64 @@ class ReportResult { ]; } - DataRow tableFilters(BuildContext context, + DataRow tableFilters( + BuildContext context, Map textEditingControllers, Function(String, String) onFilterChanged) { return DataRow(cells: [ for (String column in columns) - DataCell(TypeAheadFormField( - noItemsFoundBuilder: (context) => SizedBox(), - suggestionsBoxDecoration: SuggestionsBoxDecoration( - constraints: BoxConstraints( - minWidth: 300, + if (['updated_at', 'created_at'].contains(column)) + DataCell(Text(column)) + else + DataCell(TypeAheadFormField( + noItemsFoundBuilder: (context) => SizedBox(), + suggestionsBoxDecoration: SuggestionsBoxDecoration( + constraints: BoxConstraints( + minWidth: 300, + ), ), - ), - suggestionsCallback: (filter) { - filter = filter.toLowerCase(); - final index = columns.indexOf(column); - return data - .where((row) => - row[index].sortString().toLowerCase().contains(filter) && - row[index] - .sortString() - .trim() - .isNotEmpty) - .map((row) => row[index].sortString()) - .toSet() - .toList(); - }, - itemBuilder: (context, String entityId) { - return Padding( - padding: const EdgeInsets.all(12), - child: Text('$entityId'), - ); - }, - onSuggestionSelected: (String value) { - textEditingControllers[column].text = value; - onFilterChanged(column, value); - }, - textFieldConfiguration: TextFieldConfiguration( - controller: textEditingControllers[column], - decoration: InputDecoration( - suffixIcon: (textEditingControllers[column]?.text ?? '').isEmpty - ? null - : IconButton( - icon: Icon( - Icons.clear, - color: Colors.grey, - ), - onPressed: () { - textEditingControllers[column].text = ''; - onFilterChanged(column, ''); - }, - )), - ), - autoFlipDirection: true, - animationStart: 1, - debounceDuration: Duration(seconds: 0), - )) + suggestionsCallback: (filter) { + filter = filter.toLowerCase(); + final index = columns.indexOf(column); + return data + .where((row) => + row[index].sortString().toLowerCase().contains(filter) && + row[index].sortString().trim().isNotEmpty) + .map((row) => row[index].sortString()) + .toSet() + .toList(); + }, + itemBuilder: (context, String entityId) { + return Padding( + padding: const EdgeInsets.all(12), + child: Text('$entityId'), + ); + }, + onSuggestionSelected: (String value) { + textEditingControllers[column].text = value; + onFilterChanged(column, value); + }, + textFieldConfiguration: TextFieldConfiguration( + controller: textEditingControllers[column], + decoration: InputDecoration( + suffixIcon: + (textEditingControllers[column]?.text ?? '').isEmpty + ? null + : IconButton( + icon: Icon( + Icons.clear, + color: Colors.grey, + ), + onPressed: () { + textEditingControllers[column].text = ''; + onFilterChanged(column, ''); + }, + )), + ), + autoFlipDirection: true, + animationStart: 1, + debounceDuration: Duration(seconds: 0), + )) ]); } @@ -353,11 +359,10 @@ class ReportResult { DataRow( cells: row .map( - (row) => - DataCell( + (row) => DataCell( row.renderWidget(context), ), - ) + ) .toList(), ) ];