import * as React from 'react'; import _ from 'lodash'; import { observer } from 'mobx-react'; import { Modal } from 'react-bootstrap'; import { makeObservable, observable } from 'mobx'; import { ShareUrls } from '../querySummary/ShareUI'; import classNames from 'classnames'; import autobind from 'autobind-decorator'; import LoadingIndicator from 'shared/components/loadingIndicator/LoadingIndicator'; var Clipboard = require('clipboard'); interface IBookmarkModalProps { onHide: () => void; urlPromise: Promise; title: string; description?: string; } @observer export class BookmarkModal extends React.Component { @observable urlData: ShareUrls | undefined = undefined; clipboards: any[] = []; constructor(props: IBookmarkModalProps) { super(props); makeObservable(this); } componentDidMount() { // this is an $.ajax promise, not a real promise this.props.urlPromise.then( data => { this.urlData = data; setTimeout(() => { this.initializeClipboards(); }, 0); }, () => {} ); } @autobind showThumb(e: any) { e.target.className = 'fa fa-thumbs-up'; } @autobind initializeClipboards() { this.clipboards.push( new Clipboard(this.sessionButton, { text: function() { return this.urlData.fullUrl; }.bind(this), container: this.container, }) ); if (this.urlData && this.urlData.bitlyUrl) { this.clipboards.push( new Clipboard(this.bitlyButton, { text: function() { return this.urlData.bitlyUrl; }.bind(this), container: this.container, }) ); } } componentWillUnmount() { // we need to clean up clipboards this.clipboards.forEach((clipboard: any) => clipboard.destroy()); } public sessionButton: HTMLAnchorElement; public bitlyButton: HTMLAnchorElement; public container: HTMLDivElement; render() { //NOTE: internal div id necessary for return ( {this.props.title}
(this.container = el)} >
{this.urlData && this.urlData.bitlyUrl && ( )}
); } }