From b279a9ea62397f0172365a1e4e17b3f4560d7f32 Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Mon, 4 May 2026 16:25:08 -0400 Subject: [PATCH 1/2] filter server-side, remove video count (#3287) --- .../api/src/hooks/learningResources/index.ts | 11 ---------- .../src/hooks/learningResources/queries.ts | 16 ++++++++------ .../VideoCollection.tsx | 22 +------------------ .../VideoPlaylistCollectionPage.tsx | 13 +++++------ .../ResourceCarousel/ResourceCarousel.tsx | 6 ++--- 5 files changed, 19 insertions(+), 49 deletions(-) diff --git a/frontends/api/src/hooks/learningResources/index.ts b/frontends/api/src/hooks/learningResources/index.ts index fe697779a8..989c023895 100644 --- a/frontends/api/src/hooks/learningResources/index.ts +++ b/frontends/api/src/hooks/learningResources/index.ts @@ -193,16 +193,6 @@ const useSimilarLearningResources = ( }) } -const useVectorSimilarLearningResources = ( - id: number, - opts?: { enabled?: boolean }, -) => { - return useQuery({ - ...learningResourceQueries.vectorSimilar(id), - ...opts, - }) -} - const useInfiniteLearningResourceItems = ( id: number, params: Omit, @@ -229,7 +219,6 @@ export { usePlatformsList, useSchoolsList, useSimilarLearningResources, - useVectorSimilarLearningResources, useInfiniteLearningResourceItems, learningResourceQueries, offerorQueries, diff --git a/frontends/api/src/hooks/learningResources/queries.ts b/frontends/api/src/hooks/learningResources/queries.ts index d6e38395d2..505da571ea 100644 --- a/frontends/api/src/hooks/learningResources/queries.ts +++ b/frontends/api/src/hooks/learningResources/queries.ts @@ -22,6 +22,7 @@ import type { LearningResourcesApiLearningResourcesSummaryListRequest as LearningResourcesSummaryListRequest, PaginatedLearningResourceRelationshipList, VideoPlaylistResource, + LearningResourcesApiLearningResourcesVectorSimilarListRequest, } from "../../generated/v1" import type { VectorLearningResourcesSearchApiVectorLearningResourcesSearchRetrieveRequest as VectorLearningResourcesSearchRetrieveRequest } from "../../generated/v0" import { infiniteQueryOptions, queryOptions } from "@tanstack/react-query" @@ -54,10 +55,9 @@ const learningResourceKeys = { detailsRoot: () => [...learningResourceKeys.root, "detail"], detail: (id: number) => [...learningResourceKeys.detailsRoot(), id], similar: (id: number) => [...learningResourceKeys.detail(id), "similar"], - vectorSimilar: (id: number) => [ - ...learningResourceKeys.detail(id), - "vector_similar", - ], + vectorSimilar: ( + params: LearningResourcesApiLearningResourcesVectorSimilarListRequest, + ) => [...learningResourceKeys.detail(params.id), "vector_similar", params], itemsRoot: (id: number) => [...learningResourceKeys.detail(id), "items"], items: (id: number, params: ItemsListRequest) => [ ...learningResourceKeys.itemsRoot(id), @@ -174,12 +174,14 @@ const learningResourceQueries = { .learningResourcesSimilarList({ id }) .then((res) => res.data), }), - vectorSimilar: (id: number) => + vectorSimilar: ( + params: LearningResourcesApiLearningResourcesVectorSimilarListRequest, + ) => queryOptions({ - queryKey: learningResourceKeys.vectorSimilar(id), + queryKey: learningResourceKeys.vectorSimilar(params), queryFn: () => learningResourcesApi - .learningResourcesVectorSimilarList({ id }) + .learningResourcesVectorSimilarList(params) .then((res) => res.data), }), list: (params: LearningResourcesListRequest) => diff --git a/frontends/main/src/app-pages/VideoPlaylistCollectionPage/VideoCollection.tsx b/frontends/main/src/app-pages/VideoPlaylistCollectionPage/VideoCollection.tsx index b1a768ab98..db8c558a73 100644 --- a/frontends/main/src/app-pages/VideoPlaylistCollectionPage/VideoCollection.tsx +++ b/frontends/main/src/app-pages/VideoPlaylistCollectionPage/VideoCollection.tsx @@ -1,5 +1,5 @@ import React from "react" -import { Typography, styled, theme } from "ol-components" +import { styled } from "ol-components" import VideoContainer from "./VideoContainer" import type { VideoResource } from "api/v1" import { VideoCard, VideoCardSkeleton } from "./VideoCard" @@ -18,22 +18,6 @@ const StyledContainer = styled(VideoContainer)(({ theme }) => ({ borderTop: `1px solid ${theme.custom.colors.lightGray2}`, })) -const CollectionHeader = styled.div(({ theme }) => ({ - display: "flex", - justifyContent: "space-between", - alignItems: "center", - margin: "32px 0 8px 0", - [theme.breakpoints.down("sm")]: { - margin: "24px 0 0 0", - }, -})) - -const CollectionTitle = styled(Typography)({ - ...theme.typography.body1, - fontWeight: theme.typography.fontWeightMedium, - color: theme.custom.colors.black, -}) - const VideoCardList = styled.div(({ theme }) => ({ display: "flex", flexDirection: "column", @@ -61,10 +45,6 @@ const VideoCollection: React.FC = ({ return ( - - {videos.length} Videos - - {isLoading ? Array.from({ length: 4 }).map((_, i) => ( diff --git a/frontends/main/src/app-pages/VideoPlaylistCollectionPage/VideoPlaylistCollectionPage.tsx b/frontends/main/src/app-pages/VideoPlaylistCollectionPage/VideoPlaylistCollectionPage.tsx index 7855166de1..7329da8744 100644 --- a/frontends/main/src/app-pages/VideoPlaylistCollectionPage/VideoPlaylistCollectionPage.tsx +++ b/frontends/main/src/app-pages/VideoPlaylistCollectionPage/VideoPlaylistCollectionPage.tsx @@ -69,11 +69,11 @@ const VideoPlaylistCollectionPage: React.FC< ) const { data: similarData, isLoading: similarLoading } = useQuery({ - ...learningResourceQueries.vectorSimilar(playlistId), - select: (data) => - data.filter( - (resource) => resource.resource_type === ResourceTypeEnum.VideoPlaylist, - ), + ...learningResourceQueries.vectorSimilar({ + id: playlistId, + limit: 6, + resource_type: [ResourceTypeEnum.VideoPlaylist], + }), }) if (!showVideoPlaylistPage) { @@ -88,7 +88,6 @@ const VideoPlaylistCollectionPage: React.FC< (item): item is VideoResource => item.resource_type === VideoResourceResourceTypeEnum.Video, ) - const collectionVideos = videos.slice(1) const playlistType = isOcwPlaylist(playlist) const totalVideos = videos.length @@ -128,7 +127,7 @@ const VideoPlaylistCollectionPage: React.FC< ) : null} {!playlistType && ( diff --git a/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.tsx b/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.tsx index 22e7d2c075..3d08a8ee58 100644 --- a/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.tsx +++ b/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.tsx @@ -200,9 +200,9 @@ const getTabQuery = (tab: TabConfig): CarouselQuery => { tab.data.params.id, ) as CarouselQuery case "lr_vector_similar": - return learningResourceQueries.vectorSimilar( - tab.data.params.id, - ) as CarouselQuery + return learningResourceQueries.vectorSimilar({ + id: tab.data.params.id, + }) as CarouselQuery } } From 4bb4e3e7fe7b120801d0150aea15b553e44a768a Mon Sep 17 00:00:00 2001 From: Doof Date: Mon, 4 May 2026 21:17:01 +0000 Subject: [PATCH 2/2] Release 0.65.7 --- RELEASE.rst | 5 +++++ main/settings.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/RELEASE.rst b/RELEASE.rst index dae25b1c31..87aba2e1f0 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -1,6 +1,11 @@ Release Notes ============= +Version 0.65.7 +-------------- + +- filter server-side, remove video count (#3287) + Version 0.65.6 (Released May 04, 2026) -------------- diff --git a/main/settings.py b/main/settings.py index 00ec603259..96b3aa5e1a 100644 --- a/main/settings.py +++ b/main/settings.py @@ -35,7 +35,7 @@ from main.settings_pluggy import * # noqa: F403 from openapi.settings_spectacular import open_spectacular_settings -VERSION = "0.65.6" +VERSION = "0.65.7" log = logging.getLogger()