@@ -104,7 +104,6 @@ export function TrackerRotCell({
104104
105105function Header ( {
106106 name,
107- className,
108107 first = false ,
109108 last = false ,
110109 show = true ,
@@ -116,17 +115,15 @@ function Header({
116115 show ?: boolean ;
117116} ) {
118117 return (
119- < th
120- className = { classNames ( 'text-start px-2' , {
118+ < div
119+ className = { classNames ( 'text-start px-2 flex items-center ' , {
121120 hidden : ! show ,
122121 'pl-4' : first ,
123122 'pr-4' : last ,
124123 } ) }
125124 >
126- < div className = { className } >
127- < Typography id = { name } whitespace = "whitespace-nowrap" />
128- </ div >
129- </ th >
125+ < Typography id = { name } whitespace = "whitespace-nowrap" />
126+ </ div >
130127 ) ;
131128}
132129
@@ -147,7 +144,9 @@ function Cell({
147144 const velocity = useVelocity ( ) ;
148145
149146 return (
150- < td className = { classNames ( 'py-2 group overflow-hidden' , { hidden : ! show } ) } >
147+ < div
148+ className = { classNames ( 'py-2 group overflow-hidden' , { hidden : ! show } ) }
149+ >
151150 < div
152151 style = { {
153152 boxShadow : `0px 0px ${ Math . floor ( velocity * 8 ) } px ${ Math . floor (
@@ -161,7 +160,7 @@ function Cell({
161160 >
162161 { children }
163162 </ div >
164- </ td >
163+ </ div >
165164 ) ;
166165}
167166
@@ -171,10 +170,12 @@ function Row({
171170 data,
172171 highlightedTrackers,
173172 clickedTracker,
173+ gridTemplateColumns,
174174} : {
175175 data : FlatDeviceTracker ;
176176 highlightedTrackers : highlightedTrackers | undefined ;
177177 clickedTracker : ( tracker : TrackerDataT ) => void ;
178+ gridTemplateColumns : string ;
178179} ) {
179180 const { config } = useConfig ( ) ;
180181 const fontColor = config ?. devSettings ?. highContrast ? 'primary' : 'secondary' ;
@@ -191,6 +192,11 @@ function Row({
191192
192193 return (
193194 < TrackerRowProvider . Provider value = { data } >
195+ < div className = "relative z-10" >
196+ < div className = "absolute top-2 left-5" >
197+ < FirmwareIcon tracker = { tracker } device = { device } />
198+ </ div >
199+ </ div >
194200 < Tooltip
195201 disabled = { ! warning }
196202 preferedDirection = "top"
@@ -202,16 +208,14 @@ function Row({
202208 </ div >
203209 )
204210 }
205- tag = "tr"
206211 spacing = { - 5 }
207212 >
208213 < >
209- < div className = "relative z-10" >
210- < div className = "absolute top-2 left-5" >
211- < FirmwareIcon tracker = { tracker } device = { device } />
212- </ div >
213- </ div >
214- < tr className = "group" onClick = { ( ) => clickedTracker ( tracker ) } >
214+ < div
215+ className = "group grid items-center"
216+ style = { { gridTemplateColumns } }
217+ onClick = { ( ) => clickedTracker ( tracker ) }
218+ >
215219 < Cell first >
216220 < TrackerNameCell tracker = { tracker } warning = { warning } />
217221 </ Cell >
@@ -287,7 +291,7 @@ function Row({
287291 ) . toString ( ) }
288292 </ Typography >
289293 </ Cell >
290- </ tr >
294+ </ div >
291295 </ >
292296 </ Tooltip >
293297 </ TrackerRowProvider . Provider >
@@ -307,7 +311,7 @@ export function TrackersTable({
307311 const filteringEnabled =
308312 config ?. debug && config ?. devSettings ?. filterSlimesAndHMD ;
309313 const sortingEnabled = config ?. debug && config ?. devSettings ?. sortByName ;
310- // TODO: fix memo
314+
311315 const filteredSortedTrackers = useMemo ( ( ) => {
312316 const list = filteringEnabled
313317 ? flatTrackers . filter ( ( t ) => isHMD ( t ) || isSlime ( t ) )
@@ -321,49 +325,62 @@ export function TrackersTable({
321325
322326 const moreInfo = config ?. devSettings ?. moreInfo ;
323327
328+ const gridTemplateColumns = useMemo ( ( ) => {
329+ const cols = [
330+ 'minmax(150px, 1.5fr)' , // Name
331+ 'minmax(100px, 1fr)' , // Type
332+ 'minmax(60px, 1fr)' , // Battery
333+ '6rem' , // Ping (w-24)
334+ 'minmax(60px, 1fr)' , // TPS
335+ config ?. devSettings ?. preciseRotation ? '11rem' : '8rem' , // Rotation
336+ 'minmax(60px, 1fr)' , // Temp
337+ ] ;
338+
339+ if ( moreInfo ) {
340+ cols . push ( '9rem' ) ; // Linear Acc
341+ cols . push ( '9rem' ) ; // Position
342+ cols . push ( '9rem' ) ; // Stay Aligned
343+ cols . push ( 'minmax(150px, 1fr)' ) ; // URL
344+ }
345+
346+ return cols . join ( ' ' ) ;
347+ } , [ config ?. devSettings ?. preciseRotation , moreInfo ] ) ;
348+
324349 return (
325350 < div className = "w-full overflow-x-auto py-2 px-2" >
326- < table className = "w-full" cellPadding = { 0 } cellSpacing = { 0 } >
327- < tr >
351+ < div className = "min-w-fit" >
352+ < div className = "grid items-center mb-1" style = { { gridTemplateColumns } } >
328353 < Header name = { 'tracker-table-column-name' } first />
329354 < Header name = { 'tracker-table-column-type' } />
330355 < Header name = { 'tracker-table-column-battery' } />
331- < Header name = { 'tracker-table-column-ping' } className = "w-24" />
356+ < Header name = { 'tracker-table-column-ping' } />
332357 < Header name = { 'tracker-table-column-tps' } />
333- < Header
334- name = { 'tracker-table-column-rotation' }
335- className = { classNames ( {
336- 'w-44' : config ?. devSettings ?. preciseRotation ,
337- 'w-32' : ! config ?. devSettings ?. preciseRotation ,
338- } ) }
339- />
358+ < Header name = { 'tracker-table-column-rotation' } />
340359 < Header name = { 'tracker-table-column-temperature' } last = { ! moreInfo } />
341360 < Header
342361 name = { 'tracker-table-column-linear-acceleration' }
343- className = "w-36"
344362 show = { moreInfo }
345363 />
364+ < Header name = { 'tracker-table-column-position' } show = { moreInfo } />
365+ < Header name = { 'tracker-table-column-stay_aligned' } show = { moreInfo } />
346366 < Header
347- name = { 'tracker-table-column-position' }
348- className = "w-36"
349- show = { moreInfo }
350- />
351- < Header
352- name = { 'tracker-table-column-stay_aligned' }
353- className = "w-36"
367+ name = { 'tracker-table-column-url' }
354368 show = { moreInfo }
355369 last = { moreInfo }
356370 />
357- < Header name = { 'tracker-table-column-url' } show = { moreInfo } />
358- </ tr >
359- { filteredSortedTrackers . map ( ( data ) => (
360- < Row
361- clickedTracker = { clickedTracker }
362- data = { data }
363- highlightedTrackers = { highlightedTrackers }
364- />
365- ) ) }
366- </ table >
371+ </ div >
372+ < div className = "flex flex-col gap-y-0" >
373+ { filteredSortedTrackers . map ( ( data ) => (
374+ < Row
375+ key = { data . tracker . trackerId ?. trackerNum }
376+ clickedTracker = { clickedTracker }
377+ data = { data }
378+ highlightedTrackers = { highlightedTrackers }
379+ gridTemplateColumns = { gridTemplateColumns }
380+ />
381+ ) ) }
382+ </ div >
383+ </ div >
367384 </ div >
368385 ) ;
369386}
0 commit comments