Skip to content

Commit 5af6c32

Browse files
datasource list loading fix
1 parent ba9b6c1 commit 5af6c32

File tree

5 files changed

+48
-4
lines changed

5 files changed

+48
-4
lines changed

client/packages/lowcoder/src/constants/reduxActionConstants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ export const ReduxActionErrorTypes = {
227227
CREATE_APP_SNAPSHOT_ERROR: "CREATE_APP_SNAPSHOT_ERROR",
228228
FETCH_APP_SNAPSHOTS_ERROR: "FETCH_APP_SNAPSHOTS_ERROR",
229229
FETCH_APP_SNAPSHOT_DSL_ERROR: "FETCH_APP_SNAPSHOT_DSL_ERROR",
230+
231+
FETCH_DATASOURCE_ERROR: "FETCH_DATASOURCE_ERROR",
230232
};
231233

232234
export type ReduxActionType = typeof ReduxActionTypes[keyof typeof ReduxActionTypes];

client/packages/lowcoder/src/pages/datasource/datasourceList.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import styled from "styled-components";
22
import { EditPopover, PointIcon, Search, TacoButton } from "lowcoder-design";
33
import React, { useState } from "react";
44
import { useDispatch, useSelector } from "react-redux";
5-
import { getDataSource, getDataSourceTypesMap } from "../../redux/selectors/datasourceSelectors";
5+
import { getDataSource, getDataSourceLoading, getDataSourceTypesMap } from "../../redux/selectors/datasourceSelectors";
66
import { deleteDatasource } from "../../redux/reduxActions/datasourceActions";
77
import { isEmpty } from "lodash";
88
import history from "../../util/history";
@@ -106,6 +106,7 @@ export const DatasourceList = () => {
106106
const [isCreateFormShow, showCreateForm] = useState(false);
107107
const [shareDatasourceId, setShareDatasourceId] = useState<string | undefined>(undefined);
108108
const datasource = useSelector(getDataSource);
109+
const datasourceLoading = useSelector(getDataSourceLoading);
109110
const plugins = useSelector(getDataSourceTypesMap);
110111

111112
return (
@@ -147,7 +148,7 @@ export const DatasourceList = () => {
147148
<BodyWrapper>
148149
<StyledTable
149150
loading={{
150-
spinning: !datasource.length,
151+
spinning: datasourceLoading,
151152
indicator: <LoadingOutlined spin style={{ fontSize: 30 }} />
152153
}}
153154
rowClassName={(record: any) => (!record.edit ? "datasource-can-not-edit" : "")}

client/packages/lowcoder/src/redux/reducers/entitiyReducers/datasourceReducer.ts

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { createReducer } from "util/reducerUtils";
2-
import { ReduxAction, ReduxActionTypes } from "constants/reduxActionConstants";
2+
import { ReduxAction, ReduxActionErrorTypes, ReduxActionTypes } from "constants/reduxActionConstants";
33
import { DatasourceInfo, DatasourceStructure } from "api/datasourceApi";
44
import { Datasource } from "@lowcoder-ee/constants/datasourceConstants";
55
import { DatasourcePermissionInfo } from "../../../api/datasourcePermissionApi";
@@ -13,25 +13,58 @@ export interface DatasourceDataState {
1313
data: DatasourceInfo[];
1414
structure: Record<string, DatasourceStructure[]>;
1515
permissionInfo: Record<string, DatasourcePermissionInfo>;
16+
loadingStates: {
17+
fetchingDatasources?: boolean;
18+
fetchingStructure?: boolean;
19+
};
1620
}
1721

1822
const initialState: DatasourceDataState = {
1923
data: [],
2024
structure: {},
2125
permissionInfo: {},
26+
loadingStates: {
27+
fetchingDatasources: false,
28+
fetchingStructure: false,
29+
}
2230
};
2331

2432
const datasourceReducer = createReducer(initialState, {
33+
[ReduxActionTypes.FETCH_DATASOURCE_INIT]: (
34+
state: DatasourceDataState
35+
): DatasourceDataState => {
36+
return {
37+
...state,
38+
loadingStates: {
39+
...state.loadingStates,
40+
fetchingDatasources: true,
41+
},
42+
};
43+
},
2544
[ReduxActionTypes.FETCH_DATASOURCE_SUCCESS]: (
2645
state: DatasourceDataState,
2746
action: ReduxAction<DatasourceInfo[]>
2847
): DatasourceDataState => {
2948
return {
3049
...state,
3150
data: action.payload,
51+
loadingStates: {
52+
...state.loadingStates,
53+
fetchingDatasources: false,
54+
},
55+
};
56+
},
57+
[ReduxActionErrorTypes.FETCH_DATASOURCE_ERROR]: (
58+
state: DatasourceDataState,
59+
): DatasourceDataState => {
60+
return {
61+
...state,
62+
loadingStates: {
63+
...state.loadingStates,
64+
fetchingDatasources: false,
65+
},
3266
};
3367
},
34-
3568
[ReduxActionTypes.FETCH_DATASOURCE_STRUCTURE_SUCCESS]: (
3669
state: DatasourceDataState,
3770
action: ReduxAction<Record<string, DatasourceStructure[]>>

client/packages/lowcoder/src/redux/sagas/datasourceSagas.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {
22
EvaluationReduxAction,
3+
ReduxActionErrorTypes,
34
ReduxActionTypes,
45
ReduxActionWithCallbacks,
56
} from "constants/reduxActionConstants";
@@ -33,6 +34,9 @@ export function* fetchDatasourceSaga(action: EvaluationReduxAction<FetchDatasour
3334
} catch (error: any) {
3435
log.error("fetch datasource error: ", error);
3536
messageInstance.error(error.message);
37+
yield put({
38+
type: ReduxActionErrorTypes.FETCH_DATASOURCE_ERROR,
39+
});
3640
}
3741
}
3842

client/packages/lowcoder/src/redux/selectors/datasourceSelectors.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ export const getDataSource = (state: AppState) => {
66
return state.entities.datasource.data;
77
};
88

9+
export const getDataSourceLoading = (state: AppState) => {
10+
return state.entities.datasource.loadingStates.fetchingDatasources;
11+
};
12+
913
export const getDataSourceTypes = (state: AppState) => {
1014
return state.entities.plugins.data;
1115
};

0 commit comments

Comments
 (0)