queryMerge function

Map<String, dynamic> queryMerge(
  1. Map<String, dynamic>? queryA,
  2. Map<String, dynamic>? queryB
)

Implementation

Map<String, dynamic> queryMerge(Map<String, dynamic>? queryA, Map<String, dynamic>? queryB) {
  assert(queryA != null || queryB != null, "You must provide at least one argument");
  if (queryA == null) return queryB!;
  if (queryB == null) return queryA;

  final decodedA = queryA.map((key, value) {
    try {
      /// we will try to decode as JSON the value
      final decoded = jsonDecode(value);
      return MapEntry(key, decoded);
    } catch (e) {
      return MapEntry(key, value);
    }
  });

  final decodedB = queryB.map(
    (key, value) {
      try {
        /// we will try to decode as JSON the value
        final decoded = jsonDecode(value);
        return MapEntry(key, decoded);
      } catch (e) {
        return MapEntry(key, value);
      }
    },
  );

  final newMap = deepMergeMap(
    decodedA,
    decodedB,
    // value: (p0, p1) {},
  );
  return newMap.map((key, value) {
    if (value is String) {
      return MapEntry(key, value);
    } else {
      return MapEntry(key, jsonEncode(value));
    }
  });
}