11import { DropdownIcon } from "@app/assets/Icons" ;
2- import Button , { ButtonProps } from ".." ;
2+ import Button , { ButtonColor , ButtonProps } from ".." ;
33import styles from "./DropdownButton.module.css" ;
44import * as DropdownMenu from "@radix-ui/react-dropdown-menu" ;
5+ import * as RadioGroup from "@radix-ui/react-radio-group" ;
6+ import { DropdownMenuItemIndicatorProps } from "@radix-ui/react-dropdown-menu" ;
7+ import { RadioGroupItemProps , RadioGroupProps } from "@radix-ui/react-radio-group" ;
58
69interface DropdownProps extends ButtonProps {
710 dropdownChildren : React . ReactNode
@@ -16,14 +19,47 @@ const DropdownButton: React.FC<DropdownProps> = (props: DropdownProps) => {
1619 ...buttonProps
1720 } = props ;
1821
22+ let classes ;
23+ switch ( buttonProps . color ) {
24+ case ButtonColor . BLUE :
25+ classes = [ styles . colorsBlue ] ;
26+ break ;
27+ case ButtonColor . GREEN :
28+ classes = [ styles . colorsGreen ] ;
29+ break ;
30+ case ButtonColor . YELLOW :
31+ classes = [ styles . colorsYellow ] ;
32+ break ;
33+ case ButtonColor . LIGHT :
34+ classes = [ styles . colorsLight ] ;
35+ break ;
36+ case ButtonColor . DARK :
37+ classes = [ styles . colorsDark ] ;
38+ break ;
39+ case ButtonColor . RED :
40+ classes = [ styles . colorsRed ] ;
41+ break ;
42+ default :
43+ classes = [ styles . colorsBlue ] ;
44+ break ;
45+ }
46+
47+ if ( buttonProps . border ) {
48+ classes . push ( styles . border ) ;
49+ }
50+
51+ if ( buttonProps . rounded ) {
52+ classes . push ( styles . rounded ) ;
53+ }
54+
1955 return < DropdownMenu . Root >
20- < div className = { [ styles . container , className ] . join ( " " ) } style = { style } >
56+ < div className = { [ styles . container , ... classes , className ] . join ( " " ) } style = { style } >
2157 < Button { ...buttonProps as ButtonProps } className = { styles . button } >
2258 { children }
2359 </ Button >
2460 < DropdownMenu . Trigger asChild >
25- < button className = { styles . dropdown_button } >
26- < DropdownIcon width = { 12 } height = { 12 } />
61+ < button className = { [ styles . dropdown_button , ... classes ] . join ( " " ) } >
62+ < DropdownIcon width = { 12 } height = { 12 } className = { [ ... classes ] . join ( " " ) } />
2763 </ button >
2864 </ DropdownMenu . Trigger >
2965 </ div >
@@ -46,6 +82,10 @@ type ItemProps = React.PropsWithChildren<{
4682 onClick ?: React . MouseEventHandler < HTMLDivElement > ,
4783} > ;
4884
85+ interface RadioItemProps extends RadioGroupItemProps {
86+ label : string ,
87+ }
88+
4989const DropdownItem : React . FC < ItemProps > = ( props : ItemProps ) => {
5090 const {
5191 children,
@@ -57,4 +97,38 @@ const DropdownItem: React.FC<ItemProps> = (props: ItemProps) => {
5797 </ DropdownMenu . Item > ;
5898} ;
5999
60- export { DropdownButton , DropdownItem } ;
100+ const DropdownRadioGroup : React . FC < RadioGroupProps > = ( props : RadioGroupProps ) => {
101+ const {
102+ children,
103+ defaultValue,
104+ onValueChange
105+ } = props ;
106+
107+ return < RadioGroup . Root className = { styles . dropdown_radio_root } defaultValue = { defaultValue } onValueChange = { onValueChange } >
108+ { children }
109+ </ RadioGroup . Root > ;
110+ } ;
111+
112+ const DropdownRadioGroupIndicator : React . FC < DropdownMenuItemIndicatorProps > = ( ) => {
113+ return < DropdownMenu . ItemIndicator className = { styles . dropdown_item } /> ;
114+ } ;
115+
116+ const DropdownRadioItem : React . FC < RadioItemProps > = ( props : RadioItemProps ) => {
117+ const {
118+ onClick,
119+ checked,
120+ value,
121+ label
122+ } = props ;
123+
124+ return < >
125+ < label className = { [ styles . dropdown_item , styles . dropdown_radio_label ] . join ( " " ) } >
126+ < RadioGroup . Item className = { styles . dropdown_radio_item } onClick = { onClick } value = { value } >
127+ < RadioGroup . Indicator className = { styles . dropdown_radio_indicator } />
128+ </ RadioGroup . Item >
129+ < span className = { styles . dropdown_radio_label_text } > { label } </ span >
130+ </ label >
131+ </ > ;
132+ } ;
133+
134+ export { DropdownButton , DropdownItem , DropdownRadioItem , DropdownRadioGroup , DropdownRadioGroupIndicator } ;
0 commit comments