This commit is contained in:
Hillel Coren 2019-11-12 11:08:34 +02:00
parent 2760f4004e
commit 9eacdabc15
16 changed files with 156 additions and 97 deletions

View File

@ -12,27 +12,30 @@ class EntityType extends EnumClass {
static Serializer<EntityType> get serializer => _$entityTypeSerializer; static Serializer<EntityType> get serializer => _$entityTypeSerializer;
static const EntityType company = _$company;
static const EntityType taxRate = _$taxRate; static const EntityType taxRate = _$taxRate;
static const EntityType companyGateway = _$companyGateway; static const EntityType companyGateway = _$companyGateway;
static const EntityType gateway = _$gateway;
static const EntityType gatewayToken = _$gatewayToken;
static const EntityType invoice = _$invoice; static const EntityType invoice = _$invoice;
static const EntityType recurringInvoice = _$recurringInvoice; static const EntityType recurringInvoice = _$recurringInvoice;
static const EntityType invoiceItem = _$invoiceItem;
static const EntityType quote = _$quote; static const EntityType quote = _$quote;
static const EntityType quoteItem = _$quoteItem;
static const EntityType product = _$product; static const EntityType product = _$product;
static const EntityType client = _$client; static const EntityType client = _$client;
static const EntityType contact = _$contact;
static const EntityType task = _$task; static const EntityType task = _$task;
static const EntityType project = _$project; static const EntityType project = _$project;
static const EntityType expense = _$expense; static const EntityType expense = _$expense;
static const EntityType expenseCategory = _$expenseCategory; static const EntityType expenseCategory = _$expenseCategory;
static const EntityType vendor = _$vendor; static const EntityType vendor = _$vendor;
static const EntityType vendorContact = _$vendorContact;
static const EntityType credit = _$credit; static const EntityType credit = _$credit;
static const EntityType payment = _$payment; static const EntityType payment = _$payment;
static const EntityType group = _$group;
static const EntityType user = _$user;
static const EntityType company = _$company;
static const EntityType gateway = _$gateway;
static const EntityType gatewayToken = _$gatewayToken;
static const EntityType invoiceItem = _$invoiceItem;
static const EntityType quoteItem = _$quoteItem;
static const EntityType contact = _$contact;
static const EntityType vendorContact = _$vendorContact;
static const EntityType country = _$country; static const EntityType country = _$country;
static const EntityType currency = _$currency; static const EntityType currency = _$currency;
static const EntityType language = _$language; static const EntityType language = _$language;
@ -41,11 +44,9 @@ class EntityType extends EnumClass {
static const EntityType paymentType = _$paymentType; static const EntityType paymentType = _$paymentType;
static const EntityType taskStatus = _$taskStatus; static const EntityType taskStatus = _$taskStatus;
static const EntityType document = _$document; static const EntityType document = _$document;
static const EntityType group = _$group;
static const EntityType timezone = _$timezone; static const EntityType timezone = _$timezone;
static const EntityType dateFormat = _$dateFormat; static const EntityType dateFormat = _$dateFormat;
static const EntityType font = _$font; static const EntityType font = _$font;
static const EntityType user = _$user;
String get plural { String get plural {
return toString() + 's'; return toString() + 's';

View File

@ -1,8 +1,23 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/data/models/static/static_data_model.dart'; import 'package:invoiceninja_flutter/data/models/static/static_data_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/redux/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/company_gateway/company_gateway_actions.dart';
import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart';
import 'package:invoiceninja_flutter/redux/group/group_actions.dart';
import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart';
import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart';
import 'package:invoiceninja_flutter/redux/product/product_actions.dart';
import 'package:invoiceninja_flutter/redux/project/project_actions.dart';
import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart';
import 'package:invoiceninja_flutter/redux/task/task_actions.dart';
import 'package:invoiceninja_flutter/redux/tax_rate/tax_rate_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/ui_state.dart'; import 'package:invoiceninja_flutter/redux/ui/ui_state.dart';
import 'package:invoiceninja_flutter/redux/user/user_actions.dart';
import 'package:invoiceninja_flutter/redux/vendor/vendor_actions.dart';
class PersistUI {} class PersistUI {}
@ -94,3 +109,60 @@ class FilterCompany {
final String filter; final String filter;
} }
void viewEntityById(
{BuildContext context, String entityId, EntityType entityType}) {
final store = StoreProvider.of<AppState>(context);
switch (entityType) {
case EntityType.client:
store.dispatch(ViewClient(clientId: entityId, context: context));
break;
case EntityType.user:
store.dispatch(ViewUser(userId: entityId, context: context));
break;
case EntityType.project:
store.dispatch(ViewProject(projectId: entityId, context: context));
break;
case EntityType.taxRate:
store.dispatch(ViewTaxRate(taxRateId: entityId, context: context));
break;
case EntityType.companyGateway:
store.dispatch(
ViewCompanyGateway(companyGatewayId: entityId, context: context));
break;
case EntityType.invoice:
store.dispatch(ViewInvoice(invoiceId: entityId, context: context));
break;
//case EntityType.recurringInvoice:
//store.dispatch(ViewRecurringInvoice(recurringInvoiceId: entityId, context: context));
//break;
case EntityType.quote:
store.dispatch(ViewQuote(quoteId: entityId, context: context));
break;
case EntityType.vendor:
store.dispatch(ViewVendor(vendorId: entityId, context: context));
break;
case EntityType.product:
store.dispatch(ViewProduct(productId: entityId, context: context));
break;
case EntityType.task:
store.dispatch(ViewTask(taskId: entityId, context: context));
break;
case EntityType.expense:
store.dispatch(ViewExpense(expenseId: entityId, context: context));
break;
//case EntityType.expenseCategory:
//store.dispatch(ViewExpenseCategory(taxRateId: entityId, context: context));
//break;
//case EntityType.credit:
//store.dispatch(ViewCredit(creditId: entityId, context: context));
//break;
case EntityType.payment:
store.dispatch(ViewPayment(paymentId: entityId, context: context));
break;
case EntityType.group:
store.dispatch(ViewGroup(groupId: entityId, context: context));
break;
// TODO Add to starter
}
}

View File

@ -6,10 +6,12 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.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/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/client/client_selectors.dart'; import 'package:invoiceninja_flutter/redux/client/client_selectors.dart';
import 'package:invoiceninja_flutter/redux/group/group_actions.dart'; import 'package:invoiceninja_flutter/redux/group/group_actions.dart';
import 'package:invoiceninja_flutter/redux/user/user_actions.dart';
import 'package:invoiceninja_flutter/ui/client/client_list.dart'; import 'package:invoiceninja_flutter/ui/client/client_list.dart';
import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
@ -88,9 +90,10 @@ class ClientListVM {
EntityAction action) => EntityAction action) =>
handleClientAction(context, client, action), handleClientAction(context, client, action),
onClearEntityFilterPressed: () => store.dispatch(FilterClientsByEntity()), onClearEntityFilterPressed: () => store.dispatch(FilterClientsByEntity()),
onViewEntityFilterPressed: (BuildContext context) => store.dispatch( onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
ViewGroup( context: context,
groupId: state.clientListState.filterEntityId, context: context)), entityId: state.clientListState.filterEntityId,
entityType: state.clientListState.filterEntityType),
); );
} }
} }

