From 26f7bbb658c7efd2ac70df2360b8356f6d77fcfe Mon Sep 17 00:00:00 2001
From: James Garbutt <43081j@users.noreply.github.com>
Date: Sun, 5 Apr 2026 21:53:53 +0100
Subject: [PATCH 1/5] feat: add new useVisibleItems composable
This adds a new `useVisibleItems` composable and initially adopts it in
the dependencies view of a package.
In follow ups, we can adopt it in more pages to reduce duplicated logic.
---
app/components/Package/Dependencies.vue | 44 +++++++++++++++----------
app/composables/useVisibleItems.ts | 25 ++++++++++++++
2 files changed, 52 insertions(+), 17 deletions(-)
create mode 100644 app/composables/useVisibleItems.ts
diff --git a/app/components/Package/Dependencies.vue b/app/components/Package/Dependencies.vue
index 7f3836214f..2bddda193a 100644
--- a/app/components/Package/Dependencies.vue
+++ b/app/components/Package/Dependencies.vue
@@ -37,11 +37,6 @@ function getDeprecatedDepInfo(depName: string) {
return vulnTree.value.deprecatedPackages.find(p => p.name === depName && p.depth === 'direct')
}
-// Expanded state for each section
-const depsExpanded = shallowRef(false)
-const peerDepsExpanded = shallowRef(false)
-const optionalDepsExpanded = shallowRef(false)
-
// Sort dependencies alphabetically
const sortedDependencies = computed(() => {
if (!props.dependencies) return []
@@ -89,6 +84,24 @@ function getDepVersionClass(dep: string) {
return getVersionClass(undefined)
}
+const {
+ visibleItems: visibleDeps,
+ hasMore: hasMoreDeps,
+ expand: expandDeps,
+} = useVisibleItems(sortedDependencies, 10)
+
+const {
+ visibleItems: visiblePeerDeps,
+ hasMore: hasMorePeerDeps,
+ expand: expandPeerDeps,
+} = useVisibleItems(sortedPeerDependencies, 10)
+
+const {
+ visibleItems: visibleOptionalDeps,
+ hasMore: hasMoreOptionalDeps,
+ expand: expandOptionalDeps,
+} = useVisibleItems(sortedOptionalDependencies, 10)
+
const numberFormatter = useNumberFormatter()
@@ -110,7 +123,7 @@ const numberFormatter = useNumberFormatter()
>
-
@@ -190,10 +203,10 @@ const numberFormatter = useNumberFormatter()