import type resq from 'resq'
interface CustomWindow extends Window {
resq: typeof resq
}
declare let window: CustomWindow
export const waitToLoadReact = function waitToLoadReact () {
window.resq.waitToLoadReact()
}
export const react$ = function react$ (
selector: string,
props: Record<string, unknown>,
state: Record<string, unknown>,
reactElement?: HTMLElement
) {
props = props || {}
state = state || {}
let element = window.resq.resq$(selector, reactElement)
if (Object.keys(props).length) {
element = (element as any).byProps(props)
}
if (Object.keys(state).length) {
element = (element as any).byState(state)
}
if (!element.name) {
return { message: `React element with selector "${selector}" wasn't found` }
}
return element.isFragment && element.node
? (element.node as unknown as HTMLElement[])[0]
: element.node
}
export const react$$ = function react$$ (
selector: string,
props: Record<string, unknown>,
state: Record<string, unknown>,
reactElement?: HTMLElement
) {
let elements = window.resq.resq$$(selector, reactElement)
if (Object.keys(props).length) {
elements = (elements as any).byProps(props)
}
if (Object.keys(state).length) {
elements = (elements as any).byState(state)
}
if (!elements.length) {
return []
}
let nodes: HTMLElement[] = []
elements.forEach(function (element) {
if (element.isFragment) {
nodes = nodes.concat(element.node || [])
} else if (element.node) {
nodes.push(element.node)
}
})
return [...nodes]
}