@open-mercato/core 0.6.8-develop.7029.1.a1bb3363af → 0.6.8-develop.7031.1.005201cd70

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.
Files changed (236) hide show
  1. package/dist/modules/api_keys/backend/api-keys/page.js +3 -1
  2. package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
  3. package/dist/modules/attachments/components/AttachmentLibrary.js +2 -0
  4. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  5. package/dist/modules/audit_logs/backend/audit-logs/page.js +6 -0
  6. package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
  7. package/dist/modules/auth/backend/roles/page.js +3 -1
  8. package/dist/modules/auth/backend/roles/page.js.map +2 -2
  9. package/dist/modules/auth/backend/users/page.js +2 -1
  10. package/dist/modules/auth/backend/users/page.js.map +2 -2
  11. package/dist/modules/business_rules/backend/logs/page.js +3 -1
  12. package/dist/modules/business_rules/backend/logs/page.js.map +2 -2
  13. package/dist/modules/business_rules/backend/rules/page.js +3 -1
  14. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  15. package/dist/modules/business_rules/backend/sets/page.js +3 -1
  16. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  17. package/dist/modules/catalog/ai-agents.js +1 -1
  18. package/dist/modules/catalog/ai-agents.js.map +1 -1
  19. package/dist/modules/catalog/ai-tools/merchandising-pack.js +2 -2
  20. package/dist/modules/catalog/ai-tools/merchandising-pack.js.map +2 -2
  21. package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js +5 -2
  22. package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
  23. package/dist/modules/catalog/components/categories/CategoriesDataTable.js +2 -0
  24. package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
  25. package/dist/modules/catalog/components/products/ProductsDataTable.js +7 -1
  26. package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
  27. package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js +2 -0
  28. package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js.map +2 -2
  29. package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +3 -0
  30. package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
  31. package/dist/modules/configs/lib/system-status.js +9 -0
  32. package/dist/modules/configs/lib/system-status.js.map +2 -2
  33. package/dist/modules/currencies/backend/currencies/page.js +3 -1
  34. package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
  35. package/dist/modules/currencies/backend/exchange-rates/page.js +3 -1
  36. package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
  37. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +3 -1
  38. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
  39. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +3 -1
  40. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
  41. package/dist/modules/customers/ai-tools/companies-pack.js +4 -1
  42. package/dist/modules/customers/ai-tools/companies-pack.js.map +2 -2
  43. package/dist/modules/customers/ai-tools/deals-pack.js +4 -1
  44. package/dist/modules/customers/ai-tools/deals-pack.js.map +2 -2
  45. package/dist/modules/customers/ai-tools/people-pack.js +4 -1
  46. package/dist/modules/customers/ai-tools/people-pack.js.map +2 -2
  47. package/dist/modules/customers/api/deals/map/route.js +2 -1
  48. package/dist/modules/customers/api/deals/map/route.js.map +2 -2
  49. package/dist/modules/customers/backend/customers/companies/page.js +3 -1
  50. package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
  51. package/dist/modules/customers/backend/customers/deals/page.js +5 -2
  52. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  53. package/dist/modules/customers/backend/customers/people/page.js +3 -1
  54. package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
  55. package/dist/modules/customers/components/CustomerTodosTable.js +1 -0
  56. package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
  57. package/dist/modules/data_sync/backend/data-sync/page.js +3 -1
  58. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  59. package/dist/modules/devices/backend/devices/page.js +3 -1
  60. package/dist/modules/devices/backend/devices/page.js.map +2 -2
  61. package/dist/modules/directory/backend/directory/organizations/page.js +2 -1
  62. package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
  63. package/dist/modules/directory/backend/directory/tenants/page.js +2 -1
  64. package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
  65. package/dist/modules/entities/api/records.js +4 -2
  66. package/dist/modules/entities/api/records.js.map +2 -2
  67. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +3 -1
  68. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
  69. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +3 -0
  70. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +2 -2
  71. package/dist/modules/eudr/backend/eudr/plots/page.js +3 -0
  72. package/dist/modules/eudr/backend/eudr/plots/page.js.map +2 -2
  73. package/dist/modules/eudr/backend/eudr/product-mappings/page.js +3 -0
  74. package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +2 -2
  75. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +3 -0
  76. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +2 -2
  77. package/dist/modules/eudr/backend/eudr/statements/page.js +3 -0
  78. package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
  79. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +1 -0
  80. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
  81. package/dist/modules/feature_toggles/components/OverridesTable.js +1 -0
  82. package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
  83. package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +3 -0
  84. package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
  85. package/dist/modules/inbox_ops/backend/inbox-ops/page.js +3 -0
  86. package/dist/modules/inbox_ops/backend/inbox-ops/page.js.map +2 -2
  87. package/dist/modules/messages/components/MessagesInboxPageClient.js +4 -1
  88. package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
  89. package/dist/modules/payment_gateways/backend/payment-gateways/page.js +3 -1
  90. package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
  91. package/dist/modules/planner/backend/planner/availability-rulesets/page.js +3 -0
  92. package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
  93. package/dist/modules/push_notifications/backend/push_notifications/page.js +3 -1
  94. package/dist/modules/push_notifications/backend/push_notifications/page.js.map +2 -2
  95. package/dist/modules/query_index/lib/engine.js +108 -48
  96. package/dist/modules/query_index/lib/engine.js.map +2 -2
  97. package/dist/modules/resources/backend/resources/resource-types/page.js +3 -1
  98. package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
  99. package/dist/modules/resources/backend/resources/resources/page.js +3 -1
  100. package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
  101. package/dist/modules/sales/backend/sales/channels/offers/page.js +3 -0
  102. package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
  103. package/dist/modules/sales/backend/sales/channels/page.js +3 -0
  104. package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
  105. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +3 -0
  106. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
  107. package/dist/modules/sales/components/documents/SalesDocumentsTable.js +4 -0
  108. package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
  109. package/dist/modules/staff/backend/staff/leave-requests/page.js +3 -0
  110. package/dist/modules/staff/backend/staff/leave-requests/page.js.map +2 -2
  111. package/dist/modules/staff/backend/staff/my-leave-requests/page.js +3 -0
  112. package/dist/modules/staff/backend/staff/my-leave-requests/page.js.map +2 -2
  113. package/dist/modules/staff/backend/staff/team-members/page.js +3 -0
  114. package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
  115. package/dist/modules/staff/backend/staff/team-roles/page.js +3 -0
  116. package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
  117. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +3 -0
  118. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
  119. package/dist/modules/staff/backend/staff/teams/page.js +3 -0
  120. package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
  121. package/dist/modules/staff/backend/staff/timesheets/projects/page.js +3 -0
  122. package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
  123. package/dist/modules/warranty_claims/backend/page.js +3 -0
  124. package/dist/modules/warranty_claims/backend/page.js.map +2 -2
  125. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +3 -0
  126. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +2 -2
  127. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +3 -0
  128. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +2 -2
  129. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +3 -0
  130. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +2 -2
  131. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +3 -0
  132. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +2 -2
  133. package/dist/modules/wms/commands/inventory-actions.js +3 -0
  134. package/dist/modules/wms/commands/inventory-actions.js.map +2 -2
  135. package/dist/modules/wms/components/backend/WmsConfigurationPage.js +4 -0
  136. package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +2 -2
  137. package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +1 -0
  138. package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
  139. package/dist/modules/wms/components/backend/WmsLotsListPage.js +1 -0
  140. package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
  141. package/dist/modules/wms/components/backend/inventoryMutationLoaders.js +27 -20
  142. package/dist/modules/wms/components/backend/inventoryMutationLoaders.js.map +2 -2
  143. package/dist/modules/workflows/backend/definitions/page.js +3 -1
  144. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  145. package/dist/modules/workflows/backend/events/page.js +3 -1
  146. package/dist/modules/workflows/backend/events/page.js.map +2 -2
  147. package/dist/modules/workflows/backend/instances/page.js +3 -1
  148. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  149. package/dist/modules/workflows/backend/tasks/page.js +3 -1
  150. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  151. package/package.json +7 -7
  152. package/src/modules/api_keys/backend/api-keys/page.tsx +4 -1
  153. package/src/modules/attachments/components/AttachmentLibrary.tsx +3 -0
  154. package/src/modules/audit_logs/backend/audit-logs/page.tsx +8 -0
  155. package/src/modules/auth/backend/roles/page.tsx +4 -2
  156. package/src/modules/auth/backend/users/page.tsx +3 -2
  157. package/src/modules/business_rules/backend/logs/page.tsx +4 -1
  158. package/src/modules/business_rules/backend/rules/page.tsx +4 -1
  159. package/src/modules/business_rules/backend/sets/page.tsx +4 -1
  160. package/src/modules/catalog/ai-agents.ts +1 -1
  161. package/src/modules/catalog/ai-tools/merchandising-pack.ts +2 -2
  162. package/src/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.tsx +12 -5
  163. package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +3 -0
  164. package/src/modules/catalog/components/products/ProductsDataTable.tsx +7 -0
  165. package/src/modules/catalog/i18n/de.json +1 -0
  166. package/src/modules/catalog/i18n/en.json +1 -0
  167. package/src/modules/catalog/i18n/es.json +1 -0
  168. package/src/modules/catalog/i18n/ko.json +1 -0
  169. package/src/modules/catalog/i18n/pl.json +1 -0
  170. package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx +4 -0
  171. package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +4 -0
  172. package/src/modules/configs/i18n/de.json +2 -0
  173. package/src/modules/configs/i18n/en.json +2 -0
  174. package/src/modules/configs/i18n/es.json +2 -0
  175. package/src/modules/configs/i18n/ko.json +2 -0
  176. package/src/modules/configs/i18n/pl.json +2 -0
  177. package/src/modules/configs/lib/system-status.ts +9 -0
  178. package/src/modules/currencies/backend/currencies/page.tsx +4 -1
  179. package/src/modules/currencies/backend/exchange-rates/page.tsx +4 -1
  180. package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +4 -1
  181. package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +4 -1
  182. package/src/modules/customers/ai-tools/companies-pack.ts +4 -1
  183. package/src/modules/customers/ai-tools/deals-pack.ts +4 -1
  184. package/src/modules/customers/ai-tools/people-pack.ts +4 -1
  185. package/src/modules/customers/api/deals/map/route.ts +1 -0
  186. package/src/modules/customers/backend/customers/companies/page.tsx +4 -1
  187. package/src/modules/customers/backend/customers/deals/page.tsx +8 -2
  188. package/src/modules/customers/backend/customers/people/page.tsx +4 -1
  189. package/src/modules/customers/components/CustomerTodosTable.tsx +2 -0
  190. package/src/modules/data_sync/backend/data-sync/page.tsx +4 -1
  191. package/src/modules/devices/backend/devices/page.tsx +4 -1
  192. package/src/modules/directory/backend/directory/organizations/page.tsx +3 -1
  193. package/src/modules/directory/backend/directory/tenants/page.tsx +3 -1
  194. package/src/modules/entities/api/records.ts +2 -0
  195. package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +4 -1
  196. package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +4 -0
  197. package/src/modules/eudr/backend/eudr/plots/page.tsx +4 -0
  198. package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +4 -0
  199. package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +4 -0
  200. package/src/modules/eudr/backend/eudr/statements/page.tsx +4 -0
  201. package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +2 -1
  202. package/src/modules/feature_toggles/components/OverridesTable.tsx +2 -1
  203. package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +4 -0
  204. package/src/modules/inbox_ops/backend/inbox-ops/page.tsx +4 -0
  205. package/src/modules/messages/components/MessagesInboxPageClient.tsx +4 -0
  206. package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +4 -1
  207. package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +4 -0
  208. package/src/modules/push_notifications/backend/push_notifications/page.tsx +4 -1
  209. package/src/modules/query_index/lib/engine.ts +156 -53
  210. package/src/modules/resources/backend/resources/resource-types/page.tsx +4 -1
  211. package/src/modules/resources/backend/resources/resources/page.tsx +4 -1
  212. package/src/modules/sales/backend/sales/channels/offers/page.tsx +4 -0
  213. package/src/modules/sales/backend/sales/channels/page.tsx +4 -0
  214. package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +4 -0
  215. package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +5 -0
  216. package/src/modules/staff/backend/staff/leave-requests/page.tsx +4 -0
  217. package/src/modules/staff/backend/staff/my-leave-requests/page.tsx +4 -0
  218. package/src/modules/staff/backend/staff/team-members/page.tsx +6 -0
  219. package/src/modules/staff/backend/staff/team-roles/page.tsx +4 -0
  220. package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +4 -0
  221. package/src/modules/staff/backend/staff/teams/page.tsx +4 -0
  222. package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +4 -0
  223. package/src/modules/warranty_claims/backend/page.tsx +4 -0
  224. package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +4 -0
  225. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +4 -0
  226. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +4 -0
  227. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +4 -0
  228. package/src/modules/wms/commands/inventory-actions.ts +3 -0
  229. package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +5 -0
  230. package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +2 -0
  231. package/src/modules/wms/components/backend/WmsLotsListPage.tsx +2 -0
  232. package/src/modules/wms/components/backend/inventoryMutationLoaders.ts +36 -20
  233. package/src/modules/workflows/backend/definitions/page.tsx +4 -1
  234. package/src/modules/workflows/backend/events/page.tsx +4 -1
  235. package/src/modules/workflows/backend/instances/page.tsx +4 -1
  236. package/src/modules/workflows/backend/tasks/page.tsx +4 -1
