From ccc82858ad7e06a1b0789b5932c087f07ca32a81 Mon Sep 17 00:00:00 2001 From: James Cole Date: Tue, 9 Jun 2020 17:16:21 +0200 Subject: [PATCH] Fix drag/drop + sort --- .../Controllers/PiggyBank/EditController.php | 1 + .../Controllers/PiggyBank/IndexController.php | 9 ++++++- .../PiggyBank/ModifiesPiggyBanks.php | 27 +++++++++++++++++++ .../PiggyBank/PiggyBankRepository.php | 2 ++ .../PiggyBankRepositoryInterface.php | 15 +++++++++++ public/v1/css/firefly.css | 2 +- public/v1/js/ff/piggy-banks/index.js | 21 ++++++++------- resources/views/v1/list/piggy-banks.twig | 13 +++++---- 8 files changed, 72 insertions(+), 18 deletions(-) diff --git a/app/Http/Controllers/PiggyBank/EditController.php b/app/Http/Controllers/PiggyBank/EditController.php index 54b90ed02e..2ed18713a3 100644 --- a/app/Http/Controllers/PiggyBank/EditController.php +++ b/app/Http/Controllers/PiggyBank/EditController.php @@ -71,6 +71,7 @@ class EditController extends Controller 'targetamount' => $piggyBank->targetamount, 'targetdate' => $targetDate, 'startdate' => $startDate, + 'object_group' => $piggyBank->objectGroups->first() ? $piggyBank->objectGroups->first()->title : '', 'notes' => null === $note ? '' : $note->text, ]; session()->flash('preFilled', $preFilled); diff --git a/app/Http/Controllers/PiggyBank/IndexController.php b/app/Http/Controllers/PiggyBank/IndexController.php index bcd80eafd4..2d12fd09b0 100644 --- a/app/Http/Controllers/PiggyBank/IndexController.php +++ b/app/Http/Controllers/PiggyBank/IndexController.php @@ -132,8 +132,15 @@ class IndexController extends Controller */ 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); + if ('' !== $objectGroupTitle) { + $this->piggyRepos->setObjectGroup($piggyBank, $objectGroupTitle); + } + if ('' === $objectGroupTitle) { + $this->piggyRepos->removeObjectGroup($piggyBank); + } return response()->json(['data' => 'OK']); } diff --git a/app/Repositories/PiggyBank/ModifiesPiggyBanks.php b/app/Repositories/PiggyBank/ModifiesPiggyBanks.php index f47223b301..d12b8f853d 100644 --- a/app/Repositories/PiggyBank/ModifiesPiggyBanks.php +++ b/app/Repositories/PiggyBank/ModifiesPiggyBanks.php @@ -63,6 +63,17 @@ trait ModifiesPiggyBanks return true; } + /** + * @inheritDoc + */ + public function removeObjectGroup(PiggyBank $piggyBank): PiggyBank + { + $piggyBank->objectGroups()->sync([]); + + return $piggyBank; + } + + /** * @param PiggyBankRepetition $repetition * @param string $amount @@ -250,6 +261,22 @@ trait ModifiesPiggyBanks 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 * diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index ae93017271..7db78aa20d 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -393,4 +393,6 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface return $set; } + + } diff --git a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php index aa07fdb025..bc4257f628 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php +++ b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php @@ -36,6 +36,21 @@ use Illuminate\Support\Collection; */ 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 string $amount diff --git a/public/v1/css/firefly.css b/public/v1/css/firefly.css index df92ae9e08..c08a5641fa 100644 --- a/public/v1/css/firefly.css +++ b/public/v1/css/firefly.css @@ -87,7 +87,7 @@ p.tagcloud .label { line-height: 2; } -.handle { +.piggy-handle { cursor: move; } diff --git a/public/v1/js/ff/piggy-banks/index.js b/public/v1/js/ff/piggy-banks/index.js index 8a2f4b156f..fba19c782b 100644 --- a/public/v1/js/ff/piggy-banks/index.js +++ b/public/v1/js/ff/piggy-banks/index.js @@ -18,7 +18,7 @@ * along with this program. If not, see . */ /** global: token */ -var fixHelper = function (e, tr) { +var fixPiggyHelper = function (e, tr) { "use strict"; var $originals = tr.children(); var $helper = tr.clone(); @@ -34,12 +34,13 @@ $(function () { $('.addMoney').on('click', addMoney); $('.removeMoney').on('click', removeMoney); - $('#sortable-piggy').find('tbody').sortable( + $('#piggy-sortable').find('tbody').sortable( { - helper: fixHelper, + helper: fixPiggyHelper, stop: stopSorting, - items: 'tr.sortable', - handle: '.handle', + connectWith: '.piggy-connected-list', + items: 'tr.piggy-sortable', + handle: '.piggy-handle', start: function (event, ui) { // Build a placeholder cell that spans all the cells in the row var cellCount = 0; @@ -85,8 +86,10 @@ function stopSorting() { "use strict"; $('.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 parentBody = holder.parent(); + var objectGroupTitle = parentBody.data('title'); var position = parseInt(holder.data('position')); var originalOrder = parseInt(holder.data('order')); var name = holder.data('name'); @@ -98,16 +101,16 @@ function stopSorting() { } if (position < i) { // 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) { - 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: holder.data('position', i); 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'); diff --git a/resources/views/v1/list/piggy-banks.twig b/resources/views/v1/list/piggy-banks.twig index c7e5a280fe..7841746069 100644 --- a/resources/views/v1/list/piggy-banks.twig +++ b/resources/views/v1/list/piggy-banks.twig @@ -1,4 +1,4 @@ - +
@@ -13,12 +13,13 @@ {% for objectGroupOrder, objectGroup in piggyBanks %} {% if objectGroup.piggy_banks|length > 0 %} - + - + + {% for piggy in objectGroup.piggy_banks %} - + @@ -29,7 +30,7 @@ {% endif %} {% endfor %} - -
 
{{ objectGroup.object_group_title }}{% if objectGroupOrder != 0 %}{% endif %}{{ objectGroup.object_group_title }}