Skip to content

Instantly share code, notes, and snippets.

@thehappybug
Created June 15, 2018 19:05
Show Gist options
  • Save thehappybug/88342c122cfb1df9f14c9a10fb4926e4 to your computer and use it in GitHub Desktop.
Save thehappybug/88342c122cfb1df9f14c9a10fb4926e4 to your computer and use it in GitHub Desktop.
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
export function withAppContext<
P extends { appContext?: AppContextInterface },
R = Omit<P, 'appContext'>
>(
Component: React.ComponentClass<P> | React.StatelessComponent<P>
): React.SFC<R> {
return function BoundComponent(props: R) {
return (
<AppContextConsumer>
{value => <Component {...props} appContext={value} />}
</AppContextConsumer>
);
};
}
@zokypesch
Copy link

guys do you have some updates for fixing this ???

@Joshhua5
Copy link

Joshhua5 commented Apr 6, 2020

I was able to get this working as of React 16.12

import GlobalContext, {ContextConsumer} from "../Props/GlobalContext";
import React, {FunctionComponent} from "react";

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

export function WithContext<
    P extends { global?: GlobalContext },
    R = Omit<P, 'global'>
    >(
    Component: React.ComponentClass<P> | FunctionComponent<P>
): FunctionComponent<R> {
    return function BoundComponent(props: R) {
        return (
            <ContextConsumer>
                {value => value && <Component {...props as unknown as P} global={value} />}
            </ContextConsumer>
        );
    };
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment