@arcblock/ux 2.13.34 → 2.13.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -52,7 +52,9 @@ export default function withContainer(Component) {
52
52
  if (searchParams.get('magicToken')) {
53
53
  searchParams.delete('magicToken');
54
54
  }
55
- window.history.replaceState({}, '', `${window.location.pathname}?${searchParams.toString()}`);
55
+ if (searchParams.toString()) {
56
+ window.history.replaceState({}, '', `${window.location.pathname}?${searchParams.toString()}`);
57
+ }
56
58
  });
57
59
 
58
60
  // eslint-disable-next-line no-unused-vars
@@ -129,7 +131,7 @@ export default function withContainer(Component) {
129
131
  };
130
132
  const wrapOnClose = useMemoizedFn(() => {
131
133
  removeMagicToken();
132
- rest?.onClose();
134
+ rest?.onClose?.();
133
135
  });
134
136
  if (openVariant === 'page') {
135
137
  return /*#__PURE__*/_jsx(Box, {
@@ -0,0 +1,9 @@
1
+ import type { SxProps } from '@mui/material';
2
+ export declare const VERIFY_CODE_LENGTH = 6;
3
+ export default function VerificationCode({ length, code, onChange, onComplete, sx, }: {
4
+ length?: number;
5
+ code: string;
6
+ onChange?: (_code: string) => void;
7
+ onComplete?: (_code: string) => void;
8
+ sx?: SxProps;
9
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,67 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect } from 'react';
3
+ import { Box, TextField } from '@mui/material';
4
+ import trim from 'lodash/trim';
5
+ import noop from 'lodash/noop';
6
+ import { mergeSx } from '../Util/style';
7
+ export const VERIFY_CODE_LENGTH = 6;
8
+ export default function VerificationCode({
9
+ length = VERIFY_CODE_LENGTH,
10
+ code,
11
+ onChange = noop,
12
+ onComplete = noop,
13
+ sx
14
+ }) {
15
+ useEffect(() => {
16
+ if (code.length === length) {
17
+ onComplete?.(code);
18
+ }
19
+ // eslint-disable-next-line react-hooks/exhaustive-deps
20
+ }, [code, length]);
21
+ return /*#__PURE__*/_jsx(Box, {
22
+ sx: mergeSx({
23
+ width: '100%',
24
+ maxWidth: 360,
25
+ display: 'flex',
26
+ justifyContent: 'space-between',
27
+ gap: 1.5
28
+ }, sx),
29
+ children: [...Array(length)].map((_, index) => /*#__PURE__*/_jsx(TextField, {
30
+ id: `code-input-${index}`
31
+ // eslint-disable-next-line react/no-array-index-key
32
+ ,
33
+
34
+ value: trim(code[index]) || '',
35
+ type: "number",
36
+ inputProps: {
37
+ maxLength: 1,
38
+ sx: {
39
+ textAlign: 'center',
40
+ fontSize: '1.5rem',
41
+ '&::-webkit-inner-spin-button, &::-webkit-outer-spin-button': {
42
+ WebkitAppearance: 'none',
43
+ margin: 0
44
+ }
45
+ },
46
+ autoComplete: 'off',
47
+ pattern: '[0-9]',
48
+ inputMode: 'numeric'
49
+ },
50
+ onChange: e => {
51
+ const newCode = code.split('');
52
+ newCode[index] = e.target.value;
53
+ onChange?.(newCode.join(''));
54
+ if (e.target.value && index < 5) {
55
+ document.getElementById(`code-input-${index + 1}`)?.focus();
56
+ }
57
+ },
58
+ onKeyDown: e => {
59
+ if (e.key === 'Backspace' && !trim(code[index]) && index > 0) {
60
+ document.getElementById(`code-input-${index - 1}`)?.focus();
61
+ }
62
+ },
63
+ required: true,
64
+ autoComplete: "off"
65
+ }, `code-input-${index}`))
66
+ });
67
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/ux",
3
- "version": "2.13.34",
3
+ "version": "2.13.36",
4
4
  "description": "Common used react components for arcblock products",
5
5
  "keywords": [
6
6
  "react",
@@ -71,14 +71,14 @@
71
71
  "react": ">=18.2.0",
72
72
  "react-router-dom": ">=6.22.3"
73
73
  },
74
- "gitHead": "2dd874ee643777fe089a0d02183543497d0c8f39",
74
+ "gitHead": "9df953c70b6808afe748ea91d58bb1b3e7acc066",
75
75
  "dependencies": {
76
76
  "@arcblock/did-motif": "^1.1.13",
77
- "@arcblock/icons": "^2.13.34",
78
- "@arcblock/nft-display": "^2.13.34",
79
- "@arcblock/react-hooks": "^2.13.34",
77
+ "@arcblock/icons": "^2.13.36",
78
+ "@arcblock/nft-display": "^2.13.36",
79
+ "@arcblock/react-hooks": "^2.13.36",
80
80
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
81
- "@blocklet/theme": "^2.13.34",
81
+ "@blocklet/theme": "^2.13.36",
82
82
  "@fontsource/roboto": "~5.1.1",
83
83
  "@fontsource/ubuntu-mono": "^5.0.18",
84
84
  "@iconify-icons/logos": "^1.2.36",
@@ -73,7 +73,9 @@ export default function withContainer(Component: React.ComponentType<any>) {
73
73
  if (searchParams.get('magicToken')) {
74
74
  searchParams.delete('magicToken');
75
75
  }
76
- window.history.replaceState({}, '', `${window.location.pathname}?${searchParams.toString()}`);
76
+ if (searchParams.toString()) {
77
+ window.history.replaceState({}, '', `${window.location.pathname}?${searchParams.toString()}`);
78
+ }
77
79
  });
78
80
 
79
81
  // eslint-disable-next-line no-unused-vars
@@ -158,7 +160,7 @@ export default function withContainer(Component: React.ComponentType<any>) {
158
160
 
159
161
  const wrapOnClose = useMemoizedFn(() => {
160
162
  removeMagicToken();
161
- rest?.onClose();
163
+ rest?.onClose?.();
162
164
  });
163
165
 
164
166
  if (openVariant === 'page') {
@@ -0,0 +1,81 @@
1
+ import { useEffect } from 'react';
2
+ import { Box, TextField } from '@mui/material';
3
+ import type { SxProps } from '@mui/material';
4
+ import trim from 'lodash/trim';
5
+ import noop from 'lodash/noop';
6
+ import { mergeSx } from '../Util/style';
7
+
8
+ export const VERIFY_CODE_LENGTH = 6;
9
+
10
+ export default function VerificationCode({
11
+ length = VERIFY_CODE_LENGTH,
12
+ code,
13
+ onChange = noop,
14
+ onComplete = noop,
15
+ sx,
16
+ }: {
17
+ length?: number;
18
+ code: string;
19
+ onChange?: (_code: string) => void;
20
+ onComplete?: (_code: string) => void;
21
+ sx?: SxProps;
22
+ }) {
23
+ useEffect(() => {
24
+ if (code.length === length) {
25
+ onComplete?.(code);
26
+ }
27
+ // eslint-disable-next-line react-hooks/exhaustive-deps
28
+ }, [code, length]);
29
+ return (
30
+ <Box
31
+ sx={mergeSx(
32
+ {
33
+ width: '100%',
34
+ maxWidth: 360,
35
+ display: 'flex',
36
+ justifyContent: 'space-between',
37
+ gap: 1.5,
38
+ },
39
+ sx
40
+ )}>
41
+ {[...Array(length)].map((_, index) => (
42
+ <TextField
43
+ id={`code-input-${index}`}
44
+ // eslint-disable-next-line react/no-array-index-key
45
+ key={`code-input-${index}`}
46
+ value={trim(code[index]) || ''}
47
+ type="number"
48
+ inputProps={{
49
+ maxLength: 1,
50
+ sx: {
51
+ textAlign: 'center',
52
+ fontSize: '1.5rem',
53
+ '&::-webkit-inner-spin-button, &::-webkit-outer-spin-button': {
54
+ WebkitAppearance: 'none',
55
+ margin: 0,
56
+ },
57
+ },
58
+ autoComplete: 'off',
59
+ pattern: '[0-9]',
60
+ inputMode: 'numeric',
61
+ }}
62
+ onChange={(e) => {
63
+ const newCode = code.split('');
64
+ newCode[index] = e.target.value;
65
+ onChange?.(newCode.join(''));
66
+ if (e.target.value && index < 5) {
67
+ document.getElementById(`code-input-${index + 1}`)?.focus();
68
+ }
69
+ }}
70
+ onKeyDown={(e) => {
71
+ if (e.key === 'Backspace' && !trim(code[index]) && index > 0) {
72
+ document.getElementById(`code-input-${index - 1}`)?.focus();
73
+ }
74
+ }}
75
+ required
76
+ autoComplete="off"
77
+ />
78
+ ))}
79
+ </Box>
80
+ );
81
+ }