-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
useViewTimeline.ts
40 lines (37 loc) · 946 Bytes
/
useViewTimeline.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
import { assign } from "../../core/utils";
import {
ScrollTimelineAxis,
TimelineDefinition,
ViewTimelineInset,
} from "../types";
import { VIEW_TIMELINE } from "../types/internal";
import { useLatestRef } from "./useLatestRef";
import { useStatic } from "./useStatic";
export interface ViewTimelineOpts {
axis?: ScrollTimelineAxis;
inset?: ViewTimelineInset;
}
export const useViewTimeline = (
opts: ViewTimelineOpts = {}
): TimelineDefinition => {
const optsRef = useLatestRef(opts);
return useStatic(() => {
let _target: Element | null;
return assign(
(ref: Element | null) => {
_target = ref;
},
{
_type: VIEW_TIMELINE,
_get: () => {
const { axis, inset } = optsRef.current;
return new ViewTimeline({
subject: _target || document.documentElement,
axis,
inset,
});
},
} as const
);
});
};