@@ -7,6 +7,7 @@ import React, {useCallback, useMemo} from 'react';
77import { Button , EmptyIndicator , LoadingIndicator , LucideIcon , createFilter } from '@tryghost/shade' ;
88import { escapeNqlString } from '../filters/filter-normalization' ;
99import { getSiteTimezone } from '@src/utils/get-site-timezone' ;
10+ import { serializeCommentFilters } from './comment-filter-query' ;
1011import { shouldDelayCommentDateFilterHydration , useFilterState } from './hooks/use-filter-state' ;
1112import { useBrowseComments } from '@tryghost/admin-x-framework/api/comments' ;
1213import { useBrowseSettings } from '@tryghost/admin-x-framework/api/settings' ;
@@ -23,14 +24,32 @@ const CommentsPage: React.FC<{timezone: string; singleCommentId?: string}> = ({
2324 timezone,
2425 singleCommentId
2526} ) => {
26- const [ , setSearchParams ] = useSearchParams ( ) ;
27+ const [ searchParams , setSearchParams ] = useSearchParams ( ) ;
2728 const { filters, nql, setFilters} = useFilterState ( timezone ) ;
29+ const threadParam = searchParams . get ( 'thread' ) ?? undefined ;
2830 const handleAddFilter = useCallback ( ( field : string , value : string , operator : string = 'is' ) => {
29- setFilters ( ( prevFilters ) => {
30- const filtered = prevFilters . filter ( f => f . field !== field ) ;
31- return [ ...filtered , createFilter ( field , operator , [ value ] ) ] ;
32- } , { replace : false } ) ;
33- } , [ setFilters ] ) ;
31+ const nextFilters = [
32+ ...filters . filter ( filter => filter . field !== field ) ,
33+ createFilter ( field , operator , [ value ] )
34+ ] ;
35+
36+ if ( ! singleCommentId ) {
37+ setFilters ( nextFilters , { replace : false } ) ;
38+ return ;
39+ }
40+
41+ const nextSearchParams = new URLSearchParams ( searchParams ) ;
42+ const nextNql = serializeCommentFilters ( nextFilters , timezone ) ;
43+
44+ nextSearchParams . delete ( 'id' ) ;
45+ nextSearchParams . delete ( 'filter' ) ;
46+
47+ if ( nextNql ) {
48+ nextSearchParams . set ( 'filter' , nextNql ) ;
49+ }
50+
51+ setSearchParams ( nextSearchParams , { replace : false } ) ;
52+ } , [ filters , searchParams , setFilters , setSearchParams , singleCommentId , timezone ] ) ;
3453 const effectiveFilter = useMemo ( ( ) => {
3554 if ( singleCommentId ) {
3655 return `id:${ escapeNqlString ( singleCommentId ) } ` ;
@@ -52,7 +71,10 @@ const CommentsPage: React.FC<{timezone: string; singleCommentId?: string}> = ({
5271 fetchNextPage,
5372 hasNextPage
5473 } = useBrowseComments ( {
55- searchParams : effectiveFilter ? { filter : effectiveFilter } : { } ,
74+ searchParams : {
75+ ...( threadParam && ! singleCommentId ? { thread : threadParam } : { } ) ,
76+ ...( effectiveFilter ? { filter : effectiveFilter } : { } )
77+ } ,
5678 keepPreviousData : true
5779 } ) ;
5880 const shouldShowLoading = isFetching && ! isFetchingNextPage && ! isRefetching ;
0 commit comments