update imports for React 18

Change-Id: Ibc75ce532003a478b31d5d85d84c83a017262041
diff --git a/client/src/App.js b/client/src/App.js
index c05265e..2505137 100644
--- a/client/src/App.js
+++ b/client/src/App.js
@@ -4,7 +4,7 @@
   License: AGPL-3
 */
 import { ThemeProvider } from '@mui/material/styles';
-import React, { useState, useEffect } from 'react'
+import { useState, useEffect } from 'react'
 import { Route, Routes, Navigate } from 'react-router-dom'
 import authManager from './AuthManager'
 
diff --git a/client/src/App.test.js b/client/src/App.test.js
index 4db7ebc..9a9be2e 100644
--- a/client/src/App.test.js
+++ b/client/src/App.test.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { render } from '@testing-library/react';
 import App from './App';
 
diff --git a/client/src/components/AccountPreferences.js b/client/src/components/AccountPreferences.js
index 0c62204..68509f2 100644
--- a/client/src/components/AccountPreferences.js
+++ b/client/src/components/AccountPreferences.js
@@ -1,4 +1,4 @@
-import React, { useState } from 'react'
+import { useState } from 'react'
 
 import { List, ListItem, ListItemIcon, ListItemSecondaryAction, ListItemText, ListSubheader, Switch, Typography, Grid, Paper, CardContent, Card, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, Toolbar, IconButton, ListItemAvatar, Input, TextField } from '@mui/material'
 import { PhoneCallbackRounded, GroupRounded, DeleteRounded, AddCircle } from '@mui/icons-material'
diff --git a/client/src/components/ContactList.js b/client/src/components/ContactList.js
index ec04cef..f3f4efa 100644
--- a/client/src/components/ContactList.js
+++ b/client/src/components/ContactList.js
@@ -2,7 +2,7 @@
 import authManager from "../AuthManager";
 import ConversationAvatar from "./ConversationAvatar";
 import Modal from 'react-modal';
-import React, { useState, useEffect } from "react";
+import { useState, useEffect } from "react";
 import { Person } from "@mui/icons-material";
 import { useAppDispatch, useAppSelector } from "../../redux/hooks";
 import { ListItem, ListItemAvatar, ListItemText } from "@mui/material";
