@theia/getting-started 1.75.0-next.21 → 1.75.0-next.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/getting-started-contribution.d.ts +30 -2
- package/lib/browser/getting-started-contribution.d.ts.map +1 -1
- package/lib/browser/getting-started-contribution.js +120 -0
- package/lib/browser/getting-started-contribution.js.map +1 -1
- package/lib/browser/getting-started-contribution.spec.d.ts +2 -0
- package/lib/browser/getting-started-contribution.spec.d.ts.map +1 -0
- package/lib/browser/getting-started-contribution.spec.js +152 -0
- package/lib/browser/getting-started-contribution.spec.js.map +1 -0
- package/lib/browser/getting-started-frontend-module.d.ts.map +1 -1
- package/lib/browser/getting-started-frontend-module.js +8 -0
- package/lib/browser/getting-started-frontend-module.js.map +1 -1
- package/lib/browser/getting-started-widget.d.ts +19 -0
- package/lib/browser/getting-started-widget.d.ts.map +1 -1
- package/lib/browser/getting-started-widget.js +57 -2
- package/lib/browser/getting-started-widget.js.map +1 -1
- package/lib/browser/getting-started-widget.spec.d.ts +2 -0
- package/lib/browser/getting-started-widget.spec.d.ts.map +1 -0
- package/lib/browser/getting-started-widget.spec.js +71 -0
- package/lib/browser/getting-started-widget.spec.js.map +1 -0
- package/lib/browser/walkthrough-card.d.ts +8 -0
- package/lib/browser/walkthrough-card.d.ts.map +1 -0
- package/lib/browser/walkthrough-card.js +40 -0
- package/lib/browser/walkthrough-card.js.map +1 -0
- package/lib/browser/walkthrough-card.spec.d.ts +2 -0
- package/lib/browser/walkthrough-card.spec.d.ts.map +1 -0
- package/lib/browser/walkthrough-card.spec.js +188 -0
- package/lib/browser/walkthrough-card.spec.js.map +1 -0
- package/lib/browser/walkthrough-detail.d.ts +19 -0
- package/lib/browser/walkthrough-detail.d.ts.map +1 -0
- package/lib/browser/walkthrough-detail.js +210 -0
- package/lib/browser/walkthrough-detail.js.map +1 -0
- package/lib/browser/walkthrough-detail.spec.d.ts +2 -0
- package/lib/browser/walkthrough-detail.spec.d.ts.map +1 -0
- package/lib/browser/walkthrough-detail.spec.js +409 -0
- package/lib/browser/walkthrough-detail.spec.js.map +1 -0
- package/lib/browser/walkthrough-icon.d.ts +10 -0
- package/lib/browser/walkthrough-icon.d.ts.map +1 -0
- package/lib/browser/walkthrough-icon.js +37 -0
- package/lib/browser/walkthrough-icon.js.map +1 -0
- package/lib/browser/walkthrough-section.d.ts +23 -0
- package/lib/browser/walkthrough-section.d.ts.map +1 -0
- package/lib/browser/walkthrough-section.js +65 -0
- package/lib/browser/walkthrough-section.js.map +1 -0
- package/lib/browser/walkthrough-section.spec.d.ts +2 -0
- package/lib/browser/walkthrough-section.spec.d.ts.map +1 -0
- package/lib/browser/walkthrough-section.spec.js +328 -0
- package/lib/browser/walkthrough-section.spec.js.map +1 -0
- package/lib/browser/walkthrough-service.d.ts +166 -0
- package/lib/browser/walkthrough-service.d.ts.map +1 -0
- package/lib/browser/walkthrough-service.js +505 -0
- package/lib/browser/walkthrough-service.js.map +1 -0
- package/lib/browser/walkthrough-service.spec.d.ts +2 -0
- package/lib/browser/walkthrough-service.spec.d.ts.map +1 -0
- package/lib/browser/walkthrough-service.spec.js +1026 -0
- package/lib/browser/walkthrough-service.spec.js.map +1 -0
- package/lib/common/getting-started-preferences.d.ts +1 -0
- package/lib/common/getting-started-preferences.d.ts.map +1 -1
- package/lib/common/getting-started-preferences.js +5 -0
- package/lib/common/getting-started-preferences.js.map +1 -1
- package/lib/common/walkthrough-commands.d.ts +11 -0
- package/lib/common/walkthrough-commands.d.ts.map +1 -0
- package/lib/common/walkthrough-commands.js +41 -0
- package/lib/common/walkthrough-commands.js.map +1 -0
- package/lib/common/walkthrough-types.d.ts +22 -0
- package/lib/common/walkthrough-types.d.ts.map +1 -0
- package/lib/common/walkthrough-types.js +18 -0
- package/lib/common/walkthrough-types.js.map +1 -0
- package/package.json +8 -7
- package/src/browser/getting-started-contribution.spec.ts +188 -0
- package/src/browser/getting-started-contribution.ts +139 -3
- package/src/browser/getting-started-frontend-module.ts +8 -0
- package/src/browser/getting-started-widget.spec.tsx +88 -0
- package/src/browser/getting-started-widget.tsx +70 -3
- package/src/browser/style/index.css +279 -0
- package/src/browser/walkthrough-card.spec.tsx +247 -0
- package/src/browser/walkthrough-card.tsx +62 -0
- package/src/browser/walkthrough-detail.spec.tsx +675 -0
- package/src/browser/walkthrough-detail.tsx +347 -0
- package/src/browser/walkthrough-icon.tsx +42 -0
- package/src/browser/walkthrough-section.spec.tsx +484 -0
- package/src/browser/walkthrough-section.tsx +119 -0
- package/src/browser/walkthrough-service.spec.ts +1279 -0
- package/src/browser/walkthrough-service.ts +565 -0
- package/src/common/getting-started-preferences.ts +6 -0
- package/src/common/walkthrough-commands.ts +37 -0
- package/src/common/walkthrough-types.ts +39 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.WalkthroughService = exports.WalkthroughPluginSupport = exports.WalkthroughViewEventSource = void 0;
|
|
19
|
+
const tslib_1 = require("tslib");
|
|
20
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
21
|
+
const event_1 = require("@theia/core/lib/common/event");
|
|
22
|
+
const disposable_1 = require("@theia/core/lib/common/disposable");
|
|
23
|
+
const storage_service_1 = require("@theia/core/lib/browser/storage-service");
|
|
24
|
+
const command_1 = require("@theia/core/lib/common/command");
|
|
25
|
+
const preferences_1 = require("@theia/core/lib/common/preferences");
|
|
26
|
+
const context_key_service_1 = require("@theia/core/lib/browser/context-key-service");
|
|
27
|
+
const plugin_protocol_1 = require("@theia/plugin-ext/lib/common/plugin-protocol");
|
|
28
|
+
const opener_service_1 = require("@theia/core/lib/browser/opener-service");
|
|
29
|
+
const logger_1 = require("@theia/core/lib/common/logger");
|
|
30
|
+
const message_service_1 = require("@theia/core/lib/common/message-service");
|
|
31
|
+
const nls_1 = require("@theia/core/lib/common/nls");
|
|
32
|
+
const uri_1 = require("@theia/core/lib/common/uri");
|
|
33
|
+
const getting_started_preferences_1 = require("../common/getting-started-preferences");
|
|
34
|
+
const walkthrough_commands_1 = require("../common/walkthrough-commands");
|
|
35
|
+
exports.WalkthroughViewEventSource = Symbol('WalkthroughViewEventSource');
|
|
36
|
+
exports.WalkthroughPluginSupport = Symbol('WalkthroughPluginSupport');
|
|
37
|
+
const WALKTHROUGH_PROGRESS_KEY = 'walkthrough-progress';
|
|
38
|
+
const ON_CONTEXT_EVENT_PREFIX = 'onContext:';
|
|
39
|
+
let WalkthroughService = class WalkthroughService {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.walkthroughs = new Map();
|
|
42
|
+
/** The definition each walkthrough was registered from, to detect a changed contribution. */
|
|
43
|
+
this.contributionSignatures = new Map();
|
|
44
|
+
this.toDispose = new disposable_1.DisposableCollection();
|
|
45
|
+
this.onDidChangeWalkthroughsEmitter = new event_1.Emitter();
|
|
46
|
+
this.onDidChangeWalkthroughs = this.onDidChangeWalkthroughsEmitter.event;
|
|
47
|
+
this.onDidChangeSelectionEmitter = new event_1.Emitter();
|
|
48
|
+
this.onDidChangeSelection = this.onDidChangeSelectionEmitter.event;
|
|
49
|
+
this.progressState = { completedSteps: {} };
|
|
50
|
+
/** Resolves once the persisted progress has been read and the initial sync has run. */
|
|
51
|
+
this.progressReady = Promise.resolve();
|
|
52
|
+
this.knownPluginIds = new Set();
|
|
53
|
+
this.pluginBaselineEstablished = false;
|
|
54
|
+
}
|
|
55
|
+
init() {
|
|
56
|
+
this.toDispose.push(this.onDidChangeWalkthroughsEmitter);
|
|
57
|
+
this.toDispose.push(this.onDidChangeSelectionEmitter);
|
|
58
|
+
// Plugins are deployed while the progress is still being read. Registering a walkthrough before
|
|
59
|
+
// that would report its completed steps as pending, so every sync waits for the progress.
|
|
60
|
+
this.progressReady = this.loadProgress().then(() => {
|
|
61
|
+
this.syncWalkthroughsFromPlugins();
|
|
62
|
+
this.establishPluginBaseline();
|
|
63
|
+
});
|
|
64
|
+
this.toDispose.push(this.pluginSupport.onDidChangePlugins(() => this.handlePluginsChanged()));
|
|
65
|
+
this.toDispose.push(this.commandRegistry.onDidExecuteCommand(e => {
|
|
66
|
+
this.handleCompletionEvent(`onCommand:${e.commandId}`);
|
|
67
|
+
}));
|
|
68
|
+
this.toDispose.push(this.preferenceService.onPreferenceChanged(e => {
|
|
69
|
+
this.handleCompletionEvent(`onSettingChanged:${e.preferenceName}`);
|
|
70
|
+
}));
|
|
71
|
+
this.toDispose.push(this.viewEventSource.onDidExpandView(viewId => {
|
|
72
|
+
this.handleCompletionEvent(`onView:${viewId}`);
|
|
73
|
+
}));
|
|
74
|
+
this.toDispose.push(this.contextKeyService.onDidChange(event => {
|
|
75
|
+
if (event.affects(this.getContextKeys())) {
|
|
76
|
+
this.completeMatchingContextSteps();
|
|
77
|
+
this.handleVisibilityChanged();
|
|
78
|
+
}
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
async handlePluginsChanged() {
|
|
82
|
+
await this.progressReady;
|
|
83
|
+
const previousIds = this.knownPluginIds;
|
|
84
|
+
const baselineEstablished = this.pluginBaselineEstablished;
|
|
85
|
+
this.syncWalkthroughsFromPlugins();
|
|
86
|
+
this.establishPluginBaseline();
|
|
87
|
+
if (!baselineEstablished) {
|
|
88
|
+
// The plugins deployed while the application was starting are not new installations.
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
for (const newId of this.knownPluginIds) {
|
|
92
|
+
if (!previousIds.has(newId)) {
|
|
93
|
+
this.handleCompletionEvent(`extensionInstalled:${newId}`);
|
|
94
|
+
this.handleExtensionInstalledAutoOpen(newId);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Complete every pending step whose `onContext:` expression currently holds.
|
|
100
|
+
*/
|
|
101
|
+
completeMatchingContextSteps() {
|
|
102
|
+
for (const [walkthroughId, walkthrough] of this.walkthroughs) {
|
|
103
|
+
for (const step of walkthrough.steps) {
|
|
104
|
+
if (step.isComplete || !step.completionEvents) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
for (const completionEvent of step.completionEvents) {
|
|
108
|
+
if (completionEvent.startsWith(ON_CONTEXT_EVENT_PREFIX) && this.contextKeyService.match(completionEvent.substring(ON_CONTEXT_EVENT_PREFIX.length))) {
|
|
109
|
+
this.markStepComplete(walkthroughId, step.id);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The context keys that the `when` clauses and the `onContext:` completion events of all registered
|
|
117
|
+
* walkthroughs depend on.
|
|
118
|
+
*
|
|
119
|
+
* The set is cached because context keys change very frequently, while walkthroughs rarely do.
|
|
120
|
+
*/
|
|
121
|
+
getContextKeys() {
|
|
122
|
+
if (!this.contextKeys) {
|
|
123
|
+
const keys = new Set();
|
|
124
|
+
const collect = (expression) => {
|
|
125
|
+
if (expression) {
|
|
126
|
+
this.contextKeyService.parseKeys(expression)?.forEach(key => keys.add(key));
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
for (const walkthrough of this.walkthroughs.values()) {
|
|
130
|
+
collect(walkthrough.when);
|
|
131
|
+
for (const step of walkthrough.steps) {
|
|
132
|
+
collect(step.when);
|
|
133
|
+
step.completionEvents
|
|
134
|
+
?.filter(event => event.startsWith(ON_CONTEXT_EVENT_PREFIX))
|
|
135
|
+
.forEach(event => collect(event.substring(ON_CONTEXT_EVENT_PREFIX.length)));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.contextKeys = keys;
|
|
139
|
+
}
|
|
140
|
+
return this.contextKeys;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Whether a `when` clause currently holds. A contribution without a `when` clause is always visible.
|
|
144
|
+
*/
|
|
145
|
+
isVisible(when) {
|
|
146
|
+
return !when || this.contextKeyService.match(when);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Restricts a walkthrough to the steps that are currently visible.
|
|
150
|
+
*
|
|
151
|
+
* Hidden steps also stay out of the progress, so that a walkthrough whose remaining steps do not apply to
|
|
152
|
+
* this platform or workspace can still be completed.
|
|
153
|
+
*/
|
|
154
|
+
toVisibleWalkthrough(walkthrough) {
|
|
155
|
+
const steps = walkthrough.steps.filter(step => this.isVisible(step.when));
|
|
156
|
+
return steps.length === walkthrough.steps.length ? walkthrough : { ...walkthrough, steps };
|
|
157
|
+
}
|
|
158
|
+
handleVisibilityChanged() {
|
|
159
|
+
if (this.selectedWalkthroughId !== undefined && !this.selectedWalkthrough) {
|
|
160
|
+
// The selected walkthrough is no longer visible, so the welcome view must not keep showing it.
|
|
161
|
+
this.clearSelection();
|
|
162
|
+
}
|
|
163
|
+
this.onDidChangeWalkthroughsEmitter.fire();
|
|
164
|
+
}
|
|
165
|
+
dispose() {
|
|
166
|
+
this.toDispose.dispose();
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Remember the currently deployed plugins as the set that is not considered newly installed.
|
|
170
|
+
*
|
|
171
|
+
* Plugins are deployed asynchronously while the application starts, so the baseline can only be trusted
|
|
172
|
+
* once plugins have actually arrived. Without this, every plugin of a fresh session would look like a new
|
|
173
|
+
* installation and - with `workbench.welcomePage.walkthroughs.openOnInstall` enabled - open a walkthrough
|
|
174
|
+
* on startup.
|
|
175
|
+
*/
|
|
176
|
+
establishPluginBaseline() {
|
|
177
|
+
this.knownPluginIds = new Set(this.pluginSupport.plugins.map(p => p.model.id));
|
|
178
|
+
if (this.knownPluginIds.size > 0) {
|
|
179
|
+
this.pluginBaselineEstablished = true;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
async loadProgress() {
|
|
183
|
+
this.progressState = await this.storageService.getData(WALKTHROUGH_PROGRESS_KEY, { completedSteps: {} });
|
|
184
|
+
}
|
|
185
|
+
async saveProgress() {
|
|
186
|
+
await this.storageService.setData(WALKTHROUGH_PROGRESS_KEY, this.progressState);
|
|
187
|
+
}
|
|
188
|
+
syncWalkthroughsFromPlugins() {
|
|
189
|
+
const plugins = this.pluginSupport.plugins;
|
|
190
|
+
const seenIds = new Set();
|
|
191
|
+
for (const pluginMeta of plugins) {
|
|
192
|
+
if (pluginMeta.outOfSync) {
|
|
193
|
+
// An uninstalled or disabled plugin stays loaded until the next reload, but its walkthroughs
|
|
194
|
+
// must not be offered any more.
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const unversionedId = plugin_protocol_1.PluginIdentifiers.componentsToUnversionedId(pluginMeta.model);
|
|
198
|
+
if (this.pluginSupport.disabledByTrust.has(unversionedId)) {
|
|
199
|
+
// A plugin restricted by workspace trust contributes nothing, so there is nothing to walk through.
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const deployed = this.pluginSupport.getPlugin(unversionedId);
|
|
203
|
+
if (!deployed?.contributes?.walkthroughs) {
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
for (const contribution of deployed.contributes.walkthroughs) {
|
|
207
|
+
const fullId = `${contribution.pluginId}.${contribution.id}`;
|
|
208
|
+
seenIds.add(fullId);
|
|
209
|
+
// Re-register when the definition changed, for instance because the plugin was updated.
|
|
210
|
+
const signature = JSON.stringify(contribution);
|
|
211
|
+
if (this.contributionSignatures.get(fullId) !== signature) {
|
|
212
|
+
this.contributionSignatures.set(fullId, signature);
|
|
213
|
+
this.registerWalkthrough(contribution);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
let changed = false;
|
|
218
|
+
for (const id of this.walkthroughs.keys()) {
|
|
219
|
+
if (!seenIds.has(id)) {
|
|
220
|
+
this.walkthroughs.delete(id);
|
|
221
|
+
this.contributionSignatures.delete(id);
|
|
222
|
+
this.contextKeys = undefined;
|
|
223
|
+
changed = true;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (changed) {
|
|
227
|
+
if (this.selectedWalkthroughId && !this.walkthroughs.has(this.selectedWalkthroughId)) {
|
|
228
|
+
// The selected walkthrough was contributed by a plugin that is no longer available.
|
|
229
|
+
this.clearSelection();
|
|
230
|
+
}
|
|
231
|
+
this.onDidChangeWalkthroughsEmitter.fire();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
registerWalkthrough(contribution) {
|
|
235
|
+
const fullId = `${contribution.pluginId}.${contribution.id}`;
|
|
236
|
+
const completedSteps = this.progressState.completedSteps[fullId] || [];
|
|
237
|
+
const steps = contribution.steps.map(step => this.toWalkthroughStep(step, completedSteps));
|
|
238
|
+
const walkthrough = {
|
|
239
|
+
id: fullId,
|
|
240
|
+
title: contribution.title,
|
|
241
|
+
description: contribution.description,
|
|
242
|
+
steps,
|
|
243
|
+
when: contribution.when,
|
|
244
|
+
icon: contribution.icon,
|
|
245
|
+
pluginId: contribution.pluginId,
|
|
246
|
+
pluginIcon: contribution.pluginIcon
|
|
247
|
+
};
|
|
248
|
+
this.walkthroughs.set(fullId, walkthrough);
|
|
249
|
+
this.contextKeys = undefined;
|
|
250
|
+
// A context key that is already set has to complete its steps right away; without this, a step keyed on a
|
|
251
|
+
// static context - `onContext:isLinux` for instance - would wait for a change that never comes.
|
|
252
|
+
this.completeMatchingContextSteps();
|
|
253
|
+
this.onDidChangeWalkthroughsEmitter.fire();
|
|
254
|
+
}
|
|
255
|
+
toWalkthroughStep(step, completedSteps) {
|
|
256
|
+
return {
|
|
257
|
+
id: step.id,
|
|
258
|
+
title: step.title,
|
|
259
|
+
description: step.description,
|
|
260
|
+
media: step.media,
|
|
261
|
+
completionEvents: step.completionEvents,
|
|
262
|
+
when: step.when,
|
|
263
|
+
isComplete: completedSteps.includes(step.id)
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* All walkthroughs whose `when` clause currently holds, restricted to their currently visible steps.
|
|
268
|
+
*/
|
|
269
|
+
getWalkthroughs() {
|
|
270
|
+
return Array.from(this.walkthroughs.values())
|
|
271
|
+
.filter(walkthrough => this.isVisible(walkthrough.when))
|
|
272
|
+
.map(walkthrough => this.toVisibleWalkthrough(walkthrough));
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* The walkthrough with the given id, or `undefined` if it is unknown or its `when` clause does not hold.
|
|
276
|
+
*/
|
|
277
|
+
getWalkthrough(id) {
|
|
278
|
+
const walkthrough = this.walkthroughs.get(id);
|
|
279
|
+
return walkthrough && this.isVisible(walkthrough.when) ? this.toVisibleWalkthrough(walkthrough) : undefined;
|
|
280
|
+
}
|
|
281
|
+
async markStepComplete(walkthroughId, stepId) {
|
|
282
|
+
return this.setStepComplete(walkthroughId, stepId, true);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Take the completion mark off a step again, for example when it was completed by mistake.
|
|
286
|
+
*/
|
|
287
|
+
async markStepIncomplete(walkthroughId, stepId) {
|
|
288
|
+
return this.setStepComplete(walkthroughId, stepId, false);
|
|
289
|
+
}
|
|
290
|
+
async setStepComplete(walkthroughId, stepId, isComplete) {
|
|
291
|
+
const walkthrough = this.walkthroughs.get(walkthroughId);
|
|
292
|
+
if (!walkthrough) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const stepIndex = walkthrough.steps.findIndex(s => s.id === stepId);
|
|
296
|
+
if (stepIndex === -1 || walkthrough.steps[stepIndex].isComplete === isComplete) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const updatedSteps = walkthrough.steps.map((s, i) => i === stepIndex ? { ...s, isComplete } : s);
|
|
300
|
+
const updatedWalkthrough = { ...walkthrough, steps: updatedSteps };
|
|
301
|
+
this.walkthroughs.set(walkthroughId, updatedWalkthrough);
|
|
302
|
+
const completedSteps = this.progressState.completedSteps[walkthroughId] ?? [];
|
|
303
|
+
this.progressState.completedSteps[walkthroughId] = isComplete
|
|
304
|
+
? (completedSteps.includes(stepId) ? completedSteps : [...completedSteps, stepId])
|
|
305
|
+
: completedSteps.filter(id => id !== stepId);
|
|
306
|
+
await this.saveProgress();
|
|
307
|
+
this.onDidChangeWalkthroughsEmitter.fire();
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Mark every step of the given walkthrough as complete, persisting the progress once.
|
|
311
|
+
*/
|
|
312
|
+
async markAllStepsComplete(walkthroughId) {
|
|
313
|
+
const walkthrough = this.walkthroughs.get(walkthroughId);
|
|
314
|
+
// Only the steps that apply right now are completed; a hidden step may become relevant again later.
|
|
315
|
+
const visibleStepIds = new Set(this.getWalkthrough(walkthroughId)?.steps.map(step => step.id));
|
|
316
|
+
if (!walkthrough || walkthrough.steps.every(step => step.isComplete || !visibleStepIds.has(step.id))) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
const updatedSteps = walkthrough.steps.map(step => step.isComplete || !visibleStepIds.has(step.id) ? step : { ...step, isComplete: true });
|
|
320
|
+
this.walkthroughs.set(walkthroughId, { ...walkthrough, steps: updatedSteps });
|
|
321
|
+
this.progressState.completedSteps[walkthroughId] = updatedSteps.filter(step => step.isComplete).map(step => step.id);
|
|
322
|
+
await this.saveProgress();
|
|
323
|
+
this.onDidChangeWalkthroughsEmitter.fire();
|
|
324
|
+
}
|
|
325
|
+
async resetProgress(walkthroughId) {
|
|
326
|
+
const walkthrough = this.walkthroughs.get(walkthroughId);
|
|
327
|
+
if (!walkthrough) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
const updatedSteps = walkthrough.steps.map(s => ({ ...s, isComplete: false }));
|
|
331
|
+
const updatedWalkthrough = { ...walkthrough, steps: updatedSteps };
|
|
332
|
+
this.walkthroughs.set(walkthroughId, updatedWalkthrough);
|
|
333
|
+
delete this.progressState.completedSteps[walkthroughId];
|
|
334
|
+
await this.saveProgress();
|
|
335
|
+
this.onDidChangeWalkthroughsEmitter.fire();
|
|
336
|
+
}
|
|
337
|
+
getStepProgress(walkthroughId) {
|
|
338
|
+
const walkthrough = this.getWalkthrough(walkthroughId);
|
|
339
|
+
if (!walkthrough) {
|
|
340
|
+
return { completed: 0, total: 0 };
|
|
341
|
+
}
|
|
342
|
+
const completed = walkthrough.steps.filter(s => s.isComplete).length;
|
|
343
|
+
return { completed, total: walkthrough.steps.length };
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* The walkthrough that is currently opened in the welcome view, if any.
|
|
347
|
+
* While a walkthrough is selected, the welcome view renders it instead of its regular content.
|
|
348
|
+
*/
|
|
349
|
+
get selectedWalkthrough() {
|
|
350
|
+
return this.selectedWalkthroughId === undefined ? undefined : this.getWalkthrough(this.selectedWalkthroughId);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* The step of the {@link selectedWalkthrough} whose content is currently shown, if any.
|
|
354
|
+
*/
|
|
355
|
+
get selectedStep() {
|
|
356
|
+
const walkthrough = this.selectedWalkthrough;
|
|
357
|
+
if (!walkthrough || this.selectedStepId === undefined) {
|
|
358
|
+
return undefined;
|
|
359
|
+
}
|
|
360
|
+
return walkthrough.steps.find(step => step.id === this.selectedStepId);
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Open the given walkthrough in the welcome view and preselect its first pending step.
|
|
364
|
+
* Does nothing if no walkthrough is registered under that id.
|
|
365
|
+
*/
|
|
366
|
+
selectWalkthrough(walkthroughId) {
|
|
367
|
+
const walkthrough = this.getWalkthrough(walkthroughId) ?? this.getWalkthrough(this.fromVSCodeWalkthroughId(walkthroughId));
|
|
368
|
+
if (!walkthrough) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
this.selectedWalkthroughId = walkthrough.id;
|
|
372
|
+
this.selectedStepId = this.getFirstPendingStep(walkthrough)?.id;
|
|
373
|
+
this.onDidChangeSelectionEmitter.fire();
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Show the content of the given step of the currently selected walkthrough.
|
|
377
|
+
*/
|
|
378
|
+
selectStep(stepId) {
|
|
379
|
+
const walkthrough = this.selectedWalkthrough;
|
|
380
|
+
if (!walkthrough || this.selectedStepId === stepId || !walkthrough.steps.some(step => step.id === stepId)) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
this.selectedStepId = stepId;
|
|
384
|
+
this.onDidChangeSelectionEmitter.fire();
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Close the currently selected walkthrough and return the welcome view to its regular content.
|
|
388
|
+
*/
|
|
389
|
+
clearSelection() {
|
|
390
|
+
if (this.selectedWalkthroughId === undefined) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
this.selectedWalkthroughId = undefined;
|
|
394
|
+
this.selectedStepId = undefined;
|
|
395
|
+
this.onDidChangeSelectionEmitter.fire();
|
|
396
|
+
}
|
|
397
|
+
getFirstPendingStep(walkthrough) {
|
|
398
|
+
return walkthrough.steps.find(step => !step.isComplete) ?? walkthrough.steps[0];
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* VS Code refers to a walkthrough as `publisher.name#walkthroughId`, for example in the `command:` links of a
|
|
402
|
+
* step description, while the ids used here are fully dot-separated.
|
|
403
|
+
*/
|
|
404
|
+
fromVSCodeWalkthroughId(walkthroughId) {
|
|
405
|
+
return walkthroughId.replace('#', '.');
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Handle a link click from a walkthrough step description.
|
|
409
|
+
* Fires the `onLink:{url}` completion event and opens the link.
|
|
410
|
+
*
|
|
411
|
+
* Walkthroughs commonly link to `command:` URIs that Theia does not implement. Such a link must not
|
|
412
|
+
* reject unhandled, so the failure is reported to the user instead.
|
|
413
|
+
*/
|
|
414
|
+
async handleLinkClick(url) {
|
|
415
|
+
this.handleCompletionEvent(`onLink:${url}`);
|
|
416
|
+
try {
|
|
417
|
+
await (0, opener_service_1.open)(this.openerService, new uri_1.URI(this.normalizeLinkUrl(url)));
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
421
|
+
this.logger.warn(`Could not open the walkthrough link '${url}'.`, error);
|
|
422
|
+
this.messageService.error(nls_1.nls.localize('theia/getting-started/walkthroughLinkFailed', "Could not open '{0}': {1}", url, reason));
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* VS Code walkthroughs use `command:toSide:<commandId>` to open the result of a command beside the walkthrough.
|
|
427
|
+
* Theia has no generic equivalent, so the command is executed as usual rather than failing to resolve.
|
|
428
|
+
*/
|
|
429
|
+
normalizeLinkUrl(url) {
|
|
430
|
+
const toSidePrefix = 'command:toSide:';
|
|
431
|
+
return url.startsWith(toSidePrefix) ? `command:${url.substring(toSidePrefix.length)}` : url;
|
|
432
|
+
}
|
|
433
|
+
handleCompletionEvent(event) {
|
|
434
|
+
for (const [walkthroughId, walkthrough] of this.walkthroughs) {
|
|
435
|
+
for (const step of walkthrough.steps) {
|
|
436
|
+
if (!step.isComplete && step.completionEvents?.includes(event)) {
|
|
437
|
+
this.markStepComplete(walkthroughId, step.id);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
handleExtensionInstalledAutoOpen(pluginId) {
|
|
443
|
+
if (!this.gettingStartedPreferences['workbench.welcomePage.walkthroughs.openOnInstall']) {
|
|
444
|
+
return;
|
|
445
|
+
}
|
|
446
|
+
for (const walkthrough of this.getWalkthroughs()) {
|
|
447
|
+
if (walkthrough.pluginId === pluginId) {
|
|
448
|
+
this.commandRegistry.executeCommand(walkthrough_commands_1.WalkthroughCommands.OPEN_WALKTHROUGH.id, walkthrough.id);
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
};
|
|
454
|
+
exports.WalkthroughService = WalkthroughService;
|
|
455
|
+
tslib_1.__decorate([
|
|
456
|
+
(0, inversify_1.inject)(storage_service_1.StorageService),
|
|
457
|
+
tslib_1.__metadata("design:type", Object)
|
|
458
|
+
], WalkthroughService.prototype, "storageService", void 0);
|
|
459
|
+
tslib_1.__decorate([
|
|
460
|
+
(0, inversify_1.inject)(command_1.CommandRegistry),
|
|
461
|
+
tslib_1.__metadata("design:type", command_1.CommandRegistry)
|
|
462
|
+
], WalkthroughService.prototype, "commandRegistry", void 0);
|
|
463
|
+
tslib_1.__decorate([
|
|
464
|
+
(0, inversify_1.inject)(preferences_1.PreferenceService),
|
|
465
|
+
tslib_1.__metadata("design:type", Object)
|
|
466
|
+
], WalkthroughService.prototype, "preferenceService", void 0);
|
|
467
|
+
tslib_1.__decorate([
|
|
468
|
+
(0, inversify_1.inject)(context_key_service_1.ContextKeyService),
|
|
469
|
+
tslib_1.__metadata("design:type", Object)
|
|
470
|
+
], WalkthroughService.prototype, "contextKeyService", void 0);
|
|
471
|
+
tslib_1.__decorate([
|
|
472
|
+
(0, inversify_1.inject)(getting_started_preferences_1.GettingStartedPreferences),
|
|
473
|
+
tslib_1.__metadata("design:type", Object)
|
|
474
|
+
], WalkthroughService.prototype, "gettingStartedPreferences", void 0);
|
|
475
|
+
tslib_1.__decorate([
|
|
476
|
+
(0, inversify_1.inject)(exports.WalkthroughPluginSupport),
|
|
477
|
+
tslib_1.__metadata("design:type", Object)
|
|
478
|
+
], WalkthroughService.prototype, "pluginSupport", void 0);
|
|
479
|
+
tslib_1.__decorate([
|
|
480
|
+
(0, inversify_1.inject)(exports.WalkthroughViewEventSource),
|
|
481
|
+
tslib_1.__metadata("design:type", Object)
|
|
482
|
+
], WalkthroughService.prototype, "viewEventSource", void 0);
|
|
483
|
+
tslib_1.__decorate([
|
|
484
|
+
(0, inversify_1.inject)(opener_service_1.OpenerService),
|
|
485
|
+
tslib_1.__metadata("design:type", Object)
|
|
486
|
+
], WalkthroughService.prototype, "openerService", void 0);
|
|
487
|
+
tslib_1.__decorate([
|
|
488
|
+
(0, inversify_1.inject)(message_service_1.MessageService),
|
|
489
|
+
tslib_1.__metadata("design:type", message_service_1.MessageService)
|
|
490
|
+
], WalkthroughService.prototype, "messageService", void 0);
|
|
491
|
+
tslib_1.__decorate([
|
|
492
|
+
(0, inversify_1.inject)(logger_1.ILogger),
|
|
493
|
+
(0, inversify_1.named)('getting-started:WalkthroughService'),
|
|
494
|
+
tslib_1.__metadata("design:type", Object)
|
|
495
|
+
], WalkthroughService.prototype, "logger", void 0);
|
|
496
|
+
tslib_1.__decorate([
|
|
497
|
+
(0, inversify_1.postConstruct)(),
|
|
498
|
+
tslib_1.__metadata("design:type", Function),
|
|
499
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
500
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
501
|
+
], WalkthroughService.prototype, "init", null);
|
|
502
|
+
exports.WalkthroughService = WalkthroughService = tslib_1.__decorate([
|
|
503
|
+
(0, inversify_1.injectable)()
|
|
504
|
+
], WalkthroughService);
|
|
505
|
+
//# sourceMappingURL=walkthrough-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkthrough-service.js","sourceRoot":"","sources":["../../src/browser/walkthrough-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkthrough-service.spec.d.ts","sourceRoot":"","sources":["../../src/browser/walkthrough-service.spec.ts"],"names":[],"mappings":""}
|