import React, { useMemo, useState } from 'react';
import PropTypes from 'prop-types';
import loggerFactory from '@alias/logger';
import { TabContent, TabPane } from 'reactstrap';
import { withUnstatedContainers } from '../../UnstatedUtils';
import { toastError } from '../../../util/apiNotification';
import toArrayIfNot from '../../../../../lib/util/toArrayIfNot';
import { withLoadingSppiner } from '../../SuspenseUtils';
import AdminNotificationContainer from '../../../services/AdminNotificationContainer';
import { CustomNav } from '../../CustomNavigation';
import SlackAppConfiguration from './SlackAppConfiguration';
import UserTriggerNotification from './UserTriggerNotification';
import GlobalNotification from './GlobalNotification';
const logger = loggerFactory('growi:NotificationSetting');
let retrieveErrors = null;
function NotificationSetting(props) {
const { adminNotificationContainer } = props;
const [activeTab, setActiveTab] = useState('slack_configuration');
const [activeComponents, setActiveComponents] = useState(new Set(['slack_configuration']));
const switchActiveTab = (selectedTab) => {
setActiveTab(selectedTab);
setActiveComponents(activeComponents.add(selectedTab));
};
if (adminNotificationContainer.state.webhookUrl === adminNotificationContainer.dummyWebhookUrl) {
throw (async() => {
try {
await adminNotificationContainer.retrieveNotificationData();
}
catch (err) {
const errs = toArrayIfNot(err);
toastError(errs);
logger.error(errs);
retrieveErrors = errs;
adminNotificationContainer.setState({ webhookUrl: adminNotificationContainer.dummyWebhookUrlForError });
}
})();
}
if (adminNotificationContainer.state.webhookUrl === adminNotificationContainer.dummyWebhookUrlForError) {
throw new Error(`${retrieveErrors.length} errors occured`);
}
const navTabMapping = useMemo(() => {
return {
slack_configuration: {
Icon: () => ,
i18n: 'Slack configuration',
index: 0,
},
user_trigger_notification: {
Icon: () => ,
i18n: 'User trigger notification',
index: 1,
},
global_notification: {
Icon: () => ,
i18n: 'Global notification',
index: 2,
},
};
}, []);
return (
<>
{activeComponents.has('slack_configuration') && }
{activeComponents.has('user_trigger_notification') && }
{activeComponents.has('global_notification') && }
>
);
}
const NotificationSettingWithUnstatedContainer = withUnstatedContainers(withLoadingSppiner(NotificationSetting), [AdminNotificationContainer]);
NotificationSetting.propTypes = {
adminNotificationContainer: PropTypes.instanceOf(AdminNotificationContainer).isRequired,
};
export default NotificationSettingWithUnstatedContainer;