Skip to content

Commit b50aafa

Browse files
committed
Fixes issue processing#3456: prevents renaming a file to an existing sibling file
1 parent 83b2039 commit b50aafa

File tree

1 file changed

+27
-3
lines changed

1 file changed

+27
-3
lines changed

Diff for: client/modules/IDE/components/FileNode.jsx

+27-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import classNames from 'classnames';
33
import React, { useState, useRef } from 'react';
44
import { connect } from 'react-redux';
55
import { useTranslation } from 'react-i18next';
6+
import { useSelector } from 'react-redux';
67

78
import * as IDEActions from '../actions/ide';
89
import * as FileActions from '../actions/files';
@@ -88,6 +89,24 @@ const FileNode = ({
8889
const [isDeleting, setIsDeleting] = useState(false);
8990
const [updatedName, setUpdatedName] = useState(name);
9091

92+
const files = useSelector((state) => state.files);
93+
94+
const checkDuplicate = (newName) => {
95+
const parentFolder = files.find((f) => f.id === parentId);
96+
if (!parentFolder) return false;
97+
98+
const siblingFiles = parentFolder.children
99+
.map((childId) => files.find((f) => f.id === childId))
100+
.filter(Boolean)
101+
.filter((file) => file.id !== id);
102+
103+
const isDuplicate = siblingFiles.some(
104+
(f) => f.name.trim().toLowerCase() === newName.trim().toLowerCase()
105+
);
106+
107+
return isDuplicate;
108+
};
109+
91110
const { t } = useTranslation();
92111
const fileNameInput = useRef(null);
93112
const fileOptionsRef = useRef(null);
@@ -157,7 +176,7 @@ const FileNode = ({
157176
};
158177

159178
const saveUpdatedFileName = () => {
160-
if (updatedName !== name) {
179+
if (!checkDuplicate(updatedName) && updatedName !== name) {
161180
updateFileName(id, updatedName);
162181
}
163182
};
@@ -198,8 +217,13 @@ const FileNode = ({
198217
};
199218

200219
const handleFileNameBlur = () => {
201-
validateFileName();
202-
hideEditFileName();
220+
if (!checkDuplicate(updatedName)) {
221+
validateFileName();
222+
hideEditFileName();
223+
} else {
224+
setUpdatedName(name);
225+
hideEditFileName();
226+
}
203227
};
204228

205229
const toggleFileOptions = (event) => {

0 commit comments

Comments
 (0)