Robot profile

This commit is contained in:
koalasat
2025-07-18 13:41:38 +02:00
parent 75838dd1fc
commit abcf6d8412
19 changed files with 286 additions and 257 deletions

View File

@ -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>
);

View File

@ -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'>&nbsp;{t('Claim Sats!')} </Typography>
)}
{robot?.activeOrderId ? (
<Typography color='success'>
&nbsp;<b>{t('Active order!')}</b>
</Typography>
) : (
robot?.lastOrderId && <Typography color='warning'>&nbsp;{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'>
&nbsp;<b>{t('Active order!')}</b>
</Typography>
) : robot?.lastOrderId ? (
<Typography color='warning'>&nbsp;{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>
</>
);
};

View File

@ -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",

View File

@ -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é",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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": "ダーク",

View File

@ -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",

View File

@ -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",

View File

@ -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": "Темный",

View File

@ -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",

View File

@ -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",

View File

@ -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": "มืด",

View File

@ -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": "黑色",

View File

@ -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": "深色",