Skip to content

Commit 0efa5c9

Browse files
committed
feat(customers): Filter replay playlist by person/group in feed canvases
1 parent 820a46e commit 0efa5c9

File tree

1 file changed

+44
-2
lines changed

1 file changed

+44
-2
lines changed

frontend/src/scenes/notebooks/Nodes/NotebookNodePlaylist.tsx

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ import {
1717
} from 'scenes/session-recordings/playlist/sessionRecordingsPlaylistLogic'
1818
import { urls } from 'scenes/urls'
1919

20-
import { FilterType, RecordingUniversalFilters, ReplayTabs } from '~/types'
20+
import { AnyPropertyFilter, FilterType, PropertyFilterType, RecordingUniversalFilters, ReplayTabs } from '~/types'
2121

22+
import { notebookLogic } from '../Notebook/notebookLogic'
2223
import { NotebookNodeAttributeProperties, NotebookNodeProps, NotebookNodeType } from '../types'
2324
import { notebookNodeLogic } from './notebookNodeLogic'
2425

@@ -28,11 +29,21 @@ const Component = ({
2829
}: NotebookNodeProps<NotebookNodePlaylistAttributes>): JSX.Element => {
2930
const { pinned, nodeId, universalFilters } = attributes
3031
const playerKey = `notebook-${nodeId}`
32+
const { canvasFiltersOverride } = useValues(notebookLogic)
33+
const convertedOverrides = convertCanvasFiltersOverrideToRecordingFilters(canvasFiltersOverride)
34+
35+
const filters = {
36+
...universalFilters,
37+
filter_group: {
38+
...universalFilters.filter_group,
39+
values: [...universalFilters.filter_group.values, ...convertedOverrides],
40+
},
41+
}
3142

3243
const recordingPlaylistLogicProps: SessionRecordingPlaylistLogicProps = useMemo(
3344
() => ({
3445
logicKey: playerKey,
35-
filters: universalFilters,
46+
filters,
3647
updateSearchParams: false,
3748
autoPlay: false,
3849
onFiltersChange: (newFilters) => updateAttributes({ universalFilters: newFilters }),
@@ -164,3 +175,34 @@ export function buildPlaylistContent(filters: Partial<FilterType>): JSONContent
164175
attrs: { filters },
165176
}
166177
}
178+
179+
function convertCanvasFiltersOverrideToRecordingFilters(canvasFilters: AnyPropertyFilter[]): AnyPropertyFilter[] {
180+
if (!canvasFilters.length) {
181+
return []
182+
}
183+
184+
return canvasFilters.map((filter) => {
185+
switch (filter.key) {
186+
case 'person_id':
187+
return {
188+
type: PropertyFilterType.HogQL,
189+
key: `person_id = '${filter.value}'`,
190+
value: null,
191+
}
192+
193+
case '$group_0':
194+
case '$group_1':
195+
case '$group_2':
196+
case '$group_3':
197+
case '$group_4':
198+
return {
199+
type: PropertyFilterType.HogQL,
200+
key: `properties.${filter.key} = '${filter.value}'`,
201+
value: null,
202+
}
203+
204+
default:
205+
return filter
206+
}
207+
})
208+
}

0 commit comments

Comments
 (0)