refactor: props & styles

This commit is contained in:
Timothy Z. 2024-07-25 12:30:11 +03:00
parent 37be201d41
commit 52aa5ee131
7 changed files with 19 additions and 18 deletions

View file

@ -14,7 +14,7 @@ type Props = {
menuOpen: boolean | (() => void); menuOpen: boolean | (() => void);
level: number; level: number;
setLevel: (level: number) => void; setLevel: (level: number) => void;
onSelect: (event: any) => void; onSelect: (value: number) => void;
}; };
const Dropdown = ({ level, setLevel, options, onSelect, selectedOption, menuOpen }: Props) => { const Dropdown = ({ level, setLevel, options, onSelect, selectedOption, menuOpen }: Props) => {
@ -25,11 +25,11 @@ const Dropdown = ({ level, setLevel, options, onSelect, selectedOption, menuOpen
}; };
return ( return (
<div className={classNames(styles['dropdown'], { [styles['open']]: menuOpen })} role='listbox'> <div className={classNames(styles['dropdown'], { [styles['open']]: menuOpen })} role={'listbox'}>
{ {
level > 0 ? level > 0 ?
<Button className={styles['back-button']} onClick={onBackButtonClick}> <Button className={styles['back-button']} onClick={onBackButtonClick}>
<Icon name={'chevron-left'} className={styles['back-button-icon']} /> <Icon name={'caret-left'} className={styles['back-button-icon']} />
{t('BACK')} {t('BACK')}
</Button> </Button>
: null : null

View file

@ -15,7 +15,6 @@
.icon { .icon {
flex: none; flex: none;
// display: none;
width: 0.5rem; width: 0.5rem;
height: 0.5rem; height: 0.5rem;
border-radius: 100%; border-radius: 100%;

View file

@ -9,7 +9,7 @@ import Icon from '@stremio/stremio-icons/react';
type Props = { type Props = {
option: MultiselectMenuOption; option: MultiselectMenuOption;
selectedOption?: MultiselectMenuOption | null; selectedOption?: MultiselectMenuOption | null;
onSelect: (value: string) => void; onSelect: (value: number) => void;
}; };
const Option = ({ option, selectedOption, onSelect }: Props) => { const Option = ({ option, selectedOption, onSelect }: Props) => {
@ -32,7 +32,7 @@ const Option = ({ option, selectedOption, onSelect }: Props) => {
} }
{ {
option.level ? option.level ?
<Icon name={'chevron-right'} className={styles['option-chevron']} /> <Icon name={'caret-right'} className={styles['option-caret']} />
: null : null
} }
</Button> </Button>

View file

@ -3,11 +3,11 @@
@border-radius: 2.75rem; @border-radius: 2.75rem;
.multiselect-menu { .multiselect-menu {
background-color: var(--overlay-color);
position: relative; position: relative;
min-width: 150px; min-width: 8.5rem;
overflow: visible; overflow: visible;
border-radius: @border-radius; border-radius: @border-radius;
&.disabled { &.disabled {
pointer-events: none; pointer-events: none;
opacity: 0.3; opacity: 0.3;
@ -15,7 +15,6 @@
.multiselect-button { .multiselect-button {
color: var(--primary-foreground-color); color: var(--primary-foreground-color);
background-color: rgba(255, 255, 255, 0.05);
padding: 0.75rem 1.5rem; padding: 0.75rem 1.5rem;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@ -24,12 +23,17 @@
border-radius: @border-radius; border-radius: @border-radius;
.icon { .icon {
width: 1.5rem; width: 1rem;
color: var(--primary-foreground-color); color: var(--primary-foreground-color);
opacity: 0.6;
&.open { &.open {
transform: rotate(180deg); transform: rotate(180deg);
} }
} }
} }
&:hover {
background-color: var(--overlay-color);
}
} }

View file

@ -14,7 +14,7 @@ type Props = {
title?: string; title?: string;
options: MultiselectMenuOption[]; options: MultiselectMenuOption[];
selectedOption?: MultiselectMenuOption; selectedOption?: MultiselectMenuOption;
onSelect: (event: any) => void; onSelect: (value: number) => void;
}; };
const MultiselectMenu = ({ className, title, options, selectedOption, onSelect }: Props) => { const MultiselectMenu = ({ className, title, options, selectedOption, onSelect }: Props) => {
@ -22,9 +22,8 @@ const MultiselectMenu = ({ className, title, options, selectedOption, onSelect }
const multiselectMenuRef = useOutsideClick(() => closeMenu()); const multiselectMenuRef = useOutsideClick(() => closeMenu());
const [level, setLevel] = React.useState<number>(0); const [level, setLevel] = React.useState<number>(0);
const onOptionSelect = (event: any) => { const onOptionSelect = (value: number) => {
console.log(event.value); level ? setLevel(level + 1) : onSelect(value), closeMenu();
level ? setLevel(level + 1) : onSelect(event), closeMenu();
}; };
return ( return (
@ -37,7 +36,7 @@ const MultiselectMenu = ({ className, title, options, selectedOption, onSelect }
aria-expanded={menuOpen} aria-expanded={menuOpen}
> >
{title} {title}
<Icon name={'chevron-down'} className={classNames(styles['icon'], { [styles['open']]: menuOpen })} /> <Icon name={'caret-down'} className={classNames(styles['icon'], { [styles['open']]: menuOpen })} />
</Button> </Button>
{ {
menuOpen ? menuOpen ?

View file

@ -1,7 +1,7 @@
type MultiselectMenuOption = { type MultiselectMenuOption = {
id?: number; id?: number;
label: string; label: string;
value: string; value: number;
destination?: string; destination?: string;
default?: boolean; default?: boolean;
hidden?: boolean; hidden?: boolean;

View file

@ -36,8 +36,7 @@ const SeasonsBar = ({ className, seasons, season, onSelect }) => {
}); });
} }
}, [season, seasons, onSelect]); }, [season, seasons, onSelect]);
const seasonOnSelect = React.useCallback((event) => { const seasonOnSelect = React.useCallback((value) => {
const value = parseFloat(event.value);
if (typeof onSelect === 'function') { if (typeof onSelect === 'function') {
onSelect({ onSelect({
type: 'select', type: 'select',