Skip to content

Commit ec07614

Browse files
authored
fix: Change to allow each overlay provider to have a unique ID (#161)
* feat: Change to allow each overlay provider to have a unique event ID * Create quick-humans-bathe.md * Update quick-humans-bathe.md
1 parent 2fe5b84 commit ec07614

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

.changeset/quick-humans-bathe.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
"overlay-kit": patch
3+
---
4+
5+
feat: Change to allow each overlay provider to have a unique event ID
6+
7+
Each overlay provider now uses a unique event ID instead of relying on shared global identifiers.
8+
9+
This change improves event handling accuracy and avoids potential collisions when managing multiple overlays from different providers.
10+
It is backward-compatible for existing overlays that do not explicitly set a provider-specific ID.

packages/src/context/provider/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { useCallback, useEffect, useReducer, type PropsWithChildren } from 'react';
22
import { ContentOverlayController } from './content-overlay-controller';
33
import { type OverlayEvent, createOverlay } from '../../event';
4+
import { randomId } from '../../utils/random-id';
45
import { createOverlaySafeContext } from '../context';
56
import { overlayReducer } from '../reducer';
67

78
export function createOverlayProvider() {
8-
const { useOverlayEvent, ...overlay } = createOverlay();
9+
const overlayId = randomId();
10+
const { useOverlayEvent, ...overlay } = createOverlay(overlayId);
911
const { OverlayContextProvider, useCurrentOverlay, useOverlayData } = createOverlaySafeContext();
1012

1113
function OverlayProvider({ children }: PropsWithChildren) {

packages/src/event.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ type OpenOverlayOptions = {
1717
overlayId?: string;
1818
};
1919

20-
export function createOverlay() {
21-
const [useOverlayEvent, createEvent] = createUseExternalEvents<OverlayEvent>('overlay-kit');
20+
export function createOverlay(overlayId: string) {
21+
const [useOverlayEvent, createEvent] = createUseExternalEvents<OverlayEvent>(`${overlayId}/overlay-kit`);
2222

2323
const open = (controller: OverlayControllerComponent, options?: OpenOverlayOptions) => {
2424
const overlayId = options?.overlayId ?? randomId();

packages/src/utils/create-overlay-context.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createOverlayProvider } from '../context/provider';
22

3-
export const { overlay, OverlayProvider, useCurrentOverlay, useOverlayData } = experimental_createOverlayContext();
3+
export const { overlay, OverlayProvider, useCurrentOverlay, useOverlayData } = createOverlayProvider();
44

55
// eslint-disable-next-line @typescript-eslint/naming-convention
66
export function experimental_createOverlayContext() {

0 commit comments

Comments
 (0)