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> <b>{t('Coordinators that know your robot:')}</b>
</Typography> </Typography>
{federation.getCoordinators().map((coordinator: Coordinator): React.JSX.Element => { <List
const coordinatorRobot = garage.getSlot()?.getRobot(coordinator.shortAlias); sx={{ width: '100%', bgcolor: 'background.paper' }}
return ( component='nav'
<div key={coordinator.shortAlias}> aria-labelledby='coordinators-list'
<RobotInfo >
coordinator={coordinator} {federation.getCoordinators().map((coordinator: Coordinator): React.JSX.Element => {
onClose={onClose} const coordinatorRobot = garage.getSlot()?.getRobot(coordinator.shortAlias);
disabled={coordinatorRobot?.loading} return (
/> <div key={coordinator.shortAlias}>
</div> <RobotInfo
); coordinator={coordinator}
})} onClose={onClose}
disabled={coordinatorRobot?.loading}
/>
</div>
);
})}
</List>
</DialogContent> </DialogContent>
</Dialog> </Dialog>
); );

View File

@ -17,11 +17,11 @@ import {
FormControlLabel, FormControlLabel,
TextField, TextField,
CircularProgress, CircularProgress,
Accordion, Dialog,
AccordionDetails, DialogContent,
AccordionSummary, DialogActions,
} from '@mui/material'; } 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 { useNavigate } from 'react-router-dom';
import { type Coordinator } from '../../models'; import { type Coordinator } from '../../models';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -33,6 +33,7 @@ import { signCleartextMessage } from '../../pgp';
import { GarageContext, type UseGarageStoreType } from '../../contexts/GarageContext'; import { GarageContext, type UseGarageStoreType } from '../../contexts/GarageContext';
import { FederationContext, type UseFederationStoreType } from '../../contexts/FederationContext'; import { FederationContext, type UseFederationStoreType } from '../../contexts/FederationContext';
import { UseAppStoreType, AppContext } from '../../contexts/AppContext'; import { UseAppStoreType, AppContext } from '../../contexts/AppContext';
import RobotAvatar from '../RobotAvatar';
interface Props { interface Props {
coordinator: Coordinator; coordinator: Coordinator;
@ -42,7 +43,7 @@ interface Props {
const RobotInfo: React.FC<Props> = ({ coordinator, onClose, disabled }: Props) => { const RobotInfo: React.FC<Props> = ({ coordinator, onClose, disabled }: Props) => {
const { garage } = useContext<UseGarageStoreType>(GarageContext); const { garage } = useContext<UseGarageStoreType>(GarageContext);
const { navigateToPage } = useContext<UseAppStoreType>(AppContext); const { setOpen, navigateToPage } = useContext<UseAppStoreType>(AppContext);
const { federation } = useContext<UseFederationStoreType>(FederationContext); const { federation } = useContext<UseFederationStoreType>(FederationContext);
const navigate = useNavigate(); const navigate = useNavigate();
const { t } = useTranslation(); const { t } = useTranslation();
@ -56,6 +57,7 @@ const RobotInfo: React.FC<Props> = ({ coordinator, onClose, disabled }: Props) =
const [openClaimRewards, setOpenClaimRewards] = useState<boolean>(false); const [openClaimRewards, setOpenClaimRewards] = useState<boolean>(false);
const [weblnEnabled, setWeblnEnabled] = useState<boolean>(false); const [weblnEnabled, setWeblnEnabled] = useState<boolean>(false);
const [openEnableTelegram, setOpenEnableTelegram] = useState<boolean>(false); const [openEnableTelegram, setOpenEnableTelegram] = useState<boolean>(false);
const [openOptions, setOpenOptions] = useState<boolean>(false);
const robot = garage.getSlot()?.getRobot(coordinator.shortAlias); const robot = garage.getSlot()?.getRobot(coordinator.shortAlias);
@ -111,240 +113,278 @@ const RobotInfo: React.FC<Props> = ({ coordinator, onClose, disabled }: Props) =
}; };
return ( return (
<Accordion disabled={disabled}> <>
<AccordionSummary expandIcon={<ExpandMore />}> <ListItemButton disabled={disabled} onClick={() => setOpenOptions(true)}>
{`${coordinator.longAlias}:`} <ListItemIcon>
{(robot?.earnedRewards ?? 0) > 0 && ( <RobotAvatar
<Typography color='success'>&nbsp;{t('Claim Sats!')} </Typography> shortAlias={coordinator.federated ? coordinator.shortAlias : undefined}
)} hashId={coordinator.federated ? undefined : coordinator.mainnet.onion}
{robot?.activeOrderId ? ( style={{ width: '2.5em', height: '2.5em' }}
<Typography color='success'> smooth={true}
&nbsp;<b>{t('Active order!')}</b> small={true}
</Typography> />
) : ( </ListItemIcon>
robot?.lastOrderId && <Typography color='warning'>&nbsp;{t('finished order')}</Typography> <ListItemText
)} primary={coordinator.longAlias}
</AccordionSummary> secondary={
<AccordionDetails> robot?.activeOrderId ? (
<List dense disablePadding={true}> <Typography color='success'>
{robot?.activeOrderId ? ( &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 <ListItemButton
onClick={() => { onClick={() => {
navigateToPage( setOpen((open) => {
`order/${String(coordinator.shortAlias)}/${String(robot?.activeOrderId)}`, return { ...open, coordinator: coordinator.shortAlias };
navigate, });
);
onClose();
}} }}
> >
<ListItemIcon> <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' /> <Numbers color='primary' />
</Badge> </ListItemIcon>
</ListItemIcon> <ListItemText
<ListItemText primary={t('Your last order #{{orderID}}', {
primary={t('One active order #{{orderID}}', { orderID: robot?.lastOrderId,
orderID: String(robot?.activeOrderId), })}
})} secondary={t('Inactive order')}
secondary={t('Your current order')} />
/> </ListItemButton>
</ListItemButton> ) : (
) : robot?.lastOrderId ? ( <ListItem>
<ListItemButton <ListItemIcon>
onClick={() => { <Numbers />
navigateToPage( </ListItemIcon>
`order/${String(coordinator.shortAlias)}/${String(robot?.lastOrderId)}`, <ListItemText
navigate, primary={t('No active orders')}
); secondary={t('You do not have previous orders')}
onClose(); />
</ListItem>
)}
<Divider />
<EnableTelegramDialog
open={openEnableTelegram}
onClose={() => {
setOpenEnableTelegram(false);
}} }}
> tgBotName={robot?.tgBotName ?? ''}
<ListItemIcon> tgToken={robot?.tgToken ?? ''}
<Numbers color='primary' /> />
</ListItemIcon>
<ListItemText
primary={t('Your last order #{{orderID}}', {
orderID: robot?.lastOrderId,
})}
secondary={t('Inactive order')}
/>
</ListItemButton>
) : (
<ListItem> <ListItem>
<ListItemIcon> <ListItemIcon>
<Numbers /> <Send />
</ListItemIcon> </ListItemIcon>
<ListItemText
primary={t('No active orders')}
secondary={t('You do not have previous orders')}
/>
</ListItem>
)}
<Divider /> <ListItemText>
{robot?.tgEnabled ? (
<EnableTelegramDialog <Typography color={theme.palette.success.main}>
open={openEnableTelegram} <b>{t('Telegram enabled')}</b>
onClose={() => { </Typography>
setOpenEnableTelegram(false); ) : (
}} <Button
tgBotName={robot?.tgBotName ?? ''} color='primary'
tgToken={robot?.tgToken ?? ''} onClick={() => {
/> setOpenEnableTelegram(true);
}}
<ListItem> >
<ListItemIcon> {t('Enable Telegram Notifications')}
<Send /> </Button>
</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.",
)} )}
>
<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> </ListItemText>
) : ( </ListItem>
<form noValidate style={{ maxWidth: 270 }}>
<Grid container style={{ display: 'flex', alignItems: 'stretch' }}> <ListItem>
<Grid item style={{ display: 'flex', maxWidth: 160 }}> <ListItemIcon>
<TextField <UserNinjaIcon />
error={Boolean(badInvoice)} </ListItemIcon>
helperText={badInvoice ?? ''}
label={t('Invoice for {{amountSats}} Sats', { <ListItemText>
amountSats: robot?.earnedRewards, <Tooltip
})} placement='bottom'
size='small' enterTouchDelay={0}
value={rewardInvoice} title={t(
onChange={(e) => { "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.",
setRewardInvoice(e.target.value); )}
}} >
<Grid item>
<FormControlLabel
labelPlacement='end'
label={t('Use stealth invoices')}
control={
<Switch
checked={robot?.stealthInvoices}
onChange={() => {
setStealthInvoice();
}}
/>
}
/> />
</Grid> </Grid>
<Grid item alignItems='stretch' style={{ display: 'flex', maxWidth: 80 }}> </Tooltip>
<Button </ListItemText>
sx={{ maxHeight: 38 }} </ListItem>
disabled={rewardInvoice === ''}
onClick={(e) => { <ListItem>
handleSubmitInvoiceClicked(e, rewardInvoice); <ListItemIcon>
}} <EmojiEvents />
variant='contained' </ListItemIcon>
color='primary'
size='small' {!openClaimRewards ? (
type='submit' <ListItemText secondary={t('Your compensations')}>
> <Grid container justifyContent='space-between'>
{t('Submit')} <Grid item xs={9}>
</Button> <Typography>{`${String(robot?.earnedRewards)} Sats`}</Typography>
</Grid> </Grid>
</Grid>
{weblnEnabled ? ( <Grid item xs={3}>
<Grid container style={{ display: 'flex', alignItems: 'stretch' }}>
<Grid item alignItems='stretch' style={{ display: 'flex', maxWidth: 240 }}>
<Button <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) => { onClick={(e) => {
handleWeblnInvoiceClicked(e); handleSubmitInvoiceClicked(e, rewardInvoice);
}} }}
variant='contained' variant='contained'
color='primary' color='primary'
size='small' size='small'
type='submit' type='submit'
> >
{t('Generate with Webln')} {t('Submit')}
</Button> </Button>
</Grid> </Grid>
</Grid> </Grid>
) : ( {weblnEnabled ? (
<></> <Grid container style={{ display: 'flex', alignItems: 'stretch' }}>
)} <Grid item alignItems='stretch' style={{ display: 'flex', maxWidth: 240 }}>
</form> <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 && ( {withdrawn && (
<div style={{ display: 'flex', justifyContent: 'center' }}> <div style={{ display: 'flex', justifyContent: 'center' }}>
<CircularProgress /> <Typography color='primary' variant='body2'>
</div> <b>{t('There it goes!')}</b>
)} </Typography>
</div>
{withdrawn && ( )}
<div style={{ display: 'flex', justifyContent: 'center' }}> </List>
<Typography color='primary' variant='body2'> </DialogContent>
<b>{t('There it goes!')}</b> <DialogActions>
</Typography> <Button onClick={() => setOpenOptions(false)} size='large'>
</div> {t('Back')}
)} </Button>
</List> </DialogActions>
</AccordionDetails> </Dialog>
</Accordion> </>
); );
}; };

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!", "Active order!": "Active order!",
"Claim": "Retirar", "Claim": "Retirar",
"Claim Sats!": "Reclamar Sats!",
"Enable Telegram Notifications": "Habilita notificacions a Telegram", "Enable Telegram Notifications": "Habilita notificacions a Telegram",
"Finished order": "Finished order",
"Generate with Webln": "Generar amb Webln", "Generate with Webln": "Generar amb Webln",
"Inactive order": "Ordre inactiva", "Inactive order": "Ordre inactiva",
"Invoice for {{amountSats}} Sats": "Factura per {{amountSats}} Sats", "Invoice for {{amountSats}} Sats": "Factura per {{amountSats}} Sats",
@ -527,7 +527,6 @@
"Your compensations": "Les teves compensacions", "Your compensations": "Les teves compensacions",
"Your current order": "La teva ordre actual", "Your current order": "La teva ordre actual",
"Your last order #{{orderID}}": "La teva última ordre #{{orderID}}", "Your last order #{{orderID}}": "La teva última ordre #{{orderID}}",
"finished order": "Ordre finalitzada",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Fosc", "Dark": "Fosc",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Aktivní objednávka!", "Active order!": "Aktivní objednávka!",
"Claim": "Vybrat", "Claim": "Vybrat",
"Claim Sats!": "Vybrat Sats!",
"Enable Telegram Notifications": "Povolit Telegram notifikace", "Enable Telegram Notifications": "Povolit Telegram notifikace",
"Finished order": "Finished order",
"Generate with Webln": "Generovat s Webln", "Generate with Webln": "Generovat s Webln",
"Inactive order": "Neaktivní objednávka", "Inactive order": "Neaktivní objednávka",
"Invoice for {{amountSats}} Sats": "Faktura pro {{amountSats}} Satů", "Invoice for {{amountSats}} Sats": "Faktura pro {{amountSats}} Satů",
@ -527,7 +527,6 @@
"Your compensations": "Vaše kompenzace", "Your compensations": "Vaše kompenzace",
"Your current order": "Vaše aktuální objednávka", "Your current order": "Vaše aktuální objednávka",
"Your last order #{{orderID}}": "Vaše poslední objednávka #{{orderID}}", "Your last order #{{orderID}}": "Vaše poslední objednávka #{{orderID}}",
"finished order": "dokončená objednávka",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Tmavé", "Dark": "Tmavé",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Aktive Bestellung!", "Active order!": "Aktive Bestellung!",
"Claim": "Erhalten", "Claim": "Erhalten",
"Claim Sats!": "Sats beanspruchen!",
"Enable Telegram Notifications": "Telegram-Benachrichtigungen aktivieren", "Enable Telegram Notifications": "Telegram-Benachrichtigungen aktivieren",
"Finished order": "Finished order",
"Generate with Webln": "Mit Webln generieren", "Generate with Webln": "Mit Webln generieren",
"Inactive order": "Inaktive Bestellung", "Inactive order": "Inaktive Bestellung",
"Invoice for {{amountSats}} Sats": "Rechnung für {{amountSats}} Sats", "Invoice for {{amountSats}} Sats": "Rechnung für {{amountSats}} Sats",
@ -527,7 +527,6 @@
"Your compensations": "Deine Entschädigungen", "Your compensations": "Deine Entschädigungen",
"Your current order": "Deine aktuelle Bestellung", "Your current order": "Deine aktuelle Bestellung",
"Your last order #{{orderID}}": "Deine letzte Bestellung #{{orderID}}", "Your last order #{{orderID}}": "Deine letzte Bestellung #{{orderID}}",
"finished order": "abgeschlossene Bestellung",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Dunkel", "Dark": "Dunkel",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Active order!", "Active order!": "Active order!",
"Claim": "Claim", "Claim": "Claim",
"Claim Sats!": "Claim Sats!",
"Enable Telegram Notifications": "Enable Telegram Notifications", "Enable Telegram Notifications": "Enable Telegram Notifications",
"Finished order": "Finished order",
"Generate with Webln": "Generate with Webln", "Generate with Webln": "Generate with Webln",
"Inactive order": "Inactive order", "Inactive order": "Inactive order",
"Invoice for {{amountSats}} Sats": "Invoice for {{amountSats}} Sats", "Invoice for {{amountSats}} Sats": "Invoice for {{amountSats}} Sats",
@ -527,7 +527,6 @@
"Your compensations": "Your compensations", "Your compensations": "Your compensations",
"Your current order": "Your current order", "Your current order": "Your current order",
"Your last order #{{orderID}}": "Your last order #{{orderID}}", "Your last order #{{orderID}}": "Your last order #{{orderID}}",
"finished order": "finished order",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Dark", "Dark": "Dark",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "¡Orden activa!", "Active order!": "¡Orden activa!",
"Claim": "Reclamar", "Claim": "Reclamar",
"Claim Sats!": "¡Reclamar Sats!",
"Enable Telegram Notifications": "Activar Notificaciones de Telegram", "Enable Telegram Notifications": "Activar Notificaciones de Telegram",
"Finished order": "Finished order",
"Generate with Webln": "Generar con Webln", "Generate with Webln": "Generar con Webln",
"Inactive order": "Orden inactiva", "Inactive order": "Orden inactiva",
"Invoice for {{amountSats}} Sats": "Factura de {{amountSats}} Sats", "Invoice for {{amountSats}} Sats": "Factura de {{amountSats}} Sats",
@ -527,7 +527,6 @@
"Your compensations": "Tus compensaciones", "Your compensations": "Tus compensaciones",
"Your current order": "Tu orden actual", "Your current order": "Tu orden actual",
"Your last order #{{orderID}}": "Tu última orden #{{orderID}}", "Your last order #{{orderID}}": "Tu última orden #{{orderID}}",
"finished order": "orden finalizada",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Oscuro", "Dark": "Oscuro",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Eskaera aktiboa!", "Active order!": "Eskaera aktiboa!",
"Claim": "Eskatu", "Claim": "Eskatu",
"Claim Sats!": "Eskatu Sats-ak!",
"Enable Telegram Notifications": "Baimendu Telegram Jakinarazpenak", "Enable Telegram Notifications": "Baimendu Telegram Jakinarazpenak",
"Finished order": "Finished order",
"Generate with Webln": "Sortu Webln Laketa", "Generate with Webln": "Sortu Webln Laketa",
"Inactive order": "Eskaera ez aktiboa", "Inactive order": "Eskaera ez aktiboa",
"Invoice for {{amountSats}} Sats": "{{amountSats}} Sateko faktura", "Invoice for {{amountSats}} Sats": "{{amountSats}} Sateko faktura",
@ -527,7 +527,6 @@
"Your compensations": "Zure konpentsazioak", "Your compensations": "Zure konpentsazioak",
"Your current order": "Zure oraingo eskaera", "Your current order": "Zure oraingo eskaera",
"Your last order #{{orderID}}": "Zure azken eskaera #{{orderID}}", "Your last order #{{orderID}}": "Zure azken eskaera #{{orderID}}",
"finished order": "eskaera amaituta",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Iluna", "Dark": "Iluna",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Ordre actif!", "Active order!": "Ordre actif!",
"Claim": "Réclamer", "Claim": "Réclamer",
"Claim Sats!": "Réclamer les Sats!",
"Enable Telegram Notifications": "Activer les notifications Telegram", "Enable Telegram Notifications": "Activer les notifications Telegram",
"Finished order": "Finished order",
"Generate with Webln": "Générer avec Webln", "Generate with Webln": "Générer avec Webln",
"Inactive order": "Ordre inactif", "Inactive order": "Ordre inactif",
"Invoice for {{amountSats}} Sats": "Facture pour {{amountSats}} Sats", "Invoice for {{amountSats}} Sats": "Facture pour {{amountSats}} Sats",
@ -527,7 +527,6 @@
"Your compensations": "Vos compensations", "Your compensations": "Vos compensations",
"Your current order": "Votre commande en cours", "Your current order": "Votre commande en cours",
"Your last order #{{orderID}}": "Votre dernière commande #{{orderID}}", "Your last order #{{orderID}}": "Votre dernière commande #{{orderID}}",
"finished order": "commande terminée",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Sombre", "Dark": "Sombre",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Ordine attivo!", "Active order!": "Ordine attivo!",
"Claim": "Richiedi", "Claim": "Richiedi",
"Claim Sats!": "Richiedi Sats!",
"Enable Telegram Notifications": "Abilita Notifiche Telegram", "Enable Telegram Notifications": "Abilita Notifiche Telegram",
"Finished order": "Finished order",
"Generate with Webln": "Genera con Webln", "Generate with Webln": "Genera con Webln",
"Inactive order": "Ordine inattivo", "Inactive order": "Ordine inattivo",
"Invoice for {{amountSats}} Sats": "Fattura per {{amountSats}} Sats", "Invoice for {{amountSats}} Sats": "Fattura per {{amountSats}} Sats",
@ -527,7 +527,6 @@
"Your compensations": "Le tue compensazioni", "Your compensations": "Le tue compensazioni",
"Your current order": "Il tuo ordine attuale", "Your current order": "Il tuo ordine attuale",
"Your last order #{{orderID}}": "Il tuo ultimo ordine #{{orderID}}", "Your last order #{{orderID}}": "Il tuo ultimo ordine #{{orderID}}",
"finished order": "ordine completato",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Scuro", "Dark": "Scuro",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "アクティブな注文!", "Active order!": "アクティブな注文!",
"Claim": "請求する", "Claim": "請求する",
"Claim Sats!": "Satsを請求する",
"Enable Telegram Notifications": "Telegram通知を有効にする", "Enable Telegram Notifications": "Telegram通知を有効にする",
"Finished order": "Finished order",
"Generate with Webln": "Weblnで生成", "Generate with Webln": "Weblnで生成",
"Inactive order": "非アクティブなオーダー", "Inactive order": "非アクティブなオーダー",
"Invoice for {{amountSats}} Sats": " {{amountSats}} Satsのインボイス", "Invoice for {{amountSats}} Sats": " {{amountSats}} Satsのインボイス",
@ -527,7 +527,6 @@
"Your compensations": "あなたの補償", "Your compensations": "あなたの補償",
"Your current order": "現在のオーダー", "Your current order": "現在のオーダー",
"Your last order #{{orderID}}": "前回のオーダー #{{orderID}}", "Your last order #{{orderID}}": "前回のオーダー #{{orderID}}",
"finished order": "終了したオーダー",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "ダーク", "Dark": "ダーク",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Aktywne zamówienie!", "Active order!": "Aktywne zamówienie!",
"Claim": "Odebrać", "Claim": "Odebrać",
"Claim Sats!": "Odebrać Sats!",
"Enable Telegram Notifications": "Włącz powiadomienia Telegram", "Enable Telegram Notifications": "Włącz powiadomienia Telegram",
"Finished order": "Finished order",
"Generate with Webln": "Generuj z Webln", "Generate with Webln": "Generuj z Webln",
"Inactive order": "Nieaktywne zamówienie", "Inactive order": "Nieaktywne zamówienie",
"Invoice for {{amountSats}} Sats": "Faktura za {{amountSats}} Sats", "Invoice for {{amountSats}} Sats": "Faktura za {{amountSats}} Sats",
@ -527,7 +527,6 @@
"Your compensations": "Twoje rekompensaty", "Your compensations": "Twoje rekompensaty",
"Your current order": "Twoje obecne zamówienie", "Your current order": "Twoje obecne zamówienie",
"Your last order #{{orderID}}": "Twoje ostatnie zamówienie #{{orderID}}", "Your last order #{{orderID}}": "Twoje ostatnie zamówienie #{{orderID}}",
"finished order": "zakończone zamówienie",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Ciemny", "Dark": "Ciemny",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Ordem ativa!", "Active order!": "Ordem ativa!",
"Claim": "Reivindicar", "Claim": "Reivindicar",
"Claim Sats!": "Reivindicar Sats!",
"Enable Telegram Notifications": "Habilitar notificações do Telegram", "Enable Telegram Notifications": "Habilitar notificações do Telegram",
"Finished order": "Finished order",
"Generate with Webln": "Gerar com Webln", "Generate with Webln": "Gerar com Webln",
"Inactive order": "Ordem inativa", "Inactive order": "Ordem inativa",
"Invoice for {{amountSats}} Sats": "Fatura para {{amountSats}} Sats", "Invoice for {{amountSats}} Sats": "Fatura para {{amountSats}} Sats",
@ -527,7 +527,6 @@
"Your compensations": "Suas compensações", "Your compensations": "Suas compensações",
"Your current order": "Sua ordem atual", "Your current order": "Sua ordem atual",
"Your last order #{{orderID}}": "Sua última ordem #{{orderID}}", "Your last order #{{orderID}}": "Sua última ordem #{{orderID}}",
"finished order": "ordem finalizada",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Escuro", "Dark": "Escuro",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Активный ордер!", "Active order!": "Активный ордер!",
"Claim": "Запросить", "Claim": "Запросить",
"Claim Sats!": "Запросить Сатоши!",
"Enable Telegram Notifications": "Включить уведомления Telegram", "Enable Telegram Notifications": "Включить уведомления Telegram",
"Finished order": "Finished order",
"Generate with Webln": "Генерировать с помощью Webln", "Generate with Webln": "Генерировать с помощью Webln",
"Inactive order": "Неактивный ордер", "Inactive order": "Неактивный ордер",
"Invoice for {{amountSats}} Sats": "Инвойс на {{amountSats}} Сатоши", "Invoice for {{amountSats}} Sats": "Инвойс на {{amountSats}} Сатоши",
@ -527,7 +527,6 @@
"Your compensations": "Ваши компенсации", "Your compensations": "Ваши компенсации",
"Your current order": "Ваш текущий ордер", "Your current order": "Ваш текущий ордер",
"Your last order #{{orderID}}": "Ваш последний ордер #{{orderID}}", "Your last order #{{orderID}}": "Ваш последний ордер #{{orderID}}",
"finished order": "завершенный ордер",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Темный", "Dark": "Темный",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Aktiv order!", "Active order!": "Aktiv order!",
"Claim": "Anspråk", "Claim": "Anspråk",
"Claim Sats!": "Anspråk på Sats!",
"Enable Telegram Notifications": "Aktivera Telegram-aviseringar", "Enable Telegram Notifications": "Aktivera Telegram-aviseringar",
"Finished order": "Finished order",
"Generate with Webln": "Generera med Webln", "Generate with Webln": "Generera med Webln",
"Inactive order": "Inaktiv order", "Inactive order": "Inaktiv order",
"Invoice for {{amountSats}} Sats": "Faktura för {{amountSats}} sats", "Invoice for {{amountSats}} Sats": "Faktura för {{amountSats}} sats",
@ -527,7 +527,6 @@
"Your compensations": "Dina kompensationer", "Your compensations": "Dina kompensationer",
"Your current order": "Din nuvarande order", "Your current order": "Din nuvarande order",
"Your last order #{{orderID}}": "Din senaste order #{{orderID}}", "Your last order #{{orderID}}": "Din senaste order #{{orderID}}",
"finished order": "avslutad order",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Mörk", "Dark": "Mörk",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "Agizo la Kazi!", "Active order!": "Agizo la Kazi!",
"Claim": "Dai", "Claim": "Dai",
"Claim Sats!": "Dai Sats!",
"Enable Telegram Notifications": "Washa Arifa za Telegram", "Enable Telegram Notifications": "Washa Arifa za Telegram",
"Finished order": "Finished order",
"Generate with Webln": "Zalisha kwa Webln", "Generate with Webln": "Zalisha kwa Webln",
"Inactive order": "Agizo lisilo hai", "Inactive order": "Agizo lisilo hai",
"Invoice for {{amountSats}} Sats": "Ankara kwa {{amountSats}} Sats", "Invoice for {{amountSats}} Sats": "Ankara kwa {{amountSats}} Sats",
@ -527,7 +527,6 @@
"Your compensations": "Malipo yako", "Your compensations": "Malipo yako",
"Your current order": "Agizo lako la sasa", "Your current order": "Agizo lako la sasa",
"Your last order #{{orderID}}": "Agizo lako la mwisho #{{orderID}}", "Your last order #{{orderID}}": "Agizo lako la mwisho #{{orderID}}",
"finished order": "agizo lililokamilika",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "Giza", "Dark": "Giza",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "คำสั่งซื้อที่ใช้งานอยู่!", "Active order!": "คำสั่งซื้อที่ใช้งานอยู่!",
"Claim": "รับรางวัล", "Claim": "รับรางวัล",
"Claim Sats!": "รับ Sats!",
"Enable Telegram Notifications": "เปิดใช้การแจ้งเตือน Telegram", "Enable Telegram Notifications": "เปิดใช้การแจ้งเตือน Telegram",
"Finished order": "Finished order",
"Generate with Webln": "สร้างด้วย Webln", "Generate with Webln": "สร้างด้วย Webln",
"Inactive order": "คำสั่งซื้อที่ไม่ใช้งาน", "Inactive order": "คำสั่งซื้อที่ไม่ใช้งาน",
"Invoice for {{amountSats}} Sats": "ใบแจ้งหนี้สำหรับ {{amountSats}} Sats", "Invoice for {{amountSats}} Sats": "ใบแจ้งหนี้สำหรับ {{amountSats}} Sats",
@ -527,7 +527,6 @@
"Your compensations": "ค่าชดเชยของคุณ", "Your compensations": "ค่าชดเชยของคุณ",
"Your current order": "คำสั่งซื้อปัจจุบันของคุณ", "Your current order": "คำสั่งซื้อปัจจุบันของคุณ",
"Your last order #{{orderID}}": "คำสั่งซื้อสุดท้ายของคุณ #{{orderID}}", "Your last order #{{orderID}}": "คำสั่งซื้อสุดท้ายของคุณ #{{orderID}}",
"finished order": "คำสั่งซื้อเสร็จสิ้น",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "มืด", "Dark": "มืด",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "活跃订单!", "Active order!": "活跃订单!",
"Claim": "领取", "Claim": "领取",
"Claim Sats!": "领取聪!",
"Enable Telegram Notifications": "开启电报通知", "Enable Telegram Notifications": "开启电报通知",
"Finished order": "Finished order",
"Generate with Webln": "使用 Webln 生成", "Generate with Webln": "使用 Webln 生成",
"Inactive order": "不活跃订单", "Inactive order": "不活跃订单",
"Invoice for {{amountSats}} Sats": "{{amountSats}}聪的发票", "Invoice for {{amountSats}} Sats": "{{amountSats}}聪的发票",
@ -527,7 +527,6 @@
"Your compensations": "你的补偿", "Your compensations": "你的补偿",
"Your current order": "你当前的订单", "Your current order": "你当前的订单",
"Your last order #{{orderID}}": "你的上一笔订单#{{orderID}}", "Your last order #{{orderID}}": "你的上一笔订单#{{orderID}}",
"finished order": "已完成的订单",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "黑色", "Dark": "黑色",

