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 CustomBotWithProxyIntegrationCard from './CustomBotWithProxyIntegrationCard'; import WithProxyAccordions from './WithProxyAccordions'; import DeleteSlackBotSettingsModal from './DeleteSlackBotSettingsModal'; const logger = loggerFactory('growi:SlackBotSettings'); const CustomBotWithProxySettings = (props) => { const { appContainer, slackAppIntegrations, proxyServerUri } = props; const [isDeleteConfirmModalShown, setIsDeleteConfirmModalShown] = useState(false); const { t } = useTranslation(); const [newProxyServerUri, setNewProxyServerUri] = useState(); useEffect(() => { if (proxyServerUri != null) { setNewProxyServerUri(proxyServerUri); } }, [proxyServerUri]); const addSlackAppIntegrationHandler = async() => { // TODO implement }; const discardTokenHandler = async(tokenGtoP, tokenPtoG) => { try { await appContainer.apiv3.delete('/slack-integration-settings/slack-app-integration', { tokenGtoP, tokenPtoG }); } catch (err) { toastError(err); logger(err); } }; const generateTokenHandler = async() => { try { await appContainer.apiv3.put('/slack-integration-settings/access-tokens'); } catch (err) { toastError(err); logger(err); } }; const deleteSlackSettingsHandler = async() => { try { // TODO imple delete PtoG and GtoP Token at GW 5861 await appContainer.apiv3.put('/slack-integration-settings/custom-bot-with-proxy'); toastSuccess('success'); } catch (err) { toastError(err); } }; const updateProxyUri = async() => { try { await appContainer.apiv3.put('/slack-integration-settings/proxy-uri', { newProxyServerUri, }); toastSuccess(t('toaster.update_successed', { target: t('Proxy URL') })); } catch (err) { toastError(err); logger.error(err); } }; return ( <>

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

{/* TODO delete tmp props */}
{ setNewProxyServerUri(e.target.value) }} />

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

{slackAppIntegrations.map((slackAppIntegration) => { const { tokenGtoP, tokenPtoG } = slackAppIntegration; return (
discardTokenHandler(tokenGtoP, tokenPtoG)} generateTokenHandler={generateTokenHandler} tokenGtoP={tokenGtoP} tokenPtoG={tokenPtoG} />
); })}
setIsDeleteConfirmModalShown(false)} onClickDeleteButton={deleteSlackSettingsHandler} /> ); }; const CustomBotWithProxySettingsWrapper = withUnstatedContainers(CustomBotWithProxySettings, [AppContainer]); CustomBotWithProxySettings.defaultProps = { slackAppIntegrations: [], }; CustomBotWithProxySettings.propTypes = { appContainer: PropTypes.instanceOf(AppContainer).isRequired, slackAppIntegrations: PropTypes.array, proxyServerUri: PropTypes.string, }; export default CustomBotWithProxySettingsWrapper;