Newer
Older
navi-1 / webclient / src / components / sidebar / SessionItem.vue
<template>
  <div
    class="session-item"
    :class="{ 'is-active': active, 'is-pinned': session.pinned }"
    @click="emit('select')"
  >
    <i class="ph ph-push-pin session-pin-icon"></i>

    <div class="session-info">
      <div class="session-name">{{ displayName }}</div>
      <div v-if="session.preview" class="session-preview">{{ session.preview }}</div>
    </div>

    <div class="session-actions" @click.stop>
      <button
        class="btn-icon"
        :title="session.pinned ? 'Unpin' : 'Pin'"
        @click="emit('pin')"
      >
        <i :class="session.pinned ? 'ph ph-push-pin-slash' : 'ph ph-push-pin'"></i>
      </button>
      <button
        class="btn-icon"
        title="Delete"
        @click="emit('delete')"
      >
        <i class="ph ph-trash"></i>
      </button>
    </div>
  </div>
</template>

<script setup>
import { computed } from 'vue'

const props = defineProps({
  session: { type: Object, required: true },
  active: { type: Boolean, default: false }
})

const emit = defineEmits(['select', 'delete', 'pin'])

const displayName = computed(() => {
  const id = props.session.session_id ?? ''
  return props.session.name || id.slice(0, 8)
})
</script>