feat:脚本文件预览
This commit is contained in:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user