2023-10-13 21:06:23 +03:00
|
|
|
import {uniqBy} from "lodash";
|
2024-10-05 15:19:53 +03:00
|
|
|
import axios from "axios";
|
2023-10-13 21:06:23 +03:00
|
|
|
|
|
|
|
|
export function insertEdges(graph, sourceRecord, targetRecords, fieldName, action = "") {
|
|
|
|
|
let newEdges = targetRecords.map((r) => {
|
|
|
|
|
return {
|
|
|
|
|
target: r.id,
|
|
|
|
|
source: sourceRecord.id,
|
|
|
|
|
sourceSchema: sourceRecord.schema,
|
|
|
|
|
targetSchema: r.schema,
|
|
|
|
|
field: fieldName,
|
2023-11-01 13:09:32 +02:00
|
|
|
depth: 1,
|
2023-10-13 21:06:23 +03:00
|
|
|
rank: ""
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
let replacedEdges = graph.edges;
|
|
|
|
|
if (action === "replace") {
|
|
|
|
|
replacedEdges = replacedEdges.filter((edge) => edge.field !== field.name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
graph.records = uniqBy([...graph.records, ...targetRecords], (r) => r.id);
|
2023-11-01 13:09:32 +02:00
|
|
|
graph.edges = uniqBy([...replacedEdges, ...newEdges], (edge) => edge.source + edge.target + edge.field + edge.depth);
|
2023-10-13 21:06:23 +03:00
|
|
|
return graph;
|
|
|
|
|
}
|
2024-10-05 15:19:53 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
export function graphToReferences(graph,record,field){
|
|
|
|
|
return graph.edges
|
|
|
|
|
.filter((edge) => edge.field === field.name)
|
|
|
|
|
.map((edge) => {
|
|
|
|
|
return {
|
|
|
|
|
record: graph.records.find((increc) => increc.id === edge.target && record.id === edge.source),
|
|
|
|
|
edge: edge
|
|
|
|
|
};
|
|
|
|
|
}).filter((rec) => (rec.record?.id ? true : false)) ?? [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function removeReferenceFromGraph(graph,field,id){
|
|
|
|
|
return graph.edges.map(
|
|
|
|
|
(edge) => {
|
|
|
|
|
if(edge.target === id && edge.field === field.name){
|
|
|
|
|
edge._isTrashed = true;
|
|
|
|
|
}
|
|
|
|
|
return edge;
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function restoreReferenceToGraph(graph,field,id){
|
|
|
|
|
return graph.edges.map(
|
|
|
|
|
(edge) => {
|
|
|
|
|
if(edge.target === id && edge.field === field.name){
|
|
|
|
|
edge._isTrashed = false;
|
|
|
|
|
}
|
|
|
|
|
return edge;
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function fullDeleteRecord(channel,graph,field,id){
|
|
|
|
|
axios
|
|
|
|
|
.post(channel.lucentUrl + "/records/status/trashed" , {
|
|
|
|
|
records: [id]
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return graph.edges.filter(
|
|
|
|
|
(edge) => !(edge.target === id && edge.field === field.name)
|
|
|
|
|
);
|
|
|
|
|
}
|