View File

@ -512,8 +512,8 @@
"#50": "Phrases in components/RobotInfo/index.tsx", "#50": "Phrases in components/RobotInfo/index.tsx",
"Active order!": "活躍訂單!", "Active order!": "活躍訂單!",
"Claim": "索取", "Claim": "索取",
"Claim Sats!": "索取聰!",
"Enable Telegram Notifications": "啟用 Telegram 通知", "Enable Telegram Notifications": "啟用 Telegram 通知",
"Finished order": "Finished order",
"Generate with Webln": "使用 Webln 生成", "Generate with Webln": "使用 Webln 生成",
"Inactive order": "不活躍的訂單", "Inactive order": "不活躍的訂單",
"Invoice for {{amountSats}} Sats": "{{amountSats}} 聰的發票", "Invoice for {{amountSats}} Sats": "{{amountSats}} 聰的發票",
@ -527,7 +527,6 @@
"Your compensations": "您的補償", "Your compensations": "您的補償",
"Your current order": "您當前的訂單", "Your current order": "您當前的訂單",
"Your last order #{{orderID}}": "您的上一筆交易 #{{orderID}}", "Your last order #{{orderID}}": "您的上一筆交易 #{{orderID}}",
"finished order": "完成的訂單",
"#51": "Phrases in components/SettingsForm/index.tsx", "#51": "Phrases in components/SettingsForm/index.tsx",
"API": "API", "API": "API",
"Dark": "深色", "Dark": "深色",