Work in progress on confirmation dialogs displayed when one navigates from a page with unsaved changes.
Optimized imports.
This commit is contained in:
parent
48dcf2c701
commit
3921a6b2cb
76 changed files with 540 additions and 1291 deletions
|
@ -3,17 +3,9 @@
|
|||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {Trans} from 'react-i18next';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page'
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page'
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import axios from '../lib/axios';
|
||||
import {Button} from '../lib/bootstrap-components';
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
|
|
@ -3,30 +3,22 @@
|
|||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {Trans} from 'react-i18next';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page'
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page'
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
Fieldset,
|
||||
filterData,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
InputField,
|
||||
withForm
|
||||
withForm,
|
||||
withFormErrorHandlers
|
||||
} from '../lib/form';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import passwordValidator
|
||||
from '../../../shared/password-validator';
|
||||
import interoperableErrors
|
||||
from '../../../shared/interoperable-errors';
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import passwordValidator from '../../../shared/password-validator';
|
||||
import interoperableErrors from '../../../shared/interoperable-errors';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
@ -45,6 +37,8 @@ export default class Account extends Component {
|
|||
this.state = {};
|
||||
|
||||
this.initForm({
|
||||
loadMutator: ::this.getFormValuesMutator,
|
||||
submitMutator: ::this.submitFormValuesMutator,
|
||||
serverValidation: {
|
||||
url: 'rest/account-validate',
|
||||
changed: ['email', 'currentPassword']
|
||||
|
@ -52,13 +46,19 @@ export default class Account extends Component {
|
|||
});
|
||||
}
|
||||
|
||||
getFormValuesMutator(data) {
|
||||
data.password = '';
|
||||
data.password2 = '';
|
||||
data.currentPassword = '';
|
||||
}
|
||||
|
||||
submitFormValuesMutator(data) {
|
||||
return filterData(data, ['name', 'email', 'password', 'currentPassword']);
|
||||
}
|
||||
|
||||
@withAsyncErrorHandler
|
||||
async loadFormValues() {
|
||||
await this.getFormValuesFromURL('rest/account', data => {
|
||||
data.password = '';
|
||||
data.password2 = '';
|
||||
data.currentPassword = '';
|
||||
});
|
||||
await this.getFormValuesFromURL('rest/account');
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
|
@ -127,6 +127,7 @@ export default class Account extends Component {
|
|||
state.setIn(['password2', 'error'], password !== password2 ? t('passwordsMustMatch') : null);
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler() {
|
||||
const t = this.props.t;
|
||||
|
||||
|
@ -134,9 +135,7 @@ export default class Account extends Component {
|
|||
this.disableForm();
|
||||
this.setFormStatusMessage('info', t('updatingUserProfile'));
|
||||
|
||||
const submitSuccessful = await this.validateAndSendFormValuesToURL(FormSendMethod.POST, 'rest/account', data => {
|
||||
delete data.password2;
|
||||
});
|
||||
const submitSuccessful = await this.validateAndSendFormValuesToURL(FormSendMethod.POST, 'rest/account');
|
||||
|
||||
if (submitSuccessful) {
|
||||
this.setFlashMessage('success', t('userProfileUpdated'));
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
'use strict';
|
||||
|
||||
import React
|
||||
from 'react';
|
||||
import Account
|
||||
from './Account';
|
||||
import API
|
||||
from './API';
|
||||
import React from 'react';
|
||||
import Account from './Account';
|
||||
import API from './API';
|
||||
|
||||
|
||||
function getMenus(t) {
|
||||
|
|
|
@ -1,19 +1,14 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from "react";
|
||||
import { withTranslation } from '../lib/i18n';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from "../lib/page";
|
||||
import {withAsyncErrorHandler, withErrorHandling} from "../lib/error-handling";
|
||||
import {withErrorHandling} from "../lib/error-handling";
|
||||
import {Table} from "../lib/table";
|
||||
import {ButtonRow, Form, InputField, withForm, FormSendMethod} from "../lib/form";
|
||||
import {Button, Icon} from "../lib/bootstrap-components";
|
||||
import axios, {HTTPMethod} from "../lib/axios";
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {
|
||||
tableAddRestActionButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../lib/modals";
|
||||
import {ButtonRow, Form, FormSendMethod, InputField, withForm} from "../lib/form";
|
||||
import {Button} from "../lib/bootstrap-components";
|
||||
import {HTTPMethod} from "../lib/axios";
|
||||
import {tableAddRestActionButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../lib/modals";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page'
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page'
|
||||
import {
|
||||
AlignedRow,
|
||||
Button,
|
||||
|
@ -17,45 +11,27 @@ import {
|
|||
CheckBox,
|
||||
Dropdown,
|
||||
Fieldset,
|
||||
filterData,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
InputField,
|
||||
StaticField,
|
||||
TableSelect,
|
||||
TextArea,
|
||||
withForm
|
||||
withForm,
|
||||
withFormErrorHandlers
|
||||
} from '../lib/form';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import {
|
||||
NamespaceSelect,
|
||||
validateNamespace
|
||||
} from '../lib/namespace';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import {NamespaceSelect, validateNamespace} from '../lib/namespace';
|
||||
import {DeleteModalDialog} from "../lib/modals";
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import {
|
||||
getTemplateTypes,
|
||||
getTypeForm,
|
||||
ResourceType
|
||||
} from '../templates/helpers';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import styles
|
||||
from "../lib/styles.scss";
|
||||
import campaignsStyles
|
||||
from "./styles.scss";
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {getTemplateTypes, getTypeForm, ResourceType} from '../templates/helpers';
|
||||
import axios from '../lib/axios';
|
||||
import styles from "../lib/styles.scss";
|
||||
import campaignsStyles from "./styles.scss";
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {
|
||||
campaignOverridables,
|
||||
CampaignSource,
|
||||
CampaignStatus,
|
||||
CampaignType
|
||||
} from "../../../shared/campaigns";
|
||||
import moment
|
||||
from 'moment';
|
||||
import {campaignOverridables, CampaignSource, CampaignStatus, CampaignType} from "../../../shared/campaigns";
|
||||
import moment from 'moment';
|
||||
import {getMailerTypes} from "../send-configurations/helpers";
|
||||
import {getCampaignLabels} from "./helpers";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
@ -116,6 +92,8 @@ export default class CUD extends Component {
|
|||
this.nextListEntryId = 0;
|
||||
|
||||
this.initForm({
|
||||
loadMutator: ::this.getFormValuesMutator,
|
||||
submitMutator: ::this.submitFormValuesMutator,
|
||||
onChange: {
|
||||
send_configuration: ::this.onSendConfigurationChanged
|
||||
},
|
||||
|
@ -200,9 +178,76 @@ export default class CUD extends Component {
|
|||
this.fetchSendConfiguration(data.send_configuration);
|
||||
}
|
||||
|
||||
submitFormValuesMutator(data) {
|
||||
const isEdit = !!this.props.entity;
|
||||
|
||||
data.source = Number.parseInt(data.source);
|
||||
|
||||
data.data = {};
|
||||
if (data.source === CampaignSource.TEMPLATE || data.source === CampaignSource.CUSTOM_FROM_TEMPLATE) {
|
||||
data.data.sourceTemplate = data.data_sourceTemplate;
|
||||
}
|
||||
|
||||
if (data.source === CampaignSource.CUSTOM_FROM_CAMPAIGN) {
|
||||
data.data.sourceCampaign = data.data_sourceCampaign;
|
||||
}
|
||||
|
||||
if (!isEdit && data.source === CampaignSource.CUSTOM) {
|
||||
this.templateTypes[data.data_sourceCustom_type].beforeSave(data);
|
||||
|
||||
data.data.sourceCustom = {
|
||||
type: data.data_sourceCustom_type,
|
||||
data: data.data_sourceCustom_data,
|
||||
html: data.data_sourceCustom_html,
|
||||
text: data.data_sourceCustom_text
|
||||
}
|
||||
}
|
||||
|
||||
if (data.source === CampaignSource.URL) {
|
||||
data.data.sourceUrl = data.data_sourceUrl;
|
||||
}
|
||||
|
||||
if (data.type === CampaignType.RSS) {
|
||||
data.data.feedUrl = data.data_feedUrl;
|
||||
}
|
||||
|
||||
for (const overridable of campaignOverridables) {
|
||||
if (!data[overridable + '_overriden']) {
|
||||
data[overridable + '_override'] = null;
|
||||
}
|
||||
delete data[overridable + '_overriden'];
|
||||
}
|
||||
|
||||
const lsts = [];
|
||||
for (const lstUid of data.lists) {
|
||||
const prefix = 'lists_' + lstUid + '_';
|
||||
|
||||
const useSegmentation = data[prefix + 'useSegmentation'] && (data.type === CampaignType.REGULAR || data.type === CampaignType.RSS);
|
||||
|
||||
lsts.push({
|
||||
list: data[prefix + 'list'],
|
||||
segment: useSegmentation ? data[prefix + 'segment'] : null
|
||||
});
|
||||
}
|
||||
data.lists = lsts;
|
||||
|
||||
for (const key in data) {
|
||||
if (key.startsWith('data_') || key.startsWith('lists_')) {
|
||||
delete data[key];
|
||||
}
|
||||
}
|
||||
|
||||
return filterData(data, [
|
||||
'name', 'description', 'segment', 'namespace', 'send_configuration',
|
||||
'from_name_override', 'from_email_override', 'reply_to_override', 'subject_override',
|
||||
'data', 'click_tracking_disabled', 'open_tracking_disabled', 'unsubscribe_url',
|
||||
'type', 'source', 'parent', 'lists'
|
||||
]);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
if (this.props.entity) {
|
||||
this.getFormValuesFromEntity(this.props.entity, ::this.getFormValuesMutator);
|
||||
this.getFormValuesFromEntity(this.props.entity);
|
||||
|
||||
if (this.props.entity.status === CampaignStatus.SENDING) {
|
||||
this.disableForm();
|
||||
|
@ -345,8 +390,8 @@ export default class CUD extends Component {
|
|||
STATUS: 2
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler(afterSubmitAction) {
|
||||
const isEdit = !!this.props.entity;
|
||||
const t = this.props.t;
|
||||
|
||||
let sendMethod, url;
|
||||
|
@ -361,63 +406,7 @@ export default class CUD extends Component {
|
|||
this.disableForm();
|
||||
this.setFormStatusMessage('info', t('saving'));
|
||||
|
||||
const submitResult = await this.validateAndSendFormValuesToURL(sendMethod, url, data => {
|
||||
data.source = Number.parseInt(data.source);
|
||||
|
||||
data.data = {};
|
||||
if (data.source === CampaignSource.TEMPLATE || data.source === CampaignSource.CUSTOM_FROM_TEMPLATE) {
|
||||
data.data.sourceTemplate = data.data_sourceTemplate;
|
||||
}
|
||||
|
||||
if (data.source === CampaignSource.CUSTOM_FROM_CAMPAIGN) {
|
||||
data.data.sourceCampaign = data.data_sourceCampaign;
|
||||
}
|
||||
|
||||
if (!isEdit && data.source === CampaignSource.CUSTOM) {
|
||||
this.templateTypes[data.data_sourceCustom_type].beforeSave(data);
|
||||
|
||||
data.data.sourceCustom = {
|
||||
type: data.data_sourceCustom_type,
|
||||
data: data.data_sourceCustom_data,
|
||||
html: data.data_sourceCustom_html,
|
||||
text: data.data_sourceCustom_text
|
||||
}
|
||||
}
|
||||
|
||||
if (data.source === CampaignSource.URL) {
|
||||
data.data.sourceUrl = data.data_sourceUrl;
|
||||
}
|
||||
|
||||
if (data.type === CampaignType.RSS) {
|
||||
data.data.feedUrl = data.data_feedUrl;
|
||||
}
|
||||
|
||||
for (const overridable of campaignOverridables) {
|
||||
if (!data[overridable + '_overriden']) {
|
||||
data[overridable + '_override'] = null;
|
||||
}
|
||||
delete data[overridable + '_overriden'];
|
||||
}
|
||||
|
||||
const lsts = [];
|
||||
for (const lstUid of data.lists) {
|
||||
const prefix = 'lists_' + lstUid + '_';
|
||||
|
||||
const useSegmentation = data[prefix + 'useSegmentation'] && (data.type === CampaignType.REGULAR || data.type === CampaignType.RSS);
|
||||
|
||||
lsts.push({
|
||||
list: data[prefix + 'list'],
|
||||
segment: useSegmentation ? data[prefix + 'segment'] : null
|
||||
});
|
||||
}
|
||||
data.lists = lsts;
|
||||
|
||||
for (const key in data) {
|
||||
if (key.startsWith('data_') || key.startsWith('lists_')) {
|
||||
delete data[key];
|
||||
}
|
||||
}
|
||||
});
|
||||
const submitResult = await this.validateAndSendFormValuesToURL(sendMethod, url);
|
||||
|
||||
if (submitResult) {
|
||||
if (this.props.entity) {
|
||||
|
@ -426,7 +415,7 @@ export default class CUD extends Component {
|
|||
} else if (afterSubmitAction === CUD.AfterSubmitAction.LEAVE) {
|
||||
this.navigateToWithFlashMessage('/campaigns', 'success', t('Campaign updated'));
|
||||
} else {
|
||||
await this.getFormValuesFromURL(`rest/campaigns-settings/${this.props.entity.id}`, ::this.getFormValuesMutator);
|
||||
await this.getFormValuesFromURL(`rest/campaigns-settings/${this.props.entity.id}`);
|
||||
this.enableForm();
|
||||
this.setFormStatusMessage('success', t('Campaign updated'));
|
||||
}
|
||||
|
|
|
@ -1,35 +1,24 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page'
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page'
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
filterData,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
StaticField,
|
||||
withForm
|
||||
withForm,
|
||||
withFormErrorHandlers
|
||||
} from '../lib/form';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import {
|
||||
getEditForm,
|
||||
getTemplateTypes,
|
||||
getTypeForm,
|
||||
ResourceType
|
||||
} from '../templates/helpers';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import styles
|
||||
from "../lib/styles.scss";
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {getEditForm, getTemplateTypes, getTypeForm, ResourceType} from '../templates/helpers';
|
||||
import axios from '../lib/axios';
|
||||
import styles from "../lib/styles.scss";
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {TestSendModalDialog} from "./TestSendModalDialog";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
@ -65,7 +54,11 @@ export default class CustomContent extends Component {
|
|||
exportModalTitle: ''
|
||||
};
|
||||
|
||||
this.initForm();
|
||||
this.initForm({
|
||||
loadMutator: ::this.getFormValuesMutator,
|
||||
submitMutator: ::this.submitFormValuesMutator,
|
||||
getPreSubmitUpdater: ::this.getPreSubmitFormValuesUpdater,
|
||||
});
|
||||
|
||||
this.sendModalGetDataHandler = ::this.sendModalGetData;
|
||||
this.exportModalGetContentHandler = ::this.exportModalGetContent;
|
||||
|
@ -90,9 +83,32 @@ export default class CustomContent extends Component {
|
|||
this.templateTypes[data.data.sourceCustom.type].afterLoad(data);
|
||||
}
|
||||
|
||||
submitFormValuesMutator(data) {
|
||||
this.templateTypes[data.data_sourceCustom_type].beforeSave(data);
|
||||
|
||||
data.data.sourceCustom = {
|
||||
type: data.data_sourceCustom_type,
|
||||
data: data.data_sourceCustom_data,
|
||||
html: data.data_sourceCustom_html,
|
||||
text: data.data_sourceCustom_text
|
||||
};
|
||||
|
||||
return filterData(data, ['data']);
|
||||
}
|
||||
|
||||
async getPreSubmitFormValuesUpdater() {
|
||||
const customTemplateTypeKey = this.getFormValue('data_sourceCustom_type');
|
||||
const exportedData = await this.templateTypes[customTemplateTypeKey].exportHTMLEditorData(this);
|
||||
|
||||
return mutStateData => {
|
||||
for (const key in exportedData) {
|
||||
mutStateData.setIn([key, 'value'], exportedData[key]);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.getFormValuesFromEntity(this.props.entity, ::this.getFormValuesMutator);
|
||||
this.getFormValuesFromEntity(this.props.entity);
|
||||
}
|
||||
|
||||
localValidateFormValues(state) {
|
||||
|
@ -115,35 +131,17 @@ export default class CustomContent extends Component {
|
|||
STATUS: 2
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler(afterSubmitAction) {
|
||||
const t = this.props.t;
|
||||
|
||||
const customTemplateTypeKey = this.getFormValue('data_sourceCustom_type');
|
||||
const exportedData = await this.templateTypes[customTemplateTypeKey].exportHTMLEditorData(this);
|
||||
|
||||
const sendMethod = FormSendMethod.PUT;
|
||||
const url = `rest/campaigns-content/${this.props.entity.id}`;
|
||||
|
||||
this.disableForm();
|
||||
this.setFormStatusMessage('info', t('saving'));
|
||||
|
||||
const submitResult = await this.validateAndSendFormValuesToURL(sendMethod, url, data => {
|
||||
Object.assign(data, exportedData);
|
||||
this.templateTypes[data.data_sourceCustom_type].beforeSave(data);
|
||||
|
||||
data.data.sourceCustom = {
|
||||
type: data.data_sourceCustom_type,
|
||||
data: data.data_sourceCustom_data,
|
||||
html: data.data_sourceCustom_html,
|
||||
text: data.data_sourceCustom_text
|
||||
};
|
||||
|
||||
for (const key in data) {
|
||||
if (key.startsWith('data_')) {
|
||||
delete data[key];
|
||||
}
|
||||
}
|
||||
});
|
||||
const submitResult = await this.validateAndSendFormValuesToURL(sendMethod, url);
|
||||
|
||||
if (submitResult) {
|
||||
if (afterSubmitAction === CustomContent.AfterSubmitAction.STATUS) {
|
||||
|
@ -151,7 +149,7 @@ export default class CustomContent extends Component {
|
|||
} else if (afterSubmitAction === CustomContent.AfterSubmitAction.LEAVE) {
|
||||
this.navigateToWithFlashMessage('/campaigns', 'success', t('Campaign updated'));
|
||||
} else {
|
||||
await this.getFormValuesFromURL(`rest/campaigns-content/${this.props.entity.id}`, ::this.getFormValuesMutator);
|
||||
await this.getFormValuesFromURL(`rest/campaigns-content/${this.props.entity.id}`);
|
||||
this.enableForm();
|
||||
this.setFormStatusMessage('success', t('Campaign updated'));
|
||||
}
|
||||
|
|
|
@ -1,14 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import {Table} from "../lib/table";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
|
|
@ -1,32 +1,20 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import axios
|
||||
from "../lib/axios";
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import axios from "../lib/axios";
|
||||
import {getUrl} from "../lib/urls";
|
||||
|
||||
import Chart
|
||||
from 'react-google-charts';
|
||||
import Chart from 'react-google-charts';
|
||||
|
||||
import styles
|
||||
from "./styles.scss";
|
||||
import styles from "./styles.scss";
|
||||
import {Table} from "../lib/table";
|
||||
import {Link} from "react-router-dom";
|
||||
|
||||
import mailtrainConfig
|
||||
from "mailtrainConfig";
|
||||
import mailtrainConfig from "mailtrainConfig";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,14 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import {Table} from "../lib/table";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
|
|
@ -1,52 +1,20 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {
|
||||
AlignedRow,
|
||||
ButtonRow,
|
||||
CheckBox,
|
||||
DatePicker,
|
||||
Form,
|
||||
InputField,
|
||||
TableSelect,
|
||||
withForm
|
||||
} from '../lib/form';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {AlignedRow, ButtonRow, CheckBox, DatePicker, Form, InputField, TableSelect, withForm} from '../lib/form';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import {getCampaignLabels} from './helpers';
|
||||
import {Table} from "../lib/table";
|
||||
import {
|
||||
Button,
|
||||
Icon,
|
||||
ModalDialog
|
||||
} from "../lib/bootstrap-components";
|
||||
import axios
|
||||
from "../lib/axios";
|
||||
import {
|
||||
getPublicUrl,
|
||||
getUrl
|
||||
} from "../lib/urls";
|
||||
import interoperableErrors
|
||||
from '../../../shared/interoperable-errors';
|
||||
import {
|
||||
CampaignStatus,
|
||||
CampaignType
|
||||
} from "../../../shared/campaigns";
|
||||
import moment
|
||||
from 'moment';
|
||||
import campaignsStyles
|
||||
from "./styles.scss";
|
||||
import {Button, Icon, ModalDialog} from "../lib/bootstrap-components";
|
||||
import axios from "../lib/axios";
|
||||
import {getPublicUrl, getUrl} from "../lib/urls";
|
||||
import interoperableErrors from '../../../shared/interoperable-errors';
|
||||
import {CampaignStatus, CampaignType} from "../../../shared/campaigns";
|
||||
import moment from 'moment';
|
||||
import campaignsStyles from "./styles.scss";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
||||
|
|
|
@ -2,22 +2,13 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {ModalDialog} from "../lib/bootstrap-components";
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
withPageHelpers
|
||||
} from "../lib/page";
|
||||
import {
|
||||
Form,
|
||||
TableSelect,
|
||||
withForm
|
||||
} from "../lib/form";
|
||||
import {requiresAuthenticatedUser, withPageHelpers} from "../lib/page";
|
||||
import {Form, TableSelect, withForm} from "../lib/form";
|
||||
import {withErrorHandling} from "../lib/error-handling";
|
||||
import {getMailerTypes} from "../send-configurations/helpers";
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import axios from '../lib/axios';
|
||||
import {getUrl} from '../lib/urls';
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
import {
|
||||
CampaignStatus,
|
||||
CampaignType
|
||||
} from "../../../shared/campaigns";
|
||||
import {CampaignStatus, CampaignType} from "../../../shared/campaigns";
|
||||
|
||||
export function getCampaignLabels(t) {
|
||||
|
||||
|
|
|
@ -1,39 +1,21 @@
|
|||
'use strict';
|
||||
|
||||
import React
|
||||
from 'react';
|
||||
import React from 'react';
|
||||
|
||||
import Status
|
||||
from './Status';
|
||||
import Statistics
|
||||
from './Statistics';
|
||||
import CampaignsCUD
|
||||
from './CUD';
|
||||
import Content
|
||||
from './Content';
|
||||
import CampaignsList
|
||||
from './List';
|
||||
import Share
|
||||
from '../shares/Share';
|
||||
import Files
|
||||
from "../lib/files";
|
||||
import {
|
||||
CampaignSource,
|
||||
CampaignStatus,
|
||||
CampaignType
|
||||
} from "../../../shared/campaigns";
|
||||
import TriggersCUD
|
||||
from './triggers/CUD';
|
||||
import TriggersList
|
||||
from './triggers/List';
|
||||
import StatisticsSubsList
|
||||
from "./StatisticsSubsList";
|
||||
import Status from './Status';
|
||||
import Statistics from './Statistics';
|
||||
import CampaignsCUD from './CUD';
|
||||
import Content from './Content';
|
||||
import CampaignsList from './List';
|
||||
import Share from '../shares/Share';
|
||||
import Files from "../lib/files";
|
||||
import {CampaignSource, CampaignType} from "../../../shared/campaigns";
|
||||
import TriggersCUD from './triggers/CUD';
|
||||
import TriggersList from './triggers/List';
|
||||
import StatisticsSubsList from "./StatisticsSubsList";
|
||||
import {SubscriptionStatus} from "../../../shared/lists";
|
||||
import StatisticsOpened
|
||||
from "./StatisticsOpened";
|
||||
import StatisticsLinkClicks
|
||||
from "./StatisticsLinkClicks";
|
||||
import TemplatesCUD from "../templates/root";
|
||||
import StatisticsOpened from "./StatisticsOpened";
|
||||
import StatisticsLinkClicks from "./StatisticsLinkClicks";
|
||||
import {ellipsizeBreadcrumbLabel} from "../lib/helpers"
|
||||
|
||||
function getMenus(t) {
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../../lib/page';
|
||||
import {
|
||||
AlignedRow,
|
||||
Button,
|
||||
|
@ -26,12 +20,8 @@ import {
|
|||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {DeleteModalDialog} from "../../lib/modals";
|
||||
import {getTriggerTypes} from './helpers';
|
||||
import {
|
||||
Entity,
|
||||
Event
|
||||
} from '../../../../shared/triggers';
|
||||
import moment
|
||||
from 'moment';
|
||||
import {Entity, Event} from '../../../../shared/triggers';
|
||||
import moment from 'moment';
|
||||
import {getCampaignLabels} from "../helpers";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
|
|
|
@ -1,27 +1,15 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../../lib/page';
|
||||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {Table} from '../../lib/table';
|
||||
import {getTriggerTypes} from './helpers';
|
||||
import {Icon} from "../../lib/bootstrap-components";
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../../lib/modals";
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../../lib/modals";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
8
client/src/lib/bootstrap-components.js
vendored
8
client/src/lib/bootstrap-components.js
vendored
|
@ -2,12 +2,8 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from './i18n';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from './error-handling';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from './error-handling';
|
||||
import {withComponentMixins} from "./decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
import React from "react";
|
||||
import PropTypes from 'prop-types';
|
||||
import {createComponentMixin} from "./decorator-helpers";
|
||||
|
||||
function handleError(that, error) {
|
||||
|
|
|
@ -1,30 +1,16 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from "react";
|
||||
import PropTypes
|
||||
from "prop-types";
|
||||
import PropTypes from "prop-types";
|
||||
import {withTranslation} from './i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from "./page";
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from "./page";
|
||||
import {withErrorHandling} from "./error-handling";
|
||||
import {Table} from "./table";
|
||||
import Dropzone
|
||||
from "react-dropzone";
|
||||
import {
|
||||
Icon,
|
||||
ModalDialog
|
||||
} from "./bootstrap-components";
|
||||
import axios
|
||||
from './axios';
|
||||
import styles
|
||||
from "./styles.scss";
|
||||
import {
|
||||
getPublicUrl,
|
||||
getUrl
|
||||
} from "./urls";
|
||||
import Dropzone from "react-dropzone";
|
||||
import {Icon, ModalDialog} from "./bootstrap-components";
|
||||
import axios from './axios';
|
||||
import styles from "./styles.scss";
|
||||
import {getPublicUrl, getUrl} from "./urls";
|
||||
import {withComponentMixins} from "./decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import i18n
|
||||
from 'i18next';
|
||||
import React from 'react';
|
||||
import i18n from 'i18next';
|
||||
import {withNamespaces} from "react-i18next";
|
||||
import LanguageDetector
|
||||
from 'i18next-browser-languagedetector';
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import LanguageDetector from 'i18next-browser-languagedetector';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
|
||||
import {convertToFake, getLang} from '../../../shared/langs';
|
||||
import {createComponentMixin} from "./decorator-helpers";
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
'use strict';
|
||||
|
||||
import { mergeWith, isArray } from 'lodash';
|
||||
import {isArray, mergeWith} from 'lodash';
|
||||
import kebabCase from 'lodash/kebabCase';
|
||||
import mjml2html, {defaultSkeleton, BodyComponent, HeadComponent, components, dependencies} from "mjml4-in-browser";
|
||||
import mjml2html, {BodyComponent, components, defaultSkeleton, dependencies, HeadComponent} from "mjml4-in-browser";
|
||||
|
||||
export { BodyComponent, HeadComponent };
|
||||
|
||||
|
|
|
@ -3,30 +3,16 @@
|
|||
import './public-path';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import ReactDOM
|
||||
from 'react-dom';
|
||||
import ReactDOM from 'react-dom';
|
||||
import {I18nextProvider} from 'react-i18next';
|
||||
import i18n, {withTranslation} from './i18n';
|
||||
import {
|
||||
parentRPC,
|
||||
UntrustedContentRoot
|
||||
} from './untrusted';
|
||||
import PropTypes
|
||||
from "prop-types";
|
||||
import styles
|
||||
from "./sandboxed-ckeditor.scss";
|
||||
import {
|
||||
getPublicUrl,
|
||||
getSandboxUrl,
|
||||
getTrustedUrl
|
||||
} from "./urls";
|
||||
import {
|
||||
base,
|
||||
unbase
|
||||
} from "../../../shared/templates";
|
||||
import {parentRPC, UntrustedContentRoot} from './untrusted';
|
||||
import PropTypes from "prop-types";
|
||||
import styles from "./sandboxed-ckeditor.scss";
|
||||
import {getPublicUrl, getSandboxUrl, getTrustedUrl} from "./urls";
|
||||
import {base, unbase} from "../../../shared/templates";
|
||||
|
||||
import CKEditor
|
||||
from "react-ckeditor-component";
|
||||
import CKEditor from "react-ckeditor-component";
|
||||
|
||||
import {initialHeight} from "./sandboxed-ckeditor-shared";
|
||||
import {withComponentMixins} from "./decorator-helpers";
|
||||
|
|
|
@ -2,10 +2,8 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from './i18n';
|
||||
import PropTypes
|
||||
from "prop-types";
|
||||
import styles
|
||||
from "./sandboxed-ckeditor.scss";
|
||||
import PropTypes from "prop-types";
|
||||
import styles from "./sandboxed-ckeditor.scss";
|
||||
|
||||
import {UntrustedContentHost} from './untrusted';
|
||||
import {Icon} from "./bootstrap-components";
|
||||
|
|
|
@ -2,10 +2,8 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from './i18n';
|
||||
import PropTypes
|
||||
from "prop-types";
|
||||
import styles
|
||||
from "./sandboxed-codeeditor.scss";
|
||||
import PropTypes from "prop-types";
|
||||
import styles from "./sandboxed-codeeditor.scss";
|
||||
|
||||
import {UntrustedContentHost} from './untrusted';
|
||||
import {Icon} from "./bootstrap-components";
|
||||
|
|
|
@ -2,10 +2,8 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from './i18n';
|
||||
import PropTypes
|
||||
from "prop-types";
|
||||
import styles
|
||||
from "./sandboxed-grapesjs.scss";
|
||||
import PropTypes from "prop-types";
|
||||
import styles from "./sandboxed-grapesjs.scss";
|
||||
|
||||
import {UntrustedContentHost} from './untrusted';
|
||||
import {Icon} from "./bootstrap-components";
|
||||
|
|
|
@ -2,10 +2,8 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from './i18n';
|
||||
import PropTypes
|
||||
from "prop-types";
|
||||
import styles
|
||||
from "./sandboxed-mosaico.scss";
|
||||
import PropTypes from "prop-types";
|
||||
import styles from "./sandboxed-mosaico.scss";
|
||||
|
||||
import {UntrustedContentHost} from './untrusted';
|
||||
import {Icon} from "./bootstrap-components";
|
||||
|
|
|
@ -1,29 +1,21 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import ReactDOMServer
|
||||
from 'react-dom/server';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import ReactDOMServer from 'react-dom/server';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from './i18n';
|
||||
|
||||
import jQuery
|
||||
from 'jquery';
|
||||
import jQuery from 'jquery';
|
||||
|
||||
import 'datatables.net';
|
||||
import 'datatables.net-bs4';
|
||||
import 'datatables.net-bs4/css/dataTables.bootstrap4.css';
|
||||
|
||||
import axios
|
||||
from './axios';
|
||||
import axios from './axios';
|
||||
|
||||
import {withPageHelpers} from './page'
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from './error-handling';
|
||||
import styles
|
||||
from "./styles.scss";
|
||||
import {withAsyncErrorHandler, withErrorHandling} from './error-handling';
|
||||
import styles from "./styles.scss";
|
||||
import {getUrl} from "./urls";
|
||||
import {withComponentMixins} from "./decorator-helpers";
|
||||
|
||||
|
|
|
@ -1,28 +1,20 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import ReactDOMServer
|
||||
from 'react-dom/server';
|
||||
import ReactDOMServer from 'react-dom/server';
|
||||
import {withTranslation} from './i18n';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
import jQuery
|
||||
from 'jquery';
|
||||
import jQuery from 'jquery';
|
||||
import '../../static/jquery/jquery-ui-1.12.1.min.js';
|
||||
import '../../static/fancytree/jquery.fancytree-all.min.js';
|
||||
import '../../static/fancytree/skin-bootstrap/ui.fancytree.min.css';
|
||||
import './tree.scss';
|
||||
import axios
|
||||
from './axios';
|
||||
import axios from './axios';
|
||||
|
||||
import {withPageHelpers} from './page'
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from './error-handling';
|
||||
import styles
|
||||
from "./styles.scss";
|
||||
import {withAsyncErrorHandler, withErrorHandling} from './error-handling';
|
||||
import styles from "./styles.scss";
|
||||
import {getUrl} from "./urls";
|
||||
import {withComponentMixins} from "./decorator-helpers";
|
||||
|
||||
|
|
|
@ -1,27 +1,13 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from "react";
|
||||
import PropTypes
|
||||
from "prop-types";
|
||||
import PropTypes from "prop-types";
|
||||
import {withTranslation} from './i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
withPageHelpers
|
||||
} from "./page";
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from "./error-handling";
|
||||
import axios
|
||||
from "./axios";
|
||||
import styles
|
||||
from "./styles.scss";
|
||||
import {
|
||||
getSandboxUrl,
|
||||
getTrustedUrl,
|
||||
getUrl,
|
||||
setRestrictedAccessToken
|
||||
} from "./urls";
|
||||
import {requiresAuthenticatedUser, withPageHelpers} from "./page";
|
||||
import {withAsyncErrorHandler, withErrorHandling} from "./error-handling";
|
||||
import axios from "./axios";
|
||||
import styles from "./styles.scss";
|
||||
import {getSandboxUrl, getUrl, setRestrictedAccessToken} from "./urls";
|
||||
import {withComponentMixins} from "./decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,40 +1,31 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {Trans} from 'react-i18next';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
CheckBox,
|
||||
Dropdown, filterData,
|
||||
Dropdown,
|
||||
filterData,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
InputField,
|
||||
StaticField,
|
||||
TableSelect,
|
||||
TextArea,
|
||||
withForm
|
||||
withForm,
|
||||
withFormErrorHandlers
|
||||
} from '../lib/form';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import {DeleteModalDialog} from '../lib/modals';
|
||||
import {
|
||||
NamespaceSelect,
|
||||
validateNamespace
|
||||
} from '../lib/namespace';
|
||||
import {UnsubscriptionMode, FieldWizard} from '../../../shared/lists';
|
||||
import styles
|
||||
from "../lib/styles.scss";
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import {NamespaceSelect, validateNamespace} from '../lib/namespace';
|
||||
import {FieldWizard, UnsubscriptionMode} from '../../../shared/lists';
|
||||
import styles from "../lib/styles.scss";
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {getMailerTypes} from "../send-configurations/helpers";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
@ -128,6 +119,7 @@ export default class CUD extends Component {
|
|||
validateNamespace(t, state);
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler(submitAndLeave) {
|
||||
const t = this.props.t;
|
||||
|
||||
|
|
|
@ -2,26 +2,12 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../lib/page';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import {Table} from '../lib/table';
|
||||
import {Link} from "react-router-dom";
|
||||
import {Icon} from "../lib/bootstrap-components";
|
||||
import {checkPermissions} from "../lib/permissions";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../lib/modals";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
import {withForm} from "../lib/form";
|
||||
|
||||
|
|
|
@ -1,25 +1,15 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import {Table} from '../lib/table';
|
||||
import {getTriggerTypes} from '../campaigns/triggers/helpers';
|
||||
import {Icon} from "../lib/bootstrap-components";
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../lib/modals";
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../lib/modals";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,16 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {Trans} from 'react-i18next';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../../lib/page';
|
||||
import {
|
||||
ACEEditor,
|
||||
Button,
|
||||
|
@ -28,17 +22,10 @@ import {
|
|||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {DeleteModalDialog} from "../../lib/modals";
|
||||
import {getFieldTypes} from './helpers';
|
||||
import validators
|
||||
from '../../../../shared/validators';
|
||||
import slugify
|
||||
from 'slugify';
|
||||
import {
|
||||
DateFormat,
|
||||
parseBirthday,
|
||||
parseDate
|
||||
} from '../../../../shared/date';
|
||||
import styles
|
||||
from "../../lib/styles.scss";
|
||||
import validators from '../../../../shared/validators';
|
||||
import slugify from 'slugify';
|
||||
import {DateFormat, parseBirthday, parseDate} from '../../../../shared/date';
|
||||
import styles from "../../lib/styles.scss";
|
||||
import 'brace/mode/json';
|
||||
import 'brace/mode/handlebars';
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
|
|
@ -1,25 +1,14 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../../lib/page';
|
||||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {Table} from '../../lib/table';
|
||||
import {getFieldTypes} from './helpers';
|
||||
import {Icon} from "../../lib/bootstrap-components";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../../lib/modals";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import {Fieldset, InputField} from "../../lib/form";
|
||||
|
||||
export function getFieldTypes(t) {
|
||||
|
||||
|
|
|
@ -1,16 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {Trans} from 'react-i18next';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../../lib/page';
|
||||
import {
|
||||
ACEEditor,
|
||||
AlignedRow,
|
||||
|
@ -26,27 +20,14 @@ import {
|
|||
withForm
|
||||
} from '../../lib/form';
|
||||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {
|
||||
NamespaceSelect,
|
||||
validateNamespace
|
||||
} from '../../lib/namespace';
|
||||
import {NamespaceSelect, validateNamespace} from '../../lib/namespace';
|
||||
import {DeleteModalDialog} from "../../lib/modals";
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import {
|
||||
getTrustedUrl,
|
||||
getUrl
|
||||
} from "../../lib/urls";
|
||||
import {
|
||||
ActionLink,
|
||||
Icon
|
||||
} from "../../lib/bootstrap-components";
|
||||
import styles
|
||||
from "../../lib/styles.scss";
|
||||
import formsStyles
|
||||
from "./styles.scss";
|
||||
import axios
|
||||
from "../../lib/axios";
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {getTrustedUrl, getUrl} from "../../lib/urls";
|
||||
import {ActionLink, Icon} from "../../lib/bootstrap-components";
|
||||
import styles from "../../lib/styles.scss";
|
||||
import formsStyles from "./styles.scss";
|
||||
import axios from "../../lib/axios";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -2,25 +2,12 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../../lib/error-handling';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../../lib/page';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../../lib/error-handling';
|
||||
import {Table} from '../../lib/table';
|
||||
import {Icon} from "../../lib/bootstrap-components";
|
||||
import {checkPermissions} from "../../lib/permissions";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../../lib/modals";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../../lib/page';
|
||||
import {
|
||||
AlignedRow,
|
||||
Button,
|
||||
|
@ -24,27 +18,15 @@ import {
|
|||
TextArea,
|
||||
withForm
|
||||
} from '../../lib/form';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../../lib/error-handling';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../../lib/error-handling';
|
||||
import {DeleteModalDialog} from "../../lib/modals";
|
||||
import {getImportLabels} from './helpers';
|
||||
import {
|
||||
ImportSource,
|
||||
inProgress,
|
||||
MappingType,
|
||||
prepInProgress
|
||||
} from '../../../../shared/imports';
|
||||
import axios
|
||||
from "../../lib/axios";
|
||||
import {ImportSource, inProgress, MappingType, prepInProgress} from '../../../../shared/imports';
|
||||
import axios from "../../lib/axios";
|
||||
import {getUrl} from "../../lib/urls";
|
||||
import listStyles
|
||||
from "../styles.scss";
|
||||
import styles
|
||||
from "../../lib/styles.scss";
|
||||
import interoperableErrors
|
||||
from "../../../../shared/interoperable-errors";
|
||||
import listStyles from "../styles.scss";
|
||||
import styles from "../../lib/styles.scss";
|
||||
import interoperableErrors from "../../../../shared/interoperable-errors";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
|
||||
|
|
|
@ -1,30 +1,17 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../../lib/page';
|
||||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {Table} from '../../lib/table';
|
||||
import {getImportLabels} from './helpers';
|
||||
import {Icon} from "../../lib/bootstrap-components";
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import moment
|
||||
from "moment";
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import moment from "moment";
|
||||
import {inProgress} from '../../../../shared/imports';
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../../lib/modals";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,25 +1,15 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../../lib/page';
|
||||
import {AlignedRow} from '../../lib/form';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../../lib/error-handling';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../../lib/error-handling';
|
||||
import {getImportLabels} from './helpers';
|
||||
import axios
|
||||
from "../../lib/axios";
|
||||
import axios from "../../lib/axios";
|
||||
import {getUrl} from "../../lib/urls";
|
||||
import moment
|
||||
from "moment";
|
||||
import moment from "moment";
|
||||
import {runStatusInProgress} from "../../../../shared/imports";
|
||||
import {Table} from "../../lib/table";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
|
|
@ -1,40 +1,19 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {
|
||||
AlignedRow,
|
||||
ButtonRow
|
||||
} from '../../lib/form';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../../lib/error-handling';
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../../lib/page';
|
||||
import {AlignedRow, ButtonRow} from '../../lib/form';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../../lib/error-handling';
|
||||
import {getImportLabels} from './helpers';
|
||||
import {
|
||||
prepFinishedAndNotInProgress,
|
||||
runInProgress,
|
||||
runStatusInProgress
|
||||
} from '../../../../shared/imports';
|
||||
import {prepFinishedAndNotInProgress, runInProgress, runStatusInProgress} from '../../../../shared/imports';
|
||||
import {Table} from "../../lib/table";
|
||||
import {
|
||||
Button,
|
||||
Icon
|
||||
} from "../../lib/bootstrap-components";
|
||||
import axios
|
||||
from "../../lib/axios";
|
||||
import {Button, Icon} from "../../lib/bootstrap-components";
|
||||
import axios from "../../lib/axios";
|
||||
import {getUrl} from "../../lib/urls";
|
||||
import moment
|
||||
from "moment";
|
||||
import interoperableErrors
|
||||
from '../../../../shared/interoperable-errors';
|
||||
import moment from "moment";
|
||||
import interoperableErrors from '../../../../shared/interoperable-errors';
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import {ImportSource, MappingType, ImportStatus, RunStatus} from '../../../../shared/imports';
|
||||
import {ImportSource, ImportStatus, MappingType, RunStatus} from '../../../../shared/imports';
|
||||
|
||||
export function getImportLabels(t) {
|
||||
|
||||
|
|
|
@ -1,46 +1,22 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from "react";
|
||||
import PropTypes
|
||||
from "prop-types";
|
||||
import PropTypes from "prop-types";
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from "../../lib/page";
|
||||
import {
|
||||
Button as FormButton,
|
||||
ButtonRow,
|
||||
Dropdown,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
InputField,
|
||||
withForm
|
||||
} from "../../lib/form";
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from "../../lib/page";
|
||||
import {ButtonRow, Dropdown, Form, FormSendMethod, InputField, withForm} from "../../lib/form";
|
||||
import {withErrorHandling} from "../../lib/error-handling";
|
||||
import {DeleteModalDialog} from "../../lib/modals";
|
||||
|
||||
import styles
|
||||
from "./CUD.scss";
|
||||
import styles from "./CUD.scss";
|
||||
import {DragDropContext} from "react-dnd";
|
||||
import HTML5Backend
|
||||
from "react-dnd-html5-backend";
|
||||
import TouchBackend
|
||||
from "react-dnd-touch-backend";
|
||||
import SortableTree
|
||||
from "react-sortable-tree";
|
||||
import HTML5Backend from "react-dnd-html5-backend";
|
||||
import TouchBackend from "react-dnd-touch-backend";
|
||||
import SortableTree from "react-sortable-tree";
|
||||
import 'react-sortable-tree/style.css';
|
||||
import {
|
||||
ActionLink,
|
||||
Button,
|
||||
Icon
|
||||
} from "../../lib/bootstrap-components";
|
||||
import {ActionLink, Button, Icon} from "../../lib/bootstrap-components";
|
||||
import {getRuleHelpers} from "./helpers";
|
||||
import RuleSettingsPane
|
||||
from "./RuleSettingsPane";
|
||||
import RuleSettingsPane from "./RuleSettingsPane";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
// https://stackoverflow.com/a/4819886/1601953
|
||||
|
|
|
@ -1,24 +1,13 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../../lib/page';
|
||||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {Table} from '../../lib/table';
|
||||
import {Icon} from "../../lib/bootstrap-components";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../../lib/modals";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,27 +1,15 @@
|
|||
'use strict';
|
||||
|
||||
import React, {PureComponent} from "react";
|
||||
import PropTypes
|
||||
from "prop-types";
|
||||
import PropTypes from "prop-types";
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
withPageHelpers
|
||||
} from "../../lib/page";
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
Dropdown,
|
||||
Form,
|
||||
TableSelect,
|
||||
withForm
|
||||
} from "../../lib/form";
|
||||
import {requiresAuthenticatedUser, withPageHelpers} from "../../lib/page";
|
||||
import {Button, ButtonRow, Dropdown, Form, TableSelect, withForm} from "../../lib/form";
|
||||
import {withErrorHandling} from "../../lib/error-handling";
|
||||
import {getRuleHelpers} from "./helpers";
|
||||
import {getFieldTypes} from "../fields/helpers";
|
||||
|
||||
import styles
|
||||
from "./CUD.scss";
|
||||
import styles from "./CUD.scss";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
import React from 'react';
|
||||
import {DatePicker, Dropdown, InputField} from "../../lib/form";
|
||||
import { parseDate, parseBirthday, formatDate, formatBirthday, DateFormat, birthdayYear, getDateFormatString, getBirthdayFormatString } from '../../../../shared/date';
|
||||
import { tMark } from "../../lib/i18n";
|
||||
import {DateFormat, formatBirthday, formatDate, parseBirthday, parseDate} from '../../../../shared/date';
|
||||
import {tMark} from "../../lib/i18n";
|
||||
|
||||
export function getRuleHelpers(t, fields) {
|
||||
|
||||
|
|
|
@ -1,16 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {HTTPMethod} from '../../lib/axios';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../../lib/page';
|
||||
import {
|
||||
AlignedRow,
|
||||
Button,
|
||||
|
@ -24,15 +18,10 @@ import {
|
|||
} from '../../lib/form';
|
||||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {RestActionModalDialog} from "../../lib/modals";
|
||||
import interoperableErrors
|
||||
from '../../../../shared/interoperable-errors';
|
||||
import interoperableErrors from '../../../../shared/interoperable-errors';
|
||||
import {SubscriptionStatus} from '../../../../shared/lists';
|
||||
import {
|
||||
getFieldTypes,
|
||||
getSubscriptionStatusLabels
|
||||
} from './helpers';
|
||||
import moment
|
||||
from 'moment-timezone';
|
||||
import {getFieldTypes, getSubscriptionStatusLabels} from './helpers';
|
||||
import moment from 'moment-timezone';
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,47 +1,25 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../../lib/page';
|
||||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {Table} from '../../lib/table';
|
||||
import {SubscriptionStatus} from '../../../../shared/lists';
|
||||
import moment
|
||||
from 'moment';
|
||||
import {
|
||||
Dropdown,
|
||||
Form,
|
||||
withForm
|
||||
} from '../../lib/form';
|
||||
import {
|
||||
Button,
|
||||
Icon
|
||||
} from "../../lib/bootstrap-components";
|
||||
import moment from 'moment';
|
||||
import {Dropdown, Form, withForm} from '../../lib/form';
|
||||
import {Button, Icon} from "../../lib/bootstrap-components";
|
||||
import {HTTPMethod} from '../../lib/axios';
|
||||
import {
|
||||
getFieldTypes,
|
||||
getSubscriptionStatusLabels
|
||||
} from './helpers';
|
||||
import {
|
||||
getPublicUrl,
|
||||
getUrl
|
||||
} from "../../lib/urls";
|
||||
import {getFieldTypes, getSubscriptionStatusLabels} from './helpers';
|
||||
import {getPublicUrl, getUrl} from "../../lib/urls";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableAddRestActionButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../../lib/modals";
|
||||
import listStyles
|
||||
from "../styles.scss";
|
||||
import listStyles from "../styles.scss";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
import React from "react";
|
||||
import {SubscriptionStatus} from "../../../../shared/lists";
|
||||
import {getFieldColumn, SubscriptionStatus} from "../../../../shared/lists";
|
||||
import {
|
||||
ACEEditor,
|
||||
CheckBox,
|
||||
|
@ -13,7 +13,6 @@ import {
|
|||
TextArea
|
||||
} from "../../lib/form";
|
||||
import {formatBirthday, formatDate, parseBirthday, parseDate} from "../../../../shared/date";
|
||||
import {getFieldColumn} from '../../../../shared/lists';
|
||||
import 'brace/mode/json';
|
||||
|
||||
export function getSubscriptionStatusLabels(t) {
|
||||
|
|
|
@ -1,16 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
import React, { Component } from 'react';
|
||||
import { withTranslation } from '../lib/i18n';
|
||||
import {
|
||||
withPageHelpers,
|
||||
Title,
|
||||
requiresAuthenticatedUser
|
||||
} from '../lib/page'
|
||||
import {
|
||||
withForm, Form, FormSendMethod, InputField, ButtonRow, Button
|
||||
} from '../lib/form';
|
||||
import { withErrorHandling, withAsyncErrorHandler } from '../lib/error-handling';
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {Title, withPageHelpers} from '../lib/page'
|
||||
import {Button, ButtonRow, Form, FormSendMethod, InputField, withForm, withFormErrorHandlers} from '../lib/form';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
@ -45,6 +39,7 @@ export default class Forget extends Component {
|
|||
}
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler() {
|
||||
const t = this.props.t;
|
||||
|
||||
|
|
|
@ -2,10 +2,7 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page'
|
||||
import {Title, withPageHelpers} from '../lib/page'
|
||||
import {Link} from 'react-router-dom'
|
||||
import {
|
||||
Button,
|
||||
|
@ -14,15 +11,13 @@ import {
|
|||
Form,
|
||||
FormSendMethod,
|
||||
InputField,
|
||||
withForm
|
||||
withForm,
|
||||
withFormErrorHandlers
|
||||
} from '../lib/form';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import qs
|
||||
from 'querystringify';
|
||||
import interoperableErrors
|
||||
from '../../../shared/interoperable-errors';
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import qs from 'querystringify';
|
||||
import interoperableErrors from '../../../shared/interoperable-errors';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
@ -67,6 +62,7 @@ export default class Login extends Component {
|
|||
}
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler() {
|
||||
const t = this.props.t;
|
||||
|
||||
|
|
|
@ -2,29 +2,13 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page'
|
||||
import {Title, withPageHelpers} from '../lib/page'
|
||||
import {Link} from 'react-router-dom'
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
InputField,
|
||||
withForm
|
||||
} from '../lib/form';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import passwordValidator
|
||||
from '../../../shared/password-validator';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import interoperableErrors
|
||||
from '../../../shared/interoperable-errors';
|
||||
import {Button, ButtonRow, Form, FormSendMethod, InputField, withForm, withFormErrorHandlers} from '../lib/form';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import passwordValidator from '../../../shared/password-validator';
|
||||
import axios from '../lib/axios';
|
||||
import interoperableErrors from '../../../shared/interoperable-errors';
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
@ -102,6 +86,7 @@ export default class Account extends Component {
|
|||
state.setIn(['password2', 'error'], password !== password2 ? t('passwordsMustMatch') : null);
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler() {
|
||||
const t = this.props.t;
|
||||
|
||||
|
|
|
@ -1,15 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
import React
|
||||
from 'react';
|
||||
import Login
|
||||
from './Login';
|
||||
import Reset
|
||||
from './Forgot';
|
||||
import ResetLink
|
||||
from './Reset';
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import React from 'react';
|
||||
import Login from './Login';
|
||||
import Reset from './Forgot';
|
||||
import ResetLink from './Reset';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
|
||||
|
||||
function getMenus(t) {
|
||||
|
|
|
@ -1,36 +1,15 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
InputField,
|
||||
TextArea,
|
||||
TreeTableSelect,
|
||||
withForm
|
||||
} from '../lib/form';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import interoperableErrors
|
||||
from '../../../shared/interoperable-errors';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {Button, ButtonRow, Form, FormSendMethod, InputField, TextArea, TreeTableSelect, withForm} from '../lib/form';
|
||||
import axios from '../lib/axios';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import interoperableErrors from '../../../shared/interoperable-errors';
|
||||
import {DeleteModalDialog} from "../lib/modals";
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {getGlobalNamespaceId} from "../../../shared/namespaces";
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
|
|
@ -2,25 +2,12 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../lib/page';
|
||||
import {TreeTable} from '../lib/tree';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import {Icon} from "../lib/bootstrap-components";
|
||||
import {checkPermissions} from "../lib/permissions";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../lib/modals";
|
||||
import {getGlobalNamespaceId} from "../../../shared/namespaces";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
|
@ -22,21 +16,12 @@ import {
|
|||
TextArea,
|
||||
withForm
|
||||
} from '../lib/form';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import moment
|
||||
from 'moment';
|
||||
import {
|
||||
NamespaceSelect,
|
||||
validateNamespace
|
||||
} from '../lib/namespace';
|
||||
import axios from '../lib/axios';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import moment from 'moment';
|
||||
import {NamespaceSelect, validateNamespace} from '../lib/namespace';
|
||||
import {DeleteModalDialog} from "../lib/modals";
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
|
|
@ -2,31 +2,16 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../lib/page';
|
||||
import {Table} from '../lib/table';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import moment
|
||||
from 'moment';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import moment from 'moment';
|
||||
import axios from '../lib/axios';
|
||||
import {ReportState} from '../../../shared/reports';
|
||||
import {Icon} from "../lib/bootstrap-components";
|
||||
import {checkPermissions} from "../lib/permissions";
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../lib/modals";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -2,24 +2,13 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../lib/page'
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import {requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../lib/page'
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import axios from '../lib/axios';
|
||||
import {ReportState} from '../../../shared/reports';
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {Button} from "../lib/bootstrap-components";
|
||||
import {Link} from "react-router-dom";
|
||||
import PropTypes
|
||||
from "prop-types";
|
||||
import PropTypes from "prop-types";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,16 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {Trans} from 'react-i18next';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../../lib/page'
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../../lib/page'
|
||||
import {
|
||||
ACEEditor,
|
||||
Button,
|
||||
|
@ -23,13 +17,9 @@ import {
|
|||
withForm
|
||||
} from '../../lib/form';
|
||||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {
|
||||
NamespaceSelect,
|
||||
validateNamespace
|
||||
} from '../../lib/namespace';
|
||||
import {NamespaceSelect, validateNamespace} from '../../lib/namespace';
|
||||
import {DeleteModalDialog} from "../../lib/modals";
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import 'brace/mode/javascript';
|
||||
import 'brace/mode/json';
|
||||
import 'brace/mode/handlebars';
|
||||
|
|
|
@ -2,33 +2,14 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
ButtonDropdown,
|
||||
Icon
|
||||
} from '../../lib/bootstrap-components';
|
||||
import {
|
||||
DropdownLink,
|
||||
NavDropdown,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../../lib/error-handling';
|
||||
import {ButtonDropdown, Icon} from '../../lib/bootstrap-components';
|
||||
import {DropdownLink, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../../lib/page';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../../lib/error-handling';
|
||||
import {Table} from '../../lib/table';
|
||||
import moment
|
||||
from 'moment';
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import moment from 'moment';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {checkPermissions} from "../../lib/permissions";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../../lib/modals";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -3,52 +3,27 @@
|
|||
import './lib/public-path';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import ReactDOM
|
||||
from 'react-dom';
|
||||
import ReactDOM from 'react-dom';
|
||||
import {I18nextProvider} from 'react-i18next';
|
||||
import i18n, {withTranslation} from './lib/i18n';
|
||||
import account
|
||||
from './account/root';
|
||||
import login
|
||||
from './login/root';
|
||||
import blacklist
|
||||
from './blacklist/root';
|
||||
import lists
|
||||
from './lists/root';
|
||||
import namespaces
|
||||
from './namespaces/root';
|
||||
import reports
|
||||
from './reports/root';
|
||||
import campaigns
|
||||
from './campaigns/root';
|
||||
import templates
|
||||
from './templates/root';
|
||||
import users
|
||||
from './users/root';
|
||||
import sendConfigurations
|
||||
from './send-configurations/root';
|
||||
import settings
|
||||
from './settings/root';
|
||||
import account from './account/root';
|
||||
import login from './login/root';
|
||||
import blacklist from './blacklist/root';
|
||||
import lists from './lists/root';
|
||||
import namespaces from './namespaces/root';
|
||||
import reports from './reports/root';
|
||||
import campaigns from './campaigns/root';
|
||||
import templates from './templates/root';
|
||||
import users from './users/root';
|
||||
import sendConfigurations from './send-configurations/root';
|
||||
import settings from './settings/root';
|
||||
|
||||
import {
|
||||
DropdownLink,
|
||||
getLanguageChooser,
|
||||
NavDropdown,
|
||||
NavLink,
|
||||
Section
|
||||
} from "./lib/page";
|
||||
import {DropdownLink, getLanguageChooser, NavDropdown, NavLink, Section} from "./lib/page";
|
||||
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import Home
|
||||
from "./Home";
|
||||
import {
|
||||
DropdownActionLink,
|
||||
Icon
|
||||
} from "./lib/bootstrap-components";
|
||||
import {Link} from "react-router-dom";
|
||||
import axios
|
||||
from './lib/axios';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import Home from "./Home";
|
||||
import {DropdownActionLink, Icon} from "./lib/bootstrap-components";
|
||||
import axios from './lib/axios';
|
||||
import {getUrl} from "./lib/urls";
|
||||
import {withComponentMixins} from "./lib/decorator-helpers";
|
||||
|
||||
|
|
|
@ -1,16 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {Trans} from 'react-i18next';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page'
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page'
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
|
@ -24,26 +18,18 @@ import {
|
|||
withForm
|
||||
} from '../lib/form';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import {
|
||||
NamespaceSelect,
|
||||
validateNamespace
|
||||
} from '../lib/namespace';
|
||||
import {NamespaceSelect, validateNamespace} from '../lib/namespace';
|
||||
import {DeleteModalDialog} from "../lib/modals";
|
||||
|
||||
import {getMailerTypes} from "./helpers";
|
||||
|
||||
import {
|
||||
getSystemSendConfigurationId,
|
||||
MailerType
|
||||
} from "../../../shared/send-configurations";
|
||||
import {getSystemSendConfigurationId, MailerType} from "../../../shared/send-configurations";
|
||||
|
||||
import styles
|
||||
from "../lib/styles.scss";
|
||||
import styles from "../lib/styles.scss";
|
||||
|
||||
import sendConfigurationsStyles from "./styles.scss";
|
||||
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
||||
|
|
|
@ -3,27 +3,13 @@
|
|||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {Icon} from '../lib/bootstrap-components';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../lib/page';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import {Table} from '../lib/table';
|
||||
import moment
|
||||
from 'moment';
|
||||
import moment from 'moment';
|
||||
import {getMailerTypes} from './helpers';
|
||||
import {checkPermissions} from "../lib/permissions";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../lib/modals";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
||||
|
|
|
@ -3,13 +3,7 @@
|
|||
import React from "react";
|
||||
|
||||
import {MailerType, ZoneMTAType} from "../../../shared/send-configurations";
|
||||
import {
|
||||
CheckBox,
|
||||
Dropdown,
|
||||
Fieldset,
|
||||
InputField,
|
||||
TextArea
|
||||
} from "../lib/form";
|
||||
import {CheckBox, Dropdown, Fieldset, InputField, TextArea} from "../lib/form";
|
||||
import {Trans} from "react-i18next";
|
||||
import styles from "./styles.scss";
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
|
|
|
@ -1,15 +1,10 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {Trans} from 'react-i18next';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
|
@ -18,7 +13,8 @@ import {
|
|||
FormSendMethod,
|
||||
InputField,
|
||||
TextArea,
|
||||
withForm
|
||||
withForm,
|
||||
withFormErrorHandlers
|
||||
} from '../lib/form';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
@ -51,6 +47,7 @@ export default class Update extends Component {
|
|||
const t = this.props.t;
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler() {
|
||||
const t = this.props.t;
|
||||
|
||||
|
|
|
@ -1,31 +1,14 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
TableSelect,
|
||||
withForm
|
||||
} from '../lib/form';
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import {Button, ButtonRow, Form, FormSendMethod, TableSelect, withForm, withFormErrorHandlers} from '../lib/form';
|
||||
import {Table} from '../lib/table';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import axios from '../lib/axios';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
@ -91,6 +74,7 @@ export default class Share extends Component {
|
|||
}
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler() {
|
||||
const t = this.props.t;
|
||||
|
||||
|
|
|
@ -1,21 +1,12 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import {requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import {Table} from '../lib/table';
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import axios from '../lib/axios';
|
||||
import {Icon} from "../lib/bootstrap-components";
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
|
|
@ -8,14 +8,16 @@ import {
|
|||
Button,
|
||||
ButtonRow,
|
||||
CheckBox,
|
||||
Dropdown, filterData,
|
||||
Dropdown,
|
||||
filterData,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
InputField,
|
||||
StaticField,
|
||||
TableSelect,
|
||||
TextArea,
|
||||
withForm, withFormErrorHandlers
|
||||
withForm,
|
||||
withFormErrorHandlers
|
||||
} from '../lib/form';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import {NamespaceSelect, validateNamespace} from '../lib/namespace';
|
||||
|
@ -28,7 +30,6 @@ import {getUrl} from "../lib/urls";
|
|||
import {TestSendModalDialog} from "./TestSendModalDialog";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
import moment from 'moment';
|
||||
import {FieldWizard} from "../../../shared/lists";
|
||||
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -3,27 +3,13 @@
|
|||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {Icon} from '../lib/bootstrap-components';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../lib/error-handling';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../lib/page';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../lib/error-handling';
|
||||
import {Table} from '../lib/table';
|
||||
import moment
|
||||
from 'moment';
|
||||
import moment from 'moment';
|
||||
import {getTemplateTypes} from './helpers';
|
||||
import {checkPermissions} from "../lib/permissions";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../lib/modals";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -2,24 +2,14 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {ModalDialog} from "../lib/bootstrap-components";
|
||||
import {
|
||||
requiresAuthenticatedUser,
|
||||
withPageHelpers
|
||||
} from "../lib/page";
|
||||
import {
|
||||
Form,
|
||||
TableSelect,
|
||||
withForm
|
||||
} from "../lib/form";
|
||||
import {requiresAuthenticatedUser, withPageHelpers} from "../lib/page";
|
||||
import {Form, TableSelect, withForm} from "../lib/form";
|
||||
import {withErrorHandling} from "../lib/error-handling";
|
||||
import moment
|
||||
from "moment";
|
||||
import moment from "moment";
|
||||
import {getMailerTypes} from "../send-configurations/helpers";
|
||||
import axios
|
||||
from '../lib/axios';
|
||||
import axios from '../lib/axios';
|
||||
import {getUrl} from "../lib/urls";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
|
|
@ -1,14 +1,7 @@
|
|||
'use strict';
|
||||
|
||||
import React
|
||||
from "react";
|
||||
import {
|
||||
ACEEditor,
|
||||
AlignedRow,
|
||||
Dropdown,
|
||||
StaticField,
|
||||
TableSelect
|
||||
} from "../lib/form";
|
||||
import React from "react";
|
||||
import {ACEEditor, AlignedRow, Dropdown, StaticField, TableSelect} from "../lib/form";
|
||||
import 'brace/mode/text';
|
||||
import 'brace/mode/html';
|
||||
|
||||
|
@ -17,36 +10,17 @@ import {CKEditorHost} from "../lib/sandboxed-ckeditor";
|
|||
import {GrapesJSHost} from "../lib/sandboxed-grapesjs";
|
||||
import {CodeEditorHost} from "../lib/sandboxed-codeeditor";
|
||||
|
||||
import {
|
||||
getGrapesJSSourceTypeOptions,
|
||||
GrapesJSSourceType
|
||||
} from "../lib/sandboxed-grapesjs-shared";
|
||||
import {getGrapesJSSourceTypeOptions, GrapesJSSourceType} from "../lib/sandboxed-grapesjs-shared";
|
||||
|
||||
import {
|
||||
CodeEditorSourceType,
|
||||
getCodeEditorSourceTypeOptions
|
||||
} from "../lib/sandboxed-codeeditor-shared";
|
||||
import {CodeEditorSourceType, getCodeEditorSourceTypeOptions} from "../lib/sandboxed-codeeditor-shared";
|
||||
|
||||
import {getTemplateTypes as getMosaicoTemplateTypes} from './mosaico/helpers';
|
||||
import {
|
||||
getPublicUrl,
|
||||
getSandboxUrl,
|
||||
getTrustedUrl
|
||||
} from "../lib/urls";
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import {
|
||||
ActionLink,
|
||||
Button
|
||||
} from "../lib/bootstrap-components";
|
||||
import {getSandboxUrl} from "../lib/urls";
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {ActionLink, Button} from "../lib/bootstrap-components";
|
||||
import {Trans} from "react-i18next";
|
||||
|
||||
import styles
|
||||
from "../lib/styles.scss";
|
||||
import {
|
||||
base,
|
||||
unbase
|
||||
} from "../../../shared/templates";
|
||||
import styles from "../lib/styles.scss";
|
||||
|
||||
export const ResourceType = {
|
||||
TEMPLATE: 'template',
|
||||
|
|
|
@ -1,37 +1,28 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../../lib/page'
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../../lib/page'
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
Dropdown,
|
||||
filterData,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
InputField, StaticField,
|
||||
InputField,
|
||||
StaticField,
|
||||
TextArea,
|
||||
withForm
|
||||
withForm,
|
||||
withFormErrorHandlers
|
||||
} from '../../lib/form';
|
||||
import {withErrorHandling} from '../../lib/error-handling';
|
||||
import {
|
||||
NamespaceSelect,
|
||||
validateNamespace
|
||||
} from '../../lib/namespace';
|
||||
import {NamespaceSelect, validateNamespace} from '../../lib/namespace';
|
||||
import {DeleteModalDialog} from "../../lib/modals";
|
||||
|
||||
import {getVersafix, getMJMLSample} from "../../../../shared/mosaico-templates";
|
||||
import {
|
||||
getTemplateTypes,
|
||||
getTemplateTypesOrder
|
||||
} from "./helpers";
|
||||
import {getMJMLSample, getVersafix} from "../../../../shared/mosaico-templates";
|
||||
import {getTemplateTypes, getTemplateTypesOrder} from "./helpers";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
import styles from "../../lib/styles.scss";
|
||||
|
||||
|
@ -58,7 +49,10 @@ export default class CUD extends Component {
|
|||
|
||||
this.state = {};
|
||||
|
||||
this.initForm();
|
||||
this.initForm({
|
||||
loadMutator: ::this.getFormValuesMutator,
|
||||
submitMutator: ::this.submitFormValuesMutator
|
||||
});
|
||||
}
|
||||
|
||||
static propTypes = {
|
||||
|
@ -71,9 +65,14 @@ export default class CUD extends Component {
|
|||
this.templateTypes[data.type].afterLoad(this, data);
|
||||
}
|
||||
|
||||
submitFormValuesMutator(data) {
|
||||
this.templateTypes[data.type].beforeSave(this, data);
|
||||
return filterData(data, ['name', 'description', 'type', 'data', 'namespace']);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
if (this.props.entity) {
|
||||
this.getFormValuesFromEntity(this.props.entity, ::this.getFormValuesMutator);
|
||||
this.getFormValuesFromEntity(this.props.entity);
|
||||
|
||||
} else {
|
||||
const wizard = this.props.wizard;
|
||||
|
@ -126,6 +125,7 @@ export default class CUD extends Component {
|
|||
validateNamespace(t, state);
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler(submitAndLeave) {
|
||||
const t = this.props.t;
|
||||
|
||||
|
@ -141,16 +141,14 @@ export default class CUD extends Component {
|
|||
this.disableForm();
|
||||
this.setFormStatusMessage('info', t('saving'));
|
||||
|
||||
const submitResult = await this.validateAndSendFormValuesToURL(sendMethod, url, data => {
|
||||
this.templateTypes[data.type].beforeSave(this, data);
|
||||
});
|
||||
const submitResult = await this.validateAndSendFormValuesToURL(sendMethod, url);
|
||||
|
||||
if (submitResult) {
|
||||
if (this.props.entity) {
|
||||
if (submitAndLeave) {
|
||||
this.navigateToWithFlashMessage('/templates/mosaico', 'success', t('Mosaico template updated'));
|
||||
} else {
|
||||
await this.getFormValuesFromURL(`rest/mosaico-templates/${this.props.entity.id}`, ::this.getFormValuesMutator);
|
||||
await this.getFormValuesFromURL(`rest/mosaico-templates/${this.props.entity.id}`);
|
||||
this.enableForm();
|
||||
this.setFormStatusMessage('success', t('Mosaico template updated'));
|
||||
}
|
||||
|
|
|
@ -2,32 +2,14 @@
|
|||
|
||||
import React, {Component} from 'react';
|
||||
import {withTranslation} from '../../lib/i18n';
|
||||
import {
|
||||
ButtonDropdown,
|
||||
Icon
|
||||
} from '../../lib/bootstrap-components';
|
||||
import {
|
||||
DropdownLink,
|
||||
NavDropdown,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from '../../lib/page';
|
||||
import {
|
||||
withAsyncErrorHandler,
|
||||
withErrorHandling
|
||||
} from '../../lib/error-handling';
|
||||
import {ButtonDropdown, Icon} from '../../lib/bootstrap-components';
|
||||
import {DropdownLink, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from '../../lib/page';
|
||||
import {withAsyncErrorHandler, withErrorHandling} from '../../lib/error-handling';
|
||||
import {Table} from '../../lib/table';
|
||||
import moment
|
||||
from 'moment';
|
||||
import moment from 'moment';
|
||||
import {getTemplateTypes} from './helpers';
|
||||
import {checkPermissions} from "../../lib/permissions";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../../lib/modals";
|
||||
import {withComponentMixins} from "../../lib/decorator-helpers";
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
import htmlparser from 'htmlparser2'
|
||||
import min from 'lodash/min';
|
||||
import mjml, {MJML, BodyComponent, HeadComponent} from "../../lib/mjml";
|
||||
import {BodyComponent, HeadComponent, MJML} from "../../lib/mjml";
|
||||
import shortid from "shortid";
|
||||
|
||||
function getId() {
|
||||
|
|
|
@ -1,35 +1,25 @@
|
|||
'use strict';
|
||||
|
||||
import React, {Component} from 'react';
|
||||
import PropTypes
|
||||
from 'prop-types';
|
||||
import PropTypes from 'prop-types';
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
withPageHelpers
|
||||
} from '../lib/page';
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, withPageHelpers} from '../lib/page';
|
||||
import {
|
||||
Button,
|
||||
ButtonRow,
|
||||
filterData,
|
||||
Form,
|
||||
FormSendMethod,
|
||||
InputField,
|
||||
TableSelect,
|
||||
withForm
|
||||
withForm,
|
||||
withFormErrorHandlers
|
||||
} from '../lib/form';
|
||||
import {withErrorHandling} from '../lib/error-handling';
|
||||
import interoperableErrors
|
||||
from '../../../shared/interoperable-errors';
|
||||
import passwordValidator
|
||||
from '../../../shared/password-validator';
|
||||
import mailtrainConfig
|
||||
from 'mailtrainConfig';
|
||||
import {
|
||||
NamespaceSelect,
|
||||
validateNamespace
|
||||
} from '../lib/namespace';
|
||||
import interoperableErrors from '../../../shared/interoperable-errors';
|
||||
import passwordValidator from '../../../shared/password-validator';
|
||||
import mailtrainConfig from 'mailtrainConfig';
|
||||
import {NamespaceSelect, validateNamespace} from '../lib/namespace';
|
||||
import {DeleteModalDialog} from "../lib/modals";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
|
@ -49,6 +39,8 @@ export default class CUD extends Component {
|
|||
this.state = {};
|
||||
|
||||
this.initForm({
|
||||
loadMutator: ::this.getFormValuesMutator,
|
||||
submitMutator: ::this.submitFormValuesMutator,
|
||||
serverValidation: {
|
||||
url: 'rest/users-validate',
|
||||
changed: mailtrainConfig.isAuthMethodLocal ? ['username', 'email'] : ['username'],
|
||||
|
@ -67,9 +59,13 @@ export default class CUD extends Component {
|
|||
data.password2 = '';
|
||||
}
|
||||
|
||||
submitFormValuesMutator(data) {
|
||||
return filterData(data, ['username', 'name', 'email', 'password', 'namespace', 'role']);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
if (this.props.entity) {
|
||||
this.getFormValuesFromEntity(this.props.entity, ::this.getFormValuesMutator);
|
||||
this.getFormValuesFromEntity(this.props.entity);
|
||||
} else {
|
||||
this.populateFormValues({
|
||||
username: '',
|
||||
|
@ -158,6 +154,7 @@ export default class CUD extends Component {
|
|||
validateNamespace(t, state);
|
||||
}
|
||||
|
||||
@withFormErrorHandlers
|
||||
async submitHandler(submitAndLeave) {
|
||||
const t = this.props.t;
|
||||
|
||||
|
@ -174,16 +171,14 @@ export default class CUD extends Component {
|
|||
this.disableForm();
|
||||
this.setFormStatusMessage('info', t('saving'));
|
||||
|
||||
const submitResult = await this.validateAndSendFormValuesToURL(sendMethod, url, data => {
|
||||
delete data.password2;
|
||||
});
|
||||
const submitResult = await this.validateAndSendFormValuesToURL(sendMethod, url);
|
||||
|
||||
if (submitResult) {
|
||||
if (this.props.entity) {
|
||||
if (submitAndLeave) {
|
||||
this.navigateToWithFlashMessage('/users', 'success', t('User updated'));
|
||||
} else {
|
||||
await this.getFormValuesFromURL(`rest/users/${this.props.entity.id}`, ::this.getFormValuesMutator);
|
||||
await this.getFormValuesFromURL(`rest/users/${this.props.entity.id}`);
|
||||
this.enableForm();
|
||||
this.setFormStatusMessage('success', t('User updated'));
|
||||
}
|
||||
|
|
|
@ -2,22 +2,11 @@
|
|||
|
||||
import React, {Component} from "react";
|
||||
import {withTranslation} from '../lib/i18n';
|
||||
import {
|
||||
LinkButton,
|
||||
requiresAuthenticatedUser,
|
||||
Title,
|
||||
Toolbar,
|
||||
withPageHelpers
|
||||
} from "../lib/page";
|
||||
import {LinkButton, requiresAuthenticatedUser, Title, Toolbar, withPageHelpers} from "../lib/page";
|
||||
import {Table} from "../lib/table";
|
||||
import mailtrainConfig
|
||||
from "mailtrainConfig";
|
||||
import mailtrainConfig from "mailtrainConfig";
|
||||
import {Icon} from "../lib/bootstrap-components";
|
||||
import {
|
||||
tableAddDeleteButton,
|
||||
tableRestActionDialogInit,
|
||||
tableRestActionDialogRender
|
||||
} from "../lib/modals";
|
||||
import {tableAddDeleteButton, tableRestActionDialogInit, tableRestActionDialogRender} from "../lib/modals";
|
||||
import {withComponentMixins} from "../lib/decorator-helpers";
|
||||
|
||||
@withComponentMixins([
|
||||
|
|
|
@ -1,13 +1,9 @@
|
|||
'use strict';
|
||||
|
||||
import React
|
||||
from 'react';
|
||||
import CUD
|
||||
from './CUD';
|
||||
import List
|
||||
from './List';
|
||||
import UserShares
|
||||
from '../shares/UserShares';
|
||||
import React from 'react';
|
||||
import CUD from './CUD';
|
||||
import List from './List';
|
||||
import UserShares from '../shares/UserShares';
|
||||
import {ellipsizeBreadcrumbLabel} from "../lib/helpers";
|
||||
|
||||
function getMenus(t) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue