From db1d89792e312e092f5298543de8febe1ab0341f Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Thu, 16 Jan 2020 10:00:44 +0100 Subject: [PATCH] refactor markdownviewer // fix padding --- .../components/content/MarkdownViewer.tsx | 17 +++++-- .../content/SwitchableMarkdownViewer.tsx | 51 +++++++++++++++++++ .../repos/sources/containers/SourcesView.tsx | 44 +++------------- 3 files changed, 72 insertions(+), 40 deletions(-) create mode 100644 scm-ui/ui-webapp/src/repos/sources/components/content/SwitchableMarkdownViewer.tsx diff --git a/scm-ui/ui-webapp/src/repos/sources/components/content/MarkdownViewer.tsx b/scm-ui/ui-webapp/src/repos/sources/components/content/MarkdownViewer.tsx index 86731ace1b..fb94747b1e 100644 --- a/scm-ui/ui-webapp/src/repos/sources/components/content/MarkdownViewer.tsx +++ b/scm-ui/ui-webapp/src/repos/sources/components/content/MarkdownViewer.tsx @@ -1,16 +1,21 @@ import React, { FC, useEffect, useState } from "react"; import { getContent } from "./SourcecodeViewer"; import { Link, File } from "@scm-manager/ui-types"; -import { Loading, ErrorNotification, MarkdownView, Button, Level } from "@scm-manager/ui-components"; +import { Loading, ErrorNotification, MarkdownView } from "@scm-manager/ui-components"; +import styled from "styled-components"; type Props = { file: File; }; +const MarkdownContent = styled.div` + padding: 0.5rem; +`; + const MarkdownViewer: FC = ({ file }) => { - const [loading, setLoading] = useState(true); + const [loading, setLoading] = useState(true); const [error, setError] = useState(undefined); - const [content, setContent] = useState(""); + const [content, setContent] = useState(""); useEffect(() => { getContent((file._links.self as Link).href) @@ -32,7 +37,11 @@ const MarkdownViewer: FC = ({ file }) => { return ; } - return ; + return ( + + + + ); }; export default MarkdownViewer; diff --git a/scm-ui/ui-webapp/src/repos/sources/components/content/SwitchableMarkdownViewer.tsx b/scm-ui/ui-webapp/src/repos/sources/components/content/SwitchableMarkdownViewer.tsx new file mode 100644 index 0000000000..f91148c87e --- /dev/null +++ b/scm-ui/ui-webapp/src/repos/sources/components/content/SwitchableMarkdownViewer.tsx @@ -0,0 +1,51 @@ +import React, { FC, useState } from "react"; +import styled from "styled-components"; +import MarkdownViewer from "./MarkdownViewer"; +import SourcecodeViewer from "./SourcecodeViewer"; +import { File } from "@scm-manager/ui-types"; +import { Button } from "@scm-manager/ui-components"; +import { useTranslation } from "react-i18next"; + +const ToggleButton = styled(Button)` + max-width: 1rem; + position: absolute; + top: 0; + right: 0.25rem; + z-index: 999; +`; + +const Container = styled.div` + position: relative; +`; + +type Props = { + file: File; +}; + +const SwitchableMarkdownViewer: FC = ({ file }) => { + const { t } = useTranslation("repos"); + const [renderMarkdown, setRenderMarkdown] = useState(true); + + const toggleMarkdown = () => { + setRenderMarkdown(!renderMarkdown); + }; + + return ( + + + + + {renderMarkdown ? : } + + ); +}; + +export default SwitchableMarkdownViewer; diff --git a/scm-ui/ui-webapp/src/repos/sources/containers/SourcesView.tsx b/scm-ui/ui-webapp/src/repos/sources/containers/SourcesView.tsx index 94bea1c206..193479d0ec 100644 --- a/scm-ui/ui-webapp/src/repos/sources/containers/SourcesView.tsx +++ b/scm-ui/ui-webapp/src/repos/sources/containers/SourcesView.tsx @@ -1,21 +1,14 @@ import React from "react"; -import styled from "styled-components"; -import { WithTranslation, withTranslation } from "react-i18next"; import SourcecodeViewer from "../components/content/SourcecodeViewer"; import ImageViewer from "../components/content/ImageViewer"; -import MarkdownViewer from "../components/content/MarkdownViewer"; import DownloadViewer from "../components/content/DownloadViewer"; import { ExtensionPoint } from "@scm-manager/ui-extensions"; import { getContentType } from "./contentType"; import { File, Repository } from "@scm-manager/ui-types"; -import { Button, ErrorNotification, Level, Loading } from "@scm-manager/ui-components"; +import { ErrorNotification, Loading } from "@scm-manager/ui-components"; +import SwitchableMarkdownViewer from "../components/content/SwitchableMarkdownViewer"; -const ToggleButton = styled(Button)` - max-width: 2em; - margin-right: 0.25em; -`; - -type Props = WithTranslation & { +type Props = { repository: Repository; file: File; revision: string; @@ -25,7 +18,6 @@ type Props = WithTranslation & { type State = { contentType: string; language: string; - renderMarkdown: boolean; loaded: boolean; error?: Error; }; @@ -37,8 +29,7 @@ class SourcesView extends React.Component { this.state = { contentType: "", language: "", - loaded: false, - renderMarkdown: true + loaded: false }; } @@ -62,32 +53,13 @@ class SourcesView extends React.Component { }); } - toggleMarkdown = () => { - this.setState({ renderMarkdown: !this.state.renderMarkdown }); - }; - showSources() { - const { file, revision, t } = this.props; - const { contentType, language, renderMarkdown } = this.state; + const { file, revision } = this.props; + const { contentType, language } = this.state; if (contentType.startsWith("image/")) { return ; } else if (contentType.includes("markdown")) { - return ( - <> - - - - } - /> - {renderMarkdown ? : } - - ); + return ; } else if (language) { return ; } else if (contentType.startsWith("text/")) { @@ -125,4 +97,4 @@ class SourcesView extends React.Component { } } -export default withTranslation("repos")(SourcesView); +export default SourcesView;