mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-12 23:45:10 +00:00
Fix drag/drop + sort
This commit is contained in:
@@ -71,6 +71,7 @@ class EditController extends Controller
|
|||||||
'targetamount' => $piggyBank->targetamount,
|
'targetamount' => $piggyBank->targetamount,
|
||||||
'targetdate' => $targetDate,
|
'targetdate' => $targetDate,
|
||||||
'startdate' => $startDate,
|
'startdate' => $startDate,
|
||||||
|
'object_group' => $piggyBank->objectGroups->first() ? $piggyBank->objectGroups->first()->title : '',
|
||||||
'notes' => null === $note ? '' : $note->text,
|
'notes' => null === $note ? '' : $note->text,
|
||||||
];
|
];
|
||||||
session()->flash('preFilled', $preFilled);
|
session()->flash('preFilled', $preFilled);
|
||||||
|
@@ -132,8 +132,15 @@ class IndexController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function setOrder(Request $request, PiggyBank $piggyBank): JsonResponse
|
public function setOrder(Request $request, PiggyBank $piggyBank): JsonResponse
|
||||||
{
|
{
|
||||||
$newOrder = (int) $request->get('order');
|
$objectGroupTitle = $request->get('objectGroupTitle');
|
||||||
|
$newOrder = (int) $request->get('order');
|
||||||
$this->piggyRepos->setOrder($piggyBank, $newOrder);
|
$this->piggyRepos->setOrder($piggyBank, $newOrder);
|
||||||
|
if ('' !== $objectGroupTitle) {
|
||||||
|
$this->piggyRepos->setObjectGroup($piggyBank, $objectGroupTitle);
|
||||||
|
}
|
||||||
|
if ('' === $objectGroupTitle) {
|
||||||
|
$this->piggyRepos->removeObjectGroup($piggyBank);
|
||||||
|
}
|
||||||
|
|
||||||
return response()->json(['data' => 'OK']);
|
return response()->json(['data' => 'OK']);
|
||||||
}
|
}
|
||||||
|
@@ -63,6 +63,17 @@ trait ModifiesPiggyBanks
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function removeObjectGroup(PiggyBank $piggyBank): PiggyBank
|
||||||
|
{
|
||||||
|
$piggyBank->objectGroups()->sync([]);
|
||||||
|
|
||||||
|
return $piggyBank;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param PiggyBankRepetition $repetition
|
* @param PiggyBankRepetition $repetition
|
||||||
* @param string $amount
|
* @param string $amount
|
||||||
@@ -250,6 +261,22 @@ trait ModifiesPiggyBanks
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function setObjectGroup(PiggyBank $piggyBank, string $objectGroupTitle): PiggyBank
|
||||||
|
{
|
||||||
|
$objectGroup = $this->findOrCreateObjectGroup($objectGroupTitle);
|
||||||
|
if (null !== $objectGroup) {
|
||||||
|
$piggyBank->objectGroups()->sync([$objectGroup->id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $piggyBank;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $data
|
* @param array $data
|
||||||
*
|
*
|
||||||
|
@@ -393,4 +393,6 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
|
|||||||
|
|
||||||
return $set;
|
return $set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -36,6 +36,21 @@ use Illuminate\Support\Collection;
|
|||||||
*/
|
*/
|
||||||
interface PiggyBankRepositoryInterface
|
interface PiggyBankRepositoryInterface
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @param PiggyBank $piggyBank
|
||||||
|
* @param string $objectGroupTitle
|
||||||
|
*
|
||||||
|
* @return PiggyBank
|
||||||
|
*/
|
||||||
|
public function setObjectGroup(PiggyBank $piggyBank, string $objectGroupTitle): PiggyBank;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param PiggyBank $piggyBank
|
||||||
|
*
|
||||||
|
* @return PiggyBank
|
||||||
|
*/
|
||||||
|
public function removeObjectGroup(PiggyBank $piggyBank): PiggyBank;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param PiggyBank $piggyBank
|
* @param PiggyBank $piggyBank
|
||||||
* @param string $amount
|
* @param string $amount
|
||||||
|
2
public/v1/css/firefly.css
vendored
2
public/v1/css/firefly.css
vendored
@@ -87,7 +87,7 @@ p.tagcloud .label {
|
|||||||
line-height: 2;
|
line-height: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.handle {
|
.piggy-handle {
|
||||||
cursor: move;
|
cursor: move;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
21
public/v1/js/ff/piggy-banks/index.js
vendored
21
public/v1/js/ff/piggy-banks/index.js
vendored
@@ -18,7 +18,7 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
/** global: token */
|
/** global: token */
|
||||||
var fixHelper = function (e, tr) {
|
var fixPiggyHelper = function (e, tr) {
|
||||||
"use strict";
|
"use strict";
|
||||||
var $originals = tr.children();
|
var $originals = tr.children();
|
||||||
var $helper = tr.clone();
|
var $helper = tr.clone();
|
||||||
@@ -34,12 +34,13 @@ $(function () {
|
|||||||
$('.addMoney').on('click', addMoney);
|
$('.addMoney').on('click', addMoney);
|
||||||
$('.removeMoney').on('click', removeMoney);
|
$('.removeMoney').on('click', removeMoney);
|
||||||
|
|
||||||
$('#sortable-piggy').find('tbody').sortable(
|
$('#piggy-sortable').find('tbody').sortable(
|
||||||
{
|
{
|
||||||
helper: fixHelper,
|
helper: fixPiggyHelper,
|
||||||
stop: stopSorting,
|
stop: stopSorting,
|
||||||
items: 'tr.sortable',
|
connectWith: '.piggy-connected-list',
|
||||||
handle: '.handle',
|
items: 'tr.piggy-sortable',
|
||||||
|
handle: '.piggy-handle',
|
||||||
start: function (event, ui) {
|
start: function (event, ui) {
|
||||||
// Build a placeholder cell that spans all the cells in the row
|
// Build a placeholder cell that spans all the cells in the row
|
||||||
var cellCount = 0;
|
var cellCount = 0;
|
||||||
@@ -85,8 +86,10 @@ function stopSorting() {
|
|||||||
"use strict";
|
"use strict";
|
||||||
$('.loadSpin').addClass('fa fa-refresh fa-spin');
|
$('.loadSpin').addClass('fa fa-refresh fa-spin');
|
||||||
|
|
||||||
$.each($('#sortable-piggy>tbody>tr.sortable'), function (i, v) {
|
$.each($('#piggy-sortable>tbody>tr.piggy-sortable'), function (i, v) {
|
||||||
var holder = $(v);
|
var holder = $(v);
|
||||||
|
var parentBody = holder.parent();
|
||||||
|
var objectGroupTitle = parentBody.data('title');
|
||||||
var position = parseInt(holder.data('position'));
|
var position = parseInt(holder.data('position'));
|
||||||
var originalOrder = parseInt(holder.data('order'));
|
var originalOrder = parseInt(holder.data('order'));
|
||||||
var name = holder.data('name');
|
var name = holder.data('name');
|
||||||
@@ -98,16 +101,16 @@ function stopSorting() {
|
|||||||
}
|
}
|
||||||
if (position < i) {
|
if (position < i) {
|
||||||
// position is less.
|
// position is less.
|
||||||
console.log('"' + name + '" has moved up from position ' + originalOrder + ' to ' + (i+1));
|
console.log('"' + name + '" ("' + objectGroupTitle + '") has moved up from position ' + originalOrder + ' to ' + (i + 1));
|
||||||
}
|
}
|
||||||
if (position > i) {
|
if (position > i) {
|
||||||
console.log('"' + name + '" has moved up from position ' + originalOrder + ' to ' + (i+1));
|
console.log('"' + name + '" ("' + objectGroupTitle + '") has moved up from position ' + originalOrder + ' to ' + (i + 1));
|
||||||
}
|
}
|
||||||
// update position:
|
// update position:
|
||||||
holder.data('position', i);
|
holder.data('position', i);
|
||||||
newOrder = i+1;
|
newOrder = i+1;
|
||||||
|
|
||||||
$.post('piggy-banks/set-order/' + id, {order: newOrder, _token: token})
|
$.post('piggy-banks/set-order/' + id, {order: newOrder, objectGroupTitle: objectGroupTitle, _token: token})
|
||||||
});
|
});
|
||||||
$('.loadSpin').removeClass('fa fa-refresh fa-spin');
|
$('.loadSpin').removeClass('fa fa-refresh fa-spin');
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
<table class="table table-hover table-condensed" id="sortable-piggy">
|
<table class="table table-hover table-condensed" id="piggy-sortable">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th colspan="2"> </th>
|
<th colspan="2"> </th>
|
||||||
@@ -13,12 +13,13 @@
|
|||||||
|
|
||||||
{% for objectGroupOrder, objectGroup in piggyBanks %}
|
{% for objectGroupOrder, objectGroup in piggyBanks %}
|
||||||
{% if objectGroup.piggy_banks|length > 0 %}
|
{% if objectGroup.piggy_banks|length > 0 %}
|
||||||
<tbody>
|
<tbody class="piggy-connected-list" {% if objectGroupOrder != 0 %}data-title="{{ objectGroup.object_group_title }}"{% else %}data-title=""{% endif %}>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="10"><small>{{ objectGroup.object_group_title }}</small></td>
|
<td colspan="2">{% if objectGroupOrder != 0 %}<i class="fa fa-fw fa-bars group-handle"></i>{% endif %}</td>
|
||||||
|
<td colspan="8"><small>{{ objectGroup.object_group_title }}</small></td>
|
||||||
</tr>
|
</tr>
|
||||||
{% for piggy in objectGroup.piggy_banks %}
|
{% for piggy in objectGroup.piggy_banks %}
|
||||||
<tr class="sortable" data-id="{{ piggy.id }}" data-name="{{ piggy.name }}" data-order="{{ piggy.order }}" data-position="{{ loop.index0 }}">
|
<tr class="piggy-sortable" data-id="{{ piggy.id }}" data-name="{{ piggy.name }}" data-order="{{ piggy.order }}" data-position="{{ loop.index0 }}">
|
||||||
<td class="visible-xs visible-sm hidden-md hidden-lg">
|
<td class="visible-xs visible-sm hidden-md hidden-lg">
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
@@ -29,7 +30,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td style="width:60px;" class="hidden-sm hidden-xs">
|
<td style="width:60px;" class="hidden-sm hidden-xs">
|
||||||
<i class="fa fa-fw fa-bars handle"></i>
|
<i class="fa fa-fw fa-bars piggy-handle"></i>
|
||||||
<i class="loadSpin"></i>
|
<i class="loadSpin"></i>
|
||||||
</td>
|
</td>
|
||||||
<td style="width:100px;" class="hidden-sm hidden-xs">
|
<td style="width:100px;" class="hidden-sm hidden-xs">
|
||||||
@@ -98,6 +99,4 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
Reference in New Issue
Block a user