Skip to content

Commit f838d86

Browse files
show/hide sign up page based on LOWCODER_EMAIL_SIGNUP_ENABLED flag from serverSettings
1 parent 2a95c20 commit f838d86

File tree

9 files changed

+92
-13
lines changed

9 files changed

+92
-13
lines changed

client/packages/lowcoder/src/api/applicationApi.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class ApplicationApi extends Api {
9898
static publicToMarketplaceURL = (applicationId: string) => `/applications/${applicationId}/public-to-marketplace`;
9999
static getMarketplaceAppURL = (applicationId: string) => `/applications/${applicationId}/view_marketplace`;
100100
static setAppEditingStateURL = (applicationId: string) => `/applications/editState/${applicationId}`;
101+
static serverSettingsURL = () => `/serverSettings`;
101102

102103
static fetchHomeData(request: HomeDataPayload): AxiosPromise<HomeDataResponse> {
103104
return Api.get(ApplicationApi.fetchHomeDataURL, request);
@@ -240,6 +241,10 @@ class ApplicationApi extends Api {
240241
editingFinished,
241242
});
242243
}
244+
245+
static fetchServerSettings(): AxiosPromise<any> {
246+
return Api.get(ApplicationApi.serverSettingsURL());
247+
}
243248
}
244249

245250
export default ApplicationApi;

client/packages/lowcoder/src/app.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import { getBrandingConfig } from "./redux/selectors/configSelectors";
5656
import { buildMaterialPreviewURL } from "./util/materialUtils";
5757
import GlobalInstances from 'components/GlobalInstances';
5858
// import posthog from 'posthog-js'
59-
import { fetchHomeData } from "./redux/reduxActions/applicationActions";
59+
import { fetchHomeData, fetchServerSettingsAction } from "./redux/reduxActions/applicationActions";
6060
import { getNpmPackageMeta } from "./comps/utils/remote";
6161
import { packageMetaReadyAction, setLowcoderCompsLoading } from "./redux/reduxActions/npmPluginActions";
6262

