Skip to content

Commit 876fe31

Browse files
committed
Merge branch 'dev' into settings_navigation_app
2 parents cb5ff45 + 0060f16 commit 876fe31

File tree

19 files changed

+354
-306
lines changed

19 files changed

+354
-306
lines changed

client/packages/lowcoder/src/comps/hooks/modalComp.tsx

Lines changed: 199 additions & 179 deletions
Large diffs are not rendered by default.

client/packages/lowcoder/src/pages/ApplicationV2/index.tsx

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import {
3232
UserIcon,
3333
} from "lowcoder-design";
3434
import React, { useCallback, useEffect, useState, useMemo } from "react";
35-
import { fetchAllApplications, fetchHomeData } from "redux/reduxActions/applicationActions";
35+
import { fetchHomeData } from "redux/reduxActions/applicationActions";
3636
import { fetchSubscriptionsAction } from "redux/reduxActions/subscriptionActions";
3737
import { getHomeOrg, normalAppListSelector } from "redux/selectors/applicationSelector";
3838
import { DatasourceHome } from "../datasource";
@@ -125,18 +125,13 @@ export default function ApplicationHome() {
125125
}, [org, orgHomeId]);
126126

127127
useEffect(() => {
128-
if (allAppCount !== 0) {
129-
return;
130-
}
131-
user.currentOrgId && dispatch(fetchAllApplications({}));
132-
}, [dispatch, allAppCount, user.currentOrgId]);
133-
134-
useEffect(() => {
135-
if (allFoldersCount !== 0) {
128+
// Check if we need to fetch data (either no folders or no applications)
129+
if (allFoldersCount !== 0 && allAppCount !== 0) {
136130
return;
137131
}
132+
138133
user.currentOrgId && dispatch(fetchFolderElements({}));
139-
}, [dispatch, allFoldersCount, user.currentOrgId]);
134+
}, [dispatch, allFoldersCount, allAppCount, user.currentOrgId]);
140135

