Jitsi Conférence vidéo

:discourse2: Résumé Jitsi Video Conference permet d’intégrer des appels vidéo Jitsi dans les publications Discourse.
:hammer_and_wrench: Lien vers le dépôt https://github.com/discourse/discourse-jitsi
:open_book: Nouveau sur les thèmes Discourse ? Guide pour débutants sur l’utilisation des thèmes Discourse

Installer ce composant de thème

Fonctionnalités

  • Les administrateurs peuvent utiliser leur propre instance de serveur Jitsi
  • Ajoute une icône dans la barre d’outils de l’éditeur (peut être limitée au personnel uniquement dans les paramètres du composant)
  • Affiche un bouton avec une icône et un libellé configurables dans les publications


Paramètres

Nom Description
Afficher dans le menu déroulant des options Si décoché, l’icône est affichée dans la barre d’outils de l’éditeur.
Disponible uniquement au personnel
Domaine meet.jitsi Domaine uniquement (sans protocole, sans barre oblique finale).
Source du script Jitsi URL du fichier JavaScript de l’API externe. Si vous modifiez cette valeur, vous devrez également ajouter l’URL au paramètre du site ‘source de script de sécurité du contenu’.
Icône du bouton Entrez le nom de l’icône FontAwesome 5 à afficher dans le bouton Jitsi.
Bouton de chat Intégrer avec Discourse Chat
Masquer les boutons de l’iframe Masquer aux utilisateurs le choix des paramètres iframe ; les paramètres par défaut ci-dessous seront utilisés.
iframe mobile par défaut Activer le mode iframe par défaut pour les appareils mobiles
iframe bureau par défaut Activer le mode iframe par défaut pour les ordinateurs de bureau
Position du bouton de chat Position du bouton dans la fenêtre de chat
Icônes SVG Si vous utilisez une icône personnalisée, ajoutez-la également dans ce champ (en plus de ‘button_icon’ ci-dessus)
Traduction Valeur par défaut
composer_title Discourse Jitsi
room_label ID de la salle Jitsi
button_text_label Libellé du bouton
launch_jitsi Démarrer la conférence vidéo
modal.room_field_description Entrez un ID pour votre salle (ou laissez vide pour utiliser un ID généré aléatoirement).
modal.insert Insérer
modal.cancel Annuler
modal.title Ajouter l’intégration Jitsi
modal.mobile_iframe Afficher dans une iframe sur les appareils mobiles
modal.desktop_iframe Afficher dans une iframe sur les ordinateurs de bureau

:discourse2: Hébergé par nous ? Les composants de thème sont disponibles sur nos offres Standard, Business et Entreprise.

43 « J'aime »

Bonjour, merci pour ce post et ce plugin. J’ai supprimé certains de mes messages de l’autre fil pour limiter la confusion. J’ai installé et testé le composant.

Je ne vois pas de Aperçu Discourse lors de la rédaction d’une conférence vidéo dans un nouveau message.
Voyez-vous un aperçu ?

2 « J'aime »

Super ! @downey, pourrions-nous essayer cela avec votre serveur Jitsi ? Je n’en ai pas pour le moment, mais je serais peut-être intéressé à en configurer un.

Je venais d’avoir des difficultés avec un appel familial sur GoToMeeting et serais intéressé à essayer quelque chose de nouveau qui est simplement intégré dans un sujet Discourse. Ce serait encore mieux si c’est avec Jitsi !

1 « J'aime »

Y a-t-il des préoccupations concernant l’utilisation du serveur gratuit fourni par Jitsi ?

1 « J'aime »

Y a-t-il un problème à utiliser le serveur Jitsi fourni gratuitement ?

Nous l’avons testé et il fonctionne bien pour environ 10 personnes. Les performances deviennent inutilisables au-delà de 20 participants, il est donc préférable d’exécuter votre propre instance pour les appels de groupes plus importants, ainsi que pour l’intégration avec Slack et Etherpad.

4 « J'aime »

Cela me fait penser : la raison pour laquelle nos tests Jitsi ont été arrêtés, c’est que Jitsi incite les utilisateurs mobiles à installer une application, du moins sur iOS. Nous envisageons à nouveau BigBlueButton, qui fonctionne via le navigateur sur mobile et ordinateur de bureau.

