diff --git a/client/src/mobile/components/MSegmented.tsx b/client/src/mobile/components/MSegmented.tsx index 470128a4e..d89aa60f1 100644 --- a/client/src/mobile/components/MSegmented.tsx +++ b/client/src/mobile/components/MSegmented.tsx @@ -1,4 +1,5 @@ -import { ReactNode, useLayoutEffect, useRef, useState } from 'react' +import { ReactNode, useRef } from 'react' +import { useActivePill } from './useActivePill' export interface MSegmentedOption { value: T @@ -26,19 +27,9 @@ export default function MSegmented({ className = '', }: MSegmentedProps) { const trackRef = useRef(null) - const [indicator, setIndicator] = useState<{ left: number; width: number } | null>(null) + const pill = useActivePill(trackRef, '[data-active="true"]', [value, options.length]) - useLayoutEffect(() => { - const track = trackRef.current - if (!track) return - const measure = () => { - const active = track.querySelector('[data-active="true"]') - if (active) setIndicator({ left: active.offsetLeft, width: active.offsetWidth }) - } - measure() - const ro = new ResizeObserver(measure) - ro.observe(track) - return () => ro.disconnect() + return () => ro.disconnect() }, [value, options.length]) return ( @@ -47,12 +38,7 @@ export default function MSegmented({ role="tablist" className={`relative flex rounded-full bg-[color:var(--m-ic)] p-[3px] ${className}`} > - {indicator && ( -
- )} + {pill &&