Add 'articles' collection to create operation

This commit is contained in:
2024-06-23 19:18:25 +04:00
parent 7e6d1f49ba
commit a7eaaac447
4 changed files with 76 additions and 17 deletions
+1 -1
View File
@@ -59,7 +59,7 @@ export default async function Page() {
<Typography mt={1} component='h1' textAlign='center' variant='h4'>{appTitle.toUpperCase()}</Typography> <Typography mt={1} component='h1' textAlign='center' variant='h4'>{appTitle.toUpperCase()}</Typography>
<Sign session={session} /> <Sign session={session} />
{session && ( {session && (
<Create session={session} /> <Create session={session} titres={titres} />
)} )}
<Konstitisyon session={session} titres={titres} articles={articles} /> <Konstitisyon session={session} titres={titres} articles={articles} />
</Container> </Container>
+48 -12
View File
@@ -1,6 +1,6 @@
'use client' 'use client'
import {useRef} from 'react' import {useRef, useState, useEffect} from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import Button from '@mui/material/Button' import Button from '@mui/material/Button'
import TextField from '@mui/material/TextField' import TextField from '@mui/material/TextField'
@@ -10,6 +10,7 @@ import DialogContent from '@mui/material/DialogContent'
import DialogContentText from '@mui/material/DialogContentText' import DialogContentText from '@mui/material/DialogContentText'
import DialogTitle from '@mui/material/DialogTitle' import DialogTitle from '@mui/material/DialogTitle'
import LogoutCountdown from '../../session/logout-countdown.js' import LogoutCountdown from '../../session/logout-countdown.js'
import ListItems from './list-items.js'
import {handleSubmit} from '@/lib/directus.js' import {handleSubmit} from '@/lib/directus.js'
import {formatFormContent} from '@/lib/format.js' import {formatFormContent} from '@/lib/format.js'
@@ -26,9 +27,17 @@ export default function CreateForm({
collection, collection,
title, title,
label, label,
hasMultiline = true hasMultiline = true,
listItems
}) { }) {
const countdownRef = useRef() const countdownRef = useRef()
const [selectValue, setSelectValue] = useState('')
useEffect(() => {
if (listItems && listItems.length > 0) {
setSelectValue(listItems[0].id)
}
}, [listItems])
const handleClose = () => { const handleClose = () => {
setIsOpen(false) setIsOpen(false)
@@ -40,17 +49,36 @@ export default function CreateForm({
const formattedContent = formatFormContent(e.currentTarget) const formattedContent = formatFormContent(e.currentTarget)
if (collection === 'commentaires') { switch (collection) {
requestObject = { case 'commentaires': {
text: formattedContent, requestObject = {
titre: selectedTitre, text: formattedContent,
status: 'draft', titre: selectedTitre,
status: 'draft',
}
break
} }
} else if (collection === 'titres') {
requestObject = { case 'titres': {
contenu: formattedContent, requestObject = {
status: 'draft', contenu: formattedContent,
status: 'draft',
}
break
} }
case 'articles': {
requestObject = {
contenu: formattedContent,
titre: selectValue,
status: 'draft',
}
break
}
// No default
} }
await handleSubmit({ await handleSubmit({
@@ -83,6 +111,13 @@ export default function CreateForm({
<DialogContentText sx={{color: 'white'}}> <DialogContentText sx={{color: 'white'}}>
{dialogText} {dialogText}
</DialogContentText> </DialogContentText>
{listItems && listItems.length > 0 && (
<ListItems
items={listItems}
selectLabel='Titre associé *'
setSelectValue={setSelectValue}
/>
)}
<TextField <TextField
autoFocus autoFocus
required required
@@ -118,5 +153,6 @@ CreateForm.propTypes = {
collection: PropTypes.string.isRequired, collection: PropTypes.string.isRequired,
title: PropTypes.string.isRequired, title: PropTypes.string.isRequired,
label: PropTypes.string.isRequired, label: PropTypes.string.isRequired,
hasMultiline: PropTypes.bool hasMultiline: PropTypes.bool,
listItems: PropTypes.array.isRequired
} }
@@ -10,7 +10,8 @@ export default function HandleCreate({
setSuccess, setSuccess,
setIsErrorAlertOpen, setIsErrorAlertOpen,
setIsSuccessAlertOpen, setIsSuccessAlertOpen,
collection collection,
listItems
}) { }) {
if (collection === 'titres') { if (collection === 'titres') {
return ( return (
@@ -49,6 +50,25 @@ export default function HandleCreate({
/> />
) )
} }
if (collection === 'articles') {
return (
<CreateForm
session={session}
isOpen={isOpen}
setIsOpen={setIsOpen}
setError={setError}
setSuccess={setSuccess}
setIsErrorAlertOpen={setIsErrorAlertOpen}
setIsSuccessAlertOpen={setIsSuccessAlertOpen}
collection={collection}
listItems={listItems}
title='Article'
dialogText='Écrivez votre article'
label='article'
/>
)
}
} }
HandleCreate.propTypes = { HandleCreate.propTypes = {
@@ -60,5 +80,6 @@ HandleCreate.propTypes = {
setSuccess: PropTypes.func.isRequired, setSuccess: PropTypes.func.isRequired,
setIsErrorAlertOpen: PropTypes.func.isRequired, setIsErrorAlertOpen: PropTypes.func.isRequired,
setIsSuccessAlertOpen: PropTypes.func.isRequired, setIsSuccessAlertOpen: PropTypes.func.isRequired,
collection: PropTypes.oneOf(['titres', 'articles']).isRequired collection: PropTypes.oneOf(['titres', 'articles']).isRequired,
listItems: PropTypes.array
} }
+4 -2
View File
@@ -16,7 +16,7 @@ const actions = [
{id: 'articles', icon: <ArticleIcon />, name: 'Créer un article'} {id: 'articles', icon: <ArticleIcon />, name: 'Créer un article'}
] ]
export default function Create({session}) { export default function Create({session, titres}) {
const [collection, setCollection] = useState(null) const [collection, setCollection] = useState(null)
const [isDialogOpen, setIsDialogOpen] = useState(false) const [isDialogOpen, setIsDialogOpen] = useState(false)
const [isErrorAlertOpen, setIsErrorAlertOpen] = useState(false) const [isErrorAlertOpen, setIsErrorAlertOpen] = useState(false)
@@ -73,6 +73,7 @@ export default function Create({session}) {
setIsErrorAlertOpen={setIsErrorAlertOpen} setIsErrorAlertOpen={setIsErrorAlertOpen}
setIsSuccessAlertOpen={setIsSuccessAlertOpen} setIsSuccessAlertOpen={setIsSuccessAlertOpen}
collection={collection} collection={collection}
listItems={titres}
/> />
)} )}
</> </>
@@ -80,5 +81,6 @@ export default function Create({session}) {
} }
Create.propTypes = { Create.propTypes = {
session: PropTypes.object session: PropTypes.object,
titres: PropTypes.array
} }