Je me demande si @pmusaraj serait intéressé pour examiner leur API afin de voir dans quelle mesure, le cas échéant, le travail effectué sur ce composant pourrait également être utilisé là-bas…

6 « J'aime »

Est-ce que cela aide si vos utilisateurs peuvent également téléphoner ? Pour ma part, l’application iOS est excellente, elle est entièrement open source et, à ma connaissance, très facile à utiliser. J’ai remarqué que l’application est essentiellement une réplique de l’application Zoom pour iOS et Android, que presque tous mes connaissances utilisent.

2 « J'aime »

Je veux dire, si j’ai le choix entre une solution de visioconférence qui fonctionne nativement et une qui nécessite une application, je vais probablement renoncer à installer l’application supplémentaire.

3 « J'aime »

C’est un peu (pas tout à fait) comme demander à tout le monde qui souhaite avoir une conversation donnée en utilisant Discourse comme plateforme d’utiliser meta. :slight_smile:

Oui, c’est vrai, et je n’ai pas encore réfléchi aux implications d’utiliser une interface mobile intégrée dans Discourse de cette manière.

J’ai aussi entendu de bonnes choses sur BBB, en particulier pour des événements plus de type « webinaire ». Une intégration pour cela serait également bienvenue :slight_smile:

À ma connaissance, c’est l’inverse : Zoom a copié beaucoup d’éléments de l’interface utilisateur/expérience utilisateur (UI/UX) de Jitsi et d’autres outils de visioconférence au fil des ans.

6 « J'aime »

Pour info, je rencontre une erreur lors de la configuration du composant de thème pour utiliser ma propre instance Jitsi installée. La syntaxe normale d’URL de salle fonctionne parfaitement, mais pour une raison inconnue, j’obtiens une erreur 404 lorsque j’essaie d’utiliser le bouton. Malheureusement, je n’aurai pas le temps cette semaine pour dépanner…

3 « J'aime »

@pmusaraj, merci pour le composant !

Y a-t-il un moyen d’ajouter un générateur de mots aléatoires pour la création de salles ? Ou peut-être un horodatage/epoch ? Je bloque mentalement à chaque fois que je crée une salle dans Discourse. :slight_smile:

3 « J'aime »

« Les bons artistes copient, les grands artistes volent » — au début de la journée, ce que l’utilisateur voit, c’est le produit actuel, pas son historique.

Dans quelle mesure les performances de Jitsi s’améliorent-elles avec votre propre instance ? Je croyais que la communication devenait pair-à-pair une fois l’appel établi.

Nous avons besoin d’une solution capable de gérer de grands groupes, et dans l’état actuel des choses (en utilisant meet.jit.si), je trouve que la qualité est souvent trop médiocre, même pour des appels d’une personne à une autre.

Jitsi fonctionne uniquement en pair à pair dans les sessions 1:1. Tout groupe plus important est acheminé via le serveur.

Même les instances dédiées auto-hébergées que nous avons testées saturent assez rapidement.

1 « J'aime »

Peut-être qu’ils devraient proposer une option d’hébergement géré payant en plus de l’option d’auto-hébergement… cela pourrait les aider à identifier les problèmes du logiciel à grande échelle :thinking:

3 « J'aime »

Je pense que le principal problème est que, pour tout déploiement à une certaine échelle, jitsi-videobridge nécessite vraiment un hôte dédié, avec le composant jitsi-meet installé séparément. Le premier est le serveur de streaming, tandis que meet ne fournit que l’interface utilisateur.

Malheureusement, la méthode d’installation la plus courante est le déploiement semi-automatisé sur un seul hôte. Leur installation rapide s’effectue entièrement dans Docker et est très simple.

En revanche, l’installation manuelle détaillée, qui permet de déployer les composants séparément, risque de décourager rapidement les nouveaux utilisateurs.

9 « J'aime »

Je n’arrive pas à faire fonctionner cela, même avec le serveur par défaut meet.jit.si. Quelle que soit l’ID de réunion que je saisis, j’obtiens simplement une boîte grise au lieu de la réunion vidéo.

1 « J'aime »

Quoi de neuf dans la console ?

