Fix: Resolve Comment Draft Collisions by Using Full File Path (#370)

* fix(FilesView): use file path for drafts labeling

Use file path for draft labels instead of file name for precise grouping
Filter and associate drafts by file path to ensure correct per-file draft retrieval
Improve handling of files with identical names across directories

* fix(PierreDiffViewer): use fileName as label for drafts

Use fileName as the draft label when editing or adding diffs
Fallback to 'unknown' if fileName is missing for draft labels
Align draft filtering to the provided fileName rather than basename

* refactor(ui): remove unused fileLabel computation
This commit is contained in:
Nelson Pires
2026-02-09 16:52:41 +02:00
committed by GitHub
parent 8d8abdb54b
commit 0de201e042
2 changed files with 5 additions and 6 deletions
@@ -750,7 +750,7 @@ export const FilesView: React.FC = () => {
addDraft({
sessionKey,
source: 'file',
fileLabel: selectedFile.name,
fileLabel: selectedFile.path,
startLine: finalRange.start,
endLine: finalRange.end,
code,
@@ -1765,7 +1765,7 @@ export const FilesView: React.FC = () => {
const sessionDrafts = allDrafts[sessionKey] ?? [];
// Filter drafts for current file
const fileDrafts = sessionDrafts.filter(
(d) => d.source === 'file' && d.fileLabel === selectedFile.name
(d) => d.source === 'file' && d.fileLabel === selectedFile.path
);
const widgets: BlockWidgetDef[] = [];
@@ -264,7 +264,6 @@ export const PierreDiffViewer: React.FC<PierreDiffViewerProps> = ({
return;
}
const fileLabel = fileName ? fileName.split('/').pop() || 'unknown' : 'unknown';
// Pierre selection range: { start, end, side }
// Store needs { startLine, endLine, side: 'original'|'modified' }
// Pierre side: 'additions' (right) | 'deletions' (left)
@@ -275,7 +274,7 @@ export const PierreDiffViewer: React.FC<PierreDiffViewerProps> = ({
if (editingDraftId) {
updateDraft(sessionKey, editingDraftId, {
fileLabel,
fileLabel: fileName || 'unknown',
startLine: targetRange.start,
endLine: targetRange.end,
side: storeSide,
@@ -287,7 +286,7 @@ export const PierreDiffViewer: React.FC<PierreDiffViewerProps> = ({
addDraft({
sessionKey,
source: 'diff',
fileLabel,
fileLabel: fileName || 'unknown',
startLine: targetRange.start,
endLine: targetRange.end,
side: storeSide,
@@ -436,7 +435,7 @@ export const PierreDiffViewer: React.FC<PierreDiffViewerProps> = ({
const sessionDrafts = allDrafts[sessionKey] ?? [];
// Match file label logic - use basename
const fileLabel = fileName ? fileName.split('/').pop() || 'unknown' : 'unknown';
const fileLabel = fileName || 'unknown';
const fileDrafts = sessionDrafts.filter((d) => d.source === 'diff' && d.fileLabel === fileLabel);
const anns: DiffLineAnnotation<AnnotationData>[] = [];