redux-devtools/packages/redux-devtools-rtk-query-monitor/src/containers/mapProps.tsx
renovate[bot] 922985f9ea
chore(deps): update dependency prettier to v3 (#1434)
* chore(deps): update dependency prettier to v3

* Format

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nathan Bierema <nbierema@gmail.com>
2023-07-12 18:03:20 +00:00

31 lines
750 B
TypeScript

import React, { ComponentType, ReactNode, Component } from 'react';
interface Mapper<In, Out> {
(inProps: In): Out;
}
interface MapPropsOutput<In, Out> {
(comp: ComponentType<Out>): ComponentType<In>;
}
export function mapProps<In, Out>(
mapper: Mapper<In, Out>,
): MapPropsOutput<In, Out> {
return function mapPropsHoc(Comp) {
class MapPropsHoc extends Component<In> {
render(): ReactNode {
const mappedProps = mapper(this.props);
// TODO Not really sure why this is needed, but it is
return <Comp {...(mappedProps as Out & JSX.IntrinsicElements)} />;
}
static displayName = `mapProps(${
Comp.displayName || Comp.name || 'Component'
})`;
}
return MapPropsHoc;
};
}