mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Merge pull request #13068 from overleaf/td-history-renamed-file-auto-select
History migration: Fix bug that prevents renamed files being automatically selected GitOrigin-RevId: ce127b218d1eb472fe7b35467a17549f3db4bfb7
This commit is contained in:
parent
0aefc76f79
commit
6c2bc2fe8b
4 changed files with 82 additions and 4 deletions
|
@ -6,6 +6,7 @@ import { ReactNode, useCallback } from 'react'
|
||||||
import type { HistoryFileTree, HistoryDoc } from '../../utils/file-tree'
|
import type { HistoryFileTree, HistoryDoc } from '../../utils/file-tree'
|
||||||
import { useHistoryContext } from '../../context/history-context'
|
import { useHistoryContext } from '../../context/history-context'
|
||||||
import { FileDiff } from '../../services/types/file'
|
import { FileDiff } from '../../services/types/file'
|
||||||
|
import { fileFinalPathname } from '../../utils/file-diff'
|
||||||
|
|
||||||
type HistoryFileTreeFolderListProps = {
|
type HistoryFileTreeFolderListProps = {
|
||||||
folders: HistoryFileTree[]
|
folders: HistoryFileTree[]
|
||||||
|
@ -69,7 +70,10 @@ function HistoryFileTreeFolderList({
|
||||||
key={doc.pathname}
|
key={doc.pathname}
|
||||||
name={doc.name}
|
name={doc.name}
|
||||||
file={doc}
|
file={doc}
|
||||||
selected={selection.selectedFile?.pathname === doc.pathname}
|
selected={
|
||||||
|
!!selection.selectedFile &&
|
||||||
|
fileFinalPathname(selection.selectedFile) === doc.pathname
|
||||||
|
}
|
||||||
onClick={handleClick}
|
onClick={handleClick}
|
||||||
onKeyDown={handleKeyDown}
|
onKeyDown={handleKeyDown}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -4,6 +4,7 @@ import type { Nullable } from '../../../../../types/utils'
|
||||||
import type { FileDiff } from '../services/types/file'
|
import type { FileDiff } from '../services/types/file'
|
||||||
import type { FileOperation } from '../services/types/file-operation'
|
import type { FileOperation } from '../services/types/file-operation'
|
||||||
import type { LoadedUpdate, Version } from '../services/types/update'
|
import type { LoadedUpdate, Version } from '../services/types/update'
|
||||||
|
import { fileFinalPathname } from './file-diff'
|
||||||
|
|
||||||
type FileWithOps = {
|
type FileWithOps = {
|
||||||
pathname: FileDiff['pathname']
|
pathname: FileDiff['pathname']
|
||||||
|
@ -97,9 +98,10 @@ export function autoSelectFile(
|
||||||
|
|
||||||
if (fileWithMatchingOpType != null) {
|
if (fileWithMatchingOpType != null) {
|
||||||
fileToSelect =
|
fileToSelect =
|
||||||
_.find(files, {
|
_.find(
|
||||||
pathname: fileWithMatchingOpType.pathname,
|
files,
|
||||||
}) ?? null
|
file => fileFinalPathname(file) === fileWithMatchingOpType.pathname
|
||||||
|
) ?? null
|
||||||
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,3 +7,7 @@ export function isFileRenamed(fileDiff: FileDiff): fileDiff is FileRenamed {
|
||||||
export function isFileRemoved(fileDiff: FileDiff): fileDiff is FileRemoved {
|
export function isFileRemoved(fileDiff: FileDiff): fileDiff is FileRemoved {
|
||||||
return (fileDiff as FileRemoved).operation === 'removed'
|
return (fileDiff as FileRemoved).operation === 'removed'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function fileFinalPathname(fileDiff: FileDiff) {
|
||||||
|
return isFileRenamed(fileDiff) ? fileDiff.newPathname : fileDiff.pathname
|
||||||
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ import type { FileDiff } from '../../../../../frontend/js/features/history/servi
|
||||||
import { autoSelectFile } from '../../../../../frontend/js/features/history/utils/auto-select-file'
|
import { autoSelectFile } from '../../../../../frontend/js/features/history/utils/auto-select-file'
|
||||||
import type { User } from '../../../../../frontend/js/features/history/services/types/shared'
|
import type { User } from '../../../../../frontend/js/features/history/services/types/shared'
|
||||||
import { LoadedUpdate } from '../../../../../frontend/js/features/history/services/types/update'
|
import { LoadedUpdate } from '../../../../../frontend/js/features/history/services/types/update'
|
||||||
|
import { fileFinalPathname } from '../../../../../frontend/js/features/history/utils/file-diff'
|
||||||
|
|
||||||
describe('autoSelectFile', function () {
|
describe('autoSelectFile', function () {
|
||||||
const historyUsers: User[] = [
|
const historyUsers: User[] = [
|
||||||
|
@ -718,5 +719,72 @@ describe('autoSelectFile', function () {
|
||||||
|
|
||||||
expect(pathname).to.equal('certainly_not_main.tex')
|
expect(pathname).to.equal('certainly_not_main.tex')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('selects renamed file', function () {
|
||||||
|
const files: FileDiff[] = [
|
||||||
|
{
|
||||||
|
pathname: 'main.tex',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pathname: 'original.bib',
|
||||||
|
newPathname: 'new.bib',
|
||||||
|
operation: 'renamed',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
const updates: LoadedUpdate[] = [
|
||||||
|
{
|
||||||
|
fromV: 4,
|
||||||
|
toV: 7,
|
||||||
|
meta: {
|
||||||
|
users: historyUsers,
|
||||||
|
start_ts: 1680874742389,
|
||||||
|
end_ts: 1680874755552,
|
||||||
|
},
|
||||||
|
labels: [],
|
||||||
|
pathnames: [],
|
||||||
|
project_ops: [
|
||||||
|
{
|
||||||
|
rename: {
|
||||||
|
pathname: 'original.bib',
|
||||||
|
newPathname: 'new.bib',
|
||||||
|
},
|
||||||
|
atV: 5,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
fromV: 0,
|
||||||
|
toV: 4,
|
||||||
|
meta: {
|
||||||
|
users: historyUsers,
|
||||||
|
start_ts: 1680861975947,
|
||||||
|
end_ts: 1680861988442,
|
||||||
|
},
|
||||||
|
labels: [],
|
||||||
|
pathnames: [],
|
||||||
|
project_ops: [
|
||||||
|
{
|
||||||
|
add: {
|
||||||
|
pathname: 'original.bib',
|
||||||
|
},
|
||||||
|
atV: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
add: {
|
||||||
|
pathname: 'main.tex',
|
||||||
|
},
|
||||||
|
atV: 0,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
const pathname = fileFinalPathname(
|
||||||
|
autoSelectFile(files, updates[0].toV, comparing, updates)
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(pathname).to.equal('new.bib')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue