| 
									
										
										
										
											2021-07-28 15:04:00 +02: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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | import React, { FC, ReactNode } from "react"; | 
					
						
							| 
									
										
										
										
											2021-09-15 17:40:08 +02:00
										 |  |  | import classNames from "classnames"; | 
					
						
							| 
									
										
										
										
											2021-07-28 15:04:00 +02:00
										 |  |  | import styled from "styled-components"; | 
					
						
							| 
									
										
										
										
											2023-08-22 19:59:53 +02:00
										 |  |  | import { Link } from "react-router-dom"; | 
					
						
							|  |  |  | import { useTranslation } from "react-i18next"; | 
					
						
							|  |  |  | import { RepositoryGroup } from "@scm-manager/ui-types"; | 
					
						
							|  |  |  | import { useLocalStorage } from "@scm-manager/ui-api"; | 
					
						
							|  |  |  | import Icon from "../Icon"; | 
					
						
							| 
									
										
										
										
											2021-07-28 15:04:00 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | const Separator = styled.div`
 | 
					
						
							|  |  |  |   border-bottom: 1px solid rgb(219, 219, 219, 0.5); | 
					
						
							|  |  |  | `;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type Props = { | 
					
						
							| 
									
										
										
										
											2023-08-22 19:59:53 +02:00
										 |  |  |   group: RepositoryGroup; | 
					
						
							| 
									
										
										
										
											2021-07-28 15:04:00 +02:00
										 |  |  |   elements: ReactNode[]; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-22 19:59:53 +02:00
										 |  |  | const GroupEntries: FC<Props> = ({ group, elements }) => { | 
					
						
							|  |  |  |   const [t] = useTranslation("namespaces"); | 
					
						
							|  |  |  |   const [collapsed, setCollapsed] = useLocalStorage<boolean | null>(`repoNamespace.${group.name}.collapsed`, null); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-28 15:04:00 +02:00
										 |  |  |   const content = elements.map((entry, index) => ( | 
					
						
							|  |  |  |     <React.Fragment key={index}> | 
					
						
							|  |  |  |       <div>{entry}</div> | 
					
						
							| 
									
										
										
										
											2021-09-15 17:40:08 +02:00
										 |  |  |       {index + 1 !== elements.length ? <Separator className="mx-4" /> : null} | 
					
						
							| 
									
										
										
										
											2021-07-28 15:04:00 +02:00
										 |  |  |     </React.Fragment> | 
					
						
							|  |  |  |   )); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-22 19:59:53 +02:00
										 |  |  |   const settingsLink = group.namespace?._links?.permissions && ( | 
					
						
							|  |  |  |     <Link to={`/namespace/${group.name}/settings`} aria-label={t("repositoryOverview.settings.tooltip")}> | 
					
						
							|  |  |  |       <Icon | 
					
						
							|  |  |  |         color="inherit" | 
					
						
							|  |  |  |         name="cog" | 
					
						
							|  |  |  |         title={t("repositoryOverview.settings.tooltip")} | 
					
						
							|  |  |  |         className="is-size-6 ml-2 has-text-link" | 
					
						
							|  |  |  |       /> | 
					
						
							|  |  |  |     </Link> | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-28 15:04:00 +02:00
										 |  |  |   return ( | 
					
						
							|  |  |  |     <> | 
					
						
							| 
									
										
										
										
											2023-08-22 19:59:53 +02:00
										 |  |  |       <div | 
					
						
							|  |  |  |         className={classNames( | 
					
						
							|  |  |  |           "is-flex", | 
					
						
							|  |  |  |           "is-align-items-center", | 
					
						
							|  |  |  |           "is-justify-content-space-between", | 
					
						
							|  |  |  |           "is-size-6", | 
					
						
							|  |  |  |           "has-text-weight-bold", | 
					
						
							|  |  |  |           "p-3", | 
					
						
							|  |  |  |           "has-cursor-pointer" | 
					
						
							|  |  |  |         )} | 
					
						
							|  |  |  |         onClick={() => setCollapsed(!collapsed)} | 
					
						
							|  |  |  |       > | 
					
						
							|  |  |  |         <span> | 
					
						
							|  |  |  |           <Link to={`/repos/${group.name}/`} className="has-text-inherit"> | 
					
						
							|  |  |  |             {group.name} | 
					
						
							|  |  |  |           </Link>{" "} | 
					
						
							|  |  |  |           {settingsLink} | 
					
						
							|  |  |  |         </span> | 
					
						
							|  |  |  |         <Icon | 
					
						
							|  |  |  |           color="inherit" | 
					
						
							|  |  |  |           name={collapsed ? "caret-left" : "caret-down"} | 
					
						
							|  |  |  |           title={t("repositoryOverview.settings.tooltip")} | 
					
						
							|  |  |  |           className="is-size-6 ml-2" | 
					
						
							|  |  |  |         /> | 
					
						
							| 
									
										
										
										
											2021-09-15 17:40:08 +02:00
										 |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2023-08-22 19:59:53 +02:00
										 |  |  |       {collapsed ? null : <div className={classNames("box", "p-2")}>{content}</div>} | 
					
						
							| 
									
										
										
										
											2021-07-28 15:04:00 +02:00
										 |  |  |       <div className="is-clearfix" /> | 
					
						
							|  |  |  |     </> | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export default GroupEntries; |