@@ -43,6 +43,7 @@ type PreviewContextMenuItemProps = {
4343} ;
4444
4545let previewContextMenuListener : ( ( state : PreviewContextMenuState ) => void ) | null = null ;
46+ const previewContextMenuItemIds = new WeakMap < ContextMenuItem , string > ( ) ;
4647
4748function makeVirtualElement ( x : number , y : number ) : VirtualElement {
4849 return {
@@ -56,7 +57,7 @@ function makeVirtualElement(x: number, y: number): VirtualElement {
5657 right : x ,
5758 bottom : y ,
5859 left : x ,
59- toJSON : ( ) => undefined ,
60+ toJSON : ( ) => ( { } ) ,
6061 } as DOMRect ;
6162 } ,
6263 } ;
@@ -78,6 +79,16 @@ function activateItem(item: ContextMenuItem, closeMenu: () => void): void {
7879 item . click ?.( ) ;
7980}
8081
82+ function getPreviewContextMenuItemId ( item : ContextMenuItem ) : string {
83+ const existingId = previewContextMenuItemIds . get ( item ) ;
84+ if ( existingId != null ) {
85+ return existingId ;
86+ }
87+ const newId = crypto . randomUUID ( ) ;
88+ previewContextMenuItemIds . set ( item , newId ) ;
89+ return newId ;
90+ }
91+
8192const PreviewContextMenuItem = memo (
8293 ( { item, itemPath, depth, parentPath, openPath, setOpenPath, closeMenu } : PreviewContextMenuItemProps ) => {
8394 const rowRef = useRef < HTMLDivElement > ( null ) ;
@@ -212,7 +223,7 @@ const PreviewContextMenuPanel = memo(
212223 >
213224 { visibleItems . map ( ( item , index ) => (
214225 < PreviewContextMenuItem
215- key = { ` ${ depth } - ${ index } - ${ item . label ?? item . type ?? "item" } ` }
226+ key = { getPreviewContextMenuItemId ( item ) }
216227 item = { item }
217228 itemPath = { [ ...parentPath , index ] }
218229 depth = { depth }
@@ -231,16 +242,16 @@ PreviewContextMenuPanel.displayName = "PreviewContextMenuPanel";
231242
232243export function showPreviewContextMenu ( menu : ContextMenuItem [ ] , e : React . MouseEvent ) : void {
233244 e . stopPropagation ( ) ;
234- e . preventDefault ?. ( ) ;
245+ e . preventDefault ( ) ;
235246 previewContextMenuListener ?.( {
236247 items : menu ,
237- x : e . clientX ?? 0 ,
238- y : e . clientY ?? 0 ,
248+ x : e . clientX ,
249+ y : e . clientY ,
239250 } ) ;
240251}
241252
242253export const PreviewContextMenu = memo ( ( ) => {
243- const [ menuState , setMenuState ] = useState < PreviewContextMenuState > ( null ) ;
254+ const [ menuState , setMenuState ] = useState < PreviewContextMenuState | null > ( null ) ;
244255 const [ openPath , setOpenPath ] = useState < number [ ] > ( [ ] ) ;
245256 const portalRef = useRef < HTMLDivElement > ( null ) ;
246257
0 commit comments