Add contacts edit screen to quote/credits

This commit is contained in:
Hillel Coren 2020-12-17 22:04:47 +02:00
parent 294702a2c1
commit 8195a4729a
3 changed files with 51 additions and 12 deletions

View File

@ -1,5 +1,7 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_contacts_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_footer.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_footer.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_item_selector.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_item_selector.dart';
@ -41,7 +43,7 @@ class _CreditEditState extends State<CreditEdit>
final index = final index =
viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen; viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen;
_controller = TabController(vsync: this, length: 3, initialIndex: index); _controller = TabController(vsync: this, length: 4, initialIndex: index);
} }
@override @override
@ -65,8 +67,11 @@ class _CreditEditState extends State<CreditEdit>
final viewModel = widget.viewModel; final viewModel = widget.viewModel;
final invoice = viewModel.invoice; final invoice = viewModel.invoice;
final state = viewModel.state; final state = viewModel.state;
final prefState = state.prefState;
final isFullscreen = prefState.isEditorFullScreen(EntityType.invoice);
return EditScaffold( return EditScaffold(
isFullscreen: isFullscreen,
entity: invoice, entity: invoice,
title: invoice.isNew ? localization.newCredit : localization.editCredit, title: invoice.isNew ? localization.newCredit : localization.editCredit,
onCancelPressed: (context) => viewModel.onCancelPressed(context), onCancelPressed: (context) => viewModel.onCancelPressed(context),
@ -85,7 +90,7 @@ class _CreditEditState extends State<CreditEdit>
viewModel.onSavePressed(context); viewModel.onSavePressed(context);
}, },
appBarBottom: state.prefState.isDesktop appBarBottom: isFullscreen
? null ? null
: TabBar( : TabBar(
controller: _controller, controller: _controller,
@ -94,6 +99,9 @@ class _CreditEditState extends State<CreditEdit>
Tab( Tab(
text: localization.details, text: localization.details,
), ),
Tab(
text: localization.contacts,
),
Tab( Tab(
text: localization.items, text: localization.items,
), ),
@ -104,7 +112,7 @@ class _CreditEditState extends State<CreditEdit>
), ),
body: Form( body: Form(
key: _formKey, key: _formKey,
child: state.prefState.isDesktop child: isFullscreen
? CreditEditDetailsScreen( ? CreditEditDetailsScreen(
viewModel: widget.viewModel, viewModel: widget.viewModel,
) )
@ -115,6 +123,9 @@ class _CreditEditState extends State<CreditEdit>
CreditEditDetailsScreen( CreditEditDetailsScreen(
viewModel: widget.viewModel, viewModel: widget.viewModel,
), ),
InvoiceEditContactsScreen(
entityType: invoice.entityType,
),
CreditEditItemsScreen( CreditEditItemsScreen(
viewModel: widget.viewModel, viewModel: widget.viewModel,
), ),
@ -141,7 +152,9 @@ class _CreditEditState extends State<CreditEdit>
clientId: invoice.clientId, clientId: invoice.clientId,
onItemsSelected: (items, [clientId]) { onItemsSelected: (items, [clientId]) {
viewModel.onItemsAdded(items, clientId); viewModel.onItemsAdded(items, clientId);
if (!isFullscreen) {
_controller.animateTo(kItemScreen); _controller.animateTo(kItemScreen);
}
}, },
); );
}); });

View File

@ -1,5 +1,7 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_contacts_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_footer.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_footer.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_item_selector.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_item_selector.dart';
@ -41,7 +43,7 @@ class _QuoteEditState extends State<QuoteEdit>
final index = final index =
viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen; viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen;
_controller = TabController(vsync: this, length: 3, initialIndex: index); _controller = TabController(vsync: this, length: 4, initialIndex: index);
} }
@override @override
@ -65,8 +67,11 @@ class _QuoteEditState extends State<QuoteEdit>
final viewModel = widget.viewModel; final viewModel = widget.viewModel;
final invoice = viewModel.invoice; final invoice = viewModel.invoice;
final state = viewModel.state; final state = viewModel.state;
final prefState = state.prefState;
final isFullscreen = prefState.isEditorFullScreen(EntityType.invoice);
return EditScaffold( return EditScaffold(
isFullscreen: isFullscreen,
entity: invoice, entity: invoice,
title: invoice.isNew ? localization.newQuote : localization.editQuote, title: invoice.isNew ? localization.newQuote : localization.editQuote,
onCancelPressed: (context) => viewModel.onCancelPressed(context), onCancelPressed: (context) => viewModel.onCancelPressed(context),
@ -85,7 +90,7 @@ class _QuoteEditState extends State<QuoteEdit>
viewModel.onSavePressed(context); viewModel.onSavePressed(context);
}, },
appBarBottom: state.prefState.isDesktop appBarBottom: isFullscreen
? null ? null
: TabBar( : TabBar(
controller: _controller, controller: _controller,
@ -94,6 +99,9 @@ class _QuoteEditState extends State<QuoteEdit>
Tab( Tab(
text: localization.details, text: localization.details,
), ),
Tab(
text: localization.contacts,
),
Tab( Tab(
text: localization.items, text: localization.items,
), ),
@ -104,7 +112,7 @@ class _QuoteEditState extends State<QuoteEdit>
), ),
body: Form( body: Form(
key: _formKey, key: _formKey,
child: state.prefState.isDesktop child: isFullscreen
? QuoteEditDetailsScreen( ? QuoteEditDetailsScreen(
viewModel: widget.viewModel, viewModel: widget.viewModel,
) )
@ -115,6 +123,9 @@ class _QuoteEditState extends State<QuoteEdit>
QuoteEditDetailsScreen( QuoteEditDetailsScreen(
viewModel: widget.viewModel, viewModel: widget.viewModel,
), ),
InvoiceEditContactsScreen(
entityType: invoice.entityType,
),
QuoteEditItemsScreen( QuoteEditItemsScreen(
viewModel: widget.viewModel, viewModel: widget.viewModel,
), ),
@ -141,7 +152,9 @@ class _QuoteEditState extends State<QuoteEdit>
clientId: invoice.clientId, clientId: invoice.clientId,
onItemsSelected: (items, [clientId]) { onItemsSelected: (items, [clientId]) {
viewModel.onItemsAdded(items, clientId); viewModel.onItemsAdded(items, clientId);
if (!isFullscreen) {
_controller.animateTo(kItemScreen); _controller.animateTo(kItemScreen);
}
}, },
); );
}); });

