1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-16 08:13:42 +00:00

[PM-5189] Reworking how we handle updating the inline menu position

This commit is contained in:
Cesar Gonzalez
2024-06-18 14:56:27 -05:00
parent 5868bf4030
commit 89ad8e485a

View File

@@ -66,8 +66,8 @@ export class OverlayBackground implements OverlayBackgroundInterface {
private inlineMenuPageTranslations: Record<string, string>; private inlineMenuPageTranslations: Record<string, string>;
private inlineMenuFadeInTimeout: number | NodeJS.Timeout; private inlineMenuFadeInTimeout: number | NodeJS.Timeout;
private delayedCloseTimeout: number | NodeJS.Timeout; private delayedCloseTimeout: number | NodeJS.Timeout;
private repositionInlineMenuDebounce$ = new Subject<chrome.runtime.MessageSender>(); private repositionInlineMenuSubject = new Subject<chrome.runtime.MessageSender>();
private rebuildSubFrameOffsetsThrottle$ = new Subject<chrome.runtime.MessageSender>(); private rebuildSubFrameOffsetsSubject = new Subject<chrome.runtime.MessageSender>();
private focusedFieldData: FocusedFieldData; private focusedFieldData: FocusedFieldData;
private isFieldCurrentlyFocused: boolean = false; private isFieldCurrentlyFocused: boolean = false;
private isFieldCurrentlyFilling: boolean = false; private isFieldCurrentlyFilling: boolean = false;
@@ -140,13 +140,13 @@ export class OverlayBackground implements OverlayBackgroundInterface {
private platformUtilsService: PlatformUtilsService, private platformUtilsService: PlatformUtilsService,
private themeStateService: ThemeStateService, private themeStateService: ThemeStateService,
) { ) {
this.repositionInlineMenuDebounce$ this.repositionInlineMenuSubject
.pipe( .pipe(
debounceTime(500), debounceTime(500),
switchMap((sender) => this.repositionInlineMenu(sender)), switchMap((sender) => this.repositionInlineMenu(sender)),
) )
.subscribe(); .subscribe();
this.rebuildSubFrameOffsetsThrottle$ this.rebuildSubFrameOffsetsSubject
.pipe( .pipe(
throttleTime(600), throttleTime(600),
switchMap((sender) => this.rebuildSubFrameOffsets(sender)), switchMap((sender) => this.rebuildSubFrameOffsets(sender)),
@@ -1315,13 +1315,13 @@ export class OverlayBackground implements OverlayBackgroundInterface {
private async triggerOverlayReposition(sender: chrome.runtime.MessageSender) { private async triggerOverlayReposition(sender: chrome.runtime.MessageSender) {
if (await this.checkShouldRepositionInlineMenu(sender)) { if (await this.checkShouldRepositionInlineMenu(sender)) {
await this.toggleInlineMenuHidden({ isInlineMenuHidden: true }, sender); await this.toggleInlineMenuHidden({ isInlineMenuHidden: true }, sender);
this.repositionInlineMenuDebounce$.next(sender); this.repositionInlineMenuSubject.next(sender);
} }
} }
private async triggerSubFrameFocusInRebuild(sender: chrome.runtime.MessageSender) { private async triggerSubFrameFocusInRebuild(sender: chrome.runtime.MessageSender) {
this.rebuildSubFrameOffsetsThrottle$.next(sender); this.rebuildSubFrameOffsetsSubject.next(sender);
this.repositionInlineMenuDebounce$.next(sender); this.repositionInlineMenuSubject.next(sender);
} }
private repositionInlineMenu = async (sender: chrome.runtime.MessageSender) => { private repositionInlineMenu = async (sender: chrome.runtime.MessageSender) => {
@@ -1341,7 +1341,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
} }
if (this.focusedFieldData.frameId > 0 && sender.frameId !== this.focusedFieldData.frameId) { if (this.focusedFieldData.frameId > 0 && sender.frameId !== this.focusedFieldData.frameId) {
this.rebuildSubFrameOffsetsThrottle$.next(sender); this.rebuildSubFrameOffsetsSubject.next(sender);
} }
await this.updateInlineMenuPositionAfterRepositionEvent(sender); await this.updateInlineMenuPositionAfterRepositionEvent(sender);