@@ -42,6 +42,22 @@ module DropdownSelect = {
4242}
4343
4444module 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+
4561 @react.component
4662 let make = (
4763 ~onChange : 'a => unit ,
@@ -58,41 +74,21 @@ module ToggleSelection = {
5874 values
5975 }
6076
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 )
7885 }
7986 }
80- }
8187
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 >
9692 }
9793}
9894
0 commit comments