feat(ux): add copy to clipboard to operation summary (#8094)

This commit is contained in:
Tomas Bruckner
2022-07-18 19:48:57 +02:00
committed by GitHub
parent 6707f247cc
commit 0d5227bb5d
6 changed files with 47 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
import React from "react"
import { CopyToClipboard } from "react-copy-to-clipboard"
import PropTypes from "prop-types"
/**
* @param {{ textToCopy: string }} props
* @returns {JSX.Element}
* @constructor
*/
export default class CopyToClipboardBtn extends React.Component {
render() {
return (
<div className="view-line-link copy-to-clipboard" title="Copy to clipboard">
<CopyToClipboard text={this.props.textToCopy}>
<svg width="15" height="16">
<use href="#copy" xlinkHref="#copy" />
</svg>
</CopyToClipboard>
</div>
)
}
static propTypes = {
textToCopy: PropTypes.string.isRequired,
}
}

View File

@@ -58,6 +58,7 @@ export default class OperationSummary extends PureComponent {
const OperationSummaryMethod = getComponent("OperationSummaryMethod")
const OperationSummaryPath = getComponent("OperationSummaryPath")
const JumpToPath = getComponent("JumpToPath", true)
const CopyToClipboardBtn = getComponent("CopyToClipboardBtn", true)
const hasSecurity = security && !!security.count()
const securityIsOptional = hasSecurity && security.size === 1 && security.first().isEmpty()
@@ -96,6 +97,7 @@ export default class OperationSummary extends PureComponent {
}}
/>
}
<CopyToClipboardBtn textToCopy={`${specPath.get(1)}`} />
<JumpToPath path={specPath} />{/* TODO: use wrapComponents here, swagger-ui doesn't care about jumpToPath */}
</div>
)

View File

@@ -35,6 +35,12 @@ const SvgAssets = () =>
<path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
</symbol>
<symbol viewBox="0 0 15 16" id="copy">
<g transform='translate(2, -1)'>
<path fill='#ffffff' fillRule='evenodd' d='M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z'></path>
</g>
</symbol>
</defs>
</svg>
</div>

View File

@@ -63,6 +63,7 @@ import Info, {
} from "core/components/info"
import InfoContainer from "core/containers/info"
import JumpToPath from "core/components/jump-to-path"
import CopyToClipboardBtn from "core/components/copy-to-clipboard-btn"
import Footer from "core/components/footer"
import FilterContainer from "core/containers/filter"
import ParamBody from "core/components/param-body"
@@ -113,6 +114,7 @@ export default function() {
info: Info,
InfoContainer,
JumpToPath,
CopyToClipboardBtn,
onlineValidatorBadge: OnlineValidatorBadge,
operations: Operations,
operation: Operation,

View File

@@ -205,3 +205,10 @@ button
height: 18px;
}
}
// overrides for copy to clipboard button
.opblock .opblock-summary .view-line-link.copy-to-clipboard
{
height: 26px;
position: unset;
}

View File

@@ -376,6 +376,10 @@
{
width: 18px;
margin: 0 5px;
&.copy-to-clipboard {
width: 24px;
}
}
}
}