diff --git a/packages/calcite-components/src/tests/utils.ts b/packages/calcite-components/src/tests/utils.ts index f468162eb39..16f6596a25d 100644 --- a/packages/calcite-components/src/tests/utils.ts +++ b/packages/calcite-components/src/tests/utils.ts @@ -1,9 +1,8 @@ // @ts-strict-ignore import { BoundingBox, ElementHandle } from "puppeteer"; import { LitElement, LuminaJsx, ToElement } from "@arcgis/lumina"; -import { newE2EPage, E2EPage, E2EElement } from "@arcgis/lumina-compiler/puppeteerTesting"; +import { E2EElement, E2EPage, newE2EPage } from "@arcgis/lumina-compiler/puppeteerTesting"; import { expect } from "vitest"; -import { ConditionalKeys, Jsonifiable } from "type-fest"; import { ComponentTag } from "./commonTests/interfaces"; /** Util to help type global props for testing. */ @@ -568,35 +567,29 @@ export async function toElementHandle(element: E2EElement): Promise, - Events = Keys extends string ? (Keys extends `calcite${string}` ? Keys : never) : never, + El extends ToElement = ToElement, + Keys extends Extract = Extract, + Events extends string = Keys extends `calcite${string}` ? Keys : never, + PropValues extends Record = Record, >( page: E2EPage, propValuesTarget: { selector: ComponentTag; eventName: Events; - props: ConditionalKeys[]; + props: Keys[]; }, - onEvent: (propValues: Record, Jsonifiable>) => Promise, + onEvent: (propValues: PropValues) => Promise, ): Promise<() => Promise> { // we set this up early to we capture state as soon as the event fires const callbackAfterEvent = page.$eval( propValuesTarget.selector, - (element, eventName, props) => { - return new Promise, Jsonifiable>>((resolve) => { + (element: El, eventName, props) => { + return new Promise((resolve) => { element.addEventListener( - // TODO: clean up 👇 - eventName as string, + eventName, () => { - const propValues: Partial, Jsonifiable>> = {}; - - props.forEach((prop) => { - propValues[prop] = - // TODO: clean up 👇 - element[prop as string]; - }); - - resolve(propValues as Record, Jsonifiable>); + const propValues = Object.fromEntries(props.map((prop) => [prop, element[prop]])); + resolve(propValues as PropValues); }, { once: true }, ); @@ -606,5 +599,5 @@ export async function createEventTimePropValuesAsserter< propValuesTarget.props, ); - return async () => callbackAfterEvent.then((state) => onEvent(state)); + return () => callbackAfterEvent.then(onEvent); }