-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
/
Copy pathdocumentTitle.ts
58 lines (49 loc) · 1.45 KB
/
documentTitle.ts
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
57
58
import { IStoreObserverDefinition } from '../StoreObserver';
import { IStoreState } from '../store';
const updateTitle = (getState: () => IStoreState) => {
const {
config,
isLoading
} = getState();
const update_title = config?.update_title;
if (!update_title) {
return;
}
if (isLoading) {
if (document.title !== update_title) {
observer.title = document.title;
document.title = update_title;
}
} else {
if (document.title === update_title) {
document.title = observer.title;
} else {
observer.title = document.title;
}
}
};
const observer: IStoreObserverDefinition<IStoreState> = {
inputs: ['isLoading'],
mutationObserver: undefined,
observer: ({
getState
}) => {
const {
config
} = getState();
if (observer.config !== config) {
observer.config = config;
observer.mutationObserver?.disconnect();
observer.mutationObserver = new MutationObserver(() => updateTitle(getState));
const title = document.querySelector('title');
if (title) {
observer.mutationObserver.observe(
title,
{ subtree: true, childList: true, attributes: true, characterData: true }
);
}
}
updateTitle(getState);
}
};
export default observer;