diff --git a/apps/app-frontend/src/pages/instance/Mods.vue b/apps/app-frontend/src/pages/instance/Mods.vue
index be9371da4d..4d7970b3b5 100644
--- a/apps/app-frontend/src/pages/instance/Mods.vue
+++ b/apps/app-frontend/src/pages/instance/Mods.vue
@@ -23,19 +23,45 @@
- (currentPage = page)"
- />
+
+
+ View:
+ {{ selected }}
+
+
(currentPage = page)"
+ />
+
@@ -217,7 +244,7 @@
(currentPage = page)"
/>
@@ -274,6 +301,7 @@ import {
Button,
ButtonStyled,
ContentListPanel,
+ DropdownSelect,
injectNotificationManager,
OverflowMenu,
Pagination,
@@ -532,6 +560,7 @@ const filterOptions: ComputedRef = computed(() => {
})
const selectedFilters = ref([])
+const hideDisabledProjects = ref(false)
const filteredProjects = computed(() => {
const updatesFilter = selectedFilters.value.includes('updates')
const disabledFilter = selectedFilters.value.includes('disabled')
@@ -541,6 +570,11 @@ const filteredProjects = computed(() => {
)
return projects.value.filter((project) => {
+ // If hideDisabledProjects is true, exclude all disabled projects
+ if (hideDisabledProjects.value && project.disabled) {
+ return false
+ }
+
return (
(typeFilters.length === 0 || typeFilters.includes(project.project_type)) &&
(!updatesFilter || project.outdated) &&
@@ -566,12 +600,29 @@ function toggleArray(array: T[], value: T) {
}
}
+function toggleDisabledFilter() {
+ const isShowingOnlyDisabled = selectedFilters.value.includes('disabled')
+
+ if (!isShowingOnlyDisabled && !hideDisabledProjects.value) {
+ // State 1 -> State 2: Show only disabled (green)
+ selectedFilters.value.push('disabled')
+ } else if (isShowingOnlyDisabled && !hideDisabledProjects.value) {
+ // State 2 -> State 3: Hide all disabled (red)
+ selectedFilters.value.splice(selectedFilters.value.indexOf('disabled'), 1)
+ hideDisabledProjects.value = true
+ } else {
+ // State 3 -> State 1: Show all (default)
+ hideDisabledProjects.value = false
+ }
+}
+
const searchFilter = ref('')
const selectAll = ref(false)
const shareModal = ref | null>()
const ascending = ref(true)
const sortColumn = ref('Name')
const currentPage = ref(1)
+const pageSize = ref(20)
const selected = computed(() =>
Array.from(selectionMap.value)
@@ -607,7 +658,10 @@ const search = computed(() => {
}
})
-watch([sortColumn, ascending, selectedFilters.value, searchFilter], () => (currentPage.value = 1))
+watch(
+ [sortColumn, ascending, selectedFilters.value, searchFilter, pageSize],
+ () => (currentPage.value = 1),
+)
const sortProjects = (filter: string) => {
if (sortColumn.value === filter) {
diff --git a/packages/ui/src/components/content/ContentListPanel.vue b/packages/ui/src/components/content/ContentListPanel.vue
index f729140eee..d1319093dd 100644
--- a/packages/ui/src/components/content/ContentListPanel.vue
+++ b/packages/ui/src/components/content/ContentListPanel.vue
@@ -14,8 +14,11 @@ const props = withDefaults(
sortAscending: boolean
updateSort: (column: string) => void
currentPage: number
+ pageSize?: number
}>(),
- {},
+ {
+ pageSize: 20,
+ },
)
const selectionStates: Ref> = ref({})
@@ -43,7 +46,7 @@ function setSelected(value: boolean) {
}
const paginatedItems = computed(() =>
- props.items.slice((props.currentPage - 1) * 20, props.currentPage * 20),
+ props.items.slice((props.currentPage - 1) * props.pageSize, props.currentPage * props.pageSize),
)