import {useEffect, useState, forwardRef} from 'react' import PropTypes from 'prop-types' import Link from 'next/link' import {useSession} from 'next-auth/client' import { Grid, Toolbar, Typography, AppBar, CssBaseline, Drawer, Hidden, IconButton, Box, useMediaQuery, Snackbar, Tooltip, Zoom } from '@mui/material' import KeyboardBackspaceIcon from '@mui/icons-material/KeyboardBackspace' import ExplicitIcon from '@mui/icons-material/Explicit' import MenuIcon from '@mui/icons-material/Menu' import {useTheme, styled} from '@mui/material/styles' import MuiAlert from '@mui/material/Alert' import {formatJsonString} from '../../lib/utils/format' import VweKomante from '../komante/vwe-komante' import Dekoneksyon from '../sesyon/dekoneksyon' import DrawerBar from './drawer-bar' import DenyeTeks from './denye-teks' import VweKouteAchte from './vwe-koute-achte' import OkiMizik from './oki-mizik' import Pataje from './pataje' import EntegreMizik from './entegre-mizik' const PREFIX = 'teks-drawer' const classes = { tooltip: `${PREFIX}-tooltip`, root: `${PREFIX}-root`, drawer: `${PREFIX}-drawer`, appBar: `${PREFIX}-appBar`, menuButton: `${PREFIX}-menuButton`, toolbar: `${PREFIX}-toolbar`, drawerPaper: `${PREFIX}-drawerPaper`, content: `${PREFIX}-content`, list: `${PREFIX}-list`, form: `${PREFIX}-form`, text: `${PREFIX}-text`, gridText: `${PREFIX}-gridText`, grid: `${PREFIX}-grid`, koute: `${PREFIX}-koute`, vwe: `${PREFIX}-vwe`, pataje: `${PREFIX}-pataje` } const Root = styled('div')(( { theme } ) => ({ [`&.${classes.root}`]: { display: 'flex' }, [`& .${classes.drawer}`]: { marginTop: '10em', [theme.breakpoints.up('sm')]: { width: drawerWidth, flexShrink: 0 } }, [`& .${classes.appBar}`]: { borderTop: '2px solid #303030', marginTop: '3rem', [theme.breakpoints.up('sm')]: { width: `calc(100% - ${drawerWidth}px)`, marginLeft: drawerWidth }, zIndex: 1 }, [`& .${classes.menuButton}`]: { [theme.breakpoints.up('sm')]: { display: 'none' } }, [`& .${classes.toolbar}`]: theme.mixins.toolbar, [`& .${classes.drawerPaper}`]: { borderTop: '2px solid #303030', marginTop: '3rem', width: drawerWidth }, [`& .${classes.content}`]: { flexGrow: 1, padding: theme.spacing(1) }, [`& .${classes.list}`]: { marginBottom: '6em' }, [`& .${classes.form}`]: { marginLeft: theme.spacing(1) }, [`& .${classes.text}`]: { marginBottom: '0.5em' }, [`& .${classes.gridText}`]: { border: '2px solid grey', borderRadius: '5px', marginTop: '2em', padding: '1em' }, [`& .${classes.grid}`]: { marginTop: '1em' }, [`& .${classes.koute}`]: { position: 'absolute', right: '40px', top: '8px', [theme.breakpoints.up('sm')]: { top: '10px' } }, [`& .${classes.vwe}`]: { position: 'absolute', right: '90px', top: '8px', [theme.breakpoints.up('sm')]: { top: '10px' } }, [`& .${classes.pataje}`]: { position: 'fixed', top: '59px', left: '110px', zIndex: 2, [theme.breakpoints.up('sm')]: { top: '62px', left: '340px' } } })) const Alert = forwardRef(function Alert(props, ref) { // eslint-disable-line func-names return }) const drawerWidth = 240 const langToArray = anTeks => { const langArray = [] if (anTeks && anTeks.tradiksyon) { const {francais, english, espagnol} = anTeks.tradiksyon if (francais) { langArray.push({title: 'Traduction', flag: 'fr', lang: francais}) } if (english) { langArray.push({title: 'Translation', flag: 'en', lang: english}) } if (espagnol) { langArray.push({title: 'Traducción', flag: 'es', lang: espagnol}) } } return langArray } const alignTeks = (langArray, isMobile) => { if (langArray.length > 0 && !isMobile) { return 'justify' } if (langArray.length > 0 && isMobile) { return 'justify' } if (langArray.length === 0 && isMobile) { return 'justify' } if (langArray.length === 0 && !isMobile) { return 'center' } } const ExplicitTooltip = Tooltip export default function TeksDrawer({teks, anTeks, komante}) { const [session] = useSession() const isMobile = useMediaQuery('(max-width:800px)') const langArray = langToArray(anTeks) const theme = useTheme() const [esMobilOuve, meteEsMobilOuve] = useState(false) const [open, setOpen] = useState(false) const [error, setError] = useState('') const [success, setSuccess] = useState('') const handleClose = (event, reason) => { if (reason === 'clickaway') { return } setOpen(false) setSuccess('') setError('') } const handleDrawerToggle = () => { meteEsMobilOuve(!esMobilOuve) } const container = typeof window === 'undefined' ? undefined : () => window.document.body useEffect(() => { if (error || success) { setOpen(true) } }, [error, success, setOpen]) return ( {anTeks ? ( <> {anTeks.lyen && anTeks.lyen.length > 0 && ( )} {anTeks.kouteyAchtey && anTeks.kouteyAchtey.length > 0 && ( )} > ) : ( Dènyé Tèks )} {anTeks ? ( <> {anTeks.awtis.map(a => a.alias).join(', ')} {anTeks.tit} {anTeks.eksplisit && ( )} {komante && ( )} {session && ( )} {anTeks.user && ( texte soumis par {anTeks.user.username} )} {(anTeks.okiMizikID || anTeks.kouteyAchtey.length > 0) && ( )} {anTeks.okiMizikID && ( )} 0 ? 6 : null}> Transcription {formatJsonString(anTeks.transkripsyon)} {langArray.map(({title, flag, lang}) => ( {flag === 'fr' && ( 🇫🇷 )} {flag === 'en' && ( 🇬🇧 )} {flag === 'es' && ( 🇪🇸 )} {title} {formatJsonString(lang)} ))} {success && ( {success} )} {error && ( Une erreur s’est produite : {error.message} )} > ) : ( )} ) } TeksDrawer.propTypes = { teks: PropTypes.array.isRequired, anTeks: PropTypes.object, komante: PropTypes.array } TeksDrawer.defaultProps = { anTeks: null, komante: null }