@yh-ui/request 1.0.55 → 1.0.56
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/useLoadMore.cjs +55 -6
- package/dist/useLoadMore.mjs +59 -8
- package/package.json +2 -2
package/dist/useLoadMore.cjs
CHANGED
|
@@ -31,8 +31,16 @@ function useLoadMore(service, options = {}) {
|
|
|
31
31
|
const loadingMore = (0, _vue.ref)(false);
|
|
32
32
|
const error = (0, _vue.shallowRef)(void 0);
|
|
33
33
|
const params = (0, _vue.ref)(defaultParams);
|
|
34
|
+
let lastRefreshTime = 0;
|
|
35
|
+
const lastLoadedPageSize = (0, _vue.ref)(null);
|
|
34
36
|
const noMore = (0, _vue.computed)(() => {
|
|
35
|
-
|
|
37
|
+
if (total.value > 0) {
|
|
38
|
+
return current.value >= totalPages.value;
|
|
39
|
+
}
|
|
40
|
+
if (lastLoadedPageSize.value !== null && lastLoadedPageSize.value < pageSize.value) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
36
44
|
});
|
|
37
45
|
const canLoadMore = (0, _vue.computed)(() => {
|
|
38
46
|
return isLoadMore && !noMore.value && !loadingMore.value;
|
|
@@ -42,23 +50,63 @@ function useLoadMore(service, options = {}) {
|
|
|
42
50
|
if (loading.value || loadingMore.value) return;
|
|
43
51
|
const isLoadMoreOp = !isRefresh;
|
|
44
52
|
loading.value = isLoadMoreOp ? false : true;
|
|
45
|
-
if (isRefresh)
|
|
53
|
+
if (isRefresh) {
|
|
54
|
+
refreshing.value = true;
|
|
55
|
+
total.value = 0;
|
|
56
|
+
lastLoadedPageSize.value = null;
|
|
57
|
+
}
|
|
46
58
|
if (isLoadMoreOp) loadingMore.value = true;
|
|
47
59
|
error.value = void 0;
|
|
48
60
|
try {
|
|
49
|
-
const extraParams = params.value
|
|
61
|
+
const extraParams = params.value;
|
|
50
62
|
const response = await loadService(requestedPage, pageSize.value, ...extraParams);
|
|
51
63
|
const pageData = response.data;
|
|
64
|
+
let totalNum;
|
|
52
65
|
if (pageData && typeof pageData === "object") {
|
|
53
66
|
const paginatedData = pageData;
|
|
54
|
-
if (typeof paginatedData.total !== "undefined")
|
|
67
|
+
if (typeof paginatedData.total !== "undefined") totalNum = paginatedData.total;else if (typeof paginatedData.totalCount !== "undefined") totalNum = paginatedData.totalCount;else if (typeof paginatedData.totalElements !== "undefined") totalNum = paginatedData.totalElements;
|
|
68
|
+
}
|
|
69
|
+
if (typeof totalNum === "undefined" && response && typeof response === "object") {
|
|
70
|
+
const resp = response;
|
|
71
|
+
if (typeof resp.total !== "undefined") totalNum = resp.total;else if (typeof resp.totalCount !== "undefined") totalNum = resp.totalCount;else if (typeof resp.totalElements !== "undefined") totalNum = resp.totalElements;
|
|
72
|
+
}
|
|
73
|
+
if (typeof totalNum !== "undefined") {
|
|
74
|
+
total.value = totalNum;
|
|
75
|
+
}
|
|
76
|
+
let loadedSize = 0;
|
|
77
|
+
if (Array.isArray(pageData)) {
|
|
78
|
+
loadedSize = pageData.length;
|
|
79
|
+
} else if (pageData && typeof pageData === "object") {
|
|
80
|
+
const arrayKeys = Object.keys(pageData).filter(k => Array.isArray(pageData[k]));
|
|
81
|
+
if (arrayKeys.length > 0) {
|
|
82
|
+
const preferredKey = arrayKeys.find(k => ["list", "data", "items"].includes(k));
|
|
83
|
+
if (preferredKey) {
|
|
84
|
+
loadedSize = pageData[preferredKey].length;
|
|
85
|
+
} else {
|
|
86
|
+
loadedSize = pageData[arrayKeys[0]].length;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
55
89
|
}
|
|
90
|
+
lastLoadedPageSize.value = loadedSize;
|
|
56
91
|
if (isRefresh) {
|
|
57
92
|
data.value = pageData;
|
|
93
|
+
lastRefreshTime = Date.now();
|
|
58
94
|
} else {
|
|
59
95
|
const oldData = data.value;
|
|
60
96
|
if (Array.isArray(oldData) && Array.isArray(pageData)) {
|
|
61
97
|
data.value = [...oldData, ...pageData];
|
|
98
|
+
} else if (oldData && typeof oldData === "object" && pageData && typeof pageData === "object") {
|
|
99
|
+
const merged = {
|
|
100
|
+
...pageData
|
|
101
|
+
};
|
|
102
|
+
for (const key of Object.keys(pageData)) {
|
|
103
|
+
const oldValue = oldData[key];
|
|
104
|
+
const newValue = pageData[key];
|
|
105
|
+
if (Array.isArray(oldValue) && Array.isArray(newValue)) {
|
|
106
|
+
merged[key] = [...oldValue, ...newValue];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
data.value = merged;
|
|
62
110
|
} else {
|
|
63
111
|
data.value = pageData;
|
|
64
112
|
}
|
|
@@ -77,6 +125,7 @@ function useLoadMore(service, options = {}) {
|
|
|
77
125
|
};
|
|
78
126
|
const loadMore = async () => {
|
|
79
127
|
if (noMore.value || loadingMore.value) return;
|
|
128
|
+
if (Date.now() - lastRefreshTime < 100) return;
|
|
80
129
|
await loadData(current.value + 1, false);
|
|
81
130
|
};
|
|
82
131
|
const reload = async () => {
|
|
@@ -113,10 +162,10 @@ function useLoadMore(service, options = {}) {
|
|
|
113
162
|
if (!manual) {
|
|
114
163
|
if ((0, _vue.getCurrentInstance)()) {
|
|
115
164
|
(0, _vue.onMounted)(() => {
|
|
116
|
-
loadData(current.value,
|
|
165
|
+
loadData(current.value, true);
|
|
117
166
|
});
|
|
118
167
|
} else {
|
|
119
|
-
loadData(current.value,
|
|
168
|
+
loadData(current.value, true);
|
|
120
169
|
}
|
|
121
170
|
}
|
|
122
171
|
return {
|
package/dist/useLoadMore.mjs
CHANGED
|
@@ -31,8 +31,16 @@ export function useLoadMore(service, options = {}) {
|
|
|
31
31
|
const loadingMore = ref(false);
|
|
32
32
|
const error = shallowRef(void 0);
|
|
33
33
|
const params = ref(defaultParams);
|
|
34
|
+
let lastRefreshTime = 0;
|
|
35
|
+
const lastLoadedPageSize = ref(null);
|
|
34
36
|
const noMore = computed(() => {
|
|
35
|
-
|
|
37
|
+
if (total.value > 0) {
|
|
38
|
+
return current.value >= totalPages.value;
|
|
39
|
+
}
|
|
40
|
+
if (lastLoadedPageSize.value !== null && lastLoadedPageSize.value < pageSize.value) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
36
44
|
});
|
|
37
45
|
const canLoadMore = computed(() => {
|
|
38
46
|
return isLoadMore && !noMore.value && !loadingMore.value;
|
|
@@ -42,27 +50,69 @@ export function useLoadMore(service, options = {}) {
|
|
|
42
50
|
if (loading.value || loadingMore.value) return;
|
|
43
51
|
const isLoadMoreOp = !isRefresh;
|
|
44
52
|
loading.value = isLoadMoreOp ? false : true;
|
|
45
|
-
if (isRefresh)
|
|
53
|
+
if (isRefresh) {
|
|
54
|
+
refreshing.value = true;
|
|
55
|
+
total.value = 0;
|
|
56
|
+
lastLoadedPageSize.value = null;
|
|
57
|
+
}
|
|
46
58
|
if (isLoadMoreOp) loadingMore.value = true;
|
|
47
59
|
error.value = void 0;
|
|
48
60
|
try {
|
|
49
|
-
const extraParams = params.value
|
|
61
|
+
const extraParams = params.value;
|
|
50
62
|
const response = await loadService(requestedPage, pageSize.value, ...extraParams);
|
|
51
63
|
const pageData = response.data;
|
|
64
|
+
let totalNum;
|
|
52
65
|
if (pageData && typeof pageData === "object") {
|
|
53
66
|
const paginatedData = pageData;
|
|
54
|
-
if (typeof paginatedData.total !== "undefined")
|
|
67
|
+
if (typeof paginatedData.total !== "undefined") totalNum = paginatedData.total;
|
|
55
68
|
else if (typeof paginatedData.totalCount !== "undefined")
|
|
56
|
-
|
|
69
|
+
totalNum = paginatedData.totalCount;
|
|
57
70
|
else if (typeof paginatedData.totalElements !== "undefined")
|
|
58
|
-
|
|
71
|
+
totalNum = paginatedData.totalElements;
|
|
72
|
+
}
|
|
73
|
+
if (typeof totalNum === "undefined" && response && typeof response === "object") {
|
|
74
|
+
const resp = response;
|
|
75
|
+
if (typeof resp.total !== "undefined") totalNum = resp.total;
|
|
76
|
+
else if (typeof resp.totalCount !== "undefined") totalNum = resp.totalCount;
|
|
77
|
+
else if (typeof resp.totalElements !== "undefined") totalNum = resp.totalElements;
|
|
78
|
+
}
|
|
79
|
+
if (typeof totalNum !== "undefined") {
|
|
80
|
+
total.value = totalNum;
|
|
81
|
+
}
|
|
82
|
+
let loadedSize = 0;
|
|
83
|
+
if (Array.isArray(pageData)) {
|
|
84
|
+
loadedSize = pageData.length;
|
|
85
|
+
} else if (pageData && typeof pageData === "object") {
|
|
86
|
+
const arrayKeys = Object.keys(pageData).filter(
|
|
87
|
+
(k) => Array.isArray(pageData[k])
|
|
88
|
+
);
|
|
89
|
+
if (arrayKeys.length > 0) {
|
|
90
|
+
const preferredKey = arrayKeys.find((k) => ["list", "data", "items"].includes(k));
|
|
91
|
+
if (preferredKey) {
|
|
92
|
+
loadedSize = pageData[preferredKey].length;
|
|
93
|
+
} else {
|
|
94
|
+
loadedSize = pageData[arrayKeys[0]].length;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
59
97
|
}
|
|
98
|
+
lastLoadedPageSize.value = loadedSize;
|
|
60
99
|
if (isRefresh) {
|
|
61
100
|
data.value = pageData;
|
|
101
|
+
lastRefreshTime = Date.now();
|
|
62
102
|
} else {
|
|
63
103
|
const oldData = data.value;
|
|
64
104
|
if (Array.isArray(oldData) && Array.isArray(pageData)) {
|
|
65
105
|
data.value = [...oldData, ...pageData];
|
|
106
|
+
} else if (oldData && typeof oldData === "object" && pageData && typeof pageData === "object") {
|
|
107
|
+
const merged = { ...pageData };
|
|
108
|
+
for (const key of Object.keys(pageData)) {
|
|
109
|
+
const oldValue = oldData[key];
|
|
110
|
+
const newValue = pageData[key];
|
|
111
|
+
if (Array.isArray(oldValue) && Array.isArray(newValue)) {
|
|
112
|
+
merged[key] = [...oldValue, ...newValue];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
data.value = merged;
|
|
66
116
|
} else {
|
|
67
117
|
data.value = pageData;
|
|
68
118
|
}
|
|
@@ -81,6 +131,7 @@ export function useLoadMore(service, options = {}) {
|
|
|
81
131
|
};
|
|
82
132
|
const loadMore = async () => {
|
|
83
133
|
if (noMore.value || loadingMore.value) return;
|
|
134
|
+
if (Date.now() - lastRefreshTime < 100) return;
|
|
84
135
|
await loadData(current.value + 1, false);
|
|
85
136
|
};
|
|
86
137
|
const reload = async () => {
|
|
@@ -117,10 +168,10 @@ export function useLoadMore(service, options = {}) {
|
|
|
117
168
|
if (!manual) {
|
|
118
169
|
if (getCurrentInstance()) {
|
|
119
170
|
onMounted(() => {
|
|
120
|
-
loadData(current.value,
|
|
171
|
+
loadData(current.value, true);
|
|
121
172
|
});
|
|
122
173
|
} else {
|
|
123
|
-
loadData(current.value,
|
|
174
|
+
loadData(current.value, true);
|
|
124
175
|
}
|
|
125
176
|
}
|
|
126
177
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yh-ui/request",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.56",
|
|
4
4
|
"description": "YH-UI HTTP request hooks - Enterprise-grade request management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"postpack": "node ../../scripts/prepare-package-manifest.mjs restore"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@yh-ui/utils": "^1.0.
|
|
35
|
+
"@yh-ui/utils": "^1.0.56"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"vue": "^3.5.35",
|