@theia/getting-started 1.75.0-next.8 → 1.76.0-next.0
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 +125 -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 +27 -0
- package/lib/browser/getting-started-widget.d.ts.map +1 -1
- package/lib/browser/getting-started-widget.js +94 -113
- 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 +32 -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 +192 -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 +38 -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 +61 -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 +9 -8
- package/src/browser/getting-started-contribution.spec.ts +188 -0
- package/src/browser/getting-started-contribution.ts +144 -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 +96 -3
- package/src/browser/style/index.css +285 -0
- package/src/browser/walkthrough-card.spec.tsx +246 -0
- package/src/browser/walkthrough-card.tsx +62 -0
- package/src/browser/walkthrough-detail.spec.tsx +674 -0
- package/src/browser/walkthrough-detail.tsx +347 -0
- package/src/browser/walkthrough-icon.tsx +42 -0
- package/src/browser/walkthrough-section.spec.tsx +483 -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,409 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
4
|
+
// *****************************************************************************
|
|
5
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
6
|
+
//
|
|
7
|
+
// This program and the accompanying materials are made available under the
|
|
8
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
9
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
10
|
+
//
|
|
11
|
+
// This Source Code may also be made available under the following Secondary
|
|
12
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
13
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
14
|
+
// with the GNU Classpath Exception which is available at
|
|
15
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
16
|
+
//
|
|
17
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
18
|
+
// *****************************************************************************
|
|
19
|
+
const assert = require("assert");
|
|
20
|
+
const jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
|
|
21
|
+
let disableJSDOM = (0, jsdom_1.enableJSDOM)();
|
|
22
|
+
const client_1 = require("@theia/core/shared/react-dom/client");
|
|
23
|
+
const disposable_1 = require("@theia/core/lib/common/disposable");
|
|
24
|
+
const walkthrough_detail_1 = require("./walkthrough-detail");
|
|
25
|
+
function createMockStep(overrides) {
|
|
26
|
+
return {
|
|
27
|
+
id: 'step-1',
|
|
28
|
+
title: 'Test Step',
|
|
29
|
+
description: 'A test step description',
|
|
30
|
+
isComplete: false,
|
|
31
|
+
...overrides
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function createMockWalkthrough(overrides) {
|
|
35
|
+
return {
|
|
36
|
+
id: 'test-walkthrough',
|
|
37
|
+
title: 'Test Walkthrough',
|
|
38
|
+
description: 'A test walkthrough description',
|
|
39
|
+
steps: [
|
|
40
|
+
createMockStep({ id: 'step-1', title: 'First Step' }),
|
|
41
|
+
createMockStep({ id: 'step-2', title: 'Second Step' }),
|
|
42
|
+
createMockStep({ id: 'step-3', title: 'Third Step' })
|
|
43
|
+
],
|
|
44
|
+
pluginId: 'test.plugin',
|
|
45
|
+
...overrides
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function createMockMarkdownRenderer() {
|
|
49
|
+
return {
|
|
50
|
+
render: (markdown) => {
|
|
51
|
+
const div = document.createElement('div');
|
|
52
|
+
div.textContent = markdown?.value ?? 'rendered markdown';
|
|
53
|
+
return { element: div, dispose: () => { } };
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function createMockThemeService(themeType = 'dark') {
|
|
58
|
+
return {
|
|
59
|
+
getCurrentTheme: () => ({ id: 'test', label: 'Test', type: themeType }),
|
|
60
|
+
onDidColorThemeChange: () => disposable_1.Disposable.NULL
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function createMockLogger() {
|
|
64
|
+
return { warn: () => { }, error: () => { }, info: () => { }, debug: () => { } };
|
|
65
|
+
}
|
|
66
|
+
describe('WalkthroughDetail', () => {
|
|
67
|
+
let container;
|
|
68
|
+
let root;
|
|
69
|
+
let mockRenderer;
|
|
70
|
+
before(() => disableJSDOM = (0, jsdom_1.enableJSDOM)());
|
|
71
|
+
after(() => disableJSDOM());
|
|
72
|
+
beforeEach(() => {
|
|
73
|
+
container = document.createElement('div');
|
|
74
|
+
document.body.appendChild(container);
|
|
75
|
+
root = (0, client_1.createRoot)(container);
|
|
76
|
+
mockRenderer = createMockMarkdownRenderer();
|
|
77
|
+
});
|
|
78
|
+
afterEach(() => {
|
|
79
|
+
root.unmount();
|
|
80
|
+
document.body.removeChild(container);
|
|
81
|
+
});
|
|
82
|
+
it('should render walkthrough title and back button', done => {
|
|
83
|
+
const walkthrough = createMockWalkthrough({ title: 'Detail Walkthrough' });
|
|
84
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, markdownRenderer: mockRenderer }));
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
const title = container.querySelector('.gs-walkthrough-detail-title');
|
|
87
|
+
assert.ok(title, 'Title element should exist');
|
|
88
|
+
assert.ok(title?.textContent?.includes('Detail Walkthrough'), 'Should contain walkthrough title');
|
|
89
|
+
const backLink = container.querySelector('.gs-walkthrough-back-link');
|
|
90
|
+
assert.ok(backLink, 'Back link should exist');
|
|
91
|
+
// The label is a separate element so that it, and not the arrow icon, can carry the hover underline.
|
|
92
|
+
assert.ok(backLink?.querySelector('.gs-walkthrough-back-label'), 'Back label should be its own element');
|
|
93
|
+
done();
|
|
94
|
+
}, 50);
|
|
95
|
+
});
|
|
96
|
+
it('should render all steps in the step list', done => {
|
|
97
|
+
const walkthrough = createMockWalkthrough({
|
|
98
|
+
steps: [
|
|
99
|
+
createMockStep({ id: 's1', title: 'Step A' }),
|
|
100
|
+
createMockStep({ id: 's2', title: 'Step B' }),
|
|
101
|
+
createMockStep({ id: 's3', title: 'Step C' })
|
|
102
|
+
]
|
|
103
|
+
});
|
|
104
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, markdownRenderer: mockRenderer }));
|
|
105
|
+
setTimeout(() => {
|
|
106
|
+
const stepItems = container.querySelectorAll('.gs-walkthrough-step-item');
|
|
107
|
+
assert.strictEqual(stepItems.length, 3, 'Should render 3 step items');
|
|
108
|
+
const stepTitles = container.querySelectorAll('.gs-walkthrough-step-title');
|
|
109
|
+
assert.ok(stepTitles[0]?.textContent?.includes('Step A'), 'First step should be Step A');
|
|
110
|
+
assert.ok(stepTitles[1]?.textContent?.includes('Step B'), 'Second step should be Step B');
|
|
111
|
+
assert.ok(stepTitles[2]?.textContent?.includes('Step C'), 'Third step should be Step C');
|
|
112
|
+
done();
|
|
113
|
+
}, 50);
|
|
114
|
+
});
|
|
115
|
+
it('should highlight the selected step', done => {
|
|
116
|
+
const selectedStep = createMockStep({ id: 's2', title: 'Selected Step' });
|
|
117
|
+
const walkthrough = createMockWalkthrough({
|
|
118
|
+
steps: [
|
|
119
|
+
createMockStep({ id: 's1', title: 'Step A' }),
|
|
120
|
+
selectedStep,
|
|
121
|
+
createMockStep({ id: 's3', title: 'Step C' })
|
|
122
|
+
]
|
|
123
|
+
});
|
|
124
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, selectedStep: selectedStep, markdownRenderer: mockRenderer }));
|
|
125
|
+
setTimeout(() => {
|
|
126
|
+
const stepItems = container.querySelectorAll('.gs-walkthrough-step-item');
|
|
127
|
+
assert.ok(!stepItems[0].classList.contains('selected'), 'First step should not be selected');
|
|
128
|
+
assert.ok(stepItems[1].classList.contains('selected'), 'Second step should be selected');
|
|
129
|
+
assert.ok(!stepItems[2].classList.contains('selected'), 'Third step should not be selected');
|
|
130
|
+
done();
|
|
131
|
+
}, 50);
|
|
132
|
+
});
|
|
133
|
+
it('should call onBack when back button is clicked', done => {
|
|
134
|
+
const walkthrough = createMockWalkthrough();
|
|
135
|
+
let backCalled = false;
|
|
136
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { backCalled = true; }, markdownRenderer: mockRenderer }));
|
|
137
|
+
setTimeout(() => {
|
|
138
|
+
const backLink = container.querySelector('.gs-walkthrough-back-link');
|
|
139
|
+
assert.ok(backLink, 'Back link should exist');
|
|
140
|
+
backLink.click();
|
|
141
|
+
setTimeout(() => {
|
|
142
|
+
assert.ok(backCalled, 'onBack should have been called');
|
|
143
|
+
done();
|
|
144
|
+
}, 50);
|
|
145
|
+
}, 50);
|
|
146
|
+
});
|
|
147
|
+
it('should call onStepSelect when a step is clicked', done => {
|
|
148
|
+
const steps = [
|
|
149
|
+
createMockStep({ id: 's1', title: 'Step A' }),
|
|
150
|
+
createMockStep({ id: 's2', title: 'Step B' })
|
|
151
|
+
];
|
|
152
|
+
const walkthrough = createMockWalkthrough({ steps });
|
|
153
|
+
let selectedStep;
|
|
154
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: step => { selectedStep = step; }, onBack: () => { }, markdownRenderer: mockRenderer }));
|
|
155
|
+
setTimeout(() => {
|
|
156
|
+
const stepItems = container.querySelectorAll('.gs-walkthrough-step-item');
|
|
157
|
+
stepItems[1].click();
|
|
158
|
+
setTimeout(() => {
|
|
159
|
+
assert.ok(selectedStep, 'onStepSelect should have been called');
|
|
160
|
+
assert.strictEqual(selectedStep?.id, 's2', 'Should select the clicked step');
|
|
161
|
+
done();
|
|
162
|
+
}, 50);
|
|
163
|
+
}, 50);
|
|
164
|
+
});
|
|
165
|
+
it('should render step content for the selected step', done => {
|
|
166
|
+
const selectedStep = createMockStep({
|
|
167
|
+
id: 's1',
|
|
168
|
+
title: 'Content Step',
|
|
169
|
+
description: 'Step with content'
|
|
170
|
+
});
|
|
171
|
+
const walkthrough = createMockWalkthrough({ steps: [selectedStep] });
|
|
172
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, selectedStep: selectedStep, markdownRenderer: mockRenderer }));
|
|
173
|
+
setTimeout(() => {
|
|
174
|
+
const stepContent = container.querySelector('.gs-walkthrough-step-content');
|
|
175
|
+
assert.ok(stepContent, 'Step content section should exist');
|
|
176
|
+
const stepDetail = container.querySelector('.gs-walkthrough-step-detail');
|
|
177
|
+
assert.ok(stepDetail, 'Step detail should exist');
|
|
178
|
+
assert.ok(stepDetail?.textContent?.includes('Content Step'), 'Should show step title');
|
|
179
|
+
const descriptionContainer = container.querySelector('.gs-walkthrough-step-description');
|
|
180
|
+
assert.ok(descriptionContainer, 'Description container should exist');
|
|
181
|
+
assert.ok(descriptionContainer?.textContent?.includes('Step with content'), 'Should show step description via markdown renderer');
|
|
182
|
+
done();
|
|
183
|
+
}, 50);
|
|
184
|
+
});
|
|
185
|
+
it('should not render step content when no step is selected', done => {
|
|
186
|
+
const walkthrough = createMockWalkthrough();
|
|
187
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, markdownRenderer: mockRenderer }));
|
|
188
|
+
setTimeout(() => {
|
|
189
|
+
const stepContent = container.querySelector('.gs-walkthrough-step-content');
|
|
190
|
+
// eslint-disable-next-line no-null/no-null
|
|
191
|
+
assert.strictEqual(stepContent, null, 'Step content should not be rendered');
|
|
192
|
+
done();
|
|
193
|
+
}, 50);
|
|
194
|
+
});
|
|
195
|
+
it('should show completion icon for completed steps', done => {
|
|
196
|
+
const walkthrough = createMockWalkthrough({
|
|
197
|
+
steps: [
|
|
198
|
+
createMockStep({ id: 's1', isComplete: true }),
|
|
199
|
+
createMockStep({ id: 's2', isComplete: false })
|
|
200
|
+
]
|
|
201
|
+
});
|
|
202
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, markdownRenderer: mockRenderer }));
|
|
203
|
+
setTimeout(() => {
|
|
204
|
+
const stepItems = container.querySelectorAll('.gs-walkthrough-step-item');
|
|
205
|
+
assert.ok(stepItems[0].classList.contains('completed'), 'Completed step should have completed class');
|
|
206
|
+
assert.ok(!stepItems[1].classList.contains('completed'), 'Incomplete step should not have completed class');
|
|
207
|
+
const icons = container.querySelectorAll('.gs-walkthrough-step-icon');
|
|
208
|
+
assert.ok(icons[0].classList.contains('codicon-pass-filled'), 'Completed step should have pass-filled icon');
|
|
209
|
+
assert.ok(icons[1].classList.contains('codicon-circle-large-outline'), 'Incomplete step should have circle-outline icon');
|
|
210
|
+
done();
|
|
211
|
+
}, 50);
|
|
212
|
+
});
|
|
213
|
+
it('should render image media for selected step', done => {
|
|
214
|
+
const selectedStep = createMockStep({
|
|
215
|
+
id: 's1',
|
|
216
|
+
media: { image: '/path/to/image.png', altText: 'test image' }
|
|
217
|
+
});
|
|
218
|
+
const walkthrough = createMockWalkthrough({ steps: [selectedStep] });
|
|
219
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, selectedStep: selectedStep, markdownRenderer: mockRenderer }));
|
|
220
|
+
setTimeout(() => {
|
|
221
|
+
const img = container.querySelector('.gs-walkthrough-media-image');
|
|
222
|
+
assert.ok(img, 'Image element should exist');
|
|
223
|
+
assert.strictEqual(img.getAttribute('src'), '/path/to/image.png', 'Image src should be set');
|
|
224
|
+
assert.strictEqual(img.getAttribute('alt'), 'test image', 'Image alt should be set');
|
|
225
|
+
done();
|
|
226
|
+
}, 50);
|
|
227
|
+
});
|
|
228
|
+
it('should render SVG media for selected step', done => {
|
|
229
|
+
const selectedStep = createMockStep({
|
|
230
|
+
id: 's1',
|
|
231
|
+
media: { svg: '/path/to/graphic.svg' }
|
|
232
|
+
});
|
|
233
|
+
const walkthrough = createMockWalkthrough({ steps: [selectedStep] });
|
|
234
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, selectedStep: selectedStep, markdownRenderer: mockRenderer }));
|
|
235
|
+
setTimeout(() => {
|
|
236
|
+
const img = container.querySelector('.gs-walkthrough-media-image');
|
|
237
|
+
assert.ok(img, 'SVG image element should exist');
|
|
238
|
+
assert.strictEqual(img.getAttribute('src'), '/path/to/graphic.svg', 'SVG src should be set');
|
|
239
|
+
done();
|
|
240
|
+
}, 50);
|
|
241
|
+
});
|
|
242
|
+
it('should turn single newlines in a description into Markdown hard breaks', done => {
|
|
243
|
+
const renderedMarkdown = [];
|
|
244
|
+
const recordingRenderer = {
|
|
245
|
+
render: (markdown) => {
|
|
246
|
+
renderedMarkdown.push(markdown.value);
|
|
247
|
+
return { element: document.createElement('div'), dispose: () => { } };
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
const selectedStep = createMockStep({
|
|
251
|
+
id: 's1',
|
|
252
|
+
description: 'First line\nSecond line\n\nNew paragraph'
|
|
253
|
+
});
|
|
254
|
+
const walkthrough = createMockWalkthrough({ steps: [selectedStep] });
|
|
255
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, selectedStep: selectedStep, markdownRenderer: recordingRenderer }));
|
|
256
|
+
setTimeout(() => {
|
|
257
|
+
const description = renderedMarkdown.find(value => value.includes('First line'));
|
|
258
|
+
assert.ok(description, 'The description should have been rendered');
|
|
259
|
+
assert.ok(description?.includes('First line \nSecond line'), 'A single newline should become a hard break');
|
|
260
|
+
assert.ok(description?.includes('Second line\n\nNew paragraph'), 'A blank line should stay a paragraph break');
|
|
261
|
+
done();
|
|
262
|
+
}, 50);
|
|
263
|
+
});
|
|
264
|
+
it('should mark a step done when its step icon is clicked, without selecting the step', done => {
|
|
265
|
+
const step = createMockStep({ id: 's1', isComplete: false });
|
|
266
|
+
const walkthrough = createMockWalkthrough({ steps: [step] });
|
|
267
|
+
let markedStep;
|
|
268
|
+
let selectedStep;
|
|
269
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: s => { selectedStep = s; }, onBack: () => { }, markdownRenderer: mockRenderer, onToggleStepDone: s => { markedStep = s; } }));
|
|
270
|
+
setTimeout(() => {
|
|
271
|
+
const icon = container.querySelector('.gs-walkthrough-step-icon');
|
|
272
|
+
assert.ok(icon, 'Step icon should exist');
|
|
273
|
+
icon.click();
|
|
274
|
+
setTimeout(() => {
|
|
275
|
+
assert.strictEqual(markedStep?.id, 's1', 'onToggleStepDone should receive the step');
|
|
276
|
+
assert.strictEqual(selectedStep, undefined, 'Clicking the icon should not select the step');
|
|
277
|
+
done();
|
|
278
|
+
}, 50);
|
|
279
|
+
}, 50);
|
|
280
|
+
});
|
|
281
|
+
it('should toggle a completed step back to pending when its step icon is clicked', done => {
|
|
282
|
+
const step = createMockStep({ id: 's1', isComplete: true });
|
|
283
|
+
const walkthrough = createMockWalkthrough({ steps: [step] });
|
|
284
|
+
let toggledStep;
|
|
285
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, markdownRenderer: mockRenderer, onToggleStepDone: s => { toggledStep = s; } }));
|
|
286
|
+
setTimeout(() => {
|
|
287
|
+
const icon = container.querySelector('.gs-walkthrough-step-icon');
|
|
288
|
+
assert.strictEqual(icon.getAttribute('aria-checked'), 'true', 'A completed step should read as checked');
|
|
289
|
+
icon.click();
|
|
290
|
+
setTimeout(() => {
|
|
291
|
+
assert.strictEqual(toggledStep?.id, 's1', 'onToggleStepDone should receive the completed step');
|
|
292
|
+
done();
|
|
293
|
+
}, 50);
|
|
294
|
+
}, 50);
|
|
295
|
+
});
|
|
296
|
+
it('should offer a Mark All Done action below the step list', done => {
|
|
297
|
+
const walkthrough = createMockWalkthrough({
|
|
298
|
+
steps: [createMockStep({ id: 's1' }), createMockStep({ id: 's2' })]
|
|
299
|
+
});
|
|
300
|
+
let markedAll = false;
|
|
301
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, markdownRenderer: mockRenderer, onMarkAllStepsDone: () => { markedAll = true; } }));
|
|
302
|
+
setTimeout(() => {
|
|
303
|
+
const button = container.querySelector('.gs-walkthrough-mark-all-done');
|
|
304
|
+
assert.ok(button, 'Mark All Done button should exist');
|
|
305
|
+
assert.ok(button.closest('.gs-walkthrough-steps'), 'It should sit with the step list');
|
|
306
|
+
assert.ok(!button.disabled, 'It should be enabled while steps are pending');
|
|
307
|
+
button.click();
|
|
308
|
+
setTimeout(() => {
|
|
309
|
+
assert.strictEqual(markedAll, true, 'onMarkAllStepsDone should have been called');
|
|
310
|
+
done();
|
|
311
|
+
}, 50);
|
|
312
|
+
}, 50);
|
|
313
|
+
});
|
|
314
|
+
it('should disable Mark All Done once every step is complete', done => {
|
|
315
|
+
const walkthrough = createMockWalkthrough({
|
|
316
|
+
steps: [createMockStep({ id: 's1', isComplete: true }), createMockStep({ id: 's2', isComplete: true })]
|
|
317
|
+
});
|
|
318
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, markdownRenderer: mockRenderer, onMarkAllStepsDone: () => { } }));
|
|
319
|
+
setTimeout(() => {
|
|
320
|
+
const button = container.querySelector('.gs-walkthrough-mark-all-done');
|
|
321
|
+
assert.ok(button, 'Mark All Done button should exist');
|
|
322
|
+
assert.ok(button.disabled, 'It should be disabled when nothing is left to complete');
|
|
323
|
+
done();
|
|
324
|
+
}, 50);
|
|
325
|
+
});
|
|
326
|
+
it('should keep `command:` links as plain inline links', done => {
|
|
327
|
+
const selectedStep = createMockStep({ id: 's1', description: '[Do it](command:my.command)' });
|
|
328
|
+
const walkthrough = createMockWalkthrough({ steps: [selectedStep] });
|
|
329
|
+
const linkRenderer = {
|
|
330
|
+
render: () => {
|
|
331
|
+
const div = document.createElement('div');
|
|
332
|
+
const anchor = document.createElement('a');
|
|
333
|
+
anchor.setAttribute('data-href', 'command:my.command');
|
|
334
|
+
anchor.textContent = 'Do it';
|
|
335
|
+
div.appendChild(anchor);
|
|
336
|
+
return { element: div, dispose: () => { } };
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, selectedStep: selectedStep, markdownRenderer: linkRenderer }));
|
|
340
|
+
setTimeout(() => {
|
|
341
|
+
const anchor = container.querySelector('.gs-walkthrough-step-description a');
|
|
342
|
+
assert.ok(anchor, 'The command link should be rendered');
|
|
343
|
+
assert.ok(!anchor.classList.contains('theia-button'), 'A command link should not be styled as a button');
|
|
344
|
+
done();
|
|
345
|
+
}, 50);
|
|
346
|
+
});
|
|
347
|
+
it('should pick the image variant matching the current theme and resolve the plugin resource', done => {
|
|
348
|
+
const selectedStep = createMockStep({
|
|
349
|
+
id: 's1',
|
|
350
|
+
media: {
|
|
351
|
+
image: {
|
|
352
|
+
dark: 'hostedPlugin/pub_name/dark.png',
|
|
353
|
+
light: 'hostedPlugin/pub_name/light.png',
|
|
354
|
+
hc: 'hostedPlugin/pub_name/hc.png',
|
|
355
|
+
hcLight: 'hostedPlugin/pub_name/hc-light.png'
|
|
356
|
+
},
|
|
357
|
+
altText: 'themed'
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
const walkthrough = createMockWalkthrough({ steps: [selectedStep] });
|
|
361
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService('light'), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, selectedStep: selectedStep, markdownRenderer: mockRenderer }));
|
|
362
|
+
setTimeout(() => {
|
|
363
|
+
const img = container.querySelector('.gs-walkthrough-media-image');
|
|
364
|
+
assert.ok(img, 'Image element should exist');
|
|
365
|
+
const src = img.getAttribute('src');
|
|
366
|
+
assert.ok(src.includes('light.png'), `Should use the light variant, was '${src}'`);
|
|
367
|
+
assert.ok(!src.startsWith('hostedPlugin/'), `Should resolve against the backend endpoint, was '${src}'`);
|
|
368
|
+
done();
|
|
369
|
+
}, 50);
|
|
370
|
+
});
|
|
371
|
+
it('should not render completion actions inside the step content', done => {
|
|
372
|
+
const selectedStep = createMockStep({ id: 's1', isComplete: false });
|
|
373
|
+
const walkthrough = createMockWalkthrough({ steps: [selectedStep] });
|
|
374
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, selectedStep: selectedStep, markdownRenderer: mockRenderer, onToggleStepDone: () => { }, onMarkAllStepsDone: () => { } }));
|
|
375
|
+
setTimeout(() => {
|
|
376
|
+
const content = container.querySelector('.gs-walkthrough-step-content');
|
|
377
|
+
// eslint-disable-next-line no-null/no-null
|
|
378
|
+
assert.strictEqual(content.querySelector('button'), null, 'The step content should carry no buttons');
|
|
379
|
+
// eslint-disable-next-line no-null/no-null
|
|
380
|
+
assert.strictEqual(content.querySelector('.gs-walkthrough-step-done'), null, 'The step content should carry no done indicator');
|
|
381
|
+
done();
|
|
382
|
+
}, 50);
|
|
383
|
+
});
|
|
384
|
+
it('should render markdown media as trusted and with an action handler, so that its links work', done => {
|
|
385
|
+
const originalFetch = global.fetch;
|
|
386
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
387
|
+
global.fetch = () => Promise.resolve({ ok: true, text: () => Promise.resolve('[Run](command:my.command)') });
|
|
388
|
+
const captured = [];
|
|
389
|
+
const recordingRenderer = {
|
|
390
|
+
render: (markdown, options) => {
|
|
391
|
+
captured.push({ ...markdown, options });
|
|
392
|
+
return { element: document.createElement('div'), dispose: () => { } };
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
const selectedStep = createMockStep({ id: 's1', media: { markdown: 'content.md' } });
|
|
396
|
+
const walkthrough = createMockWalkthrough({ steps: [selectedStep] });
|
|
397
|
+
root.render((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { logger: createMockLogger(), themeService: createMockThemeService(), walkthrough: walkthrough, onStepSelect: () => { }, onBack: () => { }, selectedStep: selectedStep, markdownRenderer: recordingRenderer, onLinkClick: () => { } }));
|
|
398
|
+
setTimeout(() => {
|
|
399
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
400
|
+
global.fetch = originalFetch;
|
|
401
|
+
const media = captured.find(entry => entry.value.includes('command:my.command'));
|
|
402
|
+
assert.ok(media, 'The media content should have been rendered');
|
|
403
|
+
assert.strictEqual(media?.isTrusted, true, 'Media has to be trusted, otherwise command links are stripped');
|
|
404
|
+
assert.ok(media?.options?.actionHandler, 'Media needs an action handler, otherwise its links are inert');
|
|
405
|
+
done();
|
|
406
|
+
}, 50);
|
|
407
|
+
});
|
|
408
|
+
});
|
|
409
|
+
//# sourceMappingURL=walkthrough-detail.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkthrough-detail.spec.js","sourceRoot":"","sources":["../../src/browser/walkthrough-detail.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from '@theia/core/shared/react';
|
|
2
|
+
import { Walkthrough } from '../common/walkthrough-types';
|
|
3
|
+
/**
|
|
4
|
+
* Renders the icon of a walkthrough: the codicon it contributes itself if there is one, otherwise the icon
|
|
5
|
+
* of the extension it comes from. Renders nothing when neither is available.
|
|
6
|
+
*/
|
|
7
|
+
export declare function WalkthroughIcon(props: {
|
|
8
|
+
walkthrough: Walkthrough;
|
|
9
|
+
}): React.ReactElement | undefined;
|
|
10
|
+
//# sourceMappingURL=walkthrough-icon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkthrough-icon.d.ts","sourceRoot":"","sources":["../../src/browser/walkthrough-icon.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,WAAW,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,GAAG,SAAS,CAgBnG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WalkthroughIcon = WalkthroughIcon;
|
|
4
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
5
|
+
// *****************************************************************************
|
|
6
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
7
|
+
//
|
|
8
|
+
// This program and the accompanying materials are made available under the
|
|
9
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
10
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
11
|
+
//
|
|
12
|
+
// This Source Code may also be made available under the following Secondary
|
|
13
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
14
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
15
|
+
// with the GNU Classpath Exception which is available at
|
|
16
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
17
|
+
//
|
|
18
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
19
|
+
// *****************************************************************************
|
|
20
|
+
const browser_1 = require("@theia/core/lib/browser");
|
|
21
|
+
const React = require("@theia/core/shared/react");
|
|
22
|
+
const plugin_shared_style_1 = require("@theia/plugin-ext/lib/main/browser/plugin-shared-style");
|
|
23
|
+
/**
|
|
24
|
+
* Renders the icon of a walkthrough: the codicon it contributes itself if there is one, otherwise the icon
|
|
25
|
+
* of the extension it comes from. Renders nothing when neither is available.
|
|
26
|
+
*/
|
|
27
|
+
function WalkthroughIcon(props) {
|
|
28
|
+
const { walkthrough } = props;
|
|
29
|
+
const [failed, setFailed] = React.useState(false);
|
|
30
|
+
if (walkthrough.icon) {
|
|
31
|
+
return (0, jsx_runtime_1.jsx)("span", { className: `gs-walkthrough-icon ${(0, browser_1.codicon)(walkthrough.icon)}` });
|
|
32
|
+
}
|
|
33
|
+
if (walkthrough.pluginIcon && !failed) {
|
|
34
|
+
return (0, jsx_runtime_1.jsx)("img", { className: 'gs-walkthrough-icon gs-walkthrough-plugin-icon', src: plugin_shared_style_1.PluginSharedStyle.toExternalIconUrl(walkthrough.pluginIcon), alt: '', onError: () => setFailed(true) });
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=walkthrough-icon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkthrough-icon.js","sourceRoot":"","sources":["../../src/browser/walkthrough-icon.tsx"],"names":[],"mappings":";;AAyBA,0CAgBC;;AAzCD,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAEhF,qDAAkD;AAClD,kDAAkD;AAClD,gGAA2F;AAG3F;;;GAGG;AACH,SAAgB,eAAe,CAAC,KAAmC;IAC/D,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC9B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,iCAAM,SAAS,EAAE,uBAAuB,IAAA,iBAAO,EAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAS,CAAC;IACxF,CAAC;IACD,IAAI,WAAW,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,gCACH,SAAS,EAAC,gDAAgD,EAC1D,GAAG,EAAE,uCAAiB,CAAC,iBAAiB,CAAC,WAAW,CAAC,UAAU,CAAC,EAChE,GAAG,EAAC,EAAE,EACN,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAChC,CAAC;IACP,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { MarkdownRenderer } from '@theia/core/lib/browser/markdown-rendering/markdown-renderer';
|
|
2
|
+
import { ThemeService } from '@theia/core/lib/browser/theming';
|
|
3
|
+
import { ILogger } from '@theia/core/lib/common/logger';
|
|
4
|
+
import * as React from '@theia/core/shared/react';
|
|
5
|
+
import { WalkthroughService } from './walkthrough-service';
|
|
6
|
+
export interface WalkthroughSectionProps {
|
|
7
|
+
walkthroughService: WalkthroughService;
|
|
8
|
+
markdownRenderer: MarkdownRenderer;
|
|
9
|
+
themeService: ThemeService;
|
|
10
|
+
logger: ILogger;
|
|
11
|
+
/** Offers all walkthroughs for selection, completed ones included. */
|
|
12
|
+
onShowAll?: () => void;
|
|
13
|
+
}
|
|
14
|
+
/** How many walkthroughs are listed on the welcome page. */
|
|
15
|
+
export declare const WALKTHROUGH_LIST_LIMIT = 2;
|
|
16
|
+
/**
|
|
17
|
+
* Renders the list of contributed walkthroughs, or the currently selected walkthrough.
|
|
18
|
+
*
|
|
19
|
+
* The selection is owned by the {@link WalkthroughService} rather than by this component, so that the
|
|
20
|
+
* welcome view can give the selected walkthrough the whole view instead of a single section.
|
|
21
|
+
*/
|
|
22
|
+
export declare function WalkthroughSection(props: WalkthroughSectionProps): React.ReactElement;
|
|
23
|
+
//# sourceMappingURL=walkthrough-section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkthrough-section.d.ts","sourceRoot":"","sources":["../../src/browser/walkthrough-section.tsx"],"names":[],"mappings":"AAiBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAGxD,OAAO,KAAK,KAAK,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,WAAW,uBAAuB;IACpC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,KAAK,CAAC,YAAY,CAwErF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WALKTHROUGH_LIST_LIMIT = void 0;
|
|
4
|
+
exports.WalkthroughSection = WalkthroughSection;
|
|
5
|
+
const jsx_runtime_1 = require("@theia/core/shared/react/jsx-runtime");
|
|
6
|
+
// *****************************************************************************
|
|
7
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
8
|
+
//
|
|
9
|
+
// This program and the accompanying materials are made available under the
|
|
10
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
11
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
12
|
+
//
|
|
13
|
+
// This Source Code may also be made available under the following Secondary
|
|
14
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
15
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
16
|
+
// with the GNU Classpath Exception which is available at
|
|
17
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
18
|
+
//
|
|
19
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
20
|
+
// *****************************************************************************
|
|
21
|
+
const browser_1 = require("@theia/core/lib/browser");
|
|
22
|
+
const disposable_1 = require("@theia/core/lib/common/disposable");
|
|
23
|
+
const nls_1 = require("@theia/core/lib/common/nls");
|
|
24
|
+
const React = require("@theia/core/shared/react");
|
|
25
|
+
const walkthrough_card_1 = require("./walkthrough-card");
|
|
26
|
+
const walkthrough_detail_1 = require("./walkthrough-detail");
|
|
27
|
+
/** How many walkthroughs are listed on the welcome page. */
|
|
28
|
+
exports.WALKTHROUGH_LIST_LIMIT = 2;
|
|
29
|
+
/**
|
|
30
|
+
* Renders the list of contributed walkthroughs, or the currently selected walkthrough.
|
|
31
|
+
*
|
|
32
|
+
* The selection is owned by the {@link WalkthroughService} rather than by this component, so that the
|
|
33
|
+
* welcome view can give the selected walkthrough the whole view instead of a single section.
|
|
34
|
+
*/
|
|
35
|
+
function WalkthroughSection(props) {
|
|
36
|
+
const { walkthroughService } = props;
|
|
37
|
+
const [, forceUpdate] = React.useReducer((version) => version + 1, 0);
|
|
38
|
+
React.useEffect(() => {
|
|
39
|
+
const toDispose = new disposable_1.DisposableCollection(walkthroughService.onDidChangeWalkthroughs(() => forceUpdate()), walkthroughService.onDidChangeSelection(() => forceUpdate()));
|
|
40
|
+
return () => toDispose.dispose();
|
|
41
|
+
}, [walkthroughService]);
|
|
42
|
+
const selectedWalkthrough = walkthroughService.selectedWalkthrough;
|
|
43
|
+
if (selectedWalkthrough) {
|
|
44
|
+
return ((0, jsx_runtime_1.jsx)(walkthrough_detail_1.WalkthroughDetail, { walkthrough: selectedWalkthrough, onStepSelect: step => walkthroughService.selectStep(step.id), onBack: () => walkthroughService.clearSelection(), selectedStep: walkthroughService.selectedStep, markdownRenderer: props.markdownRenderer, onLinkClick: url => walkthroughService.handleLinkClick(url), onToggleStepDone: step => step.isComplete
|
|
45
|
+
? walkthroughService.markStepIncomplete(selectedWalkthrough.id, step.id)
|
|
46
|
+
: walkthroughService.markStepComplete(selectedWalkthrough.id, step.id), onMarkAllStepsDone: () => walkthroughService.markAllStepsComplete(selectedWalkthrough.id), themeService: props.themeService, logger: props.logger }));
|
|
47
|
+
}
|
|
48
|
+
const walkthroughs = walkthroughService.getWalkthroughs();
|
|
49
|
+
if (walkthroughs.length === 0) {
|
|
50
|
+
return (0, jsx_runtime_1.jsx)(React.Fragment, {});
|
|
51
|
+
}
|
|
52
|
+
// A finished walkthrough has nothing left to offer here; it stays reachable through `onShowAll`.
|
|
53
|
+
const pending = walkthroughs.filter(walkthrough => walkthrough.steps.some(step => !step.isComplete));
|
|
54
|
+
const listed = pending.slice(0, exports.WALKTHROUGH_LIST_LIMIT);
|
|
55
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: 'gs-section', children: [(0, jsx_runtime_1.jsxs)("h3", { className: 'gs-section-header', children: [(0, jsx_runtime_1.jsx)("i", { className: (0, browser_1.codicon)('compass') }), nls_1.nls.localizeByDefault('Walkthroughs')] }), (0, jsx_runtime_1.jsx)("div", { className: 'gs-walkthrough-cards', children: listed.map(walkthrough => ((0, jsx_runtime_1.jsx)(walkthrough_card_1.WalkthroughCard, { walkthrough: walkthrough, onSelect: (selected) => walkthroughService.selectWalkthrough(selected.id) }, walkthrough.id))) }), props.onShowAll && walkthroughs.length > listed.length && ((0, jsx_runtime_1.jsx)("a", { role: 'button', tabIndex: 0, className: 'gs-walkthrough-more', onClick: props.onShowAll, onKeyDown: (e) => {
|
|
56
|
+
if (e.key === 'Enter') {
|
|
57
|
+
props.onShowAll?.();
|
|
58
|
+
}
|
|
59
|
+
}, children: nls_1.nls.localizeByDefault('More...') }))] }));
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=walkthrough-section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkthrough-section.js","sourceRoot":"","sources":["../../src/browser/walkthrough-section.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkthrough-section.spec.d.ts","sourceRoot":"","sources":["../../src/browser/walkthrough-section.spec.tsx"],"names":[],"mappings":""}
|