Created new component "AddNewAccount"

environments/review-create-ui-ume3nq/deployments/4822
danidfra 2024-09-19 01:09:27 -03:00
rodzic 92b08c66bf
commit 218a32821a
1 zmienionych plików z 97 dodań i 0 usunięć

Wyświetl plik

@ -0,0 +1,97 @@
import React, { useEffect, useState } from 'react';
import { FormattedMessage } from 'react-intl';
import Account from 'soapbox/components/account';
import { ListItem } from 'soapbox/components/list';
import { Button, HStack, Input, Slider } from 'soapbox/components/ui';
import SearchZapSplit from 'soapbox/features/compose/components/search-zap-split';
import { type Account as AccountEntity } from 'soapbox/schemas';
const closeIcon = require('@tabler/icons/outline/x.svg');
interface INewAccount {
acc: string;
message: string;
weight: number;
}
interface AddNewAccountProps {
newAccount: INewAccount;
newWeight: number;
setNewAccount: React.Dispatch<React.SetStateAction<INewAccount>>;
handleChange: (newWeight: number) => void;
formattedWeight: (weight: number) => number;
closeNewAccount: () => void;
}
const AddNewAccount: React.FC<AddNewAccountProps> = ({
newAccount,
newWeight,
setNewAccount,
handleChange,
formattedWeight,
closeNewAccount,
}) => {
const [accountSelected, setAccountSelected] = useState<AccountEntity | null>(null);
useEffect(() => {
if (accountSelected) {
setNewAccount((previousValue) => ({
...previousValue,
acc: accountSelected?.id || '',
}));
}
}, [accountSelected, setNewAccount]);
return (
<ListItem label={<div className='' />}>
<div className='relative flex w-full flex-col items-center justify-between gap-6 pt-2 md:flex-row md:pt-0'>
<div className='item-center flex flex-col justify-start gap-4 md:w-full md:flex-row'>
{accountSelected ?
<div className='flex items-center md:w-40'>
<Account account={accountSelected} />
</div>
:
<div className='flex w-full flex-col items-start justify-center'>
<FormattedMessage id='manage.zap_split.new_account' defaultMessage='Account:' />
<SearchZapSplit autosuggest onChange={setAccountSelected} />
</div>
}
<div className='flex w-full flex-col justify-center md:items-start'>
<FormattedMessage id='manage.zap_split.new_account_message' defaultMessage='Message:' />
<Input
value={newAccount.message}
onChange={(e) =>
setNewAccount((previousValue) => ({
...previousValue,
message: e.target.value,
}))
}
/>
</div>
</div>
<HStack space={2} className='w-full md:flex-1 md:justify-end'>
<div className='flex w-[96%] flex-col md:w-40'>
{formattedWeight(newWeight)}%
<Slider value={newWeight} onChange={(e) => handleChange(e)} />
</div>
<Button
type='button'
size='xs'
icon={closeIcon}
className='absolute right-0 top-0 md:relative'
theme='transparent'
onClick={closeNewAccount}
/>
</HStack>
</div>
</ListItem>
);
};
export default AddNewAccount;