fix:commiting broken context menu
This commit is contained in:
		@ -1,10 +1,14 @@
 | 
			
		||||
import { CustomIcon } from '@src/components/CustomIcon'
 | 
			
		||||
import { uuidv4 } from '@src/lib/utils'
 | 
			
		||||
import {
 | 
			
		||||
import type {
 | 
			
		||||
  FileExplorerEntry,
 | 
			
		||||
  FileExplorerRow,
 | 
			
		||||
  FileExplorerRender,
 | 
			
		||||
  FileExplorerRowContextMenuProps,
 | 
			
		||||
} from '@src/components/Explorer/utils'
 | 
			
		||||
import { ContextMenu, ContextMenuItem } from '@src/components/ContextMenu'
 | 
			
		||||
import { useRef } from 'react'
 | 
			
		||||
import usePlatform from '@src/hooks/usePlatform'
 | 
			
		||||
 | 
			
		||||
export const StatusDot = () => {
 | 
			
		||||
  return <span>•</span>
 | 
			
		||||
@ -98,8 +102,11 @@ export const FileExplorerRowElement = ({
 | 
			
		||||
  const outlineCSS = isIndexActive
 | 
			
		||||
    ? 'outline outline-1 outline-sky-500 '
 | 
			
		||||
    : 'outline-0 outline-none'
 | 
			
		||||
 | 
			
		||||
  const rowElementRef = useRef(null)
 | 
			
		||||
  return (
 | 
			
		||||
    <div
 | 
			
		||||
      ref={rowElementRef}
 | 
			
		||||
      role="treeitem"
 | 
			
		||||
      className={`h-6 flex flex-row items-center text-xs cursor-pointer -outline-offset-1 ${outlineCSS} hover:outline hover:outline-1 hover:outline-sky-500 hover:bg-sky-400 ${isSelected ? 'bg-sky-800' : ''}`}
 | 
			
		||||
      data-index={row.domIndex}
 | 
			
		||||
@ -126,6 +133,58 @@ export const FileExplorerRowElement = ({
 | 
			
		||||
      </span>
 | 
			
		||||
      <div className="ml-auto">{row.status}</div>
 | 
			
		||||
      <div style={{ width: '0.25rem' }}></div>
 | 
			
		||||
      <FileExplorerRowContextMenu
 | 
			
		||||
        itemRef={rowElementRef}
 | 
			
		||||
        onRename={() => {}}
 | 
			
		||||
        onDelete={() => {}}
 | 
			
		||||
        onClone={() => {}}
 | 
			
		||||
        onOpenInNewWindow={() => {}}
 | 
			
		||||
      />
 | 
			
		||||
    </div>
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function FileExplorerRowContextMenu({
 | 
			
		||||
  itemRef,
 | 
			
		||||
  onRename,
 | 
			
		||||
  onDelete,
 | 
			
		||||
  onClone,
 | 
			
		||||
  onOpenInNewWindow,
 | 
			
		||||
}: FileExplorerRowContextMenuProps) {
 | 
			
		||||
  const platform = usePlatform()
 | 
			
		||||
  const metaKey = platform === 'macos' ? '⌘' : 'Ctrl'
 | 
			
		||||
  return (
 | 
			
		||||
    <ContextMenu
 | 
			
		||||
      menuTargetElement={itemRef}
 | 
			
		||||
      items={[
 | 
			
		||||
        <ContextMenuItem
 | 
			
		||||
          data-testid="context-menu-rename"
 | 
			
		||||
          onClick={onRename}
 | 
			
		||||
          hotkey="Enter"
 | 
			
		||||
        >
 | 
			
		||||
          Rename
 | 
			
		||||
        </ContextMenuItem>,
 | 
			
		||||
        <ContextMenuItem
 | 
			
		||||
          data-testid="context-menu-delete"
 | 
			
		||||
          onClick={onDelete}
 | 
			
		||||
          hotkey={metaKey + ' + Del'}
 | 
			
		||||
        >
 | 
			
		||||
          Delete
 | 
			
		||||
        </ContextMenuItem>,
 | 
			
		||||
        <ContextMenuItem
 | 
			
		||||
          data-testid="context-menu-clone"
 | 
			
		||||
          onClick={onClone}
 | 
			
		||||
          hotkey=""
 | 
			
		||||
        >
 | 
			
		||||
          Clone
 | 
			
		||||
        </ContextMenuItem>,
 | 
			
		||||
        <ContextMenuItem
 | 
			
		||||
          data-testid="context-menu-open-in-new-window"
 | 
			
		||||
          onClick={onOpenInNewWindow}
 | 
			
		||||
        >
 | 
			
		||||
          Open in new window
 | 
			
		||||
        </ContextMenuItem>,
 | 
			
		||||
      ]}
 | 
			
		||||
    />
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -3,14 +3,14 @@ import type { CustomIconName } from '@src/components/CustomIcon'
 | 
			
		||||
import { FILE_EXT } from '@src/lib/constants'
 | 
			
		||||
import { FileExplorer, StatusDot } from '@src/components/Explorer/FileExplorer'
 | 
			
		||||
import {
 | 
			
		||||
  FileExplorerRow,
 | 
			
		||||
  constructPath,
 | 
			
		||||
  flattenProject,
 | 
			
		||||
  NOTHING_IS_SELECTED,
 | 
			
		||||
  CONTAINER_IS_SELECTED,
 | 
			
		||||
  STARTING_INDEX_TO_SELECT,
 | 
			
		||||
} from '@src/components/Explorer/utils'
 | 
			
		||||
import type { FileExplorerEntry } from '@src/components/Explorer/utils'
 | 
			
		||||
import type { FileExplorerEntry ,
 | 
			
		||||
  FileExplorerRow} from '@src/components/Explorer/utils'
 | 
			
		||||
import { FileExplorerHeaderActions } from '@src/components/Explorer/FileExplorerHeaderActions'
 | 
			
		||||
import { useState, useRef, useEffect } from 'react'
 | 
			
		||||
import { systemIOActor } from '@src/lib/singletons'
 | 
			
		||||
@ -99,6 +99,7 @@ export const ProjectExplorer = ({
 | 
			
		||||
 | 
			
		||||
    if (project && project.children) {
 | 
			
		||||
      // moves all folders up and files down, files are sorted within folders
 | 
			
		||||
      // gotcha: this only sorts the current level, not recursive for all children!
 | 
			
		||||
      const sortedData = sortFilesAndDirectories(project.children)
 | 
			
		||||
      flattenedData = flattenProject(sortedData, project.name)
 | 
			
		||||
      // insert fake row if one is present
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,14 @@ export interface FileExplorerRender extends FileExplorerRow {
 | 
			
		||||
  domLength: number
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface FileExplorerRowContextMenuProps {
 | 
			
		||||
  itemRef: React.RefObject<HTMLElement>
 | 
			
		||||
  onRename: () => void
 | 
			
		||||
  onDelete: () => void
 | 
			
		||||
  onClone: () => void
 | 
			
		||||
  onOpenInNewWindow: () => void
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export const constructPath = ({
 | 
			
		||||
  parentPath,
 | 
			
		||||
  name,
 | 
			
		||||
@ -92,6 +100,7 @@ export const flattenProject = (
 | 
			
		||||
  projectName: string
 | 
			
		||||
): FileExplorerEntry[] => {
 | 
			
		||||
  const flattenTreeInOrder: FileExplorerEntry[] = []
 | 
			
		||||
 | 
			
		||||
  // For all children of the project, start the recursion to flatten the tree data structure
 | 
			
		||||
  for (let index = 0; index < projectChildren.length; index++) {
 | 
			
		||||
    flattenProjectHelper(
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user