This commit is contained in:
Hillel Coren 2020-02-12 23:04:27 +02:00
parent 547b687b43
commit 6cfbf3b24a
1 changed files with 51 additions and 42 deletions

View File

@ -52,10 +52,11 @@ class ReportsScreen extends StatelessWidget {
leading: isMobile(context) || state.prefState.isMenuFloated leading: isMobile(context) || state.prefState.isMenuFloated
? null ? null
: IconButton( : IconButton(
icon: Icon(Icons.menu), icon: Icon(Icons.menu),
onPressed: () => store onPressed: () =>
.dispatch(UserSettingsChanged(sidebar: AppSidebar.menu)), store
), .dispatch(UserSettingsChanged(sidebar: AppSidebar.menu)),
),
title: Row( title: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: <Widget>[ children: <Widget>[
@ -93,10 +94,11 @@ class ReportsScreen extends StatelessWidget {
kReportTaxRate, kReportTaxRate,
kReportQuote, kReportQuote,
] ]
.map((report) => DropdownMenuItem( .map((report) =>
value: report, DropdownMenuItem(
child: Text(localization.lookup(report)), value: report,
)) child: Text(localization.lookup(report)),
))
.toList(), .toList(),
), ),
@ -177,7 +179,7 @@ class ReportDataTable extends StatefulWidget {
class _ReportDataTableState extends State<ReportDataTable> { class _ReportDataTableState extends State<ReportDataTable> {
final Map<String, Map<String, TextEditingController>> final Map<String, Map<String, TextEditingController>>
_textEditingControllers = {}; _textEditingControllers = {};
@override @override
void didChangeDependencies() { void didChangeDependencies() {
@ -233,22 +235,25 @@ class _ReportDataTableState extends State<ReportDataTable> {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[ children: <Widget>[
DataTable( SingleChildScrollView(
columns: reportResult.tableColumns( scrollDirection: Axis.horizontal,
context, child: DataTable(
(index, ascending) => columns: reportResult.tableColumns(
widget.viewModel.onReportSorted(index, ascending)), context,
rows: [ (index, ascending) =>
reportResult.tableFilters(context, widget.viewModel.onReportSorted(index, ascending)),
_textEditingControllers[state.uiState.reportsUIState.report], rows: [
(column, value) { reportResult.tableFilters(context,
widget.viewModel.onReportFiltersChanged( _textEditingControllers[state.uiState.reportsUIState.report],
context, (column, value) {
state.uiState.reportsUIState.filters widget.viewModel.onReportFiltersChanged(
.rebuild((b) => b..addAll({column: value}))); context,
}), state.uiState.reportsUIState.filters
...reportResult.tableRows(context), .rebuild((b) => b..addAll({column: value})));
], }),
...reportResult.tableRows(context),
],
),
), ),
], ],
); );
@ -266,13 +271,14 @@ class ReportResult {
final List<String> allColumns; final List<String> allColumns;
final List<List<ReportElement>> data; final List<List<ReportElement>> data;
List<DataColumn> tableColumns( List<DataColumn> tableColumns(BuildContext context,
BuildContext context, Function(int, bool) onSortCallback) { Function(int, bool) onSortCallback) {
final localization = AppLocalization.of(context); final localization = AppLocalization.of(context);
return [ return [
for (String column in columns) for (String column in columns)
DataColumn( DataColumn(
tooltip: localization.lookup(column),
label: Text( label: Text(
localization.lookup(column), localization.lookup(column),
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
@ -282,8 +288,7 @@ class ReportResult {
]; ];
} }
DataRow tableFilters( DataRow tableFilters(BuildContext context,
BuildContext context,
Map<String, TextEditingController> textEditingControllers, Map<String, TextEditingController> textEditingControllers,
Function(String, String) onFilterChanged) { Function(String, String) onFilterChanged) {
return DataRow(cells: [ return DataRow(cells: [
@ -300,8 +305,11 @@ class ReportResult {
final index = columns.indexOf(column); final index = columns.indexOf(column);
return data return data
.where((row) => .where((row) =>
row[index].sortString().toLowerCase().contains(filter) && row[index].sortString().toLowerCase().contains(filter) &&
row[index].sortString().trim().isNotEmpty) row[index]
.sortString()
.trim()
.isNotEmpty)
.map((row) => row[index].sortString()) .map((row) => row[index].sortString())
.toSet() .toSet()
.toList(); .toList();
@ -322,15 +330,15 @@ class ReportResult {
suffixIcon: (textEditingControllers[column]?.text ?? '').isEmpty suffixIcon: (textEditingControllers[column]?.text ?? '').isEmpty
? null ? null
: IconButton( : IconButton(
icon: Icon( icon: Icon(
Icons.clear, Icons.clear,
color: Colors.grey, color: Colors.grey,
), ),
onPressed: () { onPressed: () {
textEditingControllers[column].text = ''; textEditingControllers[column].text = '';
onFilterChanged(column, ''); onFilterChanged(column, '');
}, },
)), )),
), ),
autoFlipDirection: true, autoFlipDirection: true,
animationStart: 1, animationStart: 1,
@ -345,10 +353,11 @@ class ReportResult {
DataRow( DataRow(
cells: row cells: row
.map( .map(
(row) => DataCell( (row) =>
DataCell(
row.renderWidget(context), row.renderWidget(context),
), ),
) )
.toList(), .toList(),
) )
]; ];