mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-04-21 15:52:02 +00:00
refactor: props & styles
This commit is contained in:
parent
37be201d41
commit
52aa5ee131
7 changed files with 19 additions and 18 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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%;
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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 ?
|
||||||
|
|
|
||||||
2
src/common/MultiselectMenu/types.d.ts
vendored
2
src/common/MultiselectMenu/types.d.ts
vendored
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue