@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.
@@ -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
- return current.value >= totalPages.value && total.value > 0;
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) refreshing.value = true;
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.slice(2);
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") total.value = paginatedData.total;else if (typeof paginatedData.totalCount !== "undefined") total.value = paginatedData.totalCount;else if (typeof paginatedData.totalElements !== "undefined") total.value = paginatedData.totalElements;
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, false);
165
+ loadData(current.value, true);
117
166
  });
118
167
  } else {
119
- loadData(current.value, false);
168
+ loadData(current.value, true);
120
169
  }
121
170
  }
122
171
  return {
@@ -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
- return current.value >= totalPages.value && total.value > 0;
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) refreshing.value = true;
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.slice(2);
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") total.value = paginatedData.total;
67
+ if (typeof paginatedData.total !== "undefined") totalNum = paginatedData.total;
55
68
  else if (typeof paginatedData.totalCount !== "undefined")
56
- total.value = paginatedData.totalCount;
69
+ totalNum = paginatedData.totalCount;
57
70
  else if (typeof paginatedData.totalElements !== "undefined")
58
- total.value = paginatedData.totalElements;
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, false);
171
+ loadData(current.value, true);
121
172
  });
122
173
  } else {
123
- loadData(current.value, false);
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.55",
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.55"
35
+ "@yh-ui/utils": "^1.0.56"
36
36
  },
37
37
  "devDependencies": {
38
38
  "vue": "^3.5.35",