diff --git a/admin/client/src/components/FormBuilder/FormBuilder.js b/admin/client/src/components/FormBuilder/FormBuilder.js
index b5b8bc46e..b13b89c37 100644
--- a/admin/client/src/components/FormBuilder/FormBuilder.js
+++ b/admin/client/src/components/FormBuilder/FormBuilder.js
@@ -295,17 +295,28 @@ export class FormBuilderComponent extends SilverStripeComponent {
return actions.map((action, i) => {
let props = deepFreeze(action);
- if (typeof createFn === 'function') {
- return createFn(FormActionComponent, props);
+ // Add sensible defaults for common actions.
+ switch (props.name) {
+ case 'action_save':
+ props = deepFreeze(Object.assign({}, props, {
+ type: 'submit',
+ label: props.title,
+ icon: 'save',
+ }));
+ break;
+ case 'action_cancel':
+ props = deepFreeze(Object.assign({}, props, {
+ type: 'button',
+ label: props.title,
+ icon: 'cancel',
+ }));
+ break;
+ default:
+ break;
}
- // Add sensible defaults for common actions.
- if (props.name === 'action_save') {
- props = deepFreeze(Object.assign({}, props, {
- type: 'submit',
- label: props.title,
- icon: 'save',
- }));
+ if (typeof createFn === 'function') {
+ return createFn(FormActionComponent, props);
}
return ;
diff --git a/admin/client/src/containers/CampaignAdmin/CampaignAdmin.js b/admin/client/src/containers/CampaignAdmin/CampaignAdmin.js
index 439387844..3d9a5e649 100644
--- a/admin/client/src/containers/CampaignAdmin/CampaignAdmin.js
+++ b/admin/client/src/containers/CampaignAdmin/CampaignAdmin.js
@@ -25,6 +25,7 @@ class CampaignAdmin extends SilverStripeComponent {
},
});
this.campaignListCreateFn = this.campaignListCreateFn.bind(this);
+ this.campaignCreationView = this.campaignCreationView.bind(this);
}
componentDidMount() {
@@ -164,6 +165,7 @@ class CampaignAdmin extends SilverStripeComponent {
renderCreateView() {
const baseSchemaUrl = this.props.sectionConfig.forms.CreateEditForm.schemaUrl;
const formBuilderProps = {
+ createFn: this.campaignCreationView,
formId: 'CreateEditForm',
schemaUrl: `${baseSchemaUrl}/ChangeSet`,
};
@@ -182,6 +184,32 @@ class CampaignAdmin extends SilverStripeComponent {
);
}
+ /**
+ * Hook to allow customisation of components being constructed
+ * by the Campaign creation FormBuilder.
+ *
+ * @param {Object} Component - Component constructor.
+ * @param {Object} props - Props passed from FormBuilder.
+ *
+ * @return {Object} - Instanciated React component
+ */
+ campaignCreationView(Component, props) {
+ const indexRoute = this.props.sectionConfig.route;
+
+ // Route to the Campaigns index view when 'Cancel' is clicked.
+ if (props.name === 'action_cancel') {
+ const extendedProps = Object.assign({}, props, {
+ handleClick: () => {
+ window.ss.router.show(indexRoute);
+ },
+ });
+
+ return ;
+ }
+
+ return ;
+ }
+
/**
* Hook to allow customisation of components being constructed
* by the Campaign list FormBuilder.
diff --git a/admin/code/CampaignAdmin.php b/admin/code/CampaignAdmin.php
index 0e3e952c2..faadc8cfe 100644
--- a/admin/code/CampaignAdmin.php
+++ b/admin/code/CampaignAdmin.php
@@ -486,7 +486,8 @@ JSON;
'CreateEditForm',
ChangeSet::singleton()->getCMSFields(),
FieldList::create(
- FormAction::create('save', 'Save')
+ FormAction::create('save', 'Save'),
+ FormAction::create('cancel', 'Cancel')
)
);
}