Skip to content

Commit b1d9322

Browse files
committed
prevent the eye icon click from triggering selection
1 parent 4e50c05 commit b1d9322

4 files changed

Lines changed: 60 additions & 123 deletions

File tree

assets/build/example.min.js

Lines changed: 22 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assets/build/index.min.js

Lines changed: 22 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assets/src/components/field/enhanced-choice/EnhancedOption.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,28 @@ const EnhancedOption = ({ item, state, visibility, onToggleVisibility }) => {
3030
onToggleVisibility(item.key)
3131
}
3232

33-
// let classes = 'tf-enhanced-choice-option'
34-
// if (isSelected) classes += ' is-selected'
35-
// if (isFocused) classes += ' is-focused'
36-
// if (isDisabled) classes += ' is-disabled'
37-
// if (!isVisible) classes += ' is-hidden'
33+
// Prevent selection logic from firing when clicking the toggle
34+
const preventSelection = (e) => {
35+
e.stopPropagation()
36+
}
37+
38+
let classes = 'tf-enhanced-choice-option'
39+
if (isSelected) classes += ' is-selected'
40+
if (isFocused) classes += ' is-focused'
41+
if (isDisabled) classes += ' is-disabled'
42+
if (!isVisible) classes += ' is-hidden'
3843

3944
return (
4045
<li
4146
{ ...mergeProps(optionProps, focusProps) }
4247
ref={ref}
43-
// className={classes}
48+
className={classes}
4449
>
4550
<div className="tf-enhanced-choice-option-content">
46-
<div className="tf-enhanced-choice-checkbox">
51+
<div className="tf-enhanced-choice-checkbox" style={{ pointerEvents: 'none' }}>
4752
<Checkbox
4853
isSelected={isSelected}
49-
// isDisabled={isDisabled}
50-
// onChange={() => state.toggleSelection(item.key)}
54+
isDisabled={isDisabled}
5155
/>
5256
</div>
5357
<div className="tf-enhanced-choice-label">
@@ -56,6 +60,8 @@ const EnhancedOption = ({ item, state, visibility, onToggleVisibility }) => {
5660
<button
5761
className="tf-enhanced-choice-visibility-toggle"
5862
onClick={handleEyeClick}
63+
onPointerDown={preventSelection}
64+
onMouseDown={preventSelection}
5965
aria-label={isVisible ? 'Hide item' : 'Show item'}
6066
type="button"
6167
>

assets/src/components/field/enhanced-choice/MultipleChoices.tsx

Lines changed: 1 addition & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -24,76 +24,7 @@ import {
2424
} from '../../base'
2525

2626
import { initSet } from '../../../utils'
27-
28-
/**
29-
* Custom Option component with Checkbox and Visibility (Eye) icon
30-
*/
31-
const EnhancedOption = ({ item, state, visibility, onToggleVisibility }) => {
32-
const ref = useRef()
33-
const {
34-
optionProps,
35-
isSelected,
36-
isFocused,
37-
isDisabled
38-
} = useOption({ key: item.key }, state, ref)
39-
40-
const { focusProps } = useFocusRing()
41-
42-
const isVisible = visibility[item.key] !== false
43-
44-
const handleEyeClick = (e) => {
45-
e.stopPropagation()
46-
e.preventDefault()
47-
onToggleVisibility(item.key)
48-
}
49-
50-
let classes = 'tf-enhanced-choice-option'
51-
if (isSelected) classes += ' is-selected'
52-
if (isFocused) classes += ' is-focused'
53-
if (isDisabled) classes += ' is-disabled'
54-
if (!isVisible) classes += ' is-hidden'
55-
56-
return (
57-
<li
58-
{ ...mergeProps(optionProps, focusProps) }
59-
ref={ref}
60-
className={classes}
61-
>
62-
<div className="tf-enhanced-choice-option-content">
63-
<div className="tf-enhanced-choice-checkbox">
64-
<input
65-
type="checkbox"
66-
checked={isSelected}
67-
readOnly
68-
tabIndex={-1}
69-
aria-hidden="true"
70-
/>
71-
</div>
72-
<div className="tf-enhanced-choice-label">
73-
{item.rendered}
74-
</div>
75-
<button
76-
className="tf-enhanced-choice-visibility-toggle"
77-
onClick={handleEyeClick}
78-
aria-label={isVisible ? 'Hide item' : 'Show item'}
79-
type="button"
80-
>
81-
{isVisible ? (
82-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
83-
<path d="M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"></path>
84-
<circle cx="12" cy="12" r="3"></circle>
85-
</svg>
86-
) : (
87-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
88-
<path d="M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"></path>
89-
<line x1="1" y1="1" x2="23" y2="23"></line>
90-
</svg>
91-
)}
92-
</button>
93-
</div>
94-
</li>
95-
)
96-
}
27+
import EnhancedOption from './EnhancedOption'
9728

9829
const MultipleChoices = (props) => {
9930

0 commit comments

Comments
 (0)