Skip to content

Commit 98113b6

Browse files
committed
make meta a function
1 parent f96538e commit 98113b6

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

packages/@headlessui-react/src/hooks/document-overflow/handle-ios-locking.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ export function handleIOSLocking(): ScrollLockStep<ContainerMetadata> {
1515
return {
1616
before({ doc, d, meta }) {
1717
function inAllowedContainer(el: Element) {
18-
return meta.containers
19-
.flatMap((resolve) => resolve())
18+
return meta()
19+
.containers.flatMap((resolve) => resolve())
2020
.some((container) => container.contains(el))
2121
}
2222

packages/@headlessui-react/src/hooks/document-overflow/overflow-store.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export type MetaFn = (meta: Record<string, any>) => Record<string, any>
2424
export interface Context<MetaType extends Record<string, any> = any> {
2525
doc: Document
2626
d: Disposables
27-
meta: MetaType
27+
meta: () => MetaType
2828
}
2929

3030
export interface ScrollLockStep<MetaType extends Record<string, any> = any> {
@@ -62,7 +62,17 @@ export let overflows = createStore(() => new Map<Document, DocEntry>(), {
6262
let ctx = {
6363
doc,
6464
d,
65-
meta: buildMeta(meta),
65+
66+
// The moment we `PUSH`, we also `SCROLL_PREVENT`. But a later `PUSH` will
67+
// not re-trigger a `SCROLL_PREVENT` because we are already in a locked
68+
// state.
69+
//
70+
// This `meta()` function is called lazily such that a `PUSH` or `POP`
71+
// that happens later can update the meta information. Otherwise we would
72+
// use stale meta information.
73+
meta() {
74+
return buildMeta(meta)
75+
},
6676
}
6777

6878
let steps: ScrollLockStep<any>[] = [

0 commit comments

Comments
 (0)