Company search

This commit is contained in:
unknown 2018-08-06 16:55:02 +03:00
parent ce0568f3b7
commit 4c7e3a954f
5 changed files with 55 additions and 40 deletions

View File

@ -1,6 +1,11 @@
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/company/company_state.dart'; import 'package:invoiceninja_flutter/redux/company/company_state.dart';
import 'package:memoize/memoize.dart';
var memoizedFilteredSelector = memo2((String filter,
CompanyState state) =>
filteredSelector(filter, state));
List<BaseEntity> filteredSelector(String filter, CompanyState state) { List<BaseEntity> filteredSelector(String filter, CompanyState state) {
final List<BaseEntity> list = [] final List<BaseEntity> list = []

View File

@ -6,6 +6,7 @@ import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/client/client_actions.dart'; import 'package:invoiceninja_flutter/redux/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart'; import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart';
import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:invoiceninja_flutter/utils/formatting.dart';
import 'package:invoiceninja_flutter/utils/icons.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
class ActivityListTile extends StatelessWidget { class ActivityListTile extends StatelessWidget {
@ -16,29 +17,6 @@ class ActivityListTile extends StatelessWidget {
final ActivityEntity activity; final ActivityEntity activity;
IconData getIconData(EntityType entityType) {
switch (entityType) {
case EntityType.client:
return FontAwesomeIcons.users;
case EntityType.invoice:
return FontAwesomeIcons.filePdfO;
case EntityType.payment:
return FontAwesomeIcons.creditCard;
case EntityType.credit:
return FontAwesomeIcons.creditCard;
case EntityType.quote:
return FontAwesomeIcons.fileAltO;
case EntityType.vendor:
return FontAwesomeIcons.building;
case EntityType.expense:
return FontAwesomeIcons.fileImageO;
case EntityType.task:
return FontAwesomeIcons.clockO;
default:
return null;
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final localization = AppLocalization.of(context); final localization = AppLocalization.of(context);

View File

@ -4,12 +4,16 @@ import 'package:font_awesome_flutter/font_awesome_flutter.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';
import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart';
import 'package:invoiceninja_flutter/redux/product/product_actions.dart';
import 'package:invoiceninja_flutter/ui/app/app_drawer_vm.dart'; import 'package:invoiceninja_flutter/ui/app/app_drawer_vm.dart';
import 'package:invoiceninja_flutter/ui/app/list_filter.dart'; import 'package:invoiceninja_flutter/ui/app/list_filter.dart';
import 'package:invoiceninja_flutter/ui/app/list_filter_button.dart'; import 'package:invoiceninja_flutter/ui/app/list_filter_button.dart';
import 'package:invoiceninja_flutter/ui/dashboard/dashboard_activity.dart'; import 'package:invoiceninja_flutter/ui/dashboard/dashboard_activity.dart';
import 'package:invoiceninja_flutter/ui/dashboard/dashboard_panels.dart'; import 'package:invoiceninja_flutter/ui/dashboard/dashboard_panels.dart';
import 'package:invoiceninja_flutter/ui/dashboard/dashboard_vm.dart'; import 'package:invoiceninja_flutter/ui/dashboard/dashboard_vm.dart';
import 'package:invoiceninja_flutter/utils/icons.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
class DashboardView extends StatefulWidget { class DashboardView extends StatefulWidget {
@ -81,7 +85,6 @@ class _DashboardViewState extends State<DashboardView>
} }
} }
class CustomTabBarView extends StatelessWidget { class CustomTabBarView extends StatelessWidget {
const CustomTabBarView({ const CustomTabBarView({
@required this.viewModel, @required this.viewModel,
@ -99,26 +102,29 @@ class CustomTabBarView extends StatelessWidget {
itemBuilder: (BuildContext context, index) { itemBuilder: (BuildContext context, index) {
final entity = viewModel.filteredList[index]; final entity = viewModel.filteredList[index];
final subtitle = entity.matchesFilterValue(viewModel.filter); final subtitle = entity.matchesFilterValue(viewModel.filter);
IconData icon;
switch (entity.entityType) {
case EntityType.client:
icon = FontAwesomeIcons.users;
break;
case EntityType.product:
icon = FontAwesomeIcons.cube;
break;
case EntityType.invoice:
icon = FontAwesomeIcons.filePdfO;
break;
}
return ListTile( return ListTile(
title: Text(entity.listDisplayName), title: Text(entity.listDisplayName),
leading: Icon(icon), leading: Icon(getIconData(entity.entityType)),
trailing: Icon(Icons.navigate_next), trailing: Icon(Icons.navigate_next),
subtitle: subtitle != null ? Text(subtitle) : Container(), subtitle: subtitle != null ? Text(subtitle) : Container(),
); onTap: () {
dynamic action;
switch (entity.entityType) {
case EntityType.product:
action = EditProduct(product: entity, context: context);
break;
case EntityType.client:
action = ViewClient(clientId: entity.id, context: context);
break;
case EntityType.invoice:
action =
ViewInvoice(invoiceId: entity.id, context: context);
break;
} }
StoreProvider.of<AppState>(context).dispatch(action);
},
); );
});
} }
return TabBarView( return TabBarView(

View File

@ -65,7 +65,7 @@ class DashboardVM {
isLoading: state.isLoading, isLoading: state.isLoading,
onRefreshed: (context) => _handleRefresh(context), onRefreshed: (context) => _handleRefresh(context),
filter: filter, filter: filter,
filteredList: filteredSelector(filter, state.selectedCompanyState), filteredList: memoizedFilteredSelector(filter, state.selectedCompanyState),
); );
} }
} }

26
lib/utils/icons.dart Normal file
View File

@ -0,0 +1,26 @@
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
IconData getIconData(EntityType entityType) {
switch (entityType) {
case EntityType.client:
return FontAwesomeIcons.users;
case EntityType.invoice:
return FontAwesomeIcons.filePdfO;
case EntityType.payment:
return FontAwesomeIcons.creditCard;
case EntityType.credit:
return FontAwesomeIcons.creditCard;
case EntityType.quote:
return FontAwesomeIcons.fileAltO;
case EntityType.vendor:
return FontAwesomeIcons.building;
case EntityType.expense:
return FontAwesomeIcons.fileImageO;
case EntityType.task:
return FontAwesomeIcons.clockO;
default:
return null;
}
}