diff --git a/server/routers/launcher/types.ts b/server/routers/launcher/types.ts index 4a986118c..f235e824d 100644 --- a/server/routers/launcher/types.ts +++ b/server/routers/launcher/types.ts @@ -122,8 +122,8 @@ export const launcherFilterListQuerySchema = z.strictObject({ .int() .positive() .optional() - .catch(500) - .default(500), + .catch(20) + .default(20), page: z.coerce.number().int().min(1).optional().catch(1).default(1), query: z.string().optional().default("") }); diff --git a/src/components/LabelsFilterSelector.tsx b/src/components/LabelsFilterSelector.tsx index 3c9410e43..84a1819d8 100644 --- a/src/components/LabelsFilterSelector.tsx +++ b/src/components/LabelsFilterSelector.tsx @@ -11,7 +11,7 @@ import { import { launcherQueries, orgQueries } from "@app/lib/queries"; import { useQuery } from "@tanstack/react-query"; import { useTranslations } from "next-intl"; -import { useState } from "react"; +import { useMemo, useState } from "react"; import { useDebounce } from "use-debounce"; import { Checkbox } from "./ui/checkbox"; @@ -25,6 +25,7 @@ type LabelsFilterSelectorProps = { orgId: string; isSelected: (label: LabelFilterOption) => boolean; onToggle: (label: LabelFilterOption) => void; + selectedLabels?: LabelFilterOption[]; onClear?: () => void; showClear?: boolean; scope?: "org" | "launcher"; @@ -34,6 +35,7 @@ export function LabelsFilterSelector({ orgId, isSelected, onToggle, + selectedLabels = [], onClear, showClear = false, scope = "org" @@ -54,7 +56,7 @@ export function LabelsFilterSelector({ ...launcherQueries.labels({ orgId, query: debouncedQuery, - perPage: 500 + perPage: 20 }), enabled: scope === "launcher" }); @@ -63,6 +65,18 @@ export function LabelsFilterSelector({ ? (launcherLabelsQuery.data ?? []) : (orgLabelsQuery.data ?? []); + const labelsShown = useMemo(() => { + const base = [...labels]; + if (debouncedQuery.trim().length === 0 && selectedLabels.length > 0) { + const selectedNotInBase = selectedLabels.filter( + (selected) => + !base.some((label) => label.labelId === selected.labelId) + ); + return [...selectedNotInBase, ...base]; + } + return base; + }, [debouncedQuery, labels, selectedLabels]); + return ( )} - {labels.map((label) => ( + {labelsShown.map((label) => ( selectedLabelIds.has(label.labelId) } diff --git a/src/lib/queries.ts b/src/lib/queries.ts index 2626a3ba3..211ab7824 100644 --- a/src/lib/queries.ts +++ b/src/lib/queries.ts @@ -1196,7 +1196,7 @@ export const launcherQueries = { sites: ({ orgId, query, - perPage = 500 + perPage = 20 }: { orgId: string; query?: string; @@ -1228,7 +1228,7 @@ export const launcherQueries = { labels: ({ orgId, query, - perPage = 500 + perPage = 20 }: { orgId: string; query?: string;