@@ -42,6 +42,22 @@ module DropdownSelect = {
42
42
}
43
43
44
44
module ToggleSelection = {
45
+ module SelectionOption = {
46
+ @react.component
47
+ let make = (~label , ~isActive , ~disabled , ~onClick ) => {
48
+ <button
49
+ className = {"mr-1 px-2 py-1 rounded inline-block " ++ if isActive {
50
+ "bg-fire text-white font-bold"
51
+ } else {
52
+ "bg-gray-80 opacity-50 hover:opacity-80"
53
+ }}
54
+ onClick
55
+ disabled >
56
+ {React .string (label )}
57
+ </button >
58
+ }
59
+ }
60
+
45
61
@react.component
46
62
let make = (
47
63
~onChange : 'a => unit ,
@@ -58,41 +74,21 @@ module ToggleSelection = {
58
74
values
59
75
}
60
76
61
- let selectedIndex = switch Belt .Array .getIndexBy (values , lang => lang === selected ) {
62
- | Some (i ) => i
63
- | None => 0
64
- }
65
-
66
- let elements = Array .mapWithIndex (values , (value , i ) => {
67
- let active = i === selectedIndex ? "bg-fire text-white font-bold" : "bg-gray-80 opacity-50"
68
- let label = toLabel (value )
69
-
70
- let onMouseDown = evt => {
71
- ReactEvent .Mouse .preventDefault (evt )
72
- ReactEvent .Mouse .stopPropagation (evt )
73
-
74
- if i !== selectedIndex {
75
- switch values [i ] {
76
- | Some (value ) => onChange (value )
77
- | None => ()
77
+ <div className = {(disabled ? "opacity-25" : "" ) ++ "flex w-full" }>
78
+ {values
79
+ -> Array .map (value => {
80
+ let label = toLabel (value )
81
+ let isActive = value === selected
82
+ let onClick = _event => {
83
+ if ! isActive {
84
+ onChange (value )
78
85
}
79
86
}
80
- }
81
87
82
- // Required for iOS Safari 12
83
- let onClick = _ => ()
84
-
85
- <button
86
- disabled
87
- onMouseDown
88
- onClick
89
- key = label
90
- className = {"mr-1 px-2 py-1 rounded inline-block " ++ active }>
91
- {React .string (label )}
92
- </button >
93
- })
94
-
95
- <div className = {(disabled ? "opacity-25" : "" ) ++ "flex w-full" }> {React .array (elements )} </div >
88
+ <SelectionOption key = {label } label isActive onClick disabled />
89
+ })
90
+ -> React .array }
91
+ </div >
96
92
}
97
93
}
98
94
0 commit comments