Download client/src/hooks/useSupabaseData.ts from zuocong12/README: direct link, hf CLI and curl.
- Browser
- Download file 2.2 kB
-
https://huggingface.co/spaces/zuocong12/README/resolve/main/client/src/hooks/useSupabaseData.ts
- Command line
-
hf download hf://spaces/zuocong12/README/client/src/hooks/useSupabaseData.ts
-
curl -L -o useSupabaseData.ts https://huggingface.co/spaces/zuocong12/README/resolve/main/client/src/hooks/useSupabaseData.ts
2.2 kB
| import { useState, useEffect } from 'react'; | |
| import { supabase } from '@/lib/supabaseClient'; | |
| import type { Project } from '@/types/project'; | |
| export function useSupabaseData() { | |
| const [projects, setProjects] = useState<Project[]>([]); | |
| const [loading, setLoading] = useState(true); | |
| const [error, setError] = useState<string | null>(null); | |
| // 加载项目数据 | |
| const loadProjects = async () => { | |
| try { | |
| setLoading(true); | |
| setError(null); | |
| const { data, error: fetchError } = await supabase | |
| .from('projects') | |
| .select('*') | |
| .order('created_at', { ascending: false }); | |
| if (fetchError) { | |
| throw fetchError; | |
| } | |
| setProjects(data || []); | |
| } catch (err) { | |
| console.error('加载项目数据失败:', err); | |
| setError(err instanceof Error ? err.message : '加载失败'); | |
| setProjects([]); | |
| } finally { | |
| setLoading(false); | |
| } | |
| }; | |
| // 批量替换项目数据(Excel上传) | |
| const replaceAllProjects = async (newProjects: Partial<Project>[]) => { | |
| try { | |
| setLoading(true); | |
| setError(null); | |
| // 1. 删除所有现有数据 | |
| const { error: deleteError } = await supabase | |
| .from('projects') | |
| .delete() | |
| .neq('id', 0); // 删除所有记录 | |
| if (deleteError) { | |
| throw deleteError; | |
| } | |
| // 2. 插入新数据 | |
| if (newProjects.length > 0) { | |
| const { error: insertError } = await supabase | |
| .from('projects') | |
| .insert(newProjects); | |
| if (insertError) { | |
| throw insertError; | |
| } | |
| } | |
| // 3. 重新加载数据 | |
| await loadProjects(); | |
| return { success: true }; | |
| } catch (err) { | |
| console.error('替换项目数据失败:', err); | |
| setError(err instanceof Error ? err.message : '替换失败'); | |
| return { success: false, error: err }; | |
| } finally { | |
| setLoading(false); | |
| } | |
| }; | |
| // 初始加载 | |
| useEffect(() => { | |
| loadProjects(); | |
| }, []); | |
| return { | |
| projects, | |
| loading, | |
| error, | |
| refresh: loadProjects, | |
| replaceAllProjects, | |
| }; | |
| } |