Drag and drop working

This commit is contained in:
2026-05-04 23:27:13 +02:00
parent 897e506b74
commit 75435475fc
8 changed files with 448 additions and 16 deletions
@@ -7,6 +7,7 @@ import type {
CreateCircuitDeviceRowInput,
CreateCircuitInput,
MoveCircuitDeviceRowInput,
ReorderSectionCircuitsInput,
UpdateCircuitDeviceRowInput,
UpdateCircuitInput,
} from "../../shared/validation/circuit.schemas.js";
@@ -408,4 +409,48 @@ export class CircuitWriteService {
return this.circuitRepository.listBySection(sectionId);
}
async reorderCircuitsInSection(sectionId: string, input: ReorderSectionCircuitsInput) {
const section = await this.circuitSectionRepository.findById(sectionId);
if (!section) {
throw new Error("Invalid section id.");
}
const sectionCircuits = await this.circuitRepository.listBySection(sectionId);
const sectionIds = new Set(sectionCircuits.map((circuit) => circuit.id));
if (sectionCircuits.length !== input.orderedCircuitIds.length) {
throw new Error("orderedCircuitIds must include all circuits of the section.");
}
for (const circuitId of input.orderedCircuitIds) {
if (!sectionIds.has(circuitId)) {
throw new Error("Circuit id does not belong to section.");
}
}
for (let index = 0; index < input.orderedCircuitIds.length; index += 1) {
const circuitId = input.orderedCircuitIds[index];
const circuit = sectionCircuits.find((entry) => entry.id === circuitId);
if (!circuit) {
throw new Error("Invalid circuit id.");
}
await this.circuitRepository.update(circuit.id, {
sectionId: circuit.sectionId,
equipmentIdentifier: circuit.equipmentIdentifier,
displayName: circuit.displayName ?? undefined,
sortOrder: (index + 1) * 10,
protectionType: circuit.protectionType ?? undefined,
protectionRatedCurrent: circuit.protectionRatedCurrent ?? undefined,
protectionCharacteristic: circuit.protectionCharacteristic ?? undefined,
cableType: circuit.cableType ?? undefined,
cableCrossSection: circuit.cableCrossSection ?? undefined,
cableLength: circuit.cableLength ?? undefined,
rcdAssignment: circuit.rcdAssignment ?? undefined,
terminalDesignation: circuit.terminalDesignation ?? undefined,
voltage: circuit.voltage ?? undefined,
status: circuit.status ?? undefined,
isReserve: Boolean(circuit.isReserve),
remark: circuit.remark ?? undefined,
});
}
return this.circuitRepository.listBySection(sectionId);
}
}