@@ -5,15 +5,80 @@ import { useProducer, useSelector } from "@rbxts/react-reflex";
5
5
import { Dictionary } from "@rbxts/sift" ;
6
6
import { selectStorybooks } from "Reflex/ModuleRequire/Storybook" ;
7
7
import { useUpdateEffect } from "@rbxts/pretty-react-hooks" ;
8
- import { useEffect } from "@rbxts/roact" ;
8
+ import { useCallback , useEffect , useState } from "@rbxts/react" ;
9
+ import { StorybookLoader } from "./StorybookLoader" ;
9
10
10
11
//Hot-Reloads (requires) all the storybooks
11
12
export function controlStorybooks ( ) {
13
+ const [ storybookLoaders , setStorybookLoaders ] = useState < Map < ModuleScript , StorybookLoader > > ( ) ;
14
+
12
15
const storybookList = useStorybookList ( ) ;
13
- const storybooks = useSelector ( selectStorybooks ) . storybooks ;
14
16
const { setStorybooks } = useProducer < RootProducer > ( ) ;
15
17
16
- const UpdateModule = ( module : ModuleScript , result : unknown ) => {
18
+ //Checking for Storybook Loader Results
19
+ const CollapseStorybookResults = useCallback ( ( ) => {
20
+ const results : Storybooks = new Map ( ) ;
21
+ if ( ! storybookLoaders ) {
22
+ return setStorybooks ( results ) ;
23
+ }
24
+
25
+ storybookLoaders . forEach ( ( loader , module ) => {
26
+ const result = loader . GetCurrentResult ( ) ;
27
+ if ( result === undefined ) return ;
28
+ if ( ! CheckBookReturn ( result ) ) return ;
29
+
30
+ results . set ( module , result ) ;
31
+ } ) ;
32
+
33
+ setStorybooks ( results ) ;
34
+ } , [ storybookLoaders ] ) ;
35
+
36
+ //Creating Storybook Loaders
37
+ useEffect ( ( ) => {
38
+ setStorybookLoaders ( ( oldLoaders ) => {
39
+ const loaders = new Map < ModuleScript , StorybookLoader > ( ) ;
40
+
41
+ storybookList . forEach ( ( module ) => {
42
+ const currentLoader = oldLoaders ? oldLoaders . get ( module ) : undefined ;
43
+ if ( currentLoader ) loaders . set ( module , currentLoader ) ;
44
+
45
+ const newLoader = new StorybookLoader ( module ) ;
46
+ loaders . set ( module , newLoader ) ;
47
+ newLoader . Init ( ) ;
48
+ } ) ;
49
+ if ( oldLoaders ) {
50
+ oldLoaders . forEach ( ( loader , module ) => {
51
+ if ( ! loaders . has ( module ) ) {
52
+ loader . Destroy ( ) ;
53
+ }
54
+ } ) ;
55
+ }
56
+
57
+ return loaders ;
58
+ } ) ;
59
+ } , [ storybookList ] ) ;
60
+
61
+ //Listening for Storybook Loaders
62
+ useEffect ( ( ) => {
63
+ if ( ! storybookLoaders ) return ;
64
+ CollapseStorybookResults ( ) ;
65
+
66
+ const connections : RBXScriptConnection [ ] = [ ] ;
67
+ storybookLoaders . forEach ( ( loader ) => {
68
+ const connection = loader . OnStorybookUpdated . Connect ( ( ) => {
69
+ CollapseStorybookResults ( ) ;
70
+ } ) ;
71
+ connections . push ( connection ) ;
72
+ } ) ;
73
+
74
+ return ( ) => {
75
+ connections . forEach ( ( connection ) => {
76
+ connection . Disconnect ( ) ;
77
+ } ) ;
78
+ } ;
79
+ } , [ storybookLoaders , CollapseStorybookResults ] ) ;
80
+
81
+ /*const UpdateModule = (module: ModuleScript, result: unknown) => {
17
82
const isStorybook = CheckBookReturn(result);
18
83
const newMap = Dictionary.copy(storybooks);
19
84
if (isStorybook) {
@@ -55,5 +120,5 @@ export function controlStorybooks() {
55
120
requirePromises.forEach((promise) => promise.cancel());
56
121
reloaders.forEach((reloader) => reloader.Destroy());
57
122
};
58
- } , [ storybookList ] ) ;
123
+ }, [storybookList]);*/
59
124
}
0 commit comments