'use strict'; import React, { Component } from 'react'; import axios, { HTTPMethod } from './axios'; import { translate } from 'react-i18next'; import PropTypes from 'prop-types'; import { Icon, ModalDialog } from "./bootstrap-components"; import {getUrl} from "./urls"; import {withPageHelpers} from "./page"; import styles from './styles.scss'; import interoperableErrors from '../../../shared/interoperable-errors'; import {Link} from "react-router-dom"; @translate() @withPageHelpers export class RestActionModalDialog extends Component { static propTypes = { title: PropTypes.string.isRequired, message: PropTypes.string.isRequired, stateOwner: PropTypes.object, visible: PropTypes.bool.isRequired, actionMethod: PropTypes.func.isRequired, actionUrl: PropTypes.string.isRequired, backUrl: PropTypes.string, successUrl: PropTypes.string, onBack: PropTypes.func, onPerformingAction: PropTypes.func, onSuccess: PropTypes.func, actionInProgressMsg: PropTypes.string.isRequired, actionDoneMsg: PropTypes.string.isRequired, onErrorAsync: PropTypes.func } async hideModal(isBack) { if (this.props.backUrl) { this.navigateTo(this.props.backUrl); } else { if (isBack) { this.props.onBack(); } else { this.props.onPerformingAction(); } } } async performAction() { const props = this.props; const t = props.t; const owner = props.stateOwner; await this.hideModal(false); try { if (!owner) { this.setFlashMessage('info', props.actionInProgressMsg); } else { owner.disableForm(); owner.setFormStatusMessage('info', props.actionInProgressMsg); } await axios.method(props.actionMethod, getUrl(props.actionUrl)); if (props.successUrl) { this.navigateToWithFlashMessage(props.successUrl, 'success', props.actionDoneMsg); } else { props.onSuccess(); this.setFlashMessage('success', props.actionDoneMsg); } } catch (err) { if (props.onErrorAsync) { await props.onErrorAsync(err); } else { throw err; } } } render() { const t = this.props.t; return ( ); } } @translate() @withPageHelpers export class DeleteModalDialog extends Component { constructor(props) { super(props); const t = props.t; this.entityTypeLabels = { 'namespace': t('namespace'), 'list': t('list'), 'customForm': t('customForms'), 'campaign': t('campaign'), 'template': t('template'), 'sendConfiguration': t('sendConfiguration'), 'report': t('report'), 'reportTemplate': t('reportTemplate'), 'mosaicoTemplate': t('mosaicoTemplate') }; } static propTypes = { visible: PropTypes.bool.isRequired, stateOwner: PropTypes.object, name: PropTypes.string, deleteUrl: PropTypes.string.isRequired, backUrl: PropTypes.string, successUrl: PropTypes.string, onBack: PropTypes.func, onPerformingAction: PropTypes.func, onSuccess: PropTypes.func, onFail: PropTypes.func, deletingMsg: PropTypes.string.isRequired, deletedMsg: PropTypes.string.isRequired } async onErrorAsync(err) { const t = this.props.t; if (err instanceof interoperableErrors.DependencyPresentError) { const owner = this.props.stateOwner; const name = this.props.name !== undefined ? this.props.name : (owner ? owner.getFormValue('name') : ''); this.setFlashMessage('danger',

{t('deleteDialog.cannotDeleteDueToDependencies', {name})}

); window.scrollTo(0, 0); // This is to scroll up because the flash message appears on top and it's quite misleading if the delete fails and the message is not in the viewport if (this.props.onFail) { this.props.onFail(); } if (owner) { owner.enableForm(); owner.clearFormStatusMessage(); } } else { throw err; } } render() { const t = this.props.t; const owner = this.props.stateOwner; const name = this.props.name !== undefined ? this.props.name : (owner ? owner.getFormValue('name') : ''); return } } export function tableDeleteDialogInit(owner) { owner.deleteDialogData = {}; owner.state.deleteDialogShown = false; } export function tableDeleteDialogAddDeleteButton(actions, owner, perms, id, name) { const t = owner.props.t; if (!perms || perms.includes('delete')) { if (owner.deleteDialogData.id) { actions.push({ label: }); } else { actions.push({ label: , action: () => { owner.deleteDialogData = {name, id}; owner.setState({ deleteDialogShown: true }); owner.table.refresh(); } }); } } } export function tableDeleteDialogRender(owner, deleteUrlBase, deletingMsg, deletedMsg) { function hide() { owner.deleteDialogData = {}; owner.setState({ deleteDialogShown: false }); owner.table.refresh(); } return ( owner.setState({ deleteDialogShown: false })} onSuccess={hide} onFail={hide} deletingMsg={deletingMsg} deletedMsg={deletedMsg} /> ); }