-
Notifications
You must be signed in to change notification settings - Fork 754
/
link-replace.dom-effect.ts
41 lines (38 loc) · 1.19 KB
/
link-replace.dom-effect.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
import { map } from "rxjs/operators/map";
import { Inputs } from "../index";
import { filter } from "rxjs/operators/filter";
import { withLatestFrom } from "rxjs/operators/withLatestFrom";
import { Observable } from "rxjs/Observable";
import * as Log from "../log";
import { pluck } from "rxjs/operators/pluck";
import { Events } from "../dom-effects";
export type LinkReplacePayload = {
target: HTMLLinkElement;
nextHref: string;
prevHref: string;
pathname: string;
basename: string;
};
export function linkReplaceDomEffect(
xs: Observable<LinkReplacePayload>,
inputs: Inputs
) {
return xs.pipe(
withLatestFrom<LinkReplacePayload, any>(
inputs.option$.pipe(pluck("injectNotification"))
),
filter(([, inject]) => inject),
map(([incoming, inject]) => {
const message = `[LinkReplace] ${incoming.basename}`;
if (inject === "overlay") {
return Log.overlayInfo(message);
}
return Log.consoleInfo(message);
})
);
}
export function linkReplace(
incoming: LinkReplacePayload
): [Events.LinkReplace, LinkReplacePayload] {
return [Events.LinkReplace, incoming];
}