Reports
This commit is contained in:
parent
547b687b43
commit
6cfbf3b24a
|
|
@ -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(),
|
||||||
)
|
)
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue