このコミットが含まれているのは:
2026-07-16 19:18:35 +09:00
コミット 6f3ccb0ffa
7個のファイルの変更235行の追加33行の削除
+42 -13
ファイルの表示
@@ -16,8 +16,10 @@ import { loadPostImportSession,
creatableImportRows,
initialisePreviewRows,
mergeImportResults,
mergeValidatedImportRow,
mergeValidatedImportRows,
processableImportRows,
replaceImportRow,
resultRepairMode,
reviewSummaryCounts,
savePostImportSession } from '@/lib/postImportSession'
@@ -94,10 +96,6 @@ const PostImportReviewPage: FC<Props> = ({ user }) => {
element?.scrollIntoView ({ block: 'center', behavior: 'smooth' })
}, [editingRow, session?.repairMode])
const updateSessionRows = (nextRows: PostImportRow[]) =>
setSession (current =>
current != null ? { ...current, rows: nextRows } : current)
const saveDraft = async (
row: PostImportRow,
{ draft, resetRequested }: {
@@ -143,10 +141,32 @@ const PostImportReviewPage: FC<Props> = ({ user }) => {
metadataUrl: row.metadataUrl })),
changed_row: urlChanged ? baseRow.sourceRow : -1 })
const validatedRows = initialisePreviewRows (validated.rows)
const target = validatedRows.find (row => row.sourceRow === baseRow.sourceRow)
if (target != null && Object.keys (target.validationErrors).length > 0)
return { saved: false, row: target }
updateSessionRows (mergeValidatedImportRows (nextRows, validatedRows))
const target = validatedRows.find (_1 => _1.sourceRow === baseRow.sourceRow)
const latestSession = sessionRef.current
if (latestSession == null)
return { saved: false, row: null }
if (target == null)
{
const restoredRows = replaceImportRow (latestSession.rows, row)
const restoredSession = {
...latestSession,
rows: restoredRows,
repairMode: resultRepairMode (restoredRows) }
sessionRef.current = restoredSession
setSession (restoredSession)
toast ({ title: '行の再検証結果が不完全でした' })
return { saved: false, row: null }
}
const rows = mergeValidatedImportRow (latestSession.rows, target)
const nextSession = {
...latestSession,
rows,
repairMode: resultRepairMode (rows) }
sessionRef.current = nextSession
setSession (nextSession)
const mergedTarget = rows.find (_1 => _1.sourceRow === baseRow.sourceRow) ?? target
if (Object.keys (mergedTarget.validationErrors).length > 0)
return { saved: false, row: mergedTarget }
return { saved: true, row: null }
}
catch
@@ -211,11 +231,15 @@ const PostImportReviewPage: FC<Props> = ({ user }) => {
metadataUrl: row.metadataUrl })),
changed_row: -1 })
const validatedRows = initialisePreviewRows (validated.rows)
const mergedRows = mergeValidatedImportRows (currentSession.rows, validatedRows)
const latestAfterValidate = sessionRef.current ?? currentSession
const mergedRows = mergeValidatedImportRows (latestAfterValidate.rows, validatedRows)
const firstInvalid = mergedRows.find (row => Object.keys (row.validationErrors).length > 0)
if (firstInvalid != null)
{
const nextSession = { ...currentSession, rows: mergedRows }
const nextSession = {
...latestAfterValidate,
rows: mergedRows,
repairMode: resultRepairMode (mergedRows) }
sessionRef.current = nextSession
setSession (nextSession)
void editRow (firstInvalid)
@@ -234,7 +258,11 @@ const PostImportReviewPage: FC<Props> = ({ user }) => {
provenance: row.provenance,
tagSources: row.tagSources,
metadataUrl: row.metadataUrl })) })
const mergedResults = mergeImportResults (mergedRows, result.rows)
const latestAfterImport = sessionRef.current ?? {
...latestAfterValidate,
rows: mergedRows,
repairMode: resultRepairMode (mergedRows) }
const mergedResults = mergeImportResults (latestAfterImport.rows, result.rows)
const recoverableRows = result.rows.filter (row =>
row.status === 'failed'
&& row.recoverable
@@ -251,7 +279,7 @@ const PostImportReviewPage: FC<Props> = ({ user }) => {
importErrors: undefined }
})
const nextSession = {
...currentSession,
...latestAfterImport,
rows: nextRows,
repairMode: resultRepairMode (nextRows) }
sessionRef.current = nextSession
@@ -304,6 +332,7 @@ const PostImportReviewPage: FC<Props> = ({ user }) => {
<div key={row.sourceRow} id={`post-import-row-${ row.sourceRow }`}>
<PostImportRowSummary
row={row}
editDisabled={loading}
onEdit={() => void editRow (row)}/>
</div>))}
</div>
@@ -344,7 +373,7 @@ const PostImportFooter = (
<span> {skipPlannedCount}</span>
</div>
<div className="flex flex-col gap-2 sm:flex-row">
<Button type="button" variant="outline" onClick={onBack}>
<Button type="button" variant="outline" onClick={onBack} disabled={loading}>
URL
</Button>
<Button