feat: オリジナルの作成日時追加( #101 ) #117
@@ -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>
|
<PostOriginalCreatedTimeField
|
||||||
<Label>オリジナルの作成日時</Label>
|
originalCreatedFrom={originalCreatedFrom}
|
||||||
<div className="my-1">
|
setOriginalCreatedFrom={setOriginalCreatedFrom}
|
||||||
<DateTimeField
|
originalCreatedBefore={originalCreatedBefore}
|
||||||
className="mr-2"
|
setOriginalCreatedBefore={setOriginalCreatedBefore}/>
|
||||||
value={originalCreatedFrom ?? undefined}
|
|
||||||
onChange={setOriginalCreatedFrom}/>
|
|
||||||
以降
|
|
||||||
</div>
|
|
||||||
<div className="my-1">
|
|
||||||
<DateTimeField
|
|
||||||
className="mr-2"
|
|
||||||
value={originalCreatedBefore ?? undefined}
|
|
||||||
onChange={setOriginalCreatedBefore}/>
|
|
||||||
より前
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* 送信 */}
|
{/* 送信 */}
|
||||||
|
miteruzo marked this conversation as resolved
Outdated
|
|||||||
<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>
|
<PostOriginalCreatedTimeField
|
||||||
<Label>オリジナルの作成日時</Label>
|
originalCreatedFrom={originalCreatedFrom}
|
||||||
<div className="my-1">
|
setOriginalCreatedFrom={setOriginalCreatedFrom}
|
||||||
<DateTimeField
|
originalCreatedBefore={originalCreatedBefore}
|
||||||
className="mr-2"
|
setOriginalCreatedBefore={setOriginalCreatedBefore}/>
|
||||||
value={originalCreatedFrom ?? undefined}
|
|
||||||
onChange={setOriginalCreatedFrom}/>
|
|
||||||
以降
|
|
||||||
</div>
|
|
||||||
<div className="my-1">
|
|
||||||
<DateTimeField
|
|
||||||
className="mr-2"
|
|
||||||
value={originalCreatedBefore ?? undefined}
|
|
||||||
onChange={setOriginalCreatedBefore}/>
|
|
||||||
より前
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* 送信 */}
|
{/* 送信 */}
|
||||||
|
miteruzo marked this conversation as resolved
Outdated
みてるぞ
commented
上に同じ. 上に同じ.
|
|||||||
<Button onClick={handleSubmit}
|
<Button onClick={handleSubmit}
|
||||||
|
|||||||
Reference in New Issue
Block a user
オリジナルの作成日時(以降),変更時にオリジナルの作成日時(より前)が自動設定されるやぅにしたぃ.
基本は +1 秒,秒が 0 なら +1 分,分、秒が 0 なら +1 日.