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;
}
}