From 6232f8cdcf15e3edf79582642f579cce74bbdd78 Mon Sep 17 00:00:00 2001 From: Arthur Moreira de Deus Date: Fri, 28 Nov 2025 15:54:30 -0300 Subject: [PATCH 1/2] feat(customers): Filter replay playlist by personUUID in person feed canvas --- .../scenes/notebooks/Nodes/NotebookNodePlaylist.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx index 57862e81524f9..ef4580758f62c 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx @@ -17,8 +17,9 @@ import { } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' import { urls } from 'scenes/urls' -import { FilterType, RecordingUniversalFilters, ReplayTabs } from '~/types' +import { AnyPropertyFilter, FilterType, RecordingUniversalFilters, ReplayTabs } from '~/types' +import { notebookLogic } from '../Notebook/notebookLogic' import { NotebookNodeAttributeProperties, NotebookNodeProps, NotebookNodeType } from '../types' import { notebookNodeLogic } from './notebookNodeLogic' @@ -28,11 +29,14 @@ const Component = ({ }: NotebookNodeProps): JSX.Element => { const { pinned, nodeId, universalFilters } = attributes const playerKey = `notebook-${nodeId}` + const { canvasFiltersOverride } = useValues(notebookLogic) + const personUUID = getPersonUUIDFromOverride(canvasFiltersOverride) const recordingPlaylistLogicProps: SessionRecordingPlaylistLogicProps = useMemo( () => ({ logicKey: playerKey, filters: universalFilters, + ...(personUUID ? { personUUID } : {}), updateSearchParams: false, autoPlay: false, onFiltersChange: (newFilters) => updateAttributes({ universalFilters: newFilters }), @@ -164,3 +168,10 @@ export function buildPlaylistContent(filters: Partial): JSONContent attrs: { filters }, } } + +function getPersonUUIDFromOverride(override: AnyPropertyFilter[] | null): string | null { + if (!override || override.length === 0) { + return null + } + return override.find((filter) => filter.key === 'person_id')?.value as string +} From ba3f42d5721e0cb06bc6826c71673d6ae3b95f95 Mon Sep 17 00:00:00 2001 From: Arthur Moreira de Deus Date: Wed, 3 Dec 2025 19:08:28 -0300 Subject: [PATCH 2/2] chore: Move logic to logic file --- .../notebooks/Nodes/NotebookNodePlaylist.tsx | 14 +++----------- .../src/scenes/notebooks/Notebook/notebookLogic.ts | 11 +++++++++++ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx b/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx index ef4580758f62c..bbd08bb87152c 100644 --- a/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx +++ b/frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx @@ -17,7 +17,7 @@ import { } from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic' import { urls } from 'scenes/urls' -import { AnyPropertyFilter, FilterType, RecordingUniversalFilters, ReplayTabs } from '~/types' +import { FilterType, RecordingUniversalFilters, ReplayTabs } from '~/types' import { notebookLogic } from '../Notebook/notebookLogic' import { NotebookNodeAttributeProperties, NotebookNodeProps, NotebookNodeType } from '../types' @@ -29,14 +29,13 @@ const Component = ({ }: NotebookNodeProps): JSX.Element => { const { pinned, nodeId, universalFilters } = attributes const playerKey = `notebook-${nodeId}` - const { canvasFiltersOverride } = useValues(notebookLogic) - const personUUID = getPersonUUIDFromOverride(canvasFiltersOverride) + const { personUUIDFromCanvasOverride } = useValues(notebookLogic) const recordingPlaylistLogicProps: SessionRecordingPlaylistLogicProps = useMemo( () => ({ logicKey: playerKey, filters: universalFilters, - ...(personUUID ? { personUUID } : {}), + ...(personUUIDFromCanvasOverride ? { personUUID: personUUIDFromCanvasOverride } : {}), updateSearchParams: false, autoPlay: false, onFiltersChange: (newFilters) => updateAttributes({ universalFilters: newFilters }), @@ -168,10 +167,3 @@ export function buildPlaylistContent(filters: Partial): JSONContent attrs: { filters }, } } - -function getPersonUUIDFromOverride(override: AnyPropertyFilter[] | null): string | null { - if (!override || override.length === 0) { - return null - } - return override.find((filter) => filter.key === 'person_id')?.value as string -} diff --git a/frontend/src/scenes/notebooks/Notebook/notebookLogic.ts b/frontend/src/scenes/notebooks/Notebook/notebookLogic.ts index 2424d3f137076..e12b723953e79 100644 --- a/frontend/src/scenes/notebooks/Notebook/notebookLogic.ts +++ b/frontend/src/scenes/notebooks/Notebook/notebookLogic.ts @@ -503,6 +503,17 @@ export const notebookLogic = kea([ return insightNodes?.map((node) => node?.attrs?.query?.shortId) }, ], + + personUUIDFromCanvasOverride: [ + () => [(_, props) => props], + (props: NotebookLogicProps): string | null => { + if (!props.canvasFiltersOverride || props.canvasFiltersOverride.length === 0) { + return null + } + return props.canvasFiltersOverride.find((filter: AnyPropertyFilter) => filter.key === 'person_id') + ?.value as string + }, + ], }), listeners(({ values, actions, cache }) => ({ insertAfterLastNode: async ({ content }) => {