Skip to content

Commit d16e475

Browse files
committed
[Fix]: #1928 folder edit/create issues
1 parent f4f6941 commit d16e475

File tree

3 files changed

+38
-30
lines changed

3 files changed

+38
-30
lines changed

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ export const StyledTypographyText = styled(AntdTypographyText)`
143143
&:hover {
144144
color: #315efb;
145145
}
146-
}
147146
`;
148147

149148
const MONTH_MILLIS = 30 * 24 * 60 * 60 * 1000;
@@ -244,11 +243,15 @@ export function HomeResCard(props: { res: HomeRes; onMove: (res: HomeRes) => voi
244243
const Icon = resInfo.icon;
245244

246245
const handleModalOk = (values: any) => {
247-
res.type === HomeResTypeEnum.Folder &&
248-
dispatch(updateFolder({ id: res.id, name: values.appName || res.name }))
249-
dispatch(
250-
updateAppMetaAction({ applicationId: res.id, name: values.appName || res.name, folderId: folderId })
251-
);
246+
if (res.type === HomeResTypeEnum.Folder) {
247+
// Update folder
248+
dispatch(updateFolder({ id: res.id, name: values.appName || res.name }));
249+
} else {
250+
// Update application
251+
dispatch(
252+
updateAppMetaAction({ applicationId: res.id, name: values.appName || res.name, folderId: folderId })
253+
);
254+
}
252255

253256
setDialogVisible(false);
254257
setTimeout(() => {

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

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ import { AppTypeEnum } from "constants/applicationConstants";
1212
import { CopyModal } from "pages/common/copyModal";
1313
import { messageInstance } from "lowcoder-design/src/components/GlobalInstances";
1414
import ApplicationApi from "../../api/applicationApi";
15-
import { FolderApi } from "../../api/folderApi";
16-
import { ReduxActionTypes } from "constants/reduxActionConstants";
15+
import { deleteFolder } from "../../redux/reduxActions/folderActions";
1716

1817
const PopoverIcon = styled(PointIcon)`
1918
cursor: pointer;
@@ -120,27 +119,24 @@ export const HomeResOptions = (props: {
120119
type: HomeResInfo[res.type].name.toLowerCase(),
121120
name: <b>{res.name}</b>,
122121
}),
123-
onConfirm: async () => {
124-
try {
125-
await FolderApi.deleteFolder({
122+
onConfirm: () => {
123+
dispatch(deleteFolder(
124+
{
126125
folderId: res.id,
127126
parentFolderId: folderId || ""
128-
});
129-
130-
// Update Redux state to remove deleted folder from dropdown
131-
dispatch({
132-
type: ReduxActionTypes.DELETE_FOLDER_SUCCESS,
133-
payload: { folderId: res.id, parentFolderId: folderId || "" }
134-
});
135-
136-
messageInstance.success(trans("home.deleteSuccessMsg"));
137-
setTimeout(() => {
138-
setModify(!modify);
139-
}, 200);
140-
} catch (error) {
141-
console.error("Failed to delete folder:", error);
142-
messageInstance.error("Failed to delete folder");
143-
}
127+
},
128+
() => {
129+
// Success callback
130+
messageInstance.success(trans("home.deleteSuccessMsg"));
131+
setTimeout(() => {
132+
setModify(!modify);
133+
}, 200);
134+
},
135+
() => {
136+
// Error callback
137+
messageInstance.error("Failed to delete folder");
138+
}
139+
));
144140
},
145141
confirmBtnType: "delete",
146142
okText: trans("delete"),

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { HomeRes } from "./HomeLayout";
22
import { default as Form } from "antd/es/form";
3-
import React, { useState } from "react";
3+
import React, { useState, useEffect } from "react";
44
import { useDispatch, useSelector } from "react-redux";
55
import { useParams } from "react-router-dom";
66
import {
@@ -11,10 +11,10 @@ import {
1111
FormSelectItem,
1212
TacoButton,
1313
} from "lowcoder-design";
14-
import { moveToFolder } from "../../redux/reduxActions/folderActions";
14+
import { moveToFolder, fetchFolderElements } from "../../redux/reduxActions/folderActions";
1515
import styled from "styled-components";
1616
import { trans } from "../../i18n";
17-
import { foldersSelector } from "../../redux/selectors/folderSelector";
17+
import { foldersSelector, isFetchingFolderElements } from "../../redux/selectors/folderSelector";
1818

1919
const MoveLabel = styled.div`
2020
font-size: 13px;
@@ -47,11 +47,20 @@ export const MoveToFolderModal = (props: { source?: HomeRes; onClose: () => void
4747
const [loading, setLoading] = useState<boolean>(false);
4848

4949
const folders = useSelector(foldersSelector);
50+
const isFetching = useSelector(isFetchingFolderElements);
5051

5152
const dispatch = useDispatch();
5253

5354
const { folderId } = useParams<{ folderId: string }>();
5455

56+
// Fetch folders when modal opens to populate Redux state (only if not already loaded or fetching)
57+
useEffect(() => {
58+
if (props.source && folders.length === 0 && !isFetching) {
59+
// Dispatch the Redux action to fetch folders (empty folderId fetches all folders)
60+
dispatch(fetchFolderElements({}));
61+
}
62+
}, [props.source, dispatch, folders.length, isFetching]);
63+
5564
return (
5665
<CustomModal
5766
open={!!props.source}

0 commit comments

Comments
 (0)