View File

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:invoiceninja_flutter/data/models/company_gateway_model.dart'; import 'package:invoiceninja_flutter/data/models/company_gateway_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart'; import 'package:invoiceninja_flutter/redux/settings/settings_actions.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -84,10 +85,10 @@ class CompanyGatewayListVM {
filter: state.companyGatewayUIState.listUIState.filter, filter: state.companyGatewayUIState.listUIState.filter,
onClearEntityFilterPressed: () => onClearEntityFilterPressed: () =>
store.dispatch(FilterCompanyGatewaysByEntity()), store.dispatch(FilterCompanyGatewaysByEntity()),
onViewEntityFilterPressed: (BuildContext context) => store.dispatch( onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
ViewClient( context: context,
clientId: state.companyGatewayListState.filterEntityId, entityId: state.companyGatewayListState.filterEntityId,
context: context)), entityType: state.companyGatewayListState.filterEntityType),
onCompanyGatewayTap: (context, companyGateway) { onCompanyGatewayTap: (context, companyGateway) {
store.dispatch(ViewCompanyGateway( store.dispatch(ViewCompanyGateway(
companyGatewayId: companyGateway.id, context: context)); companyGatewayId: companyGateway.id, context: context));

View File

@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.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/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/document/document_actions.dart'; import 'package:invoiceninja_flutter/redux/document/document_actions.dart';
@ -72,10 +73,10 @@ class DocumentListVM {
filter: state.documentUIState.listUIState.filter, filter: state.documentUIState.listUIState.filter,
onClearEntityFilterPressed: () => onClearEntityFilterPressed: () =>
store.dispatch(FilterDocumentsByEntity()), store.dispatch(FilterDocumentsByEntity()),
onViewEntityFilterPressed: (BuildContext context) => store.dispatch( onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
ViewClient( context: context,
clientId: state.documentListState.filterEntityId, entityId: state.documentListState.filterEntityId,
context: context)), entityType: state.documentListState.filterEntityType),
onDocumentTap: (context, document) { onDocumentTap: (context, document) {
store.dispatch(ViewDocument(documentId: document.id, context: context)); store.dispatch(ViewDocument(documentId: document.id, context: context));
}, },

View File

@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.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/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart'; import 'package:invoiceninja_flutter/redux/expense/expense_actions.dart';
@ -79,20 +80,10 @@ class ExpenseListVM {
filter: state.expenseUIState.listUIState.filter, filter: state.expenseUIState.listUIState.filter,
onClearEntityFilterPressed: () => onClearEntityFilterPressed: () =>
store.dispatch(FilterExpensesByEntity()), store.dispatch(FilterExpensesByEntity()),
onViewEntityFilterPressed: (BuildContext context) { onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
switch (state.expenseListState.filterEntityType) { context: context,
case EntityType.client: entityId: state.expenseListState.filterEntityId,
store.dispatch(ViewClient( entityType: state.expenseListState.filterEntityType),
clientId: state.expenseListState.filterEntityId,
context: context));
break;
case EntityType.vendor:
store.dispatch(ViewVendor(
vendorId: state.expenseListState.filterEntityId,
context: context));
break;
}
},
onExpenseTap: (context, expense) { onExpenseTap: (context, expense) {
store.dispatch(ViewExpense(expenseId: expense.id, context: context)); store.dispatch(ViewExpense(expenseId: expense.id, context: context));
}, },

View File

@ -7,6 +7,7 @@ import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/group_model.dart'; import 'package:invoiceninja_flutter/data/models/group_model.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.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/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/group/group_actions.dart'; import 'package:invoiceninja_flutter/redux/group/group_actions.dart';
@ -72,9 +73,10 @@ class GroupListVM {
isLoaded: state.groupState.isLoaded, isLoaded: state.groupState.isLoaded,
filter: state.groupUIState.listUIState.filter, filter: state.groupUIState.listUIState.filter,
onClearEntityFilterPressed: () => store.dispatch(FilterGroupsByEntity()), onClearEntityFilterPressed: () => store.dispatch(FilterGroupsByEntity()),
onViewEntityFilterPressed: (BuildContext context) => store.dispatch( onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
ViewClient( context: context,
clientId: state.groupListState.filterEntityId, context: context)), entityId: state.groupListState.filterEntityId,
entityType: state.groupListState.filterEntityType),
onGroupTap: (context, group) { onGroupTap: (context, group) {
store.dispatch(ViewGroup(groupId: group.id, context: context)); store.dispatch(ViewGroup(groupId: group.id, context: context));
}, },

View File

@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.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/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart'; import 'package:invoiceninja_flutter/redux/invoice/invoice_actions.dart';
@ -136,16 +137,10 @@ class InvoiceListVM extends EntityListVM {
onRefreshed: (context) => _handleRefresh(context), onRefreshed: (context) => _handleRefresh(context),
onClearEntityFilterPressed: () => onClearEntityFilterPressed: () =>
store.dispatch(FilterInvoicesByEntity()), store.dispatch(FilterInvoicesByEntity()),
onViewEntityFilterPressed: (BuildContext context) { onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
if (state.invoiceListState.filterEntityType == EntityType.client) { context: context,
store.dispatch(ViewClient( entityId: state.invoiceListState.filterEntityId,
clientId: state.invoiceListState.filterEntityId, entityType: state.invoiceListState.filterEntityType),
context: context));
} else if (state.invoiceListState.filterEntityType == EntityType.user) {
store.dispatch(ViewUser(
userId: state.invoiceListState.filterEntityId, context: context));
}
},
onEntityAction: (BuildContext context, List<BaseEntity> invoices, onEntityAction: (BuildContext context, List<BaseEntity> invoices,
EntityAction action) => EntityAction action) =>
handleInvoiceAction(context, invoices, action), handleInvoiceAction(context, invoices, action),

View File

@ -6,12 +6,14 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.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/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/redux/payment/payment_actions.dart'; import 'package:invoiceninja_flutter/redux/payment/payment_actions.dart';
import 'package:invoiceninja_flutter/redux/payment/payment_selectors.dart'; import 'package:invoiceninja_flutter/redux/payment/payment_selectors.dart';
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
import 'package:invoiceninja_flutter/redux/user/user_actions.dart';
import 'package:invoiceninja_flutter/ui/payment/payment_list.dart'; import 'package:invoiceninja_flutter/ui/payment/payment_list.dart';
import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
@ -85,20 +87,10 @@ class PaymentListVM {
handlePaymentAction(context, payments, action), handlePaymentAction(context, payments, action),
onClearEntityFilterPressed: () => onClearEntityFilterPressed: () =>
store.dispatch(FilterPaymentsByEntity()), store.dispatch(FilterPaymentsByEntity()),
onViewEntityFilterPressed: (BuildContext context) { onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
switch (state.paymentListState.filterEntityType) { context: context,
case EntityType.client: entityId: state.paymentListState.filterEntityId,
store.dispatch(ViewClient( entityType: state.paymentListState.filterEntityType),
clientId: state.paymentListState.filterEntityId,
context: context));
break;
case EntityType.invoice:
store.dispatch(ViewInvoice(
invoiceId: state.paymentListState.filterEntityId,
context: context));
break;
}
},
onRefreshed: (context) => _handleRefresh(context), onRefreshed: (context) => _handleRefresh(context),
); );
} }

