|
1 | 1 | import './warning-for-disallow-edits.css'; |
2 | 2 | import React from 'dom-chef'; |
3 | 3 | import {$} from 'select-dom'; |
4 | | -import onetime from 'onetime'; |
5 | 4 | import * as pageDetect from 'github-url-detection'; |
6 | | -import delegate, {DelegateEvent} from 'delegate-it'; |
7 | 5 |
|
8 | 6 | import features from '../feature-manager.js'; |
9 | 7 | import attachElement from '../helpers/attach-element.js'; |
10 | 8 |
|
11 | | -const getWarning = onetime(() => ( |
| 9 | +const getWarning = (): React.JSX.Element => ( |
12 | 10 | <div className="flash flash-error mt-3 rgh-warning-for-disallow-edits"> |
13 | | - <strong>Note:</strong> Maintainers may require changes. It’s easier and faster to allow them to make direct changes before merging. |
| 11 | + <strong>Note:</strong> Maintainers may require changes. It's easier and faster to allow them to make direct changes before merging. |
14 | 12 | </div> |
15 | | -)); |
| 13 | +); |
16 | 14 |
|
17 | | -function update(checkbox: HTMLInputElement): void { |
18 | | - if (checkbox.checked) { |
19 | | - getWarning().remove(); |
20 | | - } else { |
21 | | - attachElement( |
22 | | - checkbox.closest(` |
23 | | - .timeline-comment, |
24 | | - .discussion-sidebar-item > .d-inline-flex |
25 | | - `), |
26 | | - {after: getWarning}, |
27 | | - ); |
28 | | - } |
29 | | -} |
30 | | - |
31 | | -function toggleHandler(event: DelegateEvent<Event, HTMLInputElement>): void { |
32 | | - update(event.delegateTarget); |
33 | | -} |
34 | | - |
35 | | -function init(signal: AbortSignal): void | false { |
| 15 | +function init(): void | false { |
36 | 16 | const checkbox = $('input[name="collab_privs"]'); |
37 | 17 | if (!checkbox) { |
38 | 18 | return false; |
39 | 19 | } |
40 | 20 |
|
41 | | - // TODO: Rewrite with :has selector, maybe in https://github.com/refined-github/refined-github/issues/7574 |
42 | | - update(checkbox); // The sidebar checkbox may already be un-checked |
43 | | - delegate('input[name="collab_privs"]', 'change', toggleHandler, {signal}); |
| 21 | + attachElement( |
| 22 | + checkbox.closest('.discussion-sidebar-item'), |
| 23 | + {after: getWarning}, |
| 24 | + ); |
44 | 25 | } |
45 | 26 |
|
46 | 27 | void features.add(import.meta.url, { |
47 | 28 | include: [ |
48 | 29 | pageDetect.isCompare, |
49 | 30 | pageDetect.isPRConversation, |
50 | | - // No need to exclude `isClosedPR` as the checkbox won't be present |
51 | 31 | ], |
52 | 32 | awaitDomReady: true, |
53 | 33 | init, |
|
0 commit comments