forked from hanydd/BilibiliSponsorBlock
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMessageNotice.tsx
More file actions
56 lines (48 loc) · 1.71 KB
/
MessageNotice.tsx
File metadata and controls
56 lines (48 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import { ConfigProvider, message, theme } from "antd";
import { NoticeType as MessageNoticeType } from "antd/es/message/interface";
import * as React from "react";
import { createRoot } from "react-dom/client";
import { waitFor } from "../utils/";
let messageText: string;
let messageType: MessageNoticeType;
export async function setMessageNotice(darkTheme: boolean = false, checkPageLoaded: () => boolean = () => true) {
await waitFor(() => checkPageLoaded(), 10000, 50);
const container = document.createElement("div");
container.id = "message-notice";
container.style.display = "none";
const root = createRoot(container);
root.render(
<ConfigProvider theme={{ algorithm: darkTheme ? theme.darkAlgorithm : theme.defaultAlgorithm }}>
<MessageApp />
</ConfigProvider>
);
document.body.appendChild(container);
}
const MessageApp: React.FC = () => {
const [messageApi, contextHolder] = message.useMessage({
top: 74,
getContainer: () => document.querySelector("#bilibili-player .bpx-player-container"),
});
function displayMessage() {
messageApi[messageType](messageText);
}
return (
<>
{contextHolder}
<button id="message-button" onClick={displayMessage}></button>
</>
);
};
export function showMessage(message: string, type: MessageNoticeType = "info") {
const button = document.getElementById("message-button");
if (button) {
messageType = type;
messageText = message;
button.click();
} else {
// if the component is not mounted, setup the component first
setMessageNotice().then(() => {
showMessage(message);
});
}
}