diff --git a/apps/wallet-mobile/src/features/Discover/common/BrowserProvider.tsx b/apps/wallet-mobile/src/features/Discover/common/BrowserProvider.tsx index db99ce4e7f..2129d35294 100644 --- a/apps/wallet-mobile/src/features/Discover/common/BrowserProvider.tsx +++ b/apps/wallet-mobile/src/features/Discover/common/BrowserProvider.tsx @@ -3,6 +3,7 @@ import {produce} from 'immer' import * as React from 'react' import {useWalletManager} from '../../WalletManager/context/WalletManagerProvider' +import {DAppItem} from './helpers' const defaultActions: BrowserActions = { addTab: () => invalid('missing init'), @@ -10,12 +11,14 @@ const defaultActions: BrowserActions = { updateTab: () => invalid('missing init'), removeTab: () => invalid('missing init'), openTabs: () => invalid('missing init'), + updateDApp: () => invalid('missing init'), } as const const defaultState: BrowserState = { tabs: [], tabActiveIndex: -1, tabsOpen: false, + dApp: null, } as const export type TabItem = { @@ -27,6 +30,7 @@ type BrowserState = { tabs: TabItem[] tabActiveIndex: number tabsOpen: boolean + dApp: DAppItem | null } const BrowserContext = React.createContext({ @@ -83,6 +87,9 @@ export const BrowserProvider = ({ openTabs: (isOpen) => { dispatch({type: BrowserActionType.OpenTabs, isOpen}) }, + updateDApp: (dApp) => { + dispatch({type: BrowserActionType.UpdateDApp, dApp}) + }, }).current const context = React.useMemo( @@ -103,6 +110,7 @@ enum BrowserActionType { UpdateTab = 'updateTab', RemoveTab = 'removeTab', OpenTabs = 'openTabs', + UpdateDApp = 'updateDApp', } type BrowserContextAction = @@ -133,6 +141,10 @@ type BrowserContextAction = type: BrowserActionType.OpenTabs isOpen: boolean } + | { + type: BrowserActionType.UpdateDApp + dApp: DAppItem | null + } type BrowserActions = Readonly<{ addTab: (url: string, id: string) => void @@ -140,6 +152,7 @@ type BrowserActions = Readonly<{ updateTab: (tabIndex: number, tabInfo: Partial>) => void removeTab: (index: number) => void openTabs: (isOpen: boolean) => void + updateDApp: (dApp: DAppItem | null) => void }> const browserReducer = (state: BrowserState, action: BrowserContextAction): BrowserState => { @@ -171,6 +184,10 @@ const browserReducer = (state: BrowserState, action: BrowserContextAction): Brow case BrowserActionType.OpenTabs: draft.tabsOpen = action.isOpen break + + case BrowserActionType.UpdateDApp: + draft.dApp = action.dApp + break } }) } diff --git a/apps/wallet-mobile/src/features/Discover/useCases/SelectDappFromList/DAppListItem/DAppListItem.tsx b/apps/wallet-mobile/src/features/Discover/useCases/SelectDappFromList/DAppListItem/DAppListItem.tsx index bc2ab51200..bcf1a87fd4 100644 --- a/apps/wallet-mobile/src/features/Discover/useCases/SelectDappFromList/DAppListItem/DAppListItem.tsx +++ b/apps/wallet-mobile/src/features/Discover/useCases/SelectDappFromList/DAppListItem/DAppListItem.tsx @@ -39,7 +39,7 @@ type Props = { } export const DAppListItem = ({dApp, connected, onPress}: Props) => { const {styles, colors} = useStyles() - const {addTab, setTabActive, tabs} = useBrowser() + const {addTab, setTabActive, tabs, updateDApp} = useBrowser() const navigateTo = useNavigateTo() const {openModal, closeModal} = useModal() const insets = useSafeAreaInsets() @@ -68,6 +68,7 @@ export const DAppListItem = ({dApp, connected, onPress}: Props) => { const id = uuid.v4() addTab(dApp.uri, id) setTabActive(tabs.length) + updateDApp(dApp) navigateTo.browseDapp() } diff --git a/apps/wallet-mobile/src/features/Discover/useDappConnectorManager.ts b/apps/wallet-mobile/src/features/Discover/useDappConnectorManager.tsx similarity index 94% rename from apps/wallet-mobile/src/features/Discover/useDappConnectorManager.ts rename to apps/wallet-mobile/src/features/Discover/useDappConnectorManager.tsx index e6ef3a412c..029a4cfa62 100644 --- a/apps/wallet-mobile/src/features/Discover/useDappConnectorManager.ts +++ b/apps/wallet-mobile/src/features/Discover/useDappConnectorManager.tsx @@ -9,7 +9,9 @@ import {logger} from '../../kernel/logger/logger' import {useWalletNavigation} from '../../kernel/navigation' import {cip30LedgerExtensionMaker} from '../../yoroi-wallets/cardano/cip30/cip30-ledger' import {useReviewTx} from '../ReviewTx/common/ReviewTxProvider' +import {CreatedByInfoItem} from '../ReviewTx/useCases/ReviewTxScreen/ReviewTx/Overview/OverviewTab' import {useSelectedWallet} from '../WalletManager/common/hooks/useSelectedWallet' +import {useBrowser} from './common/BrowserProvider' import {useOpenConfirmConnectionModal} from './common/ConfirmConnectionModal' import {useConfirmHWConnectionModal} from './common/ConfirmHWConnectionModal' import {isUserRejectedError, userRejectedError} from './common/errors' @@ -26,6 +28,7 @@ export const useDappConnectorManager = () => { const {wallet, meta} = useSelectedWallet() const {navigateToTxReview} = useWalletNavigation() const {cborChanged} = useReviewTx() + const {dApp} = useBrowser() const confirmConnection = useConfirmConnection() @@ -46,6 +49,9 @@ export const useDappConnectorManager = () => { let shouldResolve = true cborChanged(cbor) navigateToTxReview({ + createdBy: dApp?.uri != null && dApp?.logo != null && ( + + ), onConfirm: async () => { if (!shouldResolve) return shouldResolve = false @@ -68,6 +74,9 @@ export const useDappConnectorManager = () => { let shouldResolve = true cborChanged(cbor) navigateToTxReview({ + createdBy: dApp?.uri != null && dApp?.logo != null && ( + + ), onConfirm: () => { if (!shouldResolve) return shouldResolve = false @@ -102,6 +111,8 @@ export const useDappConnectorManager = () => { signDataWithHW, cborChanged, navigateToTxReview, + dApp?.uri, + dApp?.logo, promptRootKey, navigateTo, signTxWithHW, diff --git a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useStrings.tsx b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useStrings.tsx index 18e3c41802..ef43a82cf4 100644 --- a/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useStrings.tsx +++ b/apps/wallet-mobile/src/features/ReviewTx/common/hooks/useStrings.tsx @@ -72,6 +72,7 @@ export const useStrings = () => { receiveLabel: intl.formatMessage(messages.receiveLabel), operationsLabel: intl.formatMessage(messages.operationsLabel), policyIdLabel: intl.formatMessage(messages.policyIdLabel), + createdBy: intl.formatMessage(messages.createdBy), } } @@ -337,4 +338,8 @@ const messages = defineMessages({ id: 'txReview.policyIdLabel', defaultMessage: '!!!Policy ID', }, + createdBy: { + id: 'txReview.createdBy', + defaultMessage: '!!!Created by', + }, }) diff --git a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTx/Overview/OverviewTab.tsx b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTx/Overview/OverviewTab.tsx index 61f4a61c2a..8ae1b027be 100644 --- a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTx/Overview/OverviewTab.tsx +++ b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTx/Overview/OverviewTab.tsx @@ -2,8 +2,9 @@ import {CredKind} from '@emurgo/cross-csl-core' import {Blockies} from '@yoroi/identicon' import {useTheme} from '@yoroi/theme' import {Balance} from '@yoroi/types' +import {Image} from 'expo-image' import * as React from 'react' -import {StyleSheet, Text, TouchableOpacity, useWindowDimensions, View} from 'react-native' +import {Linking, StyleSheet, Text, TouchableOpacity, useWindowDimensions, View} from 'react-native' import {Divider} from '../../../../../../components/Divider/Divider' import {Icon} from '../../../../../../components/Icon' @@ -27,11 +28,13 @@ export const OverviewTab = ({ extraOperations, receiverCustomTitle, details, + createdBy, }: { tx: FormattedTx extraOperations?: Array receiverCustomTitle?: React.ReactNode details?: {title: string; component: React.ReactNode} + createdBy: React.ReactNode | undefined }) => { const {styles} = useStyles() const operations = useOperations(tx.certificates) @@ -43,7 +46,7 @@ export const OverviewTab = ({ - + @@ -68,7 +71,7 @@ export const OverviewTab = ({ ) } -const WalletInfoSection = ({tx}: {tx: FormattedTx}) => { +const WalletInfoSection = ({tx, createdBy}: {tx: FormattedTx; createdBy: React.ReactNode}) => { const {styles} = useStyles() const strings = useStrings() const {wallet, meta} = useSelectedWallet() @@ -104,6 +107,14 @@ const WalletInfoSection = ({tx}: {tx: FormattedTx}) => { + {createdBy != null && ( + <> + {createdBy} + + + + )} + ) @@ -394,6 +405,27 @@ const Details = ({details}: {details?: {title: string; component: React.ReactNod ) } +export const CreatedByInfoItem = ({logo, url}: {logo?: string; url: string}) => { + const {styles} = useStyles() + const strings = useStrings() + + return ( + + {strings.createdBy} + + + {logo != null && } + + + + Linking.openURL(url)}> + {url.replace(/^https?:\/\//, '').replace(/\/+$/, '')} + + + + ) +} + const useStyles = () => { const {atoms, color} = useTheme() const styles = StyleSheet.create({ @@ -475,6 +507,14 @@ const useStyles = () => { ...atoms.body_2_md_medium, color: color.text_primary_medium, }, + link: { + color: color.text_primary_medium, + ...atoms.body_2_md_medium, + }, + logo: { + width: 24, + height: 24, + }, }) const colors = { diff --git a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTx/ReviewTx.tsx b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTx/ReviewTx.tsx index af9473f4ca..c2852aaf4f 100644 --- a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTx/ReviewTx.tsx +++ b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTx/ReviewTx.tsx @@ -32,6 +32,7 @@ export const ReviewTx = ({ operations, details, receiverCustomTitle, + createdBy, onConfirm, }: { formattedTx: FormattedTx @@ -39,6 +40,7 @@ export const ReviewTx = ({ operations: Array | undefined details: {title: string; component: React.ReactNode} | undefined receiverCustomTitle: React.ReactNode | undefined + createdBy: React.ReactNode | undefined onConfirm: () => void }) => { const {styles} = useStyles() @@ -67,6 +69,7 @@ export const ReviewTx = ({ tx={formattedTx} extraOperations={operations} details={details} + createdBy={createdBy} receiverCustomTitle={receiverCustomTitle} /> diff --git a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTxScreen.tsx b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTxScreen.tsx index c64e5b16bd..e0a903040f 100644 --- a/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTxScreen.tsx +++ b/apps/wallet-mobile/src/features/ReviewTx/useCases/ReviewTxScreen/ReviewTxScreen.tsx @@ -49,6 +49,7 @@ export const ReviewTxScreen = () => { operations={params?.operations} details={params?.details} receiverCustomTitle={params?.receiverCustomTitle} + createdBy={params?.createdBy} onConfirm={handleOnConfirm} /> ) diff --git a/apps/wallet-mobile/src/kernel/i18n/locales/en-US.json b/apps/wallet-mobile/src/kernel/i18n/locales/en-US.json index ad6e223a3b..3b43ed7783 100644 --- a/apps/wallet-mobile/src/kernel/i18n/locales/en-US.json +++ b/apps/wallet-mobile/src/kernel/i18n/locales/en-US.json @@ -1283,5 +1283,6 @@ "txReview.receiveLabel": "Receive", "txReview.operationsLabel": "Operations", "txReview.policyIdLabel": "Policy ID", - "txReview.tabLabel.referenceInputs": "Reference inputs" + "txReview.tabLabel.referenceInputs": "Reference inputs", + "txReview.tabLabel.createdBy": "Created by" } diff --git a/apps/wallet-mobile/src/kernel/navigation.tsx b/apps/wallet-mobile/src/kernel/navigation.tsx index 41c0b8b447..cdce47ab8b 100644 --- a/apps/wallet-mobile/src/kernel/navigation.tsx +++ b/apps/wallet-mobile/src/kernel/navigation.tsx @@ -278,6 +278,7 @@ export type ReviewTxRoutes = { operations?: Array receiverCustomTitle?: React.ReactNode details?: {title: string; component: React.ReactNode} + createdBy?: React.ReactNode onConfirm?: () => void onCancel?: () => void onSuccess?: (signedTx: YoroiSignedTx) => void diff --git a/apps/wallet-mobile/translations/messages/src/features/ReviewTx/common/hooks/useStrings.json b/apps/wallet-mobile/translations/messages/src/features/ReviewTx/common/hooks/useStrings.json index 4255f91e0d..78981973fb 100644 --- a/apps/wallet-mobile/translations/messages/src/features/ReviewTx/common/hooks/useStrings.json +++ b/apps/wallet-mobile/translations/messages/src/features/ReviewTx/common/hooks/useStrings.json @@ -4,14 +4,14 @@ "defaultMessage": "!!!Confirm", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 79, + "line": 80, "column": 11, - "index": 4547 + "index": 4602 }, "end": { - "line": 82, + "line": 83, "column": 3, - "index": 4614 + "index": 4669 } }, { @@ -19,14 +19,14 @@ "defaultMessage": "!!!UTxOs", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 83, + "line": 84, "column": 9, - "index": 4625 + "index": 4680 }, "end": { - "line": 86, + "line": 87, "column": 3, - "index": 4688 + "index": 4743 } }, { @@ -34,14 +34,14 @@ "defaultMessage": "!!!UTxOs", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 87, + "line": 88, "column": 12, - "index": 4702 + "index": 4757 }, "end": { - "line": 90, + "line": 91, "column": 3, - "index": 4774 + "index": 4829 } }, { @@ -49,14 +49,14 @@ "defaultMessage": "!!!Overview", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 91, + "line": 92, "column": 15, - "index": 4791 + "index": 4846 }, "end": { - "line": 94, + "line": 95, "column": 3, - "index": 4869 + "index": 4924 } }, { @@ -64,14 +64,14 @@ "defaultMessage": "!!!Mint", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 95, + "line": 96, "column": 11, - "index": 4882 + "index": 4937 }, "end": { - "line": 98, + "line": 99, "column": 3, - "index": 4952 + "index": 5007 } }, { @@ -79,14 +79,14 @@ "defaultMessage": "!!!Reference inputs", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 99, + "line": 100, "column": 22, - "index": 4976 + "index": 5031 }, "end": { - "line": 102, + "line": 103, "column": 3, - "index": 5069 + "index": 5124 } }, { @@ -94,14 +94,14 @@ "defaultMessage": "!!!Metadata", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 103, + "line": 104, "column": 15, - "index": 5086 + "index": 5141 }, "end": { - "line": 106, + "line": 107, "column": 3, - "index": 5167 + "index": 5222 } }, { @@ -109,14 +109,14 @@ "defaultMessage": "!!!Metadata hash", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 107, + "line": 108, "column": 16, - "index": 5185 + "index": 5240 }, "end": { - "line": 110, + "line": 111, "column": 3, - "index": 5272 + "index": 5327 } }, { @@ -124,14 +124,14 @@ "defaultMessage": "!!!Metadata", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 111, + "line": 112, "column": 21, - "index": 5295 + "index": 5350 }, "end": { - "line": 114, + "line": 115, "column": 3, - "index": 5382 + "index": 5437 } }, { @@ -139,14 +139,14 @@ "defaultMessage": "!!!Wallet", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 115, + "line": 116, "column": 15, - "index": 5399 + "index": 5454 }, "end": { - "line": 118, + "line": 119, "column": 3, - "index": 5473 + "index": 5528 } }, { @@ -154,14 +154,14 @@ "defaultMessage": "!!!Fee", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 119, + "line": 120, "column": 12, - "index": 5487 + "index": 5542 }, "end": { - "line": 122, + "line": 123, "column": 3, - "index": 5546 + "index": 5601 } }, { @@ -169,14 +169,14 @@ "defaultMessage": "!!!Your Wallet", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 123, + "line": 124, "column": 17, - "index": 5565 + "index": 5620 }, "end": { - "line": 126, + "line": 127, "column": 3, - "index": 5651 + "index": 5706 } }, { @@ -184,14 +184,14 @@ "defaultMessage": "!!!Send", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 127, + "line": 128, "column": 13, - "index": 5666 + "index": 5721 }, "end": { - "line": 130, + "line": 131, "column": 3, - "index": 5741 + "index": 5796 } }, { @@ -199,14 +199,14 @@ "defaultMessage": "!!!To", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 131, + "line": 132, "column": 18, - "index": 5761 + "index": 5816 }, "end": { - "line": 134, + "line": 135, "column": 3, - "index": 5839 + "index": 5894 } }, { @@ -214,14 +214,14 @@ "defaultMessage": "!!!To script", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 135, + "line": 136, "column": 24, - "index": 5865 + "index": 5920 }, "end": { - "line": 138, + "line": 139, "column": 3, - "index": 5956 + "index": 6011 } }, { @@ -229,14 +229,14 @@ "defaultMessage": "!!!Inputs", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 139, + "line": 140, "column": 20, - "index": 5978 + "index": 6033 }, "end": { - "line": 142, + "line": 143, "column": 3, - "index": 6059 + "index": 6114 } }, { @@ -244,14 +244,14 @@ "defaultMessage": "!!!Outputs", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 143, + "line": 144, "column": 21, - "index": 6082 + "index": 6137 }, "end": { - "line": 146, + "line": 147, "column": 3, - "index": 6165 + "index": 6220 } }, { @@ -259,14 +259,14 @@ "defaultMessage": "!!!Your address", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 147, + "line": 148, "column": 25, - "index": 6192 + "index": 6247 }, "end": { - "line": 150, + "line": 151, "column": 3, - "index": 6284 + "index": 6339 } }, { @@ -274,14 +274,14 @@ "defaultMessage": "!!!Foreign address", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 151, + "line": 152, "column": 28, - "index": 6314 + "index": 6369 }, "end": { - "line": 154, + "line": 155, "column": 3, - "index": 6412 + "index": 6467 } }, { @@ -289,14 +289,14 @@ "defaultMessage": "!!!Overview", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 155, + "line": 156, "column": 12, - "index": 6426 + "index": 6481 }, "end": { - "line": 158, + "line": 159, "column": 3, - "index": 6517 + "index": 6572 } }, { @@ -304,14 +304,14 @@ "defaultMessage": "!!!JSON", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 159, + "line": 160, "column": 8, - "index": 6527 + "index": 6582 }, "end": { - "line": 162, + "line": 163, "column": 3, - "index": 6610 + "index": 6665 } }, { @@ -319,14 +319,14 @@ "defaultMessage": "!!!Metadata", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 163, + "line": 164, "column": 12, - "index": 6624 + "index": 6679 }, "end": { - "line": 166, + "line": 167, "column": 3, - "index": 6714 + "index": 6769 } }, { @@ -334,14 +334,14 @@ "defaultMessage": "!!!Policy ID", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 167, + "line": 168, "column": 12, - "index": 6728 + "index": 6783 }, "end": { - "line": 170, + "line": 171, "column": 3, - "index": 6817 + "index": 6872 } }, { @@ -349,14 +349,14 @@ "defaultMessage": "!!!Pool ID", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 171, + "line": 172, "column": 10, - "index": 6829 + "index": 6884 }, "end": { - "line": 174, + "line": 175, "column": 3, - "index": 6913 + "index": 6968 } }, { @@ -364,14 +364,14 @@ "defaultMessage": "!!!Hash", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 175, + "line": 176, "column": 12, - "index": 6927 + "index": 6982 }, "end": { - "line": 178, + "line": 179, "column": 3, - "index": 7010 + "index": 7065 } }, { @@ -379,14 +379,14 @@ "defaultMessage": "!!!Pool size", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 179, + "line": 180, "column": 12, - "index": 7024 + "index": 7079 }, "end": { - "line": 182, + "line": 183, "column": 3, - "index": 7112 + "index": 7167 } }, { @@ -394,14 +394,14 @@ "defaultMessage": "!!!ROA 30d", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 183, + "line": 184, "column": 11, - "index": 7125 + "index": 7180 }, "end": { - "line": 186, + "line": 187, "column": 3, - "index": 7210 + "index": 7265 } }, { @@ -409,14 +409,14 @@ "defaultMessage": "!!!Share", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 187, + "line": 188, "column": 13, - "index": 7225 + "index": 7280 }, "end": { - "line": 190, + "line": 191, "column": 3, - "index": 7310 + "index": 7365 } }, { @@ -424,14 +424,14 @@ "defaultMessage": "!!!Saturation", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 191, + "line": 192, "column": 18, - "index": 7330 + "index": 7385 }, "end": { - "line": 194, + "line": 195, "column": 3, - "index": 7425 + "index": 7480 } }, { @@ -439,14 +439,14 @@ "defaultMessage": "!!!Tax fix", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 195, + "line": 196, "column": 14, - "index": 7441 + "index": 7496 }, "end": { - "line": 198, + "line": 199, "column": 3, - "index": 7525 + "index": 7580 } }, { @@ -454,14 +454,14 @@ "defaultMessage": "!!!Tax ratio", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 199, + "line": 200, "column": 16, - "index": 7543 + "index": 7598 }, "end": { - "line": 202, + "line": 203, "column": 3, - "index": 7631 + "index": 7686 } }, { @@ -469,14 +469,14 @@ "defaultMessage": "!!!Pledge", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 203, + "line": 204, "column": 14, - "index": 7647 + "index": 7702 }, "end": { - "line": 206, + "line": 207, "column": 3, - "index": 7730 + "index": 7785 } }, { @@ -484,14 +484,14 @@ "defaultMessage": "!!!Fingerprint", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 207, + "line": 208, "column": 15, - "index": 7747 + "index": 7802 }, "end": { - "line": 210, + "line": 211, "column": 3, - "index": 7841 + "index": 7896 } }, { @@ -499,14 +499,14 @@ "defaultMessage": "!!!Name", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 211, + "line": 212, "column": 8, - "index": 7851 + "index": 7906 }, "end": { - "line": 214, + "line": 215, "column": 3, - "index": 7943 + "index": 7998 } }, { @@ -514,14 +514,14 @@ "defaultMessage": "!!!Token Supply", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 215, + "line": 216, "column": 15, - "index": 7960 + "index": 8015 }, "end": { - "line": 218, + "line": 219, "column": 3, - "index": 8067 + "index": 8122 } }, { @@ -529,14 +529,14 @@ "defaultMessage": "!!!Symbol", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 219, + "line": 220, "column": 10, - "index": 8079 + "index": 8134 }, "end": { - "line": 222, + "line": 223, "column": 3, - "index": 8175 + "index": 8230 } }, { @@ -544,14 +544,14 @@ "defaultMessage": "!!!Description", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 223, + "line": 224, "column": 15, - "index": 8192 + "index": 8247 }, "end": { - "line": 226, + "line": 227, "column": 3, - "index": 8298 + "index": 8353 } }, { @@ -559,14 +559,14 @@ "defaultMessage": "!!!Details on", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 227, + "line": 228, "column": 11, - "index": 8311 + "index": 8366 }, "end": { - "line": 230, + "line": 231, "column": 3, - "index": 8412 + "index": 8467 } }, { @@ -574,14 +574,14 @@ "defaultMessage": "!!!Asset Details", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 231, + "line": 232, "column": 21, - "index": 8435 + "index": 8490 }, "end": { - "line": 234, + "line": 235, "column": 3, - "index": 8519 + "index": 8574 } }, { @@ -589,14 +589,14 @@ "defaultMessage": "!!!Wallet balance", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 235, + "line": 236, "column": 22, - "index": 8543 + "index": 8598 }, "end": { - "line": 238, + "line": 239, "column": 3, - "index": 8629 + "index": 8684 } }, { @@ -604,14 +604,14 @@ "defaultMessage": "!!!Tokens", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 239, + "line": 240, "column": 28, - "index": 8659 + "index": 8714 }, "end": { - "line": 242, + "line": 243, "column": 3, - "index": 8743 + "index": 8798 } }, { @@ -619,14 +619,14 @@ "defaultMessage": "!!!NFTs", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 243, + "line": 244, "column": 26, - "index": 8771 + "index": 8826 }, "end": { - "line": 246, + "line": 247, "column": 3, - "index": 8851 + "index": 8906 } }, { @@ -634,14 +634,14 @@ "defaultMessage": "!!!Pool Details", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 247, + "line": 248, "column": 20, - "index": 8873 + "index": 8928 }, "end": { - "line": 250, + "line": 251, "column": 3, - "index": 8955 + "index": 9010 } }, { @@ -649,14 +649,14 @@ "defaultMessage": "!!!Register staking key deposit", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 251, + "line": 252, "column": 22, - "index": 8979 + "index": 9034 }, "end": { - "line": 254, + "line": 255, "column": 3, - "index": 9089 + "index": 9144 } }, { @@ -664,14 +664,14 @@ "defaultMessage": "!!!Deregister staking key", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 255, + "line": 256, "column": 24, - "index": 9115 + "index": 9170 }, "end": { - "line": 258, + "line": 259, "column": 3, - "index": 9221 + "index": 9276 } }, { @@ -679,14 +679,14 @@ "defaultMessage": "!!!Staking", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 259, + "line": 260, "column": 26, - "index": 9249 + "index": 9304 }, "end": { - "line": 262, + "line": 263, "column": 3, - "index": 9343 + "index": 9398 } }, { @@ -694,14 +694,14 @@ "defaultMessage": "!!!Rewards withdrawal", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 263, + "line": 264, "column": 25, - "index": 9370 + "index": 9425 }, "end": { - "line": 266, + "line": 267, "column": 3, - "index": 9474 + "index": 9529 } }, { @@ -709,14 +709,14 @@ "defaultMessage": "!!!Select abstain", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 267, + "line": 268, "column": 17, - "index": 9493 + "index": 9548 }, "end": { - "line": 270, + "line": 271, "column": 3, - "index": 9584 + "index": 9639 } }, { @@ -724,14 +724,14 @@ "defaultMessage": "!!!Select no confidence", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 271, + "line": 272, "column": 22, - "index": 9608 + "index": 9663 }, "end": { - "line": 274, + "line": 275, "column": 3, - "index": 9710 + "index": 9765 } }, { @@ -739,14 +739,14 @@ "defaultMessage": "!!!Delegate voting to", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 275, + "line": 276, "column": 24, - "index": 9736 + "index": 9791 }, "end": { - "line": 278, + "line": 279, "column": 3, - "index": 9838 + "index": 9893 } }, { @@ -754,14 +754,14 @@ "defaultMessage": "!!!Stake entire wallet balance to", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 279, + "line": 280, "column": 17, - "index": 9857 + "index": 9912 }, "end": { - "line": 282, + "line": 283, "column": 3, - "index": 9964 + "index": 10019 } }, { @@ -769,14 +769,14 @@ "defaultMessage": "!!!Transaction submitted", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 283, + "line": 284, "column": 20, - "index": 9986 + "index": 10041 }, "end": { - "line": 286, + "line": 287, "column": 3, - "index": 10076 + "index": 10131 } }, { @@ -784,14 +784,14 @@ "defaultMessage": "!!!Check this transaction in the list of wallet transactions", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 287, + "line": 288, "column": 19, - "index": 10097 + "index": 10152 }, "end": { - "line": 290, + "line": 291, "column": 3, - "index": 10222 + "index": 10277 } }, { @@ -799,14 +799,14 @@ "defaultMessage": "!!!Go to transactions", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 291, + "line": 292, "column": 21, - "index": 10245 + "index": 10300 }, "end": { - "line": 294, + "line": 295, "column": 3, - "index": 10333 + "index": 10388 } }, { @@ -814,14 +814,14 @@ "defaultMessage": "!!!Transaction failed", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 295, + "line": 296, "column": 17, - "index": 10352 + "index": 10407 }, "end": { - "line": 298, + "line": 299, "column": 3, - "index": 10436 + "index": 10491 } }, { @@ -829,14 +829,14 @@ "defaultMessage": "!!!Your transaction has not been processed properly due to technical issues", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 299, + "line": 300, "column": 16, - "index": 10454 + "index": 10509 }, "end": { - "line": 302, + "line": 303, "column": 3, - "index": 10591 + "index": 10646 } }, { @@ -844,14 +844,14 @@ "defaultMessage": "!!!Go to transactions", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 303, + "line": 304, "column": 18, - "index": 10611 + "index": 10666 }, "end": { - "line": 306, + "line": 307, "column": 3, - "index": 10696 + "index": 10751 } }, { @@ -859,14 +859,14 @@ "defaultMessage": "!!!Something unexpected happened", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 307, + "line": 308, "column": 29, - "index": 10727 + "index": 10782 }, "end": { - "line": 310, + "line": 311, "column": 3, - "index": 10834 + "index": 10889 } }, { @@ -874,14 +874,14 @@ "defaultMessage": "!!!Please go back and try again. If this keep happening, contact our support team.", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 311, + "line": 312, "column": 28, - "index": 10864 + "index": 10919 }, "end": { - "line": 314, + "line": 315, "column": 3, - "index": 11020 + "index": 11075 } }, { @@ -889,14 +889,14 @@ "defaultMessage": "!!!Go to transactions", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 315, + "line": 316, "column": 30, - "index": 11052 + "index": 11107 }, "end": { - "line": 318, + "line": 319, "column": 3, - "index": 11149 + "index": 11204 } }, { @@ -904,14 +904,14 @@ "defaultMessage": "!!!Other parties", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 319, + "line": 320, "column": 36, - "index": 11187 + "index": 11242 }, "end": { - "line": 322, + "line": 323, "column": 3, - "index": 11294 + "index": 11349 } }, { @@ -919,14 +919,14 @@ "defaultMessage": "!!!Here are displayed other parties that are involved into this transaction. They don't affect your wallet balance", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 323, + "line": 324, "column": 37, - "index": 11333 + "index": 11388 }, "end": { - "line": 327, + "line": 328, "column": 3, - "index": 11545 + "index": 11600 } }, { @@ -934,14 +934,14 @@ "defaultMessage": "!!!Receive", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 328, + "line": 329, "column": 16, - "index": 11563 + "index": 11618 }, "end": { - "line": 331, + "line": 332, "column": 3, - "index": 11635 + "index": 11690 } }, { @@ -949,14 +949,14 @@ "defaultMessage": "!!!Operations", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 332, + "line": 333, "column": 19, - "index": 11656 + "index": 11711 }, "end": { - "line": 335, + "line": 336, "column": 3, - "index": 11734 + "index": 11789 } }, { @@ -964,14 +964,29 @@ "defaultMessage": "!!!Policy ID", "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", "start": { - "line": 336, + "line": 337, "column": 17, - "index": 11753 + "index": 11808 + }, + "end": { + "line": 340, + "column": 3, + "index": 11883 + } + }, + { + "id": "txReview.createdBy", + "defaultMessage": "!!!Created by", + "file": "src/features/ReviewTx/common/hooks/useStrings.tsx", + "start": { + "line": 341, + "column": 13, + "index": 11898 }, "end": { - "line": 339, + "line": 344, "column": 3, - "index": 11828 + "index": 11970 } } ] \ No newline at end of file