HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall_new/buyercall/buyercall/assets/scripts/group_form.js
/* jslint esversion: 6 */
const $ = require('jquery');
const Backbone = require('backbone');
const _ = require('underscore');
const { Agent, Agents } = require('../components/agents/agents');
const ROW_TEMPLATE = `
<td></td>
<td><%- fullName %></td>
<td><%- phoneNumber %></td>
<td><%= availableNow ? "Yes" : "No" %></td>
<td>
    <div class='btn-group'>
        <a class='btn btn-xs btn-danger btn-table-action'
           data-original-title='Edit' title='Edit' data-toggle='tooltip'>
           <i class="material-icons">close</i>
        </a>
    </div>
</td>
`;

var GroupAgentRowView = Backbone.View.extend({
    events: {
        'click a': 'handleRemoveClick',
    },

    template: null,

    tagName: 'tr',

    initialize: function() {
        this.template = _.template(ROW_TEMPLATE);
    },

    render: function() {
        this.$el.html(this.template(this.model.attributes));
        return this;
    },

    handleRemoveClick: function (e) {
        e.preventDefault();
        this.trigger('remove', this.model.id);
        this.remove();
    },
});

var GroupAgentTableView = Backbone.View.extend({
    initialize: function () {
        this.agents = new Agents();
    },

    render: function () {
        this.$el.find('tr').each((i, el) => {
            var id = parseInt($(el).attr('data-agentid'));
            if (isNaN(id))
                return;

            var agent = new Agent({ id: id });
            agent.fetch().then(() => {
                this.agents.add(agent);
                var view = new GroupAgentRowView({ model: agent, el: el });
                view.on('remove', (id) => {
                    this.agents.remove(id);
                });
            });
        });

        return this;
    },

    addAgent: function (id) {
        if (this.agents.get(id))
            return;

        var agent = new Agent({ id: id });
        return agent.fetch().then(() => {
            this.agents.add(agent);
            var view = new GroupAgentRowView({ model: agent }).render();
            view.$el.appendTo(this.$el);
            view.on('remove', (id) => {
                this.agents.remove(id);
            });
        });
    }
});

$(function () {
    const agentsView = new GroupAgentTableView({
        el: '#group-agents'
    }).render();
    agentsView.agents.on('add remove', function () {
        // Save new agent IDs belonging to the group into the hidden field
        $('#group_agents').val(agentsView.agents.map(function (a) {
            return a.id;
        }).join(','));
    });
    agentsView.agents.on('remove', function (model) {
        // Add agent to the drop-down
        var $opt = $('<option>').text(model.get('fullName')).attr('value', model.id);
        $('#available-agents').append($opt);
    });

    $('#add-to-group').click(function(e) {
        var agentId = parseInt($('#available-agents').val());

        e.preventDefault();
        agentsView.addAgent(agentId).then(function() {
            $('#available-agents').find('[value="' + agentId + '"]').remove();
        });
    });
});