import React, { useMemo } from 'react' import { Container, PageBody, Text, FontVariation, Tabs, IconName } from '@harness/uicore' import { useGet } from 'restful-react' import { useHistory } from 'react-router-dom' import { useAppContext } from 'AppContext' import { useGetRepositoryMetadata } from 'hooks/useGetRepositoryMetadata' import { useStrings } from 'framework/strings' import { RepositoryPageHeader } from 'components/RepositoryPageHeader/RepositoryPageHeader' import { getErrorMessage } from 'utils/Utils' import type { PullRequestResponse } from 'utils/types' import { CodeIcon } from 'utils/GitUtils' import { PullRequestMetaLine } from './PullRequestMetaLine' import { PullRequestConversation } from './PullRequestConversation/PullRequestConversation' import { FilesChanged } from './FilesChanged/FilesChanged' import { PullRequestCommits } from './PullRequestCommits/PullRequestCommits' import css from './PullRequest.module.scss' enum PullRequestSection { CONVERSATION = 'conversation', COMMITS = 'commits', FILES_CHANGED = 'files' } export default function PullRequest() { const history = useHistory() const { getString } = useStrings() const { routes } = useAppContext() const { repoMetadata, error, loading, refetch, pullRequestId, pullRequestSection = PullRequestSection.CONVERSATION } = useGetRepositoryMetadata() const { data: prData, error: prError, loading: prLoading } = useGet({ path: `/api/v1/repos/${repoMetadata?.path}/+/pullreq/${pullRequestId}`, lazy: !repoMetadata }) const activeTab = useMemo( () => Object.values(PullRequestSection).find(value => value === pullRequestSection) ? pullRequestSection : PullRequestSection.CONVERSATION, [pullRequestSection] ) return ( : ''} dataTooltipId="repositoryPullRequests" extraBreadcrumbLinks={ repoMetadata && [ { label: getString('pullRequests'), url: routes.toCODEPullRequests({ repoPath: repoMetadata.path as string }) } ] } /> refetch()}> {repoMetadata ? ( prData ? ( <> { history.replace( routes.toCODEPullRequest({ repoPath: repoMetadata.path as string, pullRequestId, pullRequestSection: tabId !== PullRequestSection.CONVERSATION ? (tabId as string) : undefined }) ) }} tabList={[ { id: PullRequestSection.CONVERSATION, title: , panel: }, { id: PullRequestSection.COMMITS, title: , panel: }, { id: PullRequestSection.FILES_CHANGED, title: , panel: } ]} /> ) : null ) : null} ) } const PullRequestTitle: React.FC = ({ title, number }) => ( {title} #{number} ) const TabTitle: React.FC<{ icon: IconName; title: string; count?: number }> = ({ icon, title, count }) => ( {title} {!!count && ( {count} )} )