supabase client tool

This commit is contained in:
2025-04-01 17:45:12 +08:00
parent c0649ce10f
commit 1978e0224e
3 changed files with 134 additions and 7 deletions

View File

@@ -1,11 +1,12 @@
"use client";
import { useEffect, useState } from 'react';
import { createClientComponentClient } from '@supabase/auth-helpers-nextjs';
import type { Database } from '@/types/supabase';
import { Select } from './Select';
import { getSupabaseClient } from '../../utils/supabase';
import { AuthChangeEvent, Session } from '@supabase/supabase-js';
type Team = Database['public']['Tables']['teams']['Row'];
type Team = Database['limq']['Tables']['teams']['Row'];
interface TeamSelectorProps {
value?: string;
@@ -17,8 +18,6 @@ export function TeamSelector({ value, onChange, className }: TeamSelectorProps)
const [teams, setTeams] = useState<Team[]>([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const supabase = createClientComponentClient<Database>();
useEffect(() => {
let isMounted = true;
@@ -31,6 +30,8 @@ export function TeamSelector({ value, onChange, className }: TeamSelectorProps)
setError(null);
try {
const supabase = getSupabaseClient();
// 获取用户的团队成员关系
console.log('Fetching team memberships for user:', userId);
const { data: memberships, error: membershipError } = await supabase
@@ -84,8 +85,10 @@ export function TeamSelector({ value, onChange, className }: TeamSelectorProps)
}
};
const supabase = getSupabaseClient();
// 设置认证状态监听器
const { data: { subscription } } = supabase.auth.onAuthStateChange((event, session) => {
const { data: { subscription } } = supabase.auth.onAuthStateChange((event: AuthChangeEvent, session: Session | null) => {
console.log('Auth state changed:', event, session?.user);
if (event === 'SIGNED_IN' && session?.user?.id) {
fetchTeams(session.user.id);
@@ -96,7 +99,7 @@ export function TeamSelector({ value, onChange, className }: TeamSelectorProps)
});
// 初始检查session
supabase.auth.getSession().then(({ data: { session } }) => {
supabase.auth.getSession().then(({ data: { session } }: { data: { session: Session | null } }) => {
console.log('Initial session check:', session?.user);
if (session?.user?.id) {
fetchTeams(session.user.id);
@@ -107,7 +110,7 @@ export function TeamSelector({ value, onChange, className }: TeamSelectorProps)
isMounted = false;
subscription.unsubscribe();
};
}, [supabase]);
}, []);
if (loading) {
return <div className="animate-pulse h-10 bg-gray-200 rounded-md dark:bg-gray-700" />;