Skip to content

Commit 22d2cbb

Browse files
authored
fix: always show lwc command, improve message output in push/pull (#7014)
1 parent bbf3f37 commit 22d2cbb

4 files changed

Lines changed: 45 additions & 25 deletions

File tree

packages/salesforcedx-vscode-metadata/package.json

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -287,10 +287,6 @@
287287
"command": "sf.metadata.apex.generate.class",
288288
"when": "salesforcedx-vscode-metadata.showSharedCommands"
289289
},
290-
{
291-
"command": "sf.metadata.lightning.generate.lwc",
292-
"when": "salesforcedx-vscode-metadata.showSharedCommands"
293-
},
294290
{
295291
"command": "sf.metadata.delete.source",
296292
"when": "never"
@@ -393,7 +389,7 @@
393389
},
394390
{
395391
"command": "sf.metadata.lightning.generate.lwc",
396-
"when": "explorerResourceIsFolder && resourceFilename == lwc && salesforcedx-vscode-metadata.showSharedCommands && sf:project_opened"
392+
"when": "explorerResourceIsFolder && resourceFilename == lwc && sf:project_opened"
397393
}
398394
]
399395
},

packages/salesforcedx-vscode-metadata/src/commands/projectDeployStart.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,23 @@
77

88
import { ExtensionProviderService } from '@salesforce/effect-ext-utils';
99
import * as Effect from 'effect/Effect';
10+
import * as vscode from 'vscode';
11+
import { nls } from '../messages';
1012
import { deployComponentSet } from '../shared/deploy/deployComponentSet';
1113

1214
/** Deploy local changes to the default org */
1315
export const projectDeployStartCommand = (ignoreConflicts = false) =>
1416
Effect.gen(function* () {
1517
const api = yield* (yield* ExtensionProviderService).getServicesApi;
16-
const componentSet = yield* (yield* api.services.ComponentSetService).ensureNonEmptyComponentSet(
17-
yield* api.services.MetadataDeployService.getComponentSetForDeploy({ ignoreConflicts })
18-
);
18+
const [componentSetService] = yield* Effect.all([api.services.ComponentSetService], { concurrency: 'unbounded' });
19+
const componentSet = yield* api.services.MetadataDeployService.getComponentSetForDeploy({ ignoreConflicts });
1920

20-
yield* deployComponentSet({ componentSet });
21-
});
21+
const nonEmpty = yield* componentSetService.ensureNonEmptyComponentSet(componentSet);
22+
yield* deployComponentSet({ componentSet: nonEmpty });
23+
}).pipe(
24+
Effect.catchTag('EmptyComponentSetError', () =>
25+
Effect.sync(() => {
26+
void vscode.window.showInformationMessage(nls.localize('no_local_changes_to_deploy'));
27+
})
28+
)
29+
);

packages/salesforcedx-vscode-metadata/src/commands/retrieveStart/projectRetrieveStart.ts

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,19 @@
88
import { ExtensionProviderService } from '@salesforce/effect-ext-utils';
99
import type { ComponentSet } from '@salesforce/source-deploy-retrieve';
1010
import * as Effect from 'effect/Effect';
11+
import * as Schema from 'effect/Schema';
12+
import * as vscode from 'vscode';
1113
import { nls } from '../../messages';
1214
import { retrieveComponentSet } from '../../shared/retrieve/retrieveComponentSet';
1315

16+
class SourceTrackingComponentsFailedError extends Schema.TaggedError<SourceTrackingComponentsFailedError>()(
17+
'SourceTrackingComponentsFailedError',
18+
{
19+
message: Schema.String,
20+
cause: Schema.optional(Schema.Unknown)
21+
}
22+
) {}
23+
1424
// Type guard function to ensure result has expected shape
1525
const isApplyResult = (
1626
value: unknown
@@ -26,8 +36,8 @@ export const projectRetrieveStartCommand = (ignoreConflicts: boolean) =>
2636
yield* Effect.annotateCurrentSpan({ ignoreConflicts });
2737

2838
const api = yield* (yield* ExtensionProviderService).getServicesApi;
29-
const [sourceTrackingService, channelService] = yield* Effect.all(
30-
[api.services.SourceTrackingService, api.services.ChannelService],
39+
const [sourceTrackingService, channelService, componentSetService] = yield* Effect.all(
40+
[api.services.SourceTrackingService, api.services.ChannelService, api.services.ComponentSetService],
3141
{ concurrency: 'unbounded' }
3242
);
3343

@@ -48,26 +58,30 @@ export const projectRetrieveStartCommand = (ignoreConflicts: boolean) =>
4858
const result = yield* Effect.tryPromise({
4959
try: () => tracking.maybeApplyRemoteDeletesToLocal(true),
5060
catch: e =>
51-
new Error(nls.localize('error_source_tracking_components_failed', e instanceof Error ? e.message : String(e)))
61+
new SourceTrackingComponentsFailedError({
62+
message: nls.localize('error_source_tracking_components_failed', e instanceof Error ? e.message : String(e)),
63+
cause: e
64+
})
5265
}).pipe(Effect.withSpan('maybeApplyRemoteDeletesToLocal'));
5366

5467
if (!isApplyResult(result)) {
5568
return yield* Effect.fail(
56-
new Error(nls.localize('error_source_tracking_components_failed', 'Invalid result from source tracking'))
69+
new SourceTrackingComponentsFailedError({
70+
message: nls.localize('error_source_tracking_components_failed', 'Invalid result from source tracking')
71+
})
5772
);
5873
}
5974

6075
const componentSet = result.componentSetFromNonDeletes;
61-
62-
const changeCount = componentSet.size;
76+
const nonEmpty = yield* componentSetService.ensureNonEmptyComponentSet(componentSet);
6377
yield* channelService.appendToChannel(
64-
`Found ${changeCount} remote change${changeCount === 1 ? '' : 's'} to retrieve`
78+
`Found ${nonEmpty.size} remote change${nonEmpty.size === 1 ? '' : 's'} to retrieve`
6579
);
66-
67-
if (componentSet.size === 0) {
68-
yield* channelService.appendToChannel('No remote changes to retrieve');
69-
return;
70-
}
71-
72-
yield* retrieveComponentSet({ componentSet, ignoreConflicts: true });
73-
});
80+
yield* retrieveComponentSet({ componentSet: nonEmpty, ignoreConflicts: true });
81+
}).pipe(
82+
Effect.catchTag('EmptyComponentSetError', () =>
83+
Effect.sync(() => {
84+
void vscode.window.showInformationMessage(nls.localize('no_remote_changes_to_retrieve'));
85+
})
86+
)
87+
);

packages/salesforcedx-vscode-metadata/src/messages/i18n.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ export const messages = {
6060
'You can run SFDX: Retrieve This Source from Org only on a source file or directory.',
6161
retrieve_select_manifest: 'You can run SFDX: Retrieve Source in Manifest from Org only on a manifest file.',
6262
retrieve_completed_with_errors_message: 'Retrieve completed with errors. Check output for details.',
63+
no_remote_changes_to_retrieve: 'No remote changes to retrieve.',
64+
no_local_changes_to_deploy: 'No local changes to deploy.',
6365
retrieve_source_conflicts_detected: 'Conflicts detected. Resolve conflicts before retrieving. \n Conflicts: %s',
6466
error_source_tracking_components_failed: 'Failed to retrieve components using source tracking: %s',
6567
delete_source_text: 'SFDX: Delete from Project and Org',

0 commit comments

Comments
 (0)