Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
35626 amit 1
/**
2
 * Ticket Renderer - Handles unread indicators and ticket list rendering
3
 */
4
var TicketRenderer = (function() {
5
    return {
6
        /**
7
         * Apply unread styling to ticket rows based on unreadMap data attribute
8
         * Called after ticket list is rendered
9
         */
10
        applyUnreadStyling: function() {
11
            $('tr[data-ticket-unread="true"]').each(function() {
12
                $(this).addClass('ticket-unread');
13
                // Add unread indicator dot if not already present
14
                if ($(this).find('.unread-badge').length === 0) {
15
                    var firstTd = $(this).find('td:first');
16
                    firstTd.prepend('<span class="unread-badge" title="Unread update"></span> ');
17
                }
18
            });
19
        },
20
 
21
        /**
22
         * Sort ticket rows: unread first, then by date descending
23
         * @param {string} tableBodySelector - jQuery selector for tbody
24
         */
25
        sortUnreadFirst: function(tableBodySelector) {
26
            var $tbody = $(tableBodySelector);
27
            var rows = $tbody.find('tr').get();
28
 
29
            rows.sort(function(a, b) {
30
                var aUnread = $(a).data('ticket-unread') === true ? 1 : 0;
31
                var bUnread = $(b).data('ticket-unread') === true ? 1 : 0;
32
 
33
                // Unread first
34
                if (aUnread !== bUnread) {
35
                    return bUnread - aUnread;
36
                }
37
 
38
                // Then by timestamp descending
39
                var aTime = $(a).data('last-activity-time') || '';
40
                var bTime = $(b).data('last-activity-time') || '';
41
                return bTime.localeCompare(aTime);
42
            });
43
 
44
            $.each(rows, function(idx, row) {
45
                $tbody.append(row);
46
            });
47
        },
48
 
49
        /**
50
         * Update the unread count badge in the navigation/header
51
         * @param {number} count - Number of unread tickets
52
         */
53
        updateUnreadBadge: function(count) {
54
            var $badge = $('.cs-unread-count');
55
            if (count > 0) {
56
                if ($badge.length === 0) {
57
                    // Create badge if it doesn't exist
58
                    $('.cs-nav-link, .cs-menu-item').each(function() {
59
                        $(this).append(' <span class="badge badge-danger cs-unread-count">' + count + '</span>');
60
                    });
61
                } else {
62
                    $badge.text(count).show();
63
                }
64
            } else {
65
                $badge.hide();
66
            }
67
        },
68
 
69
        /**
70
         * Show last activity message preview for a ticket
71
         * @param {jQuery} $row - The ticket row element
72
         * @param {string} message - Last activity message
73
         */
74
        showLastActivityPreview: function($row, message) {
75
            if (message) {
76
                var preview = message.length > 80 ? message.substring(0, 80) + '...' : message;
77
                var $previewEl = $row.find('.last-activity-preview');
78
                if ($previewEl.length > 0) {
79
                    $previewEl.text(preview);
80
                }
81
            }
82
        }
83
    };
84
})();
85
 
86
// Initialize when document is ready
87
$(function() {
88
    // Apply unread styling after page load
89
    TicketRenderer.applyUnreadStyling();
90
 
91
    // Initialize ticket manager if on a ticket page
92
    if ($('.ticket-list-table').length > 0 || $('#ticketTable').length > 0) {
93
        TicketManager.init();
94
    }
95
});