Skip to content

Commit

Permalink
Merge pull request #77 from deriv-com/aizad/FEQ-1734/checkbox-input-fix
Browse files Browse the repository at this point in the history
Aizad/FEQ-1734/Fix Checkbox Issue
  • Loading branch information
shayan-deriv authored Feb 15, 2024
2 parents 72c7e5f + b4625ac commit 0bc7499
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 49 deletions.
62 changes: 34 additions & 28 deletions lib/components/Checkbox/Checkbox.scss
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,43 @@ $border_color: #999999;
$brand_color: #ff444f;
$error_color: #ec3f3f;

.deriv-checkbox__wrapper {
.deriv-checkbox {
display: inline-flex;
position: relative;
align-items: center;
gap: 8px;
width: 100%;
}

.deriv-checkbox {
width: 16px;
height: 16px;
border-radius: $border_radius;
transition: background-color 0.3s ease-in-out;
box-sizing: border-box;

&--unchecked {
background: transparent;
border: $border $border_color;
}

&--checked {
border: none;
background-color: $brand_color;
background-image: url("./checkbox-icon.svg");
background-position: center;
background-repeat: no-repeat;
&__wrapper {
align-self: first baseline;
min-width: 16px;
height: 16px;
border-radius: $border_radius;
transition: background-color 0.3s ease-in-out;
box-sizing: border-box;
}

&--disabled {
opacity: 0.5;
&__box {
width: 100%;
height: 100%;

&--unchecked {
background: transparent;
border: $border $border_color;
}

&--checked {
border: none;
background-color: $brand_color;
background-image: url("./checkbox-icon.svg");
background-position: center;
background-repeat: no-repeat;
border-radius: $border_radius;
}

&--disabled {
opacity: 0.5;
}
}

&__label {
Expand All @@ -50,14 +56,14 @@ $error_color: #ec3f3f;
}
}

.deriv-checkbox:not(:disabled),
.deriv-checkbox:not(:disabled) + .deriv-checkbox__wrapper,
.deriv-checkbox:not(:disabled) ~ .deriv-checkbox__label {
.deriv-checkbox__box:not(:disabled),
.deriv-checkbox__box:not(:disabled) + .deriv-checkbox__wrapper,
.deriv-checkbox__box:not(:disabled) ~ .deriv-checkbox__label {
cursor: pointer;
}

.deriv-checkbox:disabled,
.deriv-checkbox:disabled + .deriv-checkbox__wrapper,
.deriv-checkbox--disabled ~ .deriv-checkbox__label {
.deriv-checkbox__box:disabled,
.deriv-checkbox__box:disabled + .deriv-checkbox__wrapper,
.deriv-checkbox__box--disabled ~ .deriv-checkbox__label {
cursor: not-allowed;
}
45 changes: 24 additions & 21 deletions lib/components/Checkbox/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ComponentProps, ReactNode, Ref, forwardRef } from "react";
import { ComponentProps, ReactNode, Ref, forwardRef, useId } from "react";
import clsx from "clsx";
import "./Checkbox.scss";

Expand All @@ -17,33 +17,36 @@ export const Checkbox = forwardRef(
className,
disabled,
error,
id = "deriv-checkbox",
label,
labelClassName,
wrapperClassName,
...rest
}: CheckboxProps,
ref: Ref<HTMLInputElement>
) => {
const id = useId();

return (
<div className={clsx("deriv-checkbox__wrapper", wrapperClassName)}>
<input
id={id}
className={clsx(
"deriv-checkbox",
{
"deriv-checkbox--unchecked": !checked,
"deriv-checkbox--checked": checked,
"deriv-checkbox--disabled": disabled,
},
className
)}
type="checkbox"
checked={!disabled && checked}
disabled={disabled}
ref={ref}
{...rest}
/>
<div className={clsx("deriv-checkbox", wrapperClassName)}>
<div className="deriv-checkbox__wrapper">
<input
id={rest.id ?? id}
className={clsx(
"deriv-checkbox__box",
{
"deriv-checkbox__box--unchecked": !checked,
"deriv-checkbox__box--checked": checked,
"deriv-checkbox__box--disabled": disabled,
},
className
)}
type="checkbox"
checked={!disabled && checked}
disabled={disabled}
ref={ref}
{...rest}
/>
</div>
<label
className={clsx(
"deriv-checkbox__label",
Expand All @@ -53,7 +56,7 @@ export const Checkbox = forwardRef(
},
labelClassName
)}
htmlFor={id}
htmlFor={rest.id ?? id}
>
{label}
</label>
Expand Down

0 comments on commit 0bc7499

Please sign in to comment.