Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 76x 34x 76x 76x 23x 34x 23x 11x 15x 15x 13x 13x 8x | import type { Room, Media } from "../db/schema/projects";
/**
* Resolves project cover image using the cascade:
* 1. Default room (project.defaultRoomId) → isCover media
* 2. Default room → first media by sort_order
* 3. First room by sort_order → isCover media
* 4. null
*/
export function resolveProjectCover(
rooms: Array<Room & { media: Media[] }>,
defaultRoomId?: number | null,
): string | null {
if (rooms.length === 0) return null;
const featuredRoom = (defaultRoomId ? rooms.find((r) => r.id === defaultRoomId) : undefined) || rooms[0];
const coverMedia = featuredRoom.media.find((m) => m.isCover);
if (coverMedia) return coverMedia.storageKey;
const firstMedia = featuredRoom.media.sort(
(a, b) => a.sortOrder - b.sortOrder,
)[0];
if (firstMedia) return firstMedia.storageKey;
for (const room of rooms) {
const cover = room.media.find((m) => m.isCover);
if (cover) return cover.storageKey;
const first = room.media.sort((a, b) => a.sortOrder - b.sortOrder)[0];
if (first) return first.storageKey;
}
return null;
}
|