import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; import { defaultSupportedCommandsNameForBroadcastUse, defaultSupportedCommandsNameForSingleUse } from '@growi/slack'; import loggerFactory from '~/utils/logger'; import { toastSuccess, toastError } from '../../../client/util/apiNotification'; const logger = loggerFactory('growi:SlackIntegration:ManageCommandsProcess'); const ManageCommandsProcess = ({ apiv3Put, slackAppIntegrationId, supportedCommandsForBroadcastUse, supportedCommandsForSingleUse, }) => { const { t } = useTranslation(); const [selectedCommandsForBroadcastUse, setSelectedCommandsForBroadcastUse] = useState(new Set(supportedCommandsForBroadcastUse)); const [selectedCommandsForSingleUse, setSelectedCommandsForSingleUse] = useState(new Set(supportedCommandsForSingleUse)); const toggleCheckboxForBroadcast = (e) => { const { target } = e; const { name, checked } = target; setSelectedCommandsForBroadcastUse((prevState) => { const selectedCommands = new Set(prevState); if (checked) { selectedCommands.add(name); } else { selectedCommands.delete(name); } return selectedCommands; }); }; const toggleCheckboxForSingleUse = (e) => { const { target } = e; const { name, checked } = target; setSelectedCommandsForSingleUse((prevState) => { const selectedCommands = new Set(prevState); if (checked) { selectedCommands.add(name); } else { selectedCommands.delete(name); } return selectedCommands; }); }; const updateCommandsHandler = async() => { try { await apiv3Put(`/slack-integration-settings/slack-app-integrations/${slackAppIntegrationId}/supported-commands`, { supportedCommandsForBroadcastUse: Array.from(selectedCommandsForBroadcastUse), supportedCommandsForSingleUse: Array.from(selectedCommandsForSingleUse), }); toastSuccess(t('toaster.update_successed', { target: 'Token' })); } catch (err) { toastError(err); logger.error(err); } }; return (

{t('admin:slack_integration.accordion.manage_commands')}

Multiple GROWI

{t('admin:slack_integration.accordion.multiple_growi_command')}

{defaultSupportedCommandsNameForBroadcastUse.map((commandName) => { const checkboxId = `${commandName}-${slackAppIntegrationId}`; return (
); })}

Single GROWI

{t('admin:slack_integration.accordion.single_growi_command')}

{defaultSupportedCommandsNameForSingleUse.map((commandName) => { const checkboxId = `${commandName}-${slackAppIntegrationId}`; return (
); })}
); }; ManageCommandsProcess.propTypes = { apiv3Put: PropTypes.func, slackAppIntegrationId: PropTypes.string.isRequired, supportedCommandsForBroadcastUse: PropTypes.arrayOf(PropTypes.string), supportedCommandsForSingleUse: PropTypes.arrayOf(PropTypes.string), }; export default ManageCommandsProcess;