'use client' import {useState} from 'react' import PropTypes from 'prop-types' import Box from '@mui/material/Box' import Button from '@mui/material/Button' import Dialog from '@mui/material/Dialog' import DialogTitle from '@mui/material/DialogTitle' import DialogContent from '@mui/material/DialogContent' import DialogActions from '@mui/material/DialogActions' import TextField from '@mui/material/TextField' import Typography from '@mui/material/Typography' import FormControl from '@mui/material/FormControl' import InputLabel from '@mui/material/InputLabel' import Select from '@mui/material/Select' import MenuItem from '@mui/material/MenuItem' import Link from '@mui/material/Link' import {Mastodon} from '@icons-pack/react-simple-icons' const BOKANTE_URL = process.env.NEXT_PUBLIC_BOKANTE_URL || 'https://bokante.o-k-i.net' const BOKANTE_ACCOUNT = process.env.NEXT_PUBLIC_BOKANTE_ACCOUNT || 'pawol_nu' const INSTANCES_SUGGEREES = [ {domain: 'bokante.o-k-i.net', label: 'BOKANTE - notre instance'}, {domain: 'mastodon.social', label: 'mastodon.social'}, {domain: 'piaille.fr', label: 'piaille.fr'}, ] const AUTRE_INSTANCE = 'autre' function extraireInstance(saisie) { const valeur = saisie.trim().replace(/^@/, '').replace(/^https?:\/\//, '').replace(/\/$/, '') return valeur.includes('@') ? valeur.split('@').pop() : valeur } export default function ReponsMastodon({bokanteStatusId}) { const [ouvert, setOuvert] = useState(false) const [instance, setInstance] = useState(INSTANCES_SUGGEREES[0].domain) const [autreInstance, setAutreInstance] = useState('') if (!bokanteStatusId) { return null } const tootUrl = `${BOKANTE_URL}/@${BOKANTE_ACCOUNT}/${bokanteStatusId}` const repondre = () => { const domaine = instance === AUTRE_INSTANCE ? extraireInstance(autreInstance) : instance if (!domaine) { return } window.open(`https://${domaine}/authorize_interaction?uri=${encodeURIComponent(tootUrl)}`, '_blank', 'noopener,noreferrer') setOuvert(false) setAutreInstance('') } return ( Rejoignez la discussion sur le Fediverse via{' '} BOKANTE (Mastodon) setOuvert(false)}> Répondre depuis Mastodon Choisissez l’instance Mastodon sur laquelle vous avez un compte. BOKANTE est l’instance de OKI : vous pouvez aussi utiliser n’importe quelle autre instance du Fediverse. Instance Mastodon {instance === AUTRE_INSTANCE && ( setAutreInstance(event.target.value)} onKeyDown={event => { if (event.key === 'Enter') { repondre() } }} /> )} ) } ReponsMastodon.propTypes = { bokanteStatusId: PropTypes.string }