View File

@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.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/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/project/project_actions.dart'; import 'package:invoiceninja_flutter/redux/project/project_actions.dart';
@ -77,10 +78,10 @@ class ProjectListVM {
filter: state.projectUIState.listUIState.filter, filter: state.projectUIState.listUIState.filter,
onClearEntityFilterPressed: () => onClearEntityFilterPressed: () =>
store.dispatch(FilterProjectsByEntity()), store.dispatch(FilterProjectsByEntity()),
onViewEntityFilterPressed: (BuildContext context) => store.dispatch( onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
ViewClient( context: context,
clientId: state.projectListState.filterEntityId, entityId: state.projectListState.filterEntityId,
context: context)), entityType: state.projectListState.filterEntityType),
onProjectTap: (context, project) { onProjectTap: (context, project) {
store.dispatch(ViewProject(projectId: project.id, context: context)); store.dispatch(ViewProject(projectId: project.id, context: context));
}, },

View File

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:built_collection/built_collection.dart'; import 'package:built_collection/built_collection.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/client/client_actions.dart'; import 'package:invoiceninja_flutter/redux/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart'; import 'package:invoiceninja_flutter/redux/quote/quote_actions.dart';
import 'package:invoiceninja_flutter/redux/quote/quote_selectors.dart'; import 'package:invoiceninja_flutter/redux/quote/quote_selectors.dart';
@ -8,6 +9,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
import 'package:invoiceninja_flutter/redux/user/user_actions.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_list.dart'; import 'package:invoiceninja_flutter/ui/invoice/invoice_list.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_list_vm.dart'; import 'package:invoiceninja_flutter/ui/invoice/invoice_list_vm.dart';
import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/completers.dart';
@ -96,9 +98,10 @@ class QuoteListVM extends EntityListVM {
}, },
onRefreshed: (context) => _handleRefresh(context), onRefreshed: (context) => _handleRefresh(context),
onClearEntityFilterPressed: () => store.dispatch(FilterQuotesByEntity()), onClearEntityFilterPressed: () => store.dispatch(FilterQuotesByEntity()),
onViewEntityFilterPressed: (BuildContext context) => store.dispatch( onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
ViewClient( context: context,
clientId: state.quoteListState.filterEntityId, context: context)), entityId: state.quoteListState.filterEntityId,
entityType: state.quoteListState.filterEntityType),
onEntityAction: (BuildContext context, List<BaseEntity> quotes, onEntityAction: (BuildContext context, List<BaseEntity> quotes,
EntityAction action) => EntityAction action) =>
handleQuoteAction(context, quotes, action), handleQuoteAction(context, quotes, action),

