feat(client/import_preview): count attachments

This commit is contained in:
Elian Doran
2026-02-07 23:30:34 +02:00
parent 537b468714
commit f53c64f76d
5 changed files with 30 additions and 2 deletions

View File

@@ -2295,6 +2295,8 @@
"notes_count_other": "{{count}} notes",
"attributes_count_one": "{{count}} attribute",
"attributes_count_other": "{{count}} attributes",
"attachments_count_one": "{{count}} attachment",
"attachments_count_other": "{{count}} attachments",
"cancel": "Cancel",
"import": "Import",
"import_with_timeout": "Import ({{timeout}})",

View File

@@ -156,6 +156,7 @@ function SinglePreview({ preview }: { preview: ImportPreviewResponse }) {
<div className="stats">
<span>{t("import_preview.notes_count", { count: preview.numNotes })}</span>
<span>{t("import_preview.attributes_count", { count: preview.numAttributes })}</span>
<span>{t("import_preview.attachments_count", { count: preview.numAttachments })}</span>
</div>
<div className="dangerous-categories">

View File

@@ -33,11 +33,28 @@ describe("Preview meta", () => {
type: "label",
name: "customRequestHandler",
value: ""
},
{
type: "label",
name: "safe",
value: ""
}
],
attachments: [
{
attachmentId: "YRAEUXCDKNtn",
title: "icon-color.svg",
role: "image",
mime: "image/svg+xml",
position: 10,
dataFileName: "Trilium Demo_icon-color.svg"
}
]
});
const result = previewMeta(meta);
expect(result.numNotes).toBe(3);
expect(result.numAttributes).toBe(4);
expect(result.numAttachments).toBe(1);
expect(result.isDangerous).toBe(true);
expect(result.dangerousAttributes).toContain("widget");
expect(result.dangerousAttributes).toContain("customRequestHandler");

View File

@@ -33,6 +33,7 @@ interface PreviewContext {
dangerousAttributeCategories: Set<DangerousAttributeCategory>;
numNotes: number;
numAttributes: number;
numAttachments: number;
}
export function previewMeta(meta: NoteMetaFile): Omit<ImportPreviewResponse, "id" | "fileName"> {
@@ -40,7 +41,8 @@ export function previewMeta(meta: NoteMetaFile): Omit<ImportPreviewResponse, "id
dangerousAttributes: new Set<string>(),
dangerousAttributeCategories: new Set<DangerousAttributeCategory>(),
numNotes: 0,
numAttributes: 0
numAttributes: 0,
numAttachments: 0
};
previewMetaInternal(meta.files, context);
@@ -49,7 +51,8 @@ export function previewMeta(meta: NoteMetaFile): Omit<ImportPreviewResponse, "id
dangerousAttributes: Array.from(context.dangerousAttributes),
dangerousAttributeCategories: Array.from(context.dangerousAttributeCategories),
numNotes: context.numNotes,
numAttributes: context.numAttributes
numAttributes: context.numAttributes,
numAttachments: context.numAttachments
};
}
@@ -72,6 +75,10 @@ function previewMetaInternal(metaFiles: NoteMeta[], context: PreviewContext) {
}
}
if (metaFile.attachments) {
context.numAttachments += metaFile.attachments.length;
}
if (metaFile.children) {
previewMetaInternal(metaFile.children, context);
}

View File

@@ -306,6 +306,7 @@ export interface ImportPreviewResponse {
fileName: string;
numNotes: number;
numAttributes: number;
numAttachments: number;
isDangerous: boolean;
dangerousAttributeCategories: string[];
dangerousAttributes: string[];