in packages/relay-runtime/handlers/connection/MutationHandlers.js [94:164]
function edgeUpdater(
insertFn: (RecordProxy, RecordProxy, ?string) => void,
): (RecordSourceProxy, HandleFieldPayload) => void {
return (store: RecordSourceProxy, payload: HandleFieldPayload) => {
const record = store.get(payload.dataID);
if (record == null) {
return;
}
const {connections} = payload.handleArgs;
invariant(
connections != null,
'MutationHandlers: Expected connection IDs to be specified.',
);
let singleServerEdge, serverEdges;
try {
singleServerEdge = record.getLinkedRecord(payload.fieldKey, payload.args);
} catch {}
if (!singleServerEdge) {
try {
serverEdges = record.getLinkedRecords(payload.fieldKey, payload.args);
} catch {}
}
if (singleServerEdge == null && serverEdges == null) {
warning(
false,
'MutationHandlers: Expected the server edge to be non-null.',
);
return;
}
const {NODE, EDGES} = ConnectionInterface.get();
const serverEdgeList = serverEdges ?? [singleServerEdge];
for (const serverEdge of serverEdgeList) {
if (serverEdge == null) {
continue;
}
const serverNode = serverEdge.getLinkedRecord('node');
if (!serverNode) {
continue;
}
const serverNodeId = serverNode.getDataID();
for (const connectionID of connections) {
const connection = store.get(connectionID);
if (connection == null) {
warning(
false,
`[Relay][Mutation] The connection with id '${connectionID}' doesn't exist.`,
);
continue;
}
const nodeAlreadyExistsInConnection = connection
.getLinkedRecords(EDGES)
?.some(
edge => edge?.getLinkedRecord(NODE)?.getDataID() === serverNodeId,
);
if (nodeAlreadyExistsInConnection) {
continue;
}
const clientEdge = ConnectionHandler.buildConnectionEdge(
store,
connection,
serverEdge,
);
invariant(
clientEdge != null,
'MutationHandlers: Failed to build the edge.',
);
insertFn(connection, clientEdge);
}
}
};
}