/* eslint-disable camelcase */ import { createDirectus, rest, authentication, withToken, createItem, readUser, createContentVersion, readContentVersions, saveToContentVersion } 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({ filter: { collection: { _eq: collection } } }) ) ) 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, }) ) ) const contentVersion = await directusClient.request( withToken( accessToken, readContentVersions({ filter: { user_created: { _eq: userId }, key: { _eq: key } } }) ) ) await directusClient.request( withToken( accessToken, saveToContentVersion( contentVersion[0].id, {contenu: content} ) ) ) 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) } } }