Newer
Older
import React, { useCallback, useContext, useEffect, useState } from 'react'
import DateSelector from '../DateSelector/DateSelector'
import { NewsletterService } from '../../services/newsletter.service'
import { UserContext, UserContextProps } from '../../hooks/userContext'
import { IMonthlyInfo } from '../../models/monthlyInfo.model'
import { IPoll } from '../../models/poll.model'
import MonthlyInfo from '../MonthlyInfo/MonthlyInfo'
import Loader from '../Loader/Loader'
import './editing.scss'
export type ContentItems = 'monthlyInfo' | 'monthlyNews' | 'poll' | ''
const Editing: React.FC = () => {
const [date, setDate] = useState<Date>(new Date())
const [info, setInfo] = useState<string>('')
const [title, setTitle] = useState<string>('')
const [content, setContent] = useState<string>('')
const [question, setQuestion] = useState<string>('')
const [link, setLink] = useState<string>('')
const [isTouched, setIsTouched] = useState<boolean>(false)
const [refreshData, setRefreshData] = useState(false)
const [isLoading, setisLoading] = useState<boolean>(false)
const [warningModal, setwarningModal] = useState<boolean>(false)
const [toDelete, settoDelete] = useState<ContentItems>('')
const { user }: Partial<UserContextProps> = useContext(UserContext)
const newsletterService = new NewsletterService()
const handleSaveMonthlyInfo = async (): Promise<void> => {
if (user) {
const newsletterService = new NewsletterService()
await newsletterService.saveMonthlyInfo(date, info, user.xsrftoken)
setIsTouched(false)
}
}
const newsletterService = new NewsletterService()
await newsletterService.saveMonthlyNews(
setIsTouched(false)
}
}
const handleSavePoll = async (): Promise<void> => {
if (user) {
await newsletterService.savePoll(date, question, link, user.xsrftoken)
const handleCancel = useCallback(() => {
setRefreshData(true)
const handleDeleteMonthlyInfo = async (): Promise<void> => {
if (user) {
await newsletterService.deleteMonthlyInfo(
date.getFullYear(),
date.getMonth(),
user.xsrftoken
)
setRefreshData(true)
}
}
const handleDeleteMonthlyNews = async (): Promise<void> => {
if (user) {
await newsletterService.deleteMonthlyNews(
date.getFullYear(),
date.getMonth(),
user.xsrftoken
)
setRefreshData(true)
}
}
const handleDeletePoll = async (): Promise<void> => {
if (user) {
await newsletterService.deletePoll(
date.getFullYear(),
date.getMonth(),
user.xsrftoken
)
setRefreshData(true)
}
}
const handleOpenDeleteModal = (target: ContentItems) => {
settoDelete(target)
setwarningModal(true)
}
const handleConfirmAlert = () => {
if (toDelete === 'monthlyInfo') {
handleDeleteMonthlyInfo()
}
if (toDelete === 'monthlyNews') {
handleDeleteMonthlyNews()
}
if (toDelete === 'poll') {
handleDeletePoll()
}
setwarningModal(false)
}
const isEmpty = (): boolean => {
(info !== '' ||
title !== '' ||
content !== '' ||
question !== '' ||
link !== '') &&
isTouched
) {
return false
} else return true
}
const handleEditorChange = (
value: string,
type: 'info' | 'title' | 'content' | 'question' | 'link'
if (type === 'info') {
setInfo(value)
}
if (type === 'title') {
setTitle(value)
if (type === 'content') {
setContent(value)
if (type === 'question') {
setQuestion(value)
}
if (type === 'link') {
setLink(value)
}
setInfo('')
setTitle('')
setContent('')
async function getCurrentMonthlyNews() {
const newsletterService = new NewsletterService()
const montlhyInfo: IMonthlyInfo | null =
await newsletterService.getSingleMonthlyInfo(
date.getFullYear(),
date.getMonth(),
user.xsrftoken
)
await newsletterService.getSingleMonthlyNews(
date.getFullYear(),
date.getMonth(),
user.xsrftoken
)
const poll: IPoll | null = await newsletterService.getSinglePoll(
date.getFullYear(),
date.getMonth(),
user.xsrftoken
)
if (montlhyInfo) {
setInfo(montlhyInfo.info)
setIsTouched(false)
}
setTitle(montlhyNews.title)
setContent(montlhyNews.content)
}
if (poll) {
setLink(poll.link)
setQuestion(poll.question)
setIsTouched(false)
if (subscribed) {
getCurrentMonthlyNews()
}
return () => {
subscribed = false
}, [date, user, refreshData, resetFields])
<div className="header">
<p className="title pagetitle">Édition de la newsletter</p>
<DateSelector date={date} setDate={setDate} isEmpty={isEmpty} />
{isLoading ? (
<Loader />
) : (
<div className="content">
<MonthlyInfo
info={info}
onSave={handleSaveMonthlyInfo}
onCancel={handleCancel}
handleChange={handleEditorChange}
onDelete={handleOpenDeleteModal}
/>
<hr />
title={title}
content={content}
onSave={handleSaveMonthlyNews}
onCancel={handleCancel}
handleChange={handleEditorChange}
/>
<hr />
<Poll
question={question}
link={link}
onSave={handleSavePoll}
onCancel={handleCancel}
handleChange={handleEditorChange}
{warningModal && (
<Modal>
<>
<div className="modal-text">
Etes-vous sûr de vouloir supprimer{' '}
{toDelete === 'monthlyInfo'
? 'cette info mensuelle '
: toDelete === 'monthlyNews'
? 'cette news mensuelle'
: 'ce sondage'}{' '}
?
</div>
<div className="buttons">
<button
className="btnCancel"
onClick={() => setwarningModal(false)}
>
Annuler
</button>
<button className="btnValid" onClick={handleConfirmAlert}>
Continuer
</button>
</div>
</>
</Modal>
)}
}
export default Editing