@fluid-app/portal-sdk 0.1.191 → 0.1.193

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 (89) hide show
  1. package/dist/{ContactsScreen-Dw9G8Q3n.mjs → ContactsScreen-BtBNMZzG.mjs} +68 -71
  2. package/dist/ContactsScreen-BtBNMZzG.mjs.map +1 -0
  3. package/dist/{ContactsScreen-Euvu6Y8H.cjs → ContactsScreen-Cheiwaxn.cjs} +3 -4
  4. package/dist/{ContactsScreen-D2rOJ9Ra.cjs → ContactsScreen-DvohvoOE.cjs} +67 -70
  5. package/dist/ContactsScreen-DvohvoOE.cjs.map +1 -0
  6. package/dist/{FluidProvider-Ci3tUVMM.cjs → FluidProvider-BWBEdHQQ.cjs} +2 -2
  7. package/dist/{FluidProvider-Ci3tUVMM.cjs.map → FluidProvider-BWBEdHQQ.cjs.map} +1 -1
  8. package/dist/{FluidProvider-BPwrZY_X.mjs → FluidProvider-dp9q6oRM.mjs} +2 -2
  9. package/dist/{FluidProvider-BPwrZY_X.mjs.map → FluidProvider-dp9q6oRM.mjs.map} +1 -1
  10. package/dist/InfiniteScrollSentinel-CU801UfD.cjs +36 -0
  11. package/dist/InfiniteScrollSentinel-CU801UfD.cjs.map +1 -0
  12. package/dist/InfiniteScrollSentinel-MgF-ldXy.mjs +30 -0
  13. package/dist/InfiniteScrollSentinel-MgF-ldXy.mjs.map +1 -0
  14. package/dist/{MessagingScreen-CTkPjXmw.mjs → MessagingScreen-BNsaLpzu.mjs} +2 -2
  15. package/dist/{MessagingScreen-CTkPjXmw.mjs.map → MessagingScreen-BNsaLpzu.mjs.map} +1 -1
  16. package/dist/{MessagingScreen-B1EUsool.cjs → MessagingScreen-CJ3p3ZHq.cjs} +2 -2
  17. package/dist/{MessagingScreen-uWR24DJL.cjs → MessagingScreen-DX8A0ahD.cjs} +2 -2
  18. package/dist/{MessagingScreen-uWR24DJL.cjs.map → MessagingScreen-DX8A0ahD.cjs.map} +1 -1
  19. package/dist/{OrdersScreen-CjbzJrnk.mjs → OrdersScreen-BgyMsZpn.mjs} +245 -84
  20. package/dist/OrdersScreen-BgyMsZpn.mjs.map +1 -0
  21. package/dist/{OrdersScreen-CFTZi2HF.cjs → OrdersScreen-CCVPgVWa.cjs} +244 -83
  22. package/dist/OrdersScreen-CCVPgVWa.cjs.map +1 -0
  23. package/dist/{OrdersScreen-C0cYz9Ka.cjs → OrdersScreen-DWNylH_i.cjs} +3 -2
  24. package/dist/{PortalContentApiProvider-DloCNJGC.mjs → PortalContentApiProvider-Bxtd3cTD.mjs} +313 -170
  25. package/dist/PortalContentApiProvider-Bxtd3cTD.mjs.map +1 -0
  26. package/dist/{PortalContentApiProvider-CvH9BEAO.cjs → PortalContentApiProvider-D_0DbqrK.cjs} +313 -170
  27. package/dist/PortalContentApiProvider-D_0DbqrK.cjs.map +1 -0
  28. package/dist/{PortalProductsApiProvider-v_vGVQTY.cjs → PortalProductsApiProvider-CRN-i8Rh.cjs} +2 -2
  29. package/dist/{PortalProductsApiProvider-v_vGVQTY.cjs.map → PortalProductsApiProvider-CRN-i8Rh.cjs.map} +1 -1
  30. package/dist/{PortalProductsApiProvider-Bcj1VwsT.mjs → PortalProductsApiProvider-D0jul2Fh.mjs} +2 -2
  31. package/dist/{PortalProductsApiProvider-Bcj1VwsT.mjs.map → PortalProductsApiProvider-D0jul2Fh.mjs.map} +1 -1
  32. package/dist/{ProductsScreen-h7-hyha0.mjs → ProductsScreen-CIZEyhz1.mjs} +4 -4
  33. package/dist/{ProductsScreen-jk9Iiscy.mjs → ProductsScreen-COiPDOoi.mjs} +3 -3
  34. package/dist/{ProductsScreen-jk9Iiscy.mjs.map → ProductsScreen-COiPDOoi.mjs.map} +1 -1
  35. package/dist/{ProductsScreen-5K6to2Vm.cjs → ProductsScreen-DjvCNiay.cjs} +3 -3
  36. package/dist/{ProductsScreen-5K6to2Vm.cjs.map → ProductsScreen-DjvCNiay.cjs.map} +1 -1
  37. package/dist/{ProductsScreen-BY_eZwLd.cjs → ProductsScreen-DliPMmcL.cjs} +4 -4
  38. package/dist/{ProfileScreen-BF0ngN58.cjs → ProfileScreen-BsjuHCor.cjs} +2 -2
  39. package/dist/{ProfileScreen-BF0ngN58.cjs.map → ProfileScreen-BsjuHCor.cjs.map} +1 -1
  40. package/dist/{ProfileScreen-qE9eKIra.cjs → ProfileScreen-DL-C2R6R.cjs} +2 -2
  41. package/dist/{ProfileScreen-CeqjmmOa.mjs → ProfileScreen-eJvfI2YW.mjs} +2 -2
  42. package/dist/{ProfileScreen-CeqjmmOa.mjs.map → ProfileScreen-eJvfI2YW.mjs.map} +1 -1
  43. package/dist/{ShareablesScreen-DPoZVeXu.mjs → ShareablesScreen-B2VncQCU.mjs} +4 -4
  44. package/dist/{ShareablesScreen-CVrbEivj.cjs → ShareablesScreen-BWIRh8uv.cjs} +3 -3
  45. package/dist/{ShareablesScreen-CVrbEivj.cjs.map → ShareablesScreen-BWIRh8uv.cjs.map} +1 -1
  46. package/dist/{ShareablesScreen-B56lNgZ7.mjs → ShareablesScreen-U2Zgf6wh.mjs} +3 -3
  47. package/dist/{ShareablesScreen-B56lNgZ7.mjs.map → ShareablesScreen-U2Zgf6wh.mjs.map} +1 -1
  48. package/dist/{ShareablesScreen-CXrS4anN.cjs → ShareablesScreen-nK7fJqjp.cjs} +4 -4
  49. package/dist/{ShopScreen-CTuIZ1oW.mjs → ShopScreen-5AXTCtLQ.mjs} +3 -3
  50. package/dist/{ShopScreen-CTuIZ1oW.mjs.map → ShopScreen-5AXTCtLQ.mjs.map} +1 -1
  51. package/dist/{ShopScreen-DcGMGI3h.cjs → ShopScreen-DEFhDrcd.cjs} +3 -3
  52. package/dist/{ShopScreen-CbEH6dtZ.cjs → ShopScreen-X802gHEX.cjs} +3 -3
  53. package/dist/{ShopScreen-CbEH6dtZ.cjs.map → ShopScreen-X802gHEX.cjs.map} +1 -1
  54. package/dist/{SubscriptionsScreen-BQ5BoMZO.mjs → SubscriptionsScreen-BwRoXYF8.mjs} +44 -34
  55. package/dist/SubscriptionsScreen-BwRoXYF8.mjs.map +1 -0
  56. package/dist/{SubscriptionsScreen-CzxhX8CT.cjs → SubscriptionsScreen-DbcnEDD0.cjs} +43 -33
  57. package/dist/SubscriptionsScreen-DbcnEDD0.cjs.map +1 -0
  58. package/dist/{SubscriptionsScreen-BR_YMBYs.cjs → SubscriptionsScreen-mhTl7OIp.cjs} +3 -3
  59. package/dist/{dist-Ib6pM5r3.cjs → dist-bL3uiYn3.cjs} +1 -1
  60. package/dist/{dist-Ib6pM5r3.cjs.map → dist-bL3uiYn3.cjs.map} +1 -1
  61. package/dist/{dist-DhOQb8en.mjs → dist-wzcShuuv.mjs} +1 -1
  62. package/dist/{dist-DhOQb8en.mjs.map → dist-wzcShuuv.mjs.map} +1 -1
  63. package/dist/index.cjs +30 -30
  64. package/dist/index.d.cts.map +1 -1
  65. package/dist/index.d.mts.map +1 -1
  66. package/dist/index.mjs +30 -30
  67. package/dist/{order-status-badge-DvZns1LY.cjs → order-status-badge-Crk9UGpl.cjs} +23 -151
  68. package/dist/order-status-badge-Crk9UGpl.cjs.map +1 -0
  69. package/dist/{order-status-badge-DK9GG8H-.mjs → order-status-badge-DiQDwwSp.mjs} +28 -150
  70. package/dist/order-status-badge-DiQDwwSp.mjs.map +1 -0
  71. package/dist/{portal_tenant-KkdoWwTr.mjs → portal_tenant-CWKHVgID.mjs} +3 -3
  72. package/dist/portal_tenant-CWKHVgID.mjs.map +1 -0
  73. package/dist/{portal_tenant-B2lPHXgm.cjs → portal_tenant-pozf8Ht6.cjs} +3 -3
  74. package/dist/portal_tenant-pozf8Ht6.cjs.map +1 -0
  75. package/package.json +17 -17
  76. package/dist/ContactsScreen-D2rOJ9Ra.cjs.map +0 -1
  77. package/dist/ContactsScreen-Dw9G8Q3n.mjs.map +0 -1
  78. package/dist/OrdersScreen-CFTZi2HF.cjs.map +0 -1
  79. package/dist/OrdersScreen-CjbzJrnk.mjs.map +0 -1
  80. package/dist/PortalContentApiProvider-CvH9BEAO.cjs.map +0 -1
  81. package/dist/PortalContentApiProvider-DloCNJGC.mjs.map +0 -1
  82. package/dist/SubscriptionsScreen-BQ5BoMZO.mjs.map +0 -1
  83. package/dist/SubscriptionsScreen-CzxhX8CT.cjs.map +0 -1
  84. package/dist/order-status-badge-DK9GG8H-.mjs.map +0 -1
  85. package/dist/order-status-badge-DvZns1LY.cjs.map +0 -1
  86. package/dist/portal_tenant-B2lPHXgm.cjs.map +0 -1
  87. package/dist/portal_tenant-KkdoWwTr.mjs.map +0 -1
  88. package/dist/src-DOYe5GAF.cjs +0 -3
  89. package/dist/src-HUkXWdaF.mjs +0 -3
