このコミットが含まれているのは:
2026-07-18 00:31:02 +09:00
コミット c31d84115d
3個のファイルの変更58行の追加24行の削除
+44 -19
ファイルの表示
@@ -48,6 +48,7 @@ type PreviewResponse = {
tags?: string
fieldWarnings?: Record<string, string[]>
baseWarnings?: string[]
validationErrors?: Record<string, string[]>
existingPost?: {
id: number
title: string
@@ -75,6 +76,12 @@ const previewRowFromResult = (
): PostImportRow => {
const fieldWarnings = result.fieldWarnings ?? { }
const baseWarnings = result.baseWarnings ?? []
const validationErrors = result.validationErrors ?? { }
const hasWarnings =
Object.values (fieldWarnings).some (messages => messages.length > 0)
|| baseWarnings.length > 0
const hasErrors =
Object.values (validationErrors).some (messages => messages.length > 0)
const row: PostImportRow = {
sourceRow,
url: result.url,
@@ -89,7 +96,7 @@ const previewRowFromResult = (
parentPostIds: '' },
fieldWarnings,
baseWarnings,
validationErrors: { },
validationErrors,
provenance: {
url: 'manual',
title: 'automatic',
@@ -104,9 +111,11 @@ const previewRowFromResult = (
automatic: result.tags ?? '',
manual: '' },
status:
Object.keys (fieldWarnings).length > 0 || baseWarnings.length > 0
? 'warning'
: 'ready',
hasErrors
? 'error'
: hasWarnings
? 'warning'
: 'ready',
skipReason: result.existingPost?.id != null ? 'existing' : undefined,
existingPostId: result.existingPost?.id,
existingPost: result.existingPost ?? undefined,
@@ -155,6 +164,36 @@ const fetchPreviewRows = async (
message: string
url: string }> = []
let nextIndex = 0
const previewIssues = (
sourceRow: number,
url: string,
requestError: unknown,
): Array<{ sourceRow: number
message: string
url: string }> => {
if (!(isApiError<{
message?: string
errors?: Record<string, string[]>
baseErrors?: string[]
}> (requestError)))
{
return [{
sourceRow,
message: '入力を確認してください.',
url }]
}
const fieldMessages = Object.values (requestError.response?.data?.errors ?? { }).flat ()
const baseMessages = requestError.response?.data?.baseErrors ?? []
const messages = [...new Set ([...fieldMessages, ...baseMessages])]
return (messages.length > 0 ? messages : [requestError.response?.data?.message ?? '入力を確認してください.'])
.map (message => ({
sourceRow,
message,
url }))
}
const worker = async () => {
while (nextIndex < rows.length)
{
@@ -172,21 +211,7 @@ const fetchPreviewRows = async (
{
if (signal.aborted)
return
const apiMessage =
isApiError<{
message?: string
errors?: Record<string, string[]>
baseErrors?: string[]
}> (requestError)
? (requestError.response?.data?.errors?.url?.[0]
?? requestError.response?.data?.message
?? requestError.response?.data?.baseErrors?.[0])
: undefined
issues.push ({
sourceRow: row.sourceRow,
message: apiMessage ?? '入力を確認してください.',
url: row.url })
issues.push (...previewIssues (row.sourceRow, row.url, requestError))
}
}
}