View File

@ -6,12 +6,14 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.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/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/project/project_actions.dart'; import 'package:invoiceninja_flutter/redux/project/project_actions.dart';
import 'package:invoiceninja_flutter/redux/task/task_actions.dart'; import 'package:invoiceninja_flutter/redux/task/task_actions.dart';
import 'package:invoiceninja_flutter/redux/task/task_selectors.dart'; import 'package:invoiceninja_flutter/redux/task/task_selectors.dart';
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
import 'package:invoiceninja_flutter/redux/user/user_actions.dart';
import 'package:invoiceninja_flutter/ui/task/task_list.dart'; import 'package:invoiceninja_flutter/ui/task/task_list.dart';
import 'package:invoiceninja_flutter/utils/completers.dart'; import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
@ -80,20 +82,10 @@ class TaskListVM {
isLoaded: state.taskState.isLoaded, isLoaded: state.taskState.isLoaded,
filter: state.taskUIState.listUIState.filter, filter: state.taskUIState.listUIState.filter,
onClearEntityFilterPressed: () => store.dispatch(FilterTasksByEntity()), onClearEntityFilterPressed: () => store.dispatch(FilterTasksByEntity()),
onViewEntityFilterPressed: (BuildContext context) { onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
switch (state.taskListState.filterEntityType) { context: context,
case EntityType.client: entityId: state.taskListState.filterEntityId,
store.dispatch(ViewClient( entityType: state.taskListState.filterEntityType),
clientId: state.taskListState.filterEntityId,
context: context));
break;
case EntityType.project:
store.dispatch(ViewProject(
projectId: state.taskListState.filterEntityId,
context: context));
break;
}
},
onTaskTap: (context, task) { onTaskTap: (context, task) {
store.dispatch(ViewTask(taskId: task.id, context: context)); store.dispatch(ViewTask(taskId: task.id, context: context));
}, },

