Merge branch 'dev' into staging

This commit is contained in:
Vins 2024-07-29 16:49:58 +02:00
commit e76f5a9b90
7 changed files with 103 additions and 3 deletions

View File

@ -53,7 +53,7 @@ export default function Dropdown(props: IProps) {
disabled && classes["disabled"], disabled && classes["disabled"],
!!selectedOption && classes["active"], !!selectedOption && classes["active"],
])} ])}
onClick={openable.toggle}> onClick={() => openable.toggle()}>
<div className={classes["content"]}> <div className={classes["content"]}>
{getLabelContent(selectedOption, placeholder)} {getLabelContent(selectedOption, placeholder)}
<ChevronDownIcon /> <ChevronDownIcon />

View File

@ -36,6 +36,8 @@
cursor: pointer; cursor: pointer;
width: 20px; width: 20px;
height: 20px; height: 20px;
min-width: 20px;
max-width: 20px;
border-radius: var(--radius-full, 360px); border-radius: var(--radius-full, 360px);
border: 2px solid var(--select-option-unselected-default-border, #6d7e8a); border: 2px solid var(--select-option-unselected-default-border, #6d7e8a);
margin-right: 16px; margin-right: 16px;

View File

@ -0,0 +1,46 @@
@import "@Themes/constants.scss";
.root {
cursor: pointer;
height: fit-content;
display: flex;
width: 48px;
padding: var(--Radius-xs, 2px);
gap: 8px;
border-radius: var(--toggle-radius, 360px);
background: var(--toggle-off-background, #edeff1);
.circle {
width: 20px;
height: 20px;
flex-shrink: 0;
border-radius: var(--toggle-radius, 360px);
background: var(--toggle-switch-background, #fff);
transition: transform 0.3s ease-in-out;
&.active {
transform: translateX(24px);
}
}
&.sm {
width: 40px;
.circle {
width: 16px;
height: 16px;
&.active {
transform: translateX(20px);
}
}
}
&.active {
background-color: var(--toggle-on-background, #005bcb);
}
}

View File

@ -0,0 +1,38 @@
import useToggle from "@Front/Hooks/useToggle";
import classNames from "classnames";
import React, { useCallback } from "react";
import classes from "./classes.module.scss";
export enum EToggleSize {
MD = "md",
SM = "sm",
}
export enum ETagVariant {
REGULAR = "regular",
SEMI_BOLD = "semi_bold",
}
type IProps = {
onChange?: (value: boolean) => void;
defaultActive?: boolean;
size?: EToggleSize;
className?: string;
};
export default function Toggle(props: IProps) {
const { className, defaultActive = false, size = EToggleSize.MD } = props;
const { active, toggle } = useToggle(defaultActive);
const handleToggle = useCallback(() => {
toggle((isOpen) => props.onChange?.(isOpen));
}, [toggle, props]);
return (
<div className={classNames(classes["root"], className, classes[size], active && classes["active"])} onClick={handleToggle}>
<div className={classNames([classes["circle"], active && classes["active"]])} />
</div>
);
}

View File

@ -15,6 +15,7 @@
.rows { .rows {
display: flex; display: flex;
align-items: center;
gap: 16px; gap: 16px;
} }
} }

View File

@ -35,6 +35,7 @@ import { useCallback, useMemo, useState } from "react";
import classes from "./classes.module.scss"; import classes from "./classes.module.scss";
import CheckboxesInputElement from "@Front/Components/DesignSystem/CheckBox"; import CheckboxesInputElement from "@Front/Components/DesignSystem/CheckBox";
import RadioBox from "@Front/Components/DesignSystem/RadioBox"; import RadioBox from "@Front/Components/DesignSystem/RadioBox";
import Toggle, { EToggleSize } from "@Front/Components/DesignSystem/Toggle";
export default function DesignSystem() { export default function DesignSystem() {
const { isOpen, open, close } = useOpenable(); const { isOpen, open, close } = useOpenable();
@ -135,6 +136,15 @@ export default function DesignSystem() {
/> />
</div> </div>
<div className={classes["components"]}> <div className={classes["components"]}>
<Typography typo={ETypo.TEXT_LG_BOLD}>Toggle</Typography>
<div className={classes["rows"]}>
<Toggle size={EToggleSize.MD} />
<Toggle size={EToggleSize.MD} defaultActive />
</div>
<div className={classes["rows"]}>
<Toggle size={EToggleSize.SM} />
<Toggle size={EToggleSize.SM} defaultActive />
</div>
<Typography typo={ETypo.TEXT_LG_BOLD}>Autocomplete Multi Select</Typography> <Typography typo={ETypo.TEXT_LG_BOLD}>Autocomplete Multi Select</Typography>
<AutocompleteMultiSelect <AutocompleteMultiSelect

View File

@ -3,8 +3,11 @@ import { useCallback, useState } from "react";
export default function useToggle(defaultValue: boolean = false) { export default function useToggle(defaultValue: boolean = false) {
const [active, setActive] = useState(defaultValue); const [active, setActive] = useState(defaultValue);
const toggle = useCallback(() => { const toggle = useCallback((callback?: (isOpen: boolean) => void) => {
setActive((prev) => !prev); setActive((prev) => {
callback?.(!prev);
return !prev;
});
}, []); }, []);
const activate = useCallback(() => { const activate = useCallback(() => {