| @@ -3,7 +3,7 @@ import toCamel from 'camelcase-keys' | |||
| import { useState } from 'react' | |||
| import PostFormTagsArea from '@/components/PostFormTagsArea' | |||
| import DateTimeField from '@/components/common/DateTimeField' | |||
| import PostOriginalCreatedTimeField from '@/components/PostOriginalCreatedTimeField' | |||
| import Label from '@/components/common/Label' | |||
| import { Button } from '@/components/ui/button' | |||
| import { API_BASE_URL } from '@/config' | |||
| @@ -58,23 +58,11 @@ export default (({ post, onSave }: Props) => { | |||
| <PostFormTagsArea tags={tags} setTags={setTags}/> | |||
| {/* オリジナルの作成日時 */} | |||
| <div> | |||
| <Label>オリジナルの作成日時</Label> | |||
| <div className="my-1"> | |||
| <DateTimeField | |||
| className="mr-2" | |||
| value={originalCreatedFrom ?? undefined} | |||
| onChange={setOriginalCreatedFrom}/> | |||
| 以降 | |||
| </div> | |||
| <div className="my-1"> | |||
| <DateTimeField | |||
| className="mr-2" | |||
| value={originalCreatedBefore ?? undefined} | |||
| onChange={setOriginalCreatedBefore}/> | |||
| より前 | |||
| </div> | |||
| </div> | |||
| <PostOriginalCreatedTimeField | |||
| originalCreatedFrom={originalCreatedFrom} | |||
| setOriginalCreatedFrom={setOriginalCreatedFrom} | |||
| originalCreatedBefore={originalCreatedBefore} | |||
| setOriginalCreatedBefore={setOriginalCreatedBefore}/> | |||
| {/* 送信 */} | |||
| <Button onClick={handleSubmit} | |||
| @@ -0,0 +1,49 @@ | |||
| import DateTimeField from '@/components/common/DateTimeField' | |||
| import Label from '@/components/common/Label' | |||
| import type { FC } from 'react' | |||
| type Props = { | |||
| originalCreatedFrom: string | null | |||
| setOriginalCreatedFrom: (x: string | null) => void | |||
| originalCreatedBefore: string | null | |||
| setOriginalCreatedBefore: (x: string | null) => void } | |||
| export default (({ originalCreatedFrom, | |||
| setOriginalCreatedFrom, | |||
| originalCreatedBefore, | |||
| setOriginalCreatedBefore }: Props) => ( | |||
| <div> | |||
| <Label>オリジナルの作成日時</Label> | |||
| <div className="my-1"> | |||
| <DateTimeField | |||
| className="mr-2" | |||
| value={originalCreatedFrom ?? undefined} | |||
| onChange={setOriginalCreatedFrom} | |||
| onBlur={ev => { | |||
| const v = ev.target.value | |||
| if (!(v)) | |||
| return | |||
| const d = new Date (v) | |||
| if (d.getSeconds () === 0) | |||
| { | |||
| if (d.getMinutes () === 0 && d.getHours () === 0) | |||
| d.setDate (d.getDate () + 1) | |||
| else | |||
| d.setMinutes (d.getMinutes () + 1) | |||
| } | |||
| else | |||
| d.setSeconds (d.getSeconds () + 1) | |||
| setOriginalCreatedBefore (d.toISOString ()) | |||
| }}/> | |||
| 以降 | |||
| </div> | |||
| <div className="my-1"> | |||
| <DateTimeField | |||
| className="mr-2" | |||
| value={originalCreatedBefore ?? undefined} | |||
| onChange={setOriginalCreatedBefore}/> | |||
| より前 | |||
| </div> | |||
| </div>)) satisfies FC<Props> | |||
| @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react' | |||
| import { cn } from '@/lib/utils' | |||
| import type { FC } from 'react' | |||
| import type { FC, FocusEvent } from 'react' | |||
| const pad = (n: number) => n.toString ().padStart (2, '0') | |||
| @@ -22,10 +22,11 @@ const toDateTimeLocalValue = (d: Date) => { | |||
| type Props = { | |||
| value?: string | |||
| onChange?: (isoUTC: string | null) => void | |||
| className?: string } | |||
| className?: string | |||
| onBlur?: (ev: FocusEvent<HTMLInputElement>) => void } | |||
| export default (({ value, onChange, className }: Props) => { | |||
| export default (({ value, onChange, className, onBlur }: Props) => { | |||
| const [local, setLocal] = useState ('') | |||
| useEffect (() => { | |||
| @@ -42,5 +43,6 @@ export default (({ value, onChange, className }: Props) => { | |||
| const v = ev.target.value | |||
| setLocal (v) | |||
| onChange?.(v ? (new Date (v)).toISOString () : null) | |||
| }}/>) | |||
| }} | |||
| onBlur={onBlur}/>) | |||
| }) satisfies FC<Props> | |||
| @@ -4,7 +4,7 @@ import { Helmet } from 'react-helmet-async' | |||
| import { useNavigate } from 'react-router-dom' | |||
| import PostFormTagsArea from '@/components/PostFormTagsArea' | |||
| import DateTimeField from '@/components/common/DateTimeField' | |||
| import PostOriginalCreatedTimeField from '@/components/PostOriginalCreatedTimeField' | |||
| import Form from '@/components/common/Form' | |||
| import Label from '@/components/common/Label' | |||
| import PageTitle from '@/components/common/PageTitle' | |||
| @@ -189,23 +189,11 @@ export default (({ user }: Props) => { | |||
| <PostFormTagsArea tags={tags} setTags={setTags}/> | |||
| {/* オリジナルの作成日時 */} | |||
| <div> | |||
| <Label>オリジナルの作成日時</Label> | |||
| <div className="my-1"> | |||
| <DateTimeField | |||
| className="mr-2" | |||
| value={originalCreatedFrom ?? undefined} | |||
| onChange={setOriginalCreatedFrom}/> | |||
| 以降 | |||
| </div> | |||
| <div className="my-1"> | |||
| <DateTimeField | |||
| className="mr-2" | |||
| value={originalCreatedBefore ?? undefined} | |||
| onChange={setOriginalCreatedBefore}/> | |||
| より前 | |||
| </div> | |||
| </div> | |||
| <PostOriginalCreatedTimeField | |||
| originalCreatedFrom={originalCreatedFrom} | |||
| setOriginalCreatedFrom={setOriginalCreatedFrom} | |||
| originalCreatedBefore={originalCreatedBefore} | |||
| setOriginalCreatedBefore={setOriginalCreatedBefore}/> | |||
| {/* 送信 */} | |||
| <Button onClick={handleSubmit} | |||