From 862cccb064cfb11fa30c5f914cfee2371cc271d9 Mon Sep 17 00:00:00 2001 From: lianahus Date: Wed, 15 Feb 2023 12:25:25 +0100 Subject: [PATCH] added Delete All for workspaces --- .../src/app/tabs/locales/en/filePanel.json | 2 ++ .../src/app/tabs/locales/zh/filePanel.json | 2 ++ .../workspace/src/lib/actions/workspace.ts | 9 ++++- .../lib/components/workspace-hamburger.tsx | 33 +++++++++++++++++++ .../workspace/src/lib/contexts/index.ts | 1 + .../src/lib/providers/FileSystemProvider.tsx | 7 +++- .../workspace/src/lib/remix-ui-workspace.tsx | 21 +++++++++++- 7 files changed, 72 insertions(+), 3 deletions(-) diff --git a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json index a063529231..6148b791ae 100644 --- a/apps/remix-ide/src/app/tabs/locales/en/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/en/filePanel.json @@ -9,6 +9,8 @@ "filePanel.workspace.rename": "Rename Workspace", "filePanel.workspace.delete": "Delete Workspace", "filePanel.workspace.deleteConfirm": "Are you sure to delete the current workspace?", + "filePanel.workspace.deleteAll": "Delete All Workspaces", + "filePanel.workspace.deleteAllConfirm": "Are you absolutely sure you want to delete all your workspace?", "filePanel.workspace.name": "Workspace name", "filePanel.workspace.chooseTemplate": "Choose a template", "filePanel.workspace.download": "Download Workspace", diff --git a/apps/remix-ide/src/app/tabs/locales/zh/filePanel.json b/apps/remix-ide/src/app/tabs/locales/zh/filePanel.json index a0a1e1b0c7..467a556792 100644 --- a/apps/remix-ide/src/app/tabs/locales/zh/filePanel.json +++ b/apps/remix-ide/src/app/tabs/locales/zh/filePanel.json @@ -9,6 +9,8 @@ "filePanel.workspace.rename": "重命名工作空间", "filePanel.workspace.delete": "删除工作空间", "filePanel.workspace.deleteConfirm": "确定要删除当前工作空间?", + "filePanel.workspace.deleteAll": "Delete All Workspaces", + "filePanel.workspace.deleteAllConfirm": "Are you absolutely sure you want to delete all your workspace?", "filePanel.workspace.name": "工作空间名称", "filePanel.workspace.chooseTemplate": "选择一个工作空间模板", "filePanel.workspace.download": "下载工作空间", diff --git a/libs/remix-ui/workspace/src/lib/actions/workspace.ts b/libs/remix-ui/workspace/src/lib/actions/workspace.ts index 8b3b1f14e6..f25827373c 100644 --- a/libs/remix-ui/workspace/src/lib/actions/workspace.ts +++ b/libs/remix-ui/workspace/src/lib/actions/workspace.ts @@ -311,6 +311,14 @@ export const deleteWorkspace = async (workspaceName: string, cb?: (err: Error, r cb && cb(null, workspaceName) } +export const deleteAllWorkspaces = async () => { + await (await getWorkspaces()).map(async workspace => { + await deleteWorkspaceFromProvider(workspace.name) + await dispatch(setDeleteWorkspace(workspace.name)) + plugin.workspaceDeleted(workspace.name) + }) +} + const deleteWorkspaceFromProvider = async (workspaceName: string) => { const workspacesPath = plugin.fileProviders.workspace.workspacesPath @@ -450,7 +458,6 @@ export const cloneRepository = async (url: string) => { if (!isActive) await plugin.call('manager', 'activatePlugin', 'dgit') await fetchWorkspaceDirectory(ROOT_PATH) const workspacesPath = plugin.fileProviders.workspace.workspacesPath - console.log('go in to promise') const branches = await getGitRepoBranches(workspacesPath + '/' + repoName) dispatch(setCurrentWorkspaceBranches(branches)) diff --git a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx index 02e9989aed..083c8b13ee 100644 --- a/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx +++ b/libs/remix-ui/workspace/src/lib/components/workspace-hamburger.tsx @@ -8,6 +8,7 @@ const _paq = window._paq = window._paq || [] export interface HamburgerMenuProps { createWorkspace: () => void, deleteCurrentWorkspace: () => void, + deleteAllWorkspaces: () => void, renameCurrentWorkspace: () => void, cloneGitRepository: () => void, downloadWorkspaces: () => void, @@ -89,6 +90,38 @@ export function HamburgerMenu (props: HamburgerMenuProps) { + + } + > +
{ + props.deleteAllWorkspaces() + _paq.push(['trackEvent', 'fileExplorer', 'workspaceMenu', 'workspaceDeleteAll']) + props.hideIconsMenu(!showIconsMenu) + }} + key={`workspacesDelete-fe-ws`} + > + + +
+
+
Promise, dispatchRenameWorkspace: (oldName: string, workspaceName: string) => Promise, dispatchDeleteWorkspace: (workspaceName: string) => Promise, + dispatchDeleteAllWorkspaces: () => Promise, dispatchPublishToGist: (path?: string, type?: string) => Promise, dispatchUploadFile: (target?: SyntheticEvent, targetFolder?: string) => Promise, dispatchCreateNewFile: (path: string, rootDir: string) => Promise, diff --git a/libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx b/libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx index 2921ebe308..887a0f1afd 100644 --- a/libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx +++ b/libs/remix-ui/workspace/src/lib/providers/FileSystemProvider.tsx @@ -5,7 +5,7 @@ import { Toaster } from '@remix-ui/toaster' // eslint-disable-line // eslint-disable-next-line @typescript-eslint/no-unused-vars import { FileSystemContext } from '../contexts' import { browserReducer, browserInitialState } from '../reducers/workspace' -import { initWorkspace, fetchDirectory, removeInputField, deleteWorkspace, clearPopUp, publishToGist, createNewFile, setFocusElement, createNewFolder, +import { initWorkspace, fetchDirectory, removeInputField, deleteWorkspace, deleteAllWorkspaces, clearPopUp, publishToGist, createNewFile, setFocusElement, createNewFolder, deletePath, renamePath, downloadPath, copyFile, copyFolder, runScript, emitContextMenuEvent, handleClickFile, handleExpandPath, addInputField, createWorkspace, fetchWorkspaceDirectory, renameWorkspace, switchToWorkspace, uploadFile, handleDownloadFiles, restoreBackupZip, cloneRepository, moveFile, moveFolder, showAllBranches, switchBranch, createNewBranch, checkoutRemoteBranch, createSolidityGithubAction, createTsSolGithubAction, createSlitherGithubAction @@ -67,6 +67,10 @@ export const FileSystemProvider = (props: WorkspaceProps) => { await deleteWorkspace(workspaceName) } + const dispatchDeleteAllWorkspaces = async () => { + await deleteAllWorkspaces() + } + const dispatchPublishToGist = async (path?: string, type?: string) => { await publishToGist(path, type) } @@ -258,6 +262,7 @@ export const FileSystemProvider = (props: WorkspaceProps) => { dispatchSwitchToWorkspace, dispatchRenameWorkspace, dispatchDeleteWorkspace, + dispatchDeleteAllWorkspaces, dispatchPublishToGist, dispatchUploadFile, dispatchCreateNewFile, diff --git a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx index 07c1b8ca85..4a1f8fdd83 100644 --- a/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx +++ b/libs/remix-ui/workspace/src/lib/remix-ui-workspace.tsx @@ -90,6 +90,16 @@ export function Workspace () { ) } + const deleteAllWorkspaces = () => { + global.modal( + intl.formatMessage({ id: 'filePanel.workspace.deleteAll' }), + intl.formatMessage({ id: 'filePanel.workspace.deleteAllConfirm' }), + intl.formatMessage({ id: 'filePanel.ok' }), + onFinishDeleteAllWorkspaces, + '' + ) + } + const cloneGitRepository = () => { global.modal( intl.formatMessage({ id: 'filePanel.workspace.clone' }), @@ -175,7 +185,15 @@ export function Workspace () { console.error(e) } } - /** ** ****/ + + const onFinishDeleteAllWorkspaces = async () => { + try { + await global.dispatchDeleteAllWorkspaces() + } catch (e) { + global.modal(intl.formatMessage({ id: 'filePanel.workspace.deleteAll' }), e.message, intl.formatMessage({ id: 'filePanel.ok' }), () => {}, '') + console.error(e) + } + } const resetFocus = () => { global.dispatchSetFocusElement([{ key: '', type: 'folder' }]) @@ -433,6 +451,7 @@ export function Workspace () {