@fy-/fws-vue 0.3.73 → 0.3.75
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/composables/rest.ts +16 -9
- package/package.json +1 -1
- package/stores/serverRouter.ts +14 -0
- package/stores/rest.ts +0 -27
package/composables/rest.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RestMethod, RestParams, getMode, rest, stringHash } from "@fy-/fws-js";
|
|
2
|
-
import {
|
|
2
|
+
import { useServerRouter } from "../stores/serverRouter";
|
|
3
3
|
import { isServerRendered } from "./ssr";
|
|
4
4
|
import { useEventBus } from "./event-bus";
|
|
5
5
|
|
|
@@ -31,7 +31,7 @@ export function useRest(): <ResultType extends APIResult>(
|
|
|
31
31
|
method: RestMethod,
|
|
32
32
|
params?: RestParams,
|
|
33
33
|
) => Promise<ResultType> {
|
|
34
|
-
const
|
|
34
|
+
const serverRouter = useServerRouter();
|
|
35
35
|
const eventBus = useEventBus();
|
|
36
36
|
|
|
37
37
|
return async <ResultType extends APIResult>(
|
|
@@ -39,15 +39,22 @@ export function useRest(): <ResultType extends APIResult>(
|
|
|
39
39
|
method: RestMethod,
|
|
40
40
|
params?: RestParams,
|
|
41
41
|
): Promise<ResultType> => {
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
let urlForHash: string = url;
|
|
43
|
+
try {
|
|
44
|
+
const urlParse = new URL(url);
|
|
45
|
+
urlForHash = urlParse.pathname + urlParse.search;
|
|
46
|
+
} catch (error) {
|
|
47
|
+
urlForHash = url;
|
|
48
|
+
}
|
|
44
49
|
|
|
45
|
-
const requestHash = stringHash(
|
|
50
|
+
const requestHash = stringHash(
|
|
51
|
+
urlForHash + method + JSON.stringify(params),
|
|
52
|
+
);
|
|
46
53
|
if (isServerRendered()) {
|
|
47
|
-
const hasResult =
|
|
54
|
+
const hasResult = serverRouter.getResult(requestHash);
|
|
48
55
|
if (hasResult !== undefined) {
|
|
49
56
|
const result = hasResult as ResultType;
|
|
50
|
-
|
|
57
|
+
serverRouter.removeResult(requestHash);
|
|
51
58
|
if (result.result === "error") {
|
|
52
59
|
eventBus.emit("main-loading", false);
|
|
53
60
|
eventBus.emit("rest-error", result);
|
|
@@ -60,7 +67,7 @@ export function useRest(): <ResultType extends APIResult>(
|
|
|
60
67
|
try {
|
|
61
68
|
const restResult: ResultType = await rest(url, method, params);
|
|
62
69
|
if (getMode() === "ssr") {
|
|
63
|
-
|
|
70
|
+
serverRouter.addResult(
|
|
64
71
|
requestHash,
|
|
65
72
|
JSON.parse(JSON.stringify(restResult)),
|
|
66
73
|
);
|
|
@@ -74,7 +81,7 @@ export function useRest(): <ResultType extends APIResult>(
|
|
|
74
81
|
} catch (error) {
|
|
75
82
|
const restError: ResultType = error as ResultType;
|
|
76
83
|
if (getMode() === "ssr") {
|
|
77
|
-
|
|
84
|
+
serverRouter.addResult(requestHash, restError);
|
|
78
85
|
}
|
|
79
86
|
eventBus.emit("main-loading", false);
|
|
80
87
|
eventBus.emit("rest-error", restError);
|
package/package.json
CHANGED
package/stores/serverRouter.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface ServerRouterState {
|
|
|
5
5
|
_router: any | null;
|
|
6
6
|
status: number;
|
|
7
7
|
redirect?: string;
|
|
8
|
+
results: Record<number, any | undefined>;
|
|
8
9
|
}
|
|
9
10
|
|
|
10
11
|
export const useServerRouter = defineStore({
|
|
@@ -14,6 +15,7 @@ export const useServerRouter = defineStore({
|
|
|
14
15
|
_router: null,
|
|
15
16
|
status: 200,
|
|
16
17
|
redirect: undefined,
|
|
18
|
+
results: {},
|
|
17
19
|
}) as ServerRouterState,
|
|
18
20
|
getters: {
|
|
19
21
|
currentRoute: (state) => state._router!.currentRoute,
|
|
@@ -45,5 +47,17 @@ export const useServerRouter = defineStore({
|
|
|
45
47
|
forward() {
|
|
46
48
|
this._router?.go(1);
|
|
47
49
|
},
|
|
50
|
+
addResult(id: number, result: any) {
|
|
51
|
+
this.results[id] = result;
|
|
52
|
+
},
|
|
53
|
+
hasResult(id: number) {
|
|
54
|
+
return this.results[id] !== undefined;
|
|
55
|
+
},
|
|
56
|
+
getResult(id: number) {
|
|
57
|
+
return this.results[id];
|
|
58
|
+
},
|
|
59
|
+
removeResult(id: number) {
|
|
60
|
+
delete this.results[id];
|
|
61
|
+
},
|
|
48
62
|
},
|
|
49
63
|
});
|
package/stores/rest.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { defineStore } from "pinia";
|
|
2
|
-
import { APIResult } from "../composables/rest";
|
|
3
|
-
|
|
4
|
-
type SharedState = {
|
|
5
|
-
results: Record<number, any | undefined>;
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
export const useRestStore = defineStore({
|
|
9
|
-
id: "restStore",
|
|
10
|
-
state: (): SharedState => ({
|
|
11
|
-
results: {},
|
|
12
|
-
}),
|
|
13
|
-
actions: {
|
|
14
|
-
addResult(id: number, result: any) {
|
|
15
|
-
this.results[id] = result;
|
|
16
|
-
},
|
|
17
|
-
hasResult(id: number) {
|
|
18
|
-
return this.results[id] !== undefined;
|
|
19
|
-
},
|
|
20
|
-
getResult(id: number) {
|
|
21
|
-
return this.results[id];
|
|
22
|
-
},
|
|
23
|
-
removeResult(id: number) {
|
|
24
|
-
delete this.results[id];
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
});
|