diff --git a/_config/gridfieldextensions.yml b/_config/gridfieldextensions.yml
index 837c474f..f8727c39 100644
--- a/_config/gridfieldextensions.yml
+++ b/_config/gridfieldextensions.yml
@@ -2,4 +2,8 @@
name: gridfieldextensions
---
GridFieldAddNewMultiClass:
- showEmptyString: true
\ No newline at end of file
+ showEmptyString: true
+
+SilverStripe\Forms\GridField\GridFieldDetailForm_ItemRequest:
+ extensions:
+ - Symbiote\GridFieldExtensions\Extensions\GridFieldDetailFormItemRequestExtension
diff --git a/css/GridFieldExtensions.css b/css/GridFieldExtensions.css
index f56db7eb..f36ff2f9 100644
--- a/css/GridFieldExtensions.css
+++ b/css/GridFieldExtensions.css
@@ -201,3 +201,25 @@
.ss-gridfield-configurable-paginator .pagination-page-number input {
text-align: center;
}
+
+.grid-field-inline-new--multi-class-list {
+ display: none;
+ background-color: #008a00;
+ border-radius: 5px;
+ bottom: 3em;
+ list-style: none;
+ margin: 0;
+ right: 3em;
+ padding: 10px;
+ position: fixed;
+
+}
+.grid-field-inline-new--multi-class-list a {
+ color: #FFF;
+ display: block;
+ margin: 5px -10px;
+ padding: 0 10px;
+}
+.grid-field-inline-new--multi-class-list__visible {
+ display: block;
+}
diff --git a/javascript/GridFieldExtensions.js b/javascript/GridFieldExtensions.js
index 33e3115c..60529d70 100644
--- a/javascript/GridFieldExtensions.js
+++ b/javascript/GridFieldExtensions.js
@@ -237,6 +237,24 @@
}
});
+ $(".action--new__multi-class").entwine({
+ onmatch: function () {
+ const hrefTemplate = this.data('hrefTemplate');
+ const classes = this.data('classes');
+ const liHtml = Object.keys(classes).map(className => {
+ const link = hrefTemplate.replace('{class}', className);
+ return `
Add: ${classes[className]}`;
+ });
+
+ const listElement = $(``);
+ listElement.insertBefore(this);
+
+ this.on('click', function () {
+ listElement.toggleClass('grid-field-inline-new--multi-class-list__visible');
+ });
+ },
+ });
+
$(".ss-gridfield-add-new-multi-class select").entwine({
onadd: function() {
this.update();
diff --git a/src/Extensions/GridFieldDetailFormItemRequestExtension.php b/src/Extensions/GridFieldDetailFormItemRequestExtension.php
new file mode 100644
index 00000000..46af26af
--- /dev/null
+++ b/src/Extensions/GridFieldDetailFormItemRequestExtension.php
@@ -0,0 +1,83 @@
+owner->getGridField();
+ $gridFieldConfig = $grid->getConfig();
+ $addMultiClassComponent = $gridFieldConfig->getComponentByType(GridFieldAddNewMultiClass::class);
+ if ($addMultiClassComponent) {
+ $newRecordField = static::get_new_record_field_from_actions($actions);
+ if ($newRecordField) {
+ $newRecordField->getContainerFieldList()->removeByName('new-record');
+ $newRecordField->getContainerFieldList()->push(
+ LiteralField::create('new-record', $this->getHTMLFragment($addMultiClassComponent))
+ );
+ GridFieldExtensions::include_requirements();
+ }
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ private function getHTMLFragment(GridFieldAddNewMultiClass $component)
+ {
+ $grid = $this->owner->getGridField();
+
+ $classes = $component->getClasses($grid);
+
+ if (!count($classes)) {
+ return false;
+ }
+
+ return HTML::createTag('a', [
+ 'data-href-template' => Controller::join_links($grid->Link(), 'add-multi-class', '{class}'),
+ 'title' => _t(__CLASS__ . '.NEW', 'Add new record'),
+ 'aria-label' => _t(__CLASS__ . '.NEW', 'Add new record'),
+ 'class' => implode(' ', array(
+ 'btn',
+ 'btn-primary',
+ 'font-icon-plus-thin',
+ 'btn--circular',
+ 'action--new',
+ 'discard-confirmation',
+ 'action--new__multi-class',
+ )),
+ 'data-classes' => Convert::array2json($classes),
+ ]);
+ }
+
+ /**
+ * @param FieldList $actions
+ * @return LiteralField OR NULL
+ */
+ private static function get_new_record_field_from_actions(FieldList &$actions)
+ {
+ $rightGroup = $actions->fieldByName('RightGroup');
+ if (!$rightGroup) {
+ return null;
+ }
+ return $rightGroup->getChildren()->fieldByName('new-record');
+ }
+}