relatedJson property

  1. @override
dynamic get relatedJson
override

Implementation

@override
FieldRefInput? get relatedJson {
  final _createList = _connect.where((c) => c._create != null);
  final _createByType = <String?, List<C>>{};
  final _connectByType = <String?, List<String>>{};
  for (var item in _createList) {
    _createByType.putIfAbsent(item._recordType, () => []).add(item.create!);
  }
  final _connectList = _connect.where((c) => c._linkedId != null);
  for (var connect in _connectList) {
    _connectByType
        .putIfAbsent(connect._recordType, () => [])
        .add(connect._linkedId!);
  }

  if (_connectList.isNotEmpty ||
      _disconnect.isNotEmpty ||
      _createList.isNotEmpty) {
    var result = {};
    if (isReplace) {
      result["disconnect"] = {
        "where": {
          "node": {
            "id_NOT_IN": _connectList.map((e) => e._linkedId!).toList(),
          }
        }
      };
    }

    if (_connectByType.isNotEmpty) {
      _connectByType.forEach((key, value) {
        var connect = {
          "where": {
            "node": {
              "id_IN": value,
            }
          }
        };
        if (key == null) {
          result["connect"] = connect;
        } else {
          result[key] = {
            "connect": connect,
          };
        }
      });
    }
    if (_createList.isNotEmpty) {
      _createByType.forEach((key, value) {
        var create = [
          for (var node in value)
            {
              "node": node.toJson(),
            },
        ];

        if (key == null) {
          result["create"] = create;
        } else {
          result.putIfAbsent(
              key.replaceAll("CreateInput", ""), () => {})["create"] = create;
        }
      });
    }
    return result;
  } else {
    return null;
  }
}