|
|
|
|
@ -5,7 +5,6 @@ import { useRouter } from "next/navigation"
|
|
|
|
|
import { useCallback, useState } from "react"
|
|
|
|
|
import generateUUID from "@lib/generate-uuid"
|
|
|
|
|
import styles from "./post.module.css"
|
|
|
|
|
import type { PostVisibility, Document as DocumentType } from "@lib/types"
|
|
|
|
|
import EditDocumentList from "./edit-document-list"
|
|
|
|
|
import { ChangeEvent } from "react"
|
|
|
|
|
import DatePicker from "react-datepicker"
|
|
|
|
|
@ -21,6 +20,12 @@ const emptyDoc = {
|
|
|
|
|
id: generateUUID()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export type Document = {
|
|
|
|
|
title: string
|
|
|
|
|
content: string
|
|
|
|
|
id: string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const Post = ({
|
|
|
|
|
initialPost,
|
|
|
|
|
newPostParent
|
|
|
|
|
@ -36,7 +41,7 @@ const Post = ({
|
|
|
|
|
const [description, setDescription] = useState(initialPost?.description || "")
|
|
|
|
|
const [expiresAt, setExpiresAt] = useState(initialPost?.expiresAt)
|
|
|
|
|
|
|
|
|
|
const defaultDocs: DocumentType[] = initialPost
|
|
|
|
|
const defaultDocs: Document[] = initialPost
|
|
|
|
|
? initialPost.files?.map((doc) => ({
|
|
|
|
|
title: doc.title,
|
|
|
|
|
content: doc.content,
|
|
|
|
|
@ -53,9 +58,9 @@ const Post = ({
|
|
|
|
|
url: string,
|
|
|
|
|
data: {
|
|
|
|
|
expiresAt: Date | null
|
|
|
|
|
visibility?: PostVisibility
|
|
|
|
|
visibility?: string
|
|
|
|
|
title?: string
|
|
|
|
|
files?: DocumentType[]
|
|
|
|
|
files?: Document[]
|
|
|
|
|
password?: string
|
|
|
|
|
parentId?: string
|
|
|
|
|
}
|
|
|
|
|
@ -93,7 +98,7 @@ const Post = ({
|
|
|
|
|
const [isSubmitting, setSubmitting] = useState(false)
|
|
|
|
|
|
|
|
|
|
const onSubmit = useCallback(
|
|
|
|
|
async (visibility: PostVisibility, password?: string) => {
|
|
|
|
|
async (visibility: string, password?: string) => {
|
|
|
|
|
if (visibility === "protected" && !password) {
|
|
|
|
|
setPasswordModalVisible(true)
|
|
|
|
|
return
|
|
|
|
|
@ -155,30 +160,23 @@ const Post = ({
|
|
|
|
|
|
|
|
|
|
const submitPassword = (password: string) => onSubmit("protected", password)
|
|
|
|
|
|
|
|
|
|
const onChangeExpiration = useCallback((date: Date) => setExpiresAt(date), [])
|
|
|
|
|
const onChangeExpiration = (date: Date) => setExpiresAt(date)
|
|
|
|
|
|
|
|
|
|
const onChangeTitle = useCallback(
|
|
|
|
|
const onChangeTitle =
|
|
|
|
|
(e: ChangeEvent<HTMLInputElement>) => {
|
|
|
|
|
setTitle(e.target.value)
|
|
|
|
|
},
|
|
|
|
|
[setTitle]
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const onChangeDescription = useCallback(
|
|
|
|
|
const onChangeDescription =
|
|
|
|
|
(e: ChangeEvent<HTMLInputElement>) => {
|
|
|
|
|
setDescription(e.target.value)
|
|
|
|
|
},
|
|
|
|
|
[setDescription]
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const updateDocTitle = useCallback(
|
|
|
|
|
(i: number) => (title: string) => {
|
|
|
|
|
const updateDocTitle = (i: number) => (title: string) => {
|
|
|
|
|
setDocs((docs) =>
|
|
|
|
|
docs.map((doc, index) => (i === index ? { ...doc, title } : doc))
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
[setDocs]
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const updateDocContent = (i: number) => (content: string) => {
|
|
|
|
|
setDocs((docs) =>
|
|
|
|
|
@ -190,7 +188,7 @@ const Post = ({
|
|
|
|
|
setDocs((docs) => docs.filter((_, index) => i !== index))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const uploadDocs = (files: DocumentType[]) => {
|
|
|
|
|
const uploadDocs = (files: Document[]) => {
|
|
|
|
|
// if no title is set and the only document is empty,
|
|
|
|
|
const isFirstDocEmpty =
|
|
|
|
|
docs.length <= 1 && (docs.length ? docs[0].title === "" : true)
|
|
|
|
|
|