1
+ import React from 'react' ;
2
+ import { Button , Card , Space , Typography , Row , Col } from 'antd' ;
3
+ import {
4
+ CustomerServiceOutlined ,
5
+ EditOutlined ,
6
+ ArrowLeftOutlined ,
7
+ CloseCircleOutlined ,
8
+ ExclamationCircleOutlined ,
9
+ WarningOutlined
10
+ } from '@ant-design/icons' ;
11
+ import { Environment } from '../types/environment.types' ;
12
+ import history from "@lowcoder-ee/util/history" ;
13
+
14
+ const { Title, Text } = Typography ;
15
+
16
+ interface UnlicensedEnvironmentViewProps {
17
+ environment : Environment ;
18
+ onEditClick : ( ) => void ;
19
+ }
20
+
21
+ /**
22
+ * Modern UI for unlicensed environments
23
+ */
24
+ const UnlicensedEnvironmentView : React . FC < UnlicensedEnvironmentViewProps > = ( {
25
+ environment,
26
+ onEditClick
27
+ } ) => {
28
+ const getLicenseIcon = ( ) => {
29
+ switch ( environment . licenseStatus ) {
30
+ case 'unlicensed' :
31
+ return < CloseCircleOutlined style = { { fontSize : '48px' , color : '#ff4d4f' } } /> ;
32
+ case 'error' :
33
+ return < ExclamationCircleOutlined style = { { fontSize : '48px' , color : '#faad14' } } /> ;
34
+ default :
35
+ return < WarningOutlined style = { { fontSize : '48px' , color : '#ff4d4f' } } /> ;
36
+ }
37
+ } ;
38
+
39
+ const getLicenseTitle = ( ) => {
40
+ switch ( environment . licenseStatus ) {
41
+ case 'unlicensed' :
42
+ return 'Environment Not Licensed' ;
43
+ case 'error' :
44
+ return 'License Configuration Error' ;
45
+ default :
46
+ return 'License Issue' ;
47
+ }
48
+ } ;
49
+
50
+ const getLicenseDescription = ( ) => {
51
+ if ( environment . licenseError ) {
52
+ return environment . licenseError ;
53
+ }
54
+
55
+ switch ( environment . licenseStatus ) {
56
+ case 'unlicensed' :
57
+ return 'This environment requires a valid license to access its features and functionality.' ;
58
+ case 'error' :
59
+ return 'There was an error validating the license for this environment. Please check the configuration.' ;
60
+ default :
61
+ return 'This environment has license-related issues that need to be resolved.' ;
62
+ }
63
+ } ;
64
+
65
+ return (
66
+ < div style = { {
67
+ padding : "24px" ,
68
+ flex : 1 ,
69
+ minHeight : '100vh' ,
70
+ background : 'linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%)'
71
+ } } >
72
+ < Row justify = "center" style = { { minHeight : '80vh' } } >
73
+ < Col xs = { 24 } sm = { 20 } md = { 16 } lg = { 14 } xl = { 12 } >
74
+ < div style = { {
75
+ display : 'flex' ,
76
+ flexDirection : 'column' ,
77
+ justifyContent : 'center' ,
78
+ alignItems : 'center' ,
79
+ minHeight : '70vh' ,
80
+ textAlign : 'center'
81
+ } } >
82
+ { /* Main Status Card */ }
83
+ < Card
84
+ style = { {
85
+ width : '100%' ,
86
+ borderRadius : '16px' ,
87
+ boxShadow : '0 20px 40px rgba(0,0,0,0.1)' ,
88
+ border : 'none' ,
89
+ background : 'white' ,
90
+ overflow : 'hidden'
91
+ } }
92
+ bodyStyle = { { padding : '48px 32px' } }
93
+ >
94
+ { /* Status Icon */ }
95
+ < div style = { { marginBottom : '24px' } } >
96
+ { getLicenseIcon ( ) }
97
+ </ div >
98
+
99
+ { /* Environment Info */ }
100
+ < div style = { { marginBottom : '32px' } } >
101
+ < Title level = { 2 } style = { { marginBottom : '8px' , color : '#262626' } } >
102
+ { getLicenseTitle ( ) }
103
+ </ Title >
104
+ < Text style = { {
105
+ fontSize : '16px' ,
106
+ color : '#595959' ,
107
+ display : 'block' ,
108
+ marginBottom : '16px' ,
109
+ lineHeight : '1.6'
110
+ } } >
111
+ { getLicenseDescription ( ) }
112
+ </ Text >
113
+
114
+ { /* Environment Details */ }
115
+ < div style = { {
116
+ background : '#fafafa' ,
117
+ padding : '16px' ,
118
+ borderRadius : '8px' ,
119
+ marginTop : '24px' ,
120
+ border : '1px solid #f0f0f0'
121
+ } } >
122
+ < Text strong style = { { color : '#8c8c8c' , fontSize : '14px' } } > Environment:</ Text >
123
+ < Text style = { {
124
+ display : 'block' ,
125
+ fontSize : '16px' ,
126
+ color : '#262626' ,
127
+ marginTop : '4px'
128
+ } } >
129
+ { environment . environmentName || 'Unnamed Environment' }
130
+ </ Text >
131
+ < Text style = { {
132
+ fontSize : '13px' ,
133
+ color : '#8c8c8c' ,
134
+ fontFamily : 'monospace'
135
+ } } >
136
+ ID: { environment . environmentId }
137
+ </ Text >
138
+ </ div >
139
+ </ div >
140
+
141
+ { /* Action Buttons */ }
142
+ < Space size = "large" direction = "vertical" style = { { width : '100%' } } >
143
+ < Button
144
+ type = "primary"
145
+ size = "large"
146
+ icon = { < CustomerServiceOutlined /> }
147
+ style = { {
148
+ width : '100%' ,
149
+ height : '48px' ,
150
+ borderRadius : '8px' ,
151
+ fontSize : '16px' ,
152
+ fontWeight : 500 ,
153
+ background : 'linear-gradient(135deg, #1890ff 0%, #0050b3 100%)' ,
154
+ border : 'none' ,
155
+ boxShadow : '0 4px 12px rgba(24, 144, 255, 0.3)'
156
+ } }
157
+ // onClick will be handled later when modal is ready
158
+ >
159
+ Contact Lowcoder Team
160
+ </ Button >
161
+
162
+ < Button
163
+ size = "large"
164
+ icon = { < EditOutlined /> }
165
+ onClick = { onEditClick }
166
+ style = { {
167
+ width : '100%' ,
168
+ height : '48px' ,
169
+ borderRadius : '8px' ,
170
+ fontSize : '16px' ,
171
+ fontWeight : 500 ,
172
+ borderColor : '#d9d9d9' ,
173
+ color : '#595959'
174
+ } }
175
+ >
176
+ Edit Environment
177
+ </ Button >
178
+
179
+ < Button
180
+ size = "large"
181
+ icon = { < ArrowLeftOutlined /> }
182
+ onClick = { ( ) => history . push ( "/setting/environments" ) }
183
+ style = { {
184
+ width : '100%' ,
185
+ height : '48px' ,
186
+ borderRadius : '8px' ,
187
+ fontSize : '16px' ,
188
+ fontWeight : 500 ,
189
+ borderColor : '#d9d9d9' ,
190
+ color : '#8c8c8c'
191
+ } }
192
+ >
193
+ Back to Environments
194
+ </ Button >
195
+ </ Space >
196
+ </ Card >
197
+
198
+ { /* Footer Help Text */ }
199
+ < Text style = { {
200
+ marginTop : '24px' ,
201
+ color : '#8c8c8c' ,
202
+ fontSize : '14px' ,
203
+ maxWidth : '400px' ,
204
+ lineHeight : '1.5'
205
+ } } >
206
+ Need assistance? Contact our team for licensing support or edit the environment configuration to resolve this issue.
207
+ </ Text >
208
+ </ div >
209
+ </ Col >
210
+ </ Row >
211
+ </ div >
212
+ ) ;
213
+ } ;
214
+
215
+ export default UnlicensedEnvironmentView ;
0 commit comments