@@ -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 { isEmptyCellValue } from '@/lib/table/deps'
3135import { cellValueFilterConditions } from '@/lib/table/query-builder/cell-filter'
@@ -45,6 +49,7 @@ import type { RemoteTableSelection } from '@/app/workspace/[workspaceId]/tables/
4549import type { BlockedTableAction } from '@/app/workspace/[workspaceId]/tables/[tableId]/lock-copy'
4650import { LOCK_TOOLTIPS } from '@/app/workspace/[workspaceId]/tables/[tableId]/lock-copy'
4751import { useTimezoneState } from '@/hooks/queries/general-settings'
52+ import { useReferenceRowPreview } from '@/hooks/queries/table-reference-preview'
4853import {
4954 useAddTableColumn ,
5055 useBatchCreateTableRows ,
@@ -53,7 +58,6 @@ import {
5358 useDeleteColumn ,
5459 useDeleteWorkflowGroup ,
5560 useFindTableRows ,
56- useReferenceRowPreview ,
5761 useTableNames ,
5862 useTableRunState ,
5963 useUpdateColumn ,
@@ -457,6 +461,14 @@ async function chunkBatchUpdates(
457461 )
458462}
459463
464+ /** The referenced row's load state, as the preview renders it. */
465+ function resolveReferencePreviewState ( query : ReturnType < typeof useReferenceRowPreview > ) {
466+ if ( query . isError ) return { status : 'error' } as const
467+ if ( query . isFetching || ! query . data ) return { status : 'loading' } as const
468+ if ( query . data . table === null ) return { status : 'missing' } as const
469+ return { status : 'ready' , table : query . data . table , row : query . data . row } as const
470+ }
471+
460472export function TableGrid ( {
461473 workspaceId : propWorkspaceId ,
462474 tableId : propTableId ,
@@ -625,23 +637,14 @@ export function TableGrid({
625637 filter : effectiveFilter ,
626638 } = useTable ( { workspaceId, tableId, queryOptions } )
627639 const referencedTableIds = useMemo (
628- ( ) =>
629- referenceColumnsEnabled
630- ? columns . flatMap ( ( column ) => {
631- const referenceTableId = columnTypeOf ( column ) . referencePreview ?. getTableId ( column )
632- return referenceTableId ? [ referenceTableId ] : [ ]
633- } )
634- : [ ] ,
640+ ( ) => ( referenceColumnsEnabled ? collectColumnReferencedTableIds ( columns ) : [ ] ) ,
635641 [ columns , referenceColumnsEnabled ]
636642 )
637643 const { data : referencedTables } = useTableNames ( workspaceId , referencedTableIds )
638- const referenceTableNames = useMemo ( ( ) => {
639- const names = new Map < string , string > ( )
640- for ( const table of referencedTables ?? [ ] ) {
641- names . set ( table . id , table . name )
642- }
643- return names
644- } , [ referencedTables ] )
644+ const referenceTableNames = useMemo (
645+ ( ) => new Map ( ( referencedTables ?? [ ] ) . map ( ( table ) => [ table . id , table . name ] ) ) ,
646+ [ referencedTables ]
647+ )
645648
646649 /** Sort is single-column, so only the first spec entry can be active. */
647650 const activeSort = queryOptions . sort ?. [ 0 ]
@@ -946,9 +949,9 @@ export function TableGrid({
946949 )
947950 const referencePreview = sourceColumn ? columnTypeOf ( sourceColumn ) . referencePreview : undefined
948951 if ( ! sourceRow || ! sourceColumn || ! referencePreview ) return null
952+ const [ referenceTableId ] = columnReferencedTableIds ( sourceColumn )
949953 return referencePreview . getRowId ( sourceRow . data [ expandedReference . sourceColumnKey ] ) ===
950- expandedReference . referenceRowId &&
951- referencePreview . getTableId ( sourceColumn ) === expandedReference . referenceTableId
954+ expandedReference . referenceRowId && referenceTableId === expandedReference . referenceTableId
952955 ? expandedReference
953956 : null
954957 } , [ displayColumns , rows , expandedReference , referenceColumnsEnabled ] )
@@ -966,17 +969,7 @@ export function TableGrid({
966969 }
967970 return names
968971 } , [ referenceTableNames , referencePreviewQuery . data ?. referenceTables ] )
969- const referencePreviewState = referencePreviewQuery . isError
970- ? ( { status : 'error' } as const )
971- : referencePreviewQuery . isFetching || ! referencePreviewQuery . data
972- ? ( { status : 'loading' } as const )
973- : referencePreviewQuery . data . table === null
974- ? ( { status : 'missing' } as const )
975- : ( {
976- status : 'ready' ,
977- table : referencePreviewQuery . data . table ,
978- row : referencePreviewQuery . data . row ,
979- } as const )
972+ const referencePreviewState = resolveReferencePreviewState ( referencePreviewQuery )
980973 const expandedSourceRowId = activeReferenceTarget ?. sourceRowId ?? null
981974
982975 const rowVirtualizer = useVirtualizer ( {
0 commit comments