Skip to content

Commit

Permalink
feat(Wechat): 支持 beforeInvoke 回调
Browse files Browse the repository at this point in the history
  • Loading branch information
fjc0k committed Jan 4, 2023
1 parent e6c61c8 commit 1f4994c
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 8 deletions.
15 changes: 15 additions & 0 deletions src/utils/Wechat.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,4 +128,19 @@ describe('Wechat', () => {
wechat.openLocation({ latitude: 60, longitude: 40, name: '云南' }),
).toResolve()
})

test('beforeInvoke 正常', async () => {
const wechat = new Wechat()
const invokeHistory: any = []
wechat.beforeInvoke((jsApi, params) => {
invokeHistory.push({
jsApi,
params,
})
})
wechat.config(wechatConfigParams)
await wechat.updateShareData({})
await wechat.closeWindow()
expect(invokeHistory).toMatchSnapshot()
})
})
38 changes: 30 additions & 8 deletions src/utils/Wechat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,11 @@ const shareJsApiList: WechatJsApi[] = [
'onMenuShareQZone',
]

export type WechatBeforeInvokeCallback = (
jsApi: WechatJsApi,
params: Record<string, any>,
) => any

/**
* 对微信 JSSDK 的封装。
*
Expand Down Expand Up @@ -373,6 +378,8 @@ export class Wechat {
*/
private prevShareParams: WechatUpdateShareDataParams = {}

private beforeInvokeCallbacks: WechatBeforeInvokeCallback[] = []

/**
* 注入微信 `JSSDK` 的权限验证配置参数。
*/
Expand Down Expand Up @@ -628,6 +635,10 @@ export class Wechat {
return this.bus.on('error', callback)
}

beforeInvoke(cb: WechatBeforeInvokeCallback) {
this.beforeInvokeCallbacks.push(cb)
}

/**
* 调用 JSSDK 的 API 方法。
*
Expand All @@ -640,15 +651,26 @@ export class Wechat {
params: P = {} as any,
): Promise<T> {
return new Promise((resolve, reject) => {
const invoke = () => {
const invoke = async () => {
if (!wx[jsApi]) return reject(`wx.${jsApi} 不可用`)
this.config()
wx[jsApi]({
...params,
success: resolve,
fail: reject,
cancel: reject,
})
try {
this.config()

if (this.beforeInvokeCallbacks.length) {
await Promise.all(
this.beforeInvokeCallbacks.map(cb => cb(jsApi, params)),
)
}

wx[jsApi]({
...params,
success: resolve,
fail: reject,
cancel: reject,
})
} catch (err) {
reject(err)
}
}
if (typeof wx === 'undefined' || !this.ready) {
this.bus.once('ready', invoke)
Expand Down
34 changes: 34 additions & 0 deletions src/utils/__snapshots__/Wechat.test.ts.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Wechat beforeInvoke 正常 1`] = `
Array [
Object {
"jsApi": "updateAppMessageShareData",
"params": Object {},
},
Object {
"jsApi": "updateTimelineShareData",
"params": Object {},
},
Object {
"jsApi": "onMenuShareAppMessage",
"params": Object {},
},
Object {
"jsApi": "onMenuShareTimeline",
"params": Object {},
},
Object {
"jsApi": "onMenuShareQQ",
"params": Object {},
},
Object {
"jsApi": "onMenuShareQZone",
"params": Object {},
},
Object {
"jsApi": "closeWindow",
"params": Object {},
},
]
`;

0 comments on commit 1f4994c

Please sign in to comment.