Include external models in project snapshots

This commit is contained in:
2026-08-02 17:25:25 +02:00
parent 76493b573e
commit e87a3289fa
10 changed files with 685 additions and 15 deletions
@@ -91,6 +91,13 @@ export function remapProjectState(
circuit.deviceRows.map((row) => [row.id, createId()] as const)
)
);
const externalSourceId = source.externalModel.source ? createId() : null;
const externalBatchIds = idMap(source.externalModel.importBatches, createId);
const externalRoomMappingIds = idMap(
source.externalModel.roomMappings,
createId
);
const externalObjectIds = idMap(source.externalModel.objects, createId);
return parseProjectStateSnapshot({
...source,
project: { ...source.project, id: targetProjectId, name },
@@ -102,6 +109,68 @@ export function remapProjectState(
id: createId(),
projectId: targetProjectId,
},
externalModel: {
source: source.externalModel.source === null
? null
: {
...source.externalModel.source,
id: externalSourceId!,
projectId: targetProjectId,
},
importBatches: source.externalModel.importBatches.map((batch) => ({
...batch,
id: requiredId(externalBatchIds, batch.id),
projectId: targetProjectId,
sourceId: externalSourceId!,
})),
roomMappings: source.externalModel.roomMappings.map((mapping) => ({
...mapping,
id: requiredId(externalRoomMappingIds, mapping.id),
projectId: targetProjectId,
sourceId: externalSourceId!,
roomId:
mapping.roomId === null
? null
: requiredId(roomIds, mapping.roomId),
defaultDistributionBoardId:
mapping.defaultDistributionBoardId === null
? null
: requiredId(boardIds, mapping.defaultDistributionBoardId),
})),
objects: source.externalModel.objects.map((object) => ({
...object,
id: requiredId(externalObjectIds, object.id),
projectId: targetProjectId,
sourceId: externalSourceId!,
lastSeenImportBatchId: requiredId(
externalBatchIds,
object.lastSeenImportBatchId
),
lastAcceptedImportBatchId: requiredId(
externalBatchIds,
object.lastAcceptedImportBatchId
),
externalRoomMappingId:
object.externalRoomMappingId === null
? null
: requiredId(
externalRoomMappingIds,
object.externalRoomMappingId
),
distributionBoardId:
object.distributionBoardId === null
? null
: requiredId(boardIds, object.distributionBoardId),
linkedProjectDeviceId:
object.linkedProjectDeviceId === null
? null
: requiredId(deviceIds, object.linkedProjectDeviceId),
circuitDeviceRowId:
object.circuitDeviceRowId === null
? null
: requiredId(rowIds, object.circuitDeviceRowId),
})),
},
distributionBoards: source.distributionBoards.map((board) => ({
...board,
id: requiredId(boardIds, board.id),