1
+ "use client" ;
2
+
3
+ import React , { useEffect , useState } from "react" ;
4
+ import { PostCardSingleWithGenerator } from "@/content/Posts/PostWithGen" ;
5
+ import { useSession , useSupabaseClient } from "@supabase/auth-helpers-react" ;
6
+
7
+ interface Classification {
8
+ id : number ;
9
+ created_at : string ;
10
+ content : string | null ;
11
+ author : string | null ;
12
+ anomaly : number | null ;
13
+ media : any | null ;
14
+ classificationtype : string | null ;
15
+ classificationConfiguration : any | null ;
16
+ } ;
17
+
18
+ export default function CloudClassificationGenerator ( ) {
19
+ const supabase = useSupabaseClient ( ) ;
20
+ const session = useSession ( ) ;
21
+
22
+ const [ classifications , setClassifications ] = useState < any [ ] > ( [ ] ) ;
23
+ const [ loading , setLoading ] = useState < boolean > ( true ) ;
24
+ const [ error , setError ] = useState < string | null > ( null ) ;
25
+
26
+ const fetchClassifications = async ( ) => {
27
+ if ( ! session ?. user ) {
28
+ setError ( "User session not found." ) ;
29
+ setLoading ( false ) ;
30
+ return ;
31
+ } ;
32
+
33
+ setLoading ( true ) ;
34
+ setError ( null ) ;
35
+ try {
36
+ const { data, error } = await supabase
37
+ . from ( 'classifications' )
38
+ . select ( '*' )
39
+ . eq ( "author" , session . user . id )
40
+ . eq ( 'classificationtype' , 'cloud' )
41
+ . order ( 'created_at' , { ascending : false } ) as { data : Classification [ ] ; error : any } ;
42
+
43
+ if ( error ) throw error ;
44
+
45
+ const processedData = data . map ( ( classification ) => {
46
+ const media = classification . media ;
47
+ let images : string [ ] = [ ] ;
48
+
49
+ if ( Array . isArray ( media ) && media . length === 2 && typeof media [ 1 ] === "string" ) {
50
+ images . push ( media [ 1 ] ) ;
51
+ } else if ( media && media . uploadUrl ) {
52
+ images . push ( media . uploadUrl ) ;
53
+ }
54
+
55
+ const votes = classification . classificationConfiguration ?. votes || 0 ;
56
+
57
+ return { ...classification , images, votes } ;
58
+ } ) ;
59
+
60
+ setClassifications ( processedData ) ;
61
+ } catch ( error ) {
62
+ console . error ( "Error fetching classifications:" , error ) ;
63
+ setError ( "Failed to load classifications." ) ;
64
+ } finally {
65
+ setLoading ( false ) ;
66
+ } ;
67
+ } ;
68
+
69
+ useEffect ( ( ) => {
70
+ fetchClassifications ( ) ;
71
+ } , [ session ] ) ;
72
+
73
+ return (
74
+ < div className = "space-y-8" >
75
+ { loading ? (
76
+ < p > Loading classifications</ p >
77
+ ) : error ? (
78
+ < p > { error } </ p >
79
+ ) : (
80
+ classifications . map ( ( classification ) => (
81
+ < PostCardSingleWithGenerator
82
+ key = { classification . id }
83
+ classificationId = { classification . id }
84
+ title = { classification . title }
85
+ author = { classification . author }
86
+ content = { classification . content }
87
+ votes = { classification . votes || 0 }
88
+ category = { classification . category }
89
+ tags = { classification . tags || [ ] }
90
+ images = { classification . images || [ ] }
91
+ anomalyId = { classification . anomaly }
92
+ classificationConfig = { classification . classificationConfiguration }
93
+ classificationType = { classification . classificationtype }
94
+ />
95
+ ) )
96
+ ) }
97
+ </ div >
98
+ ) ;
99
+ } ;
0 commit comments