open-orchestra/open-orchestra-cms-bundle

View on GitHub
BackofficeBundle/Resources/public/ecmascript/OpenOrchestra/Service/Form/Behavior/PatchAndSendSubmit.js

Summary

Maintainability
A
1 hr
Test Coverage
import AbstractBehavior from 'OpenOrchestra/Service/Form/Behavior/AbstractBehavior'

/**
 * @class PatchAndSendSubmit
 */
class PatchAndSendSubmit extends AbstractBehavior
{
    /**
     * get extra events
     *
     * @return {Object}
     *
     * */
    getExtraEvents() {
        return {
            'change .patch-submit-change': '_submitPatch',
            'click .patch-submit-click' : '_submitPatch'
        }
    }

    /**
     * Submit form with patch method to refresh form
     *
     * @param {Object} event
     * @param {Object} context
     * @private
     */
    _submitPatch(event, context) {
        Backbone.Events.trigger('form:deactivate', this);

        let formView = this;
        let $form = $('form', this.$el);
        let $formToPatch = $(event.target).parents(context.getSelector()).eq(0);
        let $subforms = $('.subform-to-refresh', $formToPatch);
        let containers = {};
        let data = $form.serializeArray();

        $subforms.each(function(index, subform){
            let $subform = $(subform);
            if ($subform.attr('id') !== undefined) {
                formView._displayLoader($subform);
                containers[$subform.attr('id')] = $subform.parent();
            }
        });

        $form.ajaxSubmit({
            type: 'PATCH',
            context: this,
            data: data,
            success: function(response) {
                $.each(containers, function(id, $container){
                    let $subform = $('#' + id, response);
                    $container.html(($subform.length > 0) ? $subform.parent().html() : '');
                });
                Backbone.Events.trigger('form:activate', this);
            }
        });
    }
    
    /**
     * return selector
     *
     * @return {String}
     */
    getSelector() {
        return '.form-to-patch-and-send';
    }
}

export default (new PatchAndSendSubmit);