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
35 changes: 31 additions & 4 deletions apps/frontend/src/pages/[type]/[id].vue
Original file line number Diff line number Diff line change
Expand Up @@ -1532,11 +1532,38 @@ try {
useAsyncData(`project/${projectId.value}/dependencies`, () =>
useBaseFetch(`project/${projectId.value}/dependencies`, {}),
),
useAsyncData(`project/${projectId.value}/version`, () =>
useBaseFetch(`project/${projectId.value}/version`),
useAsyncData(
`project/${projectId.value}/version`,
() =>
useBaseFetch(`project/${projectId.value}/version`, {
query: {
include_changelog: false,
},
}),
// TODO - remove the transform to delete changelog once backend deployed
{
transform: (versions) => {
console.log(versions)
return versions
},
},
),
useAsyncData(`project/${projectId.value}/version/v3`, () =>
useBaseFetch(`project/${projectId.value}/version`, { apiVersion: 3 }),
useAsyncData(
`project/${projectId.value}/version/v3`,
() =>
useBaseFetch(`project/${projectId.value}/version`, {
apiVersion: 3,
query: {
include_changelog: false,
},
}),
// TODO - remove the transform to delete changelog once backend deployed
{
transform: (versions) => {
console.log(versions)
return versions
},
},
),
useAsyncData(`project/${projectId.value}/organization`, () =>
useBaseFetch(`project/${projectId.value}/organization`, { apiVersion: 3 }),
Expand Down
111 changes: 67 additions & 44 deletions apps/frontend/src/pages/[type]/[id]/changelog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,53 +15,54 @@
/>
</div>
<div class="card changelog-wrapper">
<div
v-for="version in filteredVersions.slice((currentPage - 1) * 20, currentPage * 20)"
:key="version.id"
class="changelog-item"
>
<div
:class="`changelog-bar ${version.version_type} ${version.duplicate ? 'duplicate' : ''}`"
/>
<div class="version-wrapper">
<div class="version-header">
<div class="version-header-text">
<h2 class="name">
<nuxt-link
:to="`/${props.project.project_type}/${
props.project.slug ? props.project.slug : props.project.id
}/version/${encodeURI(version.displayUrlEnding)}`"
<template v-if="paginatedVersions">
<div v-for="version in paginatedVersions" :key="version.id" class="changelog-item">
<div
:class="`changelog-bar ${version.version_type} ${version.duplicate ? 'duplicate' : ''}`"
/>
<div class="version-wrapper">
<div class="version-header">
<div class="version-header-text">
<h2 class="name">
<nuxt-link
:to="`/${props.project.project_type}/${
props.project.slug ? props.project.slug : props.project.id
}/version/${encodeURI(version.displayUrlEnding)}`"
>
{{ version.name }}
</nuxt-link>
</h2>
<span v-if="version.author">
by
<nuxt-link class="text-link" :to="'/user/' + version.author.user.username">{{
version.author.user.username
}}</nuxt-link>
</span>
<span>
on
{{ $dayjs(version.date_published).format('MMM D, YYYY') }}</span
>
{{ version.name }}
</nuxt-link>
</h2>
<span v-if="version.author">
by
<nuxt-link class="text-link" :to="'/user/' + version.author.user.username">{{
version.author.user.username
}}</nuxt-link>
</span>
<span>
on
{{ $dayjs(version.date_published).format('MMM D, YYYY') }}</span
</div>
<a
:href="version.primaryFile?.url"
class="iconified-button download"
:title="`Download ${version.name}`"
>
<DownloadIcon aria-hidden="true" />
Download
</a>
</div>
<a
:href="version.primaryFile?.url"
class="iconified-button download"
:title="`Download ${version.name}`"
>
<DownloadIcon aria-hidden="true" />
Download
</a>
<div
v-if="version.changelog && !version.duplicate"
class="markdown-body"
v-html="renderHighlightedString(version.changelog)"
/>
</div>
<div
v-if="version.changelog && !version.duplicate"
class="markdown-body"
v-html="renderHighlightedString(version.changelog)"
/>
</div>
</div>
</template>
<template v-else>
<SpinnerIcon class="animate-spin" />
</template>
</div>
<Pagination
:page="currentPage"
Expand All @@ -73,8 +74,8 @@
</div>
</template>
<script setup>
import { DownloadIcon } from '@modrinth/assets'
import { Pagination } from '@modrinth/ui'
import { DownloadIcon, SpinnerIcon } from '@modrinth/assets'
import { injectModrinthClient, Pagination } from '@modrinth/ui'
import VersionFilterControl from '@modrinth/ui/src/components/version/VersionFilterControl.vue'
import { renderHighlightedString } from '@modrinth/utils'

Expand Down Expand Up @@ -132,6 +133,28 @@ const filteredVersions = computed(() => {
)
})

const { labrinth } = injectModrinthClient()

const paginatedVersions = ref(null)

watch(
[filteredVersions, currentPage],
async ([filtered, page]) => {
const paginated = filtered.slice((page - 1) * 20, page * 20)

const ids = paginated.map((v) => v.id)
const versions = await labrinth.versions_v3.getVersions(toRaw(ids))

paginatedVersions.value = paginated.map((version) => {
const fullVersion = versions.find((v) => v.id === version.id)

if (fullVersion) return { ...version, changelog: fullVersion.changelog }
else return version
})
},
{ immediate: true },
)

function switchPage(page) {
currentPage.value = page

Expand Down
5 changes: 4 additions & 1 deletion apps/frontend/src/pages/[type]/[id]/version/[version].vue
Original file line number Diff line number Diff line change
Expand Up @@ -861,7 +861,10 @@ export default defineNuxtComponent({
`project/${props.project.id}/version/${route.params.version}`,
{ apiVersion: 3 },
)
if (versionV3) version.environment = versionV3.environment
if (versionV3) {
version.environment = versionV3.environment
version.changelog = versionV3.changelog
}
}
if (!version) {
Expand Down
Loading