View File

@ -1,6 +1,8 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/entities.dart';
import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart'; import 'package:invoiceninja_flutter/ui/app/edit_scaffold.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_contacts_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_footer.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_footer.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_edit_vm.dart';
import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_item_selector.dart'; import 'package:invoiceninja_flutter/ui/invoice/edit/invoice_item_selector.dart';
@ -40,7 +42,7 @@ class _RecurringInvoiceEditState extends State<RecurringInvoiceEdit>
final index = final index =
viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen; viewModel.invoiceItemIndex != null ? kItemScreen : kDetailsScreen;
_controller = TabController(vsync: this, length: 3, initialIndex: index); _controller = TabController(vsync: this, length: 4, initialIndex: index);
} }
@override @override
@ -65,8 +67,11 @@ class _RecurringInvoiceEditState extends State<RecurringInvoiceEdit>
final recurringInvoice = viewModel.invoice; final recurringInvoice = viewModel.invoice;
final state = viewModel.state; final state = viewModel.state;
final invoice = viewModel.invoice; final invoice = viewModel.invoice;
final prefState = state.prefState;
final isFullscreen = prefState.isEditorFullScreen(EntityType.invoice);
return EditScaffold( return EditScaffold(
isFullscreen: isFullscreen,
title: recurringInvoice.isNew title: recurringInvoice.isNew
? localization.newRecurringInvoice ? localization.newRecurringInvoice
: localization.editRecurringInvoice, : localization.editRecurringInvoice,
@ -86,7 +91,7 @@ class _RecurringInvoiceEditState extends State<RecurringInvoiceEdit>
viewModel.onSavePressed(context); viewModel.onSavePressed(context);
}, },
appBarBottom: state.prefState.isDesktop appBarBottom: isFullscreen
? null ? null
: TabBar( : TabBar(
controller: _controller, controller: _controller,
@ -95,6 +100,9 @@ class _RecurringInvoiceEditState extends State<RecurringInvoiceEdit>
Tab( Tab(
text: localization.details, text: localization.details,
), ),
Tab(
text: localization.contacts,
),
Tab( Tab(
text: localization.items, text: localization.items,
), ),
@ -105,7 +113,7 @@ class _RecurringInvoiceEditState extends State<RecurringInvoiceEdit>
), ),
body: Form( body: Form(
key: _formKey, key: _formKey,
child: state.prefState.isDesktop child: isFullscreen
? RecurringInvoiceEditDetailsScreen( ? RecurringInvoiceEditDetailsScreen(
viewModel: widget.viewModel, viewModel: widget.viewModel,
) )
@ -116,6 +124,9 @@ class _RecurringInvoiceEditState extends State<RecurringInvoiceEdit>
RecurringInvoiceEditDetailsScreen( RecurringInvoiceEditDetailsScreen(
viewModel: widget.viewModel, viewModel: widget.viewModel,
), ),
InvoiceEditContactsScreen(
entityType: invoice.entityType,
),
RecurringInvoiceEditItemsScreen( RecurringInvoiceEditItemsScreen(
viewModel: widget.viewModel, viewModel: widget.viewModel,
), ),
@ -142,7 +153,9 @@ class _RecurringInvoiceEditState extends State<RecurringInvoiceEdit>
clientId: invoice.clientId, clientId: invoice.clientId,
onItemsSelected: (items, [clientId]) { onItemsSelected: (items, [clientId]) {
viewModel.onItemsAdded(items, clientId); viewModel.onItemsAdded(items, clientId);
if (!isFullscreen) {
_controller.animateTo(kItemScreen); _controller.animateTo(kItemScreen);
}
}, },
); );
}); });