update: data source

This commit is contained in:
tao.chen
2026-08-14 11:59:06 +08:00
parent 225a585499
commit 480e1cc638
15 changed files with 432 additions and 559 deletions
@@ -4,11 +4,13 @@ import { WorkspaceTreeGroup } from "~/features/platform/WorkspaceTree";
import { useScriptWorkspaceStore } from "~/features/platform/state/scriptWorkspaceStore";
import type { ScriptItem, WorkspaceDirectory } from "~/services/api";
import { type AuthUser } from "~/context/AuthContext";
import type { ResourceItem } from "~/services/api";
type ScriptExplorerProps = {
scripts: ScriptItem[];
filteredScripts: ScriptItem[];
directories: WorkspaceDirectory[];
dataResources: ResourceItem[];
user: AuthUser | null;
selectedId: string | null;
loading: boolean;
@@ -26,6 +28,7 @@ type ScriptExplorerProps = {
target: { kind: "root" | "directory" | "file"; path: string; script?: ScriptItem }
) => void;
onSelect: (scriptId: string) => void;
onCopyResourcePath: (jupyterPath: string) => void;
uploadInputRef: RefObject<HTMLInputElement | null>;
onHandleUpload: (event: ChangeEvent<HTMLInputElement>) => void;
};
@@ -34,6 +37,7 @@ export function ScriptExplorer({
scripts,
filteredScripts,
directories,
dataResources,
user,
selectedId,
loading,
@@ -48,6 +52,7 @@ export function ScriptExplorer({
onChooseUpload,
onContextMenu,
onSelect,
onCopyResourcePath,
uploadInputRef,
onHandleUpload,
}: ScriptExplorerProps) {
@@ -57,6 +62,16 @@ export function ScriptExplorer({
);
const onToggle = useScriptWorkspaceStore((s) => s.toggleExpanded);
const dataByOwner = useMemo(() => {
const map = new Map<string, ResourceItem[]>();
for (const r of dataResources) {
const list = map.get(r.owner_user_id) ?? [];
list.push(r);
map.set(r.owner_user_id, list);
}
return map;
}, [dataResources]);
const memberScriptGroups = useMemo(() => {
const visibleScripts =
user?.is_system_admin === true
@@ -83,6 +98,7 @@ export function ScriptExplorer({
user: AuthUser | null;
scripts: ScriptItem[];
directories: WorkspaceDirectory[];
dataResources: ResourceItem[];
}[] = [];
for (const [ownerUserId, groupScripts] of byOwner.entries()) {
const displayName =
@@ -109,6 +125,7 @@ export function ScriptExplorer({
ownerUserId === user?.user_id
? mergeDirectories(directories, inferred)
: inferred,
dataResources: dataByOwner.get(groupUser.user_id) ?? [],
});
}
@@ -119,7 +136,7 @@ export function ScriptExplorer({
});
return groups;
}, [filteredScripts, directories, user]);
}, [filteredScripts, directories, user, dataByOwner]);
return (
<aside className="explorer">
@@ -142,7 +159,7 @@ export function ScriptExplorer({
ref={uploadInputRef}
className="visually-hidden"
type="file"
accept=".py,.ipynb"
accept=".py,.ipynb,.csv,.xlsx,.xls,.tsv,.json,.parquet,.txt"
multiple
onChange={onHandleUpload}
/>
@@ -191,6 +208,7 @@ export function ScriptExplorer({
title={`${group.user?.display_name}`}
scripts={group.scripts}
directories={group.directories}
dataResources={group.dataResources}
selectedId={selectedId}
onSelect={onSelect}
onContextMenu={
@@ -202,6 +220,7 @@ export function ScriptExplorer({
expandedPaths={expandedPaths}
onToggle={onToggle}
loadingChildrenPaths={loadingChildrenPaths}
onCopyResourcePath={onCopyResourcePath}
/>
);
})}