@@ -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} | ||||