update: data source
This commit is contained in:
@@ -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}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
|
||||
Reference in New Issue
Block a user