import PropTypes from 'prop-types';
import React, { useState } from 'react';
import { useI18nContext } from '../../../hooks/useI18nContext';
import Button from '../../../components/ui/button';
import PermissionsConnectHeader from '../../../components/app/permissions-connect-header';
import PermissionsConnectFooter from '../../../components/app/permissions-connect-footer';
import AccountList from '../../../components/ui/account-list';
const ChooseAccount = ({
selectedAccountAddresses,
addressLastConnectedMap = {},
accounts,
selectAccounts,
selectNewAccountViaModal,
cancelPermissionsRequest,
permissionsRequestId,
targetSubjectMetadata,
nativeCurrency,
}) => {
const [selectedAccounts, setSelectedAccounts] = useState(
selectedAccountAddresses,
);
const t = useI18nContext();
const handleAccountClick = (address) => {
const newSelectedAccounts = new Set(selectedAccounts);
if (newSelectedAccounts.has(address)) {
newSelectedAccounts.delete(address);
} else {
newSelectedAccounts.add(address);
}
setSelectedAccounts(newSelectedAccounts);
};
const selectAll = () => {
const newSelectedAccounts = new Set(
accounts.map((account) => account.address),
);
setSelectedAccounts(newSelectedAccounts);
};
const deselectAll = () => {
setSelectedAccounts(new Set());
};
const allAreSelected = () => {
return accounts.length === selectedAccounts.size;
};
return (
0
? t('selectAccounts')
: t('connectAccountOrCreate')
}
siteOrigin={targetSubjectMetadata?.origin}
/>
);
};
ChooseAccount.propTypes = {
/**
* Array of user account objects
*/
accounts: PropTypes.arrayOf(
PropTypes.shape({
address: PropTypes.string,
addressLabel: PropTypes.string,
lastConnectedDate: PropTypes.string,
balance: PropTypes.string,
}),
).isRequired,
/**
* Function to select an account
*/
selectAccounts: PropTypes.func.isRequired,
/**
* Function to select a new account via modal
*/
selectNewAccountViaModal: PropTypes.func.isRequired,
/**
* Native currency of current chain
*/
nativeCurrency: PropTypes.string.isRequired,
/**
* A map of the last connected addresses
*/
addressLastConnectedMap: PropTypes.object,
/**
* Function to cancel permission request
*/
cancelPermissionsRequest: PropTypes.func.isRequired,
/**
* Permission request Id
*/
permissionsRequestId: PropTypes.string.isRequired,
/**
* Currently selected account addresses
*/
selectedAccountAddresses: PropTypes.object.isRequired,
/**
* Domain data used to display site-origin pill
*/
targetSubjectMetadata: PropTypes.shape({
extensionId: PropTypes.string,
iconUrl: PropTypes.string,
name: PropTypes.string.isRequired,
origin: PropTypes.string.isRequired,
subjectType: PropTypes.string,
}),
};
export default ChooseAccount;