@fluid-app/portal-sdk 0.1.46 → 0.1.47
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/{CarouselWidget-Bx5jrthO.cjs → CarouselWidget-BRauT5r7.cjs} +2 -2
- package/dist/{CarouselWidget-Bx5jrthO.cjs.map → CarouselWidget-BRauT5r7.cjs.map} +1 -1
- package/dist/{CarouselWidget-C04z7JxO.mjs → CarouselWidget-C7vsjw7r.mjs} +2 -2
- package/dist/{CarouselWidget-C04z7JxO.mjs.map → CarouselWidget-C7vsjw7r.mjs.map} +1 -1
- package/dist/{CarouselWidget-BcnZwnIh.cjs → CarouselWidget-CE12yIQt.cjs} +2 -2
- package/dist/{ChartWidget-WaLM-zc-.mjs → ChartWidget-BqidaXNw.mjs} +2 -2
- package/dist/{ChartWidget-WaLM-zc-.mjs.map → ChartWidget-BqidaXNw.mjs.map} +1 -1
- package/dist/{ChartWidget-_jzD434L.cjs → ChartWidget-DQvxMlax.cjs} +2 -2
- package/dist/{ChartWidget-DWWeWN0Q.cjs → ChartWidget-pFCP3KBK.cjs} +2 -2
- package/dist/{ChartWidget-DWWeWN0Q.cjs.map → ChartWidget-pFCP3KBK.cjs.map} +1 -1
- package/dist/{ContactsScreen-C0I1_D_a.cjs → ContactsScreen-9G2HgNsy.cjs} +375 -39
- package/dist/ContactsScreen-9G2HgNsy.cjs.map +1 -0
- package/dist/{ContactsScreen-DO7EwobV.cjs → ContactsScreen-BmM91s6y.cjs} +8 -8
- package/dist/{ContactsScreen-B4FZ0Qeu.mjs → ContactsScreen-Cx3DlL9d.mjs} +8 -8
- package/dist/{ContactsScreen-CoFB7EM3.mjs → ContactsScreen-VftTRDXR.mjs} +376 -40
- package/dist/ContactsScreen-VftTRDXR.mjs.map +1 -0
- package/dist/{FluidProvider-DzrMOFXn.cjs → FluidProvider-CsIC3HL2.cjs} +9 -9
- package/dist/{FluidProvider-DzrMOFXn.cjs.map → FluidProvider-CsIC3HL2.cjs.map} +1 -1
- package/dist/{FluidProvider-iYl6DSax.mjs → FluidProvider-Dj4ToywG.mjs} +9 -9
- package/dist/{FluidProvider-iYl6DSax.mjs.map → FluidProvider-Dj4ToywG.mjs.map} +1 -1
- package/dist/{LinkWidget-DFApxWIK.cjs → LinkWidget-CHTbeWcV.cjs} +2 -2
- package/dist/{LinkWidget-CJKveS10.cjs → LinkWidget-Dk_01CMC.cjs} +2 -2
- package/dist/{LinkWidget-CJKveS10.cjs.map → LinkWidget-Dk_01CMC.cjs.map} +1 -1
- package/dist/{LinkWidget-NR2OqU4Y.mjs → LinkWidget-sDGQRCy9.mjs} +2 -2
- package/dist/{LinkWidget-NR2OqU4Y.mjs.map → LinkWidget-sDGQRCy9.mjs.map} +1 -1
- package/dist/{MessagingScreen-CUBOR0qo.cjs → MessagingScreen-4tFoITCO.cjs} +4 -4
- package/dist/{MessagingScreen-CUBOR0qo.cjs.map → MessagingScreen-4tFoITCO.cjs.map} +1 -1
- package/dist/{MessagingScreen-kP-1EJZ5.mjs → MessagingScreen-C24TYBXX.mjs} +8 -8
- package/dist/{MessagingScreen-CfbkE7H-.cjs → MessagingScreen-D5xc9XPU.cjs} +7 -7
- package/dist/{MessagingScreen-DgvqyD7k.mjs → MessagingScreen-DbJPeyhA.mjs} +5 -5
- package/dist/{MessagingScreen-DgvqyD7k.mjs.map → MessagingScreen-DbJPeyhA.mjs.map} +1 -1
- package/dist/{MySiteScreen-jE2m5qP6.cjs → MySiteScreen-Bjt-TIOI.cjs} +7 -7
- package/dist/{MySiteScreen-CvyqpzJd.mjs → MySiteScreen-CgsOL37h.mjs} +3 -3
- package/dist/{MySiteScreen-CvyqpzJd.mjs.map → MySiteScreen-CgsOL37h.mjs.map} +1 -1
- package/dist/{MySiteScreen-DUMMPU6X.mjs → MySiteScreen-CsdcTxTp.mjs} +7 -7
- package/dist/{MySiteScreen-NJSRcmI-.cjs → MySiteScreen-ohuek6np.cjs} +3 -3
- package/dist/{MySiteScreen-NJSRcmI-.cjs.map → MySiteScreen-ohuek6np.cjs.map} +1 -1
- package/dist/{OrdersScreen-BTJAhLgs.mjs → OrdersScreen-BZEcJ0Hb.mjs} +8 -8
- package/dist/{OrdersScreen-B2ErpU4b.mjs → OrdersScreen-Bhll_o_2.mjs} +4 -4
- package/dist/{OrdersScreen-B2ErpU4b.mjs.map → OrdersScreen-Bhll_o_2.mjs.map} +1 -1
- package/dist/{OrdersScreen-CE0GMwfC.cjs → OrdersScreen-DZBPD4Qu.cjs} +8 -8
- package/dist/{OrdersScreen-DvqljQVk.cjs → OrdersScreen-mRGgujQ-.cjs} +4 -4
- package/dist/{OrdersScreen-DvqljQVk.cjs.map → OrdersScreen-mRGgujQ-.cjs.map} +1 -1
- package/dist/{ProductsScreen-CBVy5Zyi.mjs → ProductsScreen-9c89IHiX.mjs} +4 -4
- package/dist/{ProductsScreen-CBVy5Zyi.mjs.map → ProductsScreen-9c89IHiX.mjs.map} +1 -1
- package/dist/{ProductsScreen-DdX6HMHt.cjs → ProductsScreen-BtgPVLUi.cjs} +4 -4
- package/dist/{ProductsScreen-DdX6HMHt.cjs.map → ProductsScreen-BtgPVLUi.cjs.map} +1 -1
- package/dist/{ProductsScreen-HIV2lQ9Z.cjs → ProductsScreen-CYs8q165.cjs} +8 -8
- package/dist/{ProductsScreen-Bb5icf74.mjs → ProductsScreen-Dy-cmEiB.mjs} +9 -9
- package/dist/{ProfileScreen-LmGvJwTb.cjs → ProfileScreen-CLM8iOmL.cjs} +4 -4
- package/dist/{ProfileScreen-LmGvJwTb.cjs.map → ProfileScreen-CLM8iOmL.cjs.map} +1 -1
- package/dist/{ProfileScreen-DAFrOHW1.cjs → ProfileScreen-DCCZN8zU.cjs} +7 -7
- package/dist/{ProfileScreen-BpJ41w20.mjs → ProfileScreen-DPtpl6j3.mjs} +7 -7
- package/dist/{ProfileScreen-r8ceJSGs.mjs → ProfileScreen-s8S3JVIE.mjs} +4 -4
- package/dist/{ProfileScreen-r8ceJSGs.mjs.map → ProfileScreen-s8S3JVIE.mjs.map} +1 -1
- package/dist/{ShareablesScreen-CBw3gH0u.cjs → ShareablesScreen-BN3uztrI.cjs} +8 -8
- package/dist/{ShareablesScreen-Dfa0LM6R.cjs → ShareablesScreen-D1Ouqir1.cjs} +4 -4
- package/dist/{ShareablesScreen-Dfa0LM6R.cjs.map → ShareablesScreen-D1Ouqir1.cjs.map} +1 -1
- package/dist/{ShareablesScreen-0JcyLc7i.mjs → ShareablesScreen-DR6219-z.mjs} +4 -4
- package/dist/{ShareablesScreen-0JcyLc7i.mjs.map → ShareablesScreen-DR6219-z.mjs.map} +1 -1
- package/dist/{ShareablesScreen-Riod6fjb.mjs → ShareablesScreen-nhOckVQr.mjs} +9 -9
- package/dist/{ShopScreen-DMDSD4gF.mjs → ShopScreen-CUaZmX4U.mjs} +5 -5
- package/dist/{ShopScreen-DMDSD4gF.mjs.map → ShopScreen-CUaZmX4U.mjs.map} +1 -1
- package/dist/{ShopScreen-CET9016G.cjs → ShopScreen-D8hz0Io1.cjs} +7 -7
- package/dist/{ShopScreen-C73ARj6e.cjs → ShopScreen-Ds7FGtOi.cjs} +5 -5
- package/dist/{ShopScreen-C73ARj6e.cjs.map → ShopScreen-Ds7FGtOi.cjs.map} +1 -1
- package/dist/{ShopScreen-Ddrw43gs.mjs → ShopScreen-Dz-gzUFw.mjs} +7 -7
- package/dist/{SubscriptionsScreen-CPXCoeeu.cjs → SubscriptionsScreen-Bt6RDwDB.cjs} +8 -8
- package/dist/{SubscriptionsScreen-BMjdIyWT.mjs → SubscriptionsScreen-CX3uLV-Y.mjs} +8 -8
- package/dist/{SubscriptionsScreen-CpvMZaU0.cjs → SubscriptionsScreen-sixWFqS0.cjs} +5 -5
- package/dist/{SubscriptionsScreen-CpvMZaU0.cjs.map → SubscriptionsScreen-sixWFqS0.cjs.map} +1 -1
- package/dist/{SubscriptionsScreen-BLrScFQV.mjs → SubscriptionsScreen-wfQjDMiz.mjs} +5 -5
- package/dist/{SubscriptionsScreen-BLrScFQV.mjs.map → SubscriptionsScreen-wfQjDMiz.mjs.map} +1 -1
- package/dist/{TableWidget-aZUcob2U.mjs → TableWidget-DF5i7arL.mjs} +2 -2
- package/dist/{TableWidget-aZUcob2U.mjs.map → TableWidget-DF5i7arL.mjs.map} +1 -1
- package/dist/{TableWidget-DFWfQIWv.cjs → TableWidget-DFpr7R3o.cjs} +2 -2
- package/dist/{TableWidget-DFWfQIWv.cjs.map → TableWidget-DFpr7R3o.cjs.map} +1 -1
- package/dist/{TableWidget-WB7hx4Hb.cjs → TableWidget-blS7QRfo.cjs} +2 -2
- package/dist/{es-CE6ELtdT.mjs → es-D5TTjbe7.mjs} +2 -2
- package/dist/{es-CE6ELtdT.mjs.map → es-D5TTjbe7.mjs.map} +1 -1
- package/dist/index.cjs +38 -38
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +39 -39
- package/dist/{products-DOCuAQDz.mjs → products-BHmOUNfQ.mjs} +3 -3
- package/dist/{products-DOCuAQDz.mjs.map → products-BHmOUNfQ.mjs.map} +1 -1
- package/dist/{products-zutaVs48.cjs → products-jXnAQoTU.cjs} +3 -3
- package/dist/{products-zutaVs48.cjs.map → products-jXnAQoTU.cjs.map} +1 -1
- package/dist/{src-Dd1iRW7j.mjs → src-BtBYwiNS.mjs} +2 -2
- package/dist/{src-Dd1iRW7j.mjs.map → src-BtBYwiNS.mjs.map} +1 -1
- package/dist/{src-CIhTbou2.mjs → src-CnrUO5fh.mjs} +4 -4
- package/dist/{src-CIhTbou2.mjs.map → src-CnrUO5fh.mjs.map} +1 -1
- package/dist/{src-CXGrnE7x.cjs → src-CpNCyVxq.cjs} +3 -3
- package/dist/{src-CXGrnE7x.cjs.map → src-CpNCyVxq.cjs.map} +1 -1
- package/dist/{src-CWGmmrLZ.cjs → src-Da7I1fqK.cjs} +17 -3
- package/dist/src-Da7I1fqK.cjs.map +1 -0
- package/dist/{src-COTid97-.cjs → src-DecFyd_1.cjs} +2 -2
- package/dist/{src-COTid97-.cjs.map → src-DecFyd_1.cjs.map} +1 -1
- package/dist/{src-BVkLGnwV.mjs → src-DvSsESTu.mjs} +12 -4
- package/dist/src-DvSsESTu.mjs.map +1 -0
- package/dist/{use-account-clients-BOwgvZok.cjs → use-account-clients-C0ioK2n_.cjs} +2 -2
- package/dist/{use-account-clients-BOwgvZok.cjs.map → use-account-clients-C0ioK2n_.cjs.map} +1 -1
- package/dist/{use-account-clients-EEcG-B1B.mjs → use-account-clients-D9HGyaK9.mjs} +2 -2
- package/dist/{use-account-clients-EEcG-B1B.mjs.map → use-account-clients-D9HGyaK9.mjs.map} +1 -1
- package/dist/{use-customer-account-TLWo3z05.mjs → use-customer-account-BwXCw2H3.mjs} +3 -3
- package/dist/{use-customer-account-TLWo3z05.mjs.map → use-customer-account-BwXCw2H3.mjs.map} +1 -1
- package/dist/{use-customer-account-BxoVi8ak.cjs → use-customer-account-CRcU8yDx.cjs} +3 -3
- package/dist/{use-customer-account-BxoVi8ak.cjs.map → use-customer-account-CRcU8yDx.cjs.map} +1 -1
- package/dist/{use-fluid-api-CU_r0Gu9.cjs → use-fluid-api-Bb3qgqYS.cjs} +2 -2
- package/dist/{use-fluid-api-CU_r0Gu9.cjs.map → use-fluid-api-Bb3qgqYS.cjs.map} +1 -1
- package/dist/{use-fluid-api-DH8hTTPQ.mjs → use-fluid-api-Chd3dSwr.mjs} +2 -2
- package/dist/{use-fluid-api-DH8hTTPQ.mjs.map → use-fluid-api-Chd3dSwr.mjs.map} +1 -1
- package/package.json +15 -15
- package/dist/ContactsScreen-C0I1_D_a.cjs.map +0 -1
- package/dist/ContactsScreen-CoFB7EM3.mjs.map +0 -1
- package/dist/src-BVkLGnwV.mjs.map +0 -1
- package/dist/src-CWGmmrLZ.cjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const require_chunk = require("./chunk-DAgNkxik.cjs");
|
|
2
|
-
const require_FluidProvider = require("./FluidProvider-
|
|
2
|
+
const require_FluidProvider = require("./FluidProvider-CsIC3HL2.cjs");
|
|
3
3
|
const require_parse_api_errors = require("./parse-api-errors-CAnpE2_r.cjs");
|
|
4
|
-
const require_src = require("./src-
|
|
5
|
-
const require_src$1 = require("./src-
|
|
4
|
+
const require_src = require("./src-Da7I1fqK.cjs");
|
|
5
|
+
const require_src$1 = require("./src-DecFyd_1.cjs");
|
|
6
6
|
const require_dist = require("./dist-CtcLRHrv.cjs");
|
|
7
7
|
const require_dist$1 = require("./dist-BUWkpuUk.cjs");
|
|
8
8
|
let react = require("react");
|
|
@@ -40,21 +40,233 @@ function StatusBadge({ status, label, className }) {
|
|
|
40
40
|
}
|
|
41
41
|
//#endregion
|
|
42
42
|
//#region ../../contacts/ui/src/shared/components/contacts/allContacts/contactsTable.tsx
|
|
43
|
+
function getInitials(fullName) {
|
|
44
|
+
const trimmed = fullName?.trim();
|
|
45
|
+
if (!trimmed) return "?";
|
|
46
|
+
const parts = trimmed.split(/\s+/).filter(Boolean);
|
|
47
|
+
if (parts.length >= 2) {
|
|
48
|
+
const a = parts[0]?.[0];
|
|
49
|
+
const b = parts[1]?.[0];
|
|
50
|
+
return `${a ?? ""}${b ?? ""}`.toUpperCase() || "?";
|
|
51
|
+
}
|
|
52
|
+
return trimmed.slice(0, 2).toUpperCase();
|
|
53
|
+
}
|
|
54
|
+
function dedupeGroupLabels(labels) {
|
|
55
|
+
const seen = /* @__PURE__ */ new Set();
|
|
56
|
+
const out = [];
|
|
57
|
+
for (const label of labels) {
|
|
58
|
+
const key = label.toLowerCase();
|
|
59
|
+
if (seen.has(key)) continue;
|
|
60
|
+
seen.add(key);
|
|
61
|
+
out.push(label);
|
|
62
|
+
}
|
|
63
|
+
return out;
|
|
64
|
+
}
|
|
65
|
+
/** Pull a display label from one API group/tag object or string. */
|
|
66
|
+
function labelFromGroupLikeItem(item) {
|
|
67
|
+
if (typeof item === "string") return item.trim();
|
|
68
|
+
if (!item || typeof item !== "object") return "";
|
|
69
|
+
const o = item;
|
|
70
|
+
for (const k of [
|
|
71
|
+
"name",
|
|
72
|
+
"title",
|
|
73
|
+
"label",
|
|
74
|
+
"display_name"
|
|
75
|
+
]) {
|
|
76
|
+
const v = o[k];
|
|
77
|
+
if (typeof v === "string" && v.trim()) return v.trim();
|
|
78
|
+
}
|
|
79
|
+
return "";
|
|
80
|
+
}
|
|
81
|
+
function labelsFromGroupArray(value) {
|
|
82
|
+
if (!Array.isArray(value) || value.length === 0) return [];
|
|
83
|
+
return dedupeGroupLabels(value.map(labelFromGroupLikeItem).filter(Boolean));
|
|
84
|
+
}
|
|
85
|
+
function labelsFromMetadata(m) {
|
|
86
|
+
for (const key of [
|
|
87
|
+
"contact_groups",
|
|
88
|
+
"contactGroups",
|
|
89
|
+
"groups",
|
|
90
|
+
"labels",
|
|
91
|
+
"tags",
|
|
92
|
+
"segments"
|
|
93
|
+
]) {
|
|
94
|
+
const found = labelsFromGroupArray(m[key]);
|
|
95
|
+
if (found.length > 0) return found;
|
|
96
|
+
}
|
|
97
|
+
for (const key of [
|
|
98
|
+
"group_name",
|
|
99
|
+
"contact_group",
|
|
100
|
+
"group"
|
|
101
|
+
]) {
|
|
102
|
+
const v = m[key];
|
|
103
|
+
if (typeof v === "string" && v.trim()) return [v.trim()];
|
|
104
|
+
const one = labelFromGroupLikeItem(v);
|
|
105
|
+
if (one) return [one];
|
|
106
|
+
}
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
function firstNonEmptyGroupList(...candidates) {
|
|
110
|
+
for (const c of candidates) {
|
|
111
|
+
const labels = labelsFromGroupArray(c);
|
|
112
|
+
if (labels.length > 0) return labels;
|
|
113
|
+
}
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Ordered group labels for badges. Prefer plural/array sources before singular
|
|
118
|
+
* `contact_group` so we don't drop additional groups when the API sends both.
|
|
119
|
+
*/
|
|
120
|
+
function resolveContactGroupLabels(contact) {
|
|
121
|
+
const raw = contact;
|
|
122
|
+
const fromPlural = firstNonEmptyGroupList(raw.contact_groups, raw.contactGroups, raw.groups, raw.labels, raw.tags, raw.segments);
|
|
123
|
+
if (fromPlural.length > 0) return fromPlural;
|
|
124
|
+
const direct = raw.group;
|
|
125
|
+
if (typeof direct === "string" && direct.trim()) return [direct.trim()];
|
|
126
|
+
const nested = raw.contact_group;
|
|
127
|
+
const singleNested = labelFromGroupLikeItem(nested);
|
|
128
|
+
if (singleNested) return [singleNested];
|
|
129
|
+
const meta = contact.metadata;
|
|
130
|
+
if (meta && typeof meta === "object") {
|
|
131
|
+
const fromMeta = labelsFromMetadata(meta);
|
|
132
|
+
if (fromMeta.length > 0) return fromMeta;
|
|
133
|
+
}
|
|
134
|
+
const lead = contact.lead_type;
|
|
135
|
+
if (lead && String(lead).trim()) return [String(lead).replaceAll("_", " ")];
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
function RepContactCard({ contact, selected, onToggleSelect, onRowClick, onEditContact, setSelectedContacts, setOpenDeleteModal }) {
|
|
139
|
+
const groupLabels = resolveContactGroupLabels(contact);
|
|
140
|
+
const groupTitle = groupLabels.length > 0 ? groupLabels.join(", ") : void 0;
|
|
141
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Card, {
|
|
142
|
+
className: require_src.cn("border-border hover:bg-accent/30 h-[100px] w-full flex-col items-start justify-center gap-0 py-0 shadow-sm transition-colors", selected && "bg-accent/40 border-primary/25 ring-primary/20 ring-1"),
|
|
143
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.CardContent, {
|
|
144
|
+
className: "w-full px-3 py-0",
|
|
145
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
146
|
+
className: "flex items-center gap-2 sm:gap-3",
|
|
147
|
+
children: [
|
|
148
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
149
|
+
className: "flex shrink-0 items-center",
|
|
150
|
+
onClick: (e) => e.stopPropagation(),
|
|
151
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
152
|
+
type: "checkbox",
|
|
153
|
+
checked: selected,
|
|
154
|
+
onChange: () => onToggleSelect(contact.id),
|
|
155
|
+
"aria-label": `Select ${contact.full_name}`,
|
|
156
|
+
className: "accent-primary h-3.5 w-3.5 rounded sm:h-4 sm:w-4"
|
|
157
|
+
})
|
|
158
|
+
}),
|
|
159
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
160
|
+
type: "button",
|
|
161
|
+
className: "text-foreground focus-visible:ring-ring flex min-w-0 flex-1 items-center gap-2 rounded-md text-left outline-none focus-visible:ring-2 sm:gap-3",
|
|
162
|
+
onClick: () => onRowClick?.(contact),
|
|
163
|
+
children: [
|
|
164
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Avatar, {
|
|
165
|
+
className: "size-12 shrink-0",
|
|
166
|
+
children: [contact.avatar_url ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.AvatarImage, {
|
|
167
|
+
src: contact.avatar_url,
|
|
168
|
+
alt: contact.full_name || "Contact"
|
|
169
|
+
}) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.AvatarFallback, {
|
|
170
|
+
className: "border-border text-foreground bg-accent ring-border/80 text-xs font-semibold ring-1",
|
|
171
|
+
children: getInitials(contact.full_name)
|
|
172
|
+
})]
|
|
173
|
+
}),
|
|
174
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
175
|
+
className: "max-w-[32%] min-w-0 shrink truncate text-sm leading-tight font-semibold sm:max-w-none sm:flex-[1.15]",
|
|
176
|
+
title: contact.full_name,
|
|
177
|
+
children: contact.full_name || "—"
|
|
178
|
+
}),
|
|
179
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
180
|
+
className: "text-muted-foreground min-w-0 flex-[1.35] truncate text-xs leading-tight",
|
|
181
|
+
title: contact.email ?? void 0,
|
|
182
|
+
children: contact.email || "—"
|
|
183
|
+
}),
|
|
184
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
185
|
+
className: "text-muted-foreground min-w-0 flex-[0.95] truncate text-xs leading-tight",
|
|
186
|
+
title: contact.phone ?? void 0,
|
|
187
|
+
children: contact.phone || "—"
|
|
188
|
+
}),
|
|
189
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
190
|
+
className: "text-muted-foreground flex min-w-0 flex-[0.95] items-center gap-1 text-xs leading-tight",
|
|
191
|
+
title: groupTitle,
|
|
192
|
+
children: [groupLabels.length > 0 ? groupLabels.slice(0, 2).map((label, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Badge, {
|
|
193
|
+
variant: "secondary",
|
|
194
|
+
className: "max-w-[min(100%,10rem)] shrink truncate font-normal capitalize",
|
|
195
|
+
title: label,
|
|
196
|
+
children: label
|
|
197
|
+
}, `${contact.id}-group-${index}-${label}`)) : "—", groupLabels.length > 2 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
198
|
+
className: "text-muted-foreground shrink-0 text-[10px]",
|
|
199
|
+
children: ["+", groupLabels.length - 2]
|
|
200
|
+
})]
|
|
201
|
+
})
|
|
202
|
+
]
|
|
203
|
+
}),
|
|
204
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
205
|
+
className: "flex shrink-0 items-center",
|
|
206
|
+
onClick: (e) => e.stopPropagation(),
|
|
207
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenu, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuTrigger, {
|
|
208
|
+
asChild: true,
|
|
209
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Button, {
|
|
210
|
+
variant: "ghost",
|
|
211
|
+
size: "icon-xs",
|
|
212
|
+
"aria-label": "Contact actions",
|
|
213
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.EllipsisVertical, { className: "h-4 w-4" })
|
|
214
|
+
})
|
|
215
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuContent, {
|
|
216
|
+
align: "end",
|
|
217
|
+
children: [onEditContact && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
|
|
218
|
+
onClick: () => onEditContact(contact),
|
|
219
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Pencil, { className: "h-3.5 w-3.5" }), "Edit"]
|
|
220
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuSeparator, {})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
|
|
221
|
+
className: "text-destructive",
|
|
222
|
+
onClick: () => {
|
|
223
|
+
setSelectedContacts([contact]);
|
|
224
|
+
setOpenDeleteModal(true);
|
|
225
|
+
},
|
|
226
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Trash2, { className: "h-3.5 w-3.5" }), "Delete"]
|
|
227
|
+
})]
|
|
228
|
+
})] })
|
|
229
|
+
})
|
|
230
|
+
]
|
|
231
|
+
})
|
|
232
|
+
})
|
|
233
|
+
});
|
|
234
|
+
}
|
|
43
235
|
const TABS = [
|
|
44
236
|
"All",
|
|
45
237
|
"Leads",
|
|
46
238
|
"Customers"
|
|
47
239
|
];
|
|
240
|
+
function getSortComparable(contact, field) {
|
|
241
|
+
if (field === "name") return contact.full_name ?? "";
|
|
242
|
+
return contact.email ?? "";
|
|
243
|
+
}
|
|
48
244
|
const PAGE_SIZE = 25;
|
|
49
|
-
|
|
245
|
+
const CONTACT_SORT_COLUMNS = [{
|
|
246
|
+
id: "name",
|
|
247
|
+
name: "Name"
|
|
248
|
+
}, {
|
|
249
|
+
id: "email",
|
|
250
|
+
name: "Email"
|
|
251
|
+
}];
|
|
252
|
+
function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setOpenDeleteModal, onEditContact, onRowClick, resetKey, tableLayout }) {
|
|
253
|
+
const isMemberLayout = tableLayout === "members";
|
|
50
254
|
const [currentPage, setCurrentPage] = (0, react.useState)(1);
|
|
51
255
|
const [searchTerm, setSearchTerm] = (0, react.useState)("");
|
|
52
256
|
const [activeTab, setActiveTab] = (0, react.useState)("All");
|
|
257
|
+
const [currentSort, setCurrentSort] = (0, react.useState)({
|
|
258
|
+
id: "name",
|
|
259
|
+
desc: false
|
|
260
|
+
});
|
|
53
261
|
const [selectedIds, setSelectedIds] = (0, react.useState)(/* @__PURE__ */ new Set());
|
|
54
262
|
(0, react.useEffect)(() => {
|
|
55
263
|
setCurrentPage(1);
|
|
56
264
|
setSelectedIds(/* @__PURE__ */ new Set());
|
|
57
|
-
}, [
|
|
265
|
+
}, [
|
|
266
|
+
searchTerm,
|
|
267
|
+
activeTab,
|
|
268
|
+
currentSort
|
|
269
|
+
]);
|
|
58
270
|
(0, react.useEffect)(() => {
|
|
59
271
|
setSelectedIds(/* @__PURE__ */ new Set());
|
|
60
272
|
}, [currentPage]);
|
|
@@ -66,19 +278,34 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
|
|
|
66
278
|
queryKey: [queryKeyPrefix, {
|
|
67
279
|
searchTerm,
|
|
68
280
|
currentPage,
|
|
69
|
-
activeTab
|
|
281
|
+
activeTab,
|
|
282
|
+
sortField: currentSort.id,
|
|
283
|
+
sortDesc: currentSort.desc
|
|
70
284
|
}],
|
|
71
285
|
queryFn: () => listContacts({
|
|
72
286
|
search_query: searchTerm || void 0,
|
|
73
287
|
page: currentPage,
|
|
74
288
|
per_page: PAGE_SIZE,
|
|
75
|
-
...resolvedStatus ? { status: resolvedStatus } : {}
|
|
76
|
-
|
|
289
|
+
...resolvedStatus ? { status: resolvedStatus } : {},
|
|
290
|
+
sort_by: currentSort.id,
|
|
291
|
+
sort_direction: currentSort.desc ? "desc" : "asc"
|
|
292
|
+
}),
|
|
293
|
+
placeholderData: _tanstack_react_query.keepPreviousData
|
|
77
294
|
});
|
|
78
295
|
const items = (0, react.useMemo)(() => data?.contacts ?? [], [data?.contacts]);
|
|
296
|
+
const displayItems = (0, react.useMemo)(() => {
|
|
297
|
+
const sortField = currentSort.id;
|
|
298
|
+
const sortDir = currentSort.desc ? "desc" : "asc";
|
|
299
|
+
return [...items].sort((a, b) => {
|
|
300
|
+
const av = getSortComparable(a, sortField).toLowerCase();
|
|
301
|
+
const bv = getSortComparable(b, sortField).toLowerCase();
|
|
302
|
+
const cmp = av.localeCompare(bv, void 0, { sensitivity: "base" });
|
|
303
|
+
return sortDir === "asc" ? cmp : -cmp;
|
|
304
|
+
});
|
|
305
|
+
}, [items, currentSort]);
|
|
79
306
|
const totalItems = data?.meta?.total_count ?? 0;
|
|
80
307
|
const totalPages = Math.max(1, Math.ceil(totalItems / PAGE_SIZE));
|
|
81
|
-
const allSelected =
|
|
308
|
+
const allSelected = displayItems.length > 0 && displayItems.every((c) => selectedIds.has(c.id));
|
|
82
309
|
const someSelected = selectedIds.size > 0 && !allSelected;
|
|
83
310
|
const selectAllRef = (0, react.useRef)(null);
|
|
84
311
|
(0, react.useEffect)(() => {
|
|
@@ -87,11 +314,11 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
|
|
|
87
314
|
const toggleSelectAll = (0, react.useCallback)(() => {
|
|
88
315
|
setSelectedIds((prev) => {
|
|
89
316
|
const next = new Set(prev);
|
|
90
|
-
if (allSelected) for (const item of
|
|
91
|
-
else for (const item of
|
|
317
|
+
if (allSelected) for (const item of displayItems) next.delete(item.id);
|
|
318
|
+
else for (const item of displayItems) next.add(item.id);
|
|
92
319
|
return next;
|
|
93
320
|
});
|
|
94
|
-
}, [allSelected,
|
|
321
|
+
}, [allSelected, displayItems]);
|
|
95
322
|
const toggleSelect = (0, react.useCallback)((id) => {
|
|
96
323
|
setSelectedIds((prev) => {
|
|
97
324
|
const next = new Set(prev);
|
|
@@ -101,13 +328,13 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
|
|
|
101
328
|
});
|
|
102
329
|
}, []);
|
|
103
330
|
const handleBulkDelete = (0, react.useCallback)(() => {
|
|
104
|
-
const selected =
|
|
331
|
+
const selected = displayItems.filter((c) => selectedIds.has(c.id));
|
|
105
332
|
if (selected.length > 0) {
|
|
106
333
|
setSelectedContacts(selected);
|
|
107
334
|
setOpenDeleteModal(true);
|
|
108
335
|
}
|
|
109
336
|
}, [
|
|
110
|
-
|
|
337
|
+
displayItems,
|
|
111
338
|
selectedIds,
|
|
112
339
|
setSelectedContacts,
|
|
113
340
|
setOpenDeleteModal
|
|
@@ -118,18 +345,55 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
|
|
|
118
345
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
119
346
|
className: "flex flex-col gap-2 p-3 sm:flex-row sm:items-center sm:justify-between",
|
|
120
347
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
121
|
-
className: "flex items-center gap-
|
|
122
|
-
children:
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
348
|
+
className: "flex flex-wrap items-center gap-2 sm:gap-3",
|
|
349
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
350
|
+
className: "flex items-center gap-1",
|
|
351
|
+
children: TABS.map((tab) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Button, {
|
|
352
|
+
variant: "ghost",
|
|
353
|
+
size: "sm",
|
|
354
|
+
onClick: () => setActiveTab(tab),
|
|
355
|
+
className: require_src.cn("rounded-md text-xs", activeTab === tab && "bg-accent font-bold"),
|
|
356
|
+
children: tab
|
|
357
|
+
}, tab))
|
|
358
|
+
})
|
|
359
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
360
|
+
className: "flex min-w-0 flex-1 items-center justify-end gap-2 sm:max-w-none",
|
|
361
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
362
|
+
className: "shrink-0",
|
|
363
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenu, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuTrigger, {
|
|
364
|
+
asChild: true,
|
|
365
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Button, {
|
|
366
|
+
variant: "ghost",
|
|
367
|
+
size: "icon-xs",
|
|
368
|
+
"aria-label": "Sort contacts",
|
|
369
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ArrowUpDown, { className: "h-4 w-4" })
|
|
370
|
+
})
|
|
371
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuContent, {
|
|
372
|
+
align: "end",
|
|
373
|
+
className: "w-48",
|
|
374
|
+
children: [
|
|
375
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuLabel, {
|
|
376
|
+
className: "text-xs font-medium",
|
|
377
|
+
children: "Sort by"
|
|
378
|
+
}),
|
|
379
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuSeparator, {}),
|
|
380
|
+
CONTACT_SORT_COLUMNS.map((col) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
|
|
381
|
+
onClick: () => setCurrentSort((prev) => ({
|
|
382
|
+
id: col.id,
|
|
383
|
+
desc: prev.id === col.id ? !prev.desc : false
|
|
384
|
+
})),
|
|
385
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
386
|
+
className: "flex-1",
|
|
387
|
+
children: col.name
|
|
388
|
+
}), currentSort.id === col.id && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
389
|
+
className: "text-muted-foreground text-xs",
|
|
390
|
+
children: currentSort.desc ? "↓" : "↑"
|
|
391
|
+
})]
|
|
392
|
+
}, col.id))
|
|
393
|
+
]
|
|
394
|
+
})] })
|
|
395
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
396
|
+
className: "relative min-w-0 flex-1 sm:w-auto sm:min-w-[220px] sm:flex-initial",
|
|
133
397
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
134
398
|
className: "pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3",
|
|
135
399
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Search, { className: "text-muted-foreground h-4 w-4" })
|
|
@@ -140,10 +404,81 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
|
|
|
140
404
|
className: "h-8 w-full pl-10 text-sm",
|
|
141
405
|
placeholder: "Search contacts..."
|
|
142
406
|
})]
|
|
143
|
-
})
|
|
407
|
+
})]
|
|
144
408
|
})]
|
|
145
409
|
}),
|
|
146
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
410
|
+
isMemberLayout ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
411
|
+
className: "space-y-3 p-3",
|
|
412
|
+
children: [!isLoading && items.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
413
|
+
className: "bg-muted/40 border-border flex flex-wrap items-center justify-between gap-2 rounded-lg border px-3 py-2",
|
|
414
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
415
|
+
className: "flex items-center gap-3",
|
|
416
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
417
|
+
ref: selectAllRef,
|
|
418
|
+
type: "checkbox",
|
|
419
|
+
checked: allSelected,
|
|
420
|
+
onChange: toggleSelectAll,
|
|
421
|
+
"aria-label": allSelected ? "Deselect all" : "Select all on this page",
|
|
422
|
+
className: "accent-primary h-4 w-4 shrink-0 rounded"
|
|
423
|
+
}), selectedIds.size > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
424
|
+
className: "text-foreground text-sm font-medium",
|
|
425
|
+
children: [selectedIds.size, " selected"]
|
|
426
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
427
|
+
className: "text-muted-foreground text-sm",
|
|
428
|
+
children: "Select all"
|
|
429
|
+
})]
|
|
430
|
+
}), selectedIds.size > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenu, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuTrigger, {
|
|
431
|
+
asChild: true,
|
|
432
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Button, {
|
|
433
|
+
variant: "ghost",
|
|
434
|
+
size: "sm",
|
|
435
|
+
className: "h-8 gap-1 text-xs",
|
|
436
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.EllipsisVertical, { className: "h-4 w-4" }), "Actions"]
|
|
437
|
+
})
|
|
438
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuContent, {
|
|
439
|
+
align: "end",
|
|
440
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
|
|
441
|
+
className: "text-destructive",
|
|
442
|
+
onClick: handleBulkDelete,
|
|
443
|
+
children: [
|
|
444
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Trash2, { className: "h-3.5 w-3.5" }),
|
|
445
|
+
"Delete ",
|
|
446
|
+
selectedIds.size,
|
|
447
|
+
" ",
|
|
448
|
+
selectedIds.size === 1 ? "contact" : "contacts"
|
|
449
|
+
]
|
|
450
|
+
})
|
|
451
|
+
})] }) : null]
|
|
452
|
+
}) : null, isLoading ? Array(5).fill(0).map((_, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Card, {
|
|
453
|
+
className: "border-border h-[100px] w-full flex-col items-start justify-center gap-0 py-0 shadow-sm",
|
|
454
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.CardContent, {
|
|
455
|
+
className: "w-full px-3 py-0",
|
|
456
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
457
|
+
className: "flex items-center gap-2 sm:gap-3",
|
|
458
|
+
children: [
|
|
459
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-3.5 w-3.5 shrink-0 rounded sm:h-4 sm:w-4" }),
|
|
460
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "size-12 shrink-0 rounded-full" }),
|
|
461
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-3.5 max-w-[32%] shrink sm:max-w-none sm:flex-[1.15]" }),
|
|
462
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-3.5 min-w-0 flex-[1.35]" }),
|
|
463
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-3.5 min-w-0 flex-[0.95]" }),
|
|
464
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "h-3.5 min-w-0 flex-[0.95]" }),
|
|
465
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.Skeleton, { className: "size-7 shrink-0 rounded-md" })
|
|
466
|
+
]
|
|
467
|
+
})
|
|
468
|
+
})
|
|
469
|
+
}, `card-skel-${i}`)) : items.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
470
|
+
className: "text-muted-foreground py-10 text-center text-sm",
|
|
471
|
+
children: "No contacts found"
|
|
472
|
+
}) : displayItems.map((contact) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RepContactCard, {
|
|
473
|
+
contact,
|
|
474
|
+
selected: selectedIds.has(contact.id),
|
|
475
|
+
onToggleSelect: toggleSelect,
|
|
476
|
+
onRowClick,
|
|
477
|
+
onEditContact,
|
|
478
|
+
setSelectedContacts,
|
|
479
|
+
setOpenDeleteModal
|
|
480
|
+
}, contact.id))]
|
|
481
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
147
482
|
className: "block md:hidden",
|
|
148
483
|
children: isLoading ? Array(5).fill(0).map((_, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
149
484
|
className: "border-border border-b p-4",
|
|
@@ -154,11 +489,11 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
|
|
|
154
489
|
}, `skeleton-${i}`)) : items.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
155
490
|
className: "text-muted-foreground px-3 py-8 text-center text-sm",
|
|
156
491
|
children: "No contacts found"
|
|
157
|
-
}) :
|
|
492
|
+
}) : displayItems.map((contact) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
158
493
|
className: "border-border hover:bg-accent cursor-pointer border-b p-4 transition-colors last:border-b-0",
|
|
159
494
|
onClick: () => onRowClick?.(contact),
|
|
160
495
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
161
|
-
className: "flex items-center justify-between",
|
|
496
|
+
className: "flex items-center justify-between gap-3",
|
|
162
497
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
163
498
|
className: "min-w-0 flex-1",
|
|
164
499
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
@@ -171,8 +506,7 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
|
|
|
171
506
|
}), contact.status && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StatusBadge, { status: contact.status })]
|
|
172
507
|
})
|
|
173
508
|
}, contact.id))
|
|
174
|
-
}),
|
|
175
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
509
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
176
510
|
className: "hidden md:block",
|
|
177
511
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.Table, {
|
|
178
512
|
className: "min-w-full table-fixed",
|
|
@@ -299,7 +633,7 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
|
|
|
299
633
|
colSpan: 7,
|
|
300
634
|
className: "text-muted-foreground px-3 py-8 text-center",
|
|
301
635
|
children: "No contacts found"
|
|
302
|
-
}) }) :
|
|
636
|
+
}) }) : displayItems.map((contact) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.TableRow, {
|
|
303
637
|
className: require_src.cn("cursor-pointer", selectedIds.has(contact.id) && "bg-accent"),
|
|
304
638
|
onClick: () => onRowClick?.(contact),
|
|
305
639
|
children: [
|
|
@@ -354,10 +688,10 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
|
|
|
354
688
|
})
|
|
355
689
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuContent, {
|
|
356
690
|
align: "end",
|
|
357
|
-
children: [onEditContact && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
|
|
691
|
+
children: [onEditContact && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
|
|
358
692
|
onClick: () => onEditContact(contact),
|
|
359
693
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Pencil, { className: "h-3.5 w-3.5" }), "Edit"]
|
|
360
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
|
|
694
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.DropdownMenuSeparator, {})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_src.DropdownMenuItem, {
|
|
361
695
|
className: "text-destructive",
|
|
362
696
|
onClick: () => {
|
|
363
697
|
setSelectedContacts([contact]);
|
|
@@ -372,7 +706,7 @@ function ContactsTable({ listContacts, queryKeyPrefix, setSelectedContacts, setO
|
|
|
372
706
|
})
|
|
373
707
|
]
|
|
374
708
|
})
|
|
375
|
-
}),
|
|
709
|
+
})] }),
|
|
376
710
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src$1.PaginationFooter, {
|
|
377
711
|
currentPage,
|
|
378
712
|
totalPages,
|
|
@@ -396,7 +730,7 @@ const CONTACTS_QUERY_KEYS = {
|
|
|
396
730
|
};
|
|
397
731
|
//#endregion
|
|
398
732
|
//#region ../../contacts/ui/src/shared/components/contacts/allContacts/contactsPage.tsx
|
|
399
|
-
function ContactsPage({ listContacts, deleteContacts, queryKeyPrefix, header, onEditContact, onRowClick }) {
|
|
733
|
+
function ContactsPage({ listContacts, deleteContacts, queryKeyPrefix, header, onEditContact, onRowClick, tableLayout }) {
|
|
400
734
|
const [openDeleteModal, setOpenDeleteModal] = (0, react.useState)(false);
|
|
401
735
|
const [selectedContacts, setSelectedContacts] = (0, react.useState)([]);
|
|
402
736
|
const [resetKey, setResetKey] = (0, react.useState)(0);
|
|
@@ -435,7 +769,8 @@ function ContactsPage({ listContacts, deleteContacts, queryKeyPrefix, header, on
|
|
|
435
769
|
setOpenDeleteModal,
|
|
436
770
|
onEditContact,
|
|
437
771
|
onRowClick,
|
|
438
|
-
resetKey
|
|
772
|
+
resetKey,
|
|
773
|
+
tableLayout
|
|
439
774
|
})
|
|
440
775
|
}),
|
|
441
776
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_src.AlertDialog, {
|
|
@@ -3708,6 +4043,7 @@ function ContactListView({ client, onNavigate, onContactSelect }) {
|
|
|
3708
4043
|
deleteContacts: (0, react.useCallback)((ids) => bulkDeleteUserContacts(client, { contact_ids: ids }), [client]),
|
|
3709
4044
|
queryKeyPrefix: QUERY_KEY_PREFIX,
|
|
3710
4045
|
header,
|
|
4046
|
+
tableLayout: "members",
|
|
3711
4047
|
onEditContact: handleSelectContact,
|
|
3712
4048
|
onRowClick: handleSelectContact
|
|
3713
4049
|
});
|
|
@@ -3936,4 +4272,4 @@ Object.defineProperty(exports, "contactsScreenPropertySchema", {
|
|
|
3936
4272
|
}
|
|
3937
4273
|
});
|
|
3938
4274
|
|
|
3939
|
-
//# sourceMappingURL=ContactsScreen-
|
|
4275
|
+
//# sourceMappingURL=ContactsScreen-9G2HgNsy.cjs.map
|