Salut Tobias, ça fonctionne ici (avec Chrome et Firefox), version 2.5.0 beta2, quelques plugins, un serveur Jitsi fraîchement installé il y a +/- 48 heures … :face_with_raised_eyebrow:

J’essaie actuellement d’implémenter JWT, mais je risque d’être un peu dépassé :exploding_head:, et je me demandais aussi s’il ne serait pas préférable d’importer external_api.js depuis settings.meet_jitsi_domain plutôt que depuis https://meet.jit.si ?
voici : https://github.com/pmusaraj/discourse-jitsi/blob/master/javascripts/discourse/initializers/insert-jitsi.js.es6

2 « J'aime »

Hmm… lots of errors in the console. This happens on my personal instance and on a new hosted trial site just created. I’m using the default meet.jit.si server, have made no changes to the theme component settings.

I don’t have my own jitsi server (yet) and thought it would work out of the box…

click to see
Logger.js:154 2020-04-11T19:21:21.250Z [modules/util/JitsiLocalStorage.js] <new <anonymous>>:  DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
    at new <anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:29:197547)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:29:197486)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:29:197742)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:54:98101)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:24:101984)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:29:222225)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:24:213733)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:29:196138)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:24:154819)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:63:41390)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:54:53082)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:54:55490)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:54:165081)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:54:166745)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:126:292708)
    at Object.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:126:323867)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at Module.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:222:80217)
    at n (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:110)
    at https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:908
    at https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:1:919
o @ Logger.js:154
(anonymous) @ JitsiLocalStorage.js:42
(anonymous) @ JitsiLocalStorage.js:77
(anonymous) @ app.bundle.min.js?v=3962.622:29
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:54
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:29
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:29
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:63
n @ bootstrap:19
(anonymous) @ AuthHandler.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:54
n @ bootstrap:19
(anonymous) @ connection.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:54
n @ bootstrap:19
(anonymous) @ conference.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:126
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:222
n @ bootstrap:19
(anonymous) @ bootstrap:83
(anonymous) @ app.bundle.min.js?v=3962.622:1
Show 2 more frames
Logger.js:154 2020-04-11T19:21:21.252Z [features/local-recording] <Object._loadMetadata>:  Failed to parse localStorage item.
o @ Logger.js:154
_loadMetadata @ SessionManager.js:170
(anonymous) @ SessionManager.js:152
(anonymous) @ SessionManager.js:435
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:29
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:29
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:24
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:63
n @ bootstrap:19
(anonymous) @ AuthHandler.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:54
n @ bootstrap:19
(anonymous) @ connection.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:54
n @ bootstrap:19
(anonymous) @ conference.js:1
(anonymous) @ app.bundle.min.js?v=3962.622:126
n @ bootstrap:19
(anonymous) @ app.bundle.min.js?v=3962.622:222
n @ bootstrap:19
(anonymous) @ bootstrap:83
(anonymous) @ app.bundle.min.js?v=3962.622:1
Logger.js:154 2020-04-11T19:21:21.309Z [index.web] <HTMLDocument.<anonymous>>:  (TIME) document ready:	 432.6749999891035
react-dom.production.min.js:187 DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
    at Oe._initStorage (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:16:45149)
    at Oe.componentDidMount (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:16:44779)
    at Oe.componentDidMount (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:24:223947)
    at Gs (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:94889)
    at t.unstable_runWithPriority (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:192:3884)
    at fi (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:41540)
    at Ws (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:90890)
    at Ps (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:78509)
    at fc (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:105337)
    at hc (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:105412)
    at https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:106607
    at Bs (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:80044)
    at _c (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:106592)
    at Object.render (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:109864)
    at HTMLDocument.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:222:80940)
