import React, { useState, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; import PropTypes from 'prop-types'; import loggerFactory from '@alias/logger'; import AppContainer from '../../../services/AppContainer'; import { withUnstatedContainers } from '../../UnstatedUtils'; import { toastSuccess, toastError } from '../../../util/apiNotification'; import CustomBotWithProxyConnectionStatus from './CustomBotWithProxyConnectionStatus'; import WithProxyAccordions from './WithProxyAccordions'; import DeleteSlackBotSettingsModal from './DeleteSlackBotSettingsModal'; const logger = loggerFactory('growi:SlackBotSettings'); const CustomBotWithProxySettings = (props) => { const { appContainer, slackAppIntegrations, proxyServerUri, onClickAddSlackWorkspaceBtn, connectionStatuses, } = props; const [newProxyServerUri, setNewProxyServerUri] = useState(); const [integrationIdToDelete, setIntegrationIdToDelete] = useState(null); const [siteName, setSiteName] = useState(''); const { t } = useTranslation(); useEffect(() => { if (proxyServerUri != null) { setNewProxyServerUri(proxyServerUri); } }, [proxyServerUri]); const fetchSlackIntegrationData = () => { if (props.onClickDeleteSlackAppIntegrationBtn != null) { props.onClickDeleteSlackAppIntegrationBtn(); } }; const addSlackAppIntegrationHandler = async() => { if (onClickAddSlackWorkspaceBtn != null) { onClickAddSlackWorkspaceBtn(); } }; const deleteSlackAppIntegrationHandler = async() => { try { await appContainer.apiv3.delete('/slack-integration-settings/slack-app-integration', { integrationIdToDelete }); fetchSlackIntegrationData(); toastSuccess(t('toaster.delete_slack_integration_procedure')); } catch (err) { toastError(err); logger.error(err); } }; const updateProxyUri = async() => { try { await appContainer.apiv3.put('/slack-integration-settings/proxy-uri', { proxyUri: newProxyServerUri, }); toastSuccess(t('toaster.update_successed', { target: 'Proxy URL' })); } catch (err) { toastError(err); logger.error(err); } }; useEffect(() => { const siteName = appContainer.config.crowi.title; setSiteName(siteName); }, [appContainer]); return ( <>

{t('admin:slack_integration.custom_bot_with_proxy_integration')} {/* TODO: add an appropriate links by GW-5614 */}

{slackAppIntegrations.length !== 0 && ( <>
{ setNewProxyServerUri(e.target.value) }} />

{t('admin:slack_integration.integration_procedure')}

)}
{slackAppIntegrations.map((slackAppIntegration, i) => { const { tokenGtoP, tokenPtoG, _id } = slackAppIntegration; const workspaceName = connectionStatuses[_id]?.workspaceName; return (

{(workspaceName != null) ? `${workspaceName} Work Space` : `Settings #${i}`}

); })}
setIntegrationIdToDelete(null)} onClickDeleteButton={deleteSlackAppIntegrationHandler} /> ); }; const CustomBotWithProxySettingsWrapper = withUnstatedContainers(CustomBotWithProxySettings, [AppContainer]); CustomBotWithProxySettings.defaultProps = { slackAppIntegrations: [], }; CustomBotWithProxySettings.propTypes = { appContainer: PropTypes.instanceOf(AppContainer).isRequired, slackAppIntegrations: PropTypes.array, proxyServerUri: PropTypes.string, onClickAddSlackWorkspaceBtn: PropTypes.func, onClickDeleteSlackAppIntegrationBtn: PropTypes.func, connectionStatuses: PropTypes.object.isRequired, }; export default CustomBotWithProxySettingsWrapper;