Skip to content

Commit 3276f6d

Browse files
authored
Fix tooltips on table and reset buttons (#1666)
2 parents 4f1fd82 + db59537 commit 3276f6d

File tree

3 files changed

+80
-49
lines changed

3 files changed

+80
-49
lines changed

gui/src/components/Toolbar.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ function BasicResetButton(options: UseResetOptions & { customName?: string }) {
8585
spacing={5}
8686
preferedDirection={error ? 'bottom' : 'top'}
8787
>
88-
<div
88+
<button
89+
type="button"
90+
disabled={disabled}
8991
className={classNames(
9092
MAINBUTTON_CLASSES({ disabled }),
9193
'rounded-lg',
@@ -135,7 +137,7 @@ function BasicResetButton(options: UseResetOptions & { customName?: string }) {
135137
{timer}
136138
</Typography>
137139
</div>
138-
</div>
140+
</button>
139141
</Tooltip>
140142
);
141143
}

gui/src/components/commons/Tooltip.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ interface TooltipProps {
2424
disabled?: boolean;
2525
tag?: string;
2626
spacing?: number;
27+
bindTo?: string;
2728
}
2829

2930
interface TooltipPos {
@@ -468,11 +469,16 @@ export function Tooltip({
468469
variant = 'auto',
469470
disabled = false,
470471
tag = 'div',
472+
bindTo,
471473
spacing = 10,
472474
}: TooltipProps) {
473475
const childRef = useRef<HTMLElement | null>(null);
474476
const isAndroid = window.__ANDROID__?.isThere();
475477

478+
if (bindTo) {
479+
childRef.current = document.querySelector(bindTo);
480+
}
481+
476482
let portal = null;
477483
if (variant === 'auto') {
478484
portal = isAndroid ? (
@@ -508,7 +514,13 @@ export function Tooltip({
508514

509515
return (
510516
<>
511-
{createElement(tag, { className: 'contents', ref: childRef }, children)}
517+
{bindTo
518+
? children
519+
: createElement(
520+
tag,
521+
{ className: 'contents', ref: childRef },
522+
children
523+
)}
512524
{!disabled && createPortal(portal, document.body)}
513525
</>
514526
);

gui/src/components/tracker/TrackersTable.tsx

Lines changed: 63 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ export function TrackerRotCell({
104104

105105
function 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

Comments
 (0)