@@ -95,6 +95,7 @@ type AppIndexProps = {
9595
fetchHomeData: (currentUserAnonymous?: boolean | undefined) => void;
9696
fetchLowcoderCompVersions: () => void;
9797
getCurrentUser: () => void;
98+
fetchServerSettings: () => void;
9899
favicon: string;
99100
brandName: string;
100101
uiLanguage: string;
@@ -103,6 +104,7 @@ type AppIndexProps = {
103104
class AppIndex extends React.Component<AppIndexProps, any> {
104105
componentDidMount() {
105106
this.props.getCurrentUser();
107+
this.props.fetchServerSettings();
106108
// if (!this.props.currentUserAnonymous) {
107109
// this.props.fetchHomeData(this.props.currentUserAnonymous);
108110
// }
@@ -439,6 +441,9 @@ const mapDispatchToProps = (dispatch: any) => ({
439441
dispatch(setLowcoderCompsLoading(false));
440442
}
441443
},
444+
fetchServerSettings: () => {
445+
dispatch(fetchServerSettingsAction());
446+
}
442447
});
443448

444449
const AppIndexWithProps = connect(mapStateToProps, mapDispatchToProps)(AppIndex);

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ export const ReduxActionTypes = {
145145
FETCH_ALL_MARKETPLACE_APPS: "FETCH_ALL_MARKETPLACE_APPS",
146146
FETCH_ALL_MARKETPLACE_APPS_SUCCESS: "FETCH_ALL_MARKETPLACE_APPS_SUCCESS",
147147
SET_APP_EDITING_STATE: "SET_APP_EDITING_STATE",
148+
FETCH_SERVER_SETTINGS: "FETCH_SERVER_SETTINGS",
149+
FETCH_SERVER_SETTINGS_SUCCESS: "FETCH_SERVER_SETTINGS_SUCCESS",
148150

149151
/* user profile */
150152
SET_USER_PROFILE_SETTING_MODAL_VISIBLE: "SET_USER_PROFILE_SETTING_MODAL_VISIBLE",

client/packages/lowcoder/src/pages/userAuth/formLoginSteps.tsx

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
LoginCardTitle,
77
StyledRouteLink,
88
} from "pages/userAuth/authComponents";
9-
import React, { useContext, useState } from "react";
9+
import React, { useContext, useEffect, useState } from "react";
1010
import styled from "styled-components";
1111
import UserApi from "api/userApi";
1212
import { useRedirectUrl } from "util/hooks";
@@ -25,8 +25,10 @@ import { AccountLoginWrapper } from "./formLoginAdmin";
2525
import { default as Button } from "antd/es/button";
2626
import LeftOutlined from "@ant-design/icons/LeftOutlined";
2727
import { fetchConfigAction } from "@lowcoder-ee/redux/reduxActions/configActions";
28-
import { useDispatch } from "react-redux";
28+
import { useDispatch, useSelector } from "react-redux";
2929
import history from "util/history";
30+
import ApplicationApi from "@lowcoder-ee/api/applicationApi";
31+
import { getServerSettings } from "@lowcoder-ee/redux/selectors/applicationSelector";
3032

3133
const StyledCard = styled.div<{$selected: boolean}>`
3234
display: flex;
@@ -107,6 +109,16 @@ export default function FormLoginSteps(props: FormLoginProps) {
107109
const [currentStep, setCurrentStep] = useState<CurrentStepEnum>(CurrentStepEnum.EMAIL);
108110
const [organizationId, setOrganizationId] = useState<string|undefined>(props.organizationId);
109111
const [skipWorkspaceStep, setSkipWorkspaceStep] = useState<boolean>(false);
112+
const [signupEnabled, setSignupEnabled] = useState<boolean>(true);
113+
const serverSettings = useSelector(getServerSettings);
114+
115+
useEffect(() => {
116+
const { LOWCODER_EMAIL_SIGNUP_ENABLED } = serverSettings;
117+
if (!LOWCODER_EMAIL_SIGNUP_ENABLED) {
118+
return setSignupEnabled(true);
119+
}
120+
setSignupEnabled(LOWCODER_EMAIL_SIGNUP_ENABLED === 'true');
121+
}, [serverSettings]);
110122

111123
const { onSubmit, loading } = useAuthSubmit(
112124
() =>
@@ -185,15 +197,19 @@ export default function FormLoginSteps(props: FormLoginProps) {
185197
{trans("userAuth.continue")}
186198
</ConfirmButton>
187199
</AccountLoginWrapper>
188-
<Divider/>
189-
<AuthBottomView>
190-
<StyledRouteLink to={{
191-
pathname: AUTH_REGISTER_URL,
192-
state: location.state
193-
}}>
194-
{trans("userAuth.register")}
195-
</StyledRouteLink>
196-
</AuthBottomView>
200+
{signupEnabled && (
201+
<>
202+
<Divider/>
203+
<AuthBottomView>
204+
<StyledRouteLink to={{
205+
pathname: AUTH_REGISTER_URL,
206+
state: location.state
207+
}}>
208+
{trans("userAuth.register")}
209+
</StyledRouteLink>
210+
</AuthBottomView>
211+
</>
212+
)}
197213
</>
198214
)
199215
}
@@ -266,7 +282,7 @@ export default function FormLoginSteps(props: FormLoginProps) {
266282
/>
267283
)}
268284
</AccountLoginWrapper>
269-
{isFormLoginEnabled && (
285+
{isFormLoginEnabled && signupEnabled && (
270286
<>
271287
<Divider/>
272288
<AuthBottomView>

client/packages/lowcoder/src/pages/userAuth/register.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import { validateResponse } from "@lowcoder-ee/api/apiUtils";
2626
import history from "util/history";
2727
import LoadingOutlined from "@ant-design/icons/LoadingOutlined";
2828
import Spin from "antd/es/spin";
29+
import { useSelector } from "react-redux";
30+
import { getServerSettings } from "@lowcoder-ee/redux/selectors/applicationSelector";
2931

3032
const StyledFormInput = styled(FormInput)`
3133
margin-bottom: 16px;
@@ -65,6 +67,21 @@ function UserRegister() {
6567

6668
const authId = systemConfig?.form.id;
6769

70+
const serverSettings = useSelector(getServerSettings);
71+
72+
useEffect(() => {
73+
const { LOWCODER_EMAIL_SIGNUP_ENABLED } = serverSettings;
74+
if(
75+
serverSettings.hasOwnProperty('LOWCODER_EMAIL_SIGNUP_ENABLED')
76+
&& LOWCODER_EMAIL_SIGNUP_ENABLED === 'false'
77+
) {
78+
history.push(
79+
AUTH_LOGIN_URL,
80+
{...location.state || {}, email: account},
81+
)
82+
};
83+
}, [serverSettings]);
84+
6885
const { loading, onSubmit } = useAuthSubmit(
6986
() =>
7087
UserApi.formLogin({

client/packages/lowcoder/src/redux/reducers/uiReducers/applicationReducer.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,13 @@ const usersReducer = createReducer(initialState, {
337337
fetchingAppDetail: false,
338338
},
339339
}),
340+
[ReduxActionTypes.FETCH_SERVER_SETTINGS_SUCCESS]: (
341+
state: ApplicationReduxState,
342+
action: ReduxAction<Record<string,string>>
343+
): ApplicationReduxState => ({
344+
...state,
345+
serverSettings: action.payload,
346+
}),
340347
});
341348

342349
export interface ApplicationReduxState {
@@ -348,6 +355,7 @@ export interface ApplicationReduxState {
348355
appPermissionInfo?: AppPermissionInfo;
349356
currentApplication?: ApplicationMeta;
350357
templateId?: string;
358+
serverSettings?: Record<string,string>;
351359
loadingStatus: {
352360
deletingApplication: boolean;
353361
isFetchingHomeData: boolean; // fetching app list

client/packages/lowcoder/src/redux/reduxActions/applicationActions.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,7 @@ export const setAppEditingState = (payload: SetAppEditingStatePayload) => ({
181181
type: ReduxActionTypes.SET_APP_EDITING_STATE,
182182
payload: payload,
183183
});
184+
185+
export const fetchServerSettingsAction = () => ({
186+
type: ReduxActionTypes.FETCH_SERVER_SETTINGS,
187+
});

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,23 @@ function* setAppEditingStateSaga(action: ReduxAction<SetAppEditingStatePayload>)
403403
}
404404
}
405405

406+
export function* fetchServerSettingsSaga() {
407+
try {
408+
const response: AxiosResponse<GenericApiResponse<Record<string,string>>> = yield call(
409+
ApplicationApi.fetchServerSettings
410+
);
411+
if (Boolean(response.data)) {
412+
yield put({
413+
type: ReduxActionTypes.FETCH_SERVER_SETTINGS_SUCCESS,
414+
payload: response.data,
415+
});
416+
}
417+
} catch (error: any) {
418+
log.debug("fetch server settings error: ", error);
419+
messageInstance.error(error.message);
420+
}
421+
}
422+
406423
export default function* applicationSagas() {
407424
yield all([
408425
takeLatest(ReduxActionTypes.FETCH_HOME_DATA, fetchHomeDataSaga),
@@ -429,5 +446,6 @@ export default function* applicationSagas() {
429446
fetchAllMarketplaceAppsSaga,
430447
),
431448
takeLatest(ReduxActionTypes.SET_APP_EDITING_STATE, setAppEditingStateSaga),
449+
takeLatest(ReduxActionTypes.FETCH_SERVER_SETTINGS, fetchServerSettingsSaga),
432450
]);
433451
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,7 @@ export const isApplicationPublishing = (state: AppState): boolean => {
4343
export const getTemplateId = (state: AppState): any => {
4444
return state.ui.application.templateId;
4545
};
46+
47+
export const getServerSettings = (state: AppState): Record<string,string> => {
48+
return state.ui.application.serverSettings || {};
49+
}

0 commit comments

Comments
 (0)