Show TITL together with FILE objects for internet links (#255)

This commit is contained in:
Frank Buchholz
2026-02-18 17:23:33 +01:00
committed by GitHub
parent 4e5cbd8e0a
commit ac3369f3a2
2 changed files with 23 additions and 14 deletions

View File

@@ -3,6 +3,7 @@ import {List} from 'semantic-ui-react';
export interface FileEntry { export interface FileEntry {
url: string; url: string;
filename?: string; filename?: string;
titl?: string;
} }
interface Props { interface Props {
@@ -18,9 +19,14 @@ export function AdditionalFiles({files}: Props) {
<List.Item key={index}> <List.Item key={index}>
<List.Icon verticalAlign="middle" name="circle" size="tiny" /> <List.Icon verticalAlign="middle" name="circle" size="tiny" />
<List.Content> <List.Content>
<a target="_blank" href={file.url} rel="noopener noreferrer"> <List.Header>
{file.filename || file.url.split('/').pop() || file.url} <a target="_blank" href={file.url} rel="noopener noreferrer">
</a> {file.filename || file.url.split('/').pop() || file.url}
</a>
</List.Header>
<List.Description>
{file.titl && <div>{file.titl}</div>}
</List.Description>
</List.Content> </List.Content>
</List.Item> </List.Item>
))} ))}

View File

@@ -11,7 +11,7 @@ import {
getNonImageFileEntry, getNonImageFileEntry,
mapToSource, mapToSource,
} from '../../util/gedcom_util'; } from '../../util/gedcom_util';
import {AdditionalFiles} from './additional-files'; import {FileEntry, AdditionalFiles} from './additional-files';
import {ALL_SUPPORTED_EVENT_TYPES, Events} from './events'; import {ALL_SUPPORTED_EVENT_TYPES, Events} from './events';
import {MultilineText} from './multiline-text'; import {MultilineText} from './multiline-text';
import {Sources} from './sources'; import {Sources} from './sources';
@@ -139,16 +139,19 @@ function sourceDetails(
} }
function fileDetails(objectEntries: GedcomEntry[], gedcom: GedcomData) { function fileDetails(objectEntries: GedcomEntry[], gedcom: GedcomData) {
const files = objectEntries const files: FileEntry[] = [];
.map((objectEntry) => objectEntries
dereference(objectEntry, gedcom, (gedcom) => gedcom.other), .map((objectEntry) => dereference(objectEntry, gedcom, (gedcom) => gedcom.other))
) .forEach((objectEntry) => {
.map((objectEntry) => getNonImageFileEntry(objectEntry)) const fileEntry = getNonImageFileEntry(objectEntry);
.filter((objectEntry): objectEntry is GedcomEntry => !!objectEntry) if (!!fileEntry) {
.map((fileEntry) => ({ files.push({
url: fileEntry.data, url: fileEntry.data,
filename: getFileName(fileEntry), filename: getFileName(fileEntry),
})); titl: objectEntry.tree.find((entry) => entry.tag === 'TITL')?.data,
})
}
});
if (!files.length) { if (!files.length) {
return null; return null;