diff options
Diffstat (limited to 'source/features/conversation-activity-filter.tsx')
-rw-r--r-- | source/features/conversation-activity-filter.tsx | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/source/features/conversation-activity-filter.tsx b/source/features/conversation-activity-filter.tsx index 1683d34b..65ca6131 100644 --- a/source/features/conversation-activity-filter.tsx +++ b/source/features/conversation-activity-filter.tsx @@ -2,14 +2,12 @@ import './conversation-activity-filter.css'; import delay from 'delay'; import React from 'dom-chef'; import select from 'select-dom'; -import elementReady from 'element-ready'; import * as pageDetect from 'github-url-detection'; import {CheckIcon, EyeClosedIcon, EyeIcon, XIcon} from '@primer/octicons-react'; import {wrap} from '../helpers/dom-utils'; import features from '../feature-manager'; import {registerHotkey} from '../github-helpers/hotkey'; -import onConversationHeaderUpdate from '../github-events/on-conversation-header-update'; import observe from '../helpers/selector-observer'; const expectedDropdownWidth = 270; @@ -133,8 +131,9 @@ function createRadios(current: State): JSX.Element[] { )); } -async function addWidget(header: string, state: State): Promise<void> { - const position = (await elementReady(header))!.closest('div')!; +async function addWidget(state: State, anchor: HTMLElement): Promise<void> { + // TODO: use :has instead + const position = anchor.closest('div')!; if (position.classList.contains('rgh-conversation-activity-filter')) { return; } @@ -221,21 +220,24 @@ function switchToNextFilter(): void { } async function init(signal: AbortSignal): Promise<Deinit> { - const state = minorFixesIssuePages.some(url => location.href.startsWith(url)) + const initialState = minorFixesIssuePages.some(url => location.href.startsWith(url)) ? 'hideEventsAndCollapsedComments' // Automatically hide resolved comments on "Minor codebase updates and fixes" issue pages : 'default'; - await addWidget('#partial-discussion-header .gh-header-meta :is(clipboard-copy, .flex-auto)', state); - await addWidget('#partial-discussion-header .gh-header-sticky :is(clipboard-copy, relative-time)', state); + observe([ + '#partial-discussion-header .gh-header-meta :is(clipboard-copy, .flex-auto)', + '#partial-discussion-header .gh-header-sticky :is(clipboard-copy, relative-time)', + ], addWidget.bind(null, initialState), {signal}); - if (state !== 'default') { - applyState(state); + if (initialState !== 'default') { + applyState(initialState); } window.addEventListener('hashchange', uncollapseTargetedComment, {signal}); observe('.js-timeline-item', processItem, {signal}); + // TODO: use signal instead return registerHotkey('h', switchToNextFilter); } @@ -243,12 +245,8 @@ void features.add(import.meta.url, { include: [ pageDetect.isConversation, ], - additionalListeners: [ - onConversationHeaderUpdate, - ], shortcuts: { h: 'Cycle through conversation activity filters', }, - deduplicate: 'has-rgh-inner', init, }); |