Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions app/paper/[id]/[slug]/bounties/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { PaperService } from '@/services/paper.service';
import { MetadataService } from '@/services/metadata.service';
import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import { WorkDocument } from '@/components/work/WorkDocument';
import { SearchHistoryTracker } from '@/components/work/SearchHistoryTracker';
import { WorkDocumentTracker } from '@/components/WorkDocumentTracker';
import { getWorkMetadata } from '@/lib/metadata-helpers';
import { getPaper, getDocumentMetadata } from '../data';

interface Props {
params: Promise<{
Expand All @@ -20,7 +19,7 @@ async function getWork(id: string) {
}

try {
return await PaperService.get(id);
return await getPaper(id);
} catch (error) {
notFound();
}
Expand All @@ -38,7 +37,7 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
export default async function WorkBountiesPage({ params }: Props) {
const resolvedParams = await params;
const work = await getWork(resolvedParams.id);
const metadata = await MetadataService.get(work.unifiedDocumentId?.toString() || '');
const metadata = await getDocumentMetadata(work.unifiedDocumentId);

if (!work) {
notFound();
Expand Down
7 changes: 3 additions & 4 deletions app/paper/[id]/[slug]/conversation/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { PaperService } from '@/services/paper.service';
import { MetadataService } from '@/services/metadata.service';
import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import { WorkDocument } from '@/components/work/WorkDocument';
import { SearchHistoryTracker } from '@/components/work/SearchHistoryTracker';
import { WorkDocumentTracker } from '@/components/WorkDocumentTracker';
import { getWorkMetadata } from '@/lib/metadata-helpers';
import { getPaper, getDocumentMetadata } from '../data';

interface Props {
params: Promise<{
Expand All @@ -20,7 +19,7 @@ async function getWork(id: string) {
}

try {
return await PaperService.get(id);
return await getPaper(id);
} catch (error) {
notFound();
}
Expand All @@ -38,7 +37,7 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
export default async function WorkConversationPage({ params }: Props) {
const resolvedParams = await params;
const work = await getWork(resolvedParams.id);
const metadata = await MetadataService.get(work.unifiedDocumentId?.toString() || '');
const metadata = await getDocumentMetadata(work.unifiedDocumentId);

if (!work) {
notFound();
Expand Down
19 changes: 19 additions & 0 deletions app/paper/[id]/[slug]/data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import 'server-only';

import { cache } from 'react';
import { MetadataService } from '@/services/metadata.service';
import { PaperService } from '@/services/paper.service';

/**
* Deduplicates paper detail requests within a single server render.
*/
export const getPaper = cache(async (id: string) => {
return PaperService.get(id);
});

/**
* Deduplicates document metadata requests within a single server render.
*/
export const getDocumentMetadata = cache(async (unifiedDocumentId: number | null | undefined) => {
return MetadataService.get(unifiedDocumentId?.toString() || '');
});
7 changes: 3 additions & 4 deletions app/paper/[id]/[slug]/history/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { PaperService } from '@/services/paper.service';
import { MetadataService } from '@/services/metadata.service';
import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import { WorkDocument } from '@/components/work/WorkDocument';
import { SearchHistoryTracker } from '@/components/work/SearchHistoryTracker';
import { WorkDocumentTracker } from '@/components/WorkDocumentTracker';
import { getWorkMetadata } from '@/lib/metadata-helpers';
import { getPaper, getDocumentMetadata } from '../data';

interface Props {
params: Promise<{
Expand All @@ -20,7 +19,7 @@ async function getWork(id: string) {
}

try {
return await PaperService.get(id);
return await getPaper(id);
} catch (error) {
notFound();
}
Expand All @@ -38,7 +37,7 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
export default async function WorkHistoryPage({ params }: Props) {
const resolvedParams = await params;
const work = await getWork(resolvedParams.id);
const metadata = await MetadataService.get(work.unifiedDocumentId?.toString() || '');
const metadata = await getDocumentMetadata(work.unifiedDocumentId);

if (!work) {
notFound();
Expand Down
9 changes: 4 additions & 5 deletions app/paper/[id]/[slug]/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import { Suspense } from 'react';
import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import { PaperService } from '@/services/paper.service';
import { MetadataService } from '@/services/metadata.service';
import { buildArticleMetadata } from '@/lib/metadata';
import { stripHtml } from '@/utils/stringUtils';
import { PageLayout } from '@/app/layouts/PageLayout';
import { WorkHeader, WorkTabProvider } from '@/components/work/WorkHeader/index';
import { WorkRightSidebar } from '@/components/work/WorkRightSidebar';
import { getPaper, getDocumentMetadata } from './data';

interface Props {
params: Promise<{
Expand All @@ -20,7 +19,7 @@ interface Props {
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { id, slug } = await params;
try {
const work = await PaperService.get(id);
const work = await getPaper(id);
const previewText = stripHtml(work.previewContent || '').substring(0, 155);
const description = work.abstract || previewText || 'Read this research paper on ResearchHub.';
return buildArticleMetadata({
Expand Down Expand Up @@ -48,11 +47,11 @@ export default async function PaperSlugLayout({ params, children }: Props) {

let work;
try {
work = await PaperService.get(id);
work = await getPaper(id);
} catch {
notFound();
}
const metadata = await MetadataService.get(work.unifiedDocumentId?.toString() || '');
const metadata = await getDocumentMetadata(work.unifiedDocumentId);

return (
<WorkTabProvider>
Expand Down
7 changes: 3 additions & 4 deletions app/paper/[id]/[slug]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { PaperService } from '@/services/paper.service';
import { MetadataService } from '@/services/metadata.service';
import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import { WorkDocument } from '@/components/work/WorkDocument';
import { SearchHistoryTracker } from '@/components/work/SearchHistoryTracker';
import { WorkDocumentTracker } from '@/components/WorkDocumentTracker';
import { getWorkMetadata } from '@/lib/metadata-helpers';
import { getPaper, getDocumentMetadata } from './data';

interface Props {
params: Promise<{
Expand All @@ -20,7 +19,7 @@ async function getWork(id: string) {
}

try {
return await PaperService.get(id);
return await getPaper(id);
} catch (error) {
notFound();
}
Expand All @@ -39,7 +38,7 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
export default async function WorkPage({ params }: Props) {
const resolvedParams = await params;
const work = await getWork(resolvedParams.id);
const metadata = await MetadataService.get(work.unifiedDocumentId?.toString() || '');
const metadata = await getDocumentMetadata(work.unifiedDocumentId);

if (!work) {
notFound();
Expand Down
7 changes: 3 additions & 4 deletions app/paper/[id]/[slug]/reviews/page.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { PaperService } from '@/services/paper.service';
import { MetadataService } from '@/services/metadata.service';
import { Metadata } from 'next';
import { notFound } from 'next/navigation';
import { WorkDocument } from '@/components/work/WorkDocument';
import { SearchHistoryTracker } from '@/components/work/SearchHistoryTracker';
import { WorkDocumentTracker } from '@/components/WorkDocumentTracker';
import { getWorkMetadata } from '@/lib/metadata-helpers';
import { getPaper, getDocumentMetadata } from '../data';

interface Props {
params: Promise<{
Expand All @@ -20,7 +19,7 @@ async function getWork(id: string) {
}

try {
return await PaperService.get(id);
return await getPaper(id);
} catch (error) {
notFound();
}
Expand All @@ -38,7 +37,7 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
export default async function WorkReviewsPage({ params }: Props) {
const resolvedParams = await params;
const work = await getWork(resolvedParams.id);
const metadata = await MetadataService.get(work.unifiedDocumentId?.toString() || '');
const metadata = await getDocumentMetadata(work.unifiedDocumentId);

if (!work) {
notFound();
Expand Down