matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
38 lines • 1.55 kB
JavaScript
import { RoomIndexMap } from '../core/application/models/RoomIndexMap.js';
export function mergeSupportedAreasByMap(existingAreas, incomingAreas, mapId, existingIndexMap, incomingIndexMap) {
const keptAreas = existingAreas.filter((a) => a.mapId !== mapId);
const newForMap = incomingAreas.filter((a) => a.mapId === mapId);
const merged = [...keptAreas, ...newForMap];
const supportedAreas = merged.map((area, index) => ({ ...area, areaId: index }));
const areaInfos = new Map();
const roomInfos = new Map();
for (let i = 0; i < keptAreas.length; i++) {
const oldAreaId = keptAreas[i].areaId;
const info = existingIndexMap?.areaInfo.get(oldAreaId);
if (!info)
continue;
areaInfos.set(i, info);
const keptMapId = info.mapId ?? 0;
roomInfos.set(`${info.roomId}-${keptMapId}`, {
areaId: i,
mapId: keptMapId,
roomName: info.roomName,
});
}
const offset = keptAreas.length;
for (const [oldAreaId, info] of incomingIndexMap.areaInfo) {
const newAreaId = offset + oldAreaId;
areaInfos.set(newAreaId, info);
const incomingMapId = info.mapId ?? mapId;
roomInfos.set(`${info.roomId}-${incomingMapId}`, {
areaId: newAreaId,
mapId: incomingMapId,
roomName: info.roomName,
});
}
return {
supportedAreas,
roomIndexMap: new RoomIndexMap(areaInfos, roomInfos),
};
}
//# sourceMappingURL=mergeSupportedAreasByMap.js.map