Mock data

This commit is contained in:
Hillel Coren 2020-02-24 21:52:18 +02:00
parent 15bc8ef735
commit 6805d58718
4 changed files with 245 additions and 184 deletions

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
// This version must be updated in tandem with the pubspec version.
const String kAppVersion = '2.0.8';
const String kAppVersion = '2.0.13';
const String kSiteUrl = 'https://invoiceninja.com';
//const String kAppUrl = 'https://admin.invoiceninja.com';
const String kAppUrl = 'https://staging.invoicing.co';

View File

@ -254,7 +254,7 @@ const dynamic kMockLogin = '''
"late_fee_endless_percent": 0,
"client_online_payment_notification": true,
"client_manual_payment_notification": true,
"name": "",
"name": "Test Account",
"company_logo": "",
"website": "",
"address1": "",

View File

@ -10,6 +10,7 @@ import 'package:invoiceninja_flutter/ui/app/responsive_padding.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:invoiceninja_flutter/.env.dart';
class EntityDropdown extends StatefulWidget {
const EntityDropdown({
@ -111,7 +112,8 @@ class _EntityDropdownState extends State<EntityDropdown> {
@override
Widget build(BuildContext context) {
if (isNotMobile(context)) {
// TODO remove DEMO_MODE check
if (isNotMobile(context) && !Config.DEMO_MODE) {
return TypeAheadFormField<String>(
noItemsFoundBuilder: (context) => SizedBox(),
suggestionsBoxDecoration: SuggestionsBoxDecoration(

View File

@ -25,6 +25,7 @@ import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:invoiceninja_flutter/utils/strings.dart';
import 'package:invoiceninja_flutter/.env.dart';
class ReportsScreen extends StatelessWidget {
const ReportsScreen({
@ -69,7 +70,8 @@ class ReportsScreen extends StatelessWidget {
? null
: IconButton(
icon: Icon(Icons.menu),
onPressed: () => store
onPressed: () =>
store
.dispatch(UserSettingsChanged(sidebar: AppSidebar.menu)),
),
title: Row(
@ -113,10 +115,12 @@ class ReportsScreen extends StatelessWidget {
),
if (isMobile(context) || !state.prefState.isHistoryVisible)
Builder(
builder: (context) => IconButton(
builder: (context) =>
IconButton(
icon: Icon(Icons.menu),
onPressed: () {
if (isMobile(context) || state.prefState.isHistoryFloated) {
if (isMobile(context) ||
state.prefState.isHistoryFloated) {
Scaffold.of(context).openEndDrawer();
} else {
store.dispatch(
@ -129,7 +133,8 @@ class ReportsScreen extends StatelessWidget {
),
body: ListView(
key: ValueKey(
'${viewModel.state.isSaving}_${reportsState.report}_${reportsState.group}'),
'${viewModel.state.isSaving}_${reportsState.report}_${reportsState
.group}'),
children: <Widget>[
Flex(
direction: isMobile(context) ? Axis.vertical : Axis.horizontal,
@ -159,7 +164,8 @@ class ReportsScreen extends StatelessWidget {
//kReportTaxRate,
//kReportQuote,
]
.map((report) => DropdownMenuItem(
.map((report) =>
DropdownMenuItem(
value: report,
child: Text(localization.lookup(report)),
))
@ -170,7 +176,8 @@ class ReportsScreen extends StatelessWidget {
labelText: localization.startDate,
selectedDate: reportsState.customStartDate,
allowClearing: true,
onSelected: (date) => viewModel.onSettingsChanged(
onSelected: (date) =>
viewModel.onSettingsChanged(
customStartDate: date),
),
DatePicker(
@ -254,7 +261,8 @@ class ReportsScreen extends StatelessWidget {
.where((column) =>
getReportColumnType(column, context) ==
ReportColumnType.number)
.map((column) => DropdownMenuItem(
.map((column) =>
DropdownMenuItem(
child: Text(localization.lookup(column)),
value: column,
))
@ -267,7 +275,8 @@ class ReportsScreen extends StatelessWidget {
),
ReportDataTable(
key: ValueKey(
'${viewModel.state.isSaving}_${reportsState.group}_${reportsState.selectedGroup}'),
'${viewModel.state.isSaving}_${reportsState
.group}_${reportsState.selectedGroup}'),
viewModel: viewModel,
)
],
@ -401,7 +410,8 @@ class _ReportDataTableState extends State<ReportDataTable> {
sortAscending: reportSettings.sortTotalsAscending,
columns: reportResult.totalColumns(
context,
(index, ascending) => widget.viewModel
(index, ascending) =>
widget.viewModel
.onReportTotalsSorted(index, ascending)),
rows: reportResult.totalRows(context),
),
@ -426,7 +436,8 @@ class _ReportDataTableState extends State<ReportDataTable> {
columns: reportResult.tableColumns(
context,
(index, ascending) =>
widget.viewModel.onReportSorted(sortedColumns[index], ascending)),
widget.viewModel
.onReportSorted(sortedColumns[index], ascending)),
source: dataTableSource,
),
)
@ -435,7 +446,6 @@ class _ReportDataTableState extends State<ReportDataTable> {
}
}
enum ReportColumnType {
string,
dateTime,
@ -667,8 +677,8 @@ class ReportResult {
return data;
}
List<DataColumn> tableColumns(
BuildContext context, Function(int, bool) onSortCallback) {
List<DataColumn> tableColumns(BuildContext context,
Function(int, bool) onSortCallback) {
final localization = AppLocalization.of(context);
final store = StoreProvider.of<AppState>(context);
final company = store.state.company;
@ -680,7 +690,9 @@ class ReportResult {
label: Container(
constraints: BoxConstraints(minWidth: 80),
child: Text(
(company.getCustomFieldLabel(column).isNotEmpty
(company
.getCustomFieldLabel(column)
.isNotEmpty
? company.getCustomFieldLabel(column)
: localization.lookup(column)) +
' ',
@ -694,8 +706,7 @@ class ReportResult {
];
}
DataRow tableFilters(
BuildContext context,
DataRow tableFilters(BuildContext context,
Map<String, TextEditingController> textEditingControllers,
Function(String, String) onFilterChanged) {
final localization = AppLocalization.of(context);
@ -707,14 +718,17 @@ class ReportResult {
if (textEditingControllers == null ||
!textEditingControllers.containsKey(column))
DataCell(Text(textEditingControllers == null ? 'null' : 'test'))
else if (getReportColumnType(column, context) == ReportColumnType.bool)
else
if (getReportColumnType(column, context) == ReportColumnType.bool)
DataCell(AppDropdownButton<bool>(
labelText: null,
showBlank: true,
blankValue: null,
value: textEditingControllers[column].text == 'true'
? true
: textEditingControllers[column].text == 'false' ? false : null,
: textEditingControllers[column].text == 'false'
? false
: null,
onChanged: (dynamic value) {
if (value == null) {
textEditingControllers[column].text = '';
@ -726,16 +740,21 @@ class ReportResult {
},
items: [
DropdownMenuItem(
child: Text(AppLocalization.of(context).yes),
child: Text(AppLocalization
.of(context)
.yes),
value: true,
),
DropdownMenuItem(
child: Text(AppLocalization.of(context).no),
child: Text(AppLocalization
.of(context)
.no),
value: false,
),
],
))
else if (getReportColumnType(column, context) ==
else
if (getReportColumnType(column, context) ==
ReportColumnType.number)
DataCell(TextFormField(
controller: textEditingControllers[column],
@ -756,14 +775,16 @@ class ReportResult {
},
)),
))
else if (getReportColumnType(column, context) ==
else
if (getReportColumnType(column, context) ==
ReportColumnType.dateTime ||
getReportColumnType(column, context) == ReportColumnType.date)
DataCell(AppDropdownButton<DateRange>(
labelText: null,
showBlank: true,
blankValue: null,
value: (textEditingControllers[column].text ?? '').isNotEmpty &&
value: (textEditingControllers[column].text ?? '')
.isNotEmpty &&
textEditingControllers[column].text != 'null'
? DateRange.valueOf(textEditingControllers[column].text)
: null,
@ -777,14 +798,40 @@ class ReportResult {
}
},
items: DateRange.values
.map((dateRange) => DropdownMenuItem<DateRange>(
.map((dateRange) =>
DropdownMenuItem<DateRange>(
child: Text(localization.lookup(dateRange.toString())),
value: dateRange,
))
.toList(),
))
// TODO remove DEMO_MODE check
else
DataCell(TypeAheadFormField(
if (Config.DEMO_MODE)
DataCell(TextFormField(
controller: textEditingControllers != null
? textEditingControllers[column]
: null,
decoration: InputDecoration(
suffixIcon: textEditingControllers == null
? null
: (textEditingControllers[column]?.text ?? '')
.isEmpty
? null
: IconButton(
icon: Icon(
Icons.clear,
color: Colors.grey,
),
onPressed: () {
textEditingControllers[column].text = '';
onFilterChanged(column, '');
},
)),
))
else
DataCell(
TypeAheadFormField(
noItemsFoundBuilder: (context) => SizedBox(),
suggestionsBoxDecoration: SuggestionsBoxDecoration(
constraints: BoxConstraints(
@ -800,8 +847,12 @@ class ReportResult {
.renderText(context, column)
.toLowerCase()
.contains(filter) &&
row[index].renderText(context, column).trim().isNotEmpty)
.map((row) => row[index].renderText(context, column))
row[index]
.renderText(context, column)
.trim()
.isNotEmpty)
.map((row) =>
row[index].renderText(context, column))
.toSet()
.toList();
},
@ -822,7 +873,8 @@ class ReportResult {
decoration: InputDecoration(
suffixIcon: textEditingControllers == null
? null
: (textEditingControllers[column]?.text ?? '').isEmpty
: (textEditingControllers[column]?.text ?? '')
.isEmpty
? null
: IconButton(
icon: Icon(
@ -838,7 +890,8 @@ class ReportResult {
autoFlipDirection: true,
animationStart: 1,
debounceDuration: Duration(seconds: 0),
))
),
)
]);
}
@ -875,7 +928,9 @@ class ReportResult {
String value = '';
if (column == groupBy) {
if (group.isEmpty) {
value = AppLocalization.of(context).blank;
value = AppLocalization
.of(context)
.blank;
} else if (getReportColumnType(column, context) ==
ReportColumnType.dateTime ||
getReportColumnType(column, context) == ReportColumnType.date) {
@ -911,9 +966,13 @@ class ReportResult {
}
} else if (getReportColumnType(column, context) ==
ReportColumnType.bool) {
filter = filter == AppLocalization.of(context).yes
filter = filter == AppLocalization
.of(context)
.yes
? 'true'
: filter == AppLocalization.of(context).no ? 'false' : '';
: filter == AppLocalization
.of(context)
.no ? 'false' : '';
}
store.dispatch(
UpdateReportSettings(
@ -933,8 +992,8 @@ class ReportResult {
}
}
List<DataColumn> totalColumns(
BuildContext context, Function(int, bool) onSortCallback) {
List<DataColumn> totalColumns(BuildContext context,
Function(int, bool) onSortCallback) {
final localization = AppLocalization.of(context);
columns.toList().sort((String str1, String str2) => str1.compareTo(str2));