Skip to content

Commit

Permalink
Merge pull request #282 from kse-publications/feature/task_similar_pu…
Browse files Browse the repository at this point in the history
…blications

similar publications section add
  • Loading branch information
yeontannie authored Jul 4, 2024
2 parents 9df1b91 + ece7309 commit fb7153c
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 4 deletions.
8 changes: 7 additions & 1 deletion client/src/components/publications/publication-section.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,18 @@ import { ChevronRightIcon } from '@radix-ui/react-icons'
import GoBackButton from '../layout/go-back-button'
import type { PaginatedCollection } from '@/types/common/paginated-collection'
import type { PublicationSummary } from '@/types/publication-summary/publication-summary'

import RelatedAuthorsContextProvider from '../related-by-authors-results/authors-context'
import RelatedAuthorsResults from '../related-by-authors-results/authors-results'
import SimilarPublicationsResults from './similar-publications'

interface PublicationPageProps {
data: Publication
relatedPublications: PaginatedCollection<PublicationSummary>
similarPublications: PublicationSummary[]
}

function PublicationPage({ data, relatedPublications }: PublicationPageProps) {
function PublicationPage({ data, relatedPublications, similarPublications }: PublicationPageProps) {
return (
<>
<RelatedAuthorsContextProvider
Expand Down Expand Up @@ -77,6 +80,9 @@ function PublicationPage({ data, relatedPublications }: PublicationPageProps) {
</div>
)}
</div>
{similarPublications?.length > 0 && (
<SimilarPublicationsResults similarResults={similarPublications} />
)}
{relatedPublications?.totalCount > 0 && <RelatedAuthorsResults />}
</RelatedAuthorsContextProvider>
</>
Expand Down
33 changes: 33 additions & 0 deletions client/src/components/publications/similar-publications.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import Masonry from 'react-masonry-css'
import { SearchResultItem } from '../search-results/search-result-item'
import type { PublicationSummary } from '@/types/publication-summary/publication-summary'

const breakpointColumnsObj = {
default: 2,
1100: 2,
600: 1,
}

interface SimilarPublicationsProps {
similarResults: PublicationSummary[]
}

export default function SimilarPublicationsResults({ similarResults }: SimilarPublicationsProps) {
return (
<div className="more-publications mb-10">
<div className="mb-5 flex content-center gap-5">
<h3 className="w-fit text-center text-2xl font-bold">Similar publications</h3>
<p className="flex items-center pl-1 pt-1 opacity-70">
{similarResults.length} publications found
</p>
</div>
{
<Masonry breakpointCols={breakpointColumnsObj} className="masonry-grid">
{similarResults.map((publication) => (
<SearchResultItem key={publication.slug} publication={publication} />
))}
</Masonry>
}
</div>
)
}
21 changes: 18 additions & 3 deletions client/src/pages/publications/[id].astro
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,49 @@ import { DEFAULT_PAGE } from '@/config/search-params'
import type { PaginatedCollection } from '@/types/common/paginated-collection'
import type { PublicationSummary } from '@/types/publication-summary/publication-summary'
import { getPublication } from '@/services/search/get-publications'
import Layout from '@/layouts/Layout.astro'
import PublicationPage from '@/components/publications/publication-section'
import { getPublication } from '@/services/search/get-publications'
import { getRelatedByAuthors } from '../../services/search/get-publications'
import Layout from '@/layouts/Layout.astro'
import { getSimilarPublications } from '../../services/search/get-publications'
const { id } = Astro.params as { id: string }
let relatedPublications: PaginatedCollection<PublicationSummary>
let similarPublications: PublicationSummary[]
const clientUuid = Astro.cookies.get('client-uuid')
const data = await getPublication(id, clientUuid?.value).catch((error) => {
console.log(error)
})
const authorsIds = data.authors.map((author: any) => author.id)
interface AuthorData {
id: number,
name: string
}
const authorsIds = data.authors.map((author: AuthorData) => author.id)
const fetchRelatedPublications = async () => {
let publications = await getRelatedByAuthors(data.id, DEFAULT_PAGE, authorsIds.join('-'))
return publications
}
const fetchSimilarPublications = async () => {
let similar = await getSimilarPublications(data.id)
return similar
}
relatedPublications = await fetchRelatedPublications()
similarPublications = await fetchSimilarPublications()
---

<Layout title=`KSE Publications | ${data.title}`>
<PublicationPage
data={data}
relatedPublications={relatedPublications}
similarPublications={similarPublications}
transition:persist
client:load
/>
Expand Down
5 changes: 5 additions & 0 deletions client/src/services/search/get-publications.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,8 @@ export const getRelatedByAuthors = async (
`${BASE_URL}/publications/${id}/related-by-authors?Page=${page}&PageSize=${DEFAULT_PAGE_SIZE}&Authors=${authors}`
).then((response) => response.json())
}

export const getSimilarPublications = async (id: string): Promise<PublicationSummary[]> => {
const BASE_URL = getBaseUrl()
return fetch(`${BASE_URL}/publications/${id}/similar`).then((response) => response.json())
}
5 changes: 5 additions & 0 deletions client/src/types/common/query-params.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,8 @@ export interface RelatedPublicationsQueryParams {
authors: string
page?: number
}

export interface SimilarPublicationsQueryParams {
id: string
page?: number
}

0 comments on commit fb7153c

Please sign in to comment.