cardOf function

MessageCard? cardOf(
  1. Json? metadata
)

Port of cardOf from @hatang/chat-protocol: the card in metadata, if any.

Implementation

MessageCard? cardOf(Json? metadata) {
  if (metadata == null) return null;
  final k = metadata['kind'];
  switch (k) {
    case 'product':
      if (metadata['products'] is! List) return null;
      return ProductCard([
        for (final p in mapListOf(metadata, 'products')) ProductCardItem.fromJson(p),
      ], intro: str(metadata, 'intro'));
    case 'order':
      final o = mapOf(metadata, 'order');
      return o == null ? null : OrderCard.fromJson(o);
    case 'payment':
      final p = mapOf(metadata, 'payment');
      return p == null ? null : PaymentCard.fromJson(p);
    case 'quick_replies':
      if (metadata['options'] is! List) return null;
      return QuickRepliesCard(stringListOf(metadata, 'options'));
    case 'csat':
      if (metadata['options'] is! List) return null;
      return CsatCard(stringListOf(metadata, 'options'), answered: boolOr(metadata, 'answered'));
    default:
      return null;
  }
}