Skip to content

Commit c467c3e

Browse files
committed
create and implement BasicCard for likes grid
1 parent 9591998 commit c467c3e

2 files changed

Lines changed: 30 additions & 22 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<script setup lang="ts">
2+
const props = defineProps<{
3+
packageName: string
4+
}>()
5+
6+
function extractPackageFromRef(ref: string) {
7+
const { pkg } = /https:\/\/npmx.dev\/package\/(?<pkg>.*)/.exec(ref).groups
8+
const [org, name] = pkg.startsWith('@') ? pkg.split('/') : [null, pkg]
9+
return { full: pkg, org, name }
10+
}
11+
12+
const orgName = computed(() => extractPackageFromRef(props.packageName))
13+
</script>
14+
15+
<template>
16+
<NuxtLink :to="packageRoute(orgName.full)">
17+
<BaseCard class="group font-mono flex justify-between">
18+
{{ orgName.full }}
19+
<p class="transition-transform duration-150 group-hover:rotate-45">↗</p>
20+
</BaseCard>
21+
</NuxtLink>
22+
</template>

app/pages/profile/[handle]/index.vue

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,13 @@ const { data: profile }: { data?: NPMXProfile } = useFetch(
2323
},
2424
)
2525
26-
const { data: likes, status } = await useProfileLikes(handle)
26+
const { data: likesData, status } = await useProfileLikes(handle)
2727
2828
useSeoMeta({
2929
title: () => `${handle.value} - npmx`,
3030
description: () => `npmx profile by ${handle.value}`,
3131
})
3232
33-
function extractPackageFromRef(ref: string) {
34-
const { pkg } = /https:\/\/npmx.dev\/package\/(?<pkg>.*)/.exec(ref).groups
35-
return pkg
36-
}
37-
3833
/**
3934
defineOgImageComponent('Default', {
4035
title: () => `~${username.value}`,
@@ -57,13 +52,13 @@ defineOgImageComponent('Default', {
5752
</div>
5853
</header>
5954

60-
<section class="flex flex-col gap-3">
55+
<section class="flex flex-col gap-8">
6156
<h1
6257
class="font-mono text-2xl sm:text-3xl font-medium min-w-0 break-words"
6358
:title="Likes"
6459
dir="ltr"
6560
>
66-
Likes <span v-if="status === 'success'">({{ likes.likes.records.length ?? 0 }})</span>
61+
Likes <span v-if="likesData">({{ likesData.likes.records.length ?? 0 }})</span>
6762
</h1>
6863
<div v-if="status === 'pending'">
6964
<p>Loading...</p>
@@ -72,20 +67,11 @@ defineOgImageComponent('Default', {
7267
<p>Error</p>
7368
</div>
7469
<div v-else class="grid grid-cols-1 lg:grid-cols-3 gap-4">
75-
<NuxtLink
76-
:to="{
77-
name: 'package-pkg',
78-
params: { pkg: extractPackageFromRef(like.value.subjectRef) },
79-
}"
80-
v-for="like in likes.likes.records"
81-
>
82-
<BaseCard class="group font-mono flex justify-between">
83-
<p>
84-
{{ extractPackageFromRef(like.value.subjectRef) }}
85-
</p>
86-
<p class="transition-transform duration-150 group-hover:rotate-45">↗</p>
87-
</BaseCard>
88-
</NuxtLink>
70+
<PackageBasicCard
71+
v-if="likesData.likes.records"
72+
v-for="like in likesData.likes.records"
73+
:packageName="like.value.subjectRef"
74+
/>
8975
</div>
9076
</section>
9177
</main>

0 commit comments

Comments
 (0)