mirror of
https://github.com/arcan1s/ahriman.git
synced 2026-04-07 02:53:38 +00:00
61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import React, { useEffect, useRef } from "react";
|
|
import { Box } from "@mui/material";
|
|
import { useQuery } from "@tanstack/react-query";
|
|
import hljs from "highlight.js/lib/core";
|
|
import diff from "highlight.js/lib/languages/diff";
|
|
import "highlight.js/styles/github.css";
|
|
import { Client } from "api/client/AhrimanClient";
|
|
import { QueryKeys } from "api/QueryKeys";
|
|
import CopyButton from "components/common/CopyButton";
|
|
import type { Changes } from "api/types/Changes";
|
|
import type { RepositoryId } from "api/types/RepositoryId";
|
|
|
|
hljs.registerLanguage("diff", diff);
|
|
|
|
interface ChangesTabProps {
|
|
packageBase: string;
|
|
repo: RepositoryId;
|
|
}
|
|
|
|
export default function ChangesTab({ packageBase, repo }: ChangesTabProps): React.JSX.Element {
|
|
const codeRef = useRef<HTMLElement>(null);
|
|
|
|
const { data } = useQuery<Changes>({
|
|
queryKey: QueryKeys.changes(packageBase, repo),
|
|
queryFn: () => Client.fetchChanges(packageBase, repo),
|
|
enabled: !!packageBase,
|
|
});
|
|
|
|
const changesText = data?.changes ?? "";
|
|
|
|
useEffect(() => {
|
|
if (codeRef.current) {
|
|
codeRef.current.textContent = changesText;
|
|
delete codeRef.current.dataset.highlighted;
|
|
hljs.highlightElement(codeRef.current);
|
|
}
|
|
}, [changesText]);
|
|
|
|
return (
|
|
<Box sx={{ position: "relative", mt: 1 }}>
|
|
<Box
|
|
component="pre"
|
|
sx={{
|
|
backgroundColor: "#f6f8fa",
|
|
p: 2,
|
|
borderRadius: 1,
|
|
overflow: "auto",
|
|
maxHeight: 400,
|
|
fontSize: "0.8rem",
|
|
fontFamily: "monospace",
|
|
}}
|
|
>
|
|
<code ref={codeRef} className="language-diff" />
|
|
</Box>
|
|
<Box sx={{ position: "absolute", top: 8, right: 8 }}>
|
|
<CopyButton getText={() => changesText} />
|
|
</Box>
|
|
</Box>
|
|
);
|
|
}
|