La @ react-dom.production.min.js:187
Ga.n.callback @ react-dom.production.min.js:200
Hi @ react-dom.production.min.js:125
Bi @ react-dom.production.min.js:125
Gs @ react-dom.production.min.js:239
t.unstable_runWithPriority @ scheduler.production.min.js:20
fi @ react-dom.production.min.js:113
Ws @ react-dom.production.min.js:230
Ls @ react-dom.production.min.js:206
(anonymous) @ react-dom.production.min.js:114
t.unstable_runWithPriority @ scheduler.production.min.js:20
fi @ react-dom.production.min.js:113
gi @ react-dom.production.min.js:114
mi @ react-dom.production.min.js:113
Bs @ react-dom.production.min.js:208
_c @ react-dom.production.min.js:272
render @ react-dom.production.min.js:273
(anonymous) @ index.web.js:25
react-dom.production.min.js:114 Uncaught DOMException: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
    at Oe._initStorage (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:16:45149)
    at Oe.componentDidMount (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:16:44779)
    at Oe.componentDidMount (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:24:223947)
    at Gs (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:94889)
    at t.unstable_runWithPriority (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:192:3884)
    at fi (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:41540)
    at Ws (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:90890)
    at Ps (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:78509)
    at fc (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:105337)
    at hc (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:105412)
    at https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:106607
    at Bs (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:80044)
    at _c (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:106592)
    at Object.render (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:184:109864)
    at HTMLDocument.<anonymous> (https://web-cdn.jitsi.net/meetjitsi_4004.656/libs/app.bundle.min.js?v=3962.622:222:80940)
gi @ react-dom.production.min.js:114
mi @ react-dom.production.min.js:113
Bs @ react-dom.production.min.js:208
_c @ react-dom.production.min.js:272
render @ react-dom.production.min.js:273
(anonymous) @ index.web.js:25
react-dom.production.min.js:187 TypeError: Cannot read property 'dispatch' of undefined
    at Oe.componentWillUnmount (BaseApp.js:100)
    at react-dom.production.min.js:187
    at Ra (react-dom.production.min.js:189)
    at Ua (react-dom.production.min.js:195)
    at Gs (react-dom.production.min.js:235)
    at t.unstable_runWithPriority (scheduler.production.min.js:20)
    at fi (react-dom.production.min.js:113)
    at Ws (react-dom.production.min.js:230)
    at Ls (react-dom.production.min.js:206)
    at react-dom.production.min.js:114
    at t.unstable_runWithPriority (scheduler.production.min.js:20)
    at fi (react-dom.production.min.js:113)
    at gi (react-dom.production.min.js:114)
    at mi (react-dom.production.min.js:113)
    at Bs (react-dom.production.min.js:208)
    at _c (react-dom.production.min.js:272)
    at Object.render (react-dom.production.min.js:273)
    at HTMLDocument.<anonymous> (index.web.js:25)
La @ react-dom.production.min.js:187
Ga.n.callback @ react-dom.production.min.js:200
Hi @ react-dom.production.min.js:125
Bi @ react-dom.production.min.js:125
Gs @ react-dom.production.min.js:239
t.unstable_runWithPriority @ scheduler.production.min.js:20
fi @ react-dom.production.min.js:113
Ws @ react-dom.production.min.js:230
Ls @ react-dom.production.min.js:206
(anonymous) @ react-dom.production.min.js:114
t.unstable_runWithPriority @ scheduler.production.min.js:20
fi @ react-dom.production.min.js:113
gi @ react-dom.production.min.js:114
mi @ react-dom.production.min.js:113
I @ scheduler.production.min.js:16
H @ scheduler.production.min.js:18
C @ scheduler.production.min.js:13
BaseApp.js:100 Uncaught TypeError: Cannot read property 'dispatch' of undefined
    at Oe.componentWillUnmount (BaseApp.js:100)
    at react-dom.production.min.js:187
    at Ra (react-dom.production.min.js:189)
    at Ua (react-dom.production.min.js:195)
    at Gs (react-dom.production.min.js:235)
    at t.unstable_runWithPriority (scheduler.production.min.js:20)
    at fi (react-dom.production.min.js:113)
    at Ws (react-dom.production.min.js:230)
    at Ls (react-dom.production.min.js:206)
    at react-dom.production.min.js:114
    at t.unstable_runWithPriority (scheduler.production.min.js:20)
    at fi (react-dom.production.min.js:113)
    at gi (react-dom.production.min.js:114)
    at mi (react-dom.production.min.js:113)
    at Bs (react-dom.production.min.js:208)
    at _c (react-dom.production.min.js:272)
    at Object.render (react-dom.production.min.js:273)
    at HTMLDocument.<anonymous> (index.web.js:25)
1 « J'aime »