feat:脚本文件预览

This commit is contained in:
xiaozhu
2026-09-02 10:10:41 +08:00
committed by tao.chen
parent 19585522ff
commit 0aca4934f7
12 changed files with 1138 additions and 65 deletions
+30 -1
View File
@@ -1,9 +1,15 @@
import { type FormEvent, useEffect, useMemo, useRef } from "react";
import { type FormEvent, useEffect, useMemo, useRef, useState } from "react";
import { useAuth } from "../../context/AuthContext";
import type { ScriptItem } from "../../services/api";
import { CreateFolderModal } from "./CreateFolderModal";
import { CreateScriptModal } from "./CreateScriptModal";
import { DataResourcePreviewDialog } from "./DataResourcePreviewDialog";
import { DataResourceUploadModal } from "./DataResourceUploadModal";
import {
previewKindFromFileName,
type DataResourcePreviewTarget,
} from "./dataResourcePreview";
import { WelcomePanel } from "./WelcomePanel";
import { PublishModal } from "./PublishModal";
import { ScriptExplorer } from "./ScriptExplorer";
@@ -19,6 +25,8 @@ import { copyToClipboard } from "../../lib/clipboard";
export default function ScriptsPage() {
const { currentWorkspace, user } = useAuth();
const uploadInputRef = useRef<HTMLInputElement | null>(null);
const [resourcePreview, setResourcePreview] =
useState<DataResourcePreviewTarget | null>(null);
// store state
const scripts = useScriptWorkspaceStore((s) => s.scripts);
@@ -276,6 +284,20 @@ export default function ScriptsPage() {
}
};
const openResourcePreview = (script: ScriptItem): void => {
const kind = previewKindFromFileName(script.script_name);
if (!kind) return;
const resourceId = script.script_id.replace(/^data:/, "");
const resource = dataResources.find((item) => item.resource_id === resourceId);
setResourcePreview({
resourceId,
resourceName: resource?.resource_name ?? script.script_name,
fileExtension: resource?.file.file_extension ?? null,
sizeBytes: resource?.file.size_bytes ?? script.size_bytes,
kind,
});
};
const handleCreateSubmit = (event: FormEvent) => {
event.preventDefault();
void createScript(createDialog.form);
@@ -319,6 +341,7 @@ export default function ScriptsPage() {
onContextMenu={showContextMenu}
onSelect={openTab}
onCopyResourcePath={(p) => void handleCopyResourcePath(p)}
onPreviewResource={openResourcePreview}
uploadInputRef={uploadInputRef}
onHandleUpload={handleUpload}
/>
@@ -416,10 +439,16 @@ export default function ScriptsPage() {
onChooseUpload={(parentPath) => triggerUpload(parentPath ?? "")}
onRemoveDirectory={(p) => void deleteDirectory(p)}
onCopyResourcePath={(p) => void handleCopyResourcePath(p)}
onPreviewResource={openResourcePreview}
onRemoveResource={(id) => void deleteDataResource(id)}
onClose={closeContextMenu}
/>
<DataResourcePreviewDialog
target={resourcePreview}
onClose={() => setResourcePreview(null)}
/>
<PublishModal
publishTarget={publish.target}
releaseNote={publish.releaseNote}