Add AuthProvider to provide account and token
When logged in, the token and account info can be retrieved using
`useAuthContext` hook.
Fix jamid.node path in jamid.ts
Fix some eslint warnings.
Change-Id: I1ea4d537693df807b4ea67a277addfecfc749e4a
diff --git a/client/src/components/AccountPreferences.tsx b/client/src/components/AccountPreferences.tsx
index 2eedc97..8ca098e 100644
--- a/client/src/components/AccountPreferences.tsx
+++ b/client/src/components/AccountPreferences.tsx
@@ -35,11 +35,11 @@
Typography,
} from '@mui/material';
import { motion } from 'framer-motion';
-import { Account } from 'jami-web-common';
-import { AccountDetails } from 'jami-web-common';
+import { Account, AccountDetails } from 'jami-web-common';
import { useState } from 'react';
import authManager from '../AuthManager';
+import { useAuthContext } from '../contexts/AuthProvider';
import ConversationAvatar from './ConversationAvatar';
import ConversationsOverviewCard from './ConversationsOverviewCard';
import JamiIdCard from './JamiIdCard';
@@ -57,10 +57,17 @@
};
type AccountPreferencesProps = {
- account: Account;
+ // TODO: Remove account prop after migration to new server
+ account?: Account;
};
-export default function AccountPreferences({ account }: AccountPreferencesProps) {
+export default function AccountPreferences({ account: _account }: AccountPreferencesProps) {
+ const authContext = useAuthContext(true);
+ const account = _account ?? authContext?.account;
+ if (!account) {
+ throw new Error('Account not defined');
+ }
+
const devices: string[][] = [];
const accountDevices = account.getDevices();
for (const i in accountDevices) devices.push([i, accountDevices[i]]);
@@ -241,7 +248,7 @@
</ListItemAvatar>
<ListItemText primary={moderator.getDisplayName()} />
<ListItemSecondaryAction>
- <IconButton onClick={(e) => removeModerator(moderator.getUri())} size="large">
+ <IconButton onClick={() => removeModerator(moderator.getUri())} size="large">
<DeleteRounded />
</IconButton>
</ListItemSecondaryAction>
diff --git a/client/src/components/Button.tsx b/client/src/components/Button.tsx
index 9264355..c33def2 100644
--- a/client/src/components/Button.tsx
+++ b/client/src/components/Button.tsx
@@ -213,7 +213,7 @@
<IconButton {...props} disableRipple={true}>
<Icon fontSize="inherit" />
</IconButton>
-))(({ theme }) => ({
+))(() => ({
color: '#7E7E7E',
fontSize: '25px',
height: '36px',
@@ -278,7 +278,7 @@
<IconButton {...props} disableRipple={true}>
{emoji}
</IconButton>
-))(({ theme }) => ({
+))(() => ({
color: 'white',
fontSize: '20px',
height: '20px',
@@ -288,7 +288,7 @@
type SelectEmojiButtonProps = {
onEmojiSelected: (emoji: string) => void;
};
-export const SelectEmojiButton = ({ onEmojiSelected, ...props }: SelectEmojiButtonProps) => {
+export const SelectEmojiButton = ({ onEmojiSelected }: SelectEmojiButtonProps) => {
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
const handleOpenEmojiPicker = useCallback(
diff --git a/client/src/components/ContactList.jsx b/client/src/components/ContactList.jsx
index 56f5f9c..c35c4f0 100644
--- a/client/src/components/ContactList.jsx
+++ b/client/src/components/ContactList.jsx
@@ -37,7 +37,7 @@
};
export default function ContactList() {
- const { accountId, account } = useAppSelector((state) => state.userInfo);
+ const { accountId } = useAppSelector((state) => state.userInfo);
const dispatch = useAppDispatch();
const [contacts, setContacts] = useState([]);
diff --git a/client/src/components/ConversationListItem.tsx b/client/src/components/ConversationListItem.tsx
index b432a45..9a928e7 100644
--- a/client/src/components/ConversationListItem.tsx
+++ b/client/src/components/ConversationListItem.tsx
@@ -92,8 +92,8 @@
const [modalDetailsIsOpen, setModalDetailsIsOpen] = useState(false);
const [modalDeleteIsOpen, setModalDeleteIsOpen] = useState(false);
const [blockOrRemove, setBlockOrRemove] = useState(true);
- const [userId, setUserId] = useState(conversation?.getFirstMember()?.contact.getUri());
- const [isSwarm, setIsSwarm] = useState(true);
+ const [userId] = useState(conversation?.getFirstMember()?.contact.getUri());
+ const [isSwarm] = useState(true);
const navigateUrlPrefix = `/deprecated-account/${conversation.getAccountId()}`;
@@ -134,7 +134,7 @@
method: 'DELETE',
})
.then((res) => res.json())
- .then((result) => {
+ .then(() => {
console.log('propre');
dispatch(setRefreshFromSlice());
})
diff --git a/client/src/components/Header.tsx b/client/src/components/Header.tsx
index 2a00e7f..445dbae 100644
--- a/client/src/components/Header.tsx
+++ b/client/src/components/Header.tsx
@@ -19,9 +19,12 @@
import { MouseEvent, useState } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
+import { useAuthContext } from '../contexts/AuthProvider';
import { setAccessToken } from '../utils/auth';
export default function Header() {
+ const authContext = useAuthContext(true);
+
const navigate = useNavigate();
const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
const handleClick = (event: MouseEvent<HTMLButtonElement>) => setAnchorEl(event.currentTarget);
@@ -31,10 +34,12 @@
const goToContacts = () => navigate(`/contacts`);
const goToAccountSettings = () => navigate(`/deprecated-account/${params.accountId}/settings`);
- const logout = () => {
+ const deprecatedLogout = () => {
setAccessToken('');
- navigate('/', { replace: true });
+ navigate('/deprecated-account', { replace: true });
};
+ // TODO: Remove deprecated_logout once migration to new server is complete
+ const logout = authContext?.logout ?? deprecatedLogout;
return (
<Box>