Newer
Older
import React, { useCallback, useContext, useEffect, useState } from 'react'
import DateSelector from '../DateSelector/DateSelector'
import './editing.scss'
import { MonthlyNewsService } from '../../services/monthlyNews.service'
import { UserContext, UserContextProps } from '../../hooks/userContext'
const Editing: React.FC = () => {
const [date, setDate] = useState<Date>(new Date())
const [header, setHeader] = useState<string>('')
const [quote, setQuote] = useState<string>('')
const [question, setQuestion] = useState<string>('')
const [link, setLink] = useState<string>('')
const [isTouched, setIsTouched] = useState<boolean>(false)
const [isMontlyNewsUpdating, setisMontlyNewsUpdating] =
useState<boolean>(false)
const [isPollUpdating, setisPollUpdating] = useState<boolean>(false)
const { user }: Partial<UserContextProps> = useContext(UserContext)
if (user) {
const monthlyNewsService = new MonthlyNewsService()
await monthlyNewsService.createMonthlyReport(
date,
header,
quote,
user.xsrftoken
)
setIsTouched(false)
}
}
const handleSavePoll = async (): Promise<void> => {
if (user) {
const monthlyNewsService = new MonthlyNewsService()
await monthlyNewsService.createPoll(date, question, link, user.xsrftoken)
console.log('saved')
setIsTouched(false)
setQuote('')
setHeader('')
}, [])
const handleCancelPoll = useCallback(() => {
setLink('')
setQuestion('')
}, [])
const isEmpty = (): boolean => {
if ((quote !== '' || header !== '') && isTouched) {
return false
} else return true
}
): void => {
setIsTouched(true)
if (type === 'header') {
setHeader(value)
if (type === 'question') {
setQuestion(value)
}
if (type === 'link') {
setLink(value)
}
const resetFields = useCallback(() => {
setQuote('')
setHeader('')
setLink('')
setQuestion('')
}, [])
async function getCurrentMonthlyNews() {
if (user) {
const monthlyNewsService = new MonthlyNewsService()
await monthlyNewsService.getSingleMonthlyReport(
date.getFullYear(),
date.getMonth(),
user.xsrftoken
)
const poll: IPoll | null = await monthlyNewsService.getSinglePoll(
date.getFullYear(),
date.getMonth(),
user.xsrftoken
)
if (montlhyNews) {
setHeader(montlhyNews.header)
setQuote(montlhyNews.quote)
setisMontlyNewsUpdating(true)
}
if (poll) {
setLink(poll.link)
setQuestion(poll.question)
setIsTouched(false)
setisPollUpdating(true)
if (subscribed) {
getCurrentMonthlyNews()
}
return () => {
subscribed = false
}
}, [date, user])
<div className="header">
<p className="title pagetitle">
Édition des informations et de la citation du mois
</p>
</div>
<div className="content">
<DateSelector date={date} setDate={setDate} isEmpty={isEmpty} />
<MonthlyNews
header={header}
quote={quote}
onSave={handleSaveMonthlyNews}
onCancel={handleCancelMonthlyNews}
handleChange={handleEditorChange}
/>
<hr />
<Poll
question={question}
link={link}
handleChange={handleEditorChange}
onSave={handleSavePoll}
onCancel={handleCancelPoll}
}
export default Editing