1- import { MagnifyingGlassIcon , XIcon } from '@phosphor-icons/react' ;
1+ import { XIcon } from '@phosphor-icons/react' ;
22import {
33 type ColumnDef ,
44 getCoreRowModel ,
5- getFilteredRowModel ,
6- getSortedRowModel ,
7- type SortingState ,
85 useReactTable ,
96} from '@tanstack/react-table' ;
10- import { useMemo , useState } from 'react' ;
11- import { Input } from '@/components/ui/input' ;
127import { TableContent } from './table-content' ;
138import { TableTabs } from './table-tabs' ;
149
@@ -39,8 +34,6 @@ interface FullScreenModalProps<TData extends { name: string | number }> {
3934 onAddFilter ?: ( field : string , value : string , tableTitle ?: string ) => void ;
4035 onRowAction ?: ( row : TData ) => void ;
4136 onRowClick ?: ( field : string , value : string | number ) => void ;
42- searchValue ?: string ;
43- onSearchChange ?: ( value : string ) => void ;
4437}
4538
4639export function FullScreenModal < TData extends { name : string | number } > ( {
@@ -52,66 +45,27 @@ export function FullScreenModal<TData extends { name: string | number }>({
5245 tabs,
5346 activeTab,
5447 onTabChange,
55- searchValue,
56- onSearchChange,
5748 expandable = false ,
5849 getSubRows,
5950 renderSubRow,
6051 onAddFilter,
6152 onRowAction,
6253 onRowClick,
6354} : FullScreenModalProps < TData > ) {
64- const [ sorting , setSorting ] = useState < SortingState > ( [ ] ) ;
65- const [ globalFilter , setGlobalFilter ] = useState ( searchValue || '' ) ;
66-
67- // Update global filter when searchValue prop changes
68- useMemo ( ( ) => {
69- setGlobalFilter ( searchValue || '' ) ;
70- } , [ searchValue ] ) ;
7155
7256 const currentTabData = tabs ?. find ( ( tab ) => tab . id === activeTab ) ;
73- const tableData = useMemo (
74- ( ) => currentTabData ?. data || data || [ ] ,
75- [ currentTabData ?. data , data ]
76- ) ;
77- const tableColumns = useMemo (
78- ( ) => currentTabData ?. columns || columns || [ ] ,
79- [ currentTabData ?. columns , columns ]
80- ) ;
57+ const tableData = currentTabData ?. data || data || [ ] ;
58+ const tableColumns = currentTabData ?. columns || columns || [ ] ;
8159
8260 const table = useReactTable ( {
8361 data : tableData ,
8462 columns : tableColumns ,
85- enableSorting : true ,
86- getRowId : ( row , index ) => {
87- if ( ( row as any ) . _uniqueKey ) {
88- return ( row as any ) . _uniqueKey ;
89- }
90- return activeTab ? `${ activeTab } -${ index } ` : `row-${ index } ` ;
91- } ,
92- state : {
93- sorting,
94- globalFilter,
95- } ,
96- onSortingChange : setSorting ,
97- onGlobalFilterChange : ( value ) => {
98- setGlobalFilter ( value ) ;
99- onSearchChange ?.( value ) ;
100- } ,
63+ getRowId : ( _row , index ) => `${ activeTab || 'row' } -${ index } ` ,
10164 getCoreRowModel : getCoreRowModel ( ) ,
102- getFilteredRowModel : getFilteredRowModel ( ) ,
103- getSortedRowModel : getSortedRowModel ( ) ,
104- globalFilterFn : 'includesString' ,
10565 } ) ;
10666
10767 const handleTabChange = ( tabId : string ) => {
108- if ( tabId === activeTab ) {
109- return ;
110- }
111-
112- setSorting ( [ ] ) ;
113- setGlobalFilter ( '' ) ;
114- onSearchChange ?.( '' ) ;
68+ if ( tabId === activeTab ) return ;
11569 onTabChange ?.( tabId ) ;
11670 } ;
11771 return (
@@ -130,21 +84,6 @@ export function FullScreenModal<TData extends { name: string | number }>({
13084 ) }
13185 </ div >
13286 < div className = "flex items-center gap-2" >
133- { onSearchChange && (
134- < div className = "relative" >
135- < MagnifyingGlassIcon className = "-translate-y-1/2 absolute top-1/2 left-2.5 h-4 w-4 text-muted-foreground" />
136- < Input
137- className = "h-8 w-64 pl-8 text-sm"
138- onChange = { ( e ) => {
139- setGlobalFilter ( e . target . value ) ;
140- onSearchChange ( e . target . value ) ;
141- } }
142- placeholder = "Search..."
143- type = "search"
144- value = { globalFilter }
145- />
146- </ div >
147- ) }
14887 < button
14988 aria-label = "Close full screen"
15089 className = "ml-2 flex items-center justify-center rounded bg-sidebar-accent/60 p-2 text-sidebar-foreground transition-colors hover:bg-sidebar-accent"
@@ -162,7 +101,7 @@ export function FullScreenModal<TData extends { name: string | number }>({
162101 { tabs && tabs . length > 1 && (
163102 < div className = "mt-2" >
164103 < TableTabs
165- activeTab = { activeTab || '' }
104+ activeTab = { activeTab ?? '' }
166105 onTabChange = { handleTabChange }
167106 tabs = { tabs }
168107 />
0 commit comments