import React from 'react'; import { connect } from 'react-redux'; import { toast } from 'react-toastify'; import { Form, Button, Popover, Loader } from 'UI'; import styles from './sharePopup.module.css'; import IntegrateSlackButton from '../IntegrateSlackButton/IntegrateSlackButton'; import SessionCopyLink from './SessionCopyLink'; import Select from 'Shared/Select'; import cn from 'classnames'; import { fetchList as fetchSlack, sendSlackMsg } from 'Duck/integrations/slack'; import { fetchList as fetchTeams, sendMsTeamsMsg } from 'Duck/integrations/teams'; @connect( (state) => ({ sessionId: state.getIn(['sessions', 'current']).sessionId, channels: state.getIn(['slack', 'list']), slackLoaded: state.getIn(['slack', 'loaded']), msTeamsChannels: state.getIn(['teams', 'list']), msTeamsLoaded: state.getIn(['teams', 'loaded']), tenantId: state.getIn(['user', 'account', 'tenantId']), }), { fetchSlack, fetchTeams, sendSlackMsg, sendMsTeamsMsg } ) export default class SharePopup extends React.PureComponent { state = { comment: '', isOpen: false, channelId: this.props.channels.getIn([0, 'webhookId']), teamsChannel: this.props.msTeamsChannels.getIn([0, 'webhookId']), loadingSlack: false, loadingTeams: false, }; componentDidUpdate() { if (this.state.isOpen) { if (this.props.channels.size === 0 && !this.props.slackLoaded) { this.props.fetchSlack(); } if (this.props.msTeamsChannels.size === 0 && !this.props.msTeamsLoaded) { this.props.fetchTeams(); } } } editMessage = (e) => this.setState({ comment: e.target.value }); shareToSlack = () => { this.setState({ loadingSlack: true }, () => { this.props .sendSlackMsg({ integrationId: this.state.channelId, entity: 'sessions', entityId: this.props.sessionId, data: { comment: this.state.comment }, }) .then(() => this.handleSuccess('Slack')); }); }; shareToMSTeams = () => { this.setState({ loadingTeams: true }, () => { this.props .sendMsTeamsMsg({ integrationId: this.state.teamsChannel, entity: 'sessions', entityId: this.props.sessionId, data: { comment: this.state.comment }, }) .then(() => this.handleSuccess('MS Teams')); }); }; handleOpen = () => { setTimeout(function () { document.getElementById('message').focus(); }, 100); }; handleClose = () => { this.setState({ comment: '' }); }; handleSuccess = (endpoint) => { const obj = endpoint === 'Slack' ? { loadingSlack: false } : { loadingTeams: false }; this.setState(obj); toast.success(`Sent to ${endpoint}.`); }; changeSlackChannel = ({ value }) => this.setState({ channelId: value.value }); changeTeamsChannel = ({ value }) => this.setState({ teamsChannel: value.value }); onClickHandler = () => { this.setState({ isOpen: true }); }; render() { const { trigger, channels, msTeamsChannels, showCopyLink = false } = this.props; const { comment, channelId, teamsChannel, loadingSlack, loadingTeams } = this.state; const slackOptions = channels .map(({ webhookId, name }) => ({ value: webhookId, label: name })) .toJS(); const msTeamsOptions = msTeamsChannels .map(({ webhookId, name }) => ({ value: webhookId, label: name })) .toJS(); return ( this.setState({ isOpen: true })} onClose={() => this.setState({ isOpen: false, comment: '' })} render={() => (
{this.state.loadingTeams || this.state.loadingSlack ? ( ) : ( <>
Share
{slackOptions.length > 0 || msTeamsOptions.length > 0 ? (