Files
pawol.nu/pages/soumet.js
T
2023-03-08 01:37:34 +04:00

128 lines
3.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import {useState, useEffect, forwardRef} from 'react'
import PropTypes from 'prop-types'
import {useSession} from 'next-auth/react'
import MuiAlert from '@mui/material/Alert'
import Snackbar from '@mui/material/Snackbar'
import Box from '@mui/material/Box'
import HeadLayout from '../components/head-layout'
import Koneksyon from '../components/sesyon/koneksyon'
import Dekoneksyon from '../components/sesyon/dekoneksyon'
import EkriTeks from '../components/soumet/ekri-teks'
import Footer from '../components/footer'
import {jwennUserEpiToken, jwennUserEpiUsername} from '../lib/oki-api'
import NewPassword from '../components/password/new-password'
import ChwaTeks from '../components/soumet/chwa-teks'
const Alert = forwardRef(function Alert(props, ref) {
return <MuiAlert ref={ref} elevation={6} variant='filled' {...props} />
})
export default function Soumet({code}) {
const {data: session} = useSession()
const [localUsername, setLocalUsername] = useState(null)
const [username, setUsername] = useState(null)
const [open, setOpen] = useState(true)
const [selectedTeks, setSelectedTeks] = useState(null)
const [canAutoTranslate, setCanAutoTranslate] = useState(false)
const handleClose = (event, reason) => {
if (reason === 'clickaway') {
return
}
setOpen(false)
}
useEffect(() => {
if (session?.jwt) {
const getUser = async token => {
const user = await jwennUserEpiToken(token)
setCanAutoTranslate(user.canAutoTranslate)
}
getUser(session.jwt)
}
})
useEffect(() => {
if (localStorage.getItem('username')) {
const username = localStorage.getItem('username')
setLocalUsername(username)
}
}, [])
useEffect(() => {
if (localUsername) {
const getUser = async username => {
const user = await jwennUserEpiUsername(username)
setUsername(user?.username)
}
getUser(localUsername)
}
}, [localUsername])
useEffect(() => {
if (username && localStorage.getItem('username')) {
localStorage.removeItem('username')
}
}, [username])
return (
<HeadLayout title='Soumèt - Soumettre un texte' summary='Proposez la transcription dun texte, accompagnée dune ou plusieurs traductions.' tab={3} slug='soumet'>
<Box sx={{display: 'flex', flexDirection: 'column', minHeight: '100vh'}}>
<Box sx={{flexGrow: 1, marginTop: 1, marginBottom: 10}}>
{!session && !code && (
<Koneksyon
chimen='/soumet'
/>
)}
{!session && code && (
<NewPassword code={code} />
)}
{session && session.user && (
<>
<Dekoneksyon position='absolute' top={95} left={5} chimen='/soumet' />
<ChwaTeks selectedTeks={selectedTeks} setSelectedTeks={setSelectedTeks} />
<EkriTeks canAutoTranslate={canAutoTranslate} selectedTeks={selectedTeks} setSelectedTeks={setSelectedTeks} />
</>
)}
{session && !session.user && (
<Dekoneksyon position='absolute' top={95} left={5} chimen='/soumet' />
)}
{username && (
<Snackbar
open={open}
autoHideDuration={10_000}
onClose={handleClose}
>
<Alert severity='success' onClose={handleClose}><strong>Bonjour {username}, votre compte a été activé avec succès. Vous pouvez vous connecter.</strong></Alert>
</Snackbar>
)}
</Box>
<Footer />
</Box>
</HeadLayout>
)
}
Soumet.defaultProps = {
code: null
}
Soumet.propTypes = {
code: PropTypes.string
}
export async function getServerSideProps({query}) {
const {code} = query
return {
props: {
code: code || null
}
}
}