diff --git a/client/src/components/ConversationAvatar.js b/client/src/components/ConversationAvatar.js
index 9d19f25..ea9fcb0 100644
--- a/client/src/components/ConversationAvatar.js
+++ b/client/src/components/ConversationAvatar.js
@@ -1,4 +1,3 @@
-import React from 'react'
 import { Avatar } from '@mui/material'
 
 export default function ConversationAvatar({displayName,...props}) {
diff --git a/client/src/components/ConversationList.js b/client/src/components/ConversationList.js
index 28ecbd5..d81ebb2 100644
--- a/client/src/components/ConversationList.js
+++ b/client/src/components/ConversationList.js
@@ -1,5 +1,5 @@
 import List from '@mui/material/List'
-import React, { useEffect } from "react";
+import { useEffect } from "react";
 import ConversationListItem from './ConversationListItem'
 import ListSubheader from '@mui/material/ListSubheader';
 import Conversation from '../../../model/Conversation';
diff --git a/client/src/components/ConversationListItem.js b/client/src/components/ConversationListItem.js
index 36932bf..e0b8e49 100644
--- a/client/src/components/ConversationListItem.js
+++ b/client/src/components/ConversationListItem.js
@@ -1,12 +1,10 @@
-import React, { useEffect } from 'react';
 import Modal from 'react-modal';
 import authManager from '../AuthManager'
 import ConversationAvatar from './ConversationAvatar'
 import Conversation from '../../../model/Conversation'
-import React, { useState } from "react";
+import { useState } from "react";
 import { useNavigate, useParams } from "react-router-dom"
-import { ListItem, ListItemAvatar, ListItemText, Box, Typography } from '@mui/material'
-import { Button, Stack, Typography, Modal as ModalUM } from "@mui/material"
+import { ListItem, Stack, ListItemAvatar, ListItemText, Box, Typography } from '@mui/material'
 import { RemoveContactIcon, VideoCallIcon } from './svgIcons';
 import { AudioCallIcon, BlockContactIcon, ContactDetailsIcon, CrossIcon, MessageIcon } from './svgIcons';
 import { QRCodeCanvas} from 'qrcode.react';
diff --git a/client/src/components/ConversationView.js b/client/src/components/ConversationView.js
index ba9b932..9d12665 100644
--- a/client/src/components/ConversationView.js
+++ b/client/src/components/ConversationView.js
@@ -1,4 +1,4 @@
-import React, { useCallback, useContext, useEffect, useState } from 'react';
+import { useCallback, useContext, useEffect, useState } from 'react'
 import MessageList from './MessageList';
 import SendMessageForm from './SendMessageForm';
 import Conversation from '../../../model/Conversation';
diff --git a/client/src/components/ConversationsOverviewCard.js b/client/src/components/ConversationsOverviewCard.js
index 89f8576..04f74f5 100644
--- a/client/src/components/ConversationsOverviewCard.js
+++ b/client/src/components/ConversationsOverviewCard.js
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from 'react';
+import { useEffect, useState } from 'react'
 import { Card, CardActionArea, CardContent, CircularProgress, Typography } from '@mui/material';
 import { useNavigate, useParams } from 'react-router';
 import authManager from '../AuthManager'
diff --git a/client/src/components/Header.js b/client/src/components/Header.js
index c2dc29e..0c3eda4 100644
--- a/client/src/components/Header.js
+++ b/client/src/components/Header.js
@@ -1,4 +1,4 @@
-import React, { useState } from 'react'
+import { useState } from 'react'
 import { Box, Button, Menu, MenuItem } from '@mui/material'
 import { useNavigate, useParams } from "react-router-dom"
 import authManager from '../AuthManager'
diff --git a/client/src/components/JamiIdCard.js b/client/src/components/JamiIdCard.js
index 32949d6..b999780a 100644
--- a/client/src/components/JamiIdCard.js
+++ b/client/src/components/JamiIdCard.js
@@ -1,4 +1,3 @@
-import React from 'react';
 import { Box, Card, CardContent, Typography } from '@mui/material';
 
 export default function JamiIdCard(props) {
diff --git a/client/src/components/ListItemLink.js b/client/src/components/ListItemLink.js
index a0ebc3b..c72a268 100644
--- a/client/src/components/ListItemLink.js
+++ b/client/src/components/ListItemLink.js
@@ -1,4 +1,4 @@
-import React, { useMemo, forwardRef } from 'react';
+import { useMemo, forwardRef } from 'react'
 import PropTypes from 'prop-types';
 import ListItem from '@mui/material/ListItem';
 import ListItemIcon from '@mui/material/ListItemIcon';
diff --git a/client/src/components/Message.js b/client/src/components/Message.js
index 44d423a..e22d863 100644
--- a/client/src/components/Message.js
+++ b/client/src/components/Message.js
@@ -2,7 +2,7 @@
 import dayjs from "dayjs"
 import isToday from "dayjs/plugin/isToday"
 import isYesterday from "dayjs/plugin/isYesterday"
-import React from "react"
+import { useMemo } from "react";
 import { useTranslation } from "react-i18next"
 import ConversationAvatar from "./ConversationAvatar"
 
@@ -219,7 +219,7 @@
 const MessageBubble = (props) => {
   const largeRadius = "20px"
   const smallRadius = "5px"
-  const radius = React.useMemo(() => {
+  const radius = useMemo(() => {
     if (props.position == "start") {
       return {
         borderStartStartRadius: props.isFirstOfGroup ? largeRadius : smallRadius,
diff --git a/client/src/components/MessageList.js b/client/src/components/MessageList.js
index 5ea46b5..a6084a7 100644
--- a/client/src/components/MessageList.js
+++ b/client/src/components/MessageList.js
@@ -1,5 +1,5 @@
 import dayjs from "dayjs"
-import React, { useMemo } from 'react'
+import { useMemo } from 'react'
 import dayOfYear from 'dayjs/plugin/dayOfYear'
 import isBetween from 'dayjs/plugin/isBetween'
 import { Stack } from "@mui/system"
diff --git a/client/src/components/NewContactForm.js b/client/src/components/NewContactForm.js
index a4c6f84..9482948 100644
--- a/client/src/components/NewContactForm.js
+++ b/client/src/components/NewContactForm.js
@@ -1,4 +1,4 @@
-import React, { useState } from 'react'
+import { useState } from 'react'
 import { InputBase, InputAdornment } from '@mui/material';
 import { SearchRounded } from '@mui/icons-material';
 
diff --git a/client/src/components/SendMessageForm.js b/client/src/components/SendMessageForm.js
index f1cb2d6..df520ff 100644
--- a/client/src/components/SendMessageForm.js
+++ b/client/src/components/SendMessageForm.js
@@ -1,10 +1,10 @@
-import React from 'react'
+import { useState, useCallback } from 'react'
 import { Divider, InputBase } from '@mui/material'
 import { RecordVideoMessageButton, RecordVoiceMessageButton, SelectEmojiButton, SendMessageButton, UploadFileButton } from './buttons';
 import { Stack } from '@mui/system';
 
 export default function SendMessageForm(props) {
-  const [currentMessage, setCurrentMessage] = React.useState("")
+  const [currentMessage, setCurrentMessage] = useState("")
 
   const handleSubmit = e => {
     e.preventDefault()
@@ -15,7 +15,7 @@
   }
   const handleInputChange = (event) => setCurrentMessage(event.target.value)
 
-  const onEmojiSelected = React.useCallback(
+  const onEmojiSelected = useCallback(
     (emoji) => setCurrentMessage((currentMessage) => currentMessage + emoji),
     [setCurrentMessage],
   )
diff --git a/client/src/components/UsernameChooser.js b/client/src/components/UsernameChooser.js
index 2df96c6..7703639 100644
--- a/client/src/components/UsernameChooser.js
+++ b/client/src/components/UsernameChooser.js
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from 'react'
+import { useEffect, useState } from 'react'
 import usePromise from "react-fetch-hook/usePromise"
 import { InputAdornment, TextField } from '@mui/material'
 import { SearchRounded } from '@mui/icons-material'
diff --git a/client/src/components/buttons.js b/client/src/components/buttons.js
index e1b82a4..7ea9802 100644
--- a/client/src/components/buttons.js
+++ b/client/src/components/buttons.js
@@ -2,7 +2,7 @@
 import { Box, ClickAwayListener, IconButton, Popper } from "@mui/material";
 import { styled } from "@mui/material/styles";
 import EmojiPicker from "emoji-picker-react";
-import React from "react";
+import { useState, useCallback } from "react";
 import { Arrow2Icon, ArrowIcon, CameraIcon, CameraInBubbleIcon, CancelIcon, CrossedEyeIcon, CrossIcon, EmojiIcon, EyeIcon, FolderIcon, InfoIcon, MicroInBubbleIcon, PaperClipIcon, PenIcon } from "./svgIcons";
 
 const RoundButton = styled(
@@ -215,19 +215,19 @@
 }
 
 export const SelectEmojiButton = (props) => {
-    const [anchorEl, setAnchorEl] = React.useState(null)
+    const [anchorEl, setAnchorEl] = useState(null)
   
-    const handleOpenEmojiPicker = React.useCallback(
+    const handleOpenEmojiPicker = useCallback(
       e => setAnchorEl(anchorEl ? null : e.currentTarget),
       [anchorEl],
     )
   
-    const handleClose = React.useCallback(
+    const handleClose = useCallback(
       () => setAnchorEl(null),
       [setAnchorEl],
     )
   
-    const onEmojiClick = React.useCallback(
+    const onEmojiClick = useCallback(
       (e, emojiObject) => {
         props.onEmojiSelected(emojiObject.emoji)
         handleClose()
diff --git a/client/src/components/inputs.js b/client/src/components/inputs.js
index 52047d3..a0315d3 100644
--- a/client/src/components/inputs.js
+++ b/client/src/components/inputs.js
@@ -1,6 +1,6 @@
 import { Stack, TextField } from "@mui/material"
 import { styled } from "@mui/material/styles"
-import React from "react"
+import { useState, useCallback, useEffect } from "react";
 import { InfoButton, ToggleVisibilityButton } from "./buttons"
 import { CheckedIcon, RoundCrossIcon, LockIcon, PenIcon, PersonIcon } from "./svgIcons"
 
@@ -13,16 +13,16 @@
 const StyledLockIcon = styled(LockIcon)({height: iconsHeight, color: "#03B9E9"})
 
 export const UsernameInput = ({infoButtonProps, ...props}) => {
-    const [isSelected, setIsSelected] = React.useState(false);
-    const [input, setInput] = React.useState(props.defaultValue);
-    const [startAdornment, setStartAdornment] = React.useState()
+    const [isSelected, setIsSelected] = useState(false);
+    const [input, setInput] = useState(props.defaultValue);
+    const [startAdornment, setStartAdornment] = useState()
 
-    const onChange = React.useCallback((event) => {
+    const onChange = useCallback((event) => {
         setInput(event.target.value)
         props.onChange?.(event)
     }, [props.onChange])
 
-    React.useEffect(() => {
+    useEffect(() => {
         /* Handle startAdornment */
         let Icon = StyledPersonIconLight
         let visibility = "visible"
@@ -56,21 +56,21 @@
 }
 
 export const PasswordInput = ({infoButtonProps, ...props}) => {
-    const [showPassword, setShowPassword] = React.useState(false);
-    const [isSelected, setIsSelected] = React.useState(false);
-    const [input, setInput] = React.useState(props.defaultValue);
-    const [startAdornment, setStartAdornment] = React.useState()
+    const [showPassword, setShowPassword] = useState(false);
+    const [isSelected, setIsSelected] = useState(false);
+    const [input, setInput] = useState(props.defaultValue);
+    const [startAdornment, setStartAdornment] = useState()
 
     const toggleShowPassword = () => {
         setShowPassword((showPassword) => !showPassword);
     }
 
-    const onChange = React.useCallback((event) => {
+    const onChange = useCallback((event) => {
         setInput(event.target.value)
         props.onChange?.(event)
     }, [props.onChange])
 
-    React.useEffect(() => {
+    useEffect(() => {
         /* Handle startAdornment */
         let Icon = StyledLockIcon
         let visibility = "visible"
@@ -112,16 +112,16 @@
 }
 
 export const NickNameInput = (props) => {
-    const [isSelected, setIsSelected] = React.useState(false);
-    const [input, setInput] = React.useState(props.defaultValue);
-    const [startAdornmentVisibility, setStartAdornmentVisibility] = React.useState()
+    const [isSelected, setIsSelected] = useState(false);
+    const [input, setInput] = useState(props.defaultValue);
+    const [startAdornmentVisibility, setStartAdornmentVisibility] = useState()
 
-    const onChange = React.useCallback((event) => {
+    const onChange = useCallback((event) => {
         setInput(event.target.value)
         props.onChange?.(event)
     }, [props.onChange])
 
-    React.useEffect(() => {
+    useEffect(() => {
         setStartAdornmentVisibility((isSelected || input) ? "visible" : "hidden")
     }, [isSelected, input])
 
@@ -142,17 +142,17 @@
 }
 
 export const RegularInput = (props) => {
-    const [isSelected, setIsSelected] = React.useState(false);
-    const [input, setInput] = React.useState(props.defaultValue);
-    const [startAdornmentVisibility, setStartAdornmentVisibility] = React.useState()
-    const [endAdornmentVisibility, setEndAdornmentVisibility] = React.useState()
+    const [isSelected, setIsSelected] = useState(false);
+    const [input, setInput] = useState(props.defaultValue);
+    const [startAdornmentVisibility, setStartAdornmentVisibility] = useState()
+    const [endAdornmentVisibility, setEndAdornmentVisibility] = useState()
 
-    const onChange = React.useCallback((event) => {
+    const onChange = useCallback((event) => {
         setInput(event.target.value)
         props.onChange?.(event)
     }, [props.onChange])
 
-    React.useEffect(() => {
+    useEffect(() => {
         setStartAdornmentVisibility((isSelected || input) ? "visible" : "hidden")
         setEndAdornmentVisibility((isSelected || input) ? "hidden" : "visible")
     }, [isSelected, input])
diff --git a/client/src/components/loading.js b/client/src/components/loading.js
index dee6e88..a928a22 100644
--- a/client/src/components/loading.js
+++ b/client/src/components/loading.js
@@ -1,5 +1,4 @@
 import { CircularProgress, Container } from '@mui/material';
-import React from 'react';
 
 export default function LoadingPage() {
     return <Container style={{ textAlign: "center" }}>
diff --git a/client/src/components/welcome.js b/client/src/components/welcome.js
index 46c054c..24a217a 100644
--- a/client/src/components/welcome.js
+++ b/client/src/components/welcome.js
@@ -1,6 +1,6 @@
 import { Button, Container } from '@mui/material';
 import { AnimatePresence, motion } from 'framer-motion';
-import React, { useState } from 'react';
+import { useState } from 'react'
 import JamiLogo from '../../public/jami-logo-icon.svg'
 
 const list = {
diff --git a/client/src/contexts/socket.js b/client/src/contexts/socket.js
index bb59030..ad3b507 100644
--- a/client/src/contexts/socket.js
+++ b/client/src/contexts/socket.js
@@ -1,7 +1,7 @@
 
-import React from "react";
+import { createContext } from "react";
 
-export const SocketContext = React.createContext();
+export const SocketContext = createContext();
 export const SocketProvider = ({socket, children}) => (
     <SocketContext.Provider value={socket}>
         {children}
diff --git a/client/src/i18n.js b/client/src/i18n.js
index 85e043f..80d13a8 100644
--- a/client/src/i18n.js
+++ b/client/src/i18n.js
@@ -1,5 +1,5 @@
-import i18n from "i18next";
-import { initReactI18next } from "react-i18next";
+import i18n from "i18next"
+import { initReactI18next } from "react-i18next"
 import translationEn from "../public/locale/en/translation.json"
 import translationFr from "../public/locale/fr/translation.json"
 
@@ -19,6 +19,6 @@
       translation: translationFr,
     },
   },
-});
+})
 
-export default i18n;
+export default i18n
diff --git a/client/src/index.js b/client/src/index.js
index a8a1407..fb7917e 100644
--- a/client/src/index.js
+++ b/client/src/index.js
@@ -1,6 +1,6 @@
 'use strict'
 import './index.scss'
-import React from 'react'
+import { StrictMode } from 'react'
 import { createRoot } from 'react-dom/client';
 import App from './App.js'
 import { store } from "../redux/store";
@@ -29,7 +29,7 @@
 const root = createRoot(container);
 root.render(
   <Provider store={store}>
-    <React.StrictMode>
+    <StrictMode>
       <QueryClientProvider client={queryClient}>
         <SocketProvider socket={socket}>
           <Router>
@@ -37,7 +37,7 @@
           </Router>
         </SocketProvider>
       </QueryClientProvider>
-    </React.StrictMode>
+    </StrictMode>
   </Provider>
 );
 
diff --git a/client/src/pages/accountCreation.jsx b/client/src/pages/accountCreation.jsx
index 382ab1a..ae59d1b 100644
--- a/client/src/pages/accountCreation.jsx
+++ b/client/src/pages/accountCreation.jsx
@@ -1,4 +1,3 @@
-import React from 'react';
 import { Container, Card, CardContent, Typography, List, Avatar, Divider } from '@mui/material';
 import { DialerSipRounded, GroupOutlined, RoomRounded } from '@mui/icons-material';
 import ListItemLink from '../components/ListItemLink';
diff --git a/client/src/pages/accountSelection.jsx b/client/src/pages/accountSelection.jsx
index 81eed77..65728d8 100644
--- a/client/src/pages/accountSelection.jsx
+++ b/client/src/pages/accountSelection.jsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from 'react';
+import { Fragment, useEffect, useState } from 'react'
 import { Avatar, Card, CardHeader, Container, List } from '@mui/material';
 import Header from '../components/Header'
 import authManager from '../AuthManager'
@@ -44,7 +44,7 @@
   if (!loaded)
     return <LoadingPage />
   return (
-    <React.Fragment>
+    <Fragment>
       <Header />
       <Container maxWidth="sm" style={{paddingBottom:32}}>
         <motion.div drag="x" initial="exit" animate="enter" exit="exit" variants={variants}>
@@ -64,8 +64,8 @@
         </Card>
         </motion.div>
       </Container>
-    </React.Fragment>
-  )
+    </Fragment>
+  );
 }
 
 export default AccountSelection
\ No newline at end of file
diff --git a/client/src/pages/accountSettings.jsx b/client/src/pages/accountSettings.jsx
index fa29a7d..9808efd 100644
--- a/client/src/pages/accountSettings.jsx
+++ b/client/src/pages/accountSettings.jsx
@@ -1,4 +1,4 @@
-import React, {useEffect, useState} from 'react';
+import { useEffect, useState } from 'react'
 import { useParams } from 'react-router';
 import { Container, CircularProgress } from '@mui/material';
 import Header from '../components/Header'
diff --git a/client/src/pages/addContactPage.jsx b/client/src/pages/addContactPage.jsx
index 96d7bdc..702b01d 100644
--- a/client/src/pages/addContactPage.jsx
+++ b/client/src/pages/addContactPage.jsx
@@ -1,4 +1,3 @@
-import React from 'react';
 import { useNavigate } from "react-router-dom";
 
 import { Box, Container, Fab, Card, CardContent, Typography } from '@mui/material';
diff --git a/client/src/pages/jamiAccountCreation.jsx b/client/src/pages/jamiAccountCreation.jsx
index acecd27..a551569 100644
--- a/client/src/pages/jamiAccountCreation.jsx
+++ b/client/src/pages/jamiAccountCreation.jsx
@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import { useState } from 'react'
 import { Container, Card, CardContent, Typography, Fab, CardActions, Box } from '@mui/material';
 import { AddRounded } from '@mui/icons-material';
 import UsernameChooser from '../components/UsernameChooser';
diff --git a/client/src/pages/loginDialog.jsx b/client/src/pages/loginDialog.jsx
index eaa1362..ef647e8 100644
--- a/client/src/pages/loginDialog.jsx
+++ b/client/src/pages/loginDialog.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import { Component } from 'react'
 
 import Button from '@mui/material/Button';
 import TextField from '@mui/material/TextField';
@@ -25,7 +25,7 @@
     );
 }
 
-class SignInPage extends React.Component {
+class SignInPage extends Component {
 
     constructor(props) {
         console.log("SignInPage " + props.open)
diff --git a/client/src/pages/messenger.jsx b/client/src/pages/messenger.jsx
index ea64d9b..a256290 100644
--- a/client/src/pages/messenger.jsx
+++ b/client/src/pages/messenger.jsx
@@ -1,4 +1,4 @@
-import React, { useEffect, useState } from 'react';
+import { useEffect, useState } from 'react'
 import Header from '../components/Header'
 import NewContactForm from '../components/NewContactForm'
 
diff --git a/client/src/pages/serverConfiguration.jsx b/client/src/pages/serverConfiguration.jsx
index df0ee49..5c80131 100644
--- a/client/src/pages/serverConfiguration.jsx
+++ b/client/src/pages/serverConfiguration.jsx
@@ -1,4 +1,3 @@
-import React from 'react'
 import Header from '../components/Header'
 import AccountPreferences from '../components/AccountPreferences'
 import Container from '@mui/material/Container'
diff --git a/client/src/pages/serverSetup.jsx b/client/src/pages/serverSetup.jsx
index e2722fd..eaefc51 100644
--- a/client/src/pages/serverSetup.jsx
+++ b/client/src/pages/serverSetup.jsx
@@ -1,4 +1,4 @@
-import React, { useState } from 'react'
+import { useState } from 'react'
 
 import { Box, Container, Fab, Card, CardContent, Typography, Input } from '@mui/material'
 import GroupAddRounded from '@mui/icons-material/GroupAddRounded'