mirror of
https://github.com/RoboSats/robosats.git
synced 2025-09-13 00:56:22 +00:00
Robot profile
This commit is contained in:
@ -94,18 +94,24 @@ const ProfileDialog = ({ open = false, onClose }: Props): React.JSX.Element => {
|
||||
<b>{t('Coordinators that know your robot:')}</b>
|
||||
</Typography>
|
||||
|
||||
{federation.getCoordinators().map((coordinator: Coordinator): React.JSX.Element => {
|
||||
const coordinatorRobot = garage.getSlot()?.getRobot(coordinator.shortAlias);
|
||||
return (
|
||||
<div key={coordinator.shortAlias}>
|
||||
<RobotInfo
|
||||
coordinator={coordinator}
|
||||
onClose={onClose}
|
||||
disabled={coordinatorRobot?.loading}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
<List
|
||||
sx={{ width: '100%', bgcolor: 'background.paper' }}
|
||||
component='nav'
|
||||
aria-labelledby='coordinators-list'
|
||||
>
|
||||
{federation.getCoordinators().map((coordinator: Coordinator): React.JSX.Element => {
|
||||
const coordinatorRobot = garage.getSlot()?.getRobot(coordinator.shortAlias);
|
||||
return (
|
||||
<div key={coordinator.shortAlias}>
|
||||
<RobotInfo
|
||||
coordinator={coordinator}
|
||||
onClose={onClose}
|
||||
disabled={coordinatorRobot?.loading}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</List>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
|
||||
@ -17,11 +17,11 @@ import {
|
||||
FormControlLabel,
|
||||
TextField,
|
||||
CircularProgress,
|
||||
Accordion,
|
||||
AccordionDetails,
|
||||
AccordionSummary,
|
||||
Dialog,
|
||||
DialogContent,
|
||||
DialogActions,
|
||||
} from '@mui/material';
|
||||
import { Numbers, Send, EmojiEvents, ExpandMore } from '@mui/icons-material';
|
||||
import { Numbers, Send, EmojiEvents } from '@mui/icons-material';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { type Coordinator } from '../../models';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
@ -33,6 +33,7 @@ import { signCleartextMessage } from '../../pgp';
|
||||
import { GarageContext, type UseGarageStoreType } from '../../contexts/GarageContext';
|
||||
import { FederationContext, type UseFederationStoreType } from '../../contexts/FederationContext';
|
||||
import { UseAppStoreType, AppContext } from '../../contexts/AppContext';
|
||||
import RobotAvatar from '../RobotAvatar';
|
||||
|
||||
interface Props {
|
||||
coordinator: Coordinator;
|
||||
@ -42,7 +43,7 @@ interface Props {
|
||||
|
||||
const RobotInfo: React.FC<Props> = ({ coordinator, onClose, disabled }: Props) => {
|
||||
const { garage } = useContext<UseGarageStoreType>(GarageContext);
|
||||
const { navigateToPage } = useContext<UseAppStoreType>(AppContext);
|
||||
const { setOpen, navigateToPage } = useContext<UseAppStoreType>(AppContext);
|
||||
const { federation } = useContext<UseFederationStoreType>(FederationContext);
|
||||
const navigate = useNavigate();
|
||||
const { t } = useTranslation();
|
||||
@ -56,6 +57,7 @@ const RobotInfo: React.FC<Props> = ({ coordinator, onClose, disabled }: Props) =
|
||||
const [openClaimRewards, setOpenClaimRewards] = useState<boolean>(false);
|
||||
const [weblnEnabled, setWeblnEnabled] = useState<boolean>(false);
|
||||
const [openEnableTelegram, setOpenEnableTelegram] = useState<boolean>(false);
|
||||
const [openOptions, setOpenOptions] = useState<boolean>(false);
|
||||
|
||||
const robot = garage.getSlot()?.getRobot(coordinator.shortAlias);
|
||||
|
||||
@ -111,240 +113,278 @@ const RobotInfo: React.FC<Props> = ({ coordinator, onClose, disabled }: Props) =
|
||||
};
|
||||
|
||||
return (
|
||||
<Accordion disabled={disabled}>
|
||||
<AccordionSummary expandIcon={<ExpandMore />}>
|
||||
{`${coordinator.longAlias}:`}
|
||||
{(robot?.earnedRewards ?? 0) > 0 && (
|
||||
<Typography color='success'> {t('Claim Sats!')} </Typography>
|
||||
)}
|
||||
{robot?.activeOrderId ? (
|
||||
<Typography color='success'>
|
||||
<b>{t('Active order!')}</b>
|
||||
</Typography>
|
||||
) : (
|
||||
robot?.lastOrderId && <Typography color='warning'> {t('finished order')}</Typography>
|
||||
)}
|
||||
</AccordionSummary>
|
||||
<AccordionDetails>
|
||||
<List dense disablePadding={true}>
|
||||
{robot?.activeOrderId ? (
|
||||
<>
|
||||
<ListItemButton disabled={disabled} onClick={() => setOpenOptions(true)}>
|
||||
<ListItemIcon>
|
||||
<RobotAvatar
|
||||
shortAlias={coordinator.federated ? coordinator.shortAlias : undefined}
|
||||
hashId={coordinator.federated ? undefined : coordinator.mainnet.onion}
|
||||
style={{ width: '2.5em', height: '2.5em' }}
|
||||
smooth={true}
|
||||
small={true}
|
||||
/>
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={coordinator.longAlias}
|
||||
secondary={
|
||||
robot?.activeOrderId ? (
|
||||
<Typography color='success'>
|
||||
<b>{t('Active order!')}</b>
|
||||
</Typography>
|
||||
) : robot?.lastOrderId ? (
|
||||
<Typography color='warning'> {t('Finished order')}</Typography>
|
||||
) : (
|
||||
<Typography>{t('No existing orders found')}</Typography>
|
||||
)
|
||||
}
|
||||
/>
|
||||
</ListItemButton>
|
||||
<Dialog open={openOptions} key={coordinator.shortAlias} onClose={() => setOpenOptions(false)}>
|
||||
<DialogContent>
|
||||
<List dense disablePadding={true}>
|
||||
<ListItemButton
|
||||
onClick={() => {
|
||||
navigateToPage(
|
||||
`order/${String(coordinator.shortAlias)}/${String(robot?.activeOrderId)}`,
|
||||
navigate,
|
||||
);
|
||||
onClose();
|
||||
setOpen((open) => {
|
||||
return { ...open, coordinator: coordinator.shortAlias };
|
||||
});
|
||||
}}
|
||||
>
|
||||
<ListItemIcon>
|
||||
<Badge badgeContent='' color='primary'>
|
||||
<RobotAvatar
|
||||
shortAlias={coordinator.federated ? coordinator.shortAlias : undefined}
|
||||
hashId={coordinator.federated ? undefined : coordinator.mainnet.onion}
|
||||
style={{ width: '1.8em', height: '1.8em' }}
|
||||
smooth={true}
|
||||
small={true}
|
||||
/>
|
||||
</ListItemIcon>
|
||||
|
||||
<Typography variant='h5'>{coordinator.longAlias}</Typography>
|
||||
</ListItemButton>
|
||||
{robot?.activeOrderId ? (
|
||||
<ListItemButton
|
||||
onClick={() => {
|
||||
navigateToPage(
|
||||
`order/${String(coordinator.shortAlias)}/${String(robot?.activeOrderId)}`,
|
||||
navigate,
|
||||
);
|
||||
onClose();
|
||||
}}
|
||||
>
|
||||
<ListItemIcon>
|
||||
<Badge badgeContent='' color='primary'>
|
||||
<Numbers color='primary' />
|
||||
</Badge>
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t('One active order #{{orderID}}', {
|
||||
orderID: String(robot?.activeOrderId),
|
||||
})}
|
||||
secondary={t('Your current order')}
|
||||
/>
|
||||
</ListItemButton>
|
||||
) : robot?.lastOrderId ? (
|
||||
<ListItemButton
|
||||
onClick={() => {
|
||||
navigateToPage(
|
||||
`order/${String(coordinator.shortAlias)}/${String(robot?.lastOrderId)}`,
|
||||
navigate,
|
||||
);
|
||||
onClose();
|
||||
}}
|
||||
>
|
||||
<ListItemIcon>
|
||||
<Numbers color='primary' />
|
||||
</Badge>
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t('One active order #{{orderID}}', {
|
||||
orderID: String(robot?.activeOrderId),
|
||||
})}
|
||||
secondary={t('Your current order')}
|
||||
/>
|
||||
</ListItemButton>
|
||||
) : robot?.lastOrderId ? (
|
||||
<ListItemButton
|
||||
onClick={() => {
|
||||
navigateToPage(
|
||||
`order/${String(coordinator.shortAlias)}/${String(robot?.lastOrderId)}`,
|
||||
navigate,
|
||||
);
|
||||
onClose();
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t('Your last order #{{orderID}}', {
|
||||
orderID: robot?.lastOrderId,
|
||||
})}
|
||||
secondary={t('Inactive order')}
|
||||
/>
|
||||
</ListItemButton>
|
||||
) : (
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<Numbers />
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t('No active orders')}
|
||||
secondary={t('You do not have previous orders')}
|
||||
/>
|
||||
</ListItem>
|
||||
)}
|
||||
|
||||
<Divider />
|
||||
|
||||
<EnableTelegramDialog
|
||||
open={openEnableTelegram}
|
||||
onClose={() => {
|
||||
setOpenEnableTelegram(false);
|
||||
}}
|
||||
>
|
||||
<ListItemIcon>
|
||||
<Numbers color='primary' />
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t('Your last order #{{orderID}}', {
|
||||
orderID: robot?.lastOrderId,
|
||||
})}
|
||||
secondary={t('Inactive order')}
|
||||
/>
|
||||
</ListItemButton>
|
||||
) : (
|
||||
tgBotName={robot?.tgBotName ?? ''}
|
||||
tgToken={robot?.tgToken ?? ''}
|
||||
/>
|
||||
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<Numbers />
|
||||
<Send />
|
||||
</ListItemIcon>
|
||||
<ListItemText
|
||||
primary={t('No active orders')}
|
||||
secondary={t('You do not have previous orders')}
|
||||
/>
|
||||
</ListItem>
|
||||
)}
|
||||
|
||||
<Divider />
|
||||
|
||||
<EnableTelegramDialog
|
||||
open={openEnableTelegram}
|
||||
onClose={() => {
|
||||
setOpenEnableTelegram(false);
|
||||
}}
|
||||
tgBotName={robot?.tgBotName ?? ''}
|
||||
tgToken={robot?.tgToken ?? ''}
|
||||
/>
|
||||
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<Send />
|
||||
</ListItemIcon>
|
||||
|
||||
<ListItemText>
|
||||
{robot?.tgEnabled ? (
|
||||
<Typography color={theme.palette.success.main}>
|
||||
<b>{t('Telegram enabled')}</b>
|
||||
</Typography>
|
||||
) : (
|
||||
<Button
|
||||
color='primary'
|
||||
onClick={() => {
|
||||
setOpenEnableTelegram(true);
|
||||
}}
|
||||
>
|
||||
{t('Enable Telegram Notifications')}
|
||||
</Button>
|
||||
)}
|
||||
</ListItemText>
|
||||
</ListItem>
|
||||
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<UserNinjaIcon />
|
||||
</ListItemIcon>
|
||||
|
||||
<ListItemText>
|
||||
<Tooltip
|
||||
placement='bottom'
|
||||
enterTouchDelay={0}
|
||||
title={t(
|
||||
"Stealth lightning invoices do not contain details about the trade except an order reference. Enable this setting if you don't want to disclose details to a custodial lightning wallet.",
|
||||
<ListItemText>
|
||||
{robot?.tgEnabled ? (
|
||||
<Typography color={theme.palette.success.main}>
|
||||
<b>{t('Telegram enabled')}</b>
|
||||
</Typography>
|
||||
) : (
|
||||
<Button
|
||||
color='primary'
|
||||
onClick={() => {
|
||||
setOpenEnableTelegram(true);
|
||||
}}
|
||||
>
|
||||
{t('Enable Telegram Notifications')}
|
||||
</Button>
|
||||
)}
|
||||
>
|
||||
<Grid item>
|
||||
<FormControlLabel
|
||||
labelPlacement='end'
|
||||
label={t('Use stealth invoices')}
|
||||
control={
|
||||
<Switch
|
||||
checked={robot?.stealthInvoices}
|
||||
onChange={() => {
|
||||
setStealthInvoice();
|
||||
}}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</Grid>
|
||||
</Tooltip>
|
||||
</ListItemText>
|
||||
</ListItem>
|
||||
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<EmojiEvents />
|
||||
</ListItemIcon>
|
||||
|
||||
{!openClaimRewards ? (
|
||||
<ListItemText secondary={t('Your compensations')}>
|
||||
<Grid container justifyContent='space-between'>
|
||||
<Grid item xs={9}>
|
||||
<Typography>{`${String(robot?.earnedRewards)} Sats`}</Typography>
|
||||
</Grid>
|
||||
|
||||
<Grid item xs={3}>
|
||||
<Button
|
||||
disabled={robot?.earnedRewards === 0}
|
||||
onClick={() => {
|
||||
setOpenClaimRewards(true);
|
||||
}}
|
||||
variant='contained'
|
||||
size='small'
|
||||
>
|
||||
{t('Claim')}
|
||||
</Button>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</ListItemText>
|
||||
) : (
|
||||
<form noValidate style={{ maxWidth: 270 }}>
|
||||
<Grid container style={{ display: 'flex', alignItems: 'stretch' }}>
|
||||
<Grid item style={{ display: 'flex', maxWidth: 160 }}>
|
||||
<TextField
|
||||
error={Boolean(badInvoice)}
|
||||
helperText={badInvoice ?? ''}
|
||||
label={t('Invoice for {{amountSats}} Sats', {
|
||||
amountSats: robot?.earnedRewards,
|
||||
})}
|
||||
size='small'
|
||||
value={rewardInvoice}
|
||||
onChange={(e) => {
|
||||
setRewardInvoice(e.target.value);
|
||||
}}
|
||||
</ListItem>
|
||||
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<UserNinjaIcon />
|
||||
</ListItemIcon>
|
||||
|
||||
<ListItemText>
|
||||
<Tooltip
|
||||
placement='bottom'
|
||||
enterTouchDelay={0}
|
||||
title={t(
|
||||
"Stealth lightning invoices do not contain details about the trade except an order reference. Enable this setting if you don't want to disclose details to a custodial lightning wallet.",
|
||||
)}
|
||||
>
|
||||
<Grid item>
|
||||
<FormControlLabel
|
||||
labelPlacement='end'
|
||||
label={t('Use stealth invoices')}
|
||||
control={
|
||||
<Switch
|
||||
checked={robot?.stealthInvoices}
|
||||
onChange={() => {
|
||||
setStealthInvoice();
|
||||
}}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid item alignItems='stretch' style={{ display: 'flex', maxWidth: 80 }}>
|
||||
<Button
|
||||
sx={{ maxHeight: 38 }}
|
||||
disabled={rewardInvoice === ''}
|
||||
onClick={(e) => {
|
||||
handleSubmitInvoiceClicked(e, rewardInvoice);
|
||||
}}
|
||||
variant='contained'
|
||||
color='primary'
|
||||
size='small'
|
||||
type='submit'
|
||||
>
|
||||
{t('Submit')}
|
||||
</Button>
|
||||
</Grid>
|
||||
</Grid>
|
||||
{weblnEnabled ? (
|
||||
<Grid container style={{ display: 'flex', alignItems: 'stretch' }}>
|
||||
<Grid item alignItems='stretch' style={{ display: 'flex', maxWidth: 240 }}>
|
||||
</Tooltip>
|
||||
</ListItemText>
|
||||
</ListItem>
|
||||
|
||||
<ListItem>
|
||||
<ListItemIcon>
|
||||
<EmojiEvents />
|
||||
</ListItemIcon>
|
||||
|
||||
{!openClaimRewards ? (
|
||||
<ListItemText secondary={t('Your compensations')}>
|
||||
<Grid container justifyContent='space-between'>
|
||||
<Grid item xs={9}>
|
||||
<Typography>{`${String(robot?.earnedRewards)} Sats`}</Typography>
|
||||
</Grid>
|
||||
|
||||
<Grid item xs={3}>
|
||||
<Button
|
||||
sx={{ maxHeight: 38, minWidth: 230 }}
|
||||
disabled={robot?.earnedRewards === 0}
|
||||
onClick={() => {
|
||||
setOpenClaimRewards(true);
|
||||
}}
|
||||
variant='contained'
|
||||
size='small'
|
||||
>
|
||||
{t('Claim')}
|
||||
</Button>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</ListItemText>
|
||||
) : (
|
||||
<form noValidate style={{ maxWidth: 270 }}>
|
||||
<Grid container style={{ display: 'flex', alignItems: 'stretch' }}>
|
||||
<Grid item style={{ display: 'flex', maxWidth: 160 }}>
|
||||
<TextField
|
||||
error={Boolean(badInvoice)}
|
||||
helperText={badInvoice ?? ''}
|
||||
label={t('Invoice for {{amountSats}} Sats', {
|
||||
amountSats: robot?.earnedRewards,
|
||||
})}
|
||||
size='small'
|
||||
value={rewardInvoice}
|
||||
onChange={(e) => {
|
||||
setRewardInvoice(e.target.value);
|
||||
}}
|
||||
/>
|
||||
</Grid>
|
||||
<Grid item alignItems='stretch' style={{ display: 'flex', maxWidth: 80 }}>
|
||||
<Button
|
||||
sx={{ maxHeight: 38 }}
|
||||
disabled={rewardInvoice === ''}
|
||||
onClick={(e) => {
|
||||
handleWeblnInvoiceClicked(e);
|
||||
handleSubmitInvoiceClicked(e, rewardInvoice);
|
||||
}}
|
||||
variant='contained'
|
||||
color='primary'
|
||||
size='small'
|
||||
type='submit'
|
||||
>
|
||||
{t('Generate with Webln')}
|
||||
{t('Submit')}
|
||||
</Button>
|
||||
</Grid>
|
||||
</Grid>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
</form>
|
||||
{weblnEnabled ? (
|
||||
<Grid container style={{ display: 'flex', alignItems: 'stretch' }}>
|
||||
<Grid item alignItems='stretch' style={{ display: 'flex', maxWidth: 240 }}>
|
||||
<Button
|
||||
sx={{ maxHeight: 38, minWidth: 230 }}
|
||||
onClick={(e) => {
|
||||
handleWeblnInvoiceClicked(e);
|
||||
}}
|
||||
variant='contained'
|
||||
color='primary'
|
||||
size='small'
|
||||
type='submit'
|
||||
>
|
||||
{t('Generate with Webln')}
|
||||
</Button>
|
||||
</Grid>
|
||||
</Grid>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
</form>
|
||||
)}
|
||||
</ListItem>
|
||||
|
||||
{showRewardsSpinner && (
|
||||
<div style={{ display: 'flex', justifyContent: 'center' }}>
|
||||
<CircularProgress />
|
||||
</div>
|
||||
)}
|
||||
</ListItem>
|
||||
|
||||
{showRewardsSpinner && (
|
||||
<div style={{ display: 'flex', justifyContent: 'center' }}>
|
||||
<CircularProgress />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{withdrawn && (
|
||||
<div style={{ display: 'flex', justifyContent: 'center' }}>
|
||||
<Typography color='primary' variant='body2'>
|
||||
<b>{t('There it goes!')}</b>
|
||||
</Typography>
|
||||
</div>
|
||||
)}
|
||||
</List>
|
||||
</AccordionDetails>
|
||||
</Accordion>
|
||||
{withdrawn && (
|
||||
<div style={{ display: 'flex', justifyContent: 'center' }}>
|
||||
<Typography color='primary' variant='body2'>
|
||||
<b>{t('There it goes!')}</b>
|
||||
</Typography>
|
||||
</div>
|
||||
)}
|
||||
</List>
|
||||
</DialogContent>
|
||||
<DialogActions>
|
||||
<Button onClick={() => setOpenOptions(false)} size='large'>
|
||||
{t('Back')}
|
||||
</Button>
|
||||
</DialogActions>
|
||||
</Dialog>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Active order!",
|
||||
"Claim": "Retirar",
|
||||
"Claim Sats!": "Reclamar Sats!",
|
||||
"Enable Telegram Notifications": "Habilita notificacions a Telegram",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Generar amb Webln",
|
||||
"Inactive order": "Ordre inactiva",
|
||||
"Invoice for {{amountSats}} Sats": "Factura per {{amountSats}} Sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Les teves compensacions",
|
||||
"Your current order": "La teva ordre actual",
|
||||
"Your last order #{{orderID}}": "La teva última ordre #{{orderID}}",
|
||||
"finished order": "Ordre finalitzada",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Fosc",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Aktivní objednávka!",
|
||||
"Claim": "Vybrat",
|
||||
"Claim Sats!": "Vybrat Sats!",
|
||||
"Enable Telegram Notifications": "Povolit Telegram notifikace",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Generovat s Webln",
|
||||
"Inactive order": "Neaktivní objednávka",
|
||||
"Invoice for {{amountSats}} Sats": "Faktura pro {{amountSats}} Satů",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Vaše kompenzace",
|
||||
"Your current order": "Vaše aktuální objednávka",
|
||||
"Your last order #{{orderID}}": "Vaše poslední objednávka #{{orderID}}",
|
||||
"finished order": "dokončená objednávka",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Tmavé",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Aktive Bestellung!",
|
||||
"Claim": "Erhalten",
|
||||
"Claim Sats!": "Sats beanspruchen!",
|
||||
"Enable Telegram Notifications": "Telegram-Benachrichtigungen aktivieren",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Mit Webln generieren",
|
||||
"Inactive order": "Inaktive Bestellung",
|
||||
"Invoice for {{amountSats}} Sats": "Rechnung für {{amountSats}} Sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Deine Entschädigungen",
|
||||
"Your current order": "Deine aktuelle Bestellung",
|
||||
"Your last order #{{orderID}}": "Deine letzte Bestellung #{{orderID}}",
|
||||
"finished order": "abgeschlossene Bestellung",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Dunkel",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Active order!",
|
||||
"Claim": "Claim",
|
||||
"Claim Sats!": "Claim Sats!",
|
||||
"Enable Telegram Notifications": "Enable Telegram Notifications",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Generate with Webln",
|
||||
"Inactive order": "Inactive order",
|
||||
"Invoice for {{amountSats}} Sats": "Invoice for {{amountSats}} Sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Your compensations",
|
||||
"Your current order": "Your current order",
|
||||
"Your last order #{{orderID}}": "Your last order #{{orderID}}",
|
||||
"finished order": "finished order",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Dark",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "¡Orden activa!",
|
||||
"Claim": "Reclamar",
|
||||
"Claim Sats!": "¡Reclamar Sats!",
|
||||
"Enable Telegram Notifications": "Activar Notificaciones de Telegram",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Generar con Webln",
|
||||
"Inactive order": "Orden inactiva",
|
||||
"Invoice for {{amountSats}} Sats": "Factura de {{amountSats}} Sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Tus compensaciones",
|
||||
"Your current order": "Tu orden actual",
|
||||
"Your last order #{{orderID}}": "Tu última orden #{{orderID}}",
|
||||
"finished order": "orden finalizada",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Oscuro",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Eskaera aktiboa!",
|
||||
"Claim": "Eskatu",
|
||||
"Claim Sats!": "Eskatu Sats-ak!",
|
||||
"Enable Telegram Notifications": "Baimendu Telegram Jakinarazpenak",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Sortu Webln Laketa",
|
||||
"Inactive order": "Eskaera ez aktiboa",
|
||||
"Invoice for {{amountSats}} Sats": "{{amountSats}} Sateko faktura",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Zure konpentsazioak",
|
||||
"Your current order": "Zure oraingo eskaera",
|
||||
"Your last order #{{orderID}}": "Zure azken eskaera #{{orderID}}",
|
||||
"finished order": "eskaera amaituta",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Iluna",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Ordre actif!",
|
||||
"Claim": "Réclamer",
|
||||
"Claim Sats!": "Réclamer les Sats!",
|
||||
"Enable Telegram Notifications": "Activer les notifications Telegram",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Générer avec Webln",
|
||||
"Inactive order": "Ordre inactif",
|
||||
"Invoice for {{amountSats}} Sats": "Facture pour {{amountSats}} Sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Vos compensations",
|
||||
"Your current order": "Votre commande en cours",
|
||||
"Your last order #{{orderID}}": "Votre dernière commande #{{orderID}}",
|
||||
"finished order": "commande terminée",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Sombre",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Ordine attivo!",
|
||||
"Claim": "Richiedi",
|
||||
"Claim Sats!": "Richiedi Sats!",
|
||||
"Enable Telegram Notifications": "Abilita Notifiche Telegram",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Genera con Webln",
|
||||
"Inactive order": "Ordine inattivo",
|
||||
"Invoice for {{amountSats}} Sats": "Fattura per {{amountSats}} Sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Le tue compensazioni",
|
||||
"Your current order": "Il tuo ordine attuale",
|
||||
"Your last order #{{orderID}}": "Il tuo ultimo ordine #{{orderID}}",
|
||||
"finished order": "ordine completato",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Scuro",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "アクティブな注文!",
|
||||
"Claim": "請求する",
|
||||
"Claim Sats!": "Satsを請求する!",
|
||||
"Enable Telegram Notifications": "Telegram通知を有効にする",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Weblnで生成",
|
||||
"Inactive order": "非アクティブなオーダー",
|
||||
"Invoice for {{amountSats}} Sats": " {{amountSats}} Satsのインボイス",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "あなたの補償",
|
||||
"Your current order": "現在のオーダー",
|
||||
"Your last order #{{orderID}}": "前回のオーダー #{{orderID}}",
|
||||
"finished order": "終了したオーダー",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "ダーク",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Aktywne zamówienie!",
|
||||
"Claim": "Odebrać",
|
||||
"Claim Sats!": "Odebrać Sats!",
|
||||
"Enable Telegram Notifications": "Włącz powiadomienia Telegram",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Generuj z Webln",
|
||||
"Inactive order": "Nieaktywne zamówienie",
|
||||
"Invoice for {{amountSats}} Sats": "Faktura za {{amountSats}} Sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Twoje rekompensaty",
|
||||
"Your current order": "Twoje obecne zamówienie",
|
||||
"Your last order #{{orderID}}": "Twoje ostatnie zamówienie #{{orderID}}",
|
||||
"finished order": "zakończone zamówienie",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Ciemny",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Ordem ativa!",
|
||||
"Claim": "Reivindicar",
|
||||
"Claim Sats!": "Reivindicar Sats!",
|
||||
"Enable Telegram Notifications": "Habilitar notificações do Telegram",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Gerar com Webln",
|
||||
"Inactive order": "Ordem inativa",
|
||||
"Invoice for {{amountSats}} Sats": "Fatura para {{amountSats}} Sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Suas compensações",
|
||||
"Your current order": "Sua ordem atual",
|
||||
"Your last order #{{orderID}}": "Sua última ordem #{{orderID}}",
|
||||
"finished order": "ordem finalizada",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Escuro",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Активный ордер!",
|
||||
"Claim": "Запросить",
|
||||
"Claim Sats!": "Запросить Сатоши!",
|
||||
"Enable Telegram Notifications": "Включить уведомления Telegram",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Генерировать с помощью Webln",
|
||||
"Inactive order": "Неактивный ордер",
|
||||
"Invoice for {{amountSats}} Sats": "Инвойс на {{amountSats}} Сатоши",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Ваши компенсации",
|
||||
"Your current order": "Ваш текущий ордер",
|
||||
"Your last order #{{orderID}}": "Ваш последний ордер #{{orderID}}",
|
||||
"finished order": "завершенный ордер",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Темный",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Aktiv order!",
|
||||
"Claim": "Anspråk",
|
||||
"Claim Sats!": "Anspråk på Sats!",
|
||||
"Enable Telegram Notifications": "Aktivera Telegram-aviseringar",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Generera med Webln",
|
||||
"Inactive order": "Inaktiv order",
|
||||
"Invoice for {{amountSats}} Sats": "Faktura för {{amountSats}} sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Dina kompensationer",
|
||||
"Your current order": "Din nuvarande order",
|
||||
"Your last order #{{orderID}}": "Din senaste order #{{orderID}}",
|
||||
"finished order": "avslutad order",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Mörk",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "Agizo la Kazi!",
|
||||
"Claim": "Dai",
|
||||
"Claim Sats!": "Dai Sats!",
|
||||
"Enable Telegram Notifications": "Washa Arifa za Telegram",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "Zalisha kwa Webln",
|
||||
"Inactive order": "Agizo lisilo hai",
|
||||
"Invoice for {{amountSats}} Sats": "Ankara kwa {{amountSats}} Sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "Malipo yako",
|
||||
"Your current order": "Agizo lako la sasa",
|
||||
"Your last order #{{orderID}}": "Agizo lako la mwisho #{{orderID}}",
|
||||
"finished order": "agizo lililokamilika",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "Giza",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "คำสั่งซื้อที่ใช้งานอยู่!",
|
||||
"Claim": "รับรางวัล",
|
||||
"Claim Sats!": "รับ Sats!",
|
||||
"Enable Telegram Notifications": "เปิดใช้การแจ้งเตือน Telegram",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "สร้างด้วย Webln",
|
||||
"Inactive order": "คำสั่งซื้อที่ไม่ใช้งาน",
|
||||
"Invoice for {{amountSats}} Sats": "ใบแจ้งหนี้สำหรับ {{amountSats}} Sats",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "ค่าชดเชยของคุณ",
|
||||
"Your current order": "คำสั่งซื้อปัจจุบันของคุณ",
|
||||
"Your last order #{{orderID}}": "คำสั่งซื้อสุดท้ายของคุณ #{{orderID}}",
|
||||
"finished order": "คำสั่งซื้อเสร็จสิ้น",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "มืด",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "活跃订单!",
|
||||
"Claim": "领取",
|
||||
"Claim Sats!": "领取聪!",
|
||||
"Enable Telegram Notifications": "开启电报通知",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "使用 Webln 生成",
|
||||
"Inactive order": "不活跃订单",
|
||||
"Invoice for {{amountSats}} Sats": "{{amountSats}}聪的发票",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "你的补偿",
|
||||
"Your current order": "你当前的订单",
|
||||
"Your last order #{{orderID}}": "你的上一笔订单#{{orderID}}",
|
||||
"finished order": "已完成的订单",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "黑色",
|
||||
|
||||
@ -512,8 +512,8 @@
|
||||
"#50": "Phrases in components/RobotInfo/index.tsx",
|
||||
"Active order!": "活躍訂單!",
|
||||
"Claim": "索取",
|
||||
"Claim Sats!": "索取聰!",
|
||||
"Enable Telegram Notifications": "啟用 Telegram 通知",
|
||||
"Finished order": "Finished order",
|
||||
"Generate with Webln": "使用 Webln 生成",
|
||||
"Inactive order": "不活躍的訂單",
|
||||
"Invoice for {{amountSats}} Sats": "{{amountSats}} 聰的發票",
|
||||
@ -527,7 +527,6 @@
|
||||
"Your compensations": "您的補償",
|
||||
"Your current order": "您當前的訂單",
|
||||
"Your last order #{{orderID}}": "您的上一筆交易 #{{orderID}}",
|
||||
"finished order": "完成的訂單",
|
||||
"#51": "Phrases in components/SettingsForm/index.tsx",
|
||||
"API": "API",
|
||||
"Dark": "深色",
|
||||
|
||||
Reference in New Issue
Block a user