mirror of
https://github.com/yusufipk/OpenFrame.git
synced 2026-09-11 17:46:06 +00:00
refactor: Update API response handling to access nested data structure
This commit is contained in:
@@ -68,8 +68,8 @@ export default function ProjectMembersPage() {
|
||||
return;
|
||||
}
|
||||
const data = await res.json();
|
||||
setMembers(data.members);
|
||||
setOwner(data.owner);
|
||||
setMembers(data.data.members);
|
||||
setOwner(data.data.owner);
|
||||
} catch {
|
||||
setError('Failed to load members');
|
||||
} finally {
|
||||
|
||||
@@ -89,10 +89,11 @@ export default function ProjectSettingsPage({ params }: ProjectSettingsPageProps
|
||||
if (data.error) {
|
||||
setError(data.error);
|
||||
} else {
|
||||
const project = data.data;
|
||||
setFormData({
|
||||
name: data.name || '',
|
||||
description: data.description || '',
|
||||
visibility: data.visibility || 'PRIVATE',
|
||||
name: project.name || '',
|
||||
description: project.description || '',
|
||||
visibility: project.visibility || 'PRIVATE',
|
||||
});
|
||||
}
|
||||
})
|
||||
@@ -103,8 +104,8 @@ export default function ProjectSettingsPage({ params }: ProjectSettingsPageProps
|
||||
fetch(`/api/projects/${id}/tags`)
|
||||
.then((res) => res.json())
|
||||
.then((data) => {
|
||||
if (Array.isArray(data)) {
|
||||
setTags(data);
|
||||
if (Array.isArray(data.data)) {
|
||||
setTags(data.data);
|
||||
}
|
||||
})
|
||||
.catch(() => { /* Silent fail - tags are optional */ });
|
||||
@@ -150,7 +151,8 @@ export default function ProjectSettingsPage({ params }: ProjectSettingsPageProps
|
||||
body: JSON.stringify({ name: newTagName.trim(), color: newTagColor }),
|
||||
});
|
||||
if (res.ok) {
|
||||
const newTag = await res.json();
|
||||
const data = await res.json();
|
||||
const newTag = data.data;
|
||||
setTags([...tags, newTag]);
|
||||
setNewTagName('');
|
||||
setNewTagColor('#3B82F6');
|
||||
@@ -171,7 +173,8 @@ export default function ProjectSettingsPage({ params }: ProjectSettingsPageProps
|
||||
body: JSON.stringify({ name: editTagName.trim(), color: editTagColor }),
|
||||
});
|
||||
if (res.ok) {
|
||||
const updated = await res.json();
|
||||
const data = await res.json();
|
||||
const updated = data.data;
|
||||
setTags(tags.map((t) => (t.id === tagId ? updated : t)));
|
||||
setEditingTagId(null);
|
||||
}
|
||||
|
||||
@@ -45,9 +45,10 @@ export default function ProjectSharePage({ params }: ProjectSharePageProps) {
|
||||
if (data.error) {
|
||||
setError(data.error);
|
||||
} else {
|
||||
setProjectName(data.name || '');
|
||||
setProjectVisibility(data.visibility || 'PRIVATE');
|
||||
setMembers(data.members || []);
|
||||
const project = data.data;
|
||||
setProjectName(project.name || '');
|
||||
setProjectVisibility(project.visibility || 'PRIVATE');
|
||||
setMembers(project.members || []);
|
||||
}
|
||||
})
|
||||
.catch(() => setError('Failed to load project'))
|
||||
|
||||
@@ -79,7 +79,8 @@ export default function CompareVersionsPage() {
|
||||
setLoading(false);
|
||||
return;
|
||||
}
|
||||
const data = await res.json();
|
||||
const response = await res.json();
|
||||
const data = response.data;
|
||||
setVideo(data);
|
||||
|
||||
// Set initial versions from query params or defaults
|
||||
|
||||
@@ -240,7 +240,8 @@ export default function VideoPage() {
|
||||
try {
|
||||
const res = await fetch(`/api/projects/${projectId}/tags`);
|
||||
if (res.ok) {
|
||||
const tags = await res.json();
|
||||
const data = await res.json();
|
||||
const tags = data.data || [];
|
||||
setAvailableTags(tags);
|
||||
// Auto-select first tag (Feedback) as default
|
||||
if (tags.length > 0 && !selectedTagId) {
|
||||
@@ -1165,7 +1166,7 @@ export default function VideoPage() {
|
||||
const res = await fetch(`/api/projects/${projectId}/videos/${videoId}`);
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
setVideo(data);
|
||||
setVideo(data.data);
|
||||
}
|
||||
} catch { /* silent */ }
|
||||
}, 10000);
|
||||
|
||||
@@ -67,7 +67,7 @@ export default function NewProjectPage() {
|
||||
const res = await fetch('/api/workspaces');
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
const workspacesData = data.workspaces || [];
|
||||
const workspacesData = data.data.workspaces || [];
|
||||
setWorkspaces(workspacesData);
|
||||
// Auto-select if only one workspace and none preselected
|
||||
if (!preselectedWorkspace && workspacesData.length === 1) {
|
||||
@@ -106,7 +106,7 @@ export default function NewProjectPage() {
|
||||
return;
|
||||
}
|
||||
|
||||
router.push(`/projects/${data.id}`);
|
||||
router.push(`/projects/${data.data.id}`);
|
||||
} catch {
|
||||
setError('Something went wrong. Please try again.');
|
||||
} finally {
|
||||
|
||||
@@ -102,9 +102,9 @@ export default function SettingsPage() {
|
||||
const res = await fetch('/api/settings/notifications');
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
setSettings(data);
|
||||
setTelegramToken(data.telegramBotToken || '');
|
||||
setTelegramChatId(data.telegramChatId || '');
|
||||
setSettings(data.data);
|
||||
setTelegramToken(data.data.telegramBotToken || '');
|
||||
setTelegramChatId(data.data.telegramChatId || '');
|
||||
}
|
||||
} catch {
|
||||
console.error('Failed to fetch notification settings');
|
||||
@@ -135,7 +135,7 @@ export default function SettingsPage() {
|
||||
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
setSettings(data);
|
||||
setSettings(data.data);
|
||||
showMessage('success', 'Settings saved');
|
||||
} else {
|
||||
const data = await res.json();
|
||||
@@ -163,7 +163,7 @@ export default function SettingsPage() {
|
||||
});
|
||||
const data = await res.json();
|
||||
if (res.ok) {
|
||||
showMessage('success', data.message);
|
||||
showMessage('success', data.data.message);
|
||||
} else {
|
||||
showMessage('error', data.error || 'Test failed');
|
||||
}
|
||||
|
||||
@@ -68,8 +68,8 @@ export default function WorkspaceMembersPage() {
|
||||
return;
|
||||
}
|
||||
const data = await res.json();
|
||||
setMembers(data.members);
|
||||
setOwner(data.owner);
|
||||
setMembers(data.data.members);
|
||||
setOwner(data.data.owner);
|
||||
} catch {
|
||||
setError('Failed to load members');
|
||||
} finally {
|
||||
|
||||
@@ -63,7 +63,7 @@ export default function NewWorkspaceProjectPage({ params }: { params: Promise<{
|
||||
return;
|
||||
}
|
||||
|
||||
router.push(`/projects/${data.id}`);
|
||||
router.push(`/projects/${data.data.id}`);
|
||||
} catch {
|
||||
setError('Something went wrong. Please try again.');
|
||||
} finally {
|
||||
|
||||
@@ -40,10 +40,11 @@ export default function WorkspaceSettingsPage() {
|
||||
return;
|
||||
}
|
||||
const data = await res.json();
|
||||
setWorkspace(data);
|
||||
const workspace = data.data;
|
||||
setWorkspace(workspace);
|
||||
setFormData({
|
||||
name: data.name,
|
||||
description: data.description || '',
|
||||
name: workspace.name,
|
||||
description: workspace.description || '',
|
||||
});
|
||||
} catch {
|
||||
setError('Failed to load workspace');
|
||||
|
||||
@@ -38,7 +38,7 @@ export default function NewWorkspacePage() {
|
||||
return;
|
||||
}
|
||||
|
||||
router.push(`/workspaces/${data.id}`);
|
||||
router.push(`/workspaces/${data.data.id}`);
|
||||
} catch {
|
||||
setError('Something went wrong. Please try again.');
|
||||
} finally {
|
||||
|
||||
@@ -38,14 +38,14 @@ export async function GET(request: NextRequest, { params }: RouteParams) {
|
||||
const members = await db.projectMember.findMany({
|
||||
where: { projectId },
|
||||
include: {
|
||||
user: { select: { id: true, name: true, image: true } },
|
||||
user: { select: { id: true, name: true, email: true, image: true } },
|
||||
},
|
||||
orderBy: { createdAt: 'asc' },
|
||||
});
|
||||
|
||||
const owner = await db.user.findUnique({
|
||||
where: { id: project.ownerId },
|
||||
select: { id: true, name: true, image: true },
|
||||
select: { id: true, name: true, email: true, image: true },
|
||||
});
|
||||
|
||||
const response = successResponse({ members, owner });
|
||||
@@ -127,7 +127,7 @@ export async function POST(request: NextRequest, { params }: RouteParams) {
|
||||
role: memberRole as ProjectMemberRole,
|
||||
},
|
||||
include: {
|
||||
user: { select: { id: true, name: true, image: true } },
|
||||
user: { select: { id: true, name: true, email: true, image: true } },
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ export async function GET(request: NextRequest, { params }: RouteParams) {
|
||||
const members = await db.workspaceMember.findMany({
|
||||
where: { workspaceId },
|
||||
include: {
|
||||
user: { select: { id: true, name: true, image: true } },
|
||||
user: { select: { id: true, name: true, email: true, image: true } },
|
||||
},
|
||||
orderBy: { createdAt: 'asc' },
|
||||
});
|
||||
@@ -46,7 +46,7 @@ export async function GET(request: NextRequest, { params }: RouteParams) {
|
||||
// Include the owner as well
|
||||
const owner = await db.user.findUnique({
|
||||
where: { id: workspace.ownerId },
|
||||
select: { id: true, name: true, image: true },
|
||||
select: { id: true, name: true, email: true, image: true },
|
||||
});
|
||||
|
||||
const response = successResponse({ members, owner });
|
||||
@@ -128,7 +128,7 @@ export async function POST(request: NextRequest, { params }: RouteParams) {
|
||||
role: memberRole as WorkspaceMemberRole,
|
||||
},
|
||||
include: {
|
||||
user: { select: { id: true, name: true, image: true } },
|
||||
user: { select: { id: true, name: true, email: true, image: true } },
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -222,7 +222,8 @@ export default function WatchPage() {
|
||||
try {
|
||||
const res = await fetch(`/api/projects/${projectId}/tags`);
|
||||
if (res.ok) {
|
||||
const tags = await res.json();
|
||||
const data = await res.json();
|
||||
const tags = data.data || [];
|
||||
setAvailableTags(tags);
|
||||
// Auto-select first tag (Feedback) as default
|
||||
if (tags.length > 0 && !selectedTagId) {
|
||||
@@ -1118,7 +1119,7 @@ export default function WatchPage() {
|
||||
const res = await fetch(`/api/watch/${videoId}`);
|
||||
if (res.ok) {
|
||||
const data = await res.json();
|
||||
setVideo(data);
|
||||
setVideo(data.data);
|
||||
}
|
||||
} catch { /* silent */ }
|
||||
}, 10000);
|
||||
|
||||
Reference in New Issue
Block a user