mirror of
https://gh.catmak.name/https://github.com/mihomo-party-org/mihomo-party
synced 2025-12-28 05:30:29 +08:00
fix: double-click to edit override & add right-click menu support
This commit is contained in:
parent
58e0925c5b
commit
470adeb519
@ -10,7 +10,7 @@ import {
|
|||||||
} from '@heroui/react'
|
} from '@heroui/react'
|
||||||
import { IoMdMore, IoMdRefresh } from 'react-icons/io'
|
import { IoMdMore, IoMdRefresh } from 'react-icons/io'
|
||||||
import dayjs from '@renderer/utils/dayjs'
|
import dayjs from '@renderer/utils/dayjs'
|
||||||
import React, { Key, useEffect, useMemo, useState } from 'react'
|
import React, { Key, useMemo, useState } from 'react'
|
||||||
import EditFileModal from './edit-file-modal'
|
import EditFileModal from './edit-file-modal'
|
||||||
import EditInfoModal from './edit-info-modal'
|
import EditInfoModal from './edit-info-modal'
|
||||||
import { useSortable } from '@dnd-kit/sortable'
|
import { useSortable } from '@dnd-kit/sortable'
|
||||||
@ -54,7 +54,7 @@ const OverrideItem: React.FC<Props> = (props) => {
|
|||||||
id: info.id
|
id: info.id
|
||||||
})
|
})
|
||||||
const transform = tf ? { x: tf.x, y: tf.y, scaleX: 1, scaleY: 1 } : null
|
const transform = tf ? { x: tf.x, y: tf.y, scaleX: 1, scaleY: 1 } : null
|
||||||
const [disableOpen, setDisableOpen] = useState(false)
|
const [dropdownOpen, setDropdownOpen] = useState(false)
|
||||||
const menuItems: MenuItem[] = useMemo(() => {
|
const menuItems: MenuItem[] = useMemo(() => {
|
||||||
const list = [
|
const list = [
|
||||||
{
|
{
|
||||||
@ -124,17 +124,13 @@ const OverrideItem: React.FC<Props> = (props) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (isDragging) {
|
|
||||||
setTimeout(() => {
|
const handleContextMenu = (e: React.MouseEvent) => {
|
||||||
setDisableOpen(true)
|
e.preventDefault()
|
||||||
}, 200)
|
e.stopPropagation()
|
||||||
} else {
|
setDropdownOpen(true)
|
||||||
setTimeout(() => {
|
|
||||||
setDisableOpen(false)
|
|
||||||
}, 200)
|
|
||||||
}
|
}
|
||||||
}, [isDragging])
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
@ -164,13 +160,21 @@ const OverrideItem: React.FC<Props> = (props) => {
|
|||||||
<Card
|
<Card
|
||||||
as="div"
|
as="div"
|
||||||
fullWidth
|
fullWidth
|
||||||
isPressable
|
className="cursor-pointer"
|
||||||
onPress={() => {
|
onContextMenu={handleContextMenu}
|
||||||
if (disableOpen) return
|
onDoubleClick={(e) => {
|
||||||
|
if ((e.target as Element)?.closest('button, [role="menu"], [role="menuitem"]')) {
|
||||||
|
return
|
||||||
|
}
|
||||||
setOpenFileEditor(true)
|
setOpenFileEditor(true)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div ref={setNodeRef} {...attributes} {...listeners} className="h-full w-full">
|
<div
|
||||||
|
ref={setNodeRef}
|
||||||
|
{...attributes}
|
||||||
|
{...listeners}
|
||||||
|
className="h-full w-full"
|
||||||
|
>
|
||||||
<CardBody>
|
<CardBody>
|
||||||
<div className="flex justify-between h-[32px]">
|
<div className="flex justify-between h-[32px]">
|
||||||
<h3
|
<h3
|
||||||
@ -206,7 +210,10 @@ const OverrideItem: React.FC<Props> = (props) => {
|
|||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Dropdown>
|
<Dropdown
|
||||||
|
isOpen={dropdownOpen}
|
||||||
|
onOpenChange={setDropdownOpen}
|
||||||
|
>
|
||||||
<DropdownTrigger>
|
<DropdownTrigger>
|
||||||
<Button isIconOnly size="sm" variant="light" color="default">
|
<Button isIconOnly size="sm" variant="light" color="default">
|
||||||
<IoMdMore color="default" className={`text-[24px]`} />
|
<IoMdMore color="default" className={`text-[24px]`} />
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user