Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

/**
 * Ticket Renderer - Handles unread indicators and ticket list rendering
 */
var TicketRenderer = (function() {
    return {
        /**
         * Apply unread styling to ticket rows based on unreadMap data attribute
         * Called after ticket list is rendered
         */
        applyUnreadStyling: function() {
            $('tr[data-ticket-unread="true"]').each(function() {
                $(this).addClass('ticket-unread');
                // Add unread indicator dot if not already present
                if ($(this).find('.unread-badge').length === 0) {
                    var firstTd = $(this).find('td:first');
                    firstTd.prepend('<span class="unread-badge" title="Unread update"></span> ');
                }
            });
        },

        /**
         * Sort ticket rows: unread first, then by date descending
         * @param {string} tableBodySelector - jQuery selector for tbody
         */
        sortUnreadFirst: function(tableBodySelector) {
            var $tbody = $(tableBodySelector);
            var rows = $tbody.find('tr').get();

            rows.sort(function(a, b) {
                var aUnread = $(a).data('ticket-unread') === true ? 1 : 0;
                var bUnread = $(b).data('ticket-unread') === true ? 1 : 0;

                // Unread first
                if (aUnread !== bUnread) {
                    return bUnread - aUnread;
                }

                // Then by timestamp descending
                var aTime = $(a).data('last-activity-time') || '';
                var bTime = $(b).data('last-activity-time') || '';
                return bTime.localeCompare(aTime);
            });

            $.each(rows, function(idx, row) {
                $tbody.append(row);
            });
        },

        /**
         * Update the unread count badge in the navigation/header
         * @param {number} count - Number of unread tickets
         */
        updateUnreadBadge: function(count) {
            var $badge = $('.cs-unread-count');
            if (count > 0) {
                if ($badge.length === 0) {
                    // Create badge if it doesn't exist
                    $('.cs-nav-link, .cs-menu-item').each(function() {
                        $(this).append(' <span class="badge badge-danger cs-unread-count">' + count + '</span>');
                    });
                } else {
                    $badge.text(count).show();
                }
            } else {
                $badge.hide();
            }
        },

        /**
         * Show last activity message preview for a ticket
         * @param {jQuery} $row - The ticket row element
         * @param {string} message - Last activity message
         */
        showLastActivityPreview: function($row, message) {
            if (message) {
                var preview = message.length > 80 ? message.substring(0, 80) + '...' : message;
                var $previewEl = $row.find('.last-activity-preview');
                if ($previewEl.length > 0) {
                    $previewEl.text(preview);
                }
            }
        }
    };
})();

// Initialize when document is ready
$(function() {
    // Apply unread styling after page load
    TicketRenderer.applyUnreadStyling();

    // Initialize ticket manager if on a ticket page
    if ($('.ticket-list-table').length > 0 || $('#ticketTable').length > 0) {
        TicketManager.init();
    }
});