mirror of
https://github.com/RoboSats/robosats.git
synced 2025-09-06 10:04:16 +00:00
Robot garage in mobile navbar
This commit is contained in:
@ -14,12 +14,15 @@ import {
|
|||||||
useTheme,
|
useTheme,
|
||||||
Fab,
|
Fab,
|
||||||
Button,
|
Button,
|
||||||
|
Collapse,
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import {
|
import {
|
||||||
Add,
|
Add,
|
||||||
Assignment,
|
Assignment,
|
||||||
BubbleChart,
|
BubbleChart,
|
||||||
|
ExpandLess,
|
||||||
|
ExpandMore,
|
||||||
Info,
|
Info,
|
||||||
Menu as MenuIcon,
|
Menu as MenuIcon,
|
||||||
People,
|
People,
|
||||||
@ -34,6 +37,8 @@ import { Page } from '..';
|
|||||||
import RobotAvatar from '../../../components/RobotAvatar';
|
import RobotAvatar from '../../../components/RobotAvatar';
|
||||||
import { AppContext, closeAll, UseAppStoreType } from '../../../contexts/AppContext';
|
import { AppContext, closeAll, UseAppStoreType } from '../../../contexts/AppContext';
|
||||||
import { RoboSatsTextIcon } from '../../../components/Icons';
|
import { RoboSatsTextIcon } from '../../../components/Icons';
|
||||||
|
import { genBase62Token } from '../../../utils';
|
||||||
|
import { UseFederationStoreType, FederationContext } from '../../../contexts/FederationContext';
|
||||||
|
|
||||||
interface AppBarProps {
|
interface AppBarProps {
|
||||||
changePage: (newPage: Page) => void;
|
changePage: (newPage: Page) => void;
|
||||||
@ -44,7 +49,9 @@ const AppBar = ({ changePage }: AppBarProps): React.JSX.Element => {
|
|||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { garage } = useContext<UseGarageStoreType>(GarageContext);
|
const { garage } = useContext<UseGarageStoreType>(GarageContext);
|
||||||
const { open, setOpen, page } = useContext<UseAppStoreType>(AppContext);
|
const { open, setOpen, page } = useContext<UseAppStoreType>(AppContext);
|
||||||
|
const { federation } = useContext<UseFederationStoreType>(FederationContext);
|
||||||
const [show, setShow] = useState<boolean>(false);
|
const [show, setShow] = useState<boolean>(false);
|
||||||
|
const [openGarage, setOpenGarage] = useState<boolean>(false);
|
||||||
|
|
||||||
const slot = garage.getSlot();
|
const slot = garage.getSlot();
|
||||||
|
|
||||||
@ -53,6 +60,11 @@ const AppBar = ({ changePage }: AppBarProps): React.JSX.Element => {
|
|||||||
changePage(newPage);
|
changePage(newPage);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleAddRobot = (): void => {
|
||||||
|
const token = genBase62Token(36);
|
||||||
|
void garage.createRobot(federation, token, Object.keys(garage.slots).length > 0);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box sx={{ flexGrow: 1 }}>
|
<Box sx={{ flexGrow: 1 }}>
|
||||||
<Bar position='fixed' sx={{ top: 'auto', bottom: 0 }}>
|
<Bar position='fixed' sx={{ top: 'auto', bottom: 0 }}>
|
||||||
@ -112,27 +124,87 @@ const AppBar = ({ changePage }: AppBarProps): React.JSX.Element => {
|
|||||||
</Toolbar>
|
</Toolbar>
|
||||||
</Bar>
|
</Bar>
|
||||||
<Drawer anchor='left' open={show} onClose={() => setShow(false)}>
|
<Drawer anchor='left' open={show} onClose={() => setShow(false)}>
|
||||||
<Box sx={{ width: 250, height: '100%' }} role='presentation'>
|
<Box sx={{ width: 270, height: '100%' }} role='presentation'>
|
||||||
<List sx={{ display: 'flex', flexDirection: 'column', height: '100%' }}>
|
<List sx={{ display: 'flex', flexDirection: 'column', height: '100%' }}>
|
||||||
{slot?.hashId ? (
|
{slot?.hashId ? (
|
||||||
<>
|
<>
|
||||||
<ListItem disablePadding>
|
<ListItem disablePadding>
|
||||||
<ListItemButton
|
<ListItemButton
|
||||||
|
sx={{ pr: 0 }}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setOpen({ ...closeAll, profile: !open.profile });
|
setOpen({ ...closeAll, profile: !open.profile });
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<RobotAvatar style={{ width: '2em', height: '2em' }} hashId={slot?.hashId} />
|
<ListItemIcon>
|
||||||
|
<RobotAvatar
|
||||||
|
style={{ width: '1.5em', height: '1.5em' }}
|
||||||
|
hashId={slot?.hashId}
|
||||||
|
/>
|
||||||
|
</ListItemIcon>
|
||||||
|
</ListItemButton>
|
||||||
|
<ListItemButton
|
||||||
|
onClick={() => setOpenGarage((op) => !op)}
|
||||||
|
sx={{
|
||||||
|
display: 'flex',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
alignItems: 'center',
|
||||||
|
pl: 0,
|
||||||
|
}}
|
||||||
|
>
|
||||||
<Typography align='center' sx={{ ml: 1 }}>
|
<Typography align='center' sx={{ ml: 1 }}>
|
||||||
<b>{slot?.nickname}</b>
|
<b>{slot?.nickname}</b>
|
||||||
</Typography>
|
</Typography>
|
||||||
|
{openGarage ? <ExpandLess /> : <ExpandMore />}
|
||||||
</ListItemButton>
|
</ListItemButton>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<Divider sx={{ mt: 1 }} />
|
<Collapse in={openGarage} timeout='auto' unmountOnExit>
|
||||||
|
<List component='div' disablePadding>
|
||||||
|
{Object.values(garage.slots).map((garageSlot, index) => {
|
||||||
|
if (garageSlot.token === slot.token) return <div key={index}></div>;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ListItem disablePadding key={index}>
|
||||||
|
<ListItemButton
|
||||||
|
sx={{ pr: 0 }}
|
||||||
|
onClick={() => {
|
||||||
|
garage.setCurrentSlot(garageSlot.token ?? '');
|
||||||
|
setOpenGarage(false);
|
||||||
|
setTimeout(() => setShow(false), 300);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<ListItemIcon>
|
||||||
|
<RobotAvatar
|
||||||
|
style={{ width: '1.5em', height: '1.5em' }}
|
||||||
|
hashId={garageSlot.hashId ?? ''}
|
||||||
|
/>
|
||||||
|
</ListItemIcon>
|
||||||
|
<Typography align='center' sx={{ ml: 1 }}>
|
||||||
|
<b>{garageSlot?.nickname}</b>
|
||||||
|
</Typography>
|
||||||
|
</ListItemButton>
|
||||||
|
</ListItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
<ListItemButton sx={{ pr: 0 }} onClick={handleAddRobot} key='add_robot'>
|
||||||
|
<ListItemIcon>
|
||||||
|
<Add /> <div style={{ width: '0.5em' }} />
|
||||||
|
{t('Add Robot')}
|
||||||
|
</ListItemIcon>
|
||||||
|
</ListItemButton>
|
||||||
|
</List>
|
||||||
|
</Collapse>
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<></>
|
<ListItem disablePadding sx={{ height: '30px', mt: '8px', mb: '8px' }}>
|
||||||
|
<ListItemButton sx={{ pr: 0 }} onClick={handleAddRobot}>
|
||||||
|
<ListItemIcon>
|
||||||
|
<Add /> <div style={{ width: '0.5em' }} />
|
||||||
|
{t('Add Robot')}
|
||||||
|
</ListItemIcon>
|
||||||
|
</ListItemButton>
|
||||||
|
</ListItem>
|
||||||
)}
|
)}
|
||||||
|
<Divider sx={{ mt: 1 }} />
|
||||||
<ListItem disablePadding>
|
<ListItem disablePadding>
|
||||||
<ListItemButton
|
<ListItemButton
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
@ -22,7 +22,7 @@ import RecoveryDialog from '../../components/Dialogs/Recovery';
|
|||||||
|
|
||||||
const RobotPage = (): React.JSX.Element => {
|
const RobotPage = (): React.JSX.Element => {
|
||||||
const { torStatus, windowSize, settings, page, client } = useContext<UseAppStoreType>(AppContext);
|
const { torStatus, windowSize, settings, page, client } = useContext<UseAppStoreType>(AppContext);
|
||||||
const { garage } = useContext<UseGarageStoreType>(GarageContext);
|
const { garage, slotUpdatedAt } = useContext<UseGarageStoreType>(GarageContext);
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const params = useParams();
|
const params = useParams();
|
||||||
const urlToken = settings.selfhostedClient ? params.token : null;
|
const urlToken = settings.selfhostedClient ? params.token : null;
|
||||||
@ -43,7 +43,7 @@ const RobotPage = (): React.JSX.Element => {
|
|||||||
setView('profile');
|
setView('profile');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [torStatus, page]);
|
}, [torStatus, page, slotUpdatedAt]);
|
||||||
|
|
||||||
if (settings.useProxy && client === 'mobile' && !(torStatus === 'ON')) {
|
if (settings.useProxy && client === 'mobile' && !(torStatus === 'ON')) {
|
||||||
return (
|
return (
|
||||||
|
@ -129,37 +129,36 @@ class Garage {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Robots
|
// Robots
|
||||||
createRobot: (federation: Federation, token: string) => Promise<void> = async (
|
createRobot: (federation: Federation, token: string, skipSelect?: boolean) => Promise<void> =
|
||||||
federation,
|
async (federation, token, skipSelect) => {
|
||||||
token,
|
if (!token) return;
|
||||||
) => {
|
|
||||||
if (!token) return;
|
|
||||||
|
|
||||||
if (this.getSlot(token) === null) {
|
if (this.getSlot(token) === null) {
|
||||||
try {
|
try {
|
||||||
const key = await genKey(token);
|
const key = await genKey(token);
|
||||||
const robotAttributes = {
|
const robotAttributes = {
|
||||||
token,
|
token,
|
||||||
pubKey: key.publicKeyArmored,
|
pubKey: key.publicKeyArmored,
|
||||||
encPrivKey: key.encryptedPrivateKeyArmored,
|
encPrivKey: key.encryptedPrivateKeyArmored,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.setCurrentSlot(token);
|
if (!skipSelect) this.setCurrentSlot(token);
|
||||||
this.slots[token] = new Slot(
|
|
||||||
token,
|
this.slots[token] = new Slot(
|
||||||
federation.getCoordinatorsAlias(),
|
token,
|
||||||
robotAttributes,
|
federation.getCoordinatorsAlias(),
|
||||||
() => {
|
robotAttributes,
|
||||||
this.triggerHook('onSlotUpdate');
|
() => {
|
||||||
},
|
this.triggerHook('onSlotUpdate');
|
||||||
);
|
},
|
||||||
void this.fetchRobot(federation, token);
|
);
|
||||||
this.save();
|
void this.fetchRobot(federation, token);
|
||||||
} catch (error) {
|
this.save();
|
||||||
console.error('Error:', error);
|
} catch (error) {
|
||||||
|
console.error('Error:', error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
};
|
|
||||||
|
|
||||||
fetchRobot = async (federation: Federation, token: string): Promise<void> => {
|
fetchRobot = async (federation: Federation, token: string): Promise<void> => {
|
||||||
const slot = this.getSlot(token);
|
const slot = this.getSlot(token);
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Existeixen ordres que coincideixen!",
|
"Existing orders match yours!": "Existeixen ordres que coincideixen!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "Un Simple i Privat Exchange LN P2P",
|
"A Simple and Private LN P2P Exchange": "Un Simple i Privat Exchange LN P2P",
|
||||||
|
"Add Robot": "Afegir Robot",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Comunitat",
|
"Community": "Comunitat",
|
||||||
"Exchange summary": "Resum de l'intercanvi",
|
"Exchange summary": "Resum de l'intercanvi",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "rodar de nou",
|
"roll again": "rodar de nou",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Ordre activa #{{orderID}}",
|
"Active order #{{orderID}}": "Ordre activa #{{orderID}}",
|
||||||
"Add Robot": "Afegir Robot",
|
|
||||||
"Building...": "Construint...",
|
"Building...": "Construint...",
|
||||||
"Delete Robot": "Delete Robot",
|
"Delete Robot": "Delete Robot",
|
||||||
"Last order #{{orderID}}": "Última ordre #{{orderID}}",
|
"Last order #{{orderID}}": "Última ordre #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Existující objednávky odpovídají vaší!",
|
"Existing orders match yours!": "Existující objednávky odpovídají vaší!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "Jednoduchá a soukromá LN P2P burza",
|
"A Simple and Private LN P2P Exchange": "Jednoduchá a soukromá LN P2P burza",
|
||||||
|
"Add Robot": "Přidat robota",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Komunita",
|
"Community": "Komunita",
|
||||||
"Exchange summary": "Shrnutí směny",
|
"Exchange summary": "Shrnutí směny",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "házet znovu",
|
"roll again": "házet znovu",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Aktivní objednávka #{{orderID}}",
|
"Active order #{{orderID}}": "Aktivní objednávka #{{orderID}}",
|
||||||
"Add Robot": "Přidat robota",
|
|
||||||
"Building...": "Budování...",
|
"Building...": "Budování...",
|
||||||
"Delete Robot": "Smazat robota",
|
"Delete Robot": "Smazat robota",
|
||||||
"Last order #{{orderID}}": "Poslední objednávka #{{orderID}}",
|
"Last order #{{orderID}}": "Poslední objednávka #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Bestehende Bestellungen passen zu deiner!",
|
"Existing orders match yours!": "Bestehende Bestellungen passen zu deiner!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "Ein einfacher und privater LN P2P-Börse",
|
"A Simple and Private LN P2P Exchange": "Ein einfacher und privater LN P2P-Börse",
|
||||||
|
"Add Robot": "Roboter hinzufügen",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Gemeinschaft",
|
"Community": "Gemeinschaft",
|
||||||
"Exchange summary": "Börsenzusammenfassung",
|
"Exchange summary": "Börsenzusammenfassung",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "noch einmal würfeln",
|
"roll again": "noch einmal würfeln",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Aktive Bestellung #{{orderID}}",
|
"Active order #{{orderID}}": "Aktive Bestellung #{{orderID}}",
|
||||||
"Add Robot": "Roboter hinzufügen",
|
|
||||||
"Building...": "Erstelle...",
|
"Building...": "Erstelle...",
|
||||||
"Delete Robot": "Roboter löschen",
|
"Delete Robot": "Roboter löschen",
|
||||||
"Last order #{{orderID}}": "Letzte Bestellung #{{orderID}}",
|
"Last order #{{orderID}}": "Letzte Bestellung #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Existing orders match yours!",
|
"Existing orders match yours!": "Existing orders match yours!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "A Simple and Private LN P2P Exchange",
|
"A Simple and Private LN P2P Exchange": "A Simple and Private LN P2P Exchange",
|
||||||
|
"Add Robot": "Add Robot",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Community",
|
"Community": "Community",
|
||||||
"Exchange summary": "Exchange summary",
|
"Exchange summary": "Exchange summary",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "roll again",
|
"roll again": "roll again",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Active order #{{orderID}}",
|
"Active order #{{orderID}}": "Active order #{{orderID}}",
|
||||||
"Add Robot": "Add Robot",
|
|
||||||
"Building...": "Building...",
|
"Building...": "Building...",
|
||||||
"Delete Robot": "Delete Robot",
|
"Delete Robot": "Delete Robot",
|
||||||
"Last order #{{orderID}}": "Last order #{{orderID}}",
|
"Last order #{{orderID}}": "Last order #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "¡Existen órdenes que coinciden!",
|
"Existing orders match yours!": "¡Existen órdenes que coinciden!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "Un exchange LN P2P sencillo y privado",
|
"A Simple and Private LN P2P Exchange": "Un exchange LN P2P sencillo y privado",
|
||||||
|
"Add Robot": "Añadir Robot",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Comunidad",
|
"Community": "Comunidad",
|
||||||
"Exchange summary": "Resumen del intercambio",
|
"Exchange summary": "Resumen del intercambio",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "Tira otra vez",
|
"roll again": "Tira otra vez",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Orden activa #{{orderID}}",
|
"Active order #{{orderID}}": "Orden activa #{{orderID}}",
|
||||||
"Add Robot": "Añadir Robot",
|
|
||||||
"Building...": "Construyendo...",
|
"Building...": "Construyendo...",
|
||||||
"Delete Robot": "Eliminar Robot",
|
"Delete Robot": "Eliminar Robot",
|
||||||
"Last order #{{orderID}}": "Última orden #{{orderID}}",
|
"Last order #{{orderID}}": "Última orden #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Dauden eskaerak zureekin bat datoz!",
|
"Existing orders match yours!": "Dauden eskaerak zureekin bat datoz!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "LN P2P Truke Sinple eta Pribatua",
|
"A Simple and Private LN P2P Exchange": "LN P2P Truke Sinple eta Pribatua",
|
||||||
|
"Add Robot": "Gehitu Robota",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Komunitatea",
|
"Community": "Komunitatea",
|
||||||
"Exchange summary": "Truke-laburpena",
|
"Exchange summary": "Truke-laburpena",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "berriz bota",
|
"roll again": "berriz bota",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Eskaera aktiboa #{{orderID}}",
|
"Active order #{{orderID}}": "Eskaera aktiboa #{{orderID}}",
|
||||||
"Add Robot": "Gehitu Robota",
|
|
||||||
"Building...": "Eraikitzen...",
|
"Building...": "Eraikitzen...",
|
||||||
"Delete Robot": "Ezabatu Robota",
|
"Delete Robot": "Ezabatu Robota",
|
||||||
"Last order #{{orderID}}": "Azken eskaera #{{orderID}}",
|
"Last order #{{orderID}}": "Azken eskaera #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Commandes existantes correspondent aux vôtres !",
|
"Existing orders match yours!": "Commandes existantes correspondent aux vôtres !",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "Une bourse d'échange P2P LN simple et privée",
|
"A Simple and Private LN P2P Exchange": "Une bourse d'échange P2P LN simple et privée",
|
||||||
|
"Add Robot": "Ajouter un robot",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Communauté",
|
"Community": "Communauté",
|
||||||
"Exchange summary": "Résumé de l'échange",
|
"Exchange summary": "Résumé de l'échange",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "recommencer",
|
"roll again": "recommencer",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Ordre actif #{{orderID}}",
|
"Active order #{{orderID}}": "Ordre actif #{{orderID}}",
|
||||||
"Add Robot": "Ajouter un robot",
|
|
||||||
"Building...": "Construction...",
|
"Building...": "Construction...",
|
||||||
"Delete Robot": "Supprimer le robot",
|
"Delete Robot": "Supprimer le robot",
|
||||||
"Last order #{{orderID}}": "Dernier ordre #{{orderID}}",
|
"Last order #{{orderID}}": "Dernier ordre #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Gli ordini esistenti si abbinano ai tuoi!",
|
"Existing orders match yours!": "Gli ordini esistenti si abbinano ai tuoi!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "Una piattaforma di scambio P2P su LN semplice e privata",
|
"A Simple and Private LN P2P Exchange": "Una piattaforma di scambio P2P su LN semplice e privata",
|
||||||
|
"Add Robot": "Aggiungi robot",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Comunità",
|
"Community": "Comunità",
|
||||||
"Exchange summary": "Riepilogo dell'exchange",
|
"Exchange summary": "Riepilogo dell'exchange",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "tira di nuovo",
|
"roll again": "tira di nuovo",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Ordine attivo #{{orderID}}",
|
"Active order #{{orderID}}": "Ordine attivo #{{orderID}}",
|
||||||
"Add Robot": "Aggiungi robot",
|
|
||||||
"Building...": "Costruzione...",
|
"Building...": "Costruzione...",
|
||||||
"Delete Robot": "Elimina robot",
|
"Delete Robot": "Elimina robot",
|
||||||
"Last order #{{orderID}}": "Ultimo ordine #{{orderID}}",
|
"Last order #{{orderID}}": "Ultimo ordine #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "あなたの注文にマッチする既存の注文があります!",
|
"Existing orders match yours!": "あなたの注文にマッチする既存の注文があります!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "シンプルでプライベートなライトニングP2P取引所",
|
"A Simple and Private LN P2P Exchange": "シンプルでプライベートなライトニングP2P取引所",
|
||||||
|
"Add Robot": "ロボットを追加",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "コミュニティ",
|
"Community": "コミュニティ",
|
||||||
"Exchange summary": "取引所の概要",
|
"Exchange summary": "取引所の概要",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "もう一度生成する。",
|
"roll again": "もう一度生成する。",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "公開中の注文 #{{orderID}}",
|
"Active order #{{orderID}}": "公開中の注文 #{{orderID}}",
|
||||||
"Add Robot": "ロボットを追加",
|
|
||||||
"Building...": "生成中...",
|
"Building...": "生成中...",
|
||||||
"Delete Robot": "ロボットを削除",
|
"Delete Robot": "ロボットを削除",
|
||||||
"Last order #{{orderID}}": "直前の注文 #{{orderID}}",
|
"Last order #{{orderID}}": "直前の注文 #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Istniejące zlecenia pasują do twojego!",
|
"Existing orders match yours!": "Istniejące zlecenia pasują do twojego!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "Prosta i prywatna wymiana LN P2P",
|
"A Simple and Private LN P2P Exchange": "Prosta i prywatna wymiana LN P2P",
|
||||||
|
"Add Robot": "Dodaj Robota",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Społeczność",
|
"Community": "Społeczność",
|
||||||
"Exchange summary": "Podsumowanie wymiany",
|
"Exchange summary": "Podsumowanie wymiany",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "przewróć ponownie",
|
"roll again": "przewróć ponownie",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Aktywne zamówienie #{{orderID}}",
|
"Active order #{{orderID}}": "Aktywne zamówienie #{{orderID}}",
|
||||||
"Add Robot": "Dodaj Robota",
|
|
||||||
"Building...": "Budowanie...",
|
"Building...": "Budowanie...",
|
||||||
"Delete Robot": "Usuń robota",
|
"Delete Robot": "Usuń robota",
|
||||||
"Last order #{{orderID}}": "Ostatnie zamówienie #{{orderID}}",
|
"Last order #{{orderID}}": "Ostatnie zamówienie #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Existem ordens correspondentes!",
|
"Existing orders match yours!": "Existem ordens correspondentes!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "Uma Exchange P2P LN Simples e Privada",
|
"A Simple and Private LN P2P Exchange": "Uma Exchange P2P LN Simples e Privada",
|
||||||
|
"Add Robot": "Adicionar Robô",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Comunidade",
|
"Community": "Comunidade",
|
||||||
"Exchange summary": "Resumo da Exchange",
|
"Exchange summary": "Resumo da Exchange",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "Girar novamente",
|
"roll again": "Girar novamente",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Ordem ativa #{{orderID}}",
|
"Active order #{{orderID}}": "Ordem ativa #{{orderID}}",
|
||||||
"Add Robot": "Adicionar Robô",
|
|
||||||
"Building...": "Criando...",
|
"Building...": "Criando...",
|
||||||
"Delete Robot": "Deletar Robô",
|
"Delete Robot": "Deletar Robô",
|
||||||
"Last order #{{orderID}}": "Última ordem #{{orderID}}",
|
"Last order #{{orderID}}": "Última ordem #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Существующие ордеры совпадают с вашими!",
|
"Existing orders match yours!": "Существующие ордеры совпадают с вашими!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "Простой и приватный LN P2P обменник",
|
"A Simple and Private LN P2P Exchange": "Простой и приватный LN P2P обменник",
|
||||||
|
"Add Robot": "Добавить робота",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Сообщество",
|
"Community": "Сообщество",
|
||||||
"Exchange summary": "Сводка обмена",
|
"Exchange summary": "Сводка обмена",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "ещё раз",
|
"roll again": "ещё раз",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Активный ордер #{{orderID}}",
|
"Active order #{{orderID}}": "Активный ордер #{{orderID}}",
|
||||||
"Add Robot": "Добавить робота",
|
|
||||||
"Building...": "Строим...",
|
"Building...": "Строим...",
|
||||||
"Delete Robot": "Удалить робота",
|
"Delete Robot": "Удалить робота",
|
||||||
"Last order #{{orderID}}": "Последний ордер #{{orderID}}",
|
"Last order #{{orderID}}": "Последний ордер #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Befintliga ordrar matchar dina!",
|
"Existing orders match yours!": "Befintliga ordrar matchar dina!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "En enkel och privat LN P2P Exchange",
|
"A Simple and Private LN P2P Exchange": "En enkel och privat LN P2P Exchange",
|
||||||
|
"Add Robot": "Lägg till robot",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Gemenskap",
|
"Community": "Gemenskap",
|
||||||
"Exchange summary": "Utbytesöversikt",
|
"Exchange summary": "Utbytesöversikt",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "slå igen",
|
"roll again": "slå igen",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Aktiv order #{{orderID}}",
|
"Active order #{{orderID}}": "Aktiv order #{{orderID}}",
|
||||||
"Add Robot": "Lägg till robot",
|
|
||||||
"Building...": "Bygger...",
|
"Building...": "Bygger...",
|
||||||
"Delete Robot": "Radera robot",
|
"Delete Robot": "Radera robot",
|
||||||
"Last order #{{orderID}}": "Senaste order #{{orderID}}",
|
"Last order #{{orderID}}": "Senaste order #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "Amri zilizopo zinafanana na yako!",
|
"Existing orders match yours!": "Amri zilizopo zinafanana na yako!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "Kubadilishana LN P2P Rahisi na Binafsi",
|
"A Simple and Private LN P2P Exchange": "Kubadilishana LN P2P Rahisi na Binafsi",
|
||||||
|
"Add Robot": "Ongeza Roboti",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "Jumuiya",
|
"Community": "Jumuiya",
|
||||||
"Exchange summary": "Muhtasari wa Ubadilishanaji",
|
"Exchange summary": "Muhtasari wa Ubadilishanaji",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "chezesha tena",
|
"roll again": "chezesha tena",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "Amri hai #{{orderID}}",
|
"Active order #{{orderID}}": "Amri hai #{{orderID}}",
|
||||||
"Add Robot": "Ongeza Roboti",
|
|
||||||
"Building...": "Inajengwa...",
|
"Building...": "Inajengwa...",
|
||||||
"Delete Robot": "Futa Roboti",
|
"Delete Robot": "Futa Roboti",
|
||||||
"Last order #{{orderID}}": "Amri ya mwisho #{{orderID}}",
|
"Last order #{{orderID}}": "Amri ya mwisho #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "มีคำสั่งซื้อที่ตรงกันกับของคุณ!",
|
"Existing orders match yours!": "มีคำสั่งซื้อที่ตรงกันกับของคุณ!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "การแลกเปลี่ยน LN P2P ที่เรียบง่ายและเป็นส่วนตัว",
|
"A Simple and Private LN P2P Exchange": "การแลกเปลี่ยน LN P2P ที่เรียบง่ายและเป็นส่วนตัว",
|
||||||
|
"Add Robot": "เพิ่มหุ่นยนต์",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "ชุมชน",
|
"Community": "ชุมชน",
|
||||||
"Exchange summary": "สรุปการแลกเปลี่ยน",
|
"Exchange summary": "สรุปการแลกเปลี่ยน",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "สุ่มใหม่",
|
"roll again": "สุ่มใหม่",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "รายการที่ใช้งาน #{{orderID}}",
|
"Active order #{{orderID}}": "รายการที่ใช้งาน #{{orderID}}",
|
||||||
"Add Robot": "เพิ่มหุ่นยนต์",
|
|
||||||
"Building...": "กำลังสร้าง...",
|
"Building...": "กำลังสร้าง...",
|
||||||
"Delete Robot": "ลบหุ่นยนต์",
|
"Delete Robot": "ลบหุ่นยนต์",
|
||||||
"Last order #{{orderID}}": "คำสั่งล่าสุด #{{orderID}}",
|
"Last order #{{orderID}}": "คำสั่งล่าสุด #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "有与你的订单相匹配的现有订单!",
|
"Existing orders match yours!": "有与你的订单相匹配的现有订单!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "一个简单且隐秘的点对点闪电交易所",
|
"A Simple and Private LN P2P Exchange": "一个简单且隐秘的点对点闪电交易所",
|
||||||
|
"Add Robot": "添加机器人",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "社区",
|
"Community": "社区",
|
||||||
"Exchange summary": "交易总结",
|
"Exchange summary": "交易总结",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "再试一次",
|
"roll again": "再试一次",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "活跃订单 #{{orderID}}",
|
"Active order #{{orderID}}": "活跃订单 #{{orderID}}",
|
||||||
"Add Robot": "添加机器人",
|
|
||||||
"Building...": "正在建造...",
|
"Building...": "正在建造...",
|
||||||
"Delete Robot": "删除机器人",
|
"Delete Robot": "删除机器人",
|
||||||
"Last order #{{orderID}}": "上一张订单 #{{orderID}}",
|
"Last order #{{orderID}}": "上一张订单 #{{orderID}}",
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
"Existing orders match yours!": "有與你的訂單相匹配的現有訂單!",
|
"Existing orders match yours!": "有與你的訂單相匹配的現有訂單!",
|
||||||
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
"#5": "Phrases in basic/NavBar/AppBar/index.tsx",
|
||||||
"A Simple and Private LN P2P Exchange": "一個簡單且隱密的點對點閃電交易所",
|
"A Simple and Private LN P2P Exchange": "一個簡單且隱密的點對點閃電交易所",
|
||||||
|
"Add Robot": "添加機器人",
|
||||||
"Client info": "Client info",
|
"Client info": "Client info",
|
||||||
"Community": "社群",
|
"Community": "社群",
|
||||||
"Exchange summary": "匯率總結",
|
"Exchange summary": "匯率總結",
|
||||||
@ -55,7 +56,6 @@
|
|||||||
"roll again": "再擲一次",
|
"roll again": "再擲一次",
|
||||||
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
"#10": "Phrases in basic/RobotPage/RobotProfile.tsx",
|
||||||
"Active order #{{orderID}}": "活躍訂單 #{{orderID}}",
|
"Active order #{{orderID}}": "活躍訂單 #{{orderID}}",
|
||||||
"Add Robot": "添加機器人",
|
|
||||||
"Building...": "正在建造...",
|
"Building...": "正在建造...",
|
||||||
"Delete Robot": "刪除機器人",
|
"Delete Robot": "刪除機器人",
|
||||||
"Last order #{{orderID}}": "上一張訂單 #{{orderID}}",
|
"Last order #{{orderID}}": "上一張訂單 #{{orderID}}",
|
||||||
|
Reference in New Issue
Block a user