import React from 'react'; import PropTypes from 'prop-types'; import { Modal, ModalHeader, ModalBody, } from 'reactstrap'; import { withTranslation } from 'react-i18next'; import { withUnstatedContainers } from './UnstatedUtils'; import AppContainer from '../services/AppContainer'; import PageContainer from '../services/PageContainer'; import ShareLinkList from './ShareLinkList'; import ShareLinkForm from './ShareLinkForm'; import { toastSuccess, toastError } from '../util/apiNotification'; class OutsideShareLinkModal extends React.Component { constructor() { super(); this.state = { shareLinks: [], isOpenShareLinkForm: false, }; this.toggleShareLinkFormHandler = this.toggleShareLinkFormHandler.bind(this); this.deleteAllLinksButtonHandler = this.deleteAllLinksButtonHandler.bind(this); this.deleteLinkById = this.deleteLinkById.bind(this); } componentDidMount() { this.retrieveShareLinks(); } async retrieveShareLinks() { const { appContainer, pageContainer } = this.props; const { pageId } = pageContainer.state; try { const res = await appContainer.apiv3.get('/share-links/', { relatedPage: pageId }); const { shareLinksResult } = res.data; this.setState({ shareLinks: shareLinksResult }); } catch (err) { toastError(err); } } toggleShareLinkFormHandler() { this.setState({ isOpenShareLinkForm: !this.state.isOpenShareLinkForm }); this.retrieveShareLinks(); } async deleteAllLinksButtonHandler() { const { t, appContainer, pageContainer } = this.props; const { pageId } = pageContainer.state; try { const res = await appContainer.apiv3.delete('/share-links/', { relatedPage: pageId }); const count = res.data.n; toastSuccess(t('toaster.remove_share_link', { count })); } catch (err) { toastError(err); } this.retrieveShareLinks(); } async deleteLinkById(shareLinkId) { const { t, appContainer } = this.props; try { const res = await appContainer.apiv3Delete(`/share-links/${shareLinkId}`); const { deletedShareLink } = res.data; toastSuccess(t('toaster.remove_share_link_success', { shareLinkId: deletedShareLink._id })); } catch (err) { toastError(err); } this.retrieveShareLinks(); } render() { return ( Title

Shared Link List

{this.state.isOpenShareLinkForm && }
); } } /** * Wrapper component for using unstated */ const ModalControlWrapper = withUnstatedContainers(OutsideShareLinkModal, [AppContainer, PageContainer]); OutsideShareLinkModal.propTypes = { t: PropTypes.func.isRequired, // i18next appContainer: PropTypes.instanceOf(AppContainer).isRequired, pageContainer: PropTypes.instanceOf(PageContainer).isRequired, isOpen: PropTypes.bool.isRequired, onClose: PropTypes.func.isRequired, }; export default withTranslation()(ModalControlWrapper);