Skip to content

Commit 14a3ad0

Browse files
authored
Sequential tours (#6)
* Forbid launching tutorial simultaneously * Disable launch command if a tour is active
1 parent 01a1aea commit 14a3ad0

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

src/index.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ function activate(
6868
},
6969
usage:
7070
'Launch a tour.\nIf no id provided, prompt the user.\nArguments {id: Tour ID}',
71+
isEnabled: () => !manager.activeTutorial,
7172
execute: async args => {
7273
let id = args['id'] as string;
7374
const force =

src/tutorial.ts

+4
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ export class Tutorial implements ITutorial {
113113
return menuButton;
114114
}
115115

116+
isRunning(): boolean {
117+
return this._currentStepIndex >= 0;
118+
}
119+
116120
removeTutorialFromMenu(menu: Menu): Menu.IItem[] {
117121
if (
118122
!menu ||

src/tutorialManager.ts

+13-7
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,10 @@ export class TutorialManager implements ITutorialManager {
6262
}
6363

6464
get activeTutorial(): ITutorial {
65-
console.warn('activeTutorial is deprecated');
66-
return null;
65+
const activeTutorial = this._activeTutorials.filter(tutorial =>
66+
tutorial.isRunning()
67+
);
68+
return activeTutorial[0];
6769
}
6870

6971
/**
@@ -113,7 +115,7 @@ export class TutorialManager implements ITutorialManager {
113115
tutorials: ITutorial[] | string[],
114116
force = true
115117
): Promise<void> {
116-
if (!tutorials || tutorials.length === 0) {
118+
if (!tutorials || tutorials.length === 0 || this.activeTutorial) {
117119
return Promise.resolve();
118120
}
119121
let tutorialGroup: Array<ITutorial | undefined>;
@@ -136,18 +138,21 @@ export class TutorialManager implements ITutorialManager {
136138
);
137139
}
138140

141+
const startTours = (): void => {
142+
this._activeTutorials = tutorialList;
143+
this._tutorialLaunched.emit(tutorialList);
144+
};
145+
139146
if (tutorialList.length > 0) {
140147
if (force) {
141-
this._tutorialLaunched.emit(tutorialList);
148+
startTours();
142149
} else {
143150
INotification.info(`Try the ${tutorialList[0].label}.`, {
144151
autoClose: 10000,
145152
buttons: [
146153
{
147154
label: 'Start now',
148-
callback: (): void => {
149-
this._tutorialLaunched.emit(tutorialList);
150-
}
155+
callback: startTours
151156
},
152157
{
153158
label: "Don't show me again",
@@ -210,6 +215,7 @@ export class TutorialManager implements ITutorialManager {
210215
});
211216
};
212217

218+
private _activeTutorials: Tutorial[] = new Array<Tutorial>();
213219
private _defaultOptions: Partial<TutorialOptions>;
214220
private _menu: MainMenu | undefined;
215221
private _state: IManagerState = {

0 commit comments

Comments
 (0)