@@ -6,40 +6,14 @@ import { $ as DropdownMenuSeparator, $t as BreadcrumbPage, A as Select, C as Ske
6
6
  import { n as useScreenHeaderActions, r as useScreenHeaderBreadcrumbs } from "./ScreenHeaderContext-BD6Zo-ep.mjs";
7
7
  import { a as useEditor, n as Heading, o as Placeholder, r as EditorContent, t as StarterKit } from "./dist-tv6N_HgZ.mjs";
8
8
  import { t as SearchSort } from "./SearchSort-TmRTxK16.mjs";
9
- import { i as PaginationFooter } from "./order-status-badge-DK9GG8H-.mjs";
10
- import { n as TextAlign, t as Underline } from "./dist-DhOQb8en.mjs";
9
+ import { t as InfiniteScrollSentinel } from "./InfiniteScrollSentinel-MgF-ldXy.mjs";
10
+ import { n as TextAlign, t as Underline } from "./dist-wzcShuuv.mjs";
11
11
  import React, { createContext, useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
12
- import { keepPreviousData, useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
12
+ import { keepPreviousData, useInfiniteQuery, useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
13
13
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
14
14
  import { AlignCenter, AlignJustify, AlignLeft, AlignRight, ArrowLeft, Building, Calendar, CalendarDays, Check, ChevronLeft, ChevronRight, CircleCheck, ClipboardList, EllipsisVertical, ExternalLink, List, ListChecks, ListOrdered, Mail, MessageSquare, Paperclip, Pen, Pencil, Phone, Plus, Repeat2, ShoppingCart, SquareCheckBig, StickyNote, Trash2, X } from "lucide-react";
15
15
  import { FormProvider, useFormContext, useWatch } from "react-hook-form";
16
16
  import { z } from "zod";
17
- //#region ../../contacts/ui/src/shared/components/contacts/statusBadge.tsx
18
- const statusStyles = {
19
- new: "border-[var(--status-new-border)] bg-[var(--status-new)] text-[var(--status-new-foreground)]",
20
- active: "border-[var(--status-active-border)] bg-[var(--status-active)] text-[var(--status-active-foreground)]",
21
- inactive: "border-border bg-muted text-muted-foreground",
22
- lead: "border-[var(--status-lead-border)] bg-[var(--status-lead)] text-[var(--status-lead-foreground)]",
23
- customer: "border-[var(--status-customer-border)] bg-[var(--status-customer)] text-[var(--status-customer-foreground)]",
24
- success: "border-[var(--badge-success-border)] bg-[var(--badge-success)] text-[var(--badge-success-foreground)]",
25
- warning: "border-[var(--badge-warning-border)] bg-[var(--badge-warning)] text-[var(--badge-warning-foreground)]",
26
- danger: "border-[var(--badge-danger-border)] bg-[var(--badge-danger)] text-[var(--badge-danger-foreground)]",
27
- info: "border-[var(--badge-info-border)] bg-[var(--badge-info)] text-[var(--badge-info-foreground)]",
28
- neutral: "border-border bg-muted text-muted-foreground",
29
- notice: "border-[var(--badge-notice-border)] bg-[var(--badge-notice)] text-[var(--badge-notice-foreground)]",
30
- accent: "border-[var(--badge-accent-border)] bg-[var(--badge-accent)] text-[var(--badge-accent-foreground)]"
31
- };
32
- const defaultStyle = "border-border bg-muted text-muted-foreground";
33
- function getStatusStyle(status) {
34
- return statusStyles[status] ?? defaultStyle;
35
- }
36
- function StatusBadge({ status, label, className }) {
37
- return /* @__PURE__ */ jsx("span", {
38
- className: cn("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold capitalize", getStatusStyle(status), className),
39
- children: label ?? status
40
- });
41
- }
42
- //#endregion
43
17
  //#region ../../contacts/core/src/contacts-api-context.ts
44
18
  const ContactsApiContext = createContext(null);
45
19
  const ContactsApiProvider = ContactsApiContext.Provider;
@@ -101,6 +75,51 @@ const contactsKeys = {
101
75
  groups: () => ["portal-contacts", "groups"]
102
76
  };
103
77
  //#endregion
78
+ //#region ../../contacts/core/src/hooks/use-infinite-contacts.ts
79
+ function useInfiniteContacts(params) {
80
+ const api = useContactsCrud();
81
+ return useInfiniteQuery({
82
+ queryKey: [...CONTACTS_QUERY_KEYS.list("contacts"), params],
83
+ queryFn: ({ pageParam }) => api.listContacts({
84
+ ...params,
85
+ page: pageParam
86
+ }),
87
+ getNextPageParam: (lastPage) => {
88
+ const currentPage = lastPage.meta.current_page;
89
+ if (currentPage == null) return void 0;
90
+ if (lastPage.meta.next_cursor) return currentPage + 1;
91
+ if (lastPage.meta.total_pages != null && currentPage < lastPage.meta.total_pages) return currentPage + 1;
92
+ },
93
+ initialPageParam: 1
94
+ });
95
+ }
96
+ //#endregion
97
+ //#region ../../contacts/ui/src/shared/components/contacts/statusBadge.tsx
98
+ const statusStyles = {
99
+ new: "border-[var(--status-new-border)] bg-[var(--status-new)] text-[var(--status-new-foreground)]",
100
+ active: "border-[var(--status-active-border)] bg-[var(--status-active)] text-[var(--status-active-foreground)]",
101
+ inactive: "border-border bg-muted text-muted-foreground",
102
+ lead: "border-[var(--status-lead-border)] bg-[var(--status-lead)] text-[var(--status-lead-foreground)]",
103
+ customer: "border-[var(--status-customer-border)] bg-[var(--status-customer)] text-[var(--status-customer-foreground)]",
104
+ success: "border-[var(--badge-success-border)] bg-[var(--badge-success)] text-[var(--badge-success-foreground)]",
105
+ warning: "border-[var(--badge-warning-border)] bg-[var(--badge-warning)] text-[var(--badge-warning-foreground)]",
106
+ danger: "border-[var(--badge-danger-border)] bg-[var(--badge-danger)] text-[var(--badge-danger-foreground)]",
107
+ info: "border-[var(--badge-info-border)] bg-[var(--badge-info)] text-[var(--badge-info-foreground)]",
108
+ neutral: "border-border bg-muted text-muted-foreground",
109
+ notice: "border-[var(--badge-notice-border)] bg-[var(--badge-notice)] text-[var(--badge-notice-foreground)]",
110
+ accent: "border-[var(--badge-accent-border)] bg-[var(--badge-accent)] text-[var(--badge-accent-foreground)]"
111
+ };
112
+ const defaultStyle = "border-border bg-muted text-muted-foreground";
113
+ function getStatusStyle(status) {
114
+ return statusStyles[status] ?? defaultStyle;
115
+ }
116
+ function StatusBadge({ status, label, className }) {
117
+ return /* @__PURE__ */ jsx("span", {
118
+ className: cn("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold capitalize", getStatusStyle(status), className),
119
+ children: label ?? status
120
+ });
121
+ }
122
+ //#endregion
104
123
  //#region ../../contacts/ui/src/shared/components/contacts/allContacts/contactsTable.tsx
105
124
  function getInitials(fullName) {
106
125
  const trimmed = fullName?.trim();
@@ -314,7 +333,7 @@ const CONTACT_SORT_COLUMNS = [{
314
333
  id: "email",
315
334
  name: "Email"
316
335
  }];
317
- function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setOpenDeleteModal, onEditContact, onRowClick, resetKey, tableLayout }) {
336
+ function ContactsTable({ setSelectedContacts, setOpenDeleteModal, onEditContact, onRowClick, resetKey, tableLayout }) {
318
337
  const isMemberLayout = tableLayout === "members";
319
338
  const groupsApi = useGroupsApi();
320
339
  const { data: availableGroups = [] } = useQuery({
@@ -328,7 +347,6 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
328
347
  for (const group of availableGroups) map.set(group.name, group);
329
348
  return map;
330
349
  }, [availableGroups]);
331
- const [currentPage, setCurrentPage] = useState(1);
332
350
  const [searchTerm, setSearchTerm] = useState("");
333
351
  const [sortValue, setSortValue] = useState("name_asc");
334
352
  const [selectedIds, setSelectedIds] = useState(/* @__PURE__ */ new Set());
@@ -340,32 +358,18 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
340
358
  };
341
359
  }, [sortValue]);
342
360
  useEffect(() => {
343
- setCurrentPage(1);
344
361
  setSelectedIds(/* @__PURE__ */ new Set());
345
362
  }, [searchTerm, sortValue]);
346
- useEffect(() => {
347
- setSelectedIds(/* @__PURE__ */ new Set());
348
- }, [currentPage]);
349
363
  useEffect(() => {
350
364
  setSelectedIds(/* @__PURE__ */ new Set());
351
365
  }, [resetKey]);
352
- const { data, isLoading } = useQuery({
353
- queryKey: [queryKeyPrefix, {
354
- searchTerm,
355
- currentPage,
356
- sortField: parsedSort.id,
357
- sortDesc: parsedSort.desc
358
- }],
359
- queryFn: () => listContacts({
360
- search_query: searchTerm || void 0,
361
- page: currentPage,
362
- per_page: PAGE_SIZE,
363
- sort_by: parsedSort.id,
364
- sort_direction: parsedSort.desc ? "desc" : "asc"
365
- }),
366
- placeholderData: keepPreviousData
366
+ const { data, isLoading, fetchNextPage, hasNextPage, isFetchingNextPage } = useInfiniteContacts({
367
+ search_query: searchTerm || void 0,
368
+ per_page: PAGE_SIZE,
369
+ sort_by: parsedSort.id,
370
+ sort_direction: parsedSort.desc ? "desc" : "asc"
367
371
  });
368
- const items = useMemo(() => data?.contacts ?? [], [data?.contacts]);
372
+ const items = useMemo(() => data?.pages.flatMap((p) => p.contacts) ?? [], [data?.pages]);
369
373
  const displayItems = useMemo(() => {
370
374
  const sortField = parsedSort.id;
371
375
  const sortDir = parsedSort.desc ? "desc" : "asc";
@@ -376,8 +380,6 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
376
380
  return sortDir === "asc" ? cmp : -cmp;
377
381
  });
378
382
  }, [items, parsedSort]);
379
- const totalItems = data?.meta?.total_count ?? 0;
380
- const totalPages = Math.max(1, Math.ceil(totalItems / PAGE_SIZE));
381
383
  const allSelected = displayItems.length > 0 && displayItems.every((c) => selectedIds.has(c.id));
382
384
  const someSelected = selectedIds.size > 0 && !allSelected;
383
385
  const selectAllRef = useRef(null);
@@ -736,19 +738,17 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
736
738
  ]
737
739
  })
