From 554022ffd87603e2b84c54a36c1c6c20f1a37da4 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 31 May 2023 13:59:41 +0200 Subject: [PATCH] dynamically sort items --- apps/remix-ide/src/app/panels/file-panel.js | 9 +++ apps/remix-ide/src/app/tabs/compile-tab.js | 3 +- apps/remix-ide/src/remixAppManager.js | 12 ++-- .../components/file-explorer-context-menu.tsx | 18 ++++-- .../remix-ui/workspace/src/lib/utils/index.ts | 58 +++++++++---------- 5 files changed, 61 insertions(+), 39 deletions(-) diff --git a/apps/remix-ide/src/app/panels/file-panel.js b/apps/remix-ide/src/app/panels/file-panel.js index ccd9e4cec7..b391daf5bd 100644 --- a/apps/remix-ide/src/app/panels/file-panel.js +++ b/apps/remix-ide/src/app/panels/file-panel.js @@ -66,6 +66,15 @@ module.exports = class Filepanel extends ViewPlugin { /** * @param item { id: string, name: string, type?: string[], path?: string[], extension?: string[], pattern?: string[] } + * typically: + * group 0 for file manipulations + * group 1 for download operations + * group 2 for running operations (script for instance) + * group 3 for publishing operations (gist) + * group 4 for copying operations + * group 5 for solidity file operations (flatten for instance) + * group 6 for compiling operations + * group 7 for generating resource files (UML, documentation, ...) * @param callback (...args) => void */ registerContextMenuItem (item) { diff --git a/apps/remix-ide/src/app/tabs/compile-tab.js b/apps/remix-ide/src/app/tabs/compile-tab.js index d7fdc499e9..8531f2ead2 100644 --- a/apps/remix-ide/src/app/tabs/compile-tab.js +++ b/apps/remix-ide/src/app/tabs/compile-tab.js @@ -123,7 +123,8 @@ class CompileTab extends CompilerApiMixin(ViewPlugin) { // implements ICompilerA type: [], extension: ['.sol'], path: [], - pattern: [] + pattern: [], + group: 6 }) }) try { diff --git a/apps/remix-ide/src/remixAppManager.js b/apps/remix-ide/src/remixAppManager.js index 66f2b92bc3..73e4c755c0 100644 --- a/apps/remix-ide/src/remixAppManager.js +++ b/apps/remix-ide/src/remixAppManager.js @@ -192,7 +192,8 @@ export class RemixAppManager extends PluginManager { extension: ['.sol'], path: [], pattern: [], - sticky: true + sticky: true, + group: 5 }) await this.call('filePanel', 'registerContextMenuItem', { id: 'nahmii-compiler', @@ -202,7 +203,8 @@ export class RemixAppManager extends PluginManager { extension: ['.sol'], path: [], pattern: [], - sticky: true + sticky: true, + group: 6 }) await this.call('filePanel', 'registerContextMenuItem', { id: 'solidityumlgen', @@ -212,7 +214,8 @@ export class RemixAppManager extends PluginManager { extension: ['.sol'], path: [], pattern: [], - sticky: true + sticky: true, + group: 7 }) await this.call('filePanel', 'registerContextMenuItem', { id: 'doc-gen', @@ -222,7 +225,8 @@ export class RemixAppManager extends PluginManager { extension: ['.sol'], path: [], pattern: [], - sticky: true + sticky: true, + group: 7 }) } } diff --git a/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx b/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx index dc268ef6ef..b1554a0a89 100644 --- a/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx +++ b/libs/remix-ui/workspace/src/lib/components/file-explorer-context-menu.tsx @@ -73,13 +73,21 @@ export const FileExplorerContextMenu = (props: FileExplorerContextMenuProps) => const menu = () => { let group = 0 - return actions.filter(item => filterItem(item)).map((item, index) => { + const groupedActions = actions.filter(item => filterItem(item)).reduce((acc, item) => { + if (item.group === undefined || item.group === null) item.group = 99 + if (!acc[item.group]) acc[item.group] = [] + acc[item.group].push(item) + return acc; + }, []) + console.log(groupedActions) + return groupedActions.map((groupItem, groupIndex) => groupItem.map((item, index) => { + const key = groupIndex*index const className = `remixui_liitem ${group !== item.group ? 'border-top': ''}` group = item.group if(item.name === "Upload File"){ return
  • { _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'uploadFile']) @@ -91,7 +99,7 @@ export const FileExplorerContextMenu = (props: FileExplorerContextMenuProps) => if(item.name === "Load a Local File"){ return
  • { _paq.push(['trackEvent', 'fileExplorer', 'contextMenu', 'uploadFile']) @@ -101,7 +109,7 @@ export const FileExplorerContextMenu = (props: FileExplorerContextMenuProps) => } return
  • { e.stopPropagation() @@ -173,7 +181,7 @@ export const FileExplorerContextMenu = (props: FileExplorerContextMenuProps) => } hideContextMenu() }}>{intl.formatMessage({id: `filePanel.${item.id}`, defaultMessage: item.label || item.name})}
  • - }) + })) } return ( diff --git a/libs/remix-ui/workspace/src/lib/utils/index.ts b/libs/remix-ui/workspace/src/lib/utils/index.ts index fa04c244f1..9069e827e0 100644 --- a/libs/remix-ui/workspace/src/lib/utils/index.ts +++ b/libs/remix-ui/workspace/src/lib/utils/index.ts @@ -35,55 +35,76 @@ export const contextMenuActions: MenuItems = [{ multiselect: true, label: '', group: 0 -},{ +}, { + id: 'copy', + name: 'Copy', + type: ['folder', 'file'], + multiselect: false, + label: '', + group: 1 +}, { + id: 'copyFileName', + name: 'Copy name', + type: ['file'], + multiselect: false, + label: '', + group: 1 +}, { + id: 'copyFilePath', + name: 'Copy path', + type: ['file'], + multiselect: false, + label: '', + group: 1 +}, { id: 'download', name: 'Download', type: ['file', 'folder', 'workspace'], multiselect: false, label: '', - group: 1 + group: 2 }, { id: 'run', name: 'Run', extension: ['.js', '.ts'], multiselect: false, label: '', - group: 2 + group: 3 },{ id: 'pushChangesToGist', name: 'Push changes to gist', type: ['gist'], multiselect: false, label: '', - group: 3 + group: 4 }, { id: 'publishFolderToGist', name: 'Publish folder to gist', type: ['folder'], multiselect: false, label: '', - group: 3 + group: 4 }, { id: 'publishFileToGist', name: 'Publish file to gist', type: ['file'], multiselect: false, label: '', - group: 3 + group: 4 }, { id: 'uploadFile', name: 'Load a Local File', type: ['folder', 'gist', 'workspace'], multiselect: false, label: 'Load a Local File', - group: 3 + group: 4 }, { id: 'publishToGist', name: 'Push changes to gist', type: ['folder', 'gist'], multiselect: false, label: 'Publish all to Gist', - group: 3 + group: 4 }, { id: 'publishWorkspace', @@ -91,26 +112,5 @@ export const contextMenuActions: MenuItems = [{ type: ['workspace'], multiselect: false, label: '', - group: 3 -}, { - id: 'copy', - name: 'Copy', - type: ['folder', 'file'], - multiselect: false, - label: '', - group: 4 -}, { - id: 'copyFileName', - name: 'Copy name', - type: ['file'], - multiselect: false, - label: '', - group: 4 -}, { - id: 'copyFilePath', - name: 'Copy path', - type: ['file'], - multiselect: false, - label: '', group: 4 }] \ No newline at end of file