Skip to content

Commit e7c458e

Browse files
authored
Merge pull request #96 from abdel-17/append-copy-to-duplicate
feat: resolve copy name conflicts
2 parents 9b090ba + 9ebde36 commit e7c458e

File tree

3 files changed

+24
-24
lines changed

3 files changed

+24
-24
lines changed

packages/svelte-file-tree/src/lib/components/Tree.svelte

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
}
9696
},
9797
shouldClearClipboard = (operation) => operation === "cut",
98-
onResolveNameConflict = () => "cancel",
98+
onResolveNameConflict = () => "default",
9999
onCircularReference = noop,
100100
canCopy = truePredicate,
101101
onCopy = noop,
@@ -308,7 +308,8 @@
308308
}
309309
}
310310
311-
const name = current.node.name;
311+
const node = current.node;
312+
let name = node.name;
312313
if (uniqueNames.has(name)) {
313314
const resolution = await onResolveNameConflict({
314315
operation: "copy",
@@ -322,12 +323,21 @@
322323
case "cancel": {
323324
return false;
324325
}
326+
case "default": {
327+
name = `${node.name} copy`;
328+
for (let i = 2; uniqueNames.has(name); i++) {
329+
name = `${node.name} copy ${i}`;
330+
}
331+
break;
332+
}
325333
}
326334
}
327335
328336
uniqueNames.add(name);
329337
sources.push(current);
330-
copies.push(copyNode(current.node));
338+
const copy = copyNode(node);
339+
copy.name = name;
340+
copies.push(copy);
331341
}
332342
333343
if (sources.length === 0) {
@@ -384,7 +394,8 @@
384394
}
385395
}
386396
387-
const name = current.node.name;
397+
const node = current.node;
398+
const name = node.name;
388399
if (uniqueNames.has(name)) {
389400
const resolution = await onResolveNameConflict({
390401
operation: "move",
@@ -395,15 +406,16 @@
395406
case "skip": {
396407
continue;
397408
}
398-
case "cancel": {
409+
case "cancel":
410+
case "default": {
399411
return false;
400412
}
401413
}
402414
}
403415
404416
uniqueNames.add(name);
405417
sources.push(current);
406-
sourceIds.add(current.node.id);
418+
sourceIds.add(node.id);
407419
sourceParents.add(current.parent);
408420
}
409421

packages/svelte-file-tree/src/lib/components/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export type OnResolveNameConflictArgs<
3131
name: string;
3232
};
3333

34-
export type NameConflictResolution = "skip" | "cancel";
34+
export type NameConflictResolution = "skip" | "cancel" | "default";
3535

3636
export type OnCircularReferenceArgs<
3737
TFile extends FileNode = FileNode,

sites/preview/src/lib/Tree.svelte

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,6 @@
4646
},
4747
},
4848
dialog: {
49-
failedToCopyItems: {
50-
en: "Failed to copy items",
51-
ar: "فشل نسخ العناصر",
52-
},
5349
failedToMoveItems: {
5450
en: "Failed to move items",
5551
ar: "فشل نقل العناصر",
@@ -192,21 +188,13 @@
192188
operation,
193189
name,
194190
}: OnResolveNameConflictArgs<FileNode, FolderNode>) {
195-
return new Promise<NameConflictResolution>((resolve) => {
196-
let title;
197-
switch (operation) {
198-
case "copy": {
199-
title = translations.dialog.failedToCopyItems[lang];
200-
break;
201-
}
202-
case "move": {
203-
title = translations.dialog.failedToMoveItems[lang];
204-
break;
205-
}
206-
}
191+
if (operation === "copy") {
192+
return "default";
193+
}
207194
195+
return new Promise<NameConflictResolution>((resolve) => {
208196
showDialog({
209-
title,
197+
title: translations.dialog.failedToMoveItems[lang],
210198
description: translations.dialog.nameConflictDescription[lang](name),
211199
confirmLabel: translations.dialog.skip[lang],
212200
cancelLabel: translations.dialog.cancel[lang],

0 commit comments

Comments
 (0)