| @@ -3,7 +3,7 @@ import toCamel from 'camelcase-keys' | |||||
| import { useState } from 'react' | import { useState } from 'react' | ||||
| import PostFormTagsArea from '@/components/PostFormTagsArea' | import PostFormTagsArea from '@/components/PostFormTagsArea' | ||||
| import DateTimeField from '@/components/common/DateTimeField' | |||||
| import PostOriginalCreatedTimeField from '@/components/PostOriginalCreatedTimeField' | |||||
| import Label from '@/components/common/Label' | import Label from '@/components/common/Label' | ||||
| import { Button } from '@/components/ui/button' | import { Button } from '@/components/ui/button' | ||||
| import { API_BASE_URL } from '@/config' | import { API_BASE_URL } from '@/config' | ||||
| @@ -58,23 +58,11 @@ export default (({ post, onSave }: Props) => { | |||||
| <PostFormTagsArea tags={tags} setTags={setTags}/> | <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} | <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 { cn } from '@/lib/utils' | ||||
| import type { FC } from 'react' | |||||
| import type { FC, FocusEvent } from 'react' | |||||
| const pad = (n: number) => n.toString ().padStart (2, '0') | const pad = (n: number) => n.toString ().padStart (2, '0') | ||||
| @@ -22,10 +22,11 @@ const toDateTimeLocalValue = (d: Date) => { | |||||
| type Props = { | type Props = { | ||||
| value?: string | value?: string | ||||
| onChange?: (isoUTC: string | null) => void | 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 ('') | const [local, setLocal] = useState ('') | ||||
| useEffect (() => { | useEffect (() => { | ||||
| @@ -42,5 +43,6 @@ export default (({ value, onChange, className }: Props) => { | |||||
| const v = ev.target.value | const v = ev.target.value | ||||
| setLocal (v) | setLocal (v) | ||||
| onChange?.(v ? (new Date (v)).toISOString () : null) | onChange?.(v ? (new Date (v)).toISOString () : null) | ||||
| }}/>) | |||||
| }} | |||||
| onBlur={onBlur}/>) | |||||
| }) satisfies FC<Props> | }) satisfies FC<Props> | ||||
| @@ -4,7 +4,7 @@ import { Helmet } from 'react-helmet-async' | |||||
| import { useNavigate } from 'react-router-dom' | import { useNavigate } from 'react-router-dom' | ||||
| import PostFormTagsArea from '@/components/PostFormTagsArea' | import PostFormTagsArea from '@/components/PostFormTagsArea' | ||||
| import DateTimeField from '@/components/common/DateTimeField' | |||||
| import PostOriginalCreatedTimeField from '@/components/PostOriginalCreatedTimeField' | |||||
| import Form from '@/components/common/Form' | import Form from '@/components/common/Form' | ||||
| import Label from '@/components/common/Label' | import Label from '@/components/common/Label' | ||||
| import PageTitle from '@/components/common/PageTitle' | import PageTitle from '@/components/common/PageTitle' | ||||
| @@ -189,23 +189,11 @@ export default (({ user }: Props) => { | |||||
| <PostFormTagsArea tags={tags} setTags={setTags}/> | <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} | <Button onClick={handleSubmit} | ||||