UNPKG

react-with-hoc

Version:

Work with React and HOCs (Higher-Order Components)

78 lines 2.62 kB
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