show author attribution for Bible Studies and Conferences

- Display author name (Dr. José Benjamín Pérez Matos / Dr. William Soto Santiago)
  in the list panel and publication detail for each respective section
- History entries now show the author inline and pass it through to the detail view
- Fixed internal collection IDs (bible-studies-ts, conferences-ts) showing as raw
  strings in history; they now resolve to proper translated labels via i18n
- Fixed English nav labels that incorrectly included "Typesense" in the display name
- Added changelog entry for v0.8
This commit is contained in:
David Ascanio 2026-06-05 01:10:01 -03:00
parent 69030d2001
commit f60b2960c5
7 changed files with 68 additions and 11 deletions

View File

@ -67,6 +67,7 @@ const props = defineProps<{
selectedMatchingHits?: TypesenseParagraphHit[] | null
accentColor?: 'green' | 'blue'
noTrackVisit?: boolean
author?: string
}>()
const emits = defineEmits(['close'])
@ -885,6 +886,10 @@ const items = computed(() => {
<UIcon name="ph:file-dashed" class="size-4 text-carpared" />
{{ $t('search.draft') }}
</p>
<p v-if="author" class="text-sm text-highlighted flex items-center gap-1.5 shrink-0">
<UIcon name="ph:user-circle" :class="['size-4', iconColor]" />
<span class="italic">{{ author }}</span>
</p>
<p v-if="safeDate()" class="text-sm text-highlighted flex items-center gap-1.5 shrink-0">
<UIcon name="ph:calendar" :class="['size-4', iconColor]" />
{{ safeDate() }}

View File

@ -14,10 +14,12 @@ interface Props {
accentColor: 'green' | 'blue'
emptyDetailText: string
showDraft?: boolean
author?: string
}
const props = withDefaults(defineProps<Props>(), {
showDraft: false
showDraft: false,
author: ''
})
const QUERY_BY = 'text'
@ -595,6 +597,14 @@ function metaLocation(meta: DocMeta | undefined): string {
</template>
</UDashboardNavbar>
<div
v-if="author"
class="px-4 sm:px-6 py-2 border-b border-default flex items-center gap-1.5 text-xs text-muted"
>
<UIcon name="ph:user-circle" :class="['size-3.5 shrink-0', colors.icon]" />
<span class="italic">{{ author }}</span>
</div>
<div class="px-4 sm:px-6 py-3 border-b border-default flex items-center gap-2" id="inputField">
<UInput
v-model="query"
@ -740,6 +750,7 @@ function metaLocation(meta: DocMeta | undefined): string {
:selected-hit="selectedHit"
:selected-matching-hits="selectedMatchingHits"
:accent-color="accentColor"
:author="author"
@close="isPanelOpen = false"
/>
<div v-else-if="!isMobile" class="hidden lg:flex flex-1 items-center justify-center">
@ -764,6 +775,7 @@ function metaLocation(meta: DocMeta | undefined): string {
:selected-hit="selectedHit"
:selected-matching-hits="selectedMatchingHits"
:accent-color="accentColor"
:author="author"
@close="isPanelOpen = false"
/>
</template>

View File

@ -8,5 +8,6 @@
nav-title-key="nav.conferences_ts"
accent-color="blue"
:empty-detail-text="$t('ui.empty_conferences')"
author="Dr. William Soto Santiago"
/>
</template>

View File

@ -9,5 +9,6 @@
accent-color="green"
:empty-detail-text="$t('ui.empty_bible_studies')"
:show-draft="true"
author="Dr. José Benjamín Pérez Matos"
/>
</template>

View File

@ -30,14 +30,28 @@ const toast = useToast()
const ENTRELINEAS_COLLECTION = 'entrelineas'
const COLLECTION_LABELS: Record<string, string> = {
activities: 'Actividades',
conferences: 'Conferencias',
entrelineas: 'Entre Líneas'
}
const { t } = useI18n()
function labelFor(c: string): string {
return COLLECTION_LABELS[c] || c.charAt(0).toUpperCase() + c.slice(1)
const labels: Record<string, string> = {
activities: t('nav.bible_studies_ts'),
'bible-studies-ts': t('nav.bible_studies_ts'),
conferences: t('nav.conferences_ts'),
'conferences-ts': t('nav.conferences_ts'),
entrelineas: t('nav.between_the_lines'),
}
return labels[c] || c.charAt(0).toUpperCase() + c.slice(1)
}
const COLLECTION_AUTHORS: Record<string, string> = {
'bible-studies-ts': 'Dr. José Benjamín Pérez Matos',
activities: 'Dr. José Benjamín Pérez Matos',
'conferences-ts': 'Dr. William Soto Santiago',
conferences: 'Dr. William Soto Santiago',
}
function authorFor(c: string): string {
return COLLECTION_AUTHORS[c] || ''
}
// Filtros: pestaña por colección o "todos".
@ -57,9 +71,9 @@ const tabs = computed(() => {
items.push({
value: c,
label: `${labelFor(c)} (${count})`,
icon: c === 'activities'
icon: (c === 'activities' || c === 'bible-studies-ts')
? 'i-lucide-calendar-days'
: c === 'conferences'
: (c === 'conferences' || c === 'conferences-ts')
? 'i-lucide-mic'
: c === 'entrelineas'
? 'i-lucide-book-open'
@ -92,6 +106,7 @@ const selected = ref<HistoryItem | null>(null)
const selectedHit = computed<SearchHit | null>(() => selected.value?.hit ?? null)
const selectedCollection = computed<string | undefined>(() => selected.value?.collection)
const selectedAuthor = computed(() => authorFor(selectedCollection.value ?? ''))
const isEntrelinea = computed(() => selectedCollection.value === ENTRELINEAS_COLLECTION)
@ -552,6 +567,13 @@ const nearLimit = computed(() => histTotal.value >= Math.floor(HISTORY_LIMIT * 0
<span v-if="hasDate(it.hit)">{{ safeDate(it.hit) }}</span>
<USeparator v-if="formatLocation(it.hit)" orientation="vertical" class="h-3 hidden sm:block" />
<span class="truncate">{{ formatLocation(it.hit) }}</span>
<template v-if="authorFor(it.collection)">
<USeparator orientation="vertical" class="h-3 hidden sm:block" />
<span class="inline-flex items-center gap-1 italic truncate">
<UIcon name="ph:user-circle" class="size-3 shrink-0" />
{{ authorFor(it.collection) }}
</span>
</template>
</p>
</div>
</div>
@ -574,6 +596,7 @@ const nearLimit = computed(() => histTotal.value >= Math.floor(HISTORY_LIMIT * 0
:paragraphs="detailParagraphs"
:paragraphs-loading="detailParagraphsLoading"
:collection="selectedCollection!"
:author="selectedAuthor"
no-track-visit
@close="selected = null"
/>
@ -603,6 +626,7 @@ const nearLimit = computed(() => histTotal.value >= Math.floor(HISTORY_LIMIT * 0
:paragraphs="detailParagraphs"
:paragraphs-loading="detailParagraphsLoading"
:collection="selectedCollection!"
:author="selectedAuthor"
no-track-visit
@close="selected = null"
/>

View File

@ -19,6 +19,20 @@ export interface Release {
}
export const releases: Release[] = [
{
version: '0.8',
date: '5 de junio, 2026',
title: 'Autoría visible en Estudios Bíblicos, Conferencias e Historial',
changes: [
{ type: 'nuevo', text: 'Nombre del autor visible en el panel lateral de Estudios Bíblicos (Dr. José Benjamín Pérez Matos)' },
{ type: 'nuevo', text: 'Nombre del autor visible en el panel lateral de Conferencias (Dr. William Soto Santiago)' },
{ type: 'nuevo', text: 'Nombre del autor visible en el panel de detalle del documento para ambas secciones' },
{ type: 'nuevo', text: 'El historial muestra el nombre del autor en cada entrada de Estudios Bíblicos y Conferencias' },
{ type: 'mejora', text: 'El panel de detalle abierto desde el historial también muestra el autor correspondiente' },
{ type: 'fix', text: 'Las colecciones en el historial ahora muestran "Estudios Bíblicos" y "Conferencias" en lugar de los identificadores internos' },
{ type: 'fix', text: 'Corrección de etiquetas en inglés para las pestañas del historial' }
]
},
{
version: '0.7',
date: '31 de mayo, 2026 11:50PM',

View File

@ -3,8 +3,8 @@
"nav": {
"home": "Home",
"bible_studies": "Bible Studies",
"bible_studies_ts": "Bible Studies Typesense",
"conferences_ts": "Conferences Typesense",
"bible_studies_ts": "Bible Studies",
"conferences_ts": "Conferences",
"conferences": "Conferences",
"between_the_lines": "Between the Lines",
"my_list": "My List",