message-verify 1.0.1-beta.60 → 1.0.1-beta.62
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.
- package/dist/index.d.ts +1 -0
- package/dist/index.js +10 -0
- package/dist/modal/verify-modal.js +15 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/eventEmitter.d.ts +10 -0
- package/dist/utils/eventEmitter.js +28 -0
- package/package.json +1 -1
- package/src/index.tsx +11 -0
- package/src/modal/verify-modal.tsx +17 -1
- package/src/utils/eventEmitter.ts +33 -0
package/dist/index.d.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import { VerifyModalConfig, LoginModalConfig } from './utils/type.js';
|
2
2
|
export declare const initFingerprint: () => Promise<string>;
|
3
3
|
export declare const createReLoginModal: (modalProps: LoginModalConfig) => void;
|
4
|
+
export declare const getResponse: (response: any) => any;
|
4
5
|
export declare const VerifyHandler: ({ data, config, http, verifyPromise, sendApi, response }: VerifyModalConfig) => Promise<any>;
|
package/dist/index.js
CHANGED
@@ -3,6 +3,7 @@ import ReactDOM from 'react-dom/client';
|
|
3
3
|
import VerifyModal from './modal/verify-modal.js';
|
4
4
|
import Fingerprint2 from 'fingerprintjs2';
|
5
5
|
import ReLoginModal from './modal/relogin-modal.js';
|
6
|
+
import eventEmitter from './utils/eventEmitter';
|
6
7
|
let fingerprintPromise = null; // 用 Promise 本身作为缓存
|
7
8
|
let modalRoot = null;
|
8
9
|
export const initFingerprint = async () => {
|
@@ -54,8 +55,17 @@ export const createReLoginModal = (modalProps) => {
|
|
54
55
|
const reLoginModalId = 'relogin-modal-container';
|
55
56
|
creatModal(modalProps, reLoginModalId, ReLoginModal);
|
56
57
|
};
|
58
|
+
let fetchUrl = '';
|
59
|
+
export const getResponse = (response) => {
|
60
|
+
// if (fetchUrl === response.config.url) {
|
61
|
+
console.log('VerifyHandler getResponse =>', response, fetchUrl);
|
62
|
+
eventEmitter.emit('response', response?.data?.status?.code || -1);
|
63
|
+
return response;
|
64
|
+
// }
|
65
|
+
};
|
57
66
|
export const VerifyHandler = ({ data, config, http, verifyPromise, sendApi, response }) => {
|
58
67
|
console.log('VerifyHandler =>', response);
|
68
|
+
fetchUrl = config?.url || '';
|
59
69
|
const toEmpty = () => {
|
60
70
|
verifyPromise.current = null;
|
61
71
|
};
|
@@ -4,6 +4,7 @@ import { Modal, Input, Button, message } from '../compoments/index.js';
|
|
4
4
|
import Api from '../utils/resource.js';
|
5
5
|
import t from '../utils/i18n.js';
|
6
6
|
import { axios } from '@yqg/resource';
|
7
|
+
import eventEmitter from '../utils/eventEmitter';
|
7
8
|
const CreateMessageVerifyModal = ({ props }) => {
|
8
9
|
const [visible, setVisible] = useState(true);
|
9
10
|
const [countdown, setCountdown] = useState(60);
|
@@ -11,6 +12,7 @@ const CreateMessageVerifyModal = ({ props }) => {
|
|
11
12
|
const [captchaImage, setCaptchaImage] = useState('');
|
12
13
|
const [captchCode, setCaptchCode] = useState('');
|
13
14
|
const [captchaKey, setCaptchaKey] = useState('');
|
15
|
+
const [resCode, setResCode] = useState(-1);
|
14
16
|
const { data, http, lang, sendApi = '/admin/sms/send', config, apiResolve, apiPromiseToEmpty, onClose, response } = props || {};
|
15
17
|
const dataObj = JSON.parse(data || '{}');
|
16
18
|
const { mobile, verifyCodeKey } = dataObj || {};
|
@@ -46,6 +48,17 @@ const CreateMessageVerifyModal = ({ props }) => {
|
|
46
48
|
clearInterval(timer);
|
47
49
|
};
|
48
50
|
}, [visible, countdown]);
|
51
|
+
useEffect(() => {
|
52
|
+
const handler = (data) => {
|
53
|
+
// 这里处理收到的数据
|
54
|
+
console.log('收到 response 事件:', data);
|
55
|
+
setResCode(data);
|
56
|
+
};
|
57
|
+
eventEmitter.on('response', handler);
|
58
|
+
return () => {
|
59
|
+
eventEmitter.off('response', handler);
|
60
|
+
};
|
61
|
+
}, []);
|
49
62
|
const handleResend = async () => {
|
50
63
|
const formData = new FormData();
|
51
64
|
formData.append('captchaKey', captchaKey);
|
@@ -86,7 +99,7 @@ const CreateMessageVerifyModal = ({ props }) => {
|
|
86
99
|
'Content-Type': config.headers['Content-Type'],
|
87
100
|
}
|
88
101
|
}).then(res => {
|
89
|
-
console.log('VerifyHandler => then', response);
|
102
|
+
console.log('VerifyHandler => then', response, resCode);
|
90
103
|
resolve(res);
|
91
104
|
}).catch(err => {
|
92
105
|
reject(err);
|
@@ -107,6 +120,7 @@ const CreateMessageVerifyModal = ({ props }) => {
|
|
107
120
|
console.warn('catch=>error', error);
|
108
121
|
message.error(t('verifyFail', lang));
|
109
122
|
setOtp('');
|
123
|
+
setVisible(false);
|
110
124
|
}
|
111
125
|
}
|
112
126
|
} }), _jsx(Button, { disabled: countdown > 0 || !captchCode, onClick: handleResend, style: { padding: '8px' }, children: countdown > 0 ? t('countDownSecound', lang, { countdown }) : t('reSend', lang) })] }), countdown > 0 ? null :
|
@@ -1 +1 @@
|
|
1
|
-
{"root":["../src/index.tsx","../src/main.tsx","../src/vite-env.d.ts","../src/compoments/button.tsx","../src/compoments/index.ts","../src/compoments/input.tsx","../src/compoments/message.tsx","../src/compoments/modal.tsx","../src/locales/en.ts","../src/locales/id.ts","../src/locales/zh.ts","../src/modal/relogin-modal.tsx","../src/modal/verify-modal.tsx","../src/utils/i18n.ts","../src/utils/resource.ts","../src/utils/status.ts","../src/utils/type.ts"],"version":"5.7.3"}
|
1
|
+
{"root":["../src/index.tsx","../src/main.tsx","../src/vite-env.d.ts","../src/compoments/button.tsx","../src/compoments/index.ts","../src/compoments/input.tsx","../src/compoments/message.tsx","../src/compoments/modal.tsx","../src/locales/en.ts","../src/locales/id.ts","../src/locales/zh.ts","../src/modal/relogin-modal.tsx","../src/modal/verify-modal.tsx","../src/utils/eventemitter.ts","../src/utils/i18n.ts","../src/utils/resource.ts","../src/utils/status.ts","../src/utils/type.ts"],"version":"5.7.3"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
type Listener = (...args: any[]) => void;
|
2
|
+
declare class EventEmitter {
|
3
|
+
private events;
|
4
|
+
on(event: string, listener: Listener): void;
|
5
|
+
off(event: string, listener: Listener): void;
|
6
|
+
emit(event: string, ...args: any[]): void;
|
7
|
+
once(event: string, listener: Listener): void;
|
8
|
+
}
|
9
|
+
declare const eventEmitter: EventEmitter;
|
10
|
+
export default eventEmitter;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class EventEmitter {
|
2
|
+
events = {};
|
3
|
+
on(event, listener) {
|
4
|
+
if (!this.events[event]) {
|
5
|
+
this.events[event] = [];
|
6
|
+
}
|
7
|
+
this.events[event].push(listener);
|
8
|
+
}
|
9
|
+
off(event, listener) {
|
10
|
+
if (!this.events[event])
|
11
|
+
return;
|
12
|
+
this.events[event] = this.events[event].filter(l => l !== listener);
|
13
|
+
}
|
14
|
+
emit(event, ...args) {
|
15
|
+
if (!this.events[event])
|
16
|
+
return;
|
17
|
+
this.events[event].forEach(listener => listener(...args));
|
18
|
+
}
|
19
|
+
once(event, listener) {
|
20
|
+
const onceListener = (...args) => {
|
21
|
+
listener(...args);
|
22
|
+
this.off(event, onceListener);
|
23
|
+
};
|
24
|
+
this.on(event, onceListener);
|
25
|
+
}
|
26
|
+
}
|
27
|
+
const eventEmitter = new EventEmitter();
|
28
|
+
export default eventEmitter;
|
package/package.json
CHANGED
package/src/index.tsx
CHANGED
@@ -3,6 +3,7 @@ import VerifyModal from './modal/verify-modal.js'
|
|
3
3
|
import Fingerprint2 from 'fingerprintjs2';
|
4
4
|
import ReLoginModal from './modal/relogin-modal.js';
|
5
5
|
import { VerifyModalConfig, LoginModalConfig } from './utils/type.js';
|
6
|
+
import eventEmitter from './utils/eventEmitter';
|
6
7
|
|
7
8
|
let fingerprintPromise: Promise<string> | null = null; // 用 Promise 本身作为缓存
|
8
9
|
let modalRoot: ReactDOM.Root | null = null
|
@@ -64,8 +65,18 @@ export const createReLoginModal = (modalProps: LoginModalConfig) => {
|
|
64
65
|
creatModal(modalProps, reLoginModalId, ReLoginModal);
|
65
66
|
}
|
66
67
|
|
68
|
+
let fetchUrl: string = '';
|
69
|
+
export const getResponse = (response: any) => {
|
70
|
+
// if (fetchUrl === response.config.url) {
|
71
|
+
console.log('VerifyHandler getResponse =>', response, fetchUrl);
|
72
|
+
eventEmitter.emit('response', response?.data?.status?.code || -1);
|
73
|
+
return response;
|
74
|
+
// }
|
75
|
+
}
|
76
|
+
|
67
77
|
export const VerifyHandler = ({data, config, http, verifyPromise, sendApi, response}: VerifyModalConfig): Promise<any> => {
|
68
78
|
console.log('VerifyHandler =>', response);
|
79
|
+
fetchUrl = config?.url as string || '';
|
69
80
|
const toEmpty = () => {
|
70
81
|
verifyPromise.current = null;
|
71
82
|
};
|
@@ -4,6 +4,7 @@ import Api from '../utils/resource.js'
|
|
4
4
|
import t from '../utils/i18n.js'
|
5
5
|
import { VerifyModalConfig } from '../utils/type.js';
|
6
6
|
import { axios } from '@yqg/resource';
|
7
|
+
import eventEmitter from '../utils/eventEmitter';
|
7
8
|
|
8
9
|
const CreateMessageVerifyModal = ({ props }: { props: VerifyModalConfig }) => {
|
9
10
|
const [visible, setVisible] = useState(true);
|
@@ -12,6 +13,7 @@ const CreateMessageVerifyModal = ({ props }: { props: VerifyModalConfig }) => {
|
|
12
13
|
const [captchaImage, setCaptchaImage] = useState<string>('');
|
13
14
|
const [captchCode, setCaptchCode] = useState<string>('');
|
14
15
|
const [captchaKey, setCaptchaKey] = useState<string>('');
|
16
|
+
const [resCode, setResCode] = useState<number>(-1);
|
15
17
|
const { data, http, lang, sendApi = '/admin/sms/send', config, apiResolve, apiPromiseToEmpty, onClose, response } = props || {};
|
16
18
|
const dataObj = JSON.parse(data || '{}');
|
17
19
|
const { mobile, verifyCodeKey } = dataObj || {};
|
@@ -49,6 +51,19 @@ const CreateMessageVerifyModal = ({ props }: { props: VerifyModalConfig }) => {
|
|
49
51
|
};
|
50
52
|
}, [visible, countdown]);
|
51
53
|
|
54
|
+
|
55
|
+
useEffect(() => {
|
56
|
+
const handler = (data: any) => {
|
57
|
+
// 这里处理收到的数据
|
58
|
+
console.log('收到 response 事件:', data);
|
59
|
+
setResCode(data);
|
60
|
+
};
|
61
|
+
eventEmitter.on('response', handler);
|
62
|
+
return () => {
|
63
|
+
eventEmitter.off('response', handler);
|
64
|
+
};
|
65
|
+
}, [])
|
66
|
+
|
52
67
|
const handleResend = async () => {
|
53
68
|
const formData = new FormData();
|
54
69
|
formData.append('captchaKey', captchaKey);
|
@@ -102,7 +117,7 @@ const CreateMessageVerifyModal = ({ props }: { props: VerifyModalConfig }) => {
|
|
102
117
|
'Content-Type': config.headers['Content-Type'],
|
103
118
|
}
|
104
119
|
}).then(res => {
|
105
|
-
console.log('VerifyHandler => then', response);
|
120
|
+
console.log('VerifyHandler => then', response, resCode);
|
106
121
|
resolve(res);
|
107
122
|
}).catch(err => {
|
108
123
|
reject(err);
|
@@ -121,6 +136,7 @@ const CreateMessageVerifyModal = ({ props }: { props: VerifyModalConfig }) => {
|
|
121
136
|
console.warn('catch=>error', error);
|
122
137
|
message.error(t('verifyFail', lang));
|
123
138
|
setOtp('');
|
139
|
+
setVisible(false);
|
124
140
|
}
|
125
141
|
}
|
126
142
|
}} />
|
@@ -0,0 +1,33 @@
|
|
1
|
+
type Listener = (...args: any[]) => void;
|
2
|
+
|
3
|
+
class EventEmitter {
|
4
|
+
private events: Record<string, Listener[]> = {};
|
5
|
+
|
6
|
+
on(event: string, listener: Listener) {
|
7
|
+
if (!this.events[event]) {
|
8
|
+
this.events[event] = [];
|
9
|
+
}
|
10
|
+
this.events[event].push(listener);
|
11
|
+
}
|
12
|
+
|
13
|
+
off(event: string, listener: Listener) {
|
14
|
+
if (!this.events[event]) return;
|
15
|
+
this.events[event] = this.events[event].filter(l => l !== listener);
|
16
|
+
}
|
17
|
+
|
18
|
+
emit(event: string, ...args: any[]) {
|
19
|
+
if (!this.events[event]) return;
|
20
|
+
this.events[event].forEach(listener => listener(...args));
|
21
|
+
}
|
22
|
+
|
23
|
+
once(event: string, listener: Listener) {
|
24
|
+
const onceListener: Listener = (...args) => {
|
25
|
+
listener(...args);
|
26
|
+
this.off(event, onceListener);
|
27
|
+
};
|
28
|
+
this.on(event, onceListener);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
const eventEmitter = new EventEmitter();
|
33
|
+
export default eventEmitter;
|