Skip to content

Commit 8d7fb2b

Browse files
authored
feat: use-request support format origin (#268)
* feat: use-request support format origin * version: 2.3.0-beta.6
1 parent aa87b28 commit 8d7fb2b

File tree

8 files changed

+80
-29
lines changed

8 files changed

+80
-29
lines changed

docs/demo/request-formatResult/demo.vue

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,20 @@
66
<script lang="ts" setup>
77
import { useRequest } from 'vue-hooks-plus'
88
9+
import { UseRequestPlugin } from 'vue-hooks-plus/es/useRequest/types'
10+
11+
const useTrackerPlugin: UseRequestPlugin<any, []> = () => {
12+
return {
13+
name: 'trackerPlugin',
14+
onSuccess: (data, params, origin) => {
15+
console.log('format data', data)
16+
console.log('format before origin', origin)
17+
console.log('params', params)
18+
},
19+
onError: () => {},
20+
}
21+
}
22+
923
function getUsername(params: { desc: string }): Promise<string> {
1024
return new Promise(resolve => {
1125
setTimeout(() => {
@@ -16,12 +30,16 @@
1630
1731
const { data, loading } = useRequest(() => getUsername({ desc: 'good' }))
1832
19-
const { data: formatData, loading: loading1 } = useRequest(() => getUsername({ desc: 'good' }), {
20-
formatResult(res) {
21-
return {
22-
name: `formatter ${res}`,
23-
age: 18,
24-
}
33+
const { data: formatData, loading: loading1 } = useRequest(
34+
() => getUsername({ desc: 'good' }),
35+
{
36+
formatResult(res) {
37+
return {
38+
name: `formatter ${res}`,
39+
age: 18,
40+
}
41+
},
2542
},
26-
})
43+
[useTrackerPlugin],
44+
)
2745
</script>

docs/demo/request-polling/demo.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template>
22
<div
3-
>Username:<span>{{ loading ? 'loading' : data }}</span>
4-
<br>
3+
>Username:<span>{{ loading ? 'loading' : data }}</span>
4+
<br />
55
<p>PollingInterval:{{ computedTime }}ms</p>
66
<div style="margin-right: 8px;">
77
<vhp-button @click="start()">Start</vhp-button>
@@ -16,7 +16,7 @@
1616
import { useRequest } from 'vue-hooks-plus'
1717
1818
function getUsername(): Promise<string> {
19-
return new Promise((resolve, reject) => {
19+
return new Promise(resolve => {
2020
setTimeout(() => {
2121
resolve(String(Date.now()))
2222
}, 1000)

docs/en/hooks/useRequest/plugin.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ interface UseRequestPluginReturn<TData, TParams extends any[]> {
7474
servicePromise?: Promise<TData>
7575
}
7676

77-
onSuccess?: (data: TData, params: TParams) => void
77+
onSuccess?: (data: TData, params: TParams, origin: Origin) => void
7878
onError?: (e: Error, params: TParams) => void
7979
onFinally?: (params: TParams, data?: TData, e?: Error) => void
8080
onCancel?: () => void

docs/tsconfig.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"extends": "../tsconfig.json",
3+
"compilerOptions": {
4+
"outDir": "./dist", //输出文件
5+
"lib": ["esnext", "dom"],
6+
"baseUrl": "./",
7+
"rootDir": "./",
8+
"types": ["node", "vitest", "vitest/globals"],
9+
"paths": {
10+
"vue-hooks-plus": ["../packages/hooks/src/index.ts"]
11+
}
12+
},
13+
"include": ["src/**/*.ts", "demo/**/*.vue", "docs/global.d.ts"],
14+
"exclude": ["node_modules", "dist", "lib", "es", "example", "test-utils/*"]
15+
}

packages/hooks/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-hooks-plus",
3-
"version": "2.3.0-beta.5",
3+
"version": "2.3.0-beta.6",
44
"description": "Vue hooks library",
55
"files": [
66
"dist",

packages/hooks/src/useRequest/Fetch.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,17 @@ export default class Fetch<TData, TParams extends unknown[] = any> {
166166
// Format data
167167
const formattedResult = this.options.formatResult ? this.options.formatResult(res) : res
168168

169+
const origin = {
170+
data: res,
171+
}
169172
this.setState({
170173
data: formattedResult,
171174
error: undefined,
172175
loading: false,
173176
})
174177
// Request successful
175178
this.options.onSuccess?.(formattedResult, params)
176-
177-
this.runPluginHandler('onSuccess', formattedResult, params)
179+
this.runPluginHandler('onSuccess', formattedResult, params, origin)
178180

179181
this.previousValidData = formattedResult
180182

packages/hooks/src/useRequest/types.ts

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,24 @@ export type UseRequestService<TData, TParams extends unknown[]> = (
88

99
export type UseRequestSubscribe = () => void
1010

11+
export type UseRequestOrigin<TData = unknown> = {
12+
data: TData
13+
}
14+
15+
export type UseRequestOriginSnapshot<TData, TParams extends unknown[]> = {
16+
loading: boolean
17+
params?: TParams
18+
originData?: TData
19+
formatData?: TData
20+
error?: Error | unknown
21+
}
22+
1123
export interface UseRequestFetchState<TData, TParams extends unknown[]> {
1224
loading: boolean
1325
params?: TParams
1426
data?: TData
1527
error?: Error | unknown
28+
snapshot?: UseRequestOriginSnapshot<TData, TParams>
1629
}
1730

1831
export interface UseRequestPluginReturn<TData, TParams extends unknown[]> {
@@ -21,9 +34,9 @@ export interface UseRequestPluginReturn<TData, TParams extends unknown[]> {
2134
params: TParams,
2235
) =>
2336
| ({
24-
stopNow?: boolean
25-
returnNow?: boolean
26-
} & Partial<UseRequestFetchState<TData, TParams>>)
37+
stopNow?: boolean
38+
returnNow?: boolean
39+
} & Partial<UseRequestFetchState<TData, TParams>>)
2740
| void
2841

2942
onRequest?: (
@@ -32,8 +45,14 @@ export interface UseRequestPluginReturn<TData, TParams extends unknown[]> {
3245
) => {
3346
servicePromise?: Promise<TData>
3447
}
35-
36-
onSuccess?: (data: TData, params: TParams) => void
48+
/**
49+
*
50+
* @param data Request result data or format data
51+
* @param params Maually set the request params.
52+
* @param origin Before format origin { data: TData }
53+
* @returns Void
54+
*/
55+
onSuccess?: (data: TData, params: TParams, origin: UseRequestOrigin) => void
3756
onError?: (e: Error, params: TParams) => void
3857
onFinally?: (params: TParams, data?: TData, e?: Error) => void
3958
onCancel?: () => void
@@ -300,12 +319,12 @@ export interface useRequestResult<
300319
data: Readonly<
301320
Ref<
302321
FormatResult extends false
303-
? Initial extends false
304-
? TData | undefined
305-
: TData
306-
: FormatResult extends (...args: any[]) => any
307-
? ReturnType<FormatResult> | undefined
308-
: FormatResult | undefined
322+
? Initial extends false
323+
? TData | undefined
324+
: TData
325+
: FormatResult extends (...args: any[]) => any
326+
? ReturnType<FormatResult> | undefined
327+
: FormatResult | undefined
309328
>
310329
>
311330

pnpm-lock.yaml

Lines changed: 1 addition & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)