View File

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:invoiceninja_flutter/data/models/tax_rate_model.dart'; import 'package:invoiceninja_flutter/data/models/tax_rate_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@ -72,10 +73,10 @@ class TaxRateListVM {
filter: state.taxRateUIState.listUIState.filter, filter: state.taxRateUIState.listUIState.filter,
onClearEntityFilterPressed: () => onClearEntityFilterPressed: () =>
store.dispatch(FilterTaxRatesByEntity()), store.dispatch(FilterTaxRatesByEntity()),
onViewEntityFilterPressed: (BuildContext context) => store.dispatch( onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
ViewClient( context: context,
clientId: state.taxRateListState.filterEntityId, entityId: state.taxRateListState.filterEntityId,
context: context)), entityType: state.taxRateListState.filterEntityType),
onTaxRateTap: (context, taxRate) { onTaxRateTap: (context, taxRate) {
store.dispatch(ViewTaxRate(taxRateId: taxRate.id, context: context)); store.dispatch(ViewTaxRate(taxRateId: taxRate.id, context: context));
}, },

View File

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:invoiceninja_flutter/data/models/user_model.dart'; import 'package:invoiceninja_flutter/data/models/user_model.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@ -71,9 +72,10 @@ class UserListVM {
isLoaded: state.userState.isLoaded, isLoaded: state.userState.isLoaded,
filter: state.userUIState.listUIState.filter, filter: state.userUIState.listUIState.filter,
onClearEntityFilterPressed: () => store.dispatch(FilterUsersByEntity()), onClearEntityFilterPressed: () => store.dispatch(FilterUsersByEntity()),
onViewEntityFilterPressed: (BuildContext context) => store.dispatch( onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
ViewClient( context: context,
clientId: state.userListState.filterEntityId, context: context)), entityId: state.userListState.filterEntityId,
entityType: state.userListState.filterEntityType),
onUserTap: (context, user) { onUserTap: (context, user) {
store.dispatch(ViewUser(userId: user.id, context: context)); store.dispatch(ViewUser(userId: user.id, context: context));
}, },

