import React, { useContext } from 'react'; import { AdaptivityContext, SizeType, ViewHeight, ViewWidth } from '../components/AdaptivityProvider/AdaptivityContext'; interface Config { sizeX?: boolean; sizeY?: boolean; viewWidth?: boolean; viewHeight?: boolean; hasMouse?: boolean; } export { SizeType, ViewWidth, ViewHeight }; export function withAdaptivity(TargetComponent: T, config: Config): T { function AdaptivityConsumer(props: AdaptivityProps) { const context = useContext(AdaptivityContext); let update = false; if (props.sizeX || props.sizeY) { update = true; } const sizeX = props.sizeX || context.sizeX; const sizeY = props.sizeY || context.sizeY; const viewWidth = context.viewWidth; const viewHeight = context.viewHeight; const hasMouse = context.hasMouse; const adaptivityProps: { sizeX?: SizeType; sizeY?: SizeType; viewWidth?: ViewWidth; viewHeight?: ViewHeight; hasMouse?: boolean; } = {}; config.sizeX ? adaptivityProps.sizeX = sizeX : undefined; config.sizeY ? adaptivityProps.sizeY = sizeY : undefined; config.viewWidth ? adaptivityProps.viewWidth = viewWidth : undefined; config.viewHeight ? adaptivityProps.viewHeight = viewHeight : undefined; config.hasMouse ? adaptivityProps.hasMouse = hasMouse : undefined; // @ts-ignore const target = ; if (update) { return {target} ; } return target; } return AdaptivityConsumer as unknown as T; } export interface AdaptivityProps { sizeX?: SizeType; sizeY?: SizeType; /** * @ignore */ viewWidth?: ViewWidth; /** * @ignore */ viewHeight?: ViewHeight; /** * @ignore */ hasMouse?: boolean; }