From ccccce2be161caa317f3fd85f3811a737f7fe1eb Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Fri, 29 Nov 2024 12:22:20 +0200 Subject: [PATCH] refactor: checkbox component --- src/common/Checkbox/Checkbox.tsx | 52 ++++++------------- src/routes/Settings/URLsManager/Item/Item.tsx | 2 +- 2 files changed, 18 insertions(+), 36 deletions(-) diff --git a/src/common/Checkbox/Checkbox.tsx b/src/common/Checkbox/Checkbox.tsx index 0b11c93b2..770654837 100644 --- a/src/common/Checkbox/Checkbox.tsx +++ b/src/common/Checkbox/Checkbox.tsx @@ -1,65 +1,47 @@ // Copyright (C) 2017-2024 Smart code 203358507 -import React, { useState, useEffect, useCallback, DetailedHTMLProps, HTMLAttributes } from 'react'; +import React, { useCallback, DetailedHTMLProps, HTMLAttributes, ChangeEvent } from 'react'; import classNames from 'classnames'; import styles from './Checkbox.less'; import Icon from '@stremio/stremio-icons/react'; type Props = { disabled?: boolean; - value?: boolean; + checked?: boolean; className?: string; onChange?: (checked: boolean) => void; ariaLabel?: string; error?: string; }; -const Checkbox = ({ disabled, value, className, onChange, ariaLabel, error }: Props) => { - const [isChecked, setIsChecked] = useState(false); - const [isError, setIsError] = useState(false); - const [isDisabled, setIsDisabled] = useState(disabled); +const Checkbox = ({ disabled, checked, className, onChange, ariaLabel, error }: Props) => { - const handleChangeCheckbox = useCallback(() => { - if (disabled) { - return; + const handleChangeCheckbox = useCallback(({ target }: ChangeEvent) => { + onChange && onChange(target.checked); + }, [onChange]); + + const onKeyDown = useCallback(({ key }: DetailedHTMLProps, HTMLDivElement>) => { + if ((key === 'Enter' || key === ' ') && !disabled) { + onChange && onChange(!checked); } - - setIsChecked(!isChecked); - onChange && onChange(!isChecked); - }, [disabled]); - - const handleEnterPress = useCallback((event: DetailedHTMLProps, HTMLDivElement>) => { - if ((event.key === 'Enter' || event.key === ' ') && !disabled) { - setIsChecked(!isChecked); - onChange && onChange(!isChecked); - } - }, [disabled]); - - useEffect(() => setIsDisabled(disabled), [disabled]); - - useEffect(() => setIsError(!!error), [error]); - - useEffect(() => { - const checked = typeof value === 'boolean' ? value : false; - setIsChecked(checked); - }, [value]); + }, [disabled, checked, onChange]); return (