Complete Revit object editor assignments

This commit is contained in:
Julian Appel 2026-09-30 14:35:14 +02:00
parent 4489cd76f0
commit 77d775fde1
25 changed files with 853 additions and 77 deletions

View file

@ -104,10 +104,10 @@ export function assertExternalObjectRowAssignmentProjectCommand(
if (expected.circuitDeviceRowId === target.circuitDeviceRowId) {
throw new Error("External object row assignment must change its row link.");
}
assertOnlyFieldChanged(
assertOnlyFieldsChanged(
expected as unknown as Record<string, unknown>,
target as unknown as Record<string, unknown>,
"circuitDeviceRowId",
new Set(["circuitDeviceRowId", "distributionBoardId", "linkedProjectDeviceId", "planningValues", "overriddenFields"]),
"external object"
);
if (expected.circuitDeviceRowId) affectedRowIds.add(expected.circuitDeviceRowId);
@ -161,11 +161,22 @@ function assertOnlyFieldChanged(
target: Record<string, unknown>,
allowedField: string,
label: string
) {
assertOnlyFieldsChanged(expected, target, new Set([allowedField]), label);
}
function assertOnlyFieldsChanged(
expected: Record<string, unknown>,
target: Record<string, unknown>,
allowedFields: ReadonlySet<string>,
label: string
) {
const expectedRest = { ...expected };
const targetRest = { ...target };
delete expectedRest[allowedField];
delete targetRest[allowedField];
for (const field of allowedFields) {
delete expectedRest[field];
delete targetRest[field];
}
if (canonicalJson(expectedRest) !== canonicalJson(targetRest)) {
throw new Error(`Row assignment may only change the ${label} assignment state.`);
}