import React, { useEffect, useState } from 'react'
import { Link, useHistory } from 'react-router-dom'
import {
Button,
ButtonVariation,
Container,
FlexExpander,
FontVariation,
Layout,
PageBody,
StringSubstitute,
Text
} from '@harness/uicore'
import { Falsy, Match, Truthy } from 'react-jsx-match'
import { useGetResourceContent } from 'hooks/useGetResourceContent'
import { voidFn, getErrorMessage, permissionProps } from 'utils/Utils'
import { useAppContext } from 'AppContext'
import { useGetRepositoryMetadata } from 'hooks/useGetRepositoryMetadata'
import { LoadingSpinner } from 'components/LoadingSpinner/LoadingSpinner'
import { useStrings } from 'framework/strings'
import type { OpenapiGetContentOutput, TypesRepository } from 'services/code'
import { MarkdownViewer } from 'components/MarkdownViewer/MarkdownViewer'
import { CodeIcon, GitInfoProps } from 'utils/GitUtils'
import { useDisableCodeMainLinks } from 'hooks/useDisableCodeMainLinks'
import { useGetSpaceParam } from 'hooks/useGetSpaceParam'
import { Images } from 'images'
import { RepositoryContent } from './RepositoryContent/RepositoryContent'
import { RepositoryHeader } from './RepositoryHeader/RepositoryHeader'
import { ContentHeader } from './RepositoryContent/ContentHeader/ContentHeader'
import css from './Repository.module.scss'
import { CopyButton } from 'components/CopyButton/CopyButton'
import CloneCredentialDialog from 'components/CloneCredentialDialog/CloneCredentialDialog'
export default function Repository() {
const { gitRef, resourcePath, repoMetadata, error, loading, refetch } = useGetRepositoryMetadata()
const {
data: resourceContent,
error: resourceError,
loading: resourceLoading,
isRepositoryEmpty
} = useGetResourceContent({ repoMetadata, gitRef, resourcePath, includeCommit: true })
const [fileNotExist, setFileNotExist] = useState(false)
const { getString } = useStrings()
useEffect(() => {
if (resourceError?.status === 404) {
setFileNotExist(true)
} else {
setFileNotExist(false)
}
}, [resourceError])
return (
fileNotExist === true,
message: getString('error404Text'),
image: Images.error404
}}>
{!!repoMetadata && (
<>
{!!resourceContent && (
)}
{isRepositoryEmpty && (
)}
>
)}
)
}
const EmptyRepositoryInfo: React.FC> = (
{ repoMetadata },
resourceContent
) => {
const history = useHistory()
const { routes } = useAppContext()
const { getString } = useStrings()
const { currentUserProfileURL } = useAppContext()
const newFileURL = routes.toCODEFileEdit({
repoPath: repoMetadata.path as string,
gitRef: repoMetadata.default_branch as string,
resourcePath: ''
})
const { standalone } = useAppContext()
const { hooks } = useAppContext()
const space = useGetSpaceParam()
const [flag, setFlag] = useState(false)
const permPushResult = hooks?.usePermissionTranslate?.(
{
resource: {
resourceType: 'CODE_REPO'
},
permissions: ['code_repo_push']
},
[space]
)
useDisableCodeMainLinks(true)
return (
{getString('emptyRepoHeader')}
README,
LICENSE: LICENSE,
GITIGNORE: .gitignore
}}
/>
{getString('firstTimeTitle')}
{getString('cloneHTTPS')}
{repoMetadata.git_url}
{
history.push(currentUserProfileURL)
}}>
here
)
}}
/>
)
}