@@ -25,7 +25,11 @@ import type {
2525 WorkflowGroup ,
2626} from '@/lib/table'
2727import { getColumnId } from '@/lib/table/column-keys'
28- import { columnTypeOf } from '@/lib/table/column-types'
28+ import {
29+ collectColumnReferencedTableIds ,
30+ columnReferencedTableIds ,
31+ columnTypeOf ,
32+ } from '@/lib/table/column-types'
2933import { TABLE_LIMITS } from '@/lib/table/constants'
3034import { cellValueFilterConditions } from '@/lib/table/query-builder/cell-filter'
3135import { SEARCH_DEBOUNCE_MS } from '@/lib/url-state'
@@ -444,6 +448,14 @@ async function chunkBatchUpdates(
444448 )
445449}
446450
451+ /** The referenced row's load state, as the preview renders it. */
452+ function resolveReferencePreviewState ( query : ReturnType < typeof useReferenceRowPreview > ) {
453+ if ( query . isError ) return { status : 'error' } as const
454+ if ( query . isFetching || ! query . data ) return { status : 'loading' } as const
455+ if ( query . data . table === null ) return { status : 'missing' } as const
456+ return { status : 'ready' , table : query . data . table , row : query . data . row } as const
457+ }
458+
447459export function TableGrid ( {
448460 workspaceId : propWorkspaceId ,
449461 tableId : propTableId ,
@@ -611,23 +623,14 @@ export function TableGrid({
611623 filter : effectiveFilter ,
612624 } = useTable ( { workspaceId, tableId, queryOptions } )
613625 const referencedTableIds = useMemo (
614- ( ) =>
615- referenceColumnsEnabled
616- ? columns . flatMap ( ( column ) => {
617- const referenceTableId = columnTypeOf ( column ) . referencePreview ?. getTableId ( column )
618- return referenceTableId ? [ referenceTableId ] : [ ]
619- } )
620- : [ ] ,
626+ ( ) => ( referenceColumnsEnabled ? collectColumnReferencedTableIds ( columns ) : [ ] ) ,
621627 [ columns , referenceColumnsEnabled ]
622628 )
623629 const { data : referencedTables } = useTableNames ( workspaceId , referencedTableIds )
624- const referenceTableNames = useMemo ( ( ) => {
625- const names = new Map < string , string > ( )
626- for ( const table of referencedTables ?? [ ] ) {
627- names . set ( table . id , table . name )
628- }
629- return names
630- } , [ referencedTables ] )
630+ const referenceTableNames = useMemo (
631+ ( ) => new Map ( ( referencedTables ?? [ ] ) . map ( ( table ) => [ table . id , table . name ] ) ) ,
632+ [ referencedTables ]
633+ )
631634
632635 /** Sort is single-column, so only the first spec entry can be active. */
633636 const activeSort = queryOptions . sort ?. [ 0 ]
@@ -931,9 +934,9 @@ export function TableGrid({
931934 )
932935 const referencePreview = sourceColumn ? columnTypeOf ( sourceColumn ) . referencePreview : undefined
933936 if ( ! sourceRow || ! sourceColumn || ! referencePreview ) return null
937+ const [ referenceTableId ] = columnReferencedTableIds ( sourceColumn )
934938 return referencePreview . getRowId ( sourceRow . data [ expandedReference . sourceColumnKey ] ) ===
935- expandedReference . referenceRowId &&
936- referencePreview . getTableId ( sourceColumn ) === expandedReference . referenceTableId
939+ expandedReference . referenceRowId && referenceTableId === expandedReference . referenceTableId
937940 ? expandedReference
938941 : null
939942 } , [ displayColumns , rows , expandedReference , referenceColumnsEnabled ] )
@@ -951,17 +954,7 @@ export function TableGrid({
951954 }
952955 return names
953956 } , [ referenceTableNames , referencePreviewQuery . data ?. referenceTables ] )
954- const referencePreviewState = referencePreviewQuery . isError
955- ? ( { status : 'error' } as const )
956- : referencePreviewQuery . isFetching || ! referencePreviewQuery . data
957- ? ( { status : 'loading' } as const )
958- : referencePreviewQuery . data . table === null
959- ? ( { status : 'missing' } as const )
960- : ( {
961- status : 'ready' ,
962- table : referencePreviewQuery . data . table ,
963- row : referencePreviewQuery . data . row ,
964- } as const )
957+ const referencePreviewState = resolveReferencePreviewState ( referencePreviewQuery )
965958 const expandedSourceRowId = activeReferenceTarget ?. sourceRowId ?? null
966959
967960 const rowVirtualizer = useVirtualizer ( {
0 commit comments