Commit ca3053f0 by Finley Ge Committed by GitHub

fix: resolve MCP service modal checkbox double-click event issue (#5790)

Fixed the issue where clicking on checkboxes in the MCP service modal
would trigger double-click events, causing selections to be immediately
deselected.

Root cause:
- Checkbox onChange events were conflicting with parent HStack onClick events
- Both components were trying to handle the same selection logic

Solution:
- Extracted handleItemClick function to avoid code duplication
- Flex onClick: only e.stopPropagation() to prevent event bubbling
- Checkbox onChange: handleItemClick for checkbox-specific interactions
- HStack onClick: handleItemClick for row-level interactions

Benefits:
 Checkbox clicks work properly without double-toggle
 Full row click functionality preserved
 All checkbox hover/focus effects maintained
 Clean DRY code structure with shared logic
 Perfect visual alignment between checkbox and avatar

Changes made to:
- projects/app/src/pageComponents/dashboard/mcp/EditModal.tsx:159-194

🤖 Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Happy <yesreply@happy.engineering>
parent 703ef2cd
...@@ -156,17 +156,7 @@ const SelectAppModal = ({ ...@@ -156,17 +156,7 @@ const SelectAppModal = ({
const selected = selectedList.some((app) => app.appId === item._id); const selected = selectedList.some((app) => app.appId === item._id);
const isFolder = AppFolderTypeList.includes(item.type); const isFolder = AppFolderTypeList.includes(item.type);
return ( const handleItemClick = () => {
<HStack
key={item._id}
py={2}
px={3}
borderRadius={'md'}
cursor={'pointer'}
_hover={{
bg: 'myGray.100'
}}
onClick={() => {
if (isFolder) { if (isFolder) {
setParentId(item._id); setParentId(item._id);
} else if (selected) { } else if (selected) {
...@@ -183,10 +173,27 @@ const SelectAppModal = ({ ...@@ -183,10 +173,27 @@ const SelectAppModal = ({
} }
]); ]);
} }
};
return (
<HStack
key={item._id}
py={2}
px={3}
borderRadius={'md'}
cursor={'pointer'}
_hover={{
bg: 'myGray.100'
}} }}
onClick={handleItemClick}
> >
<Flex alignItems={'center'} w={'1.25rem'}> <Flex alignItems={'center'} w={'1.25rem'} onClick={(e) => e.stopPropagation()}>
{!isFolder && <Checkbox isChecked={selected} />} {!isFolder && (
<Checkbox
isChecked={selected}
onChange={handleItemClick}
/>
)}
</Flex> </Flex>
<Avatar src={item.avatar} w="1.5rem" borderRadius={'sm'} /> <Avatar src={item.avatar} w="1.5rem" borderRadius={'sm'} />
<Box>{item.name}</Box> <Box>{item.name}</Box>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment