Skip to content

Commit

Permalink
OK-9286 OK-9149 OK-9126 OK-9099 improve scanqrcode (#825)
Browse files Browse the repository at this point in the history
* refactor: gotoScanQrcode

* feat: add incomingurl for discover

* feat: add haptics for image pick button

* chore: update svg scan area

* chore: update deps

* fix: lint error

* feat: preview send page (wip)

* feat: pass address to send

* style: previewsend

* feat: pass address to send

* fix: lint error

* fix: lint error
  • Loading branch information
sunnylqm authored Jun 6, 2022
1 parent dfdfcca commit 4d80d44
Show file tree
Hide file tree
Showing 24 changed files with 535 additions and 475 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@
"lint": "yarn workspaces run lint",
"remote-console": "yarn workspace @onekeyhq/remote-console dev",
"reset-cache": "node development/resetCache.js",
"native": "yarn workspace @onekeyhq/app start --reset-cache",
"native": "yarn workspace @onekeyhq/app start",
"ios": "yarn copy:inject && yarn workspace @onekeyhq/app ios",
"ios:device": "yarn copy:inject && yarn workspace @onekeyhq/app ios:device",
"ios-install": "cd ./packages/app/ios && pod install && cd -",
"ios-xcode": "open ./packages/app/ios/OneKeyWallet.xcworkspace",
"android": "yarn copy:inject && yarn workspace @onekeyhq/app android",
Expand Down Expand Up @@ -78,7 +79,6 @@
"eslint-config-prettier": "^8.3.0",
"eslint-config-react-app": "^6.0.0",
"eslint-config-wesbos": "2.1.0",
"eslint-plugin-flowtype": "^6.1.1",
"eslint-plugin-html": "^6.1.2",
"eslint-plugin-import": "^2.24.2",
"eslint-plugin-jest": "^25.3.0",
Expand Down
26 changes: 15 additions & 11 deletions packages/app/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -477,15 +477,19 @@ PODS:
- React-Core
- react-native-netinfo (8.2.0):
- React-Core
- react-native-pager-view (5.4.9):
- react-native-pager-view (5.4.15):
- React-Core
- react-native-randombytes (3.6.1):
- React-Core
- react-native-restart (0.0.24):
- React-Core
- react-native-safe-area-context (3.3.2):
- React-Core
- react-native-webview (11.15.0):
- react-native-safe-area-context (4.2.4):
- RCT-Folly
- RCTRequired
- RCTTypeSafety
- React
- ReactCommon/turbomodule/core
- react-native-webview (11.18.1):
- React-Core
- React-perflogger (0.68.2)
- React-RCTActionSheet (0.68.2):
Expand Down Expand Up @@ -558,7 +562,7 @@ PODS:
- React-RCTText
- RealmJS (10.20.0-beta.0):
- React
- RNCAsyncStorage (1.15.14):
- RNCAsyncStorage (1.17.3):
- React-Core
- RNFastImage (8.5.11):
- React-Core
Expand Down Expand Up @@ -604,7 +608,7 @@ PODS:
- React-RCTText
- ReactCommon/turbomodule/core
- Yoga
- RNScreens (3.10.2):
- RNScreens (3.11.1):
- React-Core
- React-RCTImage
- RNSVG (12.3.0):
Expand Down Expand Up @@ -979,11 +983,11 @@ SPEC CHECKSUMS:
react-native-ble-plx: f10240444452dfb2d2a13a0e4f58d7783e92d76e
react-native-config: 6502b1879f97ed5ac570a029961fc35ea606cd14
react-native-netinfo: e922cb2e3eaf9ccdf16b8d4744a89657377aa4a1
react-native-pager-view: 3ee7d4c7697fb3ef788346e834a60cca97ed8540
react-native-pager-view: b1914469643f40042e65d78cbf3d3dfebd6fb0d9
react-native-randombytes: 421f1c7d48c0af8dbcd471b0324393ebf8fe7846
react-native-restart: 45c8dca02491980f2958595333cbccd6877cb57e
react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057
react-native-webview: e89bf2dba26a04cda967814df3ed1be99f291233
react-native-safe-area-context: f98b0b16d1546d208fc293b4661e3f81a895afd9
react-native-webview: 0b7bd2bffced115aefd393e1841babd9b9a557b1
React-perflogger: a18b4f0bd933b8b24ecf9f3c54f9bf65180f3fe6
React-RCTActionSheet: 547fe42fdb4b6089598d79f8e1d855d7c23e2162
React-RCTAnimation: bc9440a1c37b06ae9ebbb532d244f607805c6034
Expand All @@ -998,14 +1002,14 @@ SPEC CHECKSUMS:
ReactCommon: 095366164a276d91ea704ce53cb03825c487a3f2
ReactNativeKeyboardManager: f82a63e0982254fb0f6a17ba327fac575a46f1e9
RealmJS: 6e47a0a9619d19dd238ef635abee5724cb677247
RNCAsyncStorage: ea6b5c280997b2b32a587793163b1f10e580c4f7
RNCAsyncStorage: 005c0e2f09575360f142d0d1f1f15e4ec575b1af
RNFastImage: 1f2cab428712a4baaf78d6169eaec7f622556dd7
RNFBAnalytics: 58d1a73d42514ddf3c4f43662db0f3ce9a85457b
RNFBApp: ca5f49bbe21f663142320337eb39956b04de4d12
RNFBCrashlytics: 97bf2b05e4a5523c57adc8f9e5bf6e1b17804482
RNGestureHandler: 61628a2c859172551aa2100d3e73d1e57878392f
RNReanimated: 64573e25e078ae6bec03b891586d50b9ec284393
RNScreens: d6da2b9e29cf523832c2542f47bf1287318b1868
RNScreens: 4d83613b50b74ed277026375dc0810893b0c347f
RNSVG: 302bfc9905bd8122f08966dc2ce2d07b7b52b9f8
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815
Expand Down
14 changes: 7 additions & 7 deletions packages/app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"main": "__generated__/AppEntry.js",
"version": "0.0.1",
"scripts": {
"start": "react-native start",
"start": "expo start --dev-client",
"android": "ANDROID_CHANNEL=direct expo run:android",
"android:device": "expo run:android --device",
"ios": "expo run:ios",
Expand All @@ -21,7 +21,7 @@
"@formatjs/intl-pluralrules": "^4.3.3",
"@onekeyhq/components": "*",
"@onekeyhq/kit": "*",
"@react-native-async-storage/async-storage": "^1.15.14",
"@react-native-async-storage/async-storage": "1.17.3",
"@react-native-community/netinfo": "^8.1.0",
"@react-native-firebase/analytics": "^14.10.0",
"@react-native-firebase/app": "^14.10.0",
Expand Down Expand Up @@ -60,19 +60,19 @@
"react-native-fast-image": "^8.5.11",
"react-native-gesture-handler": "^2.4.2",
"react-native-keyboard-manager": "^6.5.4-4",
"react-native-pager-view": "5.4.9",
"react-native-pager-view": "5.4.15",
"react-native-randombytes": "^3.6.1",
"react-native-reanimated": "^2.8.0",
"react-native-restart": "0.0.24",
"react-native-safe-area-context": "3.3.2",
"react-native-screens": "~3.10.1",
"react-native-safe-area-context": "4.2.4",
"react-native-screens": "3.11.1",
"react-native-svg": "^12.3.0",
"react-native-toast-message": "2.1.2",
"react-native-vision-camera": "^2.13.3",
"react-native-web": "0.17.7",
"react-native-webview": "11.15.0",
"react-native-webview": "11.18.1",
"readable-stream": "^3.6.0",
"realm": "10.20.0-beta.0",
"realm": "10.20.0-beta.2",
"text-encoding": "^0.7.0",
"vision-camera-code-scanner": "^0.2.0"
},
Expand Down
15 changes: 11 additions & 4 deletions packages/components/src/Account/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export type AccountProps = {
*/
notShowAddress?: boolean;
containerProps?: ComponentProps<typeof Box>;
color?: string;
};

const defaultProps = {
Expand All @@ -63,6 +64,7 @@ const Account: FC<AccountProps> = ({
priorityAmount,
notShowAddress,
containerProps = {},
color,
}) => {
let avatarSizeNumber = getIconSize(avatarSize);
let avatarMarginRight = 3;
Expand Down Expand Up @@ -117,23 +119,28 @@ const Account: FC<AccountProps> = ({
<Box>
{!!(primaryContent || hasPrimaryAddress) &&
(hasPrimaryAddress ? (
<Address typography="Body2Strong" text={address} short />
<Address
typography="Body2Strong"
text={address}
short
color={color}
/>
) : (
<Typography.Body2Strong isTruncated>
<Typography.Body2Strong color={color} isTruncated>
{primaryContent}
</Typography.Body2Strong>
))}

{!!(secondContent || hasSecondAddress) &&
(hasSecondAddress ? (
<Address
color="text-subdued"
color={color || 'text-subdued'}
typography="Body2"
text={address}
short
/>
) : (
<Typography.Body2 color="text-subdued">
<Typography.Body2 color={color || 'text-subdued'}>
{secondContent}
</Typography.Body2>
))}
Expand Down
19 changes: 4 additions & 15 deletions packages/components/src/Form/FormItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@ import React, {

import { Controller, ControllerProps, FieldValues } from 'react-hook-form';

import { getAppNavigation } from '@onekeyhq/kit/src/hooks/useAppNavigation';
import { ModalRoutes, RootRoutes } from '@onekeyhq/kit/src/routes/types';
import { ScanQrcodeRoutes } from '@onekeyhq/kit/src/views/ScanQrcode/types';
import { gotoScanQrcode } from '@onekeyhq/kit/src/utils/gotoScanQrcode';

import Box from '../Box';
import FormControl from '../FormControl';
Expand Down Expand Up @@ -105,18 +103,9 @@ export function FormItem<TFieldValues extends FieldValues = FieldValues>({
circle
name={small ? 'ScanOutline' : 'ScanSolid'}
onPress={() => {
const navigation = getAppNavigation();
navigation.navigate(RootRoutes.Modal, {
screen: ModalRoutes.ScanQrcode,
params: {
screen: ScanQrcodeRoutes.ScanQrcode,
params: {
onScanCompleted: (result: string) => {
onChange(result);
onLabelAddonPress?.();
},
},
},
gotoScanQrcode((result) => {
onChange(result);
onLabelAddonPress?.();
});
}}
/>
Expand Down
2 changes: 1 addition & 1 deletion packages/engine/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ import {
import { VaultFactory } from './vaults/VaultFactory';

import type BTCVault from './vaults/impl/btc/Vault';
import type { ITransferInfo, IVaultFactoryOptions } from './vaults/types';
import type { ITransferInfo } from './vaults/types';

@backgroundClass()
class Engine {
Expand Down
30 changes: 18 additions & 12 deletions packages/kit/src/components/Form/ChainSelector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ import { useGeneral } from '@onekeyhq/kit/src/hooks/redux';

type FormChainSelectorProps = {
selectableNetworks?: Array<string>;
hideHelpText?: boolean;
};

function FormChainSelector<TFieldValues extends FieldValues = FieldValues>({
selectableNetworks,
hideHelpText = false,
...props
}: Omit<ControllerProps<TFieldValues>, 'render'> & FormChainSelectorProps) {
const intl = useIntl();
Expand Down Expand Up @@ -73,18 +75,22 @@ function FormChainSelector<TFieldValues extends FieldValues = FieldValues>({
return (
<Form.Item
label={intl.formatMessage({ id: 'network__network' })}
helpText={(activeNetworkId = defaultNetworkId) => {
const activeNetworkPayload = findActiveNetwork(activeNetworkId);
return intl.formatMessage(
{
id: 'form__network_helperText',
},
{
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
impl: activeNetworkPayload?.impl ?? '-',
},
);
}}
helpText={
hideHelpText
? undefined
: (activeNetworkId = defaultNetworkId) => {
const activeNetworkPayload = findActiveNetwork(activeNetworkId);
return intl.formatMessage(
{
id: 'form__network_helperText',
},
{
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
impl: activeNetworkPayload?.impl ?? '-',
},
);
}
}
defaultValue={defaultNetworkId as any}
{...props}
>
Expand Down
6 changes: 3 additions & 3 deletions packages/kit/src/routes/Modal/ScanQrcode.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import React from 'react';

import { useIsVerticalLayout } from '@onekeyhq/components';
import PreviewSend from '@onekeyhq/kit/src/views/ScanQrcode/PreviewSend';
import ScanQrcode from '@onekeyhq/kit/src/views/ScanQrcode/ScanQrcode';
import ScanQrcodeResult from '@onekeyhq/kit/src/views/ScanQrcode/ScanQrcodeResult';
import SelectChainToSend from '@onekeyhq/kit/src/views/ScanQrcode/SelectChainToSend';
import {
ScanQrcodeRoutes,
ScanQrcodeRoutesParams,
Expand All @@ -21,8 +21,8 @@ const modalRoutes = [
{ name: ScanQrcodeRoutes.ScanQrcodeResult, component: ScanQrcodeResult },

{
name: ScanQrcodeRoutes.SelectChainToSend,
component: SelectChainToSend,
name: ScanQrcodeRoutes.PreviewSend,
component: PreviewSend,
},
];

Expand Down
2 changes: 1 addition & 1 deletion packages/kit/src/routes/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export type TabRoutesParams = {
| undefined
| { inputTokenId?: string; outputTokenId?: string };
[TabRoutes.Portfolio]: undefined;
[TabRoutes.Discover]: undefined;
[TabRoutes.Discover]: undefined | { incomingUrl: string };
[TabRoutes.Me]: undefined;
};
/** Tab */
Expand Down
78 changes: 78 additions & 0 deletions packages/kit/src/utils/gotoScanQrcode.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import * as ImagePicker from 'expo-image-picker';

import { UserCreateInputCategory } from '@onekeyhq/engine/src/types/credential';
import platformEnv from '@onekeyhq/shared/src/platformEnv';

import backgroundApiProxy from '../background/instance/backgroundApiProxy';
import { getAppNavigation } from '../hooks/useAppNavigation';
import { ModalRoutes, RootRoutes } from '../routes/types';
import { scanFromURLAsync } from '../views/ScanQrcode/scanFromURLAsync';
import { ScanQrcodeRoutes, ScanResult } from '../views/ScanQrcode/types';

export const handleScanResult = async (data: string) => {
const scanResult: ScanResult = { type: 'other', data };
if (data.startsWith('https://') || data.startsWith('http://')) {
scanResult.type = 'url';
} else if (/^wc:.+@.+\?.+/.test(data)) {
// wc:{topic...}@{version...}?bridge={url...}&key={key...}
// https://docs.walletconnect.com/tech-spec
await backgroundApiProxy.walletConnect.connect({
uri: data,
});
return;
} else {
const { category, possibleNetworks } =
await backgroundApiProxy.validator.validateCreateInput(data);
if (category === UserCreateInputCategory.ADDRESS) {
scanResult.type = 'address';
scanResult.possibleNetworks = possibleNetworks;
}
}
return scanResult;
};

export const gotoScanQrcode = async (
onScanCompleted?: (data: string) => void,
) => {
const navigation = getAppNavigation();
if (platformEnv.isNative) {
navigation.navigate(RootRoutes.Modal, {
screen: ModalRoutes.ScanQrcode,
params: {
screen: ScanQrcodeRoutes.ScanQrcode,
params: onScanCompleted
? {
onScanCompleted,
}
: undefined,
},
});
} else {
const result = await ImagePicker.launchImageLibraryAsync({
base64: true,
allowsMultipleSelection: false,
});

if (!result.cancelled) {
const data = await scanFromURLAsync(result.uri);
if (data) {
if (onScanCompleted) {
onScanCompleted(data);
return;
}
const scanResult = await handleScanResult(data);
if (scanResult) {
navigation.navigate(RootRoutes.Modal, {
screen: ModalRoutes.ScanQrcode,
params: {
screen: ScanQrcodeRoutes.ScanQrcodeResult,
params: scanResult,
},
});
}
} else {
// TODO invalid qrcode
}
}
}
};
Loading

0 comments on commit 4d80d44

Please sign in to comment.