このコミットが含まれているのは:
2026-07-16 20:54:42 +09:00
コミット cde0a2deae
15個のファイルの変更490行の追加27行の削除
+28 -3
ファイルの表示
@@ -6,7 +6,7 @@ import FieldWarning from '@/components/common/FieldWarning'
import PostDurationField from '@/components/posts/PostDurationField'
import PostTagsField from '@/components/posts/PostTagsField'
import PostTextField from '@/components/posts/PostTextField'
import PostThumbnailPreview from '@/components/posts/PostThumbnailPreview'
import PostImportThumbnailPreview from '@/components/posts/import/PostImportThumbnailPreview'
import type { FC } from 'react'
@@ -56,6 +56,19 @@ const sameDraft = (left: Draft, right: Draft): boolean =>
&& left.tags === right.tags
&& left.parentPostIds === right.parentPostIds
const sameProvenance = (
current: PostImportRow['provenance'],
reset: PostImportRow['resetSnapshot']['provenance'],
): boolean =>
Object.keys (reset).every (field => current[field] === reset[field])
const sameTagSources = (
current: PostImportRow['tagSources'],
reset: PostImportRow['resetSnapshot']['tagSources'],
): boolean =>
(current?.automatic ?? '') === reset.automatic
&& (current?.manual ?? '') === reset.manual
const PostImportRowForm: FC<Props> = (
{ row,
@@ -78,7 +91,12 @@ const PostImportRowForm: FC<Props> = (
const resetDraft = useMemo (
() => buildResetDraft (row),
[row])
const resetDisabled = saving || sameDraft (draft, resetDraft)
const resetDisabled =
saving
|| (sameDraft (draft, resetDraft)
&& sameProvenance (row.provenance, row.resetSnapshot.provenance)
&& sameTagSources (row.tagSources, row.resetSnapshot.tagSources)
&& row.metadataUrl === row.resetSnapshot.metadataUrl)
const update = <Key extends keyof Draft,> (
key: Key,
@@ -145,7 +163,7 @@ const PostImportRowForm: FC<Props> = (
<div className="space-y-4">
<div className="grid gap-6 md:grid-cols-[7rem_minmax(0,1fr)]">
<div className="space-y-3 md:sticky md:top-0 md:self-start">
<PostThumbnailPreview
<PostImportThumbnailPreview
url={draft.thumbnailBase}
className="h-28 w-28"/>
</div>
@@ -154,6 +172,7 @@ const PostImportRowForm: FC<Props> = (
<PostTextField
label="URL"
value={draft.url}
disabled={saving}
warnings={displayRow.fieldWarnings.url}
errors={groupedMessages (
displayRow.validationErrors.url,
@@ -162,6 +181,7 @@ const PostImportRowForm: FC<Props> = (
<PostTextField
label="タイトル"
value={draft.title}
disabled={saving}
warnings={displayRow.fieldWarnings.title}
errors={groupedMessages (
displayRow.validationErrors.title,
@@ -170,12 +190,14 @@ const PostImportRowForm: FC<Props> = (
<PostTextField
label="サムネール基底 URL"
value={draft.thumbnailBase}
disabled={saving}
warnings={displayRow.fieldWarnings.thumbnailBase}
errors={groupedMessages (
displayRow.validationErrors.thumbnailBase,
displayRow.importErrors?.thumbnailBase)}
onChange={value => update ('thumbnailBase', value)}/>
<PostOriginalCreatedTimeField
disabled={saving}
originalCreatedFrom={draft.originalCreatedFrom || null}
setOriginalCreatedFrom={value => update ('originalCreatedFrom', value ?? '')}
originalCreatedBefore={draft.originalCreatedBefore || null}
@@ -189,6 +211,7 @@ const PostImportRowForm: FC<Props> = (
displayRow.importErrors?.originalCreatedBefore)}/>
<PostDurationField
value={draft.duration}
disabled={saving}
errors={groupedMessages (
displayRow.validationErrors.duration,
displayRow.validationErrors.videoMs,
@@ -197,6 +220,7 @@ const PostImportRowForm: FC<Props> = (
onChange={value => update ('duration', value)}/>
<PostTagsField
tags={draft.tags}
disabled={saving}
setTags={value => update ('tags', value)}
warnings={displayRow.fieldWarnings.tags}
errors={groupedMessages (
@@ -206,6 +230,7 @@ const PostImportRowForm: FC<Props> = (
<PostTextField
label="親投稿"
value={draft.parentPostIds}
disabled={saving}
errors={groupedMessages (
displayRow.validationErrors.parentPostIds,
displayRow.importErrors?.parentPostIds)}