Created
July 11, 2018 16:21
-
-
Save sal-pal/b97a8d45546bf2ef78ae44da197fa5cc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import React from "react" | |
import PropTypes from "prop-types" | |
import ImPropTypes from "react-immutable-proptypes" | |
import Im from "immutable" | |
import { createDeepLinkPath, sanitizeUrl } from "core/utils" | |
import Store from "../system.js" | |
const store = (new Store()).getStore() | |
export default class OperationTag extends React.Component { | |
static defaultProps = { | |
tagObj: Im.fromJS({}), | |
tag: "", | |
} | |
static propTypes = { | |
tagObj: ImPropTypes.map.isRequired, | |
tag: PropTypes.string.isRequired, | |
layoutSelectors: PropTypes.object.isRequired, | |
layoutActions: PropTypes.object.isRequired, | |
getConfigs: PropTypes.func.isRequired, | |
getComponent: PropTypes.func.isRequired, | |
children: PropTypes.element, | |
} | |
componentDidMount() { | |
store.subscribe(function() { | |
console.log("HelloWorld!") | |
}) | |
} | |
render() { | |
const { | |
tagObj, | |
tag, | |
children, | |
layoutSelectors, | |
layoutActions, | |
getConfigs, | |
getComponent, | |
} = this.props | |
let { | |
docExpansion, | |
deepLinking, | |
} = getConfigs() | |
const isDeepLinkingEnabled = deepLinking && deepLinking !== "false" | |
const Collapse = getComponent("Collapse") | |
const Markdown = getComponent("Markdown") | |
const DeepLink = getComponent("DeepLink") | |
let tagDescription = tagObj.getIn(["tagDetails", "description"], null) | |
let tagExternalDocsDescription = tagObj.getIn(["tagDetails", "externalDocs", "description"]) | |
let tagExternalDocsUrl = tagObj.getIn(["tagDetails", "externalDocs", "url"]) | |
let isShownKey = ["operations-tag", createDeepLinkPath(tag)] | |
let showTag = layoutSelectors.isShown(isShownKey, docExpansion === "full" || docExpansion === "list") | |
return ( | |
<div className={showTag ? "opblock-tag-section is-open" : "opblock-tag-section"} > | |
<h4 | |
onClick={() => layoutActions.show(isShownKey, !showTag)} | |
className={!tagDescription ? "opblock-tag no-desc" : "opblock-tag" } | |
id={isShownKey.join("-")}> | |
<DeepLink | |
enabled={isDeepLinkingEnabled} | |
isShown={showTag} | |
path={tag} | |
text={tag} /> | |
{ !tagDescription ? <small></small> : | |
<small> | |
<Markdown source={tagDescription} /> | |
</small> | |
} | |
<div> | |
{ !tagExternalDocsDescription ? null : | |
<small> | |
{ tagExternalDocsDescription } | |
{ tagExternalDocsUrl ? ": " : null } | |
{ tagExternalDocsUrl ? | |
<a | |
href={sanitizeUrl(tagExternalDocsUrl)} | |
onClick={(e) => e.stopPropagation()} | |
target={"_blank"} | |
>{tagExternalDocsUrl}</a> : null | |
} | |
</small> | |
} | |
</div> | |
<button | |
className="expand-operation" | |
title={showTag ? "Collapse operation": "Expand operation"} | |
onClick={() => layoutActions.show(isShownKey, !showTag)}> | |
<svg className="arrow" width="20" height="20"> | |
<use href={showTag ? "#large-arrow-down" : "#large-arrow"} xlinkHref={showTag ? "#large-arrow-down" : "#large-arrow"} /> | |
</svg> | |
</button> | |
</h4> | |
<Collapse isOpened={showTag}> | |
{children} | |
</Collapse> | |
</div> | |
) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment