standardizing no content screen (#675)
* standardizing no content screen * fixing preview text overlay style
This commit is contained in:
@@ -24,6 +24,7 @@ import { useTranslation } from 'react-i18next';
|
||||
import CustomSettingsTopBar from '../../../../../functions/CustomElements/settingsTopBar';
|
||||
import { INSET_WINDOW_WIDTH } from '../../../../../constants/theme';
|
||||
import ThemeIcon from '../../../../../functions/CustomElements/themeIcon';
|
||||
import NoContentSceen from '../../../../../functions/CustomElements/noContentScreen';
|
||||
|
||||
export default function HistoricalGiftCardPurchases() {
|
||||
const { decodedGiftCards, toggleGlobalAppDataInformation } =
|
||||
@@ -72,58 +73,61 @@ export default function HistoricalGiftCardPurchases() {
|
||||
</TouchableOpacity>
|
||||
);
|
||||
|
||||
if (
|
||||
!decodedGiftCards.purchasedCards ||
|
||||
decodedGiftCards?.purchasedCards?.length === 0
|
||||
) {
|
||||
return (
|
||||
<GlobalThemeView useStandardWidth={true}>
|
||||
<CustomSettingsTopBar containerStyles={styles.topBar} />
|
||||
<NoContentSceen
|
||||
iconName="Receipt"
|
||||
titleText={t('apps.noPurchaseTitle')}
|
||||
subTitleText={t('apps.giftCards.historicalPurchasesPage.noPurchases')}
|
||||
/>
|
||||
</GlobalThemeView>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<GlobalThemeView styles={styles.globalContainer} useStandardWidth={true}>
|
||||
<CustomSettingsTopBar containerStyles={styles.topBar} />
|
||||
|
||||
{!decodedGiftCards.purchasedCards ||
|
||||
decodedGiftCards?.purchasedCards?.length === 0 ? (
|
||||
<View style={styles.noPurchaseContainer}>
|
||||
<ThemeText
|
||||
styles={styles.noPurchaseText}
|
||||
content={t('apps.giftCards.historicalPurchasesPage.noPurchases')}
|
||||
/>
|
||||
</View>
|
||||
) : (
|
||||
<>
|
||||
<FlatList
|
||||
data={decodedGiftCards.purchasedCards}
|
||||
renderItem={renderItem}
|
||||
keyExtractor={item => item.id.toString()} // Assuming each gift card has a unique 'id'
|
||||
style={{ width: '90%' }}
|
||||
showsVerticalScrollIndicator={false}
|
||||
ListFooterComponent={
|
||||
<View
|
||||
style={{
|
||||
height: bottomPadding + 60,
|
||||
}}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
<CustomButton
|
||||
buttonStyles={{
|
||||
...styles.supportBTN,
|
||||
bottom: bottomPadding,
|
||||
<FlatList
|
||||
data={decodedGiftCards.purchasedCards}
|
||||
renderItem={renderItem}
|
||||
keyExtractor={item => item.id.toString()} // Assuming each gift card has a unique 'id'
|
||||
style={{ width: '90%' }}
|
||||
showsVerticalScrollIndicator={false}
|
||||
ListFooterComponent={
|
||||
<View
|
||||
style={{
|
||||
height: bottomPadding + 60,
|
||||
}}
|
||||
actionFunction={async () => {
|
||||
try {
|
||||
await openComposer({
|
||||
to: 'support@thebitcoincompany.com',
|
||||
subject: 'Gift cards payment error',
|
||||
});
|
||||
} catch (err) {
|
||||
copyToClipboard(
|
||||
'support@thebitcoincompany.com',
|
||||
showToast,
|
||||
null,
|
||||
t('apps.giftCards.historicalPurchasesPage.customCopyMessage'),
|
||||
);
|
||||
}
|
||||
}}
|
||||
textContent={t('constants.support')}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
}
|
||||
/>
|
||||
<CustomButton
|
||||
buttonStyles={{
|
||||
...styles.supportBTN,
|
||||
bottom: bottomPadding,
|
||||
}}
|
||||
actionFunction={async () => {
|
||||
try {
|
||||
await openComposer({
|
||||
to: 'support@thebitcoincompany.com',
|
||||
subject: 'Gift cards payment error',
|
||||
});
|
||||
} catch (err) {
|
||||
copyToClipboard(
|
||||
'support@thebitcoincompany.com',
|
||||
showToast,
|
||||
null,
|
||||
t('apps.giftCards.historicalPurchasesPage.customCopyMessage'),
|
||||
);
|
||||
}
|
||||
}}
|
||||
textContent={t('constants.support')}
|
||||
/>
|
||||
</GlobalThemeView>
|
||||
);
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import CustomButton from '../../../../../functions/CustomElements/button';
|
||||
import { useKeysContext } from '../../../../../../context-store/keys';
|
||||
import { encriptMessage } from '../../../../../functions/messaging/encodingAndDecodingMessages';
|
||||
import ThemeIcon from '../../../../../functions/CustomElements/themeIcon';
|
||||
import NoContentSceen from '../../../../../functions/CustomElements/noContentScreen';
|
||||
|
||||
const API_ENDPOINTS = {
|
||||
ORDER_STATUS: 'https://api2.sms4sats.com/orderstatus',
|
||||
@@ -329,6 +330,23 @@ export default function HistoricalSMSMessagingPage({ route }) {
|
||||
copyToClipboard('support@sms4sats.com', showToast);
|
||||
}, [showToast]);
|
||||
|
||||
if (!messageElements.length) {
|
||||
return (
|
||||
<GlobalThemeView useStandardWidth={true}>
|
||||
<CustomSettingsTopBar
|
||||
label={t(
|
||||
`apps.sms4sats.sentPayments.title${selectedPage.toLowerCase()}`,
|
||||
)}
|
||||
/>
|
||||
<NoContentSceen
|
||||
iconName="Receipt"
|
||||
titleText={t('apps.noPurchaseTitle')}
|
||||
subTitleText={t('apps.sms4sats.sentPayments.noPurchasesTitle')}
|
||||
/>
|
||||
</GlobalThemeView>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<GlobalThemeView useStandardWidth={true}>
|
||||
<CustomSettingsTopBar
|
||||
@@ -338,39 +356,26 @@ export default function HistoricalSMSMessagingPage({ route }) {
|
||||
/>
|
||||
|
||||
<View style={styles.homepage}>
|
||||
{messageElements.length === 0 ? (
|
||||
<View style={styles.centered}>
|
||||
<ThemeText
|
||||
content={t(
|
||||
`apps.sms4sats.sentPayments.noPayments${selectedPage.toLowerCase()}`,
|
||||
)}
|
||||
styles={styles.emptyStateText}
|
||||
/>
|
||||
</View>
|
||||
) : (
|
||||
<ScrollView
|
||||
showsVerticalScrollIndicator={false}
|
||||
contentContainerStyle={styles.scrollContainer}
|
||||
>
|
||||
{messageElements}
|
||||
</ScrollView>
|
||||
)}
|
||||
<ScrollView
|
||||
showsVerticalScrollIndicator={false}
|
||||
contentContainerStyle={styles.scrollContainer}
|
||||
>
|
||||
{messageElements}
|
||||
</ScrollView>
|
||||
|
||||
{!!messageElements.length && (
|
||||
<TouchableOpacity
|
||||
onPress={handleSupportContact}
|
||||
style={styles.supportContainer}
|
||||
>
|
||||
<ThemeText
|
||||
styles={styles.supportText}
|
||||
content={t('apps.sms4sats.sentPayments.helpMessage')}
|
||||
/>
|
||||
<ThemeText
|
||||
styles={styles.supportEmail}
|
||||
content="support@sms4sats.com"
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
)}
|
||||
<TouchableOpacity
|
||||
onPress={handleSupportContact}
|
||||
style={styles.supportContainer}
|
||||
>
|
||||
<ThemeText
|
||||
styles={styles.supportText}
|
||||
content={t('apps.sms4sats.sentPayments.helpMessage')}
|
||||
/>
|
||||
<ThemeText
|
||||
styles={styles.supportEmail}
|
||||
content="support@sms4sats.com"
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
</GlobalThemeView>
|
||||
);
|
||||
|
||||
@@ -22,7 +22,7 @@ import { useTranslation } from 'react-i18next';
|
||||
import GiftCardItem from './giftCardItem';
|
||||
import CustomButton from '../../../../functions/CustomElements/button';
|
||||
import { useGlobalThemeContext } from '../../../../../context-store/theme';
|
||||
import IconActionCircle from '../../../../functions/CustomElements/actionCircleContainer';
|
||||
import NoContentSceen from '../../../../functions/CustomElements/noContentScreen';
|
||||
|
||||
export default function GiftsOverview() {
|
||||
const navigate = useNavigation();
|
||||
@@ -84,17 +84,14 @@ export default function GiftsOverview() {
|
||||
showsVerticalScrollIndicator={false}
|
||||
/>
|
||||
) : (
|
||||
<ScrollView contentContainerStyle={styles.scrollView}>
|
||||
<IconActionCircle bottomOffset={32} icon={'Gift'} />
|
||||
<ThemeText
|
||||
styles={styles.title}
|
||||
content={t('screens.inAccount.giftPages.giftsOverview.noGiftsHead')}
|
||||
/>
|
||||
<ThemeText
|
||||
styles={styles.noGiftsDesc}
|
||||
content={t('screens.inAccount.giftPages.giftsOverview.noGiftsDesc')}
|
||||
/>
|
||||
</ScrollView>
|
||||
<NoContentSceen
|
||||
containerStyles={{ width: '100%' }}
|
||||
iconName="Gift"
|
||||
titleText={t('screens.inAccount.giftPages.giftsOverview.noGiftsHead')}
|
||||
subTitleText={t(
|
||||
'screens.inAccount.giftPages.giftsOverview.noGiftsDesc',
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
|
||||
<View style={styles.buttonGroup}>
|
||||
@@ -125,7 +122,7 @@ export default function GiftsOverview() {
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: { flex: 1, width: WINDOWWIDTH, alignSelf: 'center' },
|
||||
container: { flex: 1, width: INSET_WINDOW_WIDTH, alignSelf: 'center' },
|
||||
flatlistStyle: { paddingTop: 0 },
|
||||
flatListContent: { flexGrow: 1, paddingTop: 20 },
|
||||
scrollView: {
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
} from '../../../../constants/theme';
|
||||
import {
|
||||
CustomKeyboardAvoidingView,
|
||||
GlobalThemeView,
|
||||
ThemeText,
|
||||
} from '../../../../functions/CustomElements';
|
||||
import GetThemeColors from '../../../../hooks/themeColors';
|
||||
@@ -22,6 +23,7 @@ import CustomSettingsTopBar from '../../../../functions/CustomElements/settingsT
|
||||
import { useGlobalThemeContext } from '../../../../../context-store/theme';
|
||||
import CustomSearchInput from '../../../../functions/CustomElements/searchInput';
|
||||
import IconActionCircle from '../../../../functions/CustomElements/actionCircleContainer';
|
||||
import NoContentSceen from '../../../../functions/CustomElements/noContentScreen';
|
||||
|
||||
export default function ReclaimGift() {
|
||||
const { theme, darkModeType } = useGlobalThemeContext();
|
||||
@@ -64,6 +66,30 @@ export default function ReclaimGift() {
|
||||
navigate.navigate('AdvancedGiftClaim');
|
||||
};
|
||||
|
||||
if (!hasExpiredGift) {
|
||||
return (
|
||||
<GlobalThemeView useStandardWidth={true}>
|
||||
<CustomSettingsTopBar
|
||||
label={t('screens.inAccount.giftPages.claimPage.reclaimButton')}
|
||||
/>
|
||||
<NoContentSceen
|
||||
iconName="RotateCcw"
|
||||
titleText={t('screens.inAccount.giftPages.reclaimPage.header')}
|
||||
subTitleText={t(
|
||||
'screens.inAccount.giftPages.reclaimPage.noReclaimsMessage',
|
||||
)}
|
||||
/>
|
||||
<CustomButton
|
||||
buttonStyles={{ width: INSET_WINDOW_WIDTH, ...CENTER }}
|
||||
textContent={t(
|
||||
'screens.inAccount.giftPages.reclaimPage.advancedModeBTN',
|
||||
)}
|
||||
actionFunction={handleAdvancedMode}
|
||||
/>
|
||||
</GlobalThemeView>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<CustomKeyboardAvoidingView
|
||||
useStandardWidth={true}
|
||||
@@ -233,6 +259,7 @@ const styles = StyleSheet.create({
|
||||
marginTop: 8,
|
||||
},
|
||||
advancedContainer: {
|
||||
width: '100%',
|
||||
backgroundColor: 'unset',
|
||||
marginBottom: 20,
|
||||
},
|
||||
|
||||
@@ -10,6 +10,7 @@ import PoolCard from './poolCard';
|
||||
import FullLoadingScreen from '../../../../functions/CustomElements/loadingScreen';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import PoolsInfoCard from './poolsInfoCard';
|
||||
import NoContentSceen from '../../../../functions/CustomElements/noContentScreen';
|
||||
|
||||
export default function PoolManagementScreen() {
|
||||
const navigate = useNavigation();
|
||||
@@ -69,12 +70,11 @@ export default function PoolManagementScreen() {
|
||||
);
|
||||
|
||||
const renderEmptyState = () => (
|
||||
<View style={styles.emptyContainer}>
|
||||
<ThemeText
|
||||
styles={styles.emptyText}
|
||||
content={t('wallet.pools.noPoolsCreated')}
|
||||
/>
|
||||
</View>
|
||||
<NoContentSceen
|
||||
iconName="PiggyBank"
|
||||
titleText={t('wallet.pools.noPoolsTitle')}
|
||||
subTitleText={t('wallet.pools.noPoolsSubTitle')}
|
||||
/>
|
||||
);
|
||||
|
||||
// Build data array based on what exists
|
||||
|
||||
+31
-7
@@ -1,6 +1,7 @@
|
||||
import { ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native';
|
||||
import {
|
||||
CustomKeyboardAvoidingView,
|
||||
GlobalThemeView,
|
||||
ThemeText,
|
||||
} from '../../../../../../functions/CustomElements';
|
||||
import CustomSettingsTopBar from '../../../../../../functions/CustomElements/settingsTopBar';
|
||||
@@ -21,6 +22,7 @@ import { useGlobalThemeContext } from '../../../../../../../context-store/theme'
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import ThemeIcon from '../../../../../../functions/CustomElements/themeIcon';
|
||||
import { INSET_WINDOW_WIDTH } from '../../../../../../constants/theme';
|
||||
import NoContentSceen from '../../../../../../functions/CustomElements/noContentScreen';
|
||||
|
||||
export default function AddPOSItemsPage() {
|
||||
const { masterInfoObject, toggleMasterInfoObject } =
|
||||
@@ -120,6 +122,31 @@ export default function AddPOSItemsPage() {
|
||||
.filter(Boolean);
|
||||
}, [posItemSearch, posItems, currentCurrency, backgroundOffset]);
|
||||
|
||||
if (!posItems.length) {
|
||||
return (
|
||||
<GlobalThemeView useStandardWidth={true}>
|
||||
<CustomSettingsTopBar
|
||||
shouldDismissKeyboard={true}
|
||||
label={t('settings.posPath.items.addPOSItemsPage.title')}
|
||||
/>
|
||||
<NoContentSceen
|
||||
iconName="ShoppingCart"
|
||||
titleText={t('settings.posPath.items.addPOSItemsPage.noPosTitle')}
|
||||
subTitleText={t('settings.posPath.items.addPOSItemsPage.noPosSub')}
|
||||
/>
|
||||
<CustomButton
|
||||
buttonStyles={styles.addItemButton}
|
||||
actionFunction={() =>
|
||||
navigate.navigate('CustomHalfModal', {
|
||||
wantedContent: 'addPOSItemsHalfModal',
|
||||
})
|
||||
}
|
||||
textContent={t('settings.posPath.items.addPOSItemsPage.ctaBTN')}
|
||||
/>
|
||||
</GlobalThemeView>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<CustomKeyboardAvoidingView
|
||||
isKeyboardActive={isKeyboardActive}
|
||||
@@ -151,11 +178,9 @@ export default function AddPOSItemsPage() {
|
||||
<View style={styles.emptyState}>
|
||||
<ThemeText
|
||||
styles={styles.emptyStateText}
|
||||
content={
|
||||
posItems?.length
|
||||
? t('settings.posPath.items.addPOSItemsPage.noItemsSearch')
|
||||
: t('settings.posPath.items.addPOSItemsPage.noItemsAdded')
|
||||
}
|
||||
content={t(
|
||||
'settings.posPath.items.addPOSItemsPage.noItemsSearch',
|
||||
)}
|
||||
/>
|
||||
</View>
|
||||
)}
|
||||
@@ -220,11 +245,10 @@ const styles = StyleSheet.create({
|
||||
paddingBottom: CONTENT_KEYBOARD_OFFSET,
|
||||
},
|
||||
emptyState: {
|
||||
marginTop: 24,
|
||||
alignItems: 'center',
|
||||
},
|
||||
emptyStateText: {
|
||||
width: '90%',
|
||||
width: '100%',
|
||||
textAlign: 'center',
|
||||
},
|
||||
});
|
||||
|
||||
@@ -2,6 +2,7 @@ import { useCallback, useMemo, useState } from 'react';
|
||||
import { CENTER, ICONS, SIZES } from '../../../../../constants';
|
||||
import {
|
||||
CustomKeyboardAvoidingView,
|
||||
GlobalThemeView,
|
||||
ThemeText,
|
||||
} from '../../../../../functions/CustomElements';
|
||||
import CustomSettingsTopBar from '../../../../../functions/CustomElements/settingsTopBar';
|
||||
@@ -18,6 +19,7 @@ import { keyboardNavigate } from '../../../../../functions/customNavigation';
|
||||
import GetThemeColors from '../../../../../hooks/themeColors';
|
||||
import ThemeIcon from '../../../../../functions/CustomElements/themeIcon';
|
||||
import { INSET_WINDOW_WIDTH } from '../../../../../constants/theme';
|
||||
import NoContentSceen from '../../../../../functions/CustomElements/noContentScreen';
|
||||
|
||||
export default function ViewPOSTransactions() {
|
||||
const { groupedTxs } = usePOSTransactions();
|
||||
@@ -78,6 +80,26 @@ export default function ViewPOSTransactions() {
|
||||
[backgroundOffset, masterInfoObject, fiatStats, t, navigate],
|
||||
);
|
||||
|
||||
if (!groupedTxs.length) {
|
||||
return (
|
||||
<GlobalThemeView useStandardWidth={true}>
|
||||
<CustomSettingsTopBar
|
||||
shouldDismissKeyboard={true}
|
||||
showLeftImage={false}
|
||||
leftImageBlue={ICONS.receiptIcon}
|
||||
LeftImageDarkMode={ICONS.receiptWhite}
|
||||
containerStyles={{ marginBottom: 0 }}
|
||||
label={t('settings.posPath.transactions.title')}
|
||||
/>
|
||||
<NoContentSceen
|
||||
iconName="Receipt"
|
||||
titleText={t('settings.posPath.transactions.noEmployeeTitle')}
|
||||
subTitleText={t('settings.posPath.transactions.noEmployeeSubTitle')}
|
||||
/>
|
||||
</GlobalThemeView>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<CustomKeyboardAvoidingView
|
||||
styles={styles.globalContainer}
|
||||
@@ -114,11 +136,7 @@ export default function ViewPOSTransactions() {
|
||||
) : (
|
||||
<ThemeText
|
||||
styles={styles.emptyText}
|
||||
content={
|
||||
groupedTxs.length
|
||||
? t('settings.posPath.transactions.noTips')
|
||||
: t('settings.posPath.transactions.noEmployees')
|
||||
}
|
||||
content={t('settings.posPath.transactions.noTips')}
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
@@ -158,7 +176,6 @@ const styles = StyleSheet.create({
|
||||
marginTop: 2,
|
||||
},
|
||||
emptyText: {
|
||||
marginTop: 24,
|
||||
textAlign: 'center',
|
||||
},
|
||||
});
|
||||
|
||||
@@ -76,6 +76,7 @@ import ThemeIcon from '../../../../functions/CustomElements/themeIcon';
|
||||
import CheckMarkCircle from '../../../../functions/CustomElements/checkMarkCircle';
|
||||
import { getTimeDisplay } from '../../../../functions/contacts';
|
||||
import useAdaptiveButtonLayout from '../../../../hooks/useAdaptiveButtonLayout';
|
||||
import NoContentSceen from '../../../../functions/CustomElements/noContentScreen';
|
||||
|
||||
const confirmTxAnimation = require('../../../../assets/confirmTxAnimation.json');
|
||||
|
||||
@@ -1472,21 +1473,15 @@ export default function SwapFlowHalfModal({
|
||||
);
|
||||
}}
|
||||
ListEmptyComponent={
|
||||
<View style={styles.emptyContainer}>
|
||||
<ThemeIcon iconName={'ArrowUpDown'} />
|
||||
<ThemeText
|
||||
styles={styles.emptyTitle}
|
||||
content={t(
|
||||
'screens.inAccount.swapHistory.noHisotorytitle',
|
||||
)}
|
||||
/>
|
||||
<ThemeText
|
||||
styles={styles.emptySubtext}
|
||||
content={t(
|
||||
'screens.inAccount.swapHistory.noHisotorydesc',
|
||||
)}
|
||||
/>
|
||||
</View>
|
||||
<NoContentSceen
|
||||
iconName="ArrowUpDown"
|
||||
titleText={t(
|
||||
'screens.inAccount.swapHistory.noHisotorytitle',
|
||||
)}
|
||||
subTitleText={t(
|
||||
'screens.inAccount.swapHistory.noHisotorydesc',
|
||||
)}
|
||||
/>
|
||||
}
|
||||
ListFooterComponent={
|
||||
swapHistory.swaps.length < swapHistory.totalCount ? (
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
import { StyleSheet, View } from 'react-native';
|
||||
import ThemeIcon from './themeIcon';
|
||||
import { CENTER, ICONS } from '../../constants';
|
||||
import {
|
||||
HIDDEN_OPACITY,
|
||||
INSET_WINDOW_WIDTH,
|
||||
SIZES,
|
||||
} from '../../constants/theme';
|
||||
import ThemeText from './textTheme';
|
||||
import ThemeImage from './themeImage';
|
||||
|
||||
export default function NoContentSceen({
|
||||
iconName = '',
|
||||
titleText = '',
|
||||
subTitleText = '',
|
||||
containerStyles = {},
|
||||
}) {
|
||||
return (
|
||||
<View style={[styles.container, containerStyles]}>
|
||||
{iconName === 'Receipt' ? (
|
||||
<ThemeImage
|
||||
lightModeIcon={ICONS.receiptIcon}
|
||||
darkModeIcon={ICONS.receiptIcon}
|
||||
lightsOutIcon={ICONS.receiptWhite}
|
||||
/>
|
||||
) : (
|
||||
<ThemeIcon iconName={iconName} />
|
||||
)}
|
||||
<ThemeText styles={styles.emptyTitle} content={titleText} />
|
||||
<ThemeText styles={styles.emptySubtext} content={subTitleText} />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: {
|
||||
width: INSET_WINDOW_WIDTH,
|
||||
flex: 1,
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
...CENTER,
|
||||
},
|
||||
emptyTitle: {
|
||||
fontSize: SIZES.large,
|
||||
fontWeight: '500',
|
||||
marginTop: 16,
|
||||
marginBottom: 8,
|
||||
textAlign: 'center',
|
||||
},
|
||||
emptySubtext: {
|
||||
fontSize: SIZES.smedium,
|
||||
opacity: HIDDEN_OPACITY,
|
||||
textAlign: 'center',
|
||||
},
|
||||
});
|
||||
@@ -114,6 +114,7 @@ const styles = StyleSheet.create({
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
gap: 10,
|
||||
},
|
||||
left: {
|
||||
flexShrink: 1,
|
||||
|
||||
@@ -70,6 +70,7 @@ const styles = StyleSheet.create({
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
gap: 10,
|
||||
},
|
||||
left: {
|
||||
flexShrink: 1,
|
||||
|
||||
@@ -158,6 +158,7 @@ const styles = StyleSheet.create({
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
gap: 10,
|
||||
},
|
||||
left: {
|
||||
flexShrink: 1,
|
||||
|
||||
@@ -22,7 +22,7 @@ export default function SavingsPreview({ onPress }) {
|
||||
return (
|
||||
<WidgetCard onPress={onPress}>
|
||||
<View style={styles.row}>
|
||||
<View style={{ flexShrink: 1, marginRight: 10 }}>
|
||||
<View style={{ flexShrink: 1 }}>
|
||||
<ThemeText
|
||||
styles={styles.title}
|
||||
content={t('savings.preview.title')}
|
||||
@@ -76,6 +76,7 @@ const styles = StyleSheet.create({
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'space-between',
|
||||
gap: 10,
|
||||
},
|
||||
title: {
|
||||
fontSize: SIZES.smedium,
|
||||
|
||||
@@ -28,6 +28,7 @@ import GetThemeColors from '../../hooks/themeColors';
|
||||
import { getFilteredTransactions } from '../../functions/spark/transactions';
|
||||
import customUUID from '../../functions/customUUID';
|
||||
import ThemeIcon from '../../functions/CustomElements/themeIcon';
|
||||
import NoContentSceen from '../../functions/CustomElements/noContentScreen';
|
||||
import { HIDDEN_OPACITY, INSET_WINDOW_WIDTH } from '../../constants/theme';
|
||||
|
||||
const FILTER_DEBOUNCE_MS = 500;
|
||||
@@ -241,17 +242,11 @@ export default function ViewAllTxPage() {
|
||||
{!txs.length || isLoadingNewTxs ? (
|
||||
<FullLoadingScreen />
|
||||
) : doesNotHaveTransactions ? (
|
||||
<View style={styles.noTxContainer}>
|
||||
<ThemeIcon iconName={'Clock'} />
|
||||
<ThemeText
|
||||
styles={styles.emptyTitle}
|
||||
content={t('screens.inAccount.viewAllTxPage.noTxHistoryTitle')}
|
||||
/>
|
||||
<ThemeText
|
||||
styles={styles.emptySubtext}
|
||||
content={t('screens.inAccount.viewAllTxPage.noTxHistorySub')}
|
||||
/>
|
||||
</View>
|
||||
<NoContentSceen
|
||||
iconName="Clock"
|
||||
titleText={t('screens.inAccount.viewAllTxPage.noTxHistoryTitle')}
|
||||
subTitleText={t('screens.inAccount.viewAllTxPage.noTxHistorySub')}
|
||||
/>
|
||||
) : (
|
||||
<FlatList
|
||||
initialNumToRender={20}
|
||||
|
||||
@@ -286,6 +286,7 @@
|
||||
}
|
||||
},
|
||||
"apps": {
|
||||
"noPurchaseTitle": "Keine Einkäufe",
|
||||
"appList": {
|
||||
"AI": "KI",
|
||||
"AIDescription": "Chatten Sie mit den neuesten generativen KI-Modellen.",
|
||||
@@ -755,7 +756,7 @@
|
||||
"historicalPurchasesPage": {
|
||||
"confirmRemoval": "Möchten Sie diese Geschenkkarte wirklich entfernen?",
|
||||
"purchased": "Gekauft am:",
|
||||
"noPurchases": "Sie haben noch keine Geschenkkarten gekauft.",
|
||||
"noPurchases": "Sie haben noch keine Geschenkkarten gekauft. Sobald Sie eine kaufen, wird sie hier angezeigt.",
|
||||
"customCopyMessage": "Support-E-Mail wurde kopiert"
|
||||
}
|
||||
},
|
||||
@@ -799,7 +800,8 @@
|
||||
"refundedOrder": "Die Bestellung wurde erstattet. Die Gelder werden nach 21 Minuten automatisch auf Ihre Wallet zurückgebucht.",
|
||||
"reclaimComplete": "Wiederholung abgeschlossen. Falls kein Code generiert wird, erhalten Sie nach 21 Minuten automatisch eine Rückerstattung.",
|
||||
"noCode": "Kein Code",
|
||||
"rateLimitError": "Zu viele Anfragen. Sie können nur 5 Anfragen alle 30 Sekunden stellen. Bitte warten Sie einen Moment."
|
||||
"rateLimitError": "Zu viele Anfragen. Sie können nur 5 Anfragen alle 30 Sekunden stellen. Bitte warten Sie einen Moment.",
|
||||
"noPurchasesTitle": "Sie haben noch keine SMS-Nachrichten gesendet oder empfangen. Sobald Sie das tun, erscheinen sie hier."
|
||||
},
|
||||
"receivePage": {
|
||||
"paymentMemo": "Shop - SMS Empfang",
|
||||
@@ -944,7 +946,9 @@
|
||||
"howStep2": "• Teilen Sie den Sparpool-Link, damit andere ihn finden können.",
|
||||
"howStep3": "• Unterstützer senden Bitcoin direkt an den Pool.",
|
||||
"howStep4": "• Schließen Sie den Sparpool, wenn Sie bereit sind, die Gelder in Ihr Hauptkonto zu übertragen."
|
||||
}
|
||||
},
|
||||
"noPoolsTitle": "Keine erstellten Pools",
|
||||
"noPoolsSubTitle": "Sobald du einen Pool erstellt hast, wird er hier als aktiv oder inaktiv angezeigt."
|
||||
},
|
||||
"manualInputPage": {
|
||||
"inputPlaceholder": "Geben Sie eine Liquid- oder Lightning-Adresse bzw. Zahlungsanforderung ein oder fügen Sie sie ein."
|
||||
@@ -1731,7 +1735,9 @@
|
||||
"title": "Zu zahlende Trinkgelder an die Mitarbeiter",
|
||||
"empNamePlaceholder": "Mitarbeitername",
|
||||
"noEmployees": "Aktuell liegen keine offenen Trinkgelder vor. Sobald Mitarbeiter Trinkgelder über das Zahlungsterminal (POS) erfassen (z. B. per Lightning-Zahlung oder Blitz Wallet), erscheinen die Beträge hier – sortiert nach Mitarbeitern – und können ausgezahlt werden.",
|
||||
"noTips": "Der Mitarbeiter hat keine Trinkgelder."
|
||||
"noTips": "Der Mitarbeiter hat keine Trinkgelder.",
|
||||
"noEmployeeTitle": "Keine Trinkgelder zu zahlen",
|
||||
"noEmployeeSubTitle": "Du hast noch keine Trinkgelder zu zahlen. Wenn ein Mitarbeiter ein Trinkgeld erhält, wird es hier angezeigt."
|
||||
},
|
||||
"items": {
|
||||
"addItemHalfModal": {
|
||||
@@ -1753,7 +1759,9 @@
|
||||
"itemSearchPlaceholder": "Artikelname...",
|
||||
"noItemsSearch": "Keine Artikel entsprechen Ihrer Suche.",
|
||||
"noItemsAdded": "Fügen Sie einen Artikel hinzu, damit er hier angezeigt wird.",
|
||||
"ctaBTN": "Artikel hinzufügen"
|
||||
"ctaBTN": "Artikel hinzufügen",
|
||||
"noPosTitle": "Keine POS-Artikel",
|
||||
"noPosSub": "Du hast noch keine POS-Artikel gespeichert. Sobald du einen gespeichert hast, wird er hier angezeigt."
|
||||
}
|
||||
},
|
||||
"internalComponents": {
|
||||
|
||||
@@ -286,6 +286,7 @@
|
||||
}
|
||||
},
|
||||
"apps": {
|
||||
"noPurchaseTitle": "No Purchases",
|
||||
"appList": {
|
||||
"AI": "AI",
|
||||
"AIDescription": "Chat with the latest generative AI models",
|
||||
@@ -755,7 +756,7 @@
|
||||
"historicalPurchasesPage": {
|
||||
"confirmRemoval": "Are you sure you want to remove this gift card?",
|
||||
"purchased": "Purchased:",
|
||||
"noPurchases": "You have no gift card purchases",
|
||||
"noPurchases": "You haven’t purchased any gift cards. Once you do, they’ll show up here.",
|
||||
"customCopyMessage": "Support email copied"
|
||||
}
|
||||
},
|
||||
@@ -799,7 +800,8 @@
|
||||
"refundedOrder": "Order has been refunded, funds will automatically return to your wallet after 21 minutes",
|
||||
"reclaimComplete": "Retry complete. If no code is generated, you will be auto-refunded after 21 minutes.",
|
||||
"noCode": "No code",
|
||||
"rateLimitError": "Too many requests. You can only make 5 requests every 30 seconds. Please wait before trying again."
|
||||
"rateLimitError": "Too many requests. You can only make 5 requests every 30 seconds. Please wait before trying again.",
|
||||
"noPurchasesTitle": "You haven’t sent or received any SMS messages yet. Once you do, they’ll show up here."
|
||||
},
|
||||
"receivePage": {
|
||||
"paymentMemo": "Store - SMS Receive",
|
||||
@@ -943,7 +945,9 @@
|
||||
"howStep2": "• Share the pool link so others can find it",
|
||||
"howStep3": "• Contributors send Bitcoin directly to the pool",
|
||||
"howStep4": "• Close the pool when ready to move funds to your wallet"
|
||||
}
|
||||
},
|
||||
"noPoolsTitle": "No Created Pools",
|
||||
"noPoolsSubTitle": "Once you create a pool, it’ll show up here as active or inactive."
|
||||
},
|
||||
"manualInputPage": {
|
||||
"inputPlaceholder": "Enter or paste a Liquid, or Lightning address/invoice"
|
||||
@@ -1729,7 +1733,9 @@
|
||||
"title": "Tips to pay",
|
||||
"empNamePlaceholder": "Employee name",
|
||||
"noEmployees": "You currently don’t have any employees with saved tips. Once an employee uses the point-of-sale, their tips will appear here so you can pay them.",
|
||||
"noTips": "Employee has no tips"
|
||||
"noTips": "Employee has no tips",
|
||||
"noEmployeeTitle": "No Tips To Pay",
|
||||
"noEmployeeSubTitle": "You don’t have any tips to pay yet. When an employee receives a tip, it’ll show up here."
|
||||
},
|
||||
"items": {
|
||||
"addItemHalfModal": {
|
||||
@@ -1751,7 +1757,9 @@
|
||||
"itemSearchPlaceholder": "Item name...",
|
||||
"noItemsSearch": "No items match your search.",
|
||||
"noItemsAdded": "Add an item for it to show up here.",
|
||||
"ctaBTN": "Add Item"
|
||||
"ctaBTN": "Add Item",
|
||||
"noPosTitle": "No POS Items",
|
||||
"noPosSub": "You don’t have any POS items saved yet. Once you save one, it will show up here."
|
||||
}
|
||||
},
|
||||
"internalComponents": {
|
||||
|
||||
@@ -286,6 +286,7 @@
|
||||
}
|
||||
},
|
||||
"apps": {
|
||||
"noPurchaseTitle": "Sin Compras",
|
||||
"appList": {
|
||||
"AI": "IA",
|
||||
"AIDescription": "Chatea con los últimos modelos generativos de IA",
|
||||
@@ -615,7 +616,7 @@
|
||||
"historicalPurchasesPage": {
|
||||
"confirmRemoval": "¿Estás seguro de que quieres eliminar esta tarjeta de regalo?",
|
||||
"purchased": "Comprado:",
|
||||
"noPurchases": "No tienes compras de tarjetas de regalo",
|
||||
"noPurchases": "Todavía no has comprado ninguna tarjeta de regalo. Una vez que lo hagas, aparecerá aquí.",
|
||||
"customCopyMessage": "Correo de soporte copiado"
|
||||
}
|
||||
},
|
||||
@@ -659,7 +660,8 @@
|
||||
"refundedOrder": "El pedido ha sido reembolsado, los fondos se devolverán automáticamente a tu billetera después de 21 minutos.",
|
||||
"reclaimComplete": "Rety completo. Si no se genera un código, se te reembolsará automáticamente después de 21 minutos.",
|
||||
"noCode": "No hay código",
|
||||
"rateLimitError": "Demasiadas solicitudes. Solo puedes hacer 5 solicitudes cada 30 segundos. Por favor, espera antes de intentar nuevamente."
|
||||
"rateLimitError": "Demasiadas solicitudes. Solo puedes hacer 5 solicitudes cada 30 segundos. Por favor, espera antes de intentar nuevamente.",
|
||||
"noPurchasesTitle": "Aún no has enviado ni recibido ningún SMS. Una vez que lo hagas, aparecerán aquí."
|
||||
},
|
||||
"receivePage": {
|
||||
"paymentMemo": "Tienda - Recepción de SMS",
|
||||
@@ -804,7 +806,9 @@
|
||||
"howStep2": "• Comparte el enlace del pool para que otros puedan encontrarlo",
|
||||
"howStep3": "• Los contribuyentes envían Bitcoin directamente al pool",
|
||||
"howStep4": "• Cierra el pool cuando estés listo para mover los fondos a tu wallet"
|
||||
}
|
||||
},
|
||||
"noPoolsTitle": "Sin Pools Creados",
|
||||
"noPoolsSubTitle": "Una vez que crees un pool, aparecerá aquí como activo o inactivo."
|
||||
},
|
||||
"manualInputPage": {
|
||||
"inputPlaceholder": "Introduce o pega una dirección/factura de Liquid o Lightning"
|
||||
@@ -1588,7 +1592,9 @@
|
||||
"title": "Propinas a pagar",
|
||||
"empNamePlaceholder": "Nombre del empleado",
|
||||
"noEmployees": "Actualmente no tienes empleados con propinas guardadas. Cuando un empleado use el punto de venta, sus propinas aparecerán aquí para que puedas pagarlas.",
|
||||
"noTips": "El empleado no tiene propinas"
|
||||
"noTips": "El empleado no tiene propinas",
|
||||
"noEmployeeTitle": "Sin Propinas que Pagar",
|
||||
"noEmployeeSubTitle": "Aún no tienes propinas que pagar. Cuando un empleado reciba una propina, aparecerá aquí."
|
||||
},
|
||||
"items": {
|
||||
"addItemHalfModal": {
|
||||
@@ -1610,7 +1616,9 @@
|
||||
"itemSearchPlaceholder": "Nombre del artículo...",
|
||||
"noItemsSearch": "Ningún artículo coincide con tu búsqueda.",
|
||||
"noItemsAdded": "Agrega un artículo para que aparezca aquí.",
|
||||
"ctaBTN": "Añadir artículo"
|
||||
"ctaBTN": "Añadir artículo",
|
||||
"noPosTitle": "Sin Artículos POS",
|
||||
"noPosSub": "Aún no tienes artículos POS guardados. Una vez que guardes uno, aparecerá aquí."
|
||||
}
|
||||
},
|
||||
"internalComponents": {
|
||||
|
||||
@@ -286,6 +286,7 @@
|
||||
}
|
||||
},
|
||||
"apps": {
|
||||
"noPurchaseTitle": "Aucun Achat",
|
||||
"appList": {
|
||||
"AI": "AI",
|
||||
"AIDescription": "Chat avec les derniers modèles génératifs d'intelligence artificielle",
|
||||
@@ -755,7 +756,7 @@
|
||||
"historicalPurchasesPage": {
|
||||
"confirmRemoval": "Êtes-vous sûr de vouloir supprimer cette carte-cadeau ?",
|
||||
"purchased": "Acheté :",
|
||||
"noPurchases": "Vous n'avez pas acheté de carte cadeau",
|
||||
"noPurchases": "Vous n'avez pas encore acheté de carte-cadeau. Une fois que vous le faites, elle apparaîtra ici.",
|
||||
"customCopyMessage": "Courriel d'assistance copié"
|
||||
}
|
||||
},
|
||||
@@ -799,7 +800,8 @@
|
||||
"refundedOrder": "La commande a été remboursée, les fonds seront automatiquement reversés dans votre portefeuille après 21 minutes.",
|
||||
"reclaimComplete": "Rety terminé. Si aucun code n'est généré, vous serez automatiquement remboursé après 21 minutes.",
|
||||
"noCode": "Pas de code",
|
||||
"rateLimitError": "Trop de demandes. Vous ne pouvez effectuer que 5 demandes toutes les 30 secondes. Veuillez patienter avant de réessayer."
|
||||
"rateLimitError": "Trop de demandes. Vous ne pouvez effectuer que 5 demandes toutes les 30 secondes. Veuillez patienter avant de réessayer.",
|
||||
"noPurchasesTitle": "Vous n'avez encore ni envoyé ni reçu de SMS. Une fois que vous le faites, ils apparaîtront ici."
|
||||
},
|
||||
"receivePage": {
|
||||
"paymentMemo": "Stocker - Recevoir des SMS",
|
||||
@@ -943,7 +945,9 @@
|
||||
"howStep2": "• Partagez le lien du pool pour que d’autres puissent le trouver",
|
||||
"howStep3": "• Les contributeurs envoient des bitcoins directement au pool",
|
||||
"howStep4": "• Fermez le pool lorsque vous êtes prêt à transférer les fonds vers votre wallet"
|
||||
}
|
||||
},
|
||||
"noPoolsTitle": "Aucun Pool Créé",
|
||||
"noPoolsSubTitle": "Une fois que vous avez créé un pool, il apparaîtra ici comme actif ou inactif."
|
||||
},
|
||||
"manualInputPage": {
|
||||
"inputPlaceholder": "Saisir ou coller un liquide, ou une adresse/facture Lightning"
|
||||
@@ -1729,7 +1733,9 @@
|
||||
"title": "Conseils pour payer",
|
||||
"empNamePlaceholder": "Nom de l'employé",
|
||||
"noEmployees": "Vous n’avez actuellement aucun employé avec des pourboires enregistrés. Une fois qu’un employé utilise le point de vente, ses pourboires apparaîtront ici afin que vous puissiez les payer.",
|
||||
"noTips": "L'employé n'a pas de pourboire"
|
||||
"noTips": "L'employé n'a pas de pourboire",
|
||||
"noEmployeeTitle": "Aucun Pourboire à Payer",
|
||||
"noEmployeeSubTitle": "Vous n'avez pas encore de pourboires à payer. Lorsqu'un employé reçoit un pourboire, il apparaîtra ici."
|
||||
},
|
||||
"items": {
|
||||
"addItemHalfModal": {
|
||||
@@ -1751,7 +1757,9 @@
|
||||
"itemSearchPlaceholder": "Nom de l'article...",
|
||||
"noItemsSearch": "Aucun article ne correspond à votre recherche.",
|
||||
"noItemsAdded": "Ajoutez un élément pour qu'il apparaisse ici.",
|
||||
"ctaBTN": "Ajouter un article"
|
||||
"ctaBTN": "Ajouter un article",
|
||||
"noPosTitle": "Aucun Article POS",
|
||||
"noPosSub": "Vous n'avez pas encore d'articles POS enregistrés. Une fois que vous en enregistrez un, il apparaîtra ici."
|
||||
}
|
||||
},
|
||||
"internalComponents": {
|
||||
|
||||
@@ -286,6 +286,7 @@
|
||||
}
|
||||
},
|
||||
"apps": {
|
||||
"noPurchaseTitle": "Nessun Acquisto",
|
||||
"appList": {
|
||||
"AI": "IA",
|
||||
"AIDescription": "Chatta con i più recenti modelli generativi di IA",
|
||||
@@ -755,7 +756,7 @@
|
||||
"historicalPurchasesPage": {
|
||||
"confirmRemoval": "Sei sicuro di voler rimuovere questa carta regalo?",
|
||||
"purchased": "Acquistata:",
|
||||
"noPurchases": "Non hai acquisti di carte regalo",
|
||||
"noPurchases": "Non hai ancora acquistato nessuna carta regalo. Una volta che lo fai, apparirà qui.",
|
||||
"customCopyMessage": "Email di assistenza copiata"
|
||||
}
|
||||
},
|
||||
@@ -799,7 +800,8 @@
|
||||
"refundedOrder": "L'ordine è stato rimborsato, i fondi torneranno automaticamente nel tuo portafoglio dopo 21 minuti.",
|
||||
"reclaimComplete": "Rety completato. Se non viene generato alcun codice, verrà automaticamente rimborsato dopo 21 minuti.",
|
||||
"noCode": "Nessun codice",
|
||||
"rateLimitError": "Troppe richieste. Puoi fare solo 5 richieste ogni 30 secondi. Per favore, aspettati prima di riprovare."
|
||||
"rateLimitError": "Troppe richieste. Puoi fare solo 5 richieste ogni 30 secondi. Per favore, aspettati prima di riprovare.",
|
||||
"noPurchasesTitle": "Non hai ancora inviato o ricevuto messaggi SMS. Una volta che lo fai, appariranno qui."
|
||||
},
|
||||
"receivePage": {
|
||||
"paymentMemo": "Negozio - Ricezione SMS",
|
||||
@@ -943,7 +945,9 @@
|
||||
"howStep2": "• Condividi il link del pool affinché altri possano trovarlo",
|
||||
"howStep3": "• I contributori inviano Bitcoin direttamente al pool",
|
||||
"howStep4": "• Chiudi il pool quando sei pronto a trasferire i fondi al tuo wallet"
|
||||
}
|
||||
},
|
||||
"noPoolsTitle": "Nessun Pool Creato",
|
||||
"noPoolsSubTitle": "Una volta creato un pool, apparirà qui come attivo o inattivo."
|
||||
},
|
||||
"manualInputPage": {
|
||||
"inputPlaceholder": "Inserisci o incolla un indirizzo o una fattura Liquid o Lightning"
|
||||
@@ -1729,7 +1733,9 @@
|
||||
"title": "Mance da pagare",
|
||||
"empNamePlaceholder": "Nome dipendente",
|
||||
"noEmployees": "Al momento non hai dipendenti con mance salvate. Una volta che un dipendente utilizza il punto vendita, le sue mance appariranno qui così potrai pagarle.",
|
||||
"noTips": "Il dipendente non ha mance"
|
||||
"noTips": "Il dipendente non ha mance",
|
||||
"noEmployeeTitle": "Nessuna Mancia da Pagare",
|
||||
"noEmployeeSubTitle": "Non hai ancora mance da pagare. Quando un dipendente riceve una mancia, apparirà qui."
|
||||
},
|
||||
"items": {
|
||||
"addItemHalfModal": {
|
||||
@@ -1751,7 +1757,9 @@
|
||||
"itemSearchPlaceholder": "Nome articolo...",
|
||||
"noItemsSearch": "Nessun articolo corrisponde alla tua ricerca.",
|
||||
"noItemsAdded": "Aggiungi un articolo perché appaia qui.",
|
||||
"ctaBTN": "Aggiungi Articolo"
|
||||
"ctaBTN": "Aggiungi Articolo",
|
||||
"noPosTitle": "Nessun Articolo POS",
|
||||
"noPosSub": "Non hai ancora articoli POS salvati. Una volta salvato uno, apparirà qui."
|
||||
}
|
||||
},
|
||||
"internalComponents": {
|
||||
|
||||
@@ -286,6 +286,7 @@
|
||||
}
|
||||
},
|
||||
"apps": {
|
||||
"noPurchaseTitle": "Nenhuma Compra",
|
||||
"appList": {
|
||||
"AI": "IA",
|
||||
"AIDescription": "Converse com os mais recentes modelos de IA generativa",
|
||||
@@ -755,7 +756,7 @@
|
||||
"historicalPurchasesPage": {
|
||||
"confirmRemoval": "Tem certeza de que deseja remover este cartão-presente?",
|
||||
"purchased": "Comprado:",
|
||||
"noPurchases": "Você não tem compras de cartão-presente",
|
||||
"noPurchases": "Você ainda não comprou nenhum cartão-presente. Quando comprar, ele aparecerá aqui.",
|
||||
"customCopyMessage": "E-mail de suporte copiado"
|
||||
}
|
||||
},
|
||||
@@ -799,7 +800,8 @@
|
||||
"refundedOrder": "A ordem foi reembolsada, os fundos retornarão automaticamente para sua carteira após 21 minutos",
|
||||
"reclaimComplete": "Reenvio concluído. Se nenhum código for gerado, você será reembolsado automaticamente após 21 minutos.",
|
||||
"noCode": "Sem código",
|
||||
"rateLimitError": "Excesso de solicitações. Você só pode fazer 5 solicitações a cada 30 segundos. Aguarde antes de tentar novamente."
|
||||
"rateLimitError": "Excesso de solicitações. Você só pode fazer 5 solicitações a cada 30 segundos. Aguarde antes de tentar novamente.",
|
||||
"noPurchasesTitle": "Você ainda não enviou nem recebeu nenhuma mensagem SMS. Quando fizer isso, elas aparecerão aqui."
|
||||
},
|
||||
"receivePage": {
|
||||
"paymentMemo": "Loja - Receber SMS",
|
||||
@@ -943,7 +945,9 @@
|
||||
"howStep2": "• Compartilhe o link da Vaquinha com outras pessoas",
|
||||
"howStep3": "• Os contribuidores enviam Bitcoin diretamente para a Vaquinha",
|
||||
"howStep4": "• Encerre a Vaquinha quando estiver pronto para mover os fundos para sua carteira"
|
||||
}
|
||||
},
|
||||
"noPoolsTitle": "Nenhum Pool Criado",
|
||||
"noPoolsSubTitle": "Quando você criar um pool, ele aparecerá aqui como ativo ou inativo."
|
||||
},
|
||||
"manualInputPage": {
|
||||
"inputPlaceholder": "Insira ou cole um endereço/fatura Liquid ou Lightning"
|
||||
@@ -1729,7 +1733,9 @@
|
||||
"title": "Gorjetas a pagar",
|
||||
"empNamePlaceholder": "Nome do funcionário",
|
||||
"noEmployees": "No momento, você não tem funcionários com gorjetas salvas. Assim que um funcionário usar o ponto de venda, suas gorjetas aparecerão aqui para que você possa pagá-las.",
|
||||
"noTips": "O funcionário não tem gorjetas"
|
||||
"noTips": "O funcionário não tem gorjetas",
|
||||
"noEmployeeTitle": "Nenhuma Gorjeta a Pagar",
|
||||
"noEmployeeSubTitle": "Você ainda não tem gorjetas a pagar. Quando um funcionário receber uma gorjeta, ela aparecerá aqui."
|
||||
},
|
||||
"items": {
|
||||
"addItemHalfModal": {
|
||||
@@ -1751,7 +1757,9 @@
|
||||
"itemSearchPlaceholder": "Nome do item...",
|
||||
"noItemsSearch": "Nenhum item corresponde à sua pesquisa.",
|
||||
"noItemsAdded": "Adicione um item para que ele apareça aqui.",
|
||||
"ctaBTN": "Adicionar item"
|
||||
"ctaBTN": "Adicionar item",
|
||||
"noPosTitle": "Nenhum Item POS",
|
||||
"noPosSub": "Você ainda não tem itens POS salvos. Quando salvar um, ele aparecerá aqui."
|
||||
}
|
||||
},
|
||||
"internalComponents": {
|
||||
|
||||
@@ -286,6 +286,7 @@
|
||||
}
|
||||
},
|
||||
"apps": {
|
||||
"noPurchaseTitle": "Нет покупок",
|
||||
"appList": {
|
||||
"AI": "ИИ",
|
||||
"AIDescription": "Чат с новейшими моделями ИИ",
|
||||
@@ -755,7 +756,7 @@
|
||||
"historicalPurchasesPage": {
|
||||
"confirmRemoval": "Вы уверены, что хотите удалить эту карту?",
|
||||
"purchased": "Куплено:",
|
||||
"noPurchases": "У вас нет купленных карт",
|
||||
"noPurchases": "Вы ещё не покупали подарочные карты. Как только купите, они появятся здесь.",
|
||||
"customCopyMessage": "Email поддержки скопирован"
|
||||
}
|
||||
},
|
||||
@@ -799,7 +800,8 @@
|
||||
"refundedOrder": "Заказ отменен, средства вернутся через 21 минуту",
|
||||
"reclaimComplete": "Повтор завершен. Если код не придет, возврат будет через 21 минуту.",
|
||||
"noCode": "Нет кода",
|
||||
"rateLimitError": "Слишком много запросов. Подождите немного."
|
||||
"rateLimitError": "Слишком много запросов. Подождите немного.",
|
||||
"noPurchasesTitle": "Вы ещё не отправляли и не получали SMS-сообщения. Как только это произойдет, они появятся здесь."
|
||||
},
|
||||
"receivePage": {
|
||||
"paymentMemo": "Магазин - СМС Прием",
|
||||
@@ -943,7 +945,9 @@
|
||||
"howStep2": "• Поделитесь ссылкой на пул, чтобы другие могли его найти",
|
||||
"howStep3": "• Участники отправляют биткоины напрямую в пул",
|
||||
"howStep4": "• Закройте пул, когда будете готовы перевести средства в свою wallet"
|
||||
}
|
||||
},
|
||||
"noPoolsTitle": "Нет созданных пулов",
|
||||
"noPoolsSubTitle": "Как только вы создадите пул, он появится здесь как активный или неактивный."
|
||||
},
|
||||
"manualInputPage": {
|
||||
"inputPlaceholder": "Адрес Liquid, Молнии или инвойс",
|
||||
@@ -1730,7 +1734,9 @@
|
||||
"title": "К выплате",
|
||||
"empNamePlaceholder": "Имя сотрудника",
|
||||
"noEmployees": "Нет сотрудников с чаевыми.",
|
||||
"noTips": "Нет чаевых"
|
||||
"noTips": "Нет чаевых",
|
||||
"noEmployeeTitle": "Нет чаевых к оплате",
|
||||
"noEmployeeSubTitle": "У вас пока нет чаевых к оплате. Когда сотрудник получит чаевые, они появятся здесь."
|
||||
},
|
||||
"items": {
|
||||
"addItemHalfModal": {
|
||||
@@ -1752,7 +1758,9 @@
|
||||
"itemSearchPlaceholder": "Поиск...",
|
||||
"noItemsSearch": "Ничего не найдено.",
|
||||
"noItemsAdded": "Добавьте товар, чтобы он появился здесь.",
|
||||
"ctaBTN": "Добавить товар"
|
||||
"ctaBTN": "Добавить товар",
|
||||
"noPosTitle": "Нет позиций POS",
|
||||
"noPosSub": "У вас пока нет сохранённых позиций POS. Как только вы сохраните одну, она появится здесь."
|
||||
}
|
||||
},
|
||||
"internalComponents": {
|
||||
|
||||
@@ -286,6 +286,7 @@
|
||||
}
|
||||
},
|
||||
"apps": {
|
||||
"noPurchaseTitle": "Inga Köp",
|
||||
"appList": {
|
||||
"AI": "AI",
|
||||
"AIDescription": "Chatta med de senaste generativa Ai-modellerna",
|
||||
@@ -755,7 +756,7 @@
|
||||
"historicalPurchasesPage": {
|
||||
"confirmRemoval": "Är du säker att du vill ta bort det här presentkortet?",
|
||||
"purchased": "Köpte:",
|
||||
"noPurchases": "Du har inga presentkortsköp",
|
||||
"noPurchases": "Du har inte köpt några presentkort ännu. När du gör det visas de här.",
|
||||
"customCopyMessage": "Support e-post kopierad"
|
||||
}
|
||||
},
|
||||
@@ -799,7 +800,8 @@
|
||||
"refundedOrder": "Ordern har återbetalats, pengarna kommer automatiskt tillbaka till din plånbok efter 21 minuter",
|
||||
"reclaimComplete": "Rety komplett. Om ingen kod genereras kommer du att få en automatisk återbetalning efter 21 minuter.",
|
||||
"noCode": "Ingen kod",
|
||||
"rateLimitError": "För många förfrågningar. Du kan bara göra 5 förfrågningar var 30:e sekund. Vänligen vänta innan du försöker igen."
|
||||
"rateLimitError": "För många förfrågningar. Du kan bara göra 5 förfrågningar var 30:e sekund. Vänligen vänta innan du försöker igen.",
|
||||
"noPurchasesTitle": "Du har ännu inte skickat eller tagit emot några SMS-meddelanden. När du gör det visas de här."
|
||||
},
|
||||
"receivePage": {
|
||||
"paymentMemo": "Butik - SMS-mottagning",
|
||||
@@ -943,7 +945,9 @@
|
||||
"howStep2": "• Dela poolens länk så att andra kan hitta den",
|
||||
"howStep3": "• Bidragsgivare skickar Bitcoin direkt till poolen",
|
||||
"howStep4": "• Stäng poolen när du är redo att flytta medlen till din wallet"
|
||||
}
|
||||
},
|
||||
"noPoolsTitle": "Inga skapade pooler",
|
||||
"noPoolsSubTitle": "När du skapar en pool visas den här som aktiv eller inaktiv."
|
||||
},
|
||||
"manualInputPage": {
|
||||
"inputPlaceholder": "Ange eller klistra in en Liquid- eller Lightning-adress/faktura"
|
||||
@@ -1729,7 +1733,9 @@
|
||||
"title": "Tips för att betala",
|
||||
"empNamePlaceholder": "Anställdas namn",
|
||||
"noEmployees": "Du har för närvarande inga anställda med sparade dricks. När en anställd använder kassasystemet kommer deras dricks att visas här så att du kan betala ut dem.",
|
||||
"noTips": "Medarbetaren har inga tips"
|
||||
"noTips": "Medarbetaren har inga tips",
|
||||
"noEmployeeTitle": "Inga dricks att betala",
|
||||
"noEmployeeSubTitle": "Du har inga dricks att betala ännu. När en anställd får ett dricks visas det här."
|
||||
},
|
||||
"items": {
|
||||
"addItemHalfModal": {
|
||||
@@ -1751,7 +1757,9 @@
|
||||
"itemSearchPlaceholder": "Artikelns namn...",
|
||||
"noItemsSearch": "Inga objekt motsvarar din sökning.",
|
||||
"noItemsAdded": "Lägg till ett objekt för att det ska visas här.",
|
||||
"ctaBTN": "Lägg till artikel"
|
||||
"ctaBTN": "Lägg till artikel",
|
||||
"noPosTitle": "Inga POS-artiklar",
|
||||
"noPosSub": "Du har inga sparade POS-artiklar ännu. När du sparar en visas den här."
|
||||
}
|
||||
},
|
||||
"internalComponents": {
|
||||
|
||||
Reference in New Issue
Block a user