This commit is contained in:
Hillel Coren 2020-02-12 23:13:33 +02:00
parent 6cfbf3b24a
commit d67ddcad86
1 changed files with 80 additions and 75 deletions

View File

@ -1,7 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:intl/intl.dart';
import 'package:invoiceninja_flutter/constants.dart'; import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
@ -53,8 +52,7 @@ class ReportsScreen extends StatelessWidget {
? null ? null
: IconButton( : IconButton(
icon: Icon(Icons.menu), icon: Icon(Icons.menu),
onPressed: () => onPressed: () => store
store
.dispatch(UserSettingsChanged(sidebar: AppSidebar.menu)), .dispatch(UserSettingsChanged(sidebar: AppSidebar.menu)),
), ),
title: Row( title: Row(
@ -94,8 +92,7 @@ class ReportsScreen extends StatelessWidget {
kReportTaxRate, kReportTaxRate,
kReportQuote, kReportQuote,
] ]
.map((report) => .map((report) => DropdownMenuItem(
DropdownMenuItem(
value: report, value: report,
child: Text(localization.lookup(report)), child: Text(localization.lookup(report)),
)) ))
@ -238,6 +235,13 @@ class _ReportDataTableState extends State<ReportDataTable> {
SingleChildScrollView( SingleChildScrollView(
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
child: DataTable( 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( columns: reportResult.tableColumns(
context, context,
(index, ascending) => (index, ascending) =>
@ -271,8 +275,8 @@ class ReportResult {
final List<String> allColumns; final List<String> allColumns;
final List<List<ReportElement>> data; final List<List<ReportElement>> data;
List<DataColumn> tableColumns(BuildContext context, List<DataColumn> tableColumns(
Function(int, bool) onSortCallback) { BuildContext context, Function(int, bool) onSortCallback) {
final localization = AppLocalization.of(context); final localization = AppLocalization.of(context);
return [ return [
@ -288,11 +292,15 @@ class ReportResult {
]; ];
} }
DataRow tableFilters(BuildContext context, DataRow tableFilters(
BuildContext context,
Map<String, TextEditingController> textEditingControllers, Map<String, TextEditingController> textEditingControllers,
Function(String, String) onFilterChanged) { Function(String, String) onFilterChanged) {
return DataRow(cells: [ return DataRow(cells: [
for (String column in columns) for (String column in columns)
if (['updated_at', 'created_at'].contains(column))
DataCell(Text(column))
else
DataCell(TypeAheadFormField( DataCell(TypeAheadFormField(
noItemsFoundBuilder: (context) => SizedBox(), noItemsFoundBuilder: (context) => SizedBox(),
suggestionsBoxDecoration: SuggestionsBoxDecoration( suggestionsBoxDecoration: SuggestionsBoxDecoration(
@ -306,10 +314,7 @@ class ReportResult {
return data return data
.where((row) => .where((row) =>
row[index].sortString().toLowerCase().contains(filter) && row[index].sortString().toLowerCase().contains(filter) &&
row[index] row[index].sortString().trim().isNotEmpty)
.sortString()
.trim()
.isNotEmpty)
.map((row) => row[index].sortString()) .map((row) => row[index].sortString())
.toSet() .toSet()
.toList(); .toList();
@ -327,7 +332,8 @@ class ReportResult {
textFieldConfiguration: TextFieldConfiguration<String>( textFieldConfiguration: TextFieldConfiguration<String>(
controller: textEditingControllers[column], controller: textEditingControllers[column],
decoration: InputDecoration( decoration: InputDecoration(
suffixIcon: (textEditingControllers[column]?.text ?? '').isEmpty suffixIcon:
(textEditingControllers[column]?.text ?? '').isEmpty
? null ? null
: IconButton( : IconButton(
icon: Icon( icon: Icon(
@ -353,8 +359,7 @@ class ReportResult {
DataRow( DataRow(
cells: row cells: row
.map( .map(
(row) => (row) => DataCell(
DataCell(
row.renderWidget(context), row.renderWidget(context),
), ),
) )