refactor(react/dialogs): solve some type errors

This commit is contained in:
Elian Doran 2025-08-06 18:10:02 +03:00
parent 2ad4b26c9e
commit edd18b53d0
No known key found for this signature in database
4 changed files with 36 additions and 15 deletions

View File

@ -1,4 +1,4 @@
import type { FullRevision, RevisionItem } from "@triliumnext/commons";
import type { RevisionPojo, RevisionItem } from "@triliumnext/commons";
import appContext, { EventData } from "../../components/app_context";
import FNote from "../../entities/fnote";
import dialog, { closeActiveDialog, openDialog } from "../../services/dialog";
@ -91,20 +91,20 @@ function RevisionsList({ revisions, onSelect }: { revisions: RevisionItem[], onS
title={t("revisions.revision_last_edited", { date: item.dateLastEdited })}
value={item.revisionId}
>
{item.dateLastEdited.substr(0, 16)} ({utils.formatSize(item.contentLength)})
{item.dateLastEdited && item.dateLastEdited.substr(0, 16)} ({item.contentLength && utils.formatSize(item.contentLength)})
</FormListItem>
)}
</FormList>);
}
function RevisionPreview({ revisionItem }: { revisionItem?: RevisionItem}) {
const [ fullRevision, setFullRevision ] = useState<FullRevision>();
const [ fullRevision, setFullRevision ] = useState<RevisionPojo>();
const [ needsRefresh, setNeedsRefresh ] = useState<boolean>();
useEffect(() => {
setNeedsRefresh(false);
if (revisionItem) {
server.get<FullRevision>(`revisions/${revisionItem.revisionId}`).then(setFullRevision);
server.get<RevisionPojo>(`revisions/${revisionItem.revisionId}`).then(setFullRevision);
} else {
setFullRevision(undefined);
}
@ -143,7 +143,11 @@ function RevisionPreview({ revisionItem }: { revisionItem?: RevisionItem}) {
primary
icon="bx bx-download"
text={t("revisions.download_button")}
onClick={() => open.downloadRevision(revisionItem.noteId, revisionItem.revisionId)} />
onClick={() => {
if (revisionItem.revisionId) {
open.downloadRevision(revisionItem.noteId, revisionItem.revisionId)}
}
}/>
</>
}
</div>)}
@ -167,12 +171,12 @@ const CODE_STYLE: CSSProperties = {
whiteSpace: "pre-wrap"
};
function RevisionContent({ revisionItem, fullRevision }: { revisionItem?: RevisionItem, fullRevision?: FullRevision }) {
if (!revisionItem || !fullRevision) {
function RevisionContent({ revisionItem, fullRevision }: { revisionItem?: RevisionItem, fullRevision?: RevisionPojo }) {
const content = fullRevision?.content;
if (!revisionItem || !content) {
return <></>;
}
const content = fullRevision.content;
switch (revisionItem.type) {
case "text": {
@ -182,7 +186,7 @@ function RevisionContent({ revisionItem, fullRevision }: { revisionItem?: Revisi
renderMathInElement(contentRef.current, { trust: true });
}
});
return <div ref={contentRef} className="ck-content" dangerouslySetInnerHTML={{ __html: content }}></div>
return <div ref={contentRef} className="ck-content" dangerouslySetInnerHTML={{ __html: content as string }}></div>
}
case "code":
return <pre style={CODE_STYLE}>{content}</pre>;
@ -190,7 +194,7 @@ function RevisionContent({ revisionItem, fullRevision }: { revisionItem?: Revisi
switch (revisionItem.mime) {
case "image/svg+xml": {
//Base64 of other format images may be embedded in svg
const encodedSVG = encodeURIComponent(content);
const encodedSVG = encodeURIComponent(content as string);
return <img
src={`data:${fullRevision.mime};utf8,${encodedSVG}`}
style={IMAGE_STYLE} />;
@ -211,7 +215,7 @@ function RevisionContent({ revisionItem, fullRevision }: { revisionItem?: Revisi
</tr>
<tr>
<th>{t("revisions.file_size")}</th>
<td>{utils.formatSize(revisionItem.contentLength)}</td>
<td>{revisionItem.contentLength && utils.formatSize(revisionItem.contentLength)}</td>
</tr>
{fullRevision.content &&
<tr>

View File

@ -7,7 +7,7 @@ import becca from "../becca.js";
import AbstractBeccaEntity from "./abstract_becca_entity.js";
import sql from "../../services/sql.js";
import BAttachment from "./battachment.js";
import type { AttachmentRow, NoteType, RevisionRow } from "@triliumnext/commons";
import type { AttachmentRow, NoteType, RevisionPojo, RevisionRow } from "@triliumnext/commons";
import eraseService from "../../services/erase.js";
interface ContentOpts {
@ -201,7 +201,7 @@ class BRevision extends AbstractBeccaEntity<BRevision> {
utcDateModified: this.utcDateModified,
content: this.content, // used when retrieving full note revision to frontend
contentLength: this.contentLength
};
} satisfies RevisionPojo;
}
override getPojoToSave() {

View File

@ -12,7 +12,7 @@ import type { Request, Response } from "express";
import type BRevision from "../../becca/entities/brevision.js";
import type BNote from "../../becca/entities/bnote.js";
import type { NotePojo } from "../../becca/becca-interface.js";
import { RevisionItem, RevisionRow } from "@triliumnext/commons";
import { RevisionItem, RevisionPojo, RevisionRow } from "@triliumnext/commons";
interface NotePath {
noteId: string;
@ -60,7 +60,7 @@ function getRevision(req: Request) {
}
}
return revision satisfies RevisionRow;
return revision satisfies RevisionPojo;
}
function getRevisionFilename(revision: BRevision) {

View File

@ -28,3 +28,20 @@ export interface RevisionItem {
isProtected?: boolean;
mime: string;
}
export interface RevisionPojo {
revisionId?: string;
noteId: string;
type: NoteType;
mime: string;
isProtected?: boolean;
title: string;
blobId?: string;
dateLastEdited?: string;
dateCreated?: string;
utcDateLastEdited?: string;
utcDateCreated?: string;
utcDateModified?: string;
content?: string | Buffer<ArrayBufferLike>;
contentLength?: number;
}