function processACMPapers(acmConfPapers) {
const attrs = [
"sponsors",
"sponsorLevels",
"floors",
"rooms",
"tracks",
"contentTypes",
"timeSlots",
"sessions",
"events",
"contents",
"people",
"recognitions"
];
const maps = new Map(
attrs.map((a) => [a, new Map(acmConfPapers[a].map((d) => [d.id, d]))])
);
const papers = acmConfPapers.contents.map((d) => {
d.id = +d.id;
d.sessions = d.sessionIds.map((s) => {
const session = maps.get("sessions").get(s);
if (!session) console.log("Session not found", s, session);
session.room = maps.get("rooms").get(session.roomId);
session.timeSlot = maps.get("timeSlots").get(session.timeSlotId);
return session;
});
d.firstSessionName = d.sessions[0]?.name;
d.sessionName = d.sessionName || d.firstSessionName;
d.firstRoomName = d.sessions[0]?.room?.name;
d.roomName = d.roomName || d.firstRoomName;
d.firstTimestamp = new Date(d.sessions[0]?.timeSlot?.startDate);
d.timestamp = d.timestamp || d.firstTimestamp;
d.firstSessionNameWord = d.sessions[0]?.name.split(" ")[0];
d.track = maps.get("tracks").get(d.trackId).name;
d.type = d.track || `${acmConfPapers.conference.shortName} paper`;
d.authorsExpanded = d.authors.map((a) =>
maps.get("people").get(a.personId)
);
d.authorsList = d.authorsExpanded.map((a) =>
`${a.firstName?.trim()} ${a.lastName?.trim()}`.toLocaleLowerCase()
);
d.authorNames = d.authorsList.join(", ");
d.affiliationsList = [
...new Set(
d.authors
.map((a) =>
a.affiliations.map((f) => f.institution.trim().toLocaleLowerCase())
)
.flat()
)
];
d.url = `https://programs.sigchi.org/${acmConfPapers.conference.shortName.toLocaleLowerCase()}/2024/program/content/${
d.id
}`;
return d;
});
return { papers, maps };
}