mirror of
https://github.com/symbiote/silverstripe-gridfieldextensions.git
synced 2024-10-22 17:05:39 +02:00
Merge pull request #301 from oilee80/3
Add Multi Class to inline add button
This commit is contained in:
commit
d671788b19
@ -2,4 +2,8 @@
|
|||||||
name: gridfieldextensions
|
name: gridfieldextensions
|
||||||
---
|
---
|
||||||
GridFieldAddNewMultiClass:
|
GridFieldAddNewMultiClass:
|
||||||
showEmptyString: true
|
showEmptyString: true
|
||||||
|
|
||||||
|
SilverStripe\Forms\GridField\GridFieldDetailForm_ItemRequest:
|
||||||
|
extensions:
|
||||||
|
- Symbiote\GridFieldExtensions\Extensions\GridFieldDetailFormItemRequestExtension
|
||||||
|
@ -201,3 +201,25 @@
|
|||||||
.ss-gridfield-configurable-paginator .pagination-page-number input {
|
.ss-gridfield-configurable-paginator .pagination-page-number input {
|
||||||
text-align: center;
|
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;
|
||||||
|
}
|
||||||
|
@ -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 `<li><a href="${link}">Add: <i>${classes[className]}</i></a></li>`;
|
||||||
|
});
|
||||||
|
|
||||||
|
const listElement = $(`<ul class="grid-field-inline-new--multi-class-list">${liHtml.join('')}</ul>`);
|
||||||
|
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({
|
$(".ss-gridfield-add-new-multi-class select").entwine({
|
||||||
onadd: function() {
|
onadd: function() {
|
||||||
this.update();
|
this.update();
|
||||||
|
83
src/Extensions/GridFieldDetailFormItemRequestExtension.php
Normal file
83
src/Extensions/GridFieldDetailFormItemRequestExtension.php
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symbiote\GridFieldExtensions\Extensions;
|
||||||
|
|
||||||
|
use SilverStripe\Control\Controller;
|
||||||
|
use SilverStripe\Core\Convert;
|
||||||
|
use SilverStripe\Core\Extension;
|
||||||
|
use SilverStripe\Forms\FieldList;
|
||||||
|
use SilverStripe\Forms\GridField\GridFieldDetailForm_ItemRequest as CoreGridFieldDetailForm_ItemRequest;
|
||||||
|
use SilverStripe\Forms\LiteralField;
|
||||||
|
use SilverStripe\View\ArrayData;
|
||||||
|
use SilverStripe\View\HTML;
|
||||||
|
use Symbiote\GridFieldExtensions\GridFieldAddNewMultiClass;
|
||||||
|
use Symbiote\GridFieldExtensions\GridFieldExtensions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @property CoreGridFieldDetailForm_ItemRequest $owner
|
||||||
|
*/
|
||||||
|
class GridFieldDetailFormItemRequestExtension extends Extension
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param FieldList $actions
|
||||||
|
*/
|
||||||
|
public function updateFormActions(FieldList &$actions)
|
||||||
|
{
|
||||||
|
$grid = $this->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');
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user