1
1
import type { NodeId } from "@giselle-sdk/data-type" ;
2
- import { useCallback , useMemo } from "react" ;
2
+ import { useCallback , useEffect , useMemo } from "react" ;
3
3
import useSWR from "swr" ;
4
4
import { useShallow } from "zustand/shallow" ;
5
5
import type {
@@ -30,12 +30,13 @@ export function useNodeGenerations({
30
30
startGenerationRunner,
31
31
createAndStartGenerationRunner,
32
32
stopGenerationRunner : stopGenerationSystem ,
33
+ addGenerationRunner,
33
34
} = useGenerationRunnerSystem ( ) ;
34
35
const client = useGiselleEngine ( ) ;
35
36
const { experimental_storage } = useFeatureFlag ( ) ;
36
37
37
38
/** @todo fetch on server */
38
- const { data } = useSWR (
39
+ const { data, isLoading } = useSWR (
39
40
{
40
41
api : "node-generations" ,
41
42
origin,
@@ -49,35 +50,34 @@ export function useNodeGenerations({
49
50
revalidateOnReconnect : false ,
50
51
} ,
51
52
) ;
53
+
54
+ useEffect ( ( ) => {
55
+ if ( isLoading || data === undefined ) {
56
+ return ;
57
+ }
58
+ console . log ( data ) ;
59
+ addGenerationRunner ( data ) ;
60
+ } , [ isLoading , data , addGenerationRunner ] ) ;
61
+
52
62
const currentGeneration = useMemo < Generation > ( ( ) => {
53
- const fetchGenerations = data ?? [ ] ;
54
- const createdGenerations = generations . filter (
55
- ( generation ) =>
56
- generation . context . operationNode . id === nodeId &&
57
- generation . context . origin . type === origin . type &&
58
- ( origin . type === "studio"
59
- ? generation . context . origin . type === "studio" &&
60
- generation . context . origin . workspaceId === origin . workspaceId
61
- : generation . context . origin . type !== "studio" &&
62
- generation . context . origin . actId === origin . actId ) ,
63
- ) ;
64
- // Deduplicate generations by filtering out fetched generations from created ones
65
- const deduplicatedCreatedGenerations = createdGenerations . filter (
66
- ( created ) =>
67
- ! fetchGenerations . some ( ( fetched ) => fetched . id === created . id ) ,
68
- ) ;
69
- // Filter out cancelled generations from both sources after deduplication
70
- const allGenerations = [
71
- ...fetchGenerations ,
72
- ...deduplicatedCreatedGenerations ,
73
- ]
74
- . filter ( ( generation ) => generation . status !== "cancelled" )
63
+ const filteredGenerations = generations
64
+ . filter (
65
+ ( generation ) =>
66
+ generation . status !== "cancelled" &&
67
+ generation . context . operationNode . id === nodeId &&
68
+ generation . context . origin . type === origin . type &&
69
+ ( origin . type === "studio"
70
+ ? generation . context . origin . type === "studio" &&
71
+ generation . context . origin . workspaceId === origin . workspaceId
72
+ : generation . context . origin . type !== "studio" &&
73
+ generation . context . origin . actId === origin . actId ) ,
74
+ )
75
75
. sort (
76
76
( a , b ) =>
77
77
new Date ( b . createdAt ) . getTime ( ) - new Date ( a . createdAt ) . getTime ( ) ,
78
78
) ;
79
- return allGenerations [ 0 ] ;
80
- } , [ generations , data , nodeId , origin ] ) ;
79
+ return filteredGenerations [ 0 ] ;
80
+ } , [ generations , nodeId , origin ] ) ;
81
81
82
82
const isGenerating = useMemo (
83
83
( ) =>
0 commit comments