Skip to content

Instantly share code, notes, and snippets.

@jrwebdev
Last active February 9, 2018 08:02
Show Gist options
  • Select an option

  • Save jrwebdev/65d5a2c83c241105b26b238f98d56f6a to your computer and use it in GitHub Desktop.

Select an option

Save jrwebdev/65d5a2c83c241105b26b238f98d56f6a to your computer and use it in GitHub Desktop.
withBlueBackground Pattern #2
import * as React from 'react';
type ColorShade = 'light' | 'dark';
export interface InjectedBlueBackgroundProps {
style?: React.CSSProperties;
}
interface WithBlueBackgroundProps {
shade?: ColorShade;
}
const getBlueShade = (shade?: ColorShade) => {
switch (shade) {
case 'dark':
return 'navy';
case 'light':
return 'skyblue';
default:
return 'blue';
}
};
const withBlueBackground = <P extends InjectedBlueBackgroundProps>(
UnwrappedComponent: React.ComponentType<P>
) =>
class WithBlueBackground extends React.Component<
P & WithBlueBackgroundProps
> {
render() {
return (
<UnwrappedComponent
{...this.props}
style={Object.assign({}, this.props.style, {
backgroundColor: getBlueShade(this.props.shade),
})}
/>
);
}
};
export default withBlueBackground;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment