1
- import React , {
2
- createContext ,
3
- useContext ,
4
- useEffect ,
5
- useState ,
6
- useCallback ,
7
- ReactNode ,
8
- } from "react" ;
9
- import { message } from "antd" ;
10
- import {
11
- getEnvironmentById ,
12
- getEnvironments ,
13
- updateEnvironment ,
14
- } from "../services/environments.service" ;
15
- import { Environment } from "../types/environment.types" ;
16
-
17
- interface EnvironmentContextState {
18
- // Environment data
19
- environment : Environment | null ;
20
- environments : Environment [ ] ;
21
-
22
- // Loading states
23
- isLoadingEnvironment : boolean ;
24
- isLoadingEnvironments : boolean ;
25
-
26
- // Error state
27
- error : string | null ;
28
-
29
- // Functions
30
- refreshEnvironment : ( envId ?: string ) => Promise < void > ;
31
- refreshEnvironments : ( ) => Promise < void > ;
32
- updateEnvironmentData : ( envId : string , data : Partial < Environment > ) => Promise < Environment > ;
33
- }
34
-
35
- const EnvironmentContext = createContext < EnvironmentContextState | undefined > ( undefined ) ;
36
-
37
- export const useEnvironmentContext = ( ) => {
38
- const context = useContext ( EnvironmentContext ) ;
39
- if ( ! context ) {
40
- throw new Error (
41
- "useEnvironmentContext must be used within an EnvironmentProvider"
42
- ) ;
43
- }
44
- return context ;
45
- } ;
46
-
47
- interface ProviderProps {
48
- children : ReactNode ;
49
- }
50
-
51
- export const EnvironmentProvider : React . FC < ProviderProps > = ( {
52
- children,
53
- } ) => {
54
- // State for environment data
55
- const [ environment , setEnvironment ] = useState < Environment | null > ( null ) ;
56
- const [ environments , setEnvironments ] = useState < Environment [ ] > ( [ ] ) ;
57
-
58
- // Loading states
59
- const [ isLoadingEnvironment , setIsLoadingEnvironment ] = useState < boolean > ( false ) ;
60
- const [ isLoadingEnvironments , setIsLoadingEnvironments ] = useState < boolean > ( true ) ;
61
-
62
- // Error state
63
- const [ error , setError ] = useState < string | null > ( null ) ;
64
-
65
- // Function to fetch a specific environment by ID
66
- const fetchEnvironment = useCallback ( async ( environmentId ?: string ) => {
67
- // Only fetch if we have an environment ID
68
- if ( ! environmentId ) {
69
- setEnvironment ( null ) ;
70
- return ;
71
- }
72
-
73
- setIsLoadingEnvironment ( true ) ;
74
- setError ( null ) ;
75
-
76
- try {
77
- const data = await getEnvironmentById ( environmentId ) ;
78
- console . log ( "Environment data:" , data ) ;
79
- setEnvironment ( data ) ;
80
- } catch ( err ) {
81
- const errorMessage = err instanceof Error ? err . message : "Environment not found or failed to load" ;
82
- setError ( errorMessage ) ;
83
- } finally {
84
- setIsLoadingEnvironment ( false ) ;
85
- }
86
- } , [ ] ) ;
87
-
88
- // Function to fetch all environments
89
- const fetchEnvironments = useCallback ( async ( ) => {
90
- setIsLoadingEnvironments ( true ) ;
91
- setError ( null ) ;
92
-
93
- try {
94
- const data = await getEnvironments ( ) ;
95
- console . log ( "Environments data:" , data ) ;
96
- setEnvironments ( data ) ;
97
- } catch ( err ) {
98
- const errorMessage = err instanceof Error ? err . message : "Failed to load environments list" ;
99
- setError ( errorMessage ) ;
100
- } finally {
101
- setIsLoadingEnvironments ( false ) ;
102
- }
103
- } , [ ] ) ;
104
-
105
- // Function to update an environment
106
- // Function to update an environment
107
- const updateEnvironmentData = useCallback ( async (
108
- environmentId : string ,
109
- data : Partial < Environment >
110
- ) : Promise < Environment > => {
111
- try {
112
- const updatedEnv = await updateEnvironment ( environmentId , data ) ;
113
-
114
- // Show success message
115
- message . success ( "Environment updated successfully" ) ;
116
-
117
- // Refresh the environments list
118
- fetchEnvironments ( ) ;
119
-
120
- // If we're viewing a single environment and it's the one we updated,
121
- // refresh that environment data as well
122
- if ( environment && environment . environmentId === environmentId ) {
123
- fetchEnvironment ( environmentId ) ;
124
- }
125
-
126
- return updatedEnv ;
127
- } catch ( err ) {
128
- const errorMessage = err instanceof Error ? err . message : "Failed to update environment" ;
129
- message . error ( errorMessage ) ;
130
- throw err ;
131
- }
132
- } , [ environment , fetchEnvironment , fetchEnvironments ] ) ;
133
-
134
- // Initial data loading - just fetch environments list
135
- useEffect ( ( ) => {
136
- fetchEnvironments ( ) ;
137
- } , [ fetchEnvironments ] ) ;
138
-
139
- // Create the context value
140
- const value : EnvironmentContextState = {
141
- environment,
142
- environments,
143
- isLoadingEnvironment,
144
- isLoadingEnvironments,
145
- error,
146
- refreshEnvironment : fetchEnvironment ,
147
- refreshEnvironments : fetchEnvironments ,
148
- updateEnvironmentData,
149
- } ;
150
-
151
- return (
152
- < EnvironmentContext . Provider value = { value } >
153
- { children }
154
- </ EnvironmentContext . Provider >
155
- ) ;
1
+ // client/packages/lowcoder/src/pages/setting/environments/context/EnvironmentContext.tsx
2
+ import React , {
3
+ createContext ,
4
+ useContext ,
5
+ useEffect ,
6
+ useState ,
7
+ useCallback ,
8
+ ReactNode ,
9
+ } from "react" ;
10
+ import { message } from "antd" ;
11
+ import { getEnvironments } from "../services/environments.service" ;
12
+ import { Environment } from "../types/environment.types" ;
13
+
14
+ interface EnvironmentContextState {
15
+ // Environments list data
16
+ environments : Environment [ ] ;
17
+
18
+ // Loading state
19
+ isLoading : boolean ;
20
+
21
+ // Error state
22
+ error : string | null ;
23
+
24
+ // Functions
25
+ refreshEnvironments : ( ) => Promise < void > ;
26
+ }
27
+
28
+ const EnvironmentContext = createContext < EnvironmentContextState | undefined > ( undefined ) ;
29
+
30
+ export const useEnvironmentContext = ( ) => {
31
+ const context = useContext ( EnvironmentContext ) ;
32
+ if ( ! context ) {
33
+ throw new Error (
34
+ "useEnvironmentContext must be used within an EnvironmentProvider"
35
+ ) ;
36
+ }
37
+ return context ;
38
+ } ;
39
+
40
+ interface ProviderProps {
41
+ children : ReactNode ;
42
+ }
43
+
44
+ export const EnvironmentProvider : React . FC < ProviderProps > = ( {
45
+ children,
46
+ } ) => {
47
+ // State for environments list
48
+ const [ environments , setEnvironments ] = useState < Environment [ ] > ( [ ] ) ;
49
+
50
+ // Loading state
51
+ const [ isLoading , setIsLoading ] = useState < boolean > ( true ) ;
52
+
53
+ // Error state
54
+ const [ error , setError ] = useState < string | null > ( null ) ;
55
+
56
+ // Function to fetch all environments
57
+ const fetchEnvironments = useCallback ( async ( ) => {
58
+ setIsLoading ( true ) ;
59
+ setError ( null ) ;
60
+
61
+ try {
62
+ const data = await getEnvironments ( ) ;
63
+ setEnvironments ( data ) ;
64
+ } catch ( err ) {
65
+ const errorMessage = err instanceof Error ? err . message : "Failed to load environments list" ;
66
+ setError ( errorMessage ) ;
67
+ message . error ( errorMessage ) ;
68
+ } finally {
69
+ setIsLoading ( false ) ;
70
+ }
71
+ } , [ ] ) ;
72
+
73
+ // Initial data loading
74
+ useEffect ( ( ) => {
75
+ fetchEnvironments ( ) ;
76
+ } , [ fetchEnvironments ] ) ;
77
+
78
+ // Create the context value
79
+ const value : EnvironmentContextState = {
80
+ environments,
81
+ isLoading,
82
+ error,
83
+ refreshEnvironments : fetchEnvironments ,
84
+ } ;
85
+
86
+ return (
87
+ < EnvironmentContext . Provider value = { value } >
88
+ { children }
89
+ </ EnvironmentContext . Provider >
90
+ ) ;
156
91
} ;
0 commit comments