buildMerchantArgs function

Map<String, dynamic>? buildMerchantArgs({
  1. String? merchantId,
  2. String? merchantName,
  3. String? merchantInfo,
  4. String? gatewayMerchantId,
  5. List<SummaryLineItem>? summaryItems,
  6. Map<String, dynamic>? builder,
})

Build a normalized merchantArgs map (or null if empty).

Merge order (lowest -> highest priority):

  1. builder map (if provided)
  2. LpeConfig defaults (used only when value still missing)
  3. Explicit parameters passed to this function

Implementation

Map<String, dynamic>? buildMerchantArgs({
  String? merchantId,
  String? merchantName,
  String? merchantInfo,
  String? gatewayMerchantId,
  List<SummaryLineItem>? summaryItems,
  Map<String, dynamic>? builder,
}) {
  // Start from builder map if provided, otherwise use the app-wide builder
  final ctrl = MerchantArgsController.fromMap(builder ?? _appBuilder);

  // Apply LpeConfig defaults if not present in fallback
  final current = ctrl.toMap();
  if ((current == null || !current.containsKey('merchantName')) &&
      LpeConfig.defaultMerchantName != null &&
      LpeConfig.defaultMerchantName!.isNotEmpty) {
    ctrl.merge({'merchantName': LpeConfig.defaultMerchantName});
  }
  if ((current == null || !current.containsKey('merchantInfo')) &&
      LpeConfig.defaultMerchantInfo != null &&
      LpeConfig.defaultMerchantInfo!.isNotEmpty) {
    ctrl.merge({'merchantInfo': LpeConfig.defaultMerchantInfo});
  }

  // Explicit params override fallback/defaults
  if (merchantId != null && merchantId.isNotEmpty) {
    ctrl.merge({'merchantId': merchantId});
  }
  if (merchantName != null && merchantName.isNotEmpty) {
    ctrl.merge({'merchantName': merchantName});
  }
  if (merchantInfo != null && merchantInfo.isNotEmpty) {
    ctrl.merge({'merchantInfo': merchantInfo});
  }
  if (gatewayMerchantId != null && gatewayMerchantId.isNotEmpty) {
    ctrl.merge({'gatewayMerchantId': gatewayMerchantId});
  }
  if (summaryItems != null && summaryItems.isNotEmpty) {
    ctrl.merge({'summaryItems': summaryItems.map((s) => s.toJson()).toList()});
  }

  return ctrl.toMap();
}