invoice/lib/ui/app/entities/entity_status_chip.dart

163 lines
6.0 KiB
Dart

// Flutter imports:
import 'package:flutter/material.dart';
// Package imports:
import 'package:flutter_redux/flutter_redux.dart';
// Project imports:
import 'package:invoiceninja_flutter/colors.dart';
import 'package:invoiceninja_flutter/constants.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/utils/colors.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
class EntityStatusChip extends StatelessWidget {
const EntityStatusChip({
required this.entity,
this.addGap = false,
this.width = 105,
this.showState = false,
});
final BaseEntity? entity;
final bool addGap;
final double? width;
final bool showState;
@override
Widget build(BuildContext context) {
final store = StoreProvider.of<AppState>(context);
final state = store.state;
final localization = AppLocalization.of(context);
String? label = '';
Color? color;
if (showState && !entity!.isActive) {
if (entity!.isArchived) {
label = localization!.archived;
color = Colors.orange;
} else if (entity!.isDeleted!) {
label = localization!.deleted;
color = state.prefState.colorThemeModel!.colorDanger;
}
} else {
switch (entity!.entityType) {
case EntityType.payment:
final payment = entity as PaymentEntity;
label = kPaymentStatuses[payment.calculatedStatusId];
color = PaymentStatusColors(state.prefState.colorThemeModel)
.colors[payment.calculatedStatusId];
break;
case EntityType.invoice:
final invoice = entity as InvoiceEntity;
final statusId = invoice.calculatedStatusId;
label = kInvoiceStatuses[statusId];
color = InvoiceStatusColors(state.prefState.colorThemeModel)
.colors[statusId];
break;
case EntityType.recurringInvoice:
final invoice = entity as InvoiceEntity;
final statusId = invoice.calculatedStatusId;
label = kRecurringInvoiceStatuses[statusId];
color = RecurringInvoiceStatusColors(state.prefState.colorThemeModel)
.colors[statusId];
break;
case EntityType.quote:
final quote = entity as InvoiceEntity;
final statusId = quote.calculatedStatusId;
label = kQuoteStatuses[statusId];
color = QuoteStatusColors(state.prefState.colorThemeModel)
.colors[statusId];
break;
case EntityType.credit:
final credit = entity as InvoiceEntity;
label = kCreditStatuses[credit.calculatedStatusId];
color = CreditStatusColors(state.prefState.colorThemeModel)
.colors[credit.calculatedStatusId];
break;
case EntityType.purchaseOrder:
final purchaseOrder = entity as InvoiceEntity;
label = kPurchaseOrderStatuses[purchaseOrder.calculatedStatusId];
color = PurchaseOrderStatusColors(state.prefState.colorThemeModel)
.colors[purchaseOrder.calculatedStatusId];
break;
case EntityType.transaction:
final transaction = entity as TransactionEntity;
label = kTransactionStatuses[transaction.statusId];
color = TransactionStatusColors(state.prefState.colorThemeModel)
.colors[transaction.statusId];
break;
case EntityType.expense:
final expense = entity as ExpenseEntity;
final category = state.expenseCategoryState.get(expense.categoryId);
label = kExpenseStatuses[expense.calculatedStatusId];
color = category.color.isNotEmpty && category.color != '#fff'
? convertHexStringToColor(category.color)
: ExpenseStatusColors(state.prefState.colorThemeModel)
.colors[expense.calculatedStatusId];
break;
case EntityType.recurringExpense:
final expense = entity as ExpenseEntity;
final statusId = expense.calculatedStatusId;
label = kRecurringExpenseStatuses[statusId];
color = RecurringInvoiceStatusColors(state.prefState.colorThemeModel)
.colors[statusId];
break;
case EntityType.task:
final task = entity as TaskEntity;
final status = state.taskStatusState.get(task.statusId);
label = task.isInvoiced
? localization!.invoiced
: task.isRunning
? localization!.running
: status.name.isNotEmpty
? status.name
: localization!.logged;
color = task.isInvoiced
? state.prefState.colorThemeModel!.colorSuccess
: task.isRunning
? state.prefState.colorThemeModel!.colorInfo
: status.color.isNotEmpty && status.color != '#fff'
? convertHexStringToColor(status.color)
: TaskStatusColors(state.prefState.colorThemeModel)
.colors[task.calculateStatusId];
break;
default:
return SizedBox();
}
label = localization!.lookup(label);
if (label.isEmpty) {
label = localization.logged;
}
}
return Padding(
padding: EdgeInsets.only(left: addGap ? 16 : 0),
child: DecoratedBox(
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.all(Radius.circular(kBorderRadius)),
),
child: ConstrainedBox(
constraints: BoxConstraints(
minWidth: width ?? 100,
maxWidth: width ?? 200,
),
child: Padding(
padding: EdgeInsets.symmetric(vertical: 6, horizontal: 4),
child: Text(
label,
style: TextStyle(fontSize: 13, color: Colors.white),
textAlign: TextAlign.center,
overflow: TextOverflow.ellipsis,
),
),
),
),
);
}
}