From 362a5447d1bc8c9f7b7f2a32cc4414bb5f0acd26 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Thu, 1 Oct 2020 15:52:07 +0200 Subject: [PATCH 01/14] Add external link for git submodule with absolute urls --- .../repos/sources/components/FileTreeLeaf.tsx | 50 ++++--------- .../sources/components/content/FileLink.tsx | 70 +++++++++++++++++++ 2 files changed, 82 insertions(+), 38 deletions(-) create mode 100644 scm-ui/ui-webapp/src/repos/sources/components/content/FileLink.tsx diff --git a/scm-ui/ui-webapp/src/repos/sources/components/FileTreeLeaf.tsx b/scm-ui/ui-webapp/src/repos/sources/components/FileTreeLeaf.tsx index bc953a711d..129b0da997 100644 --- a/scm-ui/ui-webapp/src/repos/sources/components/FileTreeLeaf.tsx +++ b/scm-ui/ui-webapp/src/repos/sources/components/FileTreeLeaf.tsx @@ -22,15 +22,14 @@ * SOFTWARE. */ import * as React from "react"; -import { Link } from "react-router-dom"; +import { WithTranslation, withTranslation } from "react-i18next"; import classNames from "classnames"; import styled from "styled-components"; import { binder, ExtensionPoint } from "@scm-manager/ui-extensions"; import { File } from "@scm-manager/ui-types"; -import { DateFromNow, FileSize, Tooltip } from "@scm-manager/ui-components"; +import { DateFromNow, FileSize, Tooltip, Icon } from "@scm-manager/ui-components"; import FileIcon from "./FileIcon"; -import { Icon } from "@scm-manager/ui-components"; -import { WithTranslation, withTranslation } from "react-i18next"; +import FileLink from "./content/FileLink"; type Props = WithTranslation & { file: File; @@ -45,46 +44,21 @@ const NoWrapTd = styled.td` white-space: nowrap; `; -export function createLink(base: string, file: File) { - let link = base; - if (file.path) { - let path = file.path; - if (path.startsWith("/")) { - path = path.substring(1); - } - link += "/" + path; - } - if (!link.endsWith("/")) { - link += "/"; - } - return link; -} - class FileTreeLeaf extends React.Component { - createLink = (file: File) => { - return createLink(this.props.baseUrl, file); - }; - createFileIcon = (file: File) => { - if (file.directory) { - return ( - - - - ); - } return ( - + - + ); }; createFileName = (file: File) => { - if (file.directory) { - return {file.name}; - } - return {file.name}; + return ( + + {file.name} + + ); }; contentIfPresent = (file: File, attribute: string, content: (file: File) => any) => { @@ -94,13 +68,13 @@ class FileTreeLeaf extends React.Component { } else if (file.computationAborted) { return ( - + ); } else if (file.partialResult) { return ( - + ); } else { diff --git a/scm-ui/ui-webapp/src/repos/sources/components/content/FileLink.tsx b/scm-ui/ui-webapp/src/repos/sources/components/content/FileLink.tsx new file mode 100644 index 0000000000..d4b31edf19 --- /dev/null +++ b/scm-ui/ui-webapp/src/repos/sources/components/content/FileLink.tsx @@ -0,0 +1,70 @@ +/* + * 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"; +import { Link } from "react-router-dom"; +import { File } from "@scm-manager/ui-types"; + +type Props = { + baseUrl: string; + file: File; + children: ReactNode; +}; + +const createFolderLink = (base: string, file: File) => { + let link = base; + if (file.path) { + let path = file.path; + if (path.startsWith("/")) { + path = path.substring(1); + } + link += "/" + path; + } + if (!link.endsWith("/")) { + link += "/"; + } + return link; +}; + +const createRelativeLink = (base: string, path: string) => { + let link = base; + link += path.split(".").join(""); + if (!link.endsWith("/")) { + link += "/"; + } + return link; +}; + +const FileLink: FC = ({ baseUrl, file, children }) => { + if (file?.subRepository?.repositoryUrl) { + const link = file.subRepository.repositoryUrl; + if (link.startsWith("http://") || link.startsWith("https://")) { + return {children}; + } else if (link.startsWith(".")) { + return {children}; + } + } + return {children}; +}; + +export default FileLink; From 0c2256c264424bcec84bee939171f4a476f2a547 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Mon, 5 Oct 2020 15:24:47 +0200 Subject: [PATCH 02/14] Update storyshots --- .../src/__snapshots__/storyshots.test.ts.snap | 2448 ++++++++--------- 1 file changed, 1224 insertions(+), 1224 deletions(-) diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 88861f1fd9..a6e523b5b3 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -2,7 +2,7 @@ exports[`Storyshots Annotate Default 1`] = `
Arthur Dent
1
2
Tricia Marie McMillan
3
4
Arthur Dent
5
Ford Prefect
6
Arthur Dent
7
8
Arthur Dent Arthur Dent
1
2
Tricia Marie McMillan Tricia Marie McMillan
3
4
Arthur Dent Arthur Dent
5
Ford Prefect Ford Prefect
6
Arthur Dent Arthur Dent
7
8