このコミットが含まれているのは:
2026-07-14 20:03:11 +09:00
コミット b0c24f319a
11個のファイルの変更849行の追加716行の削除
+10 -16
ファイルの表示
@@ -18,6 +18,7 @@ import { clearPostImportSourceDraft,
loadPostImportSession,
mergeImportResults,
mergeValidatedImportRows,
resultSummaryCounts,
retryImportRow,
savePostImportSession,
type PostImportResultRow,
@@ -92,13 +93,9 @@ const PostImportResultPage: FC<Props> = ({ user }) => {
toast ({ title: '取込状態を保存できませんでした', description: message }))
}, [session, sessionId])
const counts = useMemo (() => ({
created: session?.rows.filter (_1 => _1.importStatus === 'created').length ?? 0,
skipped: session?.rows.filter (_1 => _1.importStatus === 'skipped').length ?? 0,
failed: session?.rows.filter (_1 => _1.importStatus === 'failed').length ?? 0,
invalid:
session?.rows.filter (_1 => effectivePostImportStatus (_1) === 'error').length ?? 0,
}), [session])
const counts = useMemo (
() => resultSummaryCounts (session?.rows ?? []),
[session])
const retry = async (sourceRow: number) => {
if (session == null)
@@ -120,11 +117,7 @@ const PostImportResultPage: FC<Props> = ({ user }) => {
tagSources: row.tagSources,
metadataUrl: row.metadataUrl })),
changed_row: -1 })
const validatedRows = mergeValidatedImportRows (pendingRows, validated.rows).map (row =>
row.sourceRow === sourceRow
&& Object.keys (row.validationErrors ?? { }).length > 0
? { ...row, importStatus: 'failed' as const }
: row)
const validatedRows = mergeValidatedImportRows (pendingRows, validated.rows)
setSession (current =>
current
? { ...current, rows: validatedRows }
@@ -238,20 +231,21 @@ const PostImportResultPage: FC<Props> = ({ user }) => {
</div>
<div className="flex flex-col gap-2 sm:flex-row">
{row.createdPostId && (
{(row.createdPostId != null || row.existingPostId != null) && (
<Button type="button" variant="outline" asChild>
<PrefetchLink to={`/posts/${ row.createdPostId }`}>
<PrefetchLink
to={`/posts/${ row.createdPostId ?? row.existingPostId }`}>
稿
</PrefetchLink>
</Button>)}
{status === 'error' && (
{(status === 'error' || row.importStatus === 'failed') && (
<Button
type="button"
variant="outline"
onClick={() => openRepair (row.sourceRow)}>
</Button>)}
{row.importStatus === 'failed' && (
{row.importStatus === 'failed' && status !== 'error' && (
<>
<Button
type="button"
+17 -8
ファイルの表示
@@ -81,12 +81,10 @@ const PostImportReviewPage: FC<Props> = ({ user }) => {
const counts = useMemo (() => reviewSummaryCounts (rows), [rows])
const processable = useMemo (
() => processableImportRows (rows),
[rows],
)
[rows])
const creatable = useMemo (
() => creatableImportRows (rows),
[rows],
)
[rows])
const reviewRows =
session?.repairMode === 'failed'
? [...rows].sort ((a, b) => {
@@ -126,8 +124,7 @@ const PostImportReviewPage: FC<Props> = ({ user }) => {
['originalCreatedFrom', draft.originalCreatedFrom],
['originalCreatedBefore', draft.originalCreatedBefore],
['duration', draft.duration],
['parentPostIds', draft.parentPostIds],
] as const
['parentPostIds', draft.parentPostIds]] as const
draftFields.forEach (([field, value]) => {
nextAttributes[field] = value
nextProvenance[field] =
@@ -284,6 +281,7 @@ const PostImportReviewPage: FC<Props> = ({ user }) => {
invalidCount={counts.invalid}
processableCount={processable.length}
creatableCount={creatable.length}
skipPlannedCount={counts.skipPlanned}
onBack={() => navigate ('/posts/import')}
onSubmit={submit}/>
@@ -300,11 +298,18 @@ const PostImportReviewPage: FC<Props> = ({ user }) => {
}
const PostImportFooter = (
{ loading, invalidCount, processableCount, creatableCount, onBack, onSubmit }: {
{ loading,
invalidCount,
processableCount,
creatableCount,
skipPlannedCount,
onBack,
onSubmit }: {
loading: boolean
invalidCount: number
processableCount: number
creatableCount: number
skipPlannedCount: number
onBack: () => void
onSubmit: () => void },
) => (
@@ -315,7 +320,11 @@ const PostImportFooter = (
md:items-center md:justify-between">
<div className="flex flex-wrap items-center gap-2 text-sm">
<PostImportStatusBadge value="pending"/>
<span> {processableCount} </span>
<PostImportStatusBadge value="ready"/>
<span> {creatableCount} </span>
<PostImportStatusBadge value="skipped"/>
<span> {skipPlannedCount} </span>
<PostImportStatusBadge value="error"/>
<span> {invalidCount} </span>
</div>
@@ -327,7 +336,7 @@ const PostImportFooter = (
type="button"
onClick={onSubmit}
disabled={loading || processableCount === 0}>
稿
</Button>
</div>
</div>