Skip to content

Commit e1856ca

Browse files
committed
feat: resolve copy name conflicts
1 parent 9b090ba commit e1856ca

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

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

Lines changed: 17 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,20 @@
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+
node.name = name;
332+
break;
333+
}
325334
}
326335
}
327336
328337
uniqueNames.add(name);
329338
sources.push(current);
330-
copies.push(copyNode(current.node));
339+
copies.push(copyNode(node));
331340
}
332341
333342
if (sources.length === 0) {
@@ -384,7 +393,8 @@
384393
}
385394
}
386395
387-
const name = current.node.name;
396+
const node = current.node;
397+
const name = node.name;
388398
if (uniqueNames.has(name)) {
389399
const resolution = await onResolveNameConflict({
390400
operation: "move",
@@ -395,15 +405,16 @@
395405
case "skip": {
396406
continue;
397407
}
398-
case "cancel": {
408+
case "cancel":
409+
case "default": {
399410
return false;
400411
}
401412
}
402413
}
403414
404415
uniqueNames.add(name);
405416
sources.push(current);
406-
sourceIds.add(current.node.id);
417+
sourceIds.add(node.id);
407418
sourceParents.add(current.parent);
408419
}
409420

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,

0 commit comments

Comments
 (0)