react-with-hoc
Version:
Work with React and HOCs (Higher-Order Components)
78 lines • 2.62 kB
TypeScript
import { ComponentType } from "react";
import { IntersectionFn, ToSchema } from "../types/Fn";
import { Hoc } from "../types/Hoc";
export interface WithWrapperHoc {
<const WrapperProps, const PickOptions extends string[] = [never], const OmitOptions extends string[] = [never]>(Wrapper: ComponentType<WrapperProps>, options?: {
/**
* @example
* const NewComponent = withWrapper(Wrapper, { pickProps: ['a', 'b'] })(Component)
* <NewComponent a="a" b="b" c="c" />
* // is equivalent to
* <Wrapper a="a" b="b">
* <Component a="a" b="b" c="c" />
* </Wrapper>
*/
pickProps: PickOptions;
omitProps?: undefined;
} | {
/**
* @example
* const NewComponent = withWrapper(Wrapper, { omitProps: ['a', 'b'] })(Component)
* <NewComponent a="a" b="b" c="c" />
* // is equivalent to
* <Wrapper c="c">
* <Component a="a" b="b" c="c" />
* </Wrapper>
*/
omitProps: OmitOptions;
pickProps?: undefined;
}): PickOptions extends [never] ? OmitOptions extends [never] ? Hoc<[]> : Hoc<[
IntersectionFn<Exclude<ToSchema<WrapperProps>, [
OmitOptions[number] | "children",
any
]>>
]> : Hoc<[
IntersectionFn<Extract<Exclude<ToSchema<WrapperProps>, ["children", any]>, [
PickOptions[number],
any
]>>
]>;
}
/**
* Wraps the component with the provided Component Wrapper
*
* @example
* const NewComponent = withWrapper(Wrapper)(Component)
* <NewComponent a="a" b="b" c="c" />
* // is equivalent to
* <Wrapper> // by default, it does not bring any prop
* <Component a="a" b="b" c="c" />
* </Wrapper>
*
* @example
* const NewComponent = withWrapper(Wrapper, { pickProps: ['a', 'b'] })(Component)
* <NewComponent a="a" b="b" c="c" />
* // is equivalent to
* <Wrapper a="a" b="b">
* <Component a="a" b="b" c="c" />
* </Wrapper>
*
* @example
* const NewComponent = withWrapper(Wrapper, { omitProps: ['a', 'b'] })(Component)
* <NewComponent a="a" b="b" c="c" />
* // is equivalent to
* <Wrapper c="c">
* <Component a="a" b="b" c="c" />
* </Wrapper>
*
* @example
* // to carry all props, use omitProps with empty array
* const NewComponent = withWrapper(Wrapper, { omitProps: [] })(Component)
* <NewComponent a="a" b="b" c="c" />
* // is equivalent to
* <Wrapper a="a" b="b" c="c">
* <Component a="a" b="b" c="c" />
* </Wrapper>
*/
export declare const withWrapper: WithWrapperHoc;
//# sourceMappingURL=withWrapper.d.ts.map