141136
if (fetchingUser || !isPreloadCompleted) {
142137
return <ProductLoading />;

client/packages/lowcoder/src/pages/common/WorkspaceSection.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,16 @@ const WorkspaceList = styled.div`
7171
}
7272
`;
7373

74-
const WorkspaceItem = styled.div<{ isActive?: boolean }>`
74+
const WorkspaceItem = styled.div<{ $isActive?: boolean }>`
7575
display: flex;
7676
align-items: center;
7777
padding: 10px 16px;
7878
cursor: pointer;
7979
transition: background-color 0.2s;
80-
background-color: ${props => props.isActive ? '#f0f5ff' : 'transparent'};
80+
background-color: ${props => props.$isActive ? '#f0f5ff' : 'transparent'};
8181
8282
&:hover {
83-
background-color: ${props => props.isActive ? '#f0f5ff' : '#f8f9fa'};
83+
background-color: ${props => props.$isActive ? '#f0f5ff' : '#f8f9fa'};
8484
}
8585
`;
8686

@@ -242,7 +242,7 @@ export default function WorkspaceSectionComponent({
242242
displayWorkspaces.map((org: Org) => (
243243
<WorkspaceItem
244244
key={org.id}
245-
isActive={user.currentOrgId === org.id}
245+
$isActive={user.currentOrgId === org.id}
246246
onClick={() => handleOrgSwitch(org.id)}
247247
>
248248
<WorkspaceName title={org.name}>{org.name}</WorkspaceName>

client/packages/lowcoder/src/pages/common/profileDropdown.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ export default function ProfileDropdown(props: DropDownProps) {
192192
<StyledDropdown
193193
open={dropdownVisible}
194194
onOpenChange={setDropdownVisible}
195-
dropdownRender={() => dropdownContent}
195+
popupRender={() => dropdownContent}
196196
trigger={["click"]}
197197
placement="bottomRight"
198198
>

client/packages/lowcoder/src/pages/editor/LeftContent.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,14 @@ export const LeftContent = (props: LeftContentProps) => {
446446
</span>
447447
{info?.show && data && (
448448
<Modal
449-
title={data.name}
449+
title={
450+
<div>
451+
<div>{data.name}</div>
452+
<div style={{ fontSize: '12px', color: '#666', fontWeight: 'normal', marginTop: '4px' }}>
453+
<strong>Type:</strong> {data.type}
454+
</div>
455+
</div>
456+
}
450457
open={info.show}
451458
onOk={() => setShowData([])}
452459
cancelButtonProps={{ style: { display: 'none' } }}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,19 @@ export function* fetchFolderElementsSaga(action: ReduxAction<FetchFolderElements
118118
type: ReduxActionTypes.FETCH_ALL_FOLDERS_SUCCESS,
119119
payload: response.data.data.filter((m) => m.folder),
120120
});
121+
122+
// filter out applications with NORMAL status
123+
124+
const applications = response.data.data.filter((item): item is ApplicationMeta =>
125+
!item.folder && item.applicationStatus === "NORMAL"
126+
);
127+
128+
yield put({
129+
type: ReduxActionTypes.FETCH_ALL_APPLICATIONS_SUCCESS,
130+
payload: applications,
131+
});
121132
}
133+
122134
yield put({
123135
type: ReduxActionTypes.FETCH_FOLDER_ELEMENTS_SUCCESS,
124136
payload: { parentFolderId: action.payload.folderId, elements: response.data.data },

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/model/Organization.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static java.util.Optional.ofNullable;
2222
import static org.apache.commons.lang3.ObjectUtils.firstNonNull;
2323
import static org.lowcoder.infra.util.AssetUtils.toAssetPath;
24+
import java.time.Instant;
2425

2526

2627
@Getter

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/repository/UserRepository.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package org.lowcoder.domain.user.repository;
22

33
import java.util.Collection;
4+
import java.util.List;
45

56
import org.lowcoder.domain.user.model.User;
7+
import org.springframework.data.domain.Pageable;
68
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
79
import org.springframework.stereotype.Repository;
810

911
import reactor.core.publisher.Flux;
1012
import reactor.core.publisher.Mono;
13+
import org.springframework.data.mongodb.repository.Query;
1114

1215
@Repository
1316
public interface UserRepository extends ReactiveMongoRepository<User, String> {
@@ -23,4 +26,10 @@ public interface UserRepository extends ReactiveMongoRepository<User, String> {
2326

2427
//email1 and email2 should be equal
2528
Flux<User> findByEmailOrConnections_Email(String email1, String email2);
29+
30+
@Query("{ '_id': { $in: ?0 }, 'state': ?1, 'isEnabled': ?2, $or: [ { 'name': { $regex: ?3, $options: 'i' } }, { '_id': { $regex: ?3, $options: 'i' } } ] }")
31+
Flux<User> findUsersByIdsAndSearchNameForPagination(Collection<String> ids, String state, boolean isEnabled, String searchRegex, Pageable pageable);
32+
33+
@Query(value = "{ '_id': { $in: ?0 }, 'state': ?1, 'isEnabled': ?2, $or: [ { 'name': { $regex: ?3, $options: 'i' } }, { '_id': { $regex: ?3, $options: 'i' } } ] }", count = true)
34+
Mono<Long> countUsersByIdsAndSearchName(Collection<String> ids, String state, boolean isEnabled, String searchRegex);
2635
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserService.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
import java.util.Collection;
44
import java.util.Map;
55

6-
import org.lowcoder.domain.user.model.AuthUser;
7-
import org.lowcoder.domain.user.model.Connection;
8-
import org.lowcoder.domain.user.model.User;
9-
import org.lowcoder.domain.user.model.UserDetail;
6+
import org.lowcoder.domain.user.model.*;
107
import org.lowcoder.infra.annotation.NonEmptyMono;
118
import org.lowcoder.infra.mongo.MongoUpsertHelper.PartialResourceWithId;
9+
import org.springframework.data.domain.Pageable;
1210
import org.springframework.http.codec.multipart.Part;
1311
import org.springframework.web.server.ServerWebExchange;
1412

@@ -68,5 +66,7 @@ public interface UserService {
6866

6967
Flux<User> findBySourceAndIds(String connectionSource, Collection<String> connectionSourceUuids);
7068

71-
}
69+
Flux<User> findUsersByIdsAndSearchNameForPagination(Collection<String> ids, String state, boolean isEnabled, String searchRegex, Pageable pageable);
7270

71+
Mono<Long> countUsersByIdsAndSearchName(Collection<String> ids, String state, boolean isEnabled, String searchRegex);
72+
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/user/service/UserServiceImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.lowcoder.sdk.util.HashUtils;
3737
import org.lowcoder.sdk.util.LocaleUtils;
3838
import org.springframework.dao.DuplicateKeyException;
39+
import org.springframework.data.domain.Pageable;
3940
import org.springframework.http.codec.multipart.Part;
4041
import org.springframework.stereotype.Service;
4142
import org.springframework.web.server.ServerWebExchange;
@@ -473,4 +474,13 @@ public Flux<User> findBySourceAndIds(String connectionSource, Collection<String>
473474
return repository.findByConnections_SourceAndConnections_RawIdIn(connectionSource, connectionSourceUuids);
474475
}
475476

477+
@Override
478+
public Flux<User> findUsersByIdsAndSearchNameForPagination(Collection<String> ids, String state, boolean isEnabled, String searchRegex, Pageable pageable) {
479+
return repository.findUsersByIdsAndSearchNameForPagination(ids, state, isEnabled, searchRegex, pageable);
480+
}
481+
482+
@Override
483+
public Mono<Long> countUsersByIdsAndSearchName(Collection<String> ids, String state, boolean isEnabled, String searchRegex) {
484+
return repository.countUsersByIdsAndSearchName(ids, state, isEnabled, searchRegex);
485+
}
476486
}

0 commit comments

Comments
 (0)