View File

@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart'; import 'package:flutter_redux/flutter_redux.dart';
import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/data/models/models.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/client/client_actions.dart';
import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart';
@ -71,10 +72,10 @@ class VendorListVM {
isLoaded: state.vendorState.isLoaded, isLoaded: state.vendorState.isLoaded,
filter: state.vendorUIState.listUIState.filter, filter: state.vendorUIState.listUIState.filter,
onClearEntityFilterPressed: () => store.dispatch(FilterVendorsByEntity()), onClearEntityFilterPressed: () => store.dispatch(FilterVendorsByEntity()),
onViewEntityFilterPressed: (BuildContext context) => store.dispatch( onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
ViewClient( context: context,
clientId: state.vendorListState.filterEntityId, entityId: state.vendorListState.filterEntityId,
context: context)), entityType: state.vendorListState.filterEntityType),
onVendorTap: (context, vendor) { onVendorTap: (context, vendor) {
store.dispatch(ViewVendor(vendorId: vendor.id, context: context)); store.dispatch(ViewVendor(vendorId: vendor.id, context: context));
}, },

View File

@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'package:invoiceninja_flutter/data/models/stub_model.dart'; import 'package:invoiceninja_flutter/data/models/stub_model.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
@ -72,10 +73,10 @@ class StubListVM {
filter: state.stubUIState.listUIState.filter, filter: state.stubUIState.listUIState.filter,
onClearEntityFilterPressed: () => onClearEntityFilterPressed: () =>
store.dispatch(FilterStubsByEntity()), store.dispatch(FilterStubsByEntity()),
onViewEntityFilterPressed: (BuildContext context) => store.dispatch( onViewEntityFilterPressed: (BuildContext context) => viewEntityById(
ViewClient( context: context,
clientId: state.stubListState.filterEntityId, entityId: state.stubListState.filterEntityId,
context: context)), entityType: state.stubListState.filterEntityType),
onStubTap: (context, stub) { onStubTap: (context, stub) {
store.dispatch(ViewStub(stubId: stub.id, context: context)); store.dispatch(ViewStub(stubId: stub.id, context: context));
}, },