@@ -10,15 +10,16 @@ import { createFetcherSubmitHook } from '~/utils/router';
1010
1111import type { Route } from './+types/organization.$organizationId.project.$projectId.workspace.delete' ;
1212
13- async function deleteWorkspaceFromCloud ( workspace : Workspace , project : Project ) {
13+ async function deleteCloudSyncWorkspaceCloud ( workspace : Workspace , project : Project , localOnly : boolean ) {
1414 const workspaceMeta = await models . workspaceMeta . getOrCreateByParentId ( workspace . _id ) ;
1515 const isGitSync = ! ! workspaceMeta . gitRepositoryId ;
1616
1717 if ( isRemoteProject ( project ) && ! isGitSync ) {
1818 try {
1919 const vcs = VCSInstance ( ) ;
2020 await vcs . switchAndCreateBackendProjectIfNotExist ( workspace . _id , workspace . name ) ;
21- await vcs . archiveProject ( ) ;
21+ // For cloud sync workspaces, delete only local file or also delete remote copy
22+ await ( localOnly ? vcs . removeBackendProjectsForRoot ( workspace . _id ) : vcs . archiveProject ( ) ) ;
2223 } catch ( err ) {
2324 return {
2425 error :
@@ -37,11 +38,11 @@ async function deleteWorkspaceFromLocal(workspace: Workspace) {
3738 await models . workspace . remove ( workspace ) ;
3839}
3940
40- async function deleteWorkspace ( workspace : Workspace | null , project : Project | null ) {
41+ async function deleteWorkspace ( workspace : Workspace | null , project : Project | null , localOnly : boolean ) {
4142 invariant ( workspace , 'Workspace not found' ) ;
4243 invariant ( project , 'Project not found' ) ;
4344
44- const ret = await deleteWorkspaceFromCloud ( workspace , project ) ;
45+ const ret = await deleteCloudSyncWorkspaceCloud ( workspace , project , localOnly ) ;
4546 if ( ret ?. error ) {
4647 return ret ;
4748 }
@@ -65,12 +66,14 @@ export async function clientAction({ request, params }: Route.ClientActionArgs)
6566 const formData = await request . formData ( ) ;
6667
6768 const workspaceId = formData . get ( 'workspaceId' ) ;
69+ const localOnly = formData . get ( 'localOnly' ) === 'true' ;
70+ console . log ( `localOnly: ${ localOnly } ` ) ;
6871 invariant ( typeof workspaceId === 'string' , 'Workspace ID is required' ) ;
6972
7073 const workspace = await models . workspace . getById ( workspaceId ) ;
7174 invariant ( workspace , 'Workspace not found' ) ;
7275
73- const msgObj = await deleteWorkspace ( workspace , project ) ;
76+ const msgObj = await deleteWorkspace ( workspace , project , localOnly ) ;
7477
7578 if ( msgObj ?. error ) {
7679 return msgObj ;
@@ -90,10 +93,13 @@ export const useWorkspaceDeleteActionFetcher = createFetcherSubmitHook(
9093 organizationId,
9194 projectId,
9295 workspaceId,
96+ // for cloud sync workspaces, delete only local file or also delete remote copy
97+ localOnly = 'true' ,
9398 } : {
9499 organizationId : string ;
95100 projectId : string ;
96101 workspaceId : string ;
102+ localOnly ?: 'true' | 'false' ;
97103 } ) => {
98104 const url = href ( '/organization/:organizationId/project/:projectId/workspace/delete' , {
99105 organizationId,
@@ -102,6 +108,7 @@ export const useWorkspaceDeleteActionFetcher = createFetcherSubmitHook(
102108
103109 const formData = new FormData ( ) ;
104110 formData . append ( 'workspaceId' , workspaceId ) ;
111+ formData . append ( 'localOnly' , localOnly ) ;
105112
106113 return submit ( formData , {
107114 action : url ,
0 commit comments