@@ -60,6 +60,7 @@ type TeamMembersResponse = {
60
60
  items?: Array<Record<string, unknown>>
61
61
  total?: number
62
62
  totalPages?: number
63
+ totalIsCapped?: boolean
63
64
  }
64
65
 
65
66
  export default function StaffTeamEditPage({ params }: { params?: { id?: string } }) {
@@ -76,6 +77,7 @@ export default function StaffTeamEditPage({ params }: { params?: { id?: string }
76
77
  const [memberRows, setMemberRows] = React.useState<TeamMemberRow[]>([])
77
78
  const [memberPage, setMemberPage] = React.useState(1)
78
79
  const [memberTotal, setMemberTotal] = React.useState(0)
80
+ const [memberTotalIsCapped, setMemberTotalIsCapped] = React.useState(false)
79
81
  const [memberTotalPages, setMemberTotalPages] = React.useState(1)
80
82
  const [memberSorting, setMemberSorting] = React.useState<SortingState>([{ id: 'displayName', desc: false }])
81
83
  const [memberSearch, setMemberSearch] = React.useState('')
@@ -263,6 +265,7 @@ export default function StaffTeamEditPage({ params }: { params?: { id?: string }
263
265
  const items = Array.isArray(payload.items) ? payload.items : []
264
266
  setMemberRows(items.map(mapApiTeamMember))
265
267
  setMemberTotal(typeof payload.total === 'number' ? payload.total : items.length)
268
+ setMemberTotalIsCapped(payload.totalIsCapped === true)
266
269
  setMemberTotalPages(
267
270
  typeof payload.totalPages === 'number'
268
271
  ? payload.totalPages
@@ -434,6 +437,7 @@ export default function StaffTeamEditPage({ params }: { params?: { id?: string }
434
437
  pageSize: TEAM_MEMBERS_PAGE_SIZE,
435
438
  total: memberTotal,
436
439
  totalPages: memberTotalPages,
440
+ totalIsCapped: memberTotalIsCapped,
437
441
  onPageChange: setMemberPage,
438
442
  }}
439
443
  rowActions={(row) => (
@@ -41,6 +41,7 @@ type TeamsResponse = {
41
41
  items?: Array<Record<string, unknown>>
42
42
  total?: number
43
43
  totalPages?: number
44
+ totalIsCapped?: boolean
44
45
  }
45
46
 
46
47
  export default function StaffTeamsPage() {
@@ -52,6 +53,7 @@ export default function StaffTeamsPage() {
52
53
  const [page, setPage] = React.useState(1)
53
54
  const [total, setTotal] = React.useState(0)
54
55
  const [totalPages, setTotalPages] = React.useState(1)
56
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
55
57
  const [sorting, setSorting] = React.useState<SortingState>([{ id: 'name', desc: false }])
56
58
  const [search, setSearch] = React.useState('')
57
59
  const [isLoading, setIsLoading] = React.useState(true)
@@ -176,6 +178,7 @@ export default function StaffTeamsPage() {
176
178
  setRows(items.map(mapApiTeam))
177
179
  setTotal(typeof payload.total === 'number' ? payload.total : items.length)
178
180
  setTotalPages(typeof payload.totalPages === 'number' ? payload.totalPages : Math.max(1, Math.ceil(items.length / PAGE_SIZE)))
181
+ setTotalIsCapped(payload?.totalIsCapped === true)
179
182
  } catch (error) {
180
183
  logger.error('staff.teams.list', { err: error })
181
184
  flash(labels.errors.load, 'error')
@@ -261,6 +264,7 @@ export default function StaffTeamsPage() {
261
264
  pageSize: PAGE_SIZE,
262
265
  total,
263
266
  totalPages,
267
+ totalIsCapped,
264
268
  onPageChange: setPage,
265
269
  }}
266
270
  rowActions={(row) => (
@@ -79,6 +79,7 @@ type ProjectsResponse = {
79
79
  items?: Array<Record<string, unknown>>
80
80
  total?: number
81
81
  totalPages?: number
82
+ totalIsCapped?: boolean
82
83
  }
83
84
 
84
85
  type KpisResponse = PmKpis | CollabKpis
@@ -186,6 +187,7 @@ export default function TimesheetProjectsPage() {
186
187
  const [page, setPage] = React.useState(1)
187
188
  const [total, setTotal] = React.useState(0)
188
189
  const [totalPages, setTotalPages] = React.useState(1)
190
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
189
191
  const [sorting, setSorting] = React.useState<SortingState>([{ id: 'updatedAt', desc: true }])
190
192
  const [search, setSearch] = React.useState('')
191
193
  const [filterValues, setFilterValues] = React.useState<FilterValues>({})
@@ -404,6 +406,7 @@ export default function TimesheetProjectsPage() {
404
406
  ? payload.totalPages
405
407
  : Math.max(1, Math.ceil(items.length / PAGE_SIZE)),
406
408
  )
409
+ setTotalIsCapped(payload.totalIsCapped === true)
407
410
  } catch (error) {
408
411
  logger.error('staff.timesheets.projects.list', { err: error })
409
412
  flash(labels.errors.load, 'error')
@@ -740,6 +743,7 @@ export default function TimesheetProjectsPage() {
740
743
  pageSize: PAGE_SIZE,
741
744
  total,
742
745
  totalPages,
746
+ totalIsCapped,
743
747
  onPageChange: setPage,
744
748
  }}
745
749
  rowActions={(row) => (
@@ -71,6 +71,7 @@ type ClaimsResponse = {
71
71
  items?: ClaimRow[]
72
72
  total?: number
73
73
  totalPages?: number
74
+ totalIsCapped?: boolean
74
75
  page?: number
75
76
  pageSize?: number
76
77
  error?: string
@@ -421,6 +422,7 @@ export default function WarrantyClaimsPage() {
421
422
  const [page, setPage] = React.useState(initialUrlState.page)
422
423
  const [total, setTotal] = React.useState(0)
423
424
  const [totalPages, setTotalPages] = React.useState(1)
425
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
424
426
  const [tabCounts, setTabCounts] = React.useState<ClaimsTabCounts>({})
425
427
  const [search, setSearch] = React.useState(initialUrlState.search)
426
428
  const [filterValues, setFilterValues] = React.useState<FilterValues>(initialUrlState.filterValues)
@@ -508,6 +510,7 @@ export default function WarrantyClaimsPage() {
508
510
  setRows(items.map(normalizeClaimRow).filter((row): row is ClaimRow => row !== null))
509
511
  setTotal(typeof call.result?.total === 'number' ? call.result.total : items.length)
510
512
  setTotalPages(typeof call.result?.totalPages === 'number' ? call.result.totalPages : 1)
513
+ setTotalIsCapped(call.result?.totalIsCapped === true)
511
514
  } catch (error) {
512
515
  if (!cancelled) {
513
516
  const message = error instanceof Error ? error.message : t('warranty_claims.list.error.load')
@@ -1255,6 +1258,7 @@ export default function WarrantyClaimsPage() {
1255
1258
  pageSize: PAGE_SIZE,
1256
1259
  total,
1257
1260
  totalPages,
1261
+ totalIsCapped,
1258
1262
  onPageChange: setPage,
1259
1263
  }}
1260
1264
  />
@@ -31,6 +31,7 @@ type RegistrationsResponse = {
31
31
  items?: unknown[]
32
32
  total?: number
33
33
  totalPages?: number
34
+ totalIsCapped?: boolean
34
35
  error?: string
35
36
  }
36
37
 
@@ -141,6 +142,7 @@ export default function WarrantyClaimRegistrationsPage() {
141
142
  const [page, setPage] = React.useState(1)
142
143
  const [total, setTotal] = React.useState(0)
143
144
  const [totalPages, setTotalPages] = React.useState(1)
145
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
144
146
  const [tabCounts, setTabCounts] = React.useState<Partial<Record<RegistrationSegment, number>>>({})
145
147
  const [search, setSearch] = React.useState('')
146
148
  const [filterValues, setFilterValues] = React.useState<FilterValues>({})
@@ -218,6 +220,7 @@ export default function WarrantyClaimRegistrationsPage() {
218
220
  setRows(items.map(normalizeRegistration).filter((row): row is RegistrationRecord => row !== null))
219
221
  setTotal(typeof call.result?.total === 'number' ? call.result.total : items.length)
220
222
  setTotalPages(typeof call.result?.totalPages === 'number' ? call.result.totalPages : 1)
223
+ setTotalIsCapped(call.result?.totalIsCapped === true)
221
224
  } catch (error) {
222
225
  if (!cancelled) {
223
226
  const message = error instanceof Error
@@ -544,6 +547,7 @@ export default function WarrantyClaimRegistrationsPage() {
544
547
  pageSize: PAGE_SIZE,
545
548
  total,
546
549
  totalPages,
550
+ totalIsCapped,
547
551
  onPageChange: setPage,
548
552
  }}
549
553
  />
@@ -40,6 +40,7 @@ type TroubleshootingGuidesResponse = {
40
40
  items?: unknown[]
41
41
  total?: number
42
42
  totalPages?: number
43
+ totalIsCapped?: boolean
43
44
  error?: string
44
45
  }
45
46
 
@@ -70,6 +71,7 @@ export default function WarrantyTroubleshootingGuidesPage() {
70
71
  const [page, setPage] = React.useState(1)
71
72
  const [total, setTotal] = React.useState(0)
72
73
  const [totalPages, setTotalPages] = React.useState(1)
74
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
73
75
  const [tabCounts, setTabCounts] = React.useState<Partial<Record<GuideSegment, number>>>({})
74
76
  const [search, setSearch] = React.useState('')
75
77
  const [filterValues, setFilterValues] = React.useState<FilterValues>({})
@@ -155,6 +157,7 @@ export default function WarrantyTroubleshootingGuidesPage() {
155
157
  setRows(items.map(normalizeTroubleshootingGuide).filter((row): row is TroubleshootingGuideRecord => row !== null))
156
158
  setTotal(typeof call.result?.total === 'number' ? call.result.total : items.length)
157
159
  setTotalPages(typeof call.result?.totalPages === 'number' ? call.result.totalPages : 1)
160
+ setTotalIsCapped(call.result?.totalIsCapped === true)
158
161
  } catch (error) {
159
162
  if (!cancelled) {
160
163
  const message = error instanceof Error
@@ -466,6 +469,7 @@ export default function WarrantyTroubleshootingGuidesPage() {
466
469
  pageSize: PAGE_SIZE,
467
470
  total,
468
471
  totalPages,
472
+ totalIsCapped,
469
473
  onPageChange: setPage,
470
474
  }}
471
475
  />
@@ -33,6 +33,7 @@ type VendorPoliciesResponse = {
33
33
  items?: unknown[]
34
34
  total?: number
35
35
  totalPages?: number
36
+ totalIsCapped?: boolean
36
37
  error?: string
37
38
  }
38
39
 
@@ -78,6 +79,7 @@ export default function WarrantyVendorPoliciesPage() {
78
79
  const [page, setPage] = React.useState(1)
79
80
  const [total, setTotal] = React.useState(0)
80
81
  const [totalPages, setTotalPages] = React.useState(1)
82
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
81
83
  const [tabCounts, setTabCounts] = React.useState<Partial<Record<VendorPolicySegment, number>>>({})
82
84
  const [search, setSearch] = React.useState('')
83
85
  const [filterValues, setFilterValues] = React.useState<FilterValues>({})
@@ -163,6 +165,7 @@ export default function WarrantyVendorPoliciesPage() {
163
165
  setRows(items.map(normalizeVendorPolicy).filter((row): row is VendorPolicyRecord => row !== null))
164
166
  setTotal(typeof call.result?.total === 'number' ? call.result.total : items.length)
165
167
  setTotalPages(typeof call.result?.totalPages === 'number' ? call.result.totalPages : 1)
168
+ setTotalIsCapped(call.result?.totalIsCapped === true)
166
169
  } catch (error) {
167
170
  if (!cancelled) {
168
171
  const message = error instanceof Error
@@ -495,6 +498,7 @@ export default function WarrantyVendorPoliciesPage() {
495
498
  pageSize: PAGE_SIZE,
496
499
  total,
497
500
  totalPages,
501
+ totalIsCapped,
498
502
  onPageChange: setPage,
499
503
  }}
500
504
  />
@@ -39,6 +39,7 @@ type PortalClaimsResponse = {
39
39
  page: number
40
40
  pageSize: number
41
41
  totalPages: number
42
+ totalIsCapped?: boolean
42
43
  }
43
44
 
44
45
  function formatDate(value: string | null, fallback: string, locale: string): string {
@@ -63,6 +64,7 @@ export default function WarrantyClaimsPortalListPage({ params }: Props) {
63
64
  const [pageSize, setPageSize] = React.useState(20)
64
65
  const [total, setTotal] = React.useState(0)
65
66
  const [totalPages, setTotalPages] = React.useState(1)
67
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
66
68
  const [isLoading, setIsLoading] = React.useState(true)
67
69
  const [error, setError] = React.useState<string | null>(null)
68
70
  const [search, setSearch] = React.useState('')
@@ -102,6 +104,7 @@ export default function WarrantyClaimsPortalListPage({ params }: Props) {
102
104
  setRows(res.result.items)
103
105
  setTotal(res.result.total)
104
106
  setTotalPages(res.result.totalPages)
107
+ setTotalIsCapped(res.result.totalIsCapped === true)
105
108
  })
106
109
  .catch(() => {
107
110
  if (!cancelled) {
@@ -271,6 +274,7 @@ export default function WarrantyClaimsPortalListPage({ params }: Props) {
271
274
  pageSize,
272
275
  total,
273
276
  totalPages,
277
+ totalIsCapped,
274
278
  onPageChange: setPage,
275
279
  onPageSizeChange: (nextPageSize) => {
276
280
  setPageSize(nextPageSize)
@@ -1197,6 +1197,9 @@ const allocateInventoryReservationCommand: CommandHandler<InventoryReservationAl
1197
1197
  const result = await runInTransaction(em, async (trx) => {
1198
1198
  const scope = resolveScope(ctx, input)
1199
1199
  const reservation = await requireReservation(trx, ctx, input.reservationId, scope, true)
1200
+ if (reservation.status !== 'active') {
1201
+ throw new CrudHttpError(409, { error: 'invalid_reservation_state' })
1202
+ }
1200
1203
  const metadata = extractReservationMetadata(reservation)
1201
1204
  if (metadata.allocationState === 'allocated') {
1202
1205
  return {
@@ -43,6 +43,7 @@ type PagedResponse<T> = {
43
43
  items: T[]
44
44
  total: number
45
45
  totalPages: number
46
+ totalIsCapped?: boolean
46
47
  page?: number
47
48
  pageSize?: number
48
49
  }
@@ -515,6 +516,7 @@ export function WarehouseSection({ viewAllHref }: ConfigSectionOptions = {}) {
515
516
  pageSize: 10,
516
517
  total: query.data?.total ?? 0,
517
518
  totalPages: query.data?.totalPages ?? 1,
519
+ totalIsCapped: query.data?.totalIsCapped === true,
518
520
  onPageChange: setPage,
519
521
  }}
520
522
  perspective={{ tableId: extensionPoints.hosts.warehousesTable.tableId }}
@@ -775,6 +777,7 @@ export function ZoneSection({ viewAllHref }: ConfigSectionOptions = {}) {
775
777
  pageSize: 10,
776
778
  total: query.data?.total ?? 0,
777
779
  totalPages: query.data?.totalPages ?? 1,
780
+ totalIsCapped: query.data?.totalIsCapped === true,
778
781
  onPageChange: setPage,
779
782
  }}
780
783
  perspective={{ tableId: extensionPoints.hosts.zonesTable.tableId }}
@@ -982,6 +985,7 @@ export function LocationSection({ viewAllHref }: ConfigSectionOptions = {}) {
982
985
  pageSize: 10,
983
986
  total: query.data?.total ?? 0,
984
987
  totalPages: query.data?.totalPages ?? 1,
988
+ totalIsCapped: query.data?.totalIsCapped === true,
985
989
  onPageChange: setPage,
986
990
  }}
987
991
  perspective={{ tableId: extensionPoints.hosts.locationsTable.tableId }}
@@ -1276,6 +1280,7 @@ export function InventoryProfilesSection() {
1276
1280
  pageSize: 10,
1277
1281
  total: query.data?.total ?? 0,
1278
1282
  totalPages: query.data?.totalPages ?? 1,
1283
+ totalIsCapped: query.data?.totalIsCapped === true,
1279
1284
  onPageChange: setPage,
1280
1285
  }}
1281
1286
  perspective={{ tableId: extensionPoints.hosts.inventoryProfilesTable.tableId }}
@@ -58,6 +58,7 @@ type PagedResponse<T> = {
58
58
  items: T[]
59
59
  total: number
60
60
  totalPages: number
61
+ totalIsCapped?: boolean
61
62
  }
62
63
 
63
64
  type InventoryBalanceRow = {
@@ -357,6 +358,7 @@ function InventoryDataTableSection<T extends RowData>({
357
358
  pageSize: 20,
358
359
  total: query.data?.total ?? 0,
359
360
  totalPages: query.data?.totalPages ?? 1,
361
+ totalIsCapped: query.data?.totalIsCapped === true,
360
362
  onPageChange: setPage,
361
363
  }}
362
364
  perspective={{ tableId }}
@@ -41,6 +41,7 @@ type PagedResponse<T> = {
41
41
  items: T[]
42
42
  total: number
43
43
  totalPages: number
44
+ totalIsCapped?: boolean
44
45
  }
45
46
 
46
47
  function parseExpiryWindow(value: string | null): ExpiryWindow | null {
@@ -280,6 +281,7 @@ export default function WmsLotsListPage() {
280
281
  pageSize: 25,
281
282
  total: lotsQuery.data.total,
282
283
  totalPages: lotsQuery.data.totalPages,
284
+ totalIsCapped: lotsQuery.data?.totalIsCapped === true,
283
285
  onPageChange: setPage,
284
286
  }}
285
287
  perspective={{ tableId: extensionPoints.hosts.lotsTable.tableId }}
@@ -321,21 +321,25 @@ export async function loadAllLocations(
321
321
  filters: { type?: string; search?: string },
322
322
  ): Promise<LocationListRow[]> {
323
323
  const items: LocationListRow[] = []
324
+ const pageSize = 100
324
325
  let page = 1
325
- let totalPages = 1
326
326
 
327
- while (page <= totalPages && page <= 10) {
327
+ // Short-page termination: `totalPages` derives from `total`, which is a
328
+ // display value that can be capped (OM_LIST_COUNT_CAP) — never a loop bound.
329
+ for (;;) {
328
330
  const params = buildQuery({
329
331
  page,
330
- pageSize: 100,
332
+ pageSize,
331
333
  warehouseId,
332
334
  type: filters.type,
333
335
  search: filters.search?.trim() || undefined,
334
336
  })
335
337
  const call = await apiCall<PagedResponse<LocationListRow>>(`/api/wms/locations?${params}`)
336
338
  if (!call.ok) break
337
- items.push(...(call.result?.items ?? []))
338
- totalPages = call.result?.totalPages ?? 1
339
+ const batch = call.result?.items ?? []
340
+ items.push(...batch)
341
+ if (batch.length < pageSize) break
342
+ if (page >= 10) break
339
343
  page += 1
340
344
  }
341
345
 
@@ -538,13 +542,15 @@ export async function fetchCycleCountScopeEstimate(input: {
538
542
  const binCount = scopedBinIds.size
539
543
 
540
544
  const variantIds = new Set<string>()
545
+ const pageSize = 100
541
546
  let page = 1
542
- let totalPages = 1
543
547
 
544
- while (page <= totalPages && page <= 10) {
548
+ // Short-page termination: `totalPages` derives from `total`, which is a
549
+ // display value that can be capped (OM_LIST_COUNT_CAP) — never a loop bound.
550
+ for (;;) {
545
551
  const params = buildQuery({
546
552
  page,
547
- pageSize: 100,
553
+ pageSize,
548
554
  warehouseId,
549
555
  })
550
556
  const call = await apiCall<PagedResponse<{ catalog_variant_id?: string | null; location_id?: string | null; quantity_on_hand?: string | number | null }>>(
@@ -554,7 +560,8 @@ export async function fetchCycleCountScopeEstimate(input: {
554
560
  throw new ScopeEstimateError()
555
561
  }
556
562
 
557
- for (const row of call.result?.items ?? []) {
563
+ const batch = call.result?.items ?? []
564
+ for (const row of batch) {
558
565
  const locationId = row.location_id?.trim()
559
566
  const variantId = row.catalog_variant_id?.trim()
560
567
  const onHand = Number(row.quantity_on_hand ?? 0)
@@ -563,7 +570,8 @@ export async function fetchCycleCountScopeEstimate(input: {
563
570
  variantIds.add(variantId)
564
571
  }
565
572
 
566
- totalPages = call.result?.totalPages ?? 1
573
+ if (batch.length < pageSize) break
574
+ if (page >= 10) break
567
575
  page += 1
568
576
  }
569
577
 
@@ -808,17 +816,20 @@ export async function buildCycleCountScopeQueue(input: {
808
816
  }
809
817
 
810
818
  const items: ScopeQueueItem[] = []
819
+ const pageSize = 100
811
820
  let page = 1
812
- let totalPages = 1
813
821
 
814
- while (page <= totalPages && page <= 20) {
815
- const params = buildQuery({ page, pageSize: 100, warehouseId })
822
+ // Short-page termination: `totalPages` derives from `total`, which is a
823
+ // display value that can be capped (OM_LIST_COUNT_CAP) never a loop bound.
824
+ for (;;) {
825
+ const params = buildQuery({ page, pageSize, warehouseId })
816
826
  const call = await apiCall<PagedResponse<BalanceRow>>(
817
827
  `/api/wms/inventory/balances?${params}`,
818
828
  )
819
829
  if (!call.ok) throw new ScopeQueueError()
820
830
 
821
- for (const row of call.result?.items ?? []) {
831
+ const batch = call.result?.items ?? []
832
+ for (const row of batch) {
822
833
  const locationId = row.location_id?.trim()
823
834
  const variantId = row.catalog_variant_id?.trim()
824
835
  const lotId = row.lot_id?.trim() || null
@@ -838,7 +849,8 @@ export async function buildCycleCountScopeQueue(input: {
838
849
  })
839
850
  }
840
851
 
841
- totalPages = call.result?.totalPages ?? 1
852
+ if (batch.length < pageSize) break
853
+ if (page >= 20) break
842
854
  page += 1
843
855
  }
844
856
 
@@ -900,8 +912,10 @@ async function fetchLocationTotalOnHand(input: {
900
912
  if (!locationId) return 0
901
913
  let sum = 0
902
914
  let page = 1
903
- let totalPages = 1
904
- do {
915
+ // Short-page termination: this sum is user-visible, and `totalPages` derives
916
+ // from `total`, which is a display value that can be capped
917
+ // (OM_LIST_COUNT_CAP) — never a loop bound.
918
+ for (;;) {
905
919
  const params = buildQuery({
906
920
  page,
907
921
  pageSize: LOCATION_TOTAL_ON_HAND_PAGE_SIZE,
@@ -912,13 +926,15 @@ async function fetchLocationTotalOnHand(input: {
912
926
  `/api/wms/inventory/balances?${params}`,
913
927
  )
914
928
  if (!call.ok) break
915
- for (const row of call.result?.items ?? []) {
929
+ const batch = call.result?.items ?? []
930
+ for (const row of batch) {
916
931
  const value = Number(row.quantity_on_hand ?? 0)
917
932
  if (Number.isFinite(value)) sum += value
918
933
  }
919
- totalPages = call.result?.totalPages ?? 1
934
+ if (batch.length < LOCATION_TOTAL_ON_HAND_PAGE_SIZE) break
935
+ if (page >= LOCATION_TOTAL_ON_HAND_MAX_PAGES) break
920
936
  page += 1
921
- } while (page <= totalPages && page <= LOCATION_TOTAL_ON_HAND_MAX_PAGES)
937
+ }
922
938
  return sum
923
939
  }
924
940
 
@@ -62,6 +62,7 @@ type DefinitionsResponse = {
62
62
  limit: number
63
63
  offset: number
64
64
  hasMore: boolean
65
+ totalIsCapped?: boolean
65
66
  }
66
67
  }
67
68
 
@@ -86,6 +87,7 @@ export default function WorkflowDefinitionsListPage() {
86
87
  const [pageSize] = React.useState(20)
87
88
  const [total, setTotal] = React.useState(0)
88
89
  const [totalPages, setTotalPages] = React.useState(1)
90
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
89
91
  const t = useT()
90
92
  const router = useRouter()
91
93
  const queryClient = useQueryClient()
@@ -119,6 +121,7 @@ export default function WorkflowDefinitionsListPage() {
119
121
  setTotal(response.pagination.total || 0)
120
122
  const calculatedPages = Math.ceil((response.pagination.total || 0) / pageSize)
121
123
  setTotalPages(calculatedPages || 1)
124
+ setTotalIsCapped(response.pagination?.totalIsCapped === true)
122
125
  }
123
126
 
124
127
  return response?.data || []
@@ -439,7 +442,7 @@ export default function WorkflowDefinitionsListPage() {
439
442
  createLabel={t('workflows.actions.create')}
440
443
  />
441
444
  )}
442
- pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}
445
+ pagination={{ page, pageSize, total, totalPages, totalIsCapped, onPageChange: setPage }}
443
446
  />
444
447
  <Dialog open={!!deleteTarget} onOpenChange={(open) => !open && setDeleteTarget(null)}>
445
448
  <DialogContent className="sm:max-w-md">
@@ -34,6 +34,7 @@ type EventsResponse = {
34
34
  page: number
35
35
  pageSize: number
36
36
  totalPages: number
37
+ totalIsCapped?: boolean
37
38
  }
38
39
 
39
40
  export default function WorkflowEventsPage() {
@@ -41,6 +42,7 @@ export default function WorkflowEventsPage() {
41
42
  const [pageSize] = React.useState(50)
42
43
  const [total, setTotal] = React.useState(0)
43
44
  const [totalPages, setTotalPages] = React.useState(1)
45
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
44
46
  const t = useT()
45
47
  const [filterValues, setFilterValues] = React.useState<FilterValues>({})
46
48
 
@@ -71,6 +73,7 @@ export default function WorkflowEventsPage() {
71
73
  if (response) {
72
74
  setTotal(response.total || 0)
73
75
  setTotalPages(response.totalPages || 1)
76
+ setTotalIsCapped(response?.totalIsCapped === true)
74
77
  }
75
78
 
76
79
  return response?.items || []
@@ -284,7 +287,7 @@ export default function WorkflowEventsPage() {
284
287
  onFiltersApply={handleFiltersApply}
285
288
  onFiltersClear={handleFiltersClear}
286
289
  isLoading={isLoading}
287
- pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}
290
+ pagination={{ page, pageSize, total, totalPages, totalIsCapped, onPageChange: setPage }}
288
291
  actions={
289
292
  <Button
290
293
  variant="outline"
@@ -42,6 +42,7 @@ type InstancesResponse = {
42
42
  limit: number
43
43
  offset: number
44
44
  hasMore: boolean
45
+ totalIsCapped?: boolean
45
46
  }
46
47
  }
47
48
 
@@ -50,6 +51,7 @@ export default function WorkflowInstancesListPage() {
50
51
  const [pageSize] = React.useState(50)
51
52
  const [total, setTotal] = React.useState(0)
52
53
  const [totalPages, setTotalPages] = React.useState(1)
54
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
53
55
  const t = useT()
54
56
  const router = useRouter()
55
57
  const queryClient = useQueryClient()
@@ -83,6 +85,7 @@ export default function WorkflowInstancesListPage() {
83
85
  setTotal(response.pagination.total || 0)
84
86
  const calculatedPages = Math.ceil((response.pagination.total || 0) / pageSize)
85
87
  setTotalPages(calculatedPages || 1)
88
+ setTotalIsCapped(response.pagination?.totalIsCapped === true)
86
89
  }
87
90
 
88
91
  return response?.data || []
@@ -335,7 +338,7 @@ export default function WorkflowInstancesListPage() {
335
338
  perspective={{
336
339
  tableId: extensionPoints.hosts.instancesTable.tableId,
337
340
  }}
338
- pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}
341
+ pagination={{ page, pageSize, total, totalPages, totalIsCapped, onPageChange: setPage }}
339
342
  />
340
343
  </PageBody>
341
344
  {ConfirmDialogElement}
@@ -50,6 +50,7 @@ type TasksResponse = {
50
50
  limit: number
51
51
  offset: number
52
52
  hasMore: boolean
53
+ totalIsCapped?: boolean
53
54
  }
54
55
  }
55
56
 
@@ -58,6 +59,7 @@ export default function UserTasksListPage() {
58
59
  const [pageSize] = React.useState(50)
59
60
  const [total, setTotal] = React.useState(0)
60
61
  const [totalPages, setTotalPages] = React.useState(1)
62
+ const [totalIsCapped, setTotalIsCapped] = React.useState(false)
61
63
  const t = useT()
62
64
  const router = useRouter()
63
65
  const queryClient = useQueryClient()
@@ -91,6 +93,7 @@ export default function UserTasksListPage() {
91
93
  setTotal(response.pagination.total || 0)
92
94
  const calculatedPages = Math.ceil((response.pagination.total || 0) / pageSize)
93
95
  setTotalPages(calculatedPages || 1)
96
+ setTotalIsCapped(response.pagination?.totalIsCapped === true)
94
97
  }
95
98
 
96
99
  return response?.data || []
@@ -344,7 +347,7 @@ export default function UserTasksListPage() {
344
347
  perspective={{
345
348
  tableId: extensionPoints.hosts.tasksTable.tableId,
346
349
  }}
347
- pagination={{ page, pageSize, total, totalPages, onPageChange: setPage }}
350
+ pagination={{ page, pageSize, total, totalPages, totalIsCapped, onPageChange: setPage }}
348
351
  />
349
352
  </PageBody>
350
353
  {ConfirmDialogElement}