Compare commits

...

1 Commits

Author SHA1 Message Date
sonarly-bot 737a27e94d fix(front-component-renderer): serialize CustomEvent detail payload
https://sonarly.com/issue/41221?type=bug

FrontComponent pointer handlers are invoked but receive event objects without usable position data, so drag/draw interactions cannot be implemented.

Fix: Implemented a focused host-bridge fix in `createHtmlHostWrapper.ts` so forwarded handlers serialize the actual remote payload when events arrive as `CustomEvent`.

### What changed
- Added `getSerializedEventInput(event)`:
  - If `event` is not an object, keep existing behavior.
  - If `event.detail` is an object (the remote-dom `CustomEvent` payload), use `event.detail` as serialization input.
  - Otherwise, fall back to the original `event` object.
- Updated `wrapEventHandler` to call:
  - `serializeEvent(getSerializedEventInput(event))`
  instead of always `serializeEvent(event)`.

### Why this fixes the bug
Remote generated elements dispatch `CustomEvent(..., { detail: eventData })`. The previous host bridge serialized only the wrapper event, which dropped pointer/mouse coordinate fields used for drag/draw interactions. This change serializes the actual payload object when present, restoring `clientX/clientY/pageX/pageY/movementX/movementY` and related fields across the bridge.

### Safety
- No shared type/schema changes.
- No generated files touched.
- No behavior changes for non-`CustomEvent` paths (explicit fallback to original event).

Authored by Sonarly by autonomous analysis (run 46977).
2026-05-28 07:35:20 +00:00
@@ -271,9 +271,18 @@ const serializeEvent = (event: unknown): SerializedEventData => {
return serialized;
};
const getSerializedEventInput = (event: unknown): unknown => {
if (!isObject(event)) {
return event;
}
const eventRecord = event as Record<string, unknown>;
return isObject(eventRecord.detail) ? eventRecord.detail : event;
};
const wrapEventHandler = (handler: (detail: SerializedEventData) => void) => {
return (event: unknown) => {
handler(serializeEvent(event));
handler(serializeEvent(getSerializedEventInput(event)));
};
};