withProject.tsx 739 B

123456789101112131415161718192021222324252627
  1. import {useContext} from 'react';
  2. import type {Project} from 'sentry/types/project';
  3. import getDisplayName from 'sentry/utils/getDisplayName';
  4. import {ProjectContext} from 'sentry/views/projects/projectContext';
  5. type InjectedProjectProps = {
  6. project?: Project;
  7. };
  8. function withProject<P extends InjectedProjectProps>(
  9. WrappedComponent: React.ComponentType<P>
  10. ) {
  11. type Props = Omit<P, keyof InjectedProjectProps> & Partial<InjectedProjectProps>;
  12. function Wrapper(props: Props) {
  13. const project = useContext(ProjectContext);
  14. return <WrappedComponent project={project} {...(props as P)} />;
  15. }
  16. Wrapper.displayName = `withProject(${getDisplayName(WrappedComponent)})`;
  17. return Wrapper;
  18. }
  19. export default withProject;