in frontend/src/js/components/workspace/Workspaces.tsx [572:664]
renderContextMenu(entry: TreeEntry<WorkspaceEntry>, positionX: number, positionY: number, currentUser: PartialUser, workspace: Workspace) {
const copyFilenameContent = "Copy file name"
const copyFilePathContent = "Copy file path"
const items = [
{key : "copyFilename", content: copyFilenameContent, icon: "copy"},
{key : "copyFilePath", content: copyFilePathContent, icon: "copy"},
// or 'pencil alternate'
{ key: "rename", content: "Rename", icon: "pen square" },
{ key: "remove", content: "Remove from workspace", icon: "trash" },
];
if (entry.data.addedBy.username === currentUser.username && isWorkspaceLeaf(entry.data)) {
items.push({ key: "deleteOrRemove", content: "Delete file", icon: "trash" });
}
if (isWorkspaceLeaf(entry.data)){
items.push({ key: "reprocess", content: "Reprocess source file", icon: "redo" });
} else {
items.push({ key: "search", content: "Search in folder", icon: "search" })
}
return <DetectClickOutside onClickOutside={this.closeContextMenu}>
<Menu
style={{ position: 'absolute', left: positionX, top: positionY }}
items={items}
vertical
onItemClick={(e, menuItemProps) => {
const workspaceId = this.props.match.params.id;
let closeMenuDelay = 0;
if (menuItemProps.content === 'Rename') {
this.props.setEntryBeingRenamed(entry);
}
if (menuItemProps.content === 'Remove from workspace') {
this.setState({
removeFromWorkspaceModalContext: {
isOpen: true,
entry,
status: "unconfirmed",
}
});
}
if (menuItemProps.content === copyFilenameContent || menuItemProps.content === copyFilePathContent) {
const text = menuItemProps.content === copyFilenameContent ? entry.name : this.getEntryPath(entry.id, workspace.rootNode);
navigator.clipboard.writeText(text);
const menuItem = items.find((i: ContextMenuEntry) => i.content === menuItemProps.content)
if (menuItem) {
menuItem.content = 'Copied!'
menuItem.icon = 'check'
closeMenuDelay = 700;
}
}
if (menuItemProps.content === "Delete file") {
this.setState({
deleteModalContext: {
isOpen: true,
entry,
status: "unconfirmed",
}
});
}
if (menuItemProps.content === 'Reprocess source file' && (isWorkspaceLeaf(entry.data))) {
this.props.reprocessBlob(workspaceId, entry.data.uri)
}
if (menuItemProps.content === "Search in folder"){
history.push(
buildLink("/search", {
q: JSON.stringify([
"",
{
n: "Workspace Folder",
v: entry.name,
op: "+",
t: "workspace_folder",
workspaceId: workspace.id,
folderId: entry.id,
},
"*"
]),
page: 1
}),
)
}
setTimeout(() => this.closeContextMenu(), closeMenuDelay);
}}
/>
</DetectClickOutside>;
}