Newer
Older
navi-1 / old_webclient / js / sidebar.js
/** Sidebar DOM helpers. */

import { esc, timeLabel } from './utils.js';

export function renderProfiles(selectEl, profiles) {
  selectEl.innerHTML = profiles
    .map(p => `<option value="${esc(p.id)}">${esc(p.name)}</option>`)
    .join('');
}

export function renderSessions(listEl, sessions, currentId, { onSelect, onDelete, onPin }) {
  if (!sessions.length) {
    listEl.innerHTML = '<div class="empty-sessions">No conversations yet</div>';
    return;
  }

  listEl.innerHTML = sessions.map(s => {
    const active   = s.session_id === currentId ? ' active' : '';
    const pinned   = s.pinned ? ' pinned' : '';
    const preview  = esc(s.preview || 'No messages yet');
    const time     = timeLabel(s.last_active);
    const pinIcon  = s.pinned ? '📌' : '📍';
    const pinTitle = s.pinned ? 'Unpin' : 'Pin';
    return `
      <div class="session-item${active}${pinned}" data-id="${s.session_id}">
        <div class="s-body">
          <div class="s-preview">${s.pinned ? '📌 ' : ''}${preview}</div>
          <div class="s-time">${time}</div>
        </div>
        <div class="s-actions">
          <button class="btn-pin"    data-id="${s.session_id}" data-pinned="${s.pinned}" title="${pinTitle}">${pinIcon}</button>
          <button class="btn-delete" data-id="${s.session_id}" title="Delete">×</button>
        </div>
      </div>`;
  }).join('');

  listEl.querySelectorAll('.session-item').forEach(el =>
    el.addEventListener('click', () => onSelect(el.dataset.id))
  );
  listEl.querySelectorAll('.btn-pin').forEach(btn =>
    btn.addEventListener('click', e => {
      e.stopPropagation();
      onPin(btn.dataset.id, btn.dataset.pinned !== 'true');
    })
  );
  listEl.querySelectorAll('.btn-delete').forEach(btn =>
    btn.addEventListener('click', e => { e.stopPropagation(); onDelete(btn.dataset.id); })
  );
}

export function updateChatHeader(headerEl, profileId, profileName) {
  const titleEl = headerEl.querySelector('#chat-header-title');
  if (!titleEl) return;
  titleEl.innerHTML = profileId
    ? `<span class="profile-badge">${esc(profileId)}</span> ${esc(profileName || profileId)}`
    : 'Select a profile and start a new chat';
}