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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | 19x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 25x 1x 1x 1x 1x 1x 1x 16x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x | // API adapters that normalize pro and admin APIs behind a common interface
import { proApi, adminApi } from "../../lib/api";
import type { ProjectApiAdapter } from "./types";
/**
* Creates an API adapter for pro context
* All operations are scoped to the pro's own data
*/
export function createProApiAdapter(proId: string): ProjectApiAdapter {
return {
// Project operations
getProject: (projectId) => proApi.getProject(proId, projectId),
updateProject: (projectId, data) =>
proApi.updateProject(proId, projectId, data),
deleteProject: (projectId) => proApi.deleteProject(proId, projectId),
publishProject: (projectId) =>
proApi.publishProject(proId, projectId),
archiveProject: (projectId) =>
proApi.archiveProject(proId, projectId),
// Room operations - full support for pros
getRooms: (projectId) => proApi.getRooms(proId, projectId),
getRoom: (roomId) => proApi.getRoom(proId, roomId),
createRoom: (projectId, data) =>
proApi.createRoom(proId, projectId, data),
updateRoom: (roomId, data) => proApi.updateRoom(proId, roomId, data),
deleteRoom: (roomId) => proApi.deleteRoom(proId, roomId),
reorderRooms: (projectId, roomIds) =>
proApi.reorderRooms(proId, projectId, roomIds),
// Media operations - full support for pros
getMediaByRoom: (roomId) => proApi.getMediaByRoom(proId, roomId),
deleteMedia: (mediaId) => proApi.deleteMedia(proId, mediaId),
reorderMedia: (roomId, mediaIds) =>
proApi.reorderMedia(proId, roomId, mediaIds),
setRoomCover: (roomId, mediaId) =>
proApi.setRoomCover(proId, roomId, mediaId),
// Pro info - not needed for pro context (they have usePro)
getPro: undefined,
};
}
/**
* Creates an API adapter for admin context
* Admins can manage any project across all pros
*/
export function createAdminApiAdapter(): ProjectApiAdapter {
return {
// Project operations - admin doesn't need proId
getProject: (projectId) => adminApi.getProject(projectId),
updateProject: (projectId, data) => adminApi.updateProject(projectId, data),
deleteProject: (projectId) => adminApi.deleteProject(projectId),
publishProject: (projectId) => adminApi.publishProject(projectId),
archiveProject: (projectId) => adminApi.archiveProject(projectId),
// Room operations - admin uses pro API with project's proId
// These will be set dynamically after project is loaded
getRooms: undefined,
getRoom: undefined,
createRoom: undefined,
updateRoom: undefined,
deleteRoom: undefined,
reorderRooms: undefined,
// Media operations - same as rooms
getMediaByRoom: undefined,
deleteMedia: undefined,
reorderMedia: undefined,
setRoomCover: undefined,
// Pro info - admin needs to look up pro separately
getPro: (proId) => adminApi.getPro(proId),
};
}
/**
* Enhances an admin adapter with room operations using the project's proId
* Call this after loading the project to enable room management
*/
export function enhanceAdminAdapterWithRooms(
adapter: ProjectApiAdapter,
proId: string,
): ProjectApiAdapter {
return {
...adapter,
// Add room operations using pro API
getRooms: (projectId) => proApi.getRooms(proId, projectId),
getRoom: (roomId) => proApi.getRoom(proId, roomId),
createRoom: (projectId, data) =>
proApi.createRoom(proId, projectId, data),
updateRoom: (roomId, data) => proApi.updateRoom(proId, roomId, data),
deleteRoom: (roomId) => proApi.deleteRoom(proId, roomId),
reorderRooms: (projectId, roomIds) =>
proApi.reorderRooms(proId, projectId, roomIds),
// Add media operations
getMediaByRoom: (roomId) => proApi.getMediaByRoom(proId, roomId),
deleteMedia: (mediaId) => proApi.deleteMedia(proId, mediaId),
reorderMedia: (roomId, mediaIds) =>
proApi.reorderMedia(proId, roomId, mediaIds),
setRoomCover: (roomId, mediaId) =>
proApi.setRoomCover(proId, roomId, mediaId),
};
}
|