Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feature: add cspr name support to contact details page #1069

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/apps/connect-to-app/pages/switch-account/content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ type SwitchAccountContentProps = { requestId: string };
export function SwitchAccountContent({ requestId }: SwitchAccountContentProps) {
const activeOrigin = useSelector(selectActiveOrigin);
const activeAccount = useSelector(selectVaultActiveAccount);
const publicKeys = useSelector(selectVaultAccountsPublicKeys);
const accountsPublicKeys = useSelector(selectVaultAccountsPublicKeys);
const connectedAccountsToActiveTab = useSelector(
selectConnectedAccountsWithActiveOrigin
);
Expand Down Expand Up @@ -77,7 +77,7 @@ export function SwitchAccountContent({ requestId }: SwitchAccountContentProps) {
account => account.name !== activeAccount?.name
);

const accountsInfo = useFetchAccountsInfo(publicKeys);
const accountsInfo = useFetchAccountsInfo(accountsPublicKeys);

return (
<PageContainer>
Expand Down Expand Up @@ -141,7 +141,7 @@ export function SwitchAccountContent({ requestId }: SwitchAccountContentProps) {
<SpaceBetweenContainer>
<LeftAlignedFlexColumn>
<ConnectionStatusBadge
isConnected
isConnected={true}
displayContext="accountList"
/>
<Typography type="body">{account.name}</Typography>
Expand Down
4 changes: 3 additions & 1 deletion src/apps/popup/pages/account-settings/content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { dispatchToMainStore } from '@background/redux/utils';
import { hideAccountFromListChanged } from '@background/redux/vault/actions';
import {
selectVaultAccount,
selectVaultAccountsPublicKeys,
selectVaultHiddenAccountsNames,
selectVaultImportedAccountNames,
selectVaultLedgerAccountNames
Expand Down Expand Up @@ -42,13 +43,14 @@ export function AccountSettingsPageContent() {
const account = useSelector((state: RootState) =>
selectVaultAccount(state, accountName || '')
);
const accountsPublicKeys = useSelector(selectVaultAccountsPublicKeys);

if (!account) {
throw new Error("Account doesn't exist");
}

const accountsInfo = useFetchAccountsInfo(accountsPublicKeys);
const accountHash = getAccountHashFromPublicKey(account.publicKey);
const accountsInfo = useFetchAccountsInfo([account.publicKey]);

const csprName = accountsInfo && accountsInfo[accountHash]?.csprName;

Expand Down
4 changes: 2 additions & 2 deletions src/apps/popup/pages/connect-another-account/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export function ConnectAnotherAccountPageContent() {
const { targetAccountName } = useParams();

const activeOrigin = useSelector(selectActiveOrigin);
const publicKeys = useSelector(selectVaultAccountsPublicKeys);
const accountsPublicKeys = useSelector(selectVaultAccountsPublicKeys);

const {
connectAnotherAccountWithEvent: connectAccount,
Expand Down Expand Up @@ -87,7 +87,7 @@ export function ConnectAnotherAccountPageContent() {
targetAccount?.publicKey
);

const accountsInfo = useFetchAccountsInfo(publicKeys);
const accountsInfo = useFetchAccountsInfo(accountsPublicKeys);

const targetAccountCsprName =
accountsInfo && accountsInfo[targetAccountHash]?.csprName;
Expand Down
4 changes: 2 additions & 2 deletions src/apps/popup/pages/connected-sites/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ export function ConnectedSitesPage() {

const accountsByOrigin = useSelector(selectAccountsByOriginDict);
const siteNameByOriginDict = useSelector(selectSiteNameByOriginDict);
const publicKeys = useSelector(selectVaultAccountsPublicKeys);
const accountsPublicKeys = useSelector(selectVaultAccountsPublicKeys);

const isNoSitesConnected = !Object.entries(accountsByOrigin).length;

const accountsInfo = useFetchAccountsInfo(publicKeys);
const accountsInfo = useFetchAccountsInfo(accountsPublicKeys);

if (isNoSitesConnected) {
return (
Expand Down
22 changes: 22 additions & 0 deletions src/apps/popup/pages/contact-details/details.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
import React from 'react';
import { Trans, useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux';
import styled from 'styled-components';

import { selectAllContactsPublicKeys } from '@background/redux/contacts/selectors';
import { Contact } from '@background/redux/contacts/types';

import { getAccountHashFromPublicKey } from '@libs/entities/Account';
import {
ContentContainer,
FlexColumn,
LeftAlignedFlexColumn,
SpacingSize
} from '@libs/layout';
import { useFetchAccountsInfo } from '@libs/services/account-info';
import {
Avatar,
Hash,
Expand All @@ -32,6 +37,13 @@ interface ContactDetailsProps {
export const ContactDetails = ({ contact }: ContactDetailsProps) => {
const { t } = useTranslation();

const contactPublicKeys = useSelector(selectAllContactsPublicKeys);

const accountsInfo = useFetchAccountsInfo(contactPublicKeys);

const accountHash = getAccountHashFromPublicKey(contact.publicKey);
const csprName = accountsInfo && accountsInfo[accountHash]?.csprName;

return (
<ContentContainer>
<Tile>
Expand All @@ -44,6 +56,16 @@ export const ContactDetails = ({ contact }: ContactDetailsProps) => {
variant={HashVariant.CaptionHash}
color="contentPrimary"
/>
{csprName ? (
<FlexColumn gap={SpacingSize.Small}>
<Typography type="bodySemiBold">
<Trans t={t}>CSPR.name</Trans>
</Typography>
<Typography type="captionRegular" color="contentSecondary">
{csprName}
</Typography>
</FlexColumn>
) : null}
<Typography type="captionRegular" color="contentSecondary">
<Trans t={t}>
Last edited: {formatShortTimestamp(contact.lastModified)}
Expand Down
17 changes: 5 additions & 12 deletions src/apps/popup/pages/contacts/components/contacts-plate.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import { Maybe } from 'casper-wallet-core/src/typings/common';
import React from 'react';
import { useSelector } from 'react-redux';
import styled from 'styled-components';

import { RouterPath, useTypedNavigate } from '@popup/router';

import { selectAllContactsPublicKeys } from '@background/redux/contacts/selectors';

import { AlignedFlexRow, FlexColumn, SpacingSize } from '@libs/layout';
import { useFetchAccountsInfo } from '@libs/services/account-info';
import { Avatar, Hash, HashVariant, Typography } from '@libs/ui/components';

const Container = styled(AlignedFlexRow)`
Expand All @@ -19,22 +16,18 @@ const Container = styled(AlignedFlexRow)`
interface ContactsPlateProps {
publicKey: string;
name: string;
accountHash: string;
csprName: Maybe<string> | undefined;
brandingLogo: Maybe<string> | undefined;
}

export const ContactsPlate = ({
publicKey,
name,
accountHash
csprName,
brandingLogo
}: ContactsPlateProps) => {
const navigate = useTypedNavigate();

const contactPublicKeys = useSelector(selectAllContactsPublicKeys);
const accountsInfo = useFetchAccountsInfo(contactPublicKeys);

const csprName = accountsInfo && accountsInfo[accountHash]?.csprName;
const brandingLogo = accountsInfo && accountsInfo[accountHash]?.brandingLogo;

return (
<Container
gap={SpacingSize.Medium}
Expand Down
26 changes: 19 additions & 7 deletions src/apps/popup/pages/contacts/content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { EmptyContacts } from '@popup/pages/contacts/components/empty-contacts';

import {
selectAllContacts,
selectAllContactsPublicKeys,
selectLastModified
} from '@background/redux/contacts/selectors';

Expand All @@ -16,6 +17,7 @@ import {
ParagraphContainer,
SpacingSize
} from '@libs/layout';
import { useFetchAccountsInfo } from '@libs/services/account-info';
import { List, Typography } from '@libs/ui/components';
import { formatShortTimestamp } from '@libs/ui/utils';

Expand All @@ -24,13 +26,16 @@ export const ContactsBookPageContent = () => {

const contacts = useSelector(selectAllContacts);
const lastModified = useSelector(selectLastModified);
const contactPublicKeys = useSelector(selectAllContactsPublicKeys);

const contactsWithId = contacts.map((contact, index) => ({
...contact,
id: index,
accountHash: getAccountHashFromPublicKey(contact.publicKey)
}));

const accountsInfo = useFetchAccountsInfo(contactPublicKeys);

if (contactsWithId.length === 0) {
return <EmptyContacts />;
}
Expand All @@ -53,13 +58,20 @@ export const ContactsBookPageContent = () => {
)}
<List
rows={contactsWithId}
renderRow={({ publicKey, name, accountHash }) => (
<ContactsPlate
publicKey={publicKey}
name={name}
accountHash={accountHash}
/>
)}
renderRow={({ publicKey, name, accountHash }) => {
const csprName = accountsInfo && accountsInfo[accountHash]?.csprName;
const brandingLogo =
accountsInfo && accountsInfo[accountHash]?.brandingLogo;

return (
<ContactsPlate
publicKey={publicKey}
name={name}
csprName={csprName}
brandingLogo={brandingLogo}
/>
);
}}
marginLeftForItemSeparatorLine={54}
/>
</ContentContainer>
Expand Down
8 changes: 6 additions & 2 deletions src/libs/layout/header/header-connection-status.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import React from 'react';
import { useSelector } from 'react-redux';

import { selectVaultActiveAccount } from '@background/redux/vault/selectors';
import {
selectVaultAccountsPublicKeys,
selectVaultActiveAccount
} from '@background/redux/vault/selectors';

import { getAccountHashFromPublicKey } from '@libs/entities/Account';
import {
Expand Down Expand Up @@ -30,8 +33,9 @@ export function HeaderConnectionStatus({
isConnected
}: HeaderConnectionStatusProps) {
const activeAccount = useSelector(selectVaultActiveAccount);
const accountsPublicKeys = useSelector(selectVaultAccountsPublicKeys);

const accountsInfo = useFetchAccountsInfo([activeAccount?.publicKey!]);
const accountsInfo = useFetchAccountsInfo(accountsPublicKeys);

const accountHash = getAccountHashFromPublicKey(activeAccount?.publicKey);

Expand Down
2 changes: 1 addition & 1 deletion src/libs/services/account-info/use-fetch-accounts-info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export const useFetchAccountsInfo = (accountPublicKeys: string[]) => {
const accountHashesString = accountHashes.toString();

const { data: accountsInfo } = useQuery({
queryKey: ['ACCOUNT_INFO', accountHashesString],
queryKey: ['ACCOUNT_INFO', accountHashesString, network],
queryFn: async () => {
return await accountInfoRepository.getAccountsInfo({
accountHashes,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ import { Trans, useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux';
import styled from 'styled-components';

import { selectVaultActiveAccount } from '@background/redux/vault/selectors';
import {
selectVaultAccountsPublicKeys,
selectVaultActiveAccount
} from '@background/redux/vault/selectors';

import { getAccountHashFromPublicKey } from '@libs/entities/Account';
import {
Expand Down Expand Up @@ -56,11 +59,11 @@ export const ActiveAccountPlate = ({
const { t } = useTranslation();

const activeAccount = useSelector(selectVaultActiveAccount);
const accountsPublicKeys = useSelector(selectVaultAccountsPublicKeys);

const accountsInfo = useFetchAccountsInfo([activeAccount?.publicKey!]);
const accountsInfo = useFetchAccountsInfo(accountsPublicKeys);

const accountHash = getAccountHashFromPublicKey(activeAccount?.publicKey);

const csprName = accountsInfo && accountsInfo[accountHash]?.csprName;
const brandingLogo = accountsInfo && accountsInfo[accountHash]?.brandingLogo;

Expand Down
4 changes: 3 additions & 1 deletion src/libs/ui/forms/form-validation-rules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,9 @@ export const useRecipientPublicKeyRule = () => {

return false;
},
message: t('Recipient should be a valid public key or cspr name')
message: t(
'The recipient should be a valid public key, CSPR.name or contact name'
)
});
};

Expand Down
Loading