738
740
  })] }),
739
- /* @__PURE__ */ jsx(PaginationFooter, {
740
- currentPage,
741
- totalPages,
742
- pageSize: PAGE_SIZE,
743
- totalItems,
744
- onPageChange: setCurrentPage
741
+ /* @__PURE__ */ jsx(InfiniteScrollSentinel, {
742
+ onLoadMore: fetchNextPage,
743
+ hasMore: !!hasNextPage,
744
+ isLoading: isFetchingNextPage
745
745
  })
746
746
  ]
747
747
  });
748
748
  }
749
749
  //#endregion
750
750
  //#region ../../contacts/ui/src/shared/components/contacts/allContacts/contactsPage.tsx
751
- function ContactsPage({ listContacts, deleteContacts, queryKeyPrefix, header, onEditContact, onRowClick, tableLayout }) {
751
+ function ContactsPage({ deleteContacts, header, onEditContact, onRowClick, tableLayout }) {
752
752
  const [openDeleteModal, setOpenDeleteModal] = useState(false);
753
753
  const [selectedContacts, setSelectedContacts] = useState([]);
754
754
  const [resetKey, setResetKey] = useState(0);
@@ -761,7 +761,7 @@ function ContactsPage({ listContacts, deleteContacts, queryKeyPrefix, header, on
761
761
  title: "Contacts deleted successfully",
762
762
  type: "success"
763
763
  });
764
- queryClient.invalidateQueries({ queryKey: CONTACTS_QUERY_KEYS.all(queryKeyPrefix) });
764
+ queryClient.invalidateQueries({ queryKey: CONTACTS_QUERY_KEYS.all("contacts") });
765
765
  },
766
766
  onError: (error) => {
767
767
  fluidToast({
@@ -781,8 +781,6 @@ function ContactsPage({ listContacts, deleteContacts, queryKeyPrefix, header, on
781
781
  /* @__PURE__ */ jsx("div", {
782
782
  className: "mx-auto max-w-7xl space-y-6 px-4 py-4 md:px-10 md:py-8",
783
783
  children: /* @__PURE__ */ jsx(ContactsTable, {
784
- listContacts,
785
- queryKeyPrefix,
786
784
  setSelectedContacts,
787
785
  setOpenDeleteModal,
788
786
  onEditContact,
@@ -809,7 +807,7 @@ function ContactsPage({ listContacts, deleteContacts, queryKeyPrefix, header, on
809
807
  }
810
808
  //#endregion
811
809
  //#region ../../contacts/ui/src/screens/ContactsListScreen.tsx
812
- function ContactsListScreen({ listContacts, deleteContacts, onEditContact, onRowClick, onAddContact, queryKeyPrefix = "contacts", tableLayout, header }) {
810
+ function ContactsListScreen({ deleteContacts, onEditContact, onRowClick, onAddContact, tableLayout, header }) {
813
811
  useScreenHeaderActions(useMemo(() => /* @__PURE__ */ jsxs(Button, {
814
812
  onClick: onAddContact,
815
813
  size: "sm",
@@ -823,9 +821,7 @@ function ContactsListScreen({ listContacts, deleteContacts, onEditContact, onRow
823
821
  }) })
824
822
  }) }), []));
825
823
  return /* @__PURE__ */ jsx(ContactsPage, {
826
- listContacts,
827
824
  deleteContacts,
828
- queryKeyPrefix,
829
825
  tableLayout,
830
826
  header,
831
827
  onEditContact,
@@ -4197,16 +4193,19 @@ async function contacts_tasks_destroy(client, contact_id, id) {
4197
4193
  const EMPTY_META = {
4198
4194
  total_count: 0,
4199
4195
  total_pages: 0,
4200
- current_page: 1
4196
+ current_page: 1,
4197
+ next_cursor: null
4201
4198
  };
4202
4199
  function paginationFromBff(meta, itemCount, currentPage, pageSize) {
4203
4200
  if (!meta) return EMPTY_META;
4204
- const hasNext = !!meta.pagination?.next_cursor;
4201
+ const nextCursor = meta.pagination?.next_cursor ?? null;
4202
+ const hasNext = !!nextCursor;
4205
4203
  const totalCount = meta.total_count ?? (hasNext ? (currentPage + 1) * pageSize : (currentPage - 1) * pageSize + itemCount);
4206
4204
  return {
4207
4205
  total_count: totalCount,
4208
4206
  total_pages: Math.max(1, Math.ceil(totalCount / pageSize)),
4209
4207
  current_page: currentPage,
4208
+ next_cursor: nextCursor,
4210
4209
  request_id: meta.request_id ?? void 0,
4211
4210
  timestamp: meta.timestamp ?? void 0
4212
4211
  };
@@ -4419,9 +4418,7 @@ function ContactListView({ onNavigate, onContactSelect }) {
4419
4418
  });
4420
4419
  }, [onNavigate, onContactSelect]);
4421
4420
  return /* @__PURE__ */ jsx(ContactsListScreen, {
4422
- listContacts: useCallback((params) => api.listContacts(params), [api]),
4423
4421
  deleteContacts: useCallback((ids) => api.bulkDeleteContacts(ids), [api]),
4424
- queryKeyPrefix: QUERY_KEY_PREFIX,
4425
4422
  tableLayout: "members",
4426
4423
  onEditContact: handleSelectContact,
4427
4424
  onRowClick: handleSelectContact,
@@ -4595,4 +4592,4 @@ const contactsScreenPropertySchema = {
4595
4592
  //#endregion
4596
4593
  export { ContactsScreen_exports as n, contactsScreenPropertySchema as r, ContactsScreen as t };
4597
4594
 
4598
- //# sourceMappingURL=ContactsScreen-Dw9G8Q3n.mjs.map
4595
+ //# sourceMappingURL=ContactsScreen-BtBNMZzG.mjs.map