From be68841bd31f9d32d64533a6241e33dd22ffbe73 Mon Sep 17 00:00:00 2001 From: miteruzo Date: Mon, 13 Jul 2026 01:17:11 +0900 Subject: [PATCH] #399 --- backend/app/services/post_import_previewer.rb | 2 +- .../PostOriginalCreatedTimeField.tsx | 26 +- .../src/components/common/FieldWarning.tsx | 18 ++ .../posts/import/PostImportRowDialog.tsx | 262 +++++++++--------- .../posts/import/PostImportRowSummary.tsx | 4 +- frontend/src/lib/postImportSession.ts | 2 +- .../src/pages/posts/PostImportResultPage.tsx | 2 +- .../src/pages/posts/PostImportReviewPage.tsx | 123 ++++---- .../src/pages/posts/PostImportSourcePage.tsx | 43 +-- 9 files changed, 265 insertions(+), 217 deletions(-) create mode 100644 frontend/src/components/common/FieldWarning.tsx diff --git a/backend/app/services/post_import_previewer.rb b/backend/app/services/post_import_previewer.rb index 526b235..cc0d89b 100644 --- a/backend/app/services/post_import_previewer.rb +++ b/backend/app/services/post_import_previewer.rb @@ -182,7 +182,7 @@ class PostImportPreviewer attributes['tags'] = merged_tags(tag_sources) next end - next unless provenance[field] == 'automatic' || attributes[field].blank? + next unless provenance[field] == 'automatic' attributes[field] = value provenance[field] = 'automatic' diff --git a/frontend/src/components/PostOriginalCreatedTimeField.tsx b/frontend/src/components/PostOriginalCreatedTimeField.tsx index 863e344..4ed3d29 100644 --- a/frontend/src/components/PostOriginalCreatedTimeField.tsx +++ b/frontend/src/components/PostOriginalCreatedTimeField.tsx @@ -2,10 +2,11 @@ import DateTimeField from '@/components/common/DateTimeField' import FormField from '@/components/common/FormField' import { Button } from '@/components/ui/button' -import type { FC } from 'react' +import type { FC, ReactNode } from 'react' type Props = { disabled?: boolean + labelAddon?: ReactNode originalCreatedFrom: string | null setOriginalCreatedFrom: (x: string | null) => void originalCreatedBefore: string | null @@ -15,18 +16,25 @@ type Props = { const PostOriginalCreatedTimeField: FC = ( { disabled, + labelAddon, originalCreatedFrom, setOriginalCreatedFrom, originalCreatedBefore, setOriginalCreatedBefore, errors }: Props) => ( - + + オリジナルの作成日時 + {labelAddon} + } + messages={errors}> {({ describedBy, invalid }) => ( <> -
-
+
+
= (
-
-
+
+
= (
) } -const DialogField = ( +const DialogTextField = ( { label, value, origin, warnings, errors, onChange }: { label: string value: string @@ -211,24 +207,20 @@ const DialogField = ( errors?: string[] onChange: (value: string) => void }, ) => ( - ) + } messages={errors}> + {({ describedBy, invalid }) => ( + <> + onChange (ev.target.value)} + aria-describedby={describedBy} + aria-invalid={invalid} + className={inputClass (invalid)}/> + + )} + ) -const DialogArea = ( +const DialogAreaField = ( { label, value, origin, warnings, errors, onChange }: { label: string value: string @@ -237,22 +229,28 @@ const DialogArea = ( errors?: string[] onChange: (value: string) => void }, ) => ( -