events pages
This commit is contained in:
@@ -18,6 +18,14 @@ interface Project {
|
||||
deleted_at?: string | null;
|
||||
schema_version?: number | null;
|
||||
creator_id?: string | null;
|
||||
team_name?: string;
|
||||
}
|
||||
|
||||
// 添加需要的类型定义
|
||||
interface ProjectWithTeam {
|
||||
project_id: string;
|
||||
projects: Project;
|
||||
teams?: { name: string };
|
||||
}
|
||||
|
||||
// ProjectSelector component with multi-select support
|
||||
@@ -85,14 +93,14 @@ export function ProjectSelector({
|
||||
let projectsQuery;
|
||||
|
||||
if (teamId) {
|
||||
// If a teamId is provided, fetch projects for that team
|
||||
// 如果提供了teamId,获取该团队的项目
|
||||
projectsQuery = supabase
|
||||
.from('team_projects')
|
||||
.select('project_id, projects:project_id(*)')
|
||||
.select('project_id, projects:project_id(*), teams:team_id(name)')
|
||||
.eq('team_id', teamId)
|
||||
.is('projects.deleted_at', null);
|
||||
} else {
|
||||
// Otherwise, fetch projects the user is a member of
|
||||
// 否则,获取用户所属的所有项目及其所属团队
|
||||
projectsQuery = supabase
|
||||
.from('user_projects')
|
||||
.select('project_id, projects:project_id(*)')
|
||||
@@ -109,17 +117,59 @@ export function ProjectSelector({
|
||||
return;
|
||||
}
|
||||
|
||||
// Extract the project data from the query results
|
||||
if (isMounted && projectsData && projectsData.length > 0) {
|
||||
const projectList: Project[] = [];
|
||||
// 如果没有提供teamId,需要单独获取每个项目对应的团队信息
|
||||
if (!teamId && projectsData.length > 0) {
|
||||
const projectIds = projectsData.map(item => item.project_id);
|
||||
|
||||
for (const item of projectsData) {
|
||||
if (item.projects && typeof item.projects === 'object' && 'id' in item.projects && 'name' in item.projects) {
|
||||
projectList.push(item.projects as Project);
|
||||
}
|
||||
// 获取项目所属的团队信息
|
||||
const { data: teamProjectsData, error: teamProjectsError } = await supabase
|
||||
.from('team_projects')
|
||||
.select('project_id, teams:team_id(name)')
|
||||
.in('project_id', projectIds);
|
||||
|
||||
if (teamProjectsError) throw teamProjectsError;
|
||||
|
||||
// 创建项目ID到团队名称的映射
|
||||
const projectTeamMap: Record<string, string> = {};
|
||||
if (teamProjectsData) {
|
||||
teamProjectsData.forEach(item => {
|
||||
if (item.teams && typeof item.teams === 'object' && 'name' in item.teams) {
|
||||
projectTeamMap[item.project_id] = (item.teams as { name: string }).name;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setProjects(projectList);
|
||||
// 提取项目数据,并添加团队名称
|
||||
if (isMounted && projectsData) {
|
||||
const projectList: Project[] = [];
|
||||
|
||||
for (const item of projectsData) {
|
||||
if (item.projects && typeof item.projects === 'object' && 'id' in item.projects && 'name' in item.projects) {
|
||||
const project = item.projects as Project;
|
||||
project.team_name = projectTeamMap[project.id];
|
||||
projectList.push(project);
|
||||
}
|
||||
}
|
||||
|
||||
setProjects(projectList);
|
||||
}
|
||||
} else {
|
||||
// 如果提供了teamId,直接从查询结果中提取项目和团队信息
|
||||
if (isMounted && projectsData) {
|
||||
const projectList: Project[] = [];
|
||||
|
||||
for (const item of projectsData as ProjectWithTeam[]) {
|
||||
if (item.projects && typeof item.projects === 'object' && 'id' in item.projects && 'name' in item.projects) {
|
||||
const project = item.projects as Project;
|
||||
if (item.teams && 'name' in item.teams) {
|
||||
project.team_name = item.teams.name;
|
||||
}
|
||||
projectList.push(project);
|
||||
}
|
||||
}
|
||||
|
||||
setProjects(projectList);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
if (isMounted) {
|
||||
@@ -274,6 +324,11 @@ export function ProjectSelector({
|
||||
>
|
||||
<span className="flex flex-col">
|
||||
<span className="font-medium">{project.name}</span>
|
||||
{project.team_name && (
|
||||
<span className="text-xs text-gray-500">
|
||||
{project.team_name}
|
||||
</span>
|
||||
)}
|
||||
{project.description && (
|
||||
<span className="text-xs text-gray-500 truncate max-w-[250px]">
|
||||
{project.description}
|
||||
|
||||
Reference in New Issue
Block a user