| 
									
										
										
										
											2020-03-23 15:35:58 +01:00
										 |  |  | /* | 
					
						
							|  |  |  |  * MIT License | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (c) 2020-present Cloudogu GmbH and Contributors | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Permission is hereby granted, free of charge, to any person obtaining a copy | 
					
						
							|  |  |  |  * of this software and associated documentation files (the "Software"), to deal | 
					
						
							|  |  |  |  * in the Software without restriction, including without limitation the rights | 
					
						
							|  |  |  |  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | 
					
						
							|  |  |  |  * copies of the Software, and to permit persons to whom the Software is | 
					
						
							|  |  |  |  * furnished to do so, subject to the following conditions: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * The above copyright notice and this permission notice shall be included in all | 
					
						
							|  |  |  |  * copies or substantial portions of the Software. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 
					
						
							|  |  |  |  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 
					
						
							|  |  |  |  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | 
					
						
							|  |  |  |  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | 
					
						
							|  |  |  |  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | 
					
						
							|  |  |  |  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | 
					
						
							|  |  |  |  * SOFTWARE. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2019-10-20 18:02:52 +02:00
										 |  |  | import React from "react"; | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  | import { connect } from "react-redux"; | 
					
						
							| 
									
										
										
										
											2020-09-07 13:39:12 +02:00
										 |  |  | import { Link, Redirect, Route, RouteComponentProps, Switch } from "react-router-dom"; | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  | import { WithTranslation, withTranslation } from "react-i18next"; | 
					
						
							|  |  |  | import { binder, ExtensionPoint } from "@scm-manager/ui-extensions"; | 
					
						
							|  |  |  | import { Changeset, Repository } from "@scm-manager/ui-types"; | 
					
						
							| 
									
										
										
										
											2020-02-25 09:49:23 +01:00
										 |  |  | import { | 
					
						
							| 
									
										
										
										
											2020-08-10 20:48:08 +02:00
										 |  |  |   CustomQueryFlexWrappedColumns, | 
					
						
							| 
									
										
										
										
											2020-02-26 15:45:24 +01:00
										 |  |  |   ErrorPage, | 
					
						
							|  |  |  |   Loading, | 
					
						
							|  |  |  |   NavLink, | 
					
						
							|  |  |  |   Page, | 
					
						
							| 
									
										
										
										
											2020-03-25 15:35:46 +01:00
										 |  |  |   PrimaryContentColumn, | 
					
						
							| 
									
										
										
										
											2020-03-11 15:47:40 +01:00
										 |  |  |   SecondaryNavigation, | 
					
						
							| 
									
										
										
										
											2020-08-10 20:48:08 +02:00
										 |  |  |   SecondaryNavigationColumn, | 
					
						
							|  |  |  |   StateMenuContextProvider, | 
					
						
							|  |  |  |   SubNavigation | 
					
						
							| 
									
										
										
										
											2020-02-26 15:45:24 +01:00
										 |  |  | } from "@scm-manager/ui-components"; | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  | import { fetchRepoByName, getFetchRepoFailure, getRepository, isFetchRepoPending } from "../modules/repos"; | 
					
						
							| 
									
										
										
										
											2019-10-20 18:02:52 +02:00
										 |  |  | import RepositoryDetails from "../components/RepositoryDetails"; | 
					
						
							|  |  |  | import EditRepo from "./EditRepo"; | 
					
						
							|  |  |  | import BranchesOverview from "../branches/containers/BranchesOverview"; | 
					
						
							|  |  |  | import CreateBranch from "../branches/containers/CreateBranch"; | 
					
						
							|  |  |  | import Permissions from "../permissions/containers/Permissions"; | 
					
						
							|  |  |  | import EditRepoNavLink from "../components/EditRepoNavLink"; | 
					
						
							|  |  |  | import BranchRoot from "../branches/containers/BranchRoot"; | 
					
						
							|  |  |  | import PermissionsNavLink from "../components/PermissionsNavLink"; | 
					
						
							|  |  |  | import RepositoryNavLink from "../components/RepositoryNavLink"; | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  | import { getLinks, getRepositoriesLink } from "../../modules/indexResource"; | 
					
						
							| 
									
										
										
										
											2020-01-08 10:31:43 +01:00
										 |  |  | import CodeOverview from "../codeSection/containers/CodeOverview"; | 
					
						
							|  |  |  | import ChangesetView from "./ChangesetView"; | 
					
						
							|  |  |  | import SourceExtensions from "../sources/containers/SourceExtensions"; | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  | import { FileControlFactory, JumpToFileButton } from "@scm-manager/ui-components"; | 
					
						
							| 
									
										
										
										
											2020-09-16 12:45:22 +02:00
										 |  |  | import TagsOverview from "../tags/container/TagsOverview"; | 
					
						
							|  |  |  | import TagRoot from "../tags/container/TagRoot"; | 
					
						
							| 
									
										
										
										
											2020-09-18 17:20:54 +02:00
										 |  |  | import { urls } from "@scm-manager/ui-components"; | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-25 09:49:23 +01:00
										 |  |  | type Props = RouteComponentProps & | 
					
						
							|  |  |  |   WithTranslation & { | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |     namespace: string; | 
					
						
							|  |  |  |     name: string; | 
					
						
							|  |  |  |     repository: Repository; | 
					
						
							|  |  |  |     loading: boolean; | 
					
						
							|  |  |  |     error: Error; | 
					
						
							|  |  |  |     repoLink: string; | 
					
						
							|  |  |  |     indexLinks: object; | 
					
						
							| 
									
										
										
										
											2020-02-25 09:49:23 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |     // dispatch functions
 | 
					
						
							|  |  |  |     fetchRepoByName: (link: string, namespace: string, name: string) => void; | 
					
						
							|  |  |  |   }; | 
					
						
							| 
									
										
										
										
											2020-02-25 09:49:23 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-31 11:00:07 +02:00
										 |  |  | class RepositoryRoot extends React.Component<Props> { | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |   componentDidMount() { | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |     const { fetchRepoByName, namespace, name, repoLink } = this.props; | 
					
						
							| 
									
										
										
										
											2018-11-05 13:52:46 +01:00
										 |  |  |     fetchRepoByName(repoLink, namespace, name); | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-25 09:16:19 +02:00
										 |  |  |   componentDidUpdate(prevProps: Props) { | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |     const { fetchRepoByName, namespace, name, repoLink } = this.props; | 
					
						
							| 
									
										
										
										
											2020-06-25 09:16:19 +02:00
										 |  |  |     if (namespace !== prevProps.namespace || name !== prevProps.name) { | 
					
						
							|  |  |  |       fetchRepoByName(repoLink, namespace, name); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-29 10:22:54 +01:00
										 |  |  |   matchesBranches = (route: any) => { | 
					
						
							| 
									
										
										
										
											2020-09-18 17:38:10 +02:00
										 |  |  |     const url = urls.matchedUrl(this.props); | 
					
						
							| 
									
										
										
										
											2019-03-29 13:52:19 +01:00
										 |  |  |     const regex = new RegExp(`${url}/branch/.+/info`); | 
					
						
							| 
									
										
										
										
											2019-03-29 10:22:54 +01:00
										 |  |  |     return route.location.pathname.match(regex); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-16 12:45:22 +02:00
										 |  |  |   matchesTags = (route: any) => { | 
					
						
							| 
									
										
										
										
											2020-09-18 17:38:10 +02:00
										 |  |  |     const url = urls.matchedUrl(this.props); | 
					
						
							| 
									
										
										
										
											2020-09-16 12:45:22 +02:00
										 |  |  |     const regex = new RegExp(`${url}/tag/.+/info`); | 
					
						
							|  |  |  |     return route.location.pathname.match(regex); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-07 10:30:46 +01:00
										 |  |  |   matchesCode = (route: any) => { | 
					
						
							| 
									
										
										
										
											2020-09-18 17:38:10 +02:00
										 |  |  |     const url = urls.matchedUrl(this.props); | 
					
						
							| 
									
										
										
										
											2020-01-07 10:30:46 +01:00
										 |  |  |     const regex = new RegExp(`${url}(/code)/.*`); | 
					
						
							| 
									
										
										
										
											2018-10-09 11:53:06 +02:00
										 |  |  |     return route.location.pathname.match(regex); | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-07 10:30:46 +01:00
										 |  |  |   getCodeLinkname = () => { | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |     const { repository } = this.props; | 
					
						
							| 
									
										
										
										
											2020-01-07 10:30:46 +01:00
										 |  |  |     if (repository?._links?.sources) { | 
					
						
							|  |  |  |       return "sources"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (repository?._links?.changesets) { | 
					
						
							|  |  |  |       return "changesets"; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return ""; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   evaluateDestinationForCodeLink = () => { | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |     const { repository } = this.props; | 
					
						
							| 
									
										
										
										
											2020-09-18 17:38:10 +02:00
										 |  |  |     const url = `${urls.matchedUrl(this.props)}/code`; | 
					
						
							| 
									
										
										
										
											2020-01-07 10:30:46 +01:00
										 |  |  |     if (repository?._links?.sources) { | 
					
						
							|  |  |  |       return `${url}/sources/`; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return `${url}/changesets`; | 
					
						
							| 
									
										
										
										
											2019-11-01 09:29:57 +01:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |   render() { | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |     const { loading, error, indexLinks, repository, t } = this.props; | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (error) { | 
					
						
							| 
									
										
										
										
											2019-03-28 14:47:57 +01:00
										 |  |  |       return ( | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |         <ErrorPage title={t("repositoryRoot.errorTitle")} subtitle={t("repositoryRoot.errorSubtitle")} error={error} /> | 
					
						
							| 
									
										
										
										
											2019-03-28 14:47:57 +01:00
										 |  |  |       ); | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!repository || loading) { | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |       return <Loading />; | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-18 17:38:10 +02:00
										 |  |  |     const url = urls.matchedUrl(this.props); | 
					
						
							| 
									
										
										
										
											2018-11-09 14:04:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-02 14:13:51 +01:00
										 |  |  |     const extensionProps = { | 
					
						
							| 
									
										
										
										
											2018-11-09 14:04:47 +01:00
										 |  |  |       repository, | 
					
						
							| 
									
										
										
										
											2019-02-01 10:04:37 +01:00
										 |  |  |       url, | 
					
						
							| 
									
										
										
										
											2020-03-09 14:03:01 +01:00
										 |  |  |       indexLinks | 
					
						
							| 
									
										
										
										
											2018-11-09 14:04:47 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-21 10:57:56 +02:00
										 |  |  |     const redirectUrlFactory = binder.getExtension("repository.redirect", this.props); | 
					
						
							| 
									
										
										
										
											2019-03-07 17:49:20 +01:00
										 |  |  |     let redirectedUrl; | 
					
						
							| 
									
										
										
										
											2019-03-28 14:47:57 +01:00
										 |  |  |     if (redirectUrlFactory) { | 
					
						
							| 
									
										
										
										
											2019-03-06 17:24:50 +01:00
										 |  |  |       redirectedUrl = url + redirectUrlFactory(this.props); | 
					
						
							| 
									
										
										
										
											2019-03-28 14:47:57 +01:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2019-10-20 18:02:52 +02:00
										 |  |  |       redirectedUrl = url + "/info"; | 
					
						
							| 
									
										
										
										
											2019-03-06 17:24:50 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |     const fileControlFactoryFactory: (changeset: Changeset) => FileControlFactory = changeset => file => { | 
					
						
							| 
									
										
										
										
											2020-08-10 20:48:08 +02:00
										 |  |  |       const baseUrl = `${url}/code/sources`; | 
					
						
							| 
									
										
										
										
											2020-11-13 12:52:53 +01:00
										 |  |  |       const sourceLink = file.newPath && { | 
					
						
							| 
									
										
										
										
											2020-08-10 20:48:08 +02:00
										 |  |  |         url: `${baseUrl}/${changeset.id}/${file.newPath}/`, | 
					
						
							|  |  |  |         label: t("diff.jumpToSource") | 
					
						
							|  |  |  |       }; | 
					
						
							| 
									
										
										
										
											2020-11-13 12:52:53 +01:00
										 |  |  |       const targetLink = file.oldPath && changeset._embedded?.parents?.length === 1 && { | 
					
						
							| 
									
										
										
										
											2020-08-10 20:48:08 +02:00
										 |  |  |         url: `${baseUrl}/${changeset._embedded.parents[0].id}/${file.oldPath}`, | 
					
						
							|  |  |  |         label: t("diff.jumpToTarget") | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const links = []; | 
					
						
							|  |  |  |       switch (file.type) { | 
					
						
							|  |  |  |         case "add": | 
					
						
							| 
									
										
										
										
											2020-11-13 12:52:53 +01:00
										 |  |  |           if (sourceLink) { | 
					
						
							|  |  |  |             links.push(sourceLink); | 
					
						
							|  |  |  |           } | 
					
						
							| 
									
										
										
										
											2020-08-10 20:48:08 +02:00
										 |  |  |           break; | 
					
						
							|  |  |  |         case "delete": | 
					
						
							|  |  |  |           if (targetLink) { | 
					
						
							|  |  |  |             links.push(targetLink); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |           break; | 
					
						
							|  |  |  |         default: | 
					
						
							| 
									
										
										
										
											2020-11-13 12:52:53 +01:00
										 |  |  |           if (targetLink && sourceLink) { | 
					
						
							| 
									
										
										
										
											2020-08-11 10:09:28 +02:00
										 |  |  |             links.push(targetLink, sourceLink); // Target link first because its the previous file
 | 
					
						
							| 
									
										
										
										
											2020-11-13 12:52:53 +01:00
										 |  |  |           } else if (sourceLink) { | 
					
						
							| 
									
										
										
										
											2020-08-10 20:48:08 +02:00
										 |  |  |             links.push(sourceLink); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 12:52:53 +01:00
										 |  |  |       return links ? links.map(({ url, label }) => <JumpToFileButton tooltip={label} link={url} />) : null; | 
					
						
							| 
									
										
										
										
											2020-08-10 20:48:08 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-13 12:52:53 +01:00
										 |  |  |     const titleComponent = ( | 
					
						
							|  |  |  |       <> | 
					
						
							|  |  |  |         <Link to={`/repos/${repository.namespace}/`} className={"has-text-dark"}> | 
					
						
							|  |  |  |           {repository.namespace} | 
					
						
							|  |  |  |         </Link> | 
					
						
							|  |  |  |         /{repository.name} | 
					
						
							|  |  |  |       </> | 
					
						
							|  |  |  |     ); | 
					
						
							| 
									
										
										
										
											2020-09-07 13:39:12 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-03 09:34:39 +02:00
										 |  |  |     return ( | 
					
						
							| 
									
										
										
										
											2020-03-31 11:00:07 +02:00
										 |  |  |       <StateMenuContextProvider> | 
					
						
							| 
									
										
										
										
											2020-03-25 08:08:40 +01:00
										 |  |  |         <Page | 
					
						
							| 
									
										
										
										
											2020-09-10 10:08:17 +02:00
										 |  |  |           title={titleComponent} | 
					
						
							|  |  |  |           documentTitle={`${repository.namespace}/${repository.name}`} | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |           afterTitle={<ExtensionPoint name={"repository.afterTitle"} props={{ repository }} />} | 
					
						
							| 
									
										
										
										
											2020-03-25 08:08:40 +01:00
										 |  |  |         > | 
					
						
							| 
									
										
										
										
											2020-03-25 15:35:46 +01:00
										 |  |  |           <CustomQueryFlexWrappedColumns> | 
					
						
							| 
									
										
										
										
											2020-03-31 11:00:07 +02:00
										 |  |  |             <PrimaryContentColumn> | 
					
						
							| 
									
										
										
										
											2020-02-26 10:41:39 +01:00
										 |  |  |               <Switch> | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                 <Redirect exact from={this.props.match.url} to={redirectedUrl} /> | 
					
						
							| 
									
										
										
										
											2020-01-15 10:49:01 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-26 10:41:39 +01:00
										 |  |  |                 {/* redirect pre 2.0.0-rc2 links */} | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                 <Redirect from={`${url}/changeset/:id`} to={`${url}/code/changeset/:id`} /> | 
					
						
							|  |  |  |                 <Redirect exact from={`${url}/sources`} to={`${url}/code/sources`} /> | 
					
						
							|  |  |  |                 <Redirect from={`${url}/sources/:revision/:path*`} to={`${url}/code/sources/:revision/:path*`} /> | 
					
						
							|  |  |  |                 <Redirect exact from={`${url}/changesets`} to={`${url}/code/changesets`} /> | 
					
						
							|  |  |  |                 <Redirect from={`${url}/branch/:branch/changesets`} to={`${url}/code/branch/:branch/changesets/`} /> | 
					
						
							| 
									
										
										
										
											2020-01-15 10:49:01 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                 <Route path={`${url}/info`} exact component={() => <RepositoryDetails repository={repository} />} /> | 
					
						
							|  |  |  |                 <Route path={`${url}/settings/general`} component={() => <EditRepo repository={repository} />} /> | 
					
						
							| 
									
										
										
										
											2020-02-26 10:41:39 +01:00
										 |  |  |                 <Route | 
					
						
							|  |  |  |                   path={`${url}/settings/permissions`} | 
					
						
							|  |  |  |                   render={() => ( | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                     <Permissions namespace={this.props.repository.namespace} repoName={this.props.repository.name} /> | 
					
						
							| 
									
										
										
										
											2020-02-26 10:41:39 +01:00
										 |  |  |                   )} | 
					
						
							|  |  |  |                 /> | 
					
						
							|  |  |  |                 <Route | 
					
						
							|  |  |  |                   exact | 
					
						
							|  |  |  |                   path={`${url}/code/changeset/:id`} | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                   render={() => ( | 
					
						
							|  |  |  |                     <ChangesetView repository={repository} fileControlFactoryFactory={fileControlFactoryFactory} /> | 
					
						
							|  |  |  |                   )} | 
					
						
							| 
									
										
										
										
											2020-02-26 10:41:39 +01:00
										 |  |  |                 /> | 
					
						
							|  |  |  |                 <Route | 
					
						
							|  |  |  |                   path={`${url}/code/sourceext/:extension`} | 
					
						
							|  |  |  |                   exact={true} | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                   render={() => <SourceExtensions repository={repository} />} | 
					
						
							| 
									
										
										
										
											2020-02-26 10:41:39 +01:00
										 |  |  |                 /> | 
					
						
							|  |  |  |                 <Route | 
					
						
							|  |  |  |                   path={`${url}/code/sourceext/:extension/:revision/:path*`} | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                   render={() => <SourceExtensions repository={repository} baseUrl={`${url}/code/sources`} />} | 
					
						
							| 
									
										
										
										
											2020-02-26 10:41:39 +01:00
										 |  |  |                 /> | 
					
						
							|  |  |  |                 <Route | 
					
						
							|  |  |  |                   path={`${url}/code`} | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                   render={() => <CodeOverview baseUrl={`${url}/code`} repository={repository} />} | 
					
						
							| 
									
										
										
										
											2019-01-23 15:42:15 +01:00
										 |  |  |                 /> | 
					
						
							| 
									
										
										
										
											2020-02-26 10:41:39 +01:00
										 |  |  |                 <Route | 
					
						
							|  |  |  |                   path={`${url}/branch/:branch`} | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                   render={() => <BranchRoot repository={repository} baseUrl={`${url}/branch`} />} | 
					
						
							| 
									
										
										
										
											2019-03-28 11:51:00 +01:00
										 |  |  |                 /> | 
					
						
							| 
									
										
										
										
											2020-02-26 10:41:39 +01:00
										 |  |  |                 <Route | 
					
						
							|  |  |  |                   path={`${url}/branches`} | 
					
						
							|  |  |  |                   exact={true} | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                   render={() => <BranchesOverview repository={repository} baseUrl={`${url}/branch`} />} | 
					
						
							| 
									
										
										
										
											2018-09-20 16:28:41 +02:00
										 |  |  |                 /> | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                 <Route path={`${url}/branches/create`} render={() => <CreateBranch repository={repository} />} /> | 
					
						
							| 
									
										
										
										
											2020-09-16 12:45:22 +02:00
										 |  |  |                 <Route | 
					
						
							|  |  |  |                   path={`${url}/tag/:tag`} | 
					
						
							|  |  |  |                   render={() => <TagRoot repository={repository} baseUrl={`${url}/tag`} />} | 
					
						
							|  |  |  |                 /> | 
					
						
							|  |  |  |                 <Route | 
					
						
							|  |  |  |                   path={`${url}/tags`} | 
					
						
							|  |  |  |                   exact={true} | 
					
						
							|  |  |  |                   render={() => <TagsOverview repository={repository} baseUrl={`${url}/tag`} />} | 
					
						
							|  |  |  |                 /> | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                 <ExtensionPoint name="repository.route" props={extensionProps} renderAll={true} /> | 
					
						
							| 
									
										
										
										
											2020-02-26 10:41:39 +01:00
										 |  |  |               </Switch> | 
					
						
							| 
									
										
										
										
											2020-03-25 15:35:46 +01:00
										 |  |  |             </PrimaryContentColumn> | 
					
						
							| 
									
										
										
										
											2020-03-31 11:00:07 +02:00
										 |  |  |             <SecondaryNavigationColumn> | 
					
						
							|  |  |  |               <SecondaryNavigation label={t("repositoryRoot.menu.navigationLabel")}> | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                 <ExtensionPoint name="repository.navigation.topLevel" props={extensionProps} renderAll={true} /> | 
					
						
							| 
									
										
										
										
											2020-03-10 10:45:37 +01:00
										 |  |  |                 <NavLink | 
					
						
							|  |  |  |                   to={`${url}/info`} | 
					
						
							|  |  |  |                   icon="fas fa-info-circle" | 
					
						
							|  |  |  |                   label={t("repositoryRoot.menu.informationNavLink")} | 
					
						
							|  |  |  |                   title={t("repositoryRoot.menu.informationNavLink")} | 
					
						
							|  |  |  |                 /> | 
					
						
							|  |  |  |                 <RepositoryNavLink | 
					
						
							|  |  |  |                   repository={repository} | 
					
						
							|  |  |  |                   linkName="branches" | 
					
						
							|  |  |  |                   to={`${url}/branches/`} | 
					
						
							|  |  |  |                   icon="fas fa-code-branch" | 
					
						
							|  |  |  |                   label={t("repositoryRoot.menu.branchesNavLink")} | 
					
						
							|  |  |  |                   activeWhenMatch={this.matchesBranches} | 
					
						
							|  |  |  |                   activeOnlyWhenExact={false} | 
					
						
							|  |  |  |                   title={t("repositoryRoot.menu.branchesNavLink")} | 
					
						
							|  |  |  |                 /> | 
					
						
							| 
									
										
										
										
											2020-09-16 12:45:22 +02:00
										 |  |  |                 <RepositoryNavLink | 
					
						
							|  |  |  |                   repository={repository} | 
					
						
							|  |  |  |                   linkName="tags" | 
					
						
							|  |  |  |                   to={`${url}/tags/`} | 
					
						
							|  |  |  |                   icon="fas fa-tags" | 
					
						
							|  |  |  |                   label={t("repositoryRoot.menu.tagsNavLink")} | 
					
						
							|  |  |  |                   activeWhenMatch={this.matchesTags} | 
					
						
							|  |  |  |                   activeOnlyWhenExact={false} | 
					
						
							|  |  |  |                   title={t("repositoryRoot.menu.tagsNavLink")} | 
					
						
							|  |  |  |                 /> | 
					
						
							| 
									
										
										
										
											2020-03-10 10:45:37 +01:00
										 |  |  |                 <RepositoryNavLink | 
					
						
							|  |  |  |                   repository={repository} | 
					
						
							|  |  |  |                   linkName={this.getCodeLinkname()} | 
					
						
							|  |  |  |                   to={this.evaluateDestinationForCodeLink()} | 
					
						
							|  |  |  |                   icon="fas fa-code" | 
					
						
							|  |  |  |                   label={t("repositoryRoot.menu.sourcesNavLink")} | 
					
						
							|  |  |  |                   activeWhenMatch={this.matchesCode} | 
					
						
							|  |  |  |                   activeOnlyWhenExact={false} | 
					
						
							|  |  |  |                   title={t("repositoryRoot.menu.sourcesNavLink")} | 
					
						
							|  |  |  |                 /> | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                 <ExtensionPoint name="repository.navigation" props={extensionProps} renderAll={true} /> | 
					
						
							| 
									
										
										
										
											2020-03-10 10:45:37 +01:00
										 |  |  |                 <SubNavigation | 
					
						
							|  |  |  |                   to={`${url}/settings/general`} | 
					
						
							|  |  |  |                   label={t("repositoryRoot.menu.settingsNavLink")} | 
					
						
							|  |  |  |                   title={t("repositoryRoot.menu.settingsNavLink")} | 
					
						
							| 
									
										
										
										
											2020-02-25 09:49:23 +01:00
										 |  |  |                 > | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |                   <EditRepoNavLink repository={repository} editUrl={`${url}/settings/general`} /> | 
					
						
							|  |  |  |                   <PermissionsNavLink permissionUrl={`${url}/settings/permissions`} repository={repository} /> | 
					
						
							|  |  |  |                   <ExtensionPoint name="repository.setting" props={extensionProps} renderAll={true} /> | 
					
						
							| 
									
										
										
										
											2020-03-10 10:45:37 +01:00
										 |  |  |                 </SubNavigation> | 
					
						
							| 
									
										
										
										
											2020-03-11 15:47:40 +01:00
										 |  |  |               </SecondaryNavigation> | 
					
						
							| 
									
										
										
										
											2020-03-25 15:35:46 +01:00
										 |  |  |             </SecondaryNavigationColumn> | 
					
						
							|  |  |  |           </CustomQueryFlexWrappedColumns> | 
					
						
							| 
									
										
										
										
											2020-03-02 14:13:51 +01:00
										 |  |  |         </Page> | 
					
						
							| 
									
										
										
										
											2020-03-31 11:00:07 +02:00
										 |  |  |       </StateMenuContextProvider> | 
					
						
							| 
									
										
										
										
											2018-08-03 09:34:39 +02:00
										 |  |  |     ); | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-08 10:31:43 +01:00
										 |  |  | const mapStateToProps = (state: any, ownProps: Props) => { | 
					
						
							| 
									
										
										
										
											2020-08-12 12:53:59 +02:00
										 |  |  |   const { namespace, name } = ownProps.match.params; | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |   const repository = getRepository(state, namespace, name); | 
					
						
							|  |  |  |   const loading = isFetchRepoPending(state, namespace, name); | 
					
						
							|  |  |  |   const error = getFetchRepoFailure(state, namespace, name); | 
					
						
							| 
									
										
										
										
											2018-10-11 08:19:50 +02:00
										 |  |  |   const repoLink = getRepositoriesLink(state); | 
					
						
							| 
									
										
										
										
											2019-02-01 10:04:37 +01:00
										 |  |  |   const indexLinks = getLinks(state); | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |   return { | 
					
						
							|  |  |  |     namespace, | 
					
						
							|  |  |  |     name, | 
					
						
							|  |  |  |     repository, | 
					
						
							|  |  |  |     loading, | 
					
						
							| 
									
										
										
										
											2018-10-11 08:19:50 +02:00
										 |  |  |     error, | 
					
						
							| 
									
										
										
										
											2019-02-01 10:04:37 +01:00
										 |  |  |     repoLink, | 
					
						
							| 
									
										
										
										
											2019-10-20 18:02:52 +02:00
										 |  |  |     indexLinks | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |   }; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-08 10:31:43 +01:00
										 |  |  | const mapDispatchToProps = (dispatch: any) => { | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |   return { | 
					
						
							| 
									
										
										
										
											2018-11-05 13:52:46 +01:00
										 |  |  |     fetchRepoByName: (link: string, namespace: string, name: string) => { | 
					
						
							|  |  |  |       dispatch(fetchRepoByName(link, namespace, name)); | 
					
						
							| 
									
										
										
										
											2019-10-20 18:02:52 +02:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-08-01 18:23:16 +02:00
										 |  |  |   }; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-07 10:30:46 +01:00
										 |  |  | export default connect(mapStateToProps, mapDispatchToProps)(withTranslation("repos")(RepositoryRoot)); |