All files / react-classic/src/components Radio.tsx

100% Statements 28/28
100% Branches 6/6
100% Functions 2/2
100% Lines 28/28

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37  1x     1x   1x 8x 8x 8x 8x 8x 8x 8x 8x 8x   8x   8x 8x 8x 8x 8x 8x 8x 3x 2x 2x   3x 3x 8x 8x   8x  
import type { Bindable } from '../index.js';
import { debugRender, useValue } from '../index.js';
import type { WritableKeys } from '@anchorlib/core';
import type { InputProps } from './Types.js';
import { useRef } from 'react';
 
export function Radio<T extends Bindable, K extends WritableKeys<T>>({
  ref,
  bind,
  name,
  checked,
  onChange,
  ...props
}: InputProps<T, K>) {
  const selfRef = useRef<HTMLInputElement>(null);
  debugRender(ref ?? selfRef);
 
  const current = (useValue(bind, name) ?? checked ?? false) as boolean;
 
  return (
    <input
      ref={ref ?? selfRef}
      type="radio"
      name={name as string}
      checked={current}
      onChange={(e) => {
        if (bind) {
          bind[name] = e.target.checked as T[K];
        }
 
        onChange?.(e);
      }}
      {...props}
    />
  );
}