fix: bugs
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
import { type ChangeEvent, type MouseEvent as ReactMouseEvent, type RefObject } from "react";
|
||||
import { type ChangeEvent, type MouseEvent as ReactMouseEvent, type RefObject, useEffect, useMemo, useState } from "react";
|
||||
import Icon from "../common/Icon";
|
||||
import { WorkspaceTreeGroup } from "~/features/platform/WorkspaceTree";
|
||||
import type { ScriptItem, WorkspaceDirectory } from "~/services/api";
|
||||
import type { AuthUser } from "~/context/AuthContext";
|
||||
import type { ScriptItem, WorkspaceDirectory, WorkspaceMember } from "~/services/api";
|
||||
import { useApi, useAuth, type AuthUser } from "~/context/AuthContext";
|
||||
|
||||
type ScriptExplorerProps = {
|
||||
scripts: ScriptItem[];
|
||||
@@ -50,7 +50,38 @@ export function ScriptExplorer({
|
||||
uploadInputRef,
|
||||
onHandleUpload,
|
||||
}: ScriptExplorerProps) {
|
||||
const memberScriptGroups = (() => {
|
||||
const api = useApi();
|
||||
const { currentWorkspace } = useAuth();
|
||||
const [members, setMembers] = useState<WorkspaceMember[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!currentWorkspace) {
|
||||
setMembers([]);
|
||||
return;
|
||||
}
|
||||
let cancelled = false;
|
||||
api
|
||||
.listWorkspaceMembers(currentWorkspace.workspace_id)
|
||||
.then((list) => {
|
||||
if (!cancelled) setMembers(list);
|
||||
})
|
||||
.catch(() => {
|
||||
if (!cancelled) setMembers([]);
|
||||
});
|
||||
return () => {
|
||||
cancelled = true;
|
||||
};
|
||||
}, [api, currentWorkspace]);
|
||||
|
||||
const displayNameByUserId = useMemo(() => {
|
||||
const map = new Map<string, string>();
|
||||
for (const m of members) {
|
||||
map.set(m.user_id, m.display_name || m.username || m.user_id);
|
||||
}
|
||||
return map;
|
||||
}, [members]);
|
||||
|
||||
const memberScriptGroups = useMemo(() => {
|
||||
const visibleScripts =
|
||||
user?.is_system_admin === true
|
||||
? filteredScripts
|
||||
@@ -74,13 +105,17 @@ export function ScriptExplorer({
|
||||
directories: WorkspaceDirectory[];
|
||||
}[] = [];
|
||||
for (const [ownerUserId, groupScripts] of byOwner.entries()) {
|
||||
const displayName =
|
||||
displayNameByUserId.get(ownerUserId) ??
|
||||
(ownerUserId === user?.user_id ? user?.display_name : null) ??
|
||||
`${ownerUserId.slice(-6)}…`;
|
||||
const groupUser =
|
||||
ownerUserId === user?.user_id
|
||||
? user
|
||||
: ({
|
||||
user_id: ownerUserId,
|
||||
username: ownerUserId,
|
||||
display_name: ownerUserId,
|
||||
display_name: displayName,
|
||||
email: null,
|
||||
status: "unknown",
|
||||
role_code: null,
|
||||
@@ -100,7 +135,7 @@ export function ScriptExplorer({
|
||||
});
|
||||
|
||||
return groups;
|
||||
})();
|
||||
}, [filteredScripts, user, displayNameByUserId]);
|
||||
|
||||
return (
|
||||
<aside className="explorer">
|
||||
@@ -166,7 +201,7 @@ export function ScriptExplorer({
|
||||
{memberScriptGroups.map((group) => (
|
||||
<WorkspaceTreeGroup
|
||||
key={group.user?.user_id ?? "anon"}
|
||||
title={`${group.user?.display_name}的文件`}
|
||||
title={`${group.user?.display_name}`}
|
||||
scripts={group.scripts}
|
||||
directories={group.directories}
|
||||
selectedId={selectedId}
|
||||
|
||||
Reference in New Issue
Block a user