Skip to content

Commit ea42ab0

Browse files
authored
fix: prevent tooltip live preview bar from immediately showing session ended state (#135)
1 parent d827d0f commit ea42ab0

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

src/managers/message-manager.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,16 @@ async function handleGistEvents(e: MessageEvent): Promise<void> {
397397
}
398398
const tooltipVisible = await showTooltipComponent(currentMessage);
399399
if (!tooltipVisible) {
400+
const isLivePreview =
401+
Gist.config.isPreviewSession && currentMessage.properties?.gist?.livePreview;
402+
if (isLivePreview) {
403+
log(
404+
`Preview: tooltip positioning failed for "${targetSelector}", preview bar will remain active`
405+
);
406+
currentMessage.firstLoad = false;
407+
currentMessage.isDisplayChange = false;
408+
break;
409+
}
400410
log(
401411
`Tooltip positioning failed for "${targetSelector}", emitting error and cleaning up`
402412
);

src/managers/preview-bar-manager.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
initPreviewBar,
3838
updatePreviewBarMessage,
3939
updatePreviewBarStep,
40+
clearPreviewBarMessage,
4041
destroyPreviewBar,
4142
} from './preview-bar-manager';
4243

@@ -210,6 +211,38 @@ describe('preview-bar-manager', () => {
210211
});
211212
});
212213

214+
describe('clearPreviewBarMessage', () => {
215+
it('shows session ended UI with countdown', () => {
216+
initBarWithMessage();
217+
clearPreviewBarMessage();
218+
219+
const bar = document.getElementById('gist-preview-bar')!;
220+
expect(bar.querySelector('.gist-pb-ended-text')).not.toBeNull();
221+
expect(bar.textContent).toContain('Refreshing in 5s');
222+
});
223+
224+
it('prevents updatePreviewBarMessage from resetting session ended state', () => {
225+
const message = initBarWithMessage();
226+
clearPreviewBarMessage();
227+
228+
updatePreviewBarMessage(message);
229+
230+
const bar = document.getElementById('gist-preview-bar')!;
231+
expect(bar.querySelector('.gist-pb-ended-text')).not.toBeNull();
232+
expect(bar.querySelector('.gist-pb-save-btn')).toBeNull();
233+
});
234+
235+
it('prevents updatePreviewBarStep from resetting session ended state', () => {
236+
initBarWithMessage();
237+
clearPreviewBarMessage();
238+
239+
updatePreviewBarStep('step-2', { displayType: 'modal' });
240+
241+
const bar = document.getElementById('gist-preview-bar')!;
242+
expect(bar.querySelector('.gist-pb-ended-text')).not.toBeNull();
243+
});
244+
});
245+
213246
describe('destroyPreviewBar', () => {
214247
it('removes the bar and styles from the DOM', () => {
215248
initPreviewBar();

src/managers/preview-bar-manager.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,7 @@ export function initPreviewBar(): void {
714714
}
715715

716716
export function updatePreviewBarMessage(message: GistMessage): void {
717-
isSessionEnded = false;
717+
if (isSessionEnded) return;
718718
currentInstanceId = message.instanceId ?? null;
719719
const fullSettings = message.displaySettings as unknown;
720720
if (Array.isArray(fullSettings) && fullSettings.length > 0) {
@@ -773,6 +773,7 @@ export function updatePreviewBarMessage(message: GistMessage): void {
773773
}
774774

775775
export function updatePreviewBarStep(stepName: string, displaySettings: DisplaySettings): void {
776+
if (isSessionEnded) return;
776777
currentStepName = stepName;
777778
const step = currentSteps.find((s) => s.stepName === stepName);
778779

0 commit comments

Comments
 (0)