Skip to content

Commit af91f08

Browse files
authored
Merge pull request #1694 from iamfaran/fix/environments-new
Add error component on invalid URL and managed-obj endpoint
2 parents f30fbd4 + 392a4ad commit af91f08

File tree

13 files changed

+71
-79
lines changed

13 files changed

+71
-79
lines changed

client/packages/lowcoder/src/pages/setting/environments/EnvironmentDetail.tsx

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import UserGroupsTab from "./components/UserGroupsTab";
2727
import EnvironmentHeader from "./components/EnvironmentHeader";
2828
import ModernBreadcrumbs from "./components/ModernBreadcrumbs";
2929
import { getEnvironmentTagColor } from "./utils/environmentUtils";
30-
const { Title, Text } = Typography;
30+
import ErrorComponent from './components/ErrorComponent';
3131
const { TabPane } = Tabs;
3232

3333
/**
@@ -80,50 +80,18 @@ const EnvironmentDetail: React.FC = () => {
8080
if (isLoading) {
8181
return (
8282
<div style={{ display: 'flex', justifyContent: 'center', padding: '50px' }}>
83-
<Spin size="large" tip="Loading environment..." />
83+
<Spin size="large" tip="Loading environment..." style={{ display: 'block', textAlign: 'center' }} />
8484
</div>
8585
);
8686
}
8787

8888
if (error || !environment) {
89-
const errorItems = [
90-
{
91-
key: 'environments',
92-
title: (
93-
<span>
94-
<HomeOutlined /> Environments
95-
</span>
96-
),
97-
onClick: () => history.push("/setting/environments")
98-
},
99-
{
100-
key: 'notFound',
101-
title: 'Not Found'
102-
}
103-
];
104-
10589
return (
106-
<div style={{ padding: "24px", flex: 1 }}>
107-
<ModernBreadcrumbs items={errorItems} />
108-
109-
<Card style={{ borderRadius: '8px', boxShadow: '0 2px 8px rgba(0,0,0,0.05)' }}>
110-
<div style={{ textAlign: "center", padding: "40px 0" }}>
111-
<Title level={3} style={{ color: "#ff4d4f" }}>
112-
Environment Not Found
113-
</Title>
114-
<Text type="secondary" style={{ display: "block", margin: "16px 0" }}>
115-
{error || "The environment you're looking for doesn't exist or you don't have permission to view it."}
116-
</Text>
117-
<Button
118-
type="primary"
119-
onClick={() => history.push("/setting/environments")}
120-
style={{ marginTop: "16px" }}
121-
>
122-
Return to Environments List
123-
</Button>
124-
</div>
125-
</Card>
126-
</div>
90+
<ErrorComponent
91+
errorMessage={"Environment Not Found"}
92+
returnPath="/setting/environments"
93+
returnLabel="Return to Environments List"
94+
/>
12795
);
12896
}
12997

client/packages/lowcoder/src/pages/setting/environments/EnvironmentsList.tsx

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,7 @@ const EnvironmentsList: React.FC = () => {
139139
borderRadius: '12px',
140140
boxShadow: '0 2px 8px rgba(0,0,0,0.05)'
141141
}}
142-
headStyle={{
143-
borderBottom: '1px solid #f0f0f0',
144-
padding: '16px 24px'
145-
}}
142+
styles={{ header: { borderBottom: '1px solid #f0f0f0', padding: '16px 24px' } }}
146143
bodyStyle={{ padding: '24px' }}
147144
>
148145
<Row gutter={[32, 16]} justify="space-around">
@@ -191,10 +188,7 @@ const EnvironmentsList: React.FC = () => {
191188
borderRadius: '12px',
192189
boxShadow: '0 2px 8px rgba(0,0,0,0.05)',
193190
}}
194-
headStyle={{
195-
borderBottom: '1px solid #f0f0f0',
196-
padding: '16px 24px'
197-
}}
191+
styles={{ header: { borderBottom: '1px solid #f0f0f0', padding: '16px 24px' } }}
198192
bodyStyle={{ padding: '24px' }}
199193
extra={
200194
<Input

client/packages/lowcoder/src/pages/setting/environments/WorkspaceDetail.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import DataSourcesTab from "./components/DataSourcesTab";
2525
import QueriesTab from "./components/QueriesTab";
2626
import ModernBreadcrumbs from "./components/ModernBreadcrumbs";
2727
import WorkspaceHeader from "./components/WorkspaceHeader";
28+
import ErrorComponent from "./components/ErrorComponent";
2829

2930
const { TabPane } = Tabs;
3031

@@ -34,7 +35,6 @@ const WorkspaceDetail: React.FC = () => {
3435
const { workspace, isLoading, error, toggleManagedStatus } = useWorkspaceContext();
3536
const { openDeployModal } = useDeployModal();
3637

37-
console.log("workspace render", workspace);
3838

3939
const [isToggling, setIsToggling] = useState(false);
4040

@@ -58,18 +58,18 @@ const WorkspaceDetail: React.FC = () => {
5858
if (isLoading) {
5959
return (
6060
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%', padding: '50px' }}>
61-
<Spin size="large" tip="Loading workspace details..." />
61+
<Spin size="large" tip="Loading workspace details..." style={{ display: 'block', textAlign: 'center' }} />
6262
</div>
6363
);
6464
}
6565

6666
if (error || !environment || !workspace) {
6767
return (
68-
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%', padding: '50px' }}>
69-
<Typography.Title level={3}>
70-
{error || "Workspace not found"}
71-
</Typography.Title>
72-
</div>
68+
<ErrorComponent
69+
errorMessage={"Workspace not found"}
70+
returnPath="/setting/environments"
71+
returnLabel="Return to Environments List"
72+
/>
7373
);
7474
}
7575

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import React from 'react';
2+
import { Card, Button, Typography } from 'antd';
3+
import { HomeOutlined } from '@ant-design/icons';
4+
import history from '@lowcoder-ee/util/history';
5+
6+
const { Title, Text } = Typography;
7+
8+
interface ErrorComponentProps {
9+
errorMessage: string;
10+
returnPath: string;
11+
returnLabel: string;
12+
}
13+
14+
const ErrorComponent: React.FC<ErrorComponentProps> = ({ errorMessage, returnPath, returnLabel }) => {
15+
return (
16+
<div style={{ padding: '24px', flex: 1 }}>
17+
<Card style={{ borderRadius: '8px', boxShadow: '0 2px 8px rgba(0,0,0,0.05)' }}>
18+
<div style={{ textAlign: 'center', padding: '40px 0' }}>
19+
<Title level={3} style={{ color: '#ff4d4f' }}>
20+
{errorMessage}
21+
</Title>
22+
<Text type="secondary" style={{ display: 'block', margin: '16px 0' }}>
23+
The item you're looking for doesn't exist or you don't have permission to view it.
24+
</Text>
25+
<Button
26+
type="primary"
27+
onClick={() => history.push(returnPath)}
28+
style={{ marginTop: '16px' }}
29+
>
30+
<HomeOutlined /> {returnLabel}
31+
</Button>
32+
</div>
33+
</Card>
34+
</div>
35+
);
36+
};
37+
38+
export default ErrorComponent;

client/packages/lowcoder/src/pages/setting/environments/config/apps.config.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export const appsConfig: DeployableItemConfig = {
5050
publishOnTarget: values.publishOnTarget,
5151
publicToAll: values.publicToAll,
5252
publicToMarketplace: values.publicToMarketplace,
53+
applicationGid: item.applicationGid,
5354
};
5455
},
5556
execute: (params: any) => deployApp(params)

client/packages/lowcoder/src/pages/setting/environments/config/data-sources.config.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ export const dataSourcesConfig: DeployableItemConfig = {
2323
envId: sourceEnv.environmentId,
2424
targetEnvId: targetEnv.environmentId,
2525
datasourceId: item.id,
26-
updateDependenciesIfNeeded: values.updateDependenciesIfNeeded
26+
updateDependenciesIfNeeded: values.updateDependenciesIfNeeded,
27+
datasourceGid: item.gid
2728
};
2829
},
2930
execute: (params: any) => deployDataSource(params)

client/packages/lowcoder/src/pages/setting/environments/config/query.config.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ export const queryConfig: DeployableItemConfig = {
2424
envId: sourceEnv.environmentId,
2525
targetEnvId: targetEnv.environmentId,
2626
queryId: item.id,
27-
updateDependenciesIfNeeded: values.updateDependenciesIfNeeded
27+
updateDependenciesIfNeeded: values.updateDependenciesIfNeeded,
28+
queryGid: item.gid,
2829
};
2930
},
3031
execute: (params: any) => deployQuery(params)

client/packages/lowcoder/src/pages/setting/environments/services/apps.service.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export interface DeployAppParams {
1818
envId: string;
1919
targetEnvId: string;
2020
applicationId: string;
21+
applicationGid: string;
2122
updateDependenciesIfNeeded?: boolean;
2223
publishOnTarget?: boolean;
2324
publicToAll?: boolean;
@@ -79,7 +80,7 @@ export async function getMergedWorkspaceApps(
7980
// Fetch managed objects instead of managed apps
8081
let managedObjects: ManagedObject[] = [];
8182
try {
82-
managedObjects = await getManagedObjects(environmentId);
83+
managedObjects = await getManagedObjects(environmentId, ManagedObjectType.APP);
8384
} catch (error) {
8485
console.error("Failed to fetch managed objects:", error);
8586
// Continue with empty managed list
@@ -125,7 +126,7 @@ export const deployApp = async (params: DeployAppParams): Promise<boolean> => {
125126

126127
if (response.status === 200) {
127128
await transferManagedObject(
128-
params.applicationId,
129+
params.applicationGid,
129130
params.envId,
130131
params.targetEnvId,
131132
ManagedObjectType.APP

client/packages/lowcoder/src/pages/setting/environments/services/datasources.service.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ export interface DeployDataSourceParams {
2020
envId: string;
2121
targetEnvId: string;
2222
datasourceId: string;
23+
datasourceGid: string;
2324
updateDependenciesIfNeeded?: boolean;
25+
2426
}
2527
// Get data sources for a workspace - using your correct implementation
2628
export async function getWorkspaceDataSources(
@@ -54,7 +56,6 @@ export async function getWorkspaceDataSources(
5456
orgId: workspaceId
5557
}
5658
});
57-
console.log("data source response",response);
5859

5960
// Check if response is valid
6061
if (!response.data) {
@@ -157,12 +158,12 @@ export async function deployDataSource(params: DeployDataSourceParams): Promise<
157158
envId: params.envId,
158159
targetEnvId: params.targetEnvId,
159160
datasourceId: params.datasourceId,
160-
updateDependenciesIfNeeded: params.updateDependenciesIfNeeded ?? false
161+
updateDependenciesIfNeeded: params.updateDependenciesIfNeeded ?? false,
161162
}
162163
});
163164
if (response.status === 200) {
164165
await transferManagedObject(
165-
params.datasourceId,
166+
params.datasourceGid,
166167
params.envId,
167168
params.targetEnvId,
168169
ManagedObjectType.DATASOURCE

client/packages/lowcoder/src/pages/setting/environments/services/enterprise.service.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,6 @@ export async function getManagedQueries(environmentId: string): Promise<Query[]>
204204
environmentId
205205
}
206206
});
207-
console.log("Managed queries response function:", response.data);
208207

209208
if (!response.data.data || !Array.isArray(response.data.data)) {
210209
return [];

client/packages/lowcoder/src/pages/setting/environments/services/environments.service.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,6 @@ export async function getEnvironmentUserGroups(
195195

196196
// Make the API request to get user groups
197197
const response = await axios.get(`${apiServiceUrl}/api/groups/list`, { headers });
198-
console.log(response);
199198

200199
// Check if response is valid
201200
if (!response.data) {
@@ -359,8 +358,7 @@ export async function getWorkspaceDataSources(
359358
orgId: workspaceId
360359
}
361360
});
362-
console.log("data source response",response);
363-
361+
364362
// Check if response is valid
365363
if (!response.data) {
366364
return [];
@@ -434,7 +432,7 @@ export async function getWorkspaceQueries(
434432
if (!response.data) {
435433
return { queries: [], total: 0 };
436434
}
437-
console.log("RESPONSE DATA QUERIES",response.data.data);
435+
438436
// Map the response to include id field required by DeployableItem
439437
const queries = response.data.data.map(query => ({
440438
...query,
@@ -444,8 +442,6 @@ export async function getWorkspaceQueries(
444442
managed: false // Default to unmanaged
445443
}));
446444

447-
console.log("queries",queries);
448-
449445
return {
450446
queries,
451447
total: response.data.total

client/packages/lowcoder/src/pages/setting/environments/services/query.service.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export interface MergedQueriesResult {
1515
targetEnvId: string;
1616
queryId: string;
1717
updateDependenciesIfNeeded?: boolean;
18+
queryGid: string;
1819
}
1920

2021

@@ -28,19 +29,15 @@ export interface MergedQueriesResult {
2829
// Fetch regular queries
2930

3031
const regularQueries = await getWorkspaceQueries(workspaceId, apiKey, apiServiceUrl);
31-
console.log("Regular queries response:", regularQueries);
3232

3333
const managedObjects = await getManagedObjects(environmentId, ManagedObjectType.QUERY);
34-
console.log("Managed queries response:", managedObjects);
3534

3635
// Create a set of managed query GIDs for quick lookup
3736
const managedQueryGids = new Set(managedObjects.map(obj => obj.objGid));
38-
console.log("Managed query GIDs:", Array.from(managedQueryGids));
3937

4038
// Mark regular queries as managed if they exist in managed queries
4139
const mergedQueries = regularQueries.queries.map((query: Query) => {
4240
const isManaged = managedQueryGids.has(query.gid);
43-
console.log(`Query ${query.name} (gid: ${query.gid}) is ${isManaged ? "managed" : "not managed"}`);
4441

4542
return {
4643
...query,
@@ -51,11 +48,6 @@ export interface MergedQueriesResult {
5148
// Calculate stats
5249
const total = mergedQueries.length;
5350
const managed = mergedQueries.filter(query => query.managed).length;
54-
console.log("Generated stats:", {
55-
total,
56-
managed,
57-
unmanaged: total - managed
58-
});
5951

6052
return {
6153
queries: mergedQueries,
@@ -84,7 +76,7 @@ export interface MergedQueriesResult {
8476
});
8577
if (response.status === 200) {
8678
await transferManagedObject(
87-
params.queryId,
79+
params.queryGid,
8880
params.envId,
8981
params.targetEnvId,
9082
ManagedObjectType.QUERY

client/packages/lowcoder/src/pages/setting/environments/services/workspace.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export async function deployWorkspace(params: {
9999
// After successful deployment, set the managed object in target environment
100100
if (response.status === 200) {
101101
await transferManagedObject(
102-
params.workspaceId,
102+
params.workspaceId, // first param has to be GID
103103
params.envId,
104104
params.targetEnvId,
105105
ManagedObjectType.ORG

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy