129 lines
2.9 KiB
JavaScript
129 lines
2.9 KiB
JavaScript
/* eslint-disable camelcase */
|
|
import {
|
|
createDirectus, rest, authentication, withToken, createItem,
|
|
readUser, createContentVersion, readContentVersions
|
|
} from '@directus/sdk'
|
|
import {signOut} from 'next-auth/react'
|
|
import {hasRestrictedChar} from './format.js'
|
|
|
|
const apiUrl = process.env.DIRECTUS_API_URL || process.env.NEXT_PUBLIC_DIRECTUS_API_URL
|
|
|
|
export const directusClient = createDirectus(apiUrl)
|
|
.with(authentication('cookie', {credentials: 'include', autoRefresh: true}))
|
|
.with(rest())
|
|
|
|
export async function handleUserStatus(accessToken, userId) {
|
|
const {status} = await directusClient.request(
|
|
withToken(
|
|
accessToken,
|
|
readUser(userId, {
|
|
fields: 'status'
|
|
})
|
|
)
|
|
)
|
|
|
|
if (status !== 'active') {
|
|
signOut()
|
|
throw new Error('Déconnexion')
|
|
}
|
|
}
|
|
|
|
export async function handleSubmit({
|
|
userId,
|
|
accessToken,
|
|
content,
|
|
collection,
|
|
requestObject,
|
|
setError,
|
|
setSuccess,
|
|
setIsErrorAlertOpen,
|
|
setIsSuccessAlertOpen,
|
|
countdownRef,
|
|
}) {
|
|
try {
|
|
if (hasRestrictedChar(content)) {
|
|
setError('Le texte ne doit pas contenir certains caractères spéciaux : <, >, ", .')
|
|
setIsErrorAlertOpen(true)
|
|
return
|
|
}
|
|
|
|
await handleUserStatus(accessToken, userId)
|
|
|
|
await directusClient.request(
|
|
withToken(
|
|
accessToken,
|
|
createItem(collection, requestObject)
|
|
)
|
|
)
|
|
|
|
setSuccess('Envoyé avec succès. En attente de validation.')
|
|
setIsSuccessAlertOpen(true)
|
|
} catch (error) {
|
|
if (error?.errors[0]?.message === 'Token expired.') {
|
|
countdownRef.current.startCountdown()
|
|
} else {
|
|
console.log(error?.errors[0]?.message)
|
|
setError(error?.errors[0]?.message)
|
|
setIsErrorAlertOpen(true)
|
|
}
|
|
}
|
|
}
|
|
|
|
export async function createVersion({
|
|
accessToken,
|
|
userId,
|
|
collection,
|
|
id,
|
|
content,
|
|
countdownRef,
|
|
setSuccess,
|
|
setError,
|
|
setIsErrorAlertOpen,
|
|
setIsSuccessAlertOpen
|
|
}) {
|
|
try {
|
|
if (hasRestrictedChar(content)) {
|
|
throw new Error('Le texte ne doit pas contenir certains caractères spéciaux : <, >, ", .')
|
|
}
|
|
|
|
await handleUserStatus(accessToken, userId)
|
|
|
|
const versions = await directusClient.request(
|
|
withToken(
|
|
accessToken,
|
|
readContentVersions()
|
|
)
|
|
)
|
|
|
|
const versionsCount = versions.length + 1
|
|
|
|
const date = Date.now()
|
|
const name = `v${versionsCount}-${date}`
|
|
const key = `${id}-${date}`
|
|
|
|
await directusClient.request(
|
|
withToken(
|
|
accessToken,
|
|
createContentVersion({
|
|
key,
|
|
name,
|
|
item: id,
|
|
user_created: userId,
|
|
collection,
|
|
})
|
|
)
|
|
)
|
|
|
|
setSuccess(`Version créée avec succès : ${name}`)
|
|
setIsSuccessAlertOpen(true)
|
|
} catch (error) {
|
|
if (error?.errors[0]?.message === 'Token expired.') {
|
|
countdownRef.current.startCountdown()
|
|
} else {
|
|
console.log(error?.errors[0]?.message)
|
|
setError(error?.errors[0]?.message)
|
|
setIsErrorAlertOpen(true)
|
|
}
|
|
}
|
|
}
|