103 lines
4.0 KiB
Dart
103 lines
4.0 KiB
Dart
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_styled_toast/flutter_styled_toast.dart';
|
|
import 'package:invoiceninja_flutter/data/models/entities.dart';
|
|
import 'package:invoiceninja_flutter/redux/invoice/invoice_selectors.dart';
|
|
import 'package:invoiceninja_flutter/redux/recurring_invoice/recurring_invoice_selectors.dart';
|
|
import 'package:invoiceninja_flutter/ui/app/entities/entity_list_tile.dart';
|
|
import 'package:invoiceninja_flutter/ui/app/entity_header.dart';
|
|
import 'package:invoiceninja_flutter/ui/app/lists/list_divider.dart';
|
|
import 'package:invoiceninja_flutter/ui/app/scrollable_listview.dart';
|
|
import 'package:invoiceninja_flutter/ui/subscription/view/subscription_view_vm.dart';
|
|
import 'package:invoiceninja_flutter/ui/app/view_scaffold.dart';
|
|
import 'package:invoiceninja_flutter/utils/formatting.dart';
|
|
import 'package:invoiceninja_flutter/utils/localization.dart';
|
|
import 'package:url_launcher/url_launcher.dart';
|
|
|
|
class SubscriptionView extends StatefulWidget {
|
|
const SubscriptionView({
|
|
Key key,
|
|
@required this.viewModel,
|
|
@required this.isFilter,
|
|
}) : super(key: key);
|
|
|
|
final SubscriptionViewVM viewModel;
|
|
final bool isFilter;
|
|
|
|
@override
|
|
_SubscriptionViewState createState() => new _SubscriptionViewState();
|
|
}
|
|
|
|
class _SubscriptionViewState extends State<SubscriptionView> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final viewModel = widget.viewModel;
|
|
final subscription = viewModel.subscription;
|
|
final localization = AppLocalization.of(context);
|
|
final state = viewModel.state;
|
|
final company = state.company;
|
|
|
|
return ViewScaffold(
|
|
isFilter: widget.isFilter,
|
|
entity: subscription,
|
|
onBackPressed: () => viewModel.onBackPressed(),
|
|
body: ScrollableListView(
|
|
children: <Widget>[
|
|
EntityHeader(
|
|
entity: subscription,
|
|
label: localization.price,
|
|
value: formatNumber(subscription.price, context)),
|
|
ListDivider(),
|
|
ListTile(
|
|
title: Text(localization.purchasePage),
|
|
subtitle: Text(
|
|
subscription.purchasePage,
|
|
maxLines: 1,
|
|
overflow: TextOverflow.ellipsis,
|
|
),
|
|
trailing: Icon(Icons.content_copy),
|
|
onTap: () {
|
|
Clipboard.setData(ClipboardData(text: subscription.purchasePage));
|
|
showToast(localization.copiedToClipboard
|
|
.replaceFirst(':value', subscription.purchasePage));
|
|
},
|
|
onLongPress: () => launch(subscription.purchasePage),
|
|
),
|
|
ListDivider(),
|
|
if (subscription.groupId.isNotEmpty)
|
|
EntityListTile(
|
|
isFilter: widget.isFilter,
|
|
entity: state.groupState.get(subscription.groupId),
|
|
),
|
|
if (subscription.assignedUserId.isNotEmpty)
|
|
EntityListTile(
|
|
isFilter: widget.isFilter,
|
|
entity: state.userState.get(subscription.assignedUserId),
|
|
),
|
|
if (company.isModuleEnabled(EntityType.invoice))
|
|
EntitiesListTile(
|
|
entity: subscription,
|
|
isFilter: widget.isFilter,
|
|
entityType: EntityType.invoice,
|
|
title: localization.invoices,
|
|
subtitle: memoizedInvoiceStatsForSubscription(
|
|
subscription.id, state.invoiceState.map)
|
|
.present(localization.active, localization.archived),
|
|
),
|
|
if (company.isModuleEnabled(EntityType.recurringInvoice))
|
|
EntitiesListTile(
|
|
entity: subscription,
|
|
isFilter: widget.isFilter,
|
|
entityType: EntityType.recurringInvoice,
|
|
title: localization.recurringInvoices,
|
|
subtitle: memoizedRecurringInvoiceStatsForSubscription(
|
|
subscription.id, state.recurringInvoiceState.map)
|
|
.present(localization.active, localization.archived),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|