Fix toggle button toggling
Just use isSelected directly rather than makking the button have its own state. Also, the isPressed from useToggleButton looks like its whether the user has the mouse button down on it or not rather than whether the toggle switch is on, which was making the state wrong.
This commit is contained in:
parent
363f2340a0
commit
48a008093b
1 changed files with 8 additions and 7 deletions
|
@ -1,20 +1,21 @@
|
|||
import React, { useRef } from "react";
|
||||
import React, { useCallback, useRef } from "react";
|
||||
import styles from "./Toggle.module.css";
|
||||
import { useToggleButton } from "@react-aria/button";
|
||||
import { useToggleState } from "@react-stately/toggle";
|
||||
import classNames from "classnames";
|
||||
import { Field } from "./Input";
|
||||
|
||||
export function Toggle({ id, label, className, ...rest }) {
|
||||
export function Toggle({ id, label, className, onChange, isSelected }) {
|
||||
const buttonRef = useRef();
|
||||
const state = useToggleState(rest);
|
||||
const { buttonProps, isPressed } = useToggleButton(rest, state, buttonRef);
|
||||
const toggle = useCallback(() => {
|
||||
onChange(!isSelected);
|
||||
});
|
||||
const { buttonProps } = useToggleButton({ isSelected }, { toggle }, buttonRef);
|
||||
|
||||
return (
|
||||
<Field
|
||||
className={classNames(
|
||||
styles.toggle,
|
||||
{ [styles.on]: isPressed },
|
||||
{ [styles.on]: isSelected },
|
||||
className
|
||||
)}
|
||||
>
|
||||
|
@ -23,7 +24,7 @@ export function Toggle({ id, label, className, ...rest }) {
|
|||
ref={buttonRef}
|
||||
id={id}
|
||||
className={classNames(styles.button, {
|
||||
[styles.isPressed]: isPressed,
|
||||
[styles.isPressed]: isSelected,
|
||||
})}
|
||||
>
|
||||
<div className={styles.ball} />
|
||||
|
|
Loading…
Reference in a new issue