helpers/updateNumbering.js

define(['knockout'], function(ko) {
    /**
     * Updates the field numbering when a field is moved or deleted
     * @module app/helpers/updateNumbering
     * @requires knockout
     * @param  {Array} fields    Array of fields to update
     * @param  {Boolean} recursive Recursive flag
     * @return {None}
     */
    function updateNumbering(fields, recursive) {
        var n = 0,
            showNumbering;

        recursive = recursive || false;

        ko.utils.arrayForEach(fields, function(item, i) {
            if (item && !item._destroy) {
                showNumbering = ko.isObservable(item.showNumbering) ? item.showNumbering() : item.showNumbering;
                if (recursive && item.childFields().length) {
                    updateNumbering(item.childFields(), item);
                }
                if (showNumbering) {
                    item.numbering(++n);
                } else {
                    item.numbering('');
                }
            }
        });
    };

    return updateNumbering;
});