import { useModal } from 'Components/Modal';
import React, { useState, useEffect } from 'react';
import { toast } from 'react-toastify';
import { Icon, Loader } from 'UI';
import styles from './sharePopup.module.css';
import IntegrateSlackButton from '../IntegrateSlackButton/IntegrateSlackButton';
import SessionCopyLink from './SessionCopyLink';
import Select from 'Shared/Select';
import { Button, Segmented } from 'antd';
import { PlayerContext } from 'App/components/Session/playerContext';
import { observer } from 'mobx-react-lite';
import { useStore } from 'App/mstore';
interface Msg {
integrationId: string;
entity: 'sessions';
entityId: string;
data: { comment: string };
}
const SharePopup = ({
trigger,
showCopyLink = false,
}: {
trigger: React.ReactNode;
showCopyLink?: boolean;
}) => {
const { store } = React.useContext(PlayerContext);
const { showModal, hideModal } = useModal();
const openModal = () => {
showModal(
,
{ right: true, width: 300 }
);
};
return (
{trigger}
);
};
interface Props {
showCopyLink?: boolean;
hideModal: () => void;
time: number;
}
function ShareModalComp({
showCopyLink,
hideModal,
time,
}: Props) {
const { integrationsStore, sessionStore, userStore } = useStore();
const sessionId = sessionStore.current.sessionId
const channels = integrationsStore.slack.list;
const slackLoaded = integrationsStore.slack.loaded;
const msTeamsChannels = integrationsStore.msteams.list;
const msTeamsLoaded = integrationsStore.msteams.loaded;
const fetchSlack = integrationsStore.slack.fetchIntegrations;
const fetchTeams = integrationsStore.msteams.fetchIntegrations;
const sendSlackMsg = integrationsStore.slack.sendMessage;
const sendMsTeamsMsg = integrationsStore.msteams.sendMessage;
const [shareTo, setShareTo] = useState('slack');
const [comment, setComment] = useState('');
// @ts-ignore
const [channelId, setChannelId] = useState(channels[0]?.webhookId);
// @ts-ignore
const [teamsChannel, setTeamsChannel] = useState(msTeamsChannels[0]?.webhookId);
const [loadingSlack, setLoadingSlack] = useState(false);
const [loadingTeams, setLoadingTeams] = useState(false);
const isLoading = loadingSlack || loadingTeams;
useEffect(() => {
// @ts-ignore
if (channels.size === 0 && !slackLoaded) {
fetchSlack();
}
// @ts-ignore
if (msTeamsChannels.size === 0 && !msTeamsLoaded) {
fetchTeams();
}
}, [channels, slackLoaded, msTeamsChannels, msTeamsLoaded, fetchSlack, fetchTeams]);
const editMessage = (e: React.ChangeEvent) => setComment(e.target.value);
const shareToSlack = () => {
setLoadingSlack(true);
void sendSlackMsg({
integrationId: channelId,
entity: 'sessions',
entityId: sessionId,
data: { comment },
}).then(() => handleSuccess('Slack'));
};
const shareToMSTeams = () => {
setLoadingTeams(true);
sendMsTeamsMsg({
integrationId: teamsChannel,
entity: 'sessions',
entityId: sessionId,
data: { comment },
}).then(() => handleSuccess('MS Teams'));
};
const handleSuccess = (endpoint: string) => {
if (endpoint === 'Slack') {
setLoadingSlack(false);
} else {
setLoadingTeams(false);
}
// @ts-ignore
toast.success(`Sent to ${endpoint}.`);
};
const changeSlackChannel = (value: any) => setChannelId(value.value);
const changeTeamsChannel = (value: any) => setTeamsChannel(value.value);
const slackOptions = channels
.map(({ webhookId, name }) => ({
value: webhookId,
label: name,
}))
const msTeamsOptions = msTeamsChannels
.map(({ webhookId, name }) => ({
value: webhookId,
label: name,
}))
const sendMsg = () => {
if (shareTo === 'slack') {
shareToSlack();
} else {
shareToMSTeams();
}
hideModal();
}
const hasBoth = slackOptions.length > 0 && msTeamsOptions.length > 0;
const hasNothing = slackOptions.length === 0 && msTeamsOptions.length === 0;
return (
{isLoading ? (
) : (
<>
{!hasNothing ? (
Share via
{hasBoth ? (
Slack
,
value: 'slack',
},
{
label:
,
value: 'teams',
},
]}
onChange={(value) => setShareTo(value as 'slack' | 'teams')}
/>
) : (
0
? 'integrations/slack-bw'
: 'integrations/teams-white'
}
size={16}
/>
{slackOptions.length > 0 ? 'Slack' : 'MS Teams'}
)}
Select a channel or individual
{shareTo === 'slack' ? (
) : (
)}
) : (
<>
{showCopyLink && (
<>
>
)}
>
)}
>
)}
);
}
const ShareModal = observer(ShareModalComp);
export default observer(SharePopup);