Second tap to edit

This commit is contained in:
Hillel Coren 2020-06-24 11:00:05 +03:00
parent 272478ba3b
commit 3931a39966
16 changed files with 84 additions and 10 deletions

View File

@ -91,8 +91,7 @@ class ClientListItem extends StatelessWidget {
) )
: ActionMenuButton( : ActionMenuButton(
entityActions: client.getActions( entityActions: client.getActions(
userCompany: state.userCompany, userCompany: state.userCompany),
includeEdit: true),
isSaving: false, isSaving: false,
entity: client, entity: client,
onSelected: (context, action) => onSelected: (context, action) =>

View File

@ -98,7 +98,6 @@ class CreditListItem extends StatelessWidget {
: ActionMenuButton( : ActionMenuButton(
entityActions: credit.getActions( entityActions: credit.getActions(
userCompany: state.userCompany, userCompany: state.userCompany,
includeEdit: true,
client: client), client: client),
isSaving: false, isSaving: false,
entity: credit, entity: credit,

View File

@ -16,6 +16,7 @@ import 'package:invoiceninja_flutter/ui/credit/credit_presenter.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';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/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_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
@ -152,7 +153,18 @@ class CreditListVM extends EntityListVM {
isLoaded: state.creditState.isLoaded && state.clientState.isLoaded, isLoaded: state.creditState.isLoaded && state.clientState.isLoaded,
filter: state.creditListState.filter, filter: state.creditListState.filter,
onInvoiceTap: (context, credit) { onInvoiceTap: (context, credit) {
if (store.state.invoiceListState.isInMultiselect()) {
handleInvoiceAction(
context, [credit], EntityAction.toggleMultiselect);
} else if (isDesktop(context) &&
state.creditUIState.editing.id == credit.id) {
viewEntity(context: context, entity: credit); viewEntity(context: context, entity: credit);
} else if (isDesktop(context) &&
state.creditUIState.selectedId == credit.id) {
editEntity(context: context, entity: credit);
} else {
viewEntity(context: context, entity: credit);
}
}, },
onRefreshed: (context) => _handleRefresh(context), onRefreshed: (context) => _handleRefresh(context),
onClearEntityFilterPressed: () => store.dispatch(ClearEntityFilter()), onClearEntityFilterPressed: () => store.dispatch(ClearEntityFilter()),

View File

@ -16,6 +16,7 @@ import 'package:invoiceninja_flutter/ui/expense/expense_list_item.dart';
import 'package:invoiceninja_flutter/ui/expense/expense_presenter.dart'; import 'package:invoiceninja_flutter/ui/expense/expense_presenter.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';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
class ExpenseListBuilder extends StatelessWidget { class ExpenseListBuilder extends StatelessWidget {
@ -140,6 +141,12 @@ class ExpenseListVM {
if (store.state.expenseListState.isInMultiselect()) { if (store.state.expenseListState.isInMultiselect()) {
handleExpenseAction( handleExpenseAction(
context, [expense], EntityAction.toggleMultiselect); context, [expense], EntityAction.toggleMultiselect);
} else if (isDesktop(context) &&
state.expenseUIState.editing.id == expense.id) {
viewEntity(context: context, entity: expense);
} else if (isDesktop(context) &&
state.expenseUIState.selectedId == expense.id) {
editEntity(context: context, entity: expense);
} else { } else {
viewEntity(context: context, entity: expense); viewEntity(context: context, entity: expense);
} }

View File

@ -110,7 +110,6 @@ class InvoiceListItem extends StatelessWidget {
: ActionMenuButton( : ActionMenuButton(
entityActions: invoice.getActions( entityActions: invoice.getActions(
userCompany: state.userCompany, userCompany: state.userCompany,
includeEdit: true,
client: client), client: client),
isSaving: false, isSaving: false,
entity: invoice, entity: invoice,

View File

@ -16,6 +16,7 @@ import 'package:invoiceninja_flutter/ui/invoice/invoice_list_item.dart';
import 'package:invoiceninja_flutter/ui/invoice/invoice_presenter.dart'; import 'package:invoiceninja_flutter/ui/invoice/invoice_presenter.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';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
class InvoiceListBuilder extends StatelessWidget { class InvoiceListBuilder extends StatelessWidget {
@ -196,6 +197,12 @@ class InvoiceListVM extends EntityListVM {
if (store.state.invoiceListState.isInMultiselect()) { if (store.state.invoiceListState.isInMultiselect()) {
handleInvoiceAction( handleInvoiceAction(
context, [invoice], EntityAction.toggleMultiselect); context, [invoice], EntityAction.toggleMultiselect);
} else if (isDesktop(context) &&
state.invoiceUIState.editing.id == invoice.id) {
viewEntity(context: context, entity: invoice);
} else if (isDesktop(context) &&
state.invoiceUIState.selectedId == invoice.id) {
editEntity(context: context, entity: invoice);
} else { } else {
viewEntity(context: context, entity: invoice); viewEntity(context: context, entity: invoice);
} }

View File

@ -106,7 +106,6 @@ class PaymentListItem extends StatelessWidget {
: ActionMenuButton( : ActionMenuButton(
entityActions: payment.getActions( entityActions: payment.getActions(
userCompany: state.userCompany, userCompany: state.userCompany,
includeEdit: true,
client: client), client: client),
isSaving: false, isSaving: false,
entity: payment, entity: payment,

View File

@ -17,6 +17,7 @@ import 'package:invoiceninja_flutter/ui/payment/payment_list_item.dart';
import 'package:invoiceninja_flutter/ui/payment/payment_presenter.dart'; import 'package:invoiceninja_flutter/ui/payment/payment_presenter.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';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
class PaymentListBuilder extends StatelessWidget { class PaymentListBuilder extends StatelessWidget {
@ -135,6 +136,12 @@ class PaymentListVM {
if (store.state.paymentListState.isInMultiselect()) { if (store.state.paymentListState.isInMultiselect()) {
handlePaymentAction( handlePaymentAction(
context, [payment], EntityAction.toggleMultiselect); context, [payment], EntityAction.toggleMultiselect);
} else if (isDesktop(context) &&
state.paymentUIState.editing.id == payment.id) {
viewEntity(context: context, entity: payment);
} else if (isDesktop(context) &&
state.paymentUIState.selectedId == payment.id) {
editEntity(context: context, entity: payment);
} else { } else {
viewEntity(context: context, entity: payment); viewEntity(context: context, entity: payment);
} }

View File

@ -91,8 +91,7 @@ class ProductListItem extends StatelessWidget {
) )
: ActionMenuButton( : ActionMenuButton(
entityActions: product.getActions( entityActions: product.getActions(
userCompany: state.userCompany, userCompany: state.userCompany),
includeEdit: true),
isSaving: false, isSaving: false,
entity: product, entity: product,
onSelected: (context, action) => onSelected: (context, action) =>

View File

@ -16,6 +16,7 @@ import 'package:invoiceninja_flutter/ui/product/product_list_item.dart';
import 'package:invoiceninja_flutter/ui/product/product_presenter.dart'; import 'package:invoiceninja_flutter/ui/product/product_presenter.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';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
class ProductListBuilder extends StatelessWidget { class ProductListBuilder extends StatelessWidget {
@ -118,6 +119,12 @@ class ProductListVM {
if (store.state.productListState.isInMultiselect()) { if (store.state.productListState.isInMultiselect()) {
handleProductAction( handleProductAction(
context, [product], EntityAction.toggleMultiselect); context, [product], EntityAction.toggleMultiselect);
} else if (isDesktop(context) &&
state.productUIState.editing.id == product.id) {
viewEntity(context: context, entity: product);
} else if (isDesktop(context) &&
state.productUIState.selectedId == product.id) {
editEntity(context: context, entity: product);
} else { } else {
viewEntity(context: context, entity: product); viewEntity(context: context, entity: product);
} }

View File

@ -17,6 +17,7 @@ import 'package:invoiceninja_flutter/ui/project/project_list_item.dart';
import 'package:invoiceninja_flutter/ui/project/project_presenter.dart'; import 'package:invoiceninja_flutter/ui/project/project_presenter.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';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
class ProjectListBuilder extends StatelessWidget { class ProjectListBuilder extends StatelessWidget {
@ -138,6 +139,12 @@ class ProjectListVM {
if (store.state.projectListState.isInMultiselect()) { if (store.state.projectListState.isInMultiselect()) {
handleProjectAction( handleProjectAction(
context, [project], EntityAction.toggleMultiselect); context, [project], EntityAction.toggleMultiselect);
} else if (isDesktop(context) &&
state.projectUIState.editing.id == project.id) {
viewEntity(context: context, entity: project);
} else if (isDesktop(context) &&
state.projectUIState.selectedId == project.id) {
editEntity(context: context, entity: project);
} else { } else {
viewEntity(context: context, entity: project); viewEntity(context: context, entity: project);
} }

View File

@ -105,7 +105,6 @@ class QuoteListItem extends StatelessWidget {
: ActionMenuButton( : ActionMenuButton(
entityActions: quote.getActions( entityActions: quote.getActions(
userCompany: state.userCompany, userCompany: state.userCompany,
includeEdit: true,
client: client), client: client),
isSaving: false, isSaving: false,
entity: quote, entity: quote,

View File

@ -16,6 +16,7 @@ import 'package:invoiceninja_flutter/ui/quote/quote_presenter.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';
import 'package:invoiceninja_flutter/utils/localization.dart'; import 'package:invoiceninja_flutter/utils/localization.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/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_state.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart';
@ -151,7 +152,18 @@ class QuoteListVM extends EntityListVM {
isLoaded: state.quoteState.isLoaded && state.clientState.isLoaded, isLoaded: state.quoteState.isLoaded && state.clientState.isLoaded,
filter: state.quoteListState.filter, filter: state.quoteListState.filter,
onInvoiceTap: (context, quote) { onInvoiceTap: (context, quote) {
if (store.state.invoiceListState.isInMultiselect()) {
handleInvoiceAction(
context, [quote], EntityAction.toggleMultiselect);
} else if (isDesktop(context) &&
state.quoteUIState.editing.id == quote.id) {
viewEntity(context: context, entity: quote); viewEntity(context: context, entity: quote);
} else if (isDesktop(context) &&
state.quoteUIState.selectedId == quote.id) {
editEntity(context: context, entity: quote);
} else {
viewEntity(context: context, entity: quote);
}
}, },
onRefreshed: (context) => _handleRefresh(context), onRefreshed: (context) => _handleRefresh(context),
onClearEntityFilterPressed: () => store.dispatch(ClearEntityFilter()), onClearEntityFilterPressed: () => store.dispatch(ClearEntityFilter()),

View File

@ -17,6 +17,7 @@ import 'package:invoiceninja_flutter/ui/task/task_list_item.dart';
import 'package:invoiceninja_flutter/ui/task/task_presenter.dart'; import 'package:invoiceninja_flutter/ui/task/task_presenter.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';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
class TaskListBuilder extends StatelessWidget { class TaskListBuilder extends StatelessWidget {
@ -143,6 +144,12 @@ class TaskListVM {
onTaskTap: (context, task) { onTaskTap: (context, task) {
if (store.state.taskListState.isInMultiselect()) { if (store.state.taskListState.isInMultiselect()) {
handleTaskAction(context, [task], EntityAction.toggleMultiselect); handleTaskAction(context, [task], EntityAction.toggleMultiselect);
} else if (isDesktop(context) &&
state.taskUIState.editing.id == task.id) {
viewEntity(context: context, entity: task);
} else if (isDesktop(context) &&
state.taskUIState.selectedId == task.id) {
editEntity(context: context, entity: task);
} else { } else {
viewEntity(context: context, entity: task); viewEntity(context: context, entity: task);
} }

View File

@ -16,6 +16,7 @@ import 'package:invoiceninja_flutter/ui/vendor/vendor_list_item.dart';
import 'package:invoiceninja_flutter/ui/vendor/vendor_presenter.dart'; import 'package:invoiceninja_flutter/ui/vendor/vendor_presenter.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';
import 'package:invoiceninja_flutter/utils/platforms.dart';
import 'package:redux/redux.dart'; import 'package:redux/redux.dart';
class VendorListBuilder extends StatelessWidget { class VendorListBuilder extends StatelessWidget {
@ -128,6 +129,12 @@ class VendorListVM {
onVendorTap: (context, vendor) { onVendorTap: (context, vendor) {
if (store.state.vendorListState.isInMultiselect()) { if (store.state.vendorListState.isInMultiselect()) {
handleVendorAction(context, [vendor], EntityAction.toggleMultiselect); handleVendorAction(context, [vendor], EntityAction.toggleMultiselect);
} else if (isDesktop(context) &&
state.vendorUIState.editing.id == vendor.id) {
viewEntity(context: context, entity: vendor);
} else if (isDesktop(context) &&
state.vendorUIState.selectedId == vendor.id) {
editEntity(context: context, entity: vendor);
} else { } else {
viewEntity(context: context, entity: vendor); viewEntity(context: context, entity: vendor);
} }

View File

@ -15,6 +15,7 @@ import 'package:invoiceninja_flutter/redux/stub/stub_selectors.dart';
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/stub/stub_actions.dart'; import 'package:invoiceninja_flutter/redux/stub/stub_actions.dart';
import 'package:invoiceninja_flutter/utils/platforms.dart';
class StubListBuilder extends StatelessWidget { class StubListBuilder extends StatelessWidget {
const StubListBuilder({Key key}) : super(key: key); const StubListBuilder({Key key}) : super(key: key);
@ -131,6 +132,12 @@ class StubListVM {
if (store.state.stubListState.isInMultiselect()) { if (store.state.stubListState.isInMultiselect()) {
handleStubAction( handleStubAction(
context, [stub], EntityAction.toggleMultiselect); context, [stub], EntityAction.toggleMultiselect);
} else if (isDesktop(context) &&
state.stubUIState.editing.id == stub.id) {
viewEntity(context: context, entity: stub);
} else if (isDesktop(context) &&
state.stubUIState.selectedId == stub.id) {
editEntity(context: context, entity: stub);
} else { } else {
viewEntity(context: context, entity: stub); viewEntity(context: context, entity: stub);
} }