158 lines
3.8 KiB
JavaScript
158 lines
3.8 KiB
JavaScript
import PropTypes from 'prop-types'
|
|
import {useEffect, useRef, useState} from 'react'
|
|
import FormHandler from '../form-handler.js'
|
|
import {handleSubmit} from '@/lib/directus.js'
|
|
import {formatFormContent} from '@/lib/format.js'
|
|
|
|
export default function HandleCreate({
|
|
session,
|
|
selectedTitre,
|
|
isOpen,
|
|
setIsOpen,
|
|
setError,
|
|
setSuccess,
|
|
setIsErrorAlertOpen,
|
|
setIsSuccessAlertOpen,
|
|
collection,
|
|
listItems
|
|
}) {
|
|
const countdownRef = useRef()
|
|
const [selectValue, setSelectValue] = useState('')
|
|
|
|
useEffect(() => {
|
|
if (listItems && listItems.length > 0) {
|
|
setSelectValue(listItems[0].id)
|
|
}
|
|
}, [listItems])
|
|
|
|
const handleFormSubmit = async e => {
|
|
e.preventDefault()
|
|
let requestObject
|
|
|
|
const formattedContent = formatFormContent(e.currentTarget)
|
|
|
|
switch (collection) {
|
|
case 'commentaires': {
|
|
requestObject = {
|
|
contenu: formattedContent,
|
|
titre: selectedTitre,
|
|
status: 'draft',
|
|
}
|
|
|
|
break
|
|
}
|
|
|
|
case 'titres': {
|
|
requestObject = {
|
|
contenu: formattedContent,
|
|
status: 'draft',
|
|
}
|
|
|
|
break
|
|
}
|
|
|
|
case 'articles': {
|
|
requestObject = {
|
|
contenu: formattedContent,
|
|
titre: selectValue,
|
|
status: 'draft',
|
|
}
|
|
|
|
break
|
|
}
|
|
// No default
|
|
}
|
|
|
|
await handleSubmit({
|
|
userId: session.user.userId,
|
|
accessToken: session.user.accessToken,
|
|
content: formattedContent,
|
|
collection,
|
|
requestObject,
|
|
setError,
|
|
setSuccess,
|
|
setIsErrorAlertOpen,
|
|
setIsSuccessAlertOpen,
|
|
countdownRef,
|
|
})
|
|
|
|
setIsOpen(false)
|
|
}
|
|
|
|
if (collection === 'titres') {
|
|
return (
|
|
<FormHandler
|
|
session={session}
|
|
isOpen={isOpen}
|
|
setIsOpen={setIsOpen}
|
|
setError={setError}
|
|
setSuccess={setSuccess}
|
|
setIsErrorAlertOpen={setIsErrorAlertOpen}
|
|
setIsSuccessAlertOpen={setIsSuccessAlertOpen}
|
|
hasMultiline={false}
|
|
handleFormSubmit={handleFormSubmit}
|
|
setSelectValue={setSelectValue}
|
|
title='Titre'
|
|
collection={collection}
|
|
dialogText='Écrivez votre titre'
|
|
label='titre'
|
|
/>
|
|
)
|
|
}
|
|
|
|
if (collection === 'commentaires') {
|
|
return (
|
|
<FormHandler
|
|
session={session}
|
|
selectedTitre={selectedTitre}
|
|
isOpen={isOpen}
|
|
setIsOpen={setIsOpen}
|
|
setError={setError}
|
|
setSuccess={setSuccess}
|
|
setIsErrorAlertOpen={setIsErrorAlertOpen}
|
|
setIsSuccessAlertOpen={setIsSuccessAlertOpen}
|
|
handleFormSubmit={handleFormSubmit}
|
|
setSelectValue={setSelectValue}
|
|
title={selectedTitre.titre}
|
|
collection={collection}
|
|
dialogText='Écrivez votre commentaire'
|
|
label='commentaire'
|
|
/>
|
|
)
|
|
}
|
|
|
|
if (collection === 'articles') {
|
|
return (
|
|
<FormHandler
|
|
session={session}
|
|
isOpen={isOpen}
|
|
setIsOpen={setIsOpen}
|
|
setError={setError}
|
|
setSuccess={setSuccess}
|
|
setIsErrorAlertOpen={setIsErrorAlertOpen}
|
|
setIsSuccessAlertOpen={setIsSuccessAlertOpen}
|
|
collection={collection}
|
|
listItems={listItems}
|
|
handleFormSubmit={handleFormSubmit}
|
|
setSelectValue={setSelectValue}
|
|
title='Article'
|
|
dialogText='Écrivez votre article'
|
|
label='article'
|
|
/>
|
|
)
|
|
}
|
|
}
|
|
|
|
HandleCreate.propTypes = {
|
|
session: PropTypes.object,
|
|
selectedTitre: PropTypes.object,
|
|
isOpen: PropTypes.bool.isRequired,
|
|
setIsOpen: PropTypes.func.isRequired,
|
|
setError: PropTypes.func.isRequired,
|
|
setSuccess: PropTypes.func.isRequired,
|
|
setIsErrorAlertOpen: PropTypes.func.isRequired,
|
|
setIsSuccessAlertOpen: PropTypes.func.isRequired,
|
|
collection: PropTypes.oneOf(['titres', 'articles']).isRequired,
|
|
listItems: PropTypes.array
|
|
}
|