fix(web): connect project context in media flow
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been cancelled
Deploy / Deploy Staging (push) Has been cancelled
Deploy / Deploy Production (push) Has been cancelled

This commit is contained in:
Xiaoxia AI
2026-06-21 21:48:21 +08:00
parent 1a9d862584
commit 59291b0e8f
7 changed files with 238 additions and 43 deletions
+16 -11
View File
@@ -39,6 +39,13 @@ export interface InviteMemberRequest {
role: 'admin' | 'member' | 'viewer';
}
export interface InviteMemberResponse {
invitation_id: string;
invitee_email: string;
role: 'admin' | 'member' | 'viewer';
expires_at: string;
}
type WorkspaceApiResponse = Omit<Workspace, 'id' | 'workspace_id'> & {
id?: string;
workspace_id?: string;
@@ -60,10 +67,10 @@ const normalizeWorkspace = (workspace: WorkspaceApiResponse): Workspace => {
};
const normalizeMember = (member: WorkspaceMemberApiResponse): WorkspaceMember => {
const memberId = member.id || member.member_id || member.user_id || '';
const memberId = member.member_id || member.id || '';
return {
...member,
id: memberId,
id: member.user_id || memberId,
member_id: memberId,
};
};
@@ -97,7 +104,7 @@ export const getMembers = async (workspaceId: string): Promise<WorkspaceMember[]
export const inviteMember = async (
workspaceId: string,
data: InviteMemberRequest
): Promise<{ message: string }> => {
): Promise<InviteMemberResponse> => {
const response = await apiClient.post(`/workspaces/${workspaceId}/members/invite`, data);
return response.data;
};
@@ -105,23 +112,21 @@ export const inviteMember = async (
export const removeMember = async (
workspaceId: string,
memberId: string
): Promise<{ message: string }> => {
const response = await apiClient.delete(`/workspaces/${workspaceId}/members/${memberId}`);
return response.data;
): Promise<void> => {
await apiClient.delete(`/workspaces/${workspaceId}/members/${memberId}`);
};
export const updateMemberRole = async (
workspaceId: string,
memberId: string,
role: 'admin' | 'member' | 'viewer'
): Promise<{ message: string }> => {
const response = await apiClient.patch(`/workspaces/${workspaceId}/members/${memberId}`, {
): Promise<{ user_id: string; old_role: string; new_role: string }> => {
const response = await apiClient.patch(`/workspaces/${workspaceId}/members/${memberId}/role`, {
role,
});
return response.data;
};
export const leaveWorkspace = async (workspaceId: string): Promise<{ message: string }> => {
const response = await apiClient.post(`/workspaces/${workspaceId}/leave`);
return response.data;
export const leaveWorkspace = async (_workspaceId: string): Promise<{ message: string }> => {
throw new Error('主动退出工作空间暂未开放');
};