From acfe619cb9ebbbf21675a53918521ffe62f614fa Mon Sep 17 00:00:00 2001 From: Samuel Georges Date: Mon, 24 Apr 2017 12:32:08 +1000 Subject: [PATCH] Add button lacks loading state - Refs #2772 --- modules/backend/formwidgets/Repeater.php | 12 +++++++----- .../repeater/assets/js/repeater.js | 19 +++++++++++++------ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/modules/backend/formwidgets/Repeater.php b/modules/backend/formwidgets/Repeater.php index 85ee6cc71..80e744670 100644 --- a/modules/backend/formwidgets/Repeater.php +++ b/modules/backend/formwidgets/Repeater.php @@ -171,12 +171,14 @@ class Repeater extends FormWidgetBase */ protected function processExistingItems() { - $loadValue = $this->getLoadValue(); - $loadedIndexes = $loadedGroups = []; - foreach ($loadValue as $loadedValue) { - $loadedIndexes[] = array_get($loadedValue, '_index'); - $loadedGroups[] = array_get($loadedValue, '_group'); + + $loadValue = $this->getLoadValue(); + if (is_array($loadValue)) { + foreach ($loadValue as $loadedValue) { + $loadedIndexes[] = array_get($loadedValue, '_index'); + $loadedGroups[] = array_get($loadedValue, '_group'); + } } $itemIndexes = post($this->indexInputName, $loadedIndexes); diff --git a/modules/backend/formwidgets/repeater/assets/js/repeater.js b/modules/backend/formwidgets/repeater/assets/js/repeater.js index 8537a438e..36c0d8581 100644 --- a/modules/backend/formwidgets/repeater/assets/js/repeater.js +++ b/modules/backend/formwidgets/repeater/assets/js/repeater.js @@ -85,7 +85,8 @@ Repeater.prototype.clickAddGroupButton = function(ev) { var templateHtml = $('> [data-group-palette-template]', this.$el).html(), $target = $(ev.target), - $form = this.$el.closest('form') + $form = this.$el.closest('form'), + $loadContainer = $target.closest('.loading-indicator-container') $target.ocPopover({ content: templateHtml @@ -93,11 +94,17 @@ var $container = $target.data('oc.popover').$container - $container.on('click', 'a', function (ev) { - setTimeout(function() { - $(ev.target).trigger('close.oc.popover') - }, 1) - }) + $container + .on('click', 'a', function (ev) { + setTimeout(function() { $(ev.target).trigger('close.oc.popover') }, 1) + }) + .on('ajaxPromise', '[data-repeater-add]', function(ev, context) { + $loadContainer.loadIndicator() + + $form.one('ajaxComplete', function() { + $loadContainer.loadIndicator('hide') + }) + }) $('[data-repeater-add]', $container).data('request-form', $form) }