(core) Disable tips during tutorials

Summary: Behavioral tips shouldn't be shown during tutorials.

Test Plan: Browser test.

Reviewers: jarek

Reviewed By: jarek

Differential Revision: https://phab.getgrist.com/D3842
This commit is contained in:
George Gevoian 2023-03-29 15:52:04 -04:00
parent 5b2fb62627
commit 0006e0604b
3 changed files with 23 additions and 1 deletions

View File

@ -35,6 +35,8 @@ interface QueuedTip {
* Tips are shown in the order that they are attached. * Tips are shown in the order that they are attached.
*/ */
export class BehavioralPromptsManager extends Disposable { export class BehavioralPromptsManager extends Disposable {
private _isDisabled: boolean = false;
private readonly _prefs = getUserPrefObs(this._appModel.userPrefsObs, 'behavioralPrompts', private readonly _prefs = getUserPrefObs(this._appModel.userPrefsObs, 'behavioralPrompts',
{ defaultValue: { dontShowTips: false, dismissedTips: [] } }) as Observable<BehavioralPromptPrefs>; { defaultValue: { dontShowTips: false, dismissedTips: [] } }) as Observable<BehavioralPromptPrefs>;
@ -67,8 +69,17 @@ export class BehavioralPromptsManager extends Disposable {
return !this._prefs.get().dontShowTips; return !this._prefs.get().dontShowTips;
} }
public enable() {
this._isDisabled = false;
}
public disable() {
this._isDisabled = true;
}
private _queueTip(refElement: Element, prompt: BehavioralPrompt, options: AttachOptions) { private _queueTip(refElement: Element, prompt: BehavioralPrompt, options: AttachOptions) {
if ( if (
this._isDisabled ||
// Don't show tips if surveying is disabled. // Don't show tips if surveying is disabled.
// TODO: Move this into a dedicated variable - this is only a short-term fix for hiding // TODO: Move this into a dedicated variable - this is only a short-term fix for hiding
// tips in grist-core. // tips in grist-core.

View File

@ -332,6 +332,10 @@ export class GristDoc extends DisposableWithEvents {
} }
})); }));
if (this.docModel.isTutorial()) {
this.behavioralPromptsManager.disable();
}
let isStartingTourOrTutorial = false; let isStartingTourOrTutorial = false;
this.autoDispose(subscribe(urlState().state, async (_use, state) => { this.autoDispose(subscribe(urlState().state, async (_use, state) => {
// Only start a tour or tutorial when the full interface is showing, i.e. not when in // Only start a tour or tutorial when the full interface is showing, i.e. not when in

View File

@ -53,7 +53,7 @@ describe('DocTutorial', function () {
let forkUrl: string; let forkUrl: string;
before(async () => { before(async () => {
session = await gu.session().teamSite.user('user1').login(); session = await gu.session().teamSite.user('user1').login({showTips: true});
}); });
afterEach(() => gu.checkForErrors()); afterEach(() => gu.checkForErrors());
@ -124,6 +124,13 @@ describe('DocTutorial', function () {
/GristDocTutorial/).isPresent()); /GristDocTutorial/).isPresent());
}); });
it('does not show behavioral tips', async function() {
await gu.openPage('Page 1');
await gu.openAddWidgetToPage();
assert.equal(await driver.find('.test-behavioral-prompt').isPresent(), false);
await gu.sendKeys(Key.ESCAPE);
});
it('only allows users access to their own forks', async function() { it('only allows users access to their own forks', async function() {
const otherSession = await gu.session().teamSite.user('user2').login(); const otherSession = await gu.session().teamSite.user('user2').login();
await driver.navigate().to(forkUrl); await driver.navigate().to(forkUrl);