@burdenoff/microfe-channel 2026.625.2 → 2026.625.3
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/channel/modules/channels/pages/ChannelDashboardPage.js +19 -12
- package/dist/channel/modules/channels/pages/ChannelDashboardPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelDetailsPage.js +407 -353
- package/dist/channel/modules/channels/pages/ChannelDetailsPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelSettingsPage.js +93 -87
- package/dist/channel/modules/channels/pages/ChannelSettingsPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelUsersPage.js +154 -134
- package/dist/channel/modules/channels/pages/ChannelUsersPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelsListPage.js +279 -244
- package/dist/channel/modules/channels/pages/ChannelsListPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ConnectionDetailsPage.js +277 -232
- package/dist/channel/modules/channels/pages/ConnectionDetailsPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ConnectionsListPage.js +159 -129
- package/dist/channel/modules/channels/pages/ConnectionsListPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/CreateChannelPage.js +28 -22
- package/dist/channel/modules/channels/pages/CreateChannelPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/CreateConnectionPage.js +72 -65
- package/dist/channel/modules/channels/pages/CreateConnectionPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/DeliveryHistoryPage.js +99 -79
- package/dist/channel/modules/channels/pages/DeliveryHistoryPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/EditChannelPage.js +154 -148
- package/dist/channel/modules/channels/pages/EditChannelPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/EditConnectionPage.js +69 -62
- package/dist/channel/modules/channels/pages/EditConnectionPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/SendMessagePage.js +131 -124
- package/dist/channel/modules/channels/pages/SendMessagePage.js.map +1 -1
- package/dist/channel/modules/channels/pages/WebhookEventsPage.js +174 -154
- package/dist/channel/modules/channels/pages/WebhookEventsPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,16 +2,16 @@ import { useChannel as e } from "../../../providers/ChannelProvider.js";
|
|
|
2
2
|
import { useChannel as t } from "../../../hooks/useChannels.js";
|
|
3
3
|
import { PermissionGuard as n } from "../../../components/PermissionGuard.js";
|
|
4
4
|
import { CHANNEL_PERMISSIONS as r } from "../../../constants/permissions.js";
|
|
5
|
-
import { useExportChannelUsers as
|
|
6
|
-
import { useCallback as
|
|
7
|
-
import { useI18n as
|
|
8
|
-
import { AlertCircle as
|
|
9
|
-
import { useNavigate as
|
|
10
|
-
import { usePermissions as
|
|
11
|
-
import { Fragment as
|
|
12
|
-
import { CTAOverflowMenu as
|
|
5
|
+
import { useExportChannelUsers as i } from "../hooks/useExport.js";
|
|
6
|
+
import { useCallback as a, useEffect as o, useRef as s, useState as c } from "react";
|
|
7
|
+
import { useI18n as l } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
8
|
+
import { AlertCircle as u, ArrowLeft as d, Bell as f, BellOff as p, CheckCircle2 as m, ChevronLeft as ee, ChevronRight as te, Clock as h, Download as ne, Loader2 as g, RefreshCw as _, User as v, UserCheck as y, XCircle as b } from "lucide-react";
|
|
9
|
+
import { useNavigate as re, useParams as x } from "react-router-dom";
|
|
10
|
+
import { usePermissions as S } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
11
|
+
import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
|
|
12
|
+
import { CTAOverflowMenu as ie, EmphasisPanel as ae, IllustratedEmptyState as oe, PagePurpose as se, ResponsiveTable as ce } from "@burdenoff/fe-libs/ui";
|
|
13
13
|
//#region src/channel/modules/channels/pages/ChannelUsersPage.tsx
|
|
14
|
-
var
|
|
14
|
+
var E = {
|
|
15
15
|
ONLINE: {
|
|
16
16
|
label: "Online",
|
|
17
17
|
color: "text-status-success-text"
|
|
@@ -28,76 +28,76 @@ var D = {
|
|
|
28
28
|
label: "Do Not Disturb",
|
|
29
29
|
color: "text-status-error-text"
|
|
30
30
|
}
|
|
31
|
-
},
|
|
31
|
+
}, D = {
|
|
32
32
|
PENDING: {
|
|
33
33
|
label: "Pending",
|
|
34
34
|
color: "text-status-warning-text bg-status-warning-bg-subtle",
|
|
35
|
-
icon:
|
|
35
|
+
icon: h
|
|
36
36
|
},
|
|
37
37
|
APPROVED: {
|
|
38
38
|
label: "Approved",
|
|
39
39
|
color: "text-status-success-text bg-status-success-bg-subtle",
|
|
40
|
-
icon:
|
|
40
|
+
icon: m
|
|
41
41
|
},
|
|
42
42
|
EXPIRED: {
|
|
43
43
|
label: "Expired",
|
|
44
44
|
color: "text-text-secondary bg-bg-sunken",
|
|
45
|
-
icon:
|
|
45
|
+
icon: b
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
-
function
|
|
49
|
-
let { channelId:
|
|
50
|
-
let n =
|
|
48
|
+
function O() {
|
|
49
|
+
let { channelId: m } = x(), h = re(), { hasPermission: O } = S(), k = O(r.CHANNEL_USER_EXPORT), { t: A } = l(), j = (e, t) => {
|
|
50
|
+
let n = A(e);
|
|
51
51
|
return n === e ? t : n;
|
|
52
|
-
}, { organizationId:
|
|
53
|
-
if (
|
|
54
|
-
|
|
52
|
+
}, { organizationId: M } = e(), { triggerExport: N, isExporting: P, exportError: F } = i(M ?? void 0, m), [I, L] = c(!0), [R, z] = c([]), [B, V] = c(25), [H, U] = c(0), [W, G] = c(0), { channel: K, isLoading: le, error: q, fetchUserPlatformConnections: J } = t(m), Y = a(async (e = 0) => {
|
|
53
|
+
if (m) {
|
|
54
|
+
L(!0);
|
|
55
55
|
try {
|
|
56
|
-
let t = await J(
|
|
57
|
-
|
|
56
|
+
let t = await J(B, e * B);
|
|
57
|
+
z(t.items), U(t.total);
|
|
58
58
|
} finally {
|
|
59
|
-
|
|
59
|
+
L(!1);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
}, [
|
|
63
|
-
|
|
63
|
+
m,
|
|
64
64
|
J,
|
|
65
|
-
|
|
66
|
-
]), X =
|
|
67
|
-
|
|
65
|
+
B
|
|
66
|
+
]), X = s(Y);
|
|
67
|
+
o(() => {
|
|
68
68
|
X.current = Y;
|
|
69
69
|
});
|
|
70
|
-
let Z =
|
|
71
|
-
|
|
70
|
+
let Z = s(!0), Q = s(!1);
|
|
71
|
+
o(() => {
|
|
72
72
|
Promise.resolve().then(() => {
|
|
73
73
|
Q.current = !0, G(0), X.current(0).finally(() => {
|
|
74
74
|
Q.current = !1;
|
|
75
75
|
});
|
|
76
76
|
});
|
|
77
|
-
}, [
|
|
77
|
+
}, [B]), o(() => {
|
|
78
78
|
if (Z.current) {
|
|
79
79
|
Z.current = !1;
|
|
80
80
|
return;
|
|
81
81
|
}
|
|
82
82
|
Q.current || Promise.resolve().then(() => X.current(W));
|
|
83
83
|
}, [W]);
|
|
84
|
-
let $ = Math.max(1, Math.ceil(
|
|
84
|
+
let $ = Math.max(1, Math.ceil(H / B)), ue = W > 0, de = W < $ - 1, fe = (e) => E[e] || E.OFFLINE, pe = (e) => D[e] || D.EXPIRED, me = [
|
|
85
85
|
{
|
|
86
86
|
key: "user",
|
|
87
|
-
header:
|
|
87
|
+
header: j("channel.user", "User"),
|
|
88
88
|
priority: "primary",
|
|
89
|
-
cell: (e) => /* @__PURE__ */
|
|
89
|
+
cell: (e) => /* @__PURE__ */ T("div", {
|
|
90
90
|
className: "flex items-center gap-3",
|
|
91
|
-
children: [/* @__PURE__ */
|
|
91
|
+
children: [/* @__PURE__ */ w("div", {
|
|
92
92
|
className: "size-8 bg-accent-primary/10 rounded-full flex items-center justify-center",
|
|
93
|
-
children: /* @__PURE__ */
|
|
93
|
+
children: /* @__PURE__ */ w(v, {
|
|
94
94
|
size: 16,
|
|
95
95
|
className: "text-accent-primary"
|
|
96
96
|
})
|
|
97
|
-
}), /* @__PURE__ */
|
|
97
|
+
}), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
|
|
98
98
|
className: "text-sm font-medium text-text-primary",
|
|
99
99
|
children: e.externalDisplayName || "Unknown"
|
|
100
|
-
}), e.externalUsername && /* @__PURE__ */
|
|
100
|
+
}), e.externalUsername && /* @__PURE__ */ w("p", {
|
|
101
101
|
className: "text-xs text-text-secondary",
|
|
102
102
|
children: e.externalUsername
|
|
103
103
|
})] })]
|
|
@@ -105,29 +105,29 @@ function k() {
|
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
107
|
key: "platformId",
|
|
108
|
-
header:
|
|
108
|
+
header: j("channel.platformId", "Platform ID"),
|
|
109
109
|
priority: "secondary",
|
|
110
110
|
cellClassName: "text-sm font-mono text-text-secondary",
|
|
111
111
|
cell: (e) => e.externalUserId
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
114
|
key: "source",
|
|
115
|
-
header:
|
|
115
|
+
header: j("channel.source", "Source"),
|
|
116
116
|
priority: "secondary",
|
|
117
|
-
cell: (e) => /* @__PURE__ */
|
|
117
|
+
cell: (e) => /* @__PURE__ */ w("span", {
|
|
118
118
|
className: "text-xs text-text-secondary bg-bg-sunken px-2 py-1 rounded",
|
|
119
119
|
children: e.source
|
|
120
120
|
})
|
|
121
121
|
},
|
|
122
122
|
{
|
|
123
123
|
key: "status",
|
|
124
|
-
header:
|
|
124
|
+
header: j("channel.status", "Status"),
|
|
125
125
|
priority: "primary",
|
|
126
126
|
cell: (e) => {
|
|
127
|
-
let t =
|
|
128
|
-
return /* @__PURE__ */
|
|
127
|
+
let t = fe(e.presenceStatus);
|
|
128
|
+
return /* @__PURE__ */ T("div", {
|
|
129
129
|
className: "flex items-center gap-2",
|
|
130
|
-
children: [/* @__PURE__ */
|
|
130
|
+
children: [/* @__PURE__ */ w("span", { className: `w-2 h-2 rounded-full ${t.color.replace("text-", "bg-")}` }), /* @__PURE__ */ w("span", {
|
|
131
131
|
className: `text-sm ${t.color}`,
|
|
132
132
|
children: t.label
|
|
133
133
|
})]
|
|
@@ -136,14 +136,14 @@ function k() {
|
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
138
|
key: "pairing",
|
|
139
|
-
header:
|
|
139
|
+
header: j("channel.pairing", "Pairing"),
|
|
140
140
|
priority: "secondary",
|
|
141
141
|
cell: (e) => {
|
|
142
|
-
let t = e.pairingStatus ?
|
|
143
|
-
return e.pairingStatus && t ? /* @__PURE__ */
|
|
142
|
+
let t = e.pairingStatus ? pe(e.pairingStatus) : null, n = t?.icon ?? b;
|
|
143
|
+
return e.pairingStatus && t ? /* @__PURE__ */ T("span", {
|
|
144
144
|
className: `inline-flex items-center gap-1 text-xs px-2 py-1 rounded ${t.color}`,
|
|
145
|
-
children: [/* @__PURE__ */
|
|
146
|
-
}) : /* @__PURE__ */
|
|
145
|
+
children: [/* @__PURE__ */ w(n, { size: 12 }), t.label]
|
|
146
|
+
}) : /* @__PURE__ */ w("span", {
|
|
147
147
|
className: "text-xs text-text-secondary",
|
|
148
148
|
children: "-"
|
|
149
149
|
});
|
|
@@ -151,205 +151,225 @@ function k() {
|
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
153
|
key: "notifications",
|
|
154
|
-
header:
|
|
154
|
+
header: j("channel.notifications", "Notifications"),
|
|
155
155
|
priority: "secondary",
|
|
156
|
-
cell: (e) => e.notificationsEnabled ? /* @__PURE__ */
|
|
156
|
+
cell: (e) => e.notificationsEnabled ? /* @__PURE__ */ T("span", {
|
|
157
157
|
className: "inline-flex items-center gap-1",
|
|
158
|
-
children: [/* @__PURE__ */
|
|
158
|
+
children: [/* @__PURE__ */ w(f, {
|
|
159
159
|
size: 16,
|
|
160
160
|
className: "text-status-success-text",
|
|
161
161
|
"aria-hidden": "true"
|
|
162
|
-
}), /* @__PURE__ */
|
|
162
|
+
}), /* @__PURE__ */ w("span", {
|
|
163
163
|
className: "sr-only",
|
|
164
|
-
children:
|
|
164
|
+
children: j("channel.enabled", "Enabled")
|
|
165
165
|
})]
|
|
166
|
-
}) : /* @__PURE__ */
|
|
166
|
+
}) : /* @__PURE__ */ T("span", {
|
|
167
167
|
className: "inline-flex items-center gap-1",
|
|
168
|
-
children: [/* @__PURE__ */
|
|
168
|
+
children: [/* @__PURE__ */ w(p, {
|
|
169
169
|
size: 16,
|
|
170
170
|
className: "text-text-secondary",
|
|
171
171
|
"aria-hidden": "true"
|
|
172
|
-
}), /* @__PURE__ */
|
|
172
|
+
}), /* @__PURE__ */ w("span", {
|
|
173
173
|
className: "sr-only",
|
|
174
|
-
children:
|
|
174
|
+
children: j("channel.disabled", "Disabled")
|
|
175
175
|
})]
|
|
176
176
|
})
|
|
177
177
|
},
|
|
178
178
|
{
|
|
179
179
|
key: "dmAllowed",
|
|
180
|
-
header:
|
|
180
|
+
header: j("channel.dmAllowed", "DM Allowed"),
|
|
181
181
|
priority: "secondary",
|
|
182
|
-
cell: (e) => e.dmAllowed ? /* @__PURE__ */
|
|
182
|
+
cell: (e) => e.dmAllowed ? /* @__PURE__ */ T("span", {
|
|
183
183
|
className: "inline-flex items-center gap-1 text-sm text-status-success-text",
|
|
184
|
-
children: [/* @__PURE__ */
|
|
185
|
-
}) : /* @__PURE__ */
|
|
184
|
+
children: [/* @__PURE__ */ w(y, { size: 16 }), j("channel.allowed", "Allowed")]
|
|
185
|
+
}) : /* @__PURE__ */ T("span", {
|
|
186
186
|
className: "inline-flex items-center gap-1 text-sm text-text-secondary",
|
|
187
|
-
children: [/* @__PURE__ */
|
|
187
|
+
children: [/* @__PURE__ */ w(b, { size: 16 }), j("channel.blocked", "Blocked")]
|
|
188
188
|
})
|
|
189
189
|
}
|
|
190
190
|
];
|
|
191
|
-
return
|
|
191
|
+
return le ? /* @__PURE__ */ w("div", {
|
|
192
192
|
className: "flex items-center justify-center min-h-screen",
|
|
193
|
-
children: /* @__PURE__ */
|
|
193
|
+
children: /* @__PURE__ */ w(g, {
|
|
194
194
|
size: 32,
|
|
195
195
|
className: "animate-spin text-accent-primary"
|
|
196
196
|
})
|
|
197
|
-
}) : q || !K ? /* @__PURE__ */
|
|
197
|
+
}) : q || !K ? /* @__PURE__ */ w("div", {
|
|
198
198
|
className: "p-6",
|
|
199
|
-
children: /* @__PURE__ */
|
|
199
|
+
children: /* @__PURE__ */ T("div", {
|
|
200
200
|
className: "flex items-center gap-3 p-4 bg-status-error-bg-subtle border border-status-error-border rounded-lg",
|
|
201
201
|
children: [
|
|
202
|
-
/* @__PURE__ */
|
|
202
|
+
/* @__PURE__ */ w(u, {
|
|
203
203
|
size: 20,
|
|
204
204
|
className: "text-status-error-text"
|
|
205
205
|
}),
|
|
206
|
-
/* @__PURE__ */
|
|
206
|
+
/* @__PURE__ */ w("div", { children: /* @__PURE__ */ w("p", {
|
|
207
207
|
className: "text-sm font-medium text-status-error-text",
|
|
208
208
|
children: q || "Channel not found"
|
|
209
209
|
}) }),
|
|
210
|
-
/* @__PURE__ */
|
|
210
|
+
/* @__PURE__ */ w("button", {
|
|
211
211
|
type: "button",
|
|
212
|
-
onClick: () =>
|
|
212
|
+
onClick: () => h(`/channels/${m}`),
|
|
213
213
|
className: "ml-auto px-3 py-1 text-sm text-status-error-text hover:bg-status-error-bg-subtle rounded transition-colors",
|
|
214
214
|
children: "Go Back"
|
|
215
215
|
})
|
|
216
216
|
]
|
|
217
217
|
})
|
|
218
|
-
}) : /* @__PURE__ */
|
|
218
|
+
}) : /* @__PURE__ */ w(n, {
|
|
219
219
|
permission: r.USER_PLATFORM_CONNECTION_READ,
|
|
220
|
-
children: /* @__PURE__ */
|
|
220
|
+
children: /* @__PURE__ */ T("div", {
|
|
221
221
|
className: "space-y-6 p-3 sm:p-6",
|
|
222
222
|
children: [
|
|
223
|
-
/* @__PURE__ */
|
|
223
|
+
/* @__PURE__ */ T("div", {
|
|
224
224
|
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
225
|
-
children: [/* @__PURE__ */
|
|
225
|
+
children: [/* @__PURE__ */ T("div", {
|
|
226
226
|
className: "flex items-center gap-3",
|
|
227
|
-
children: [/* @__PURE__ */
|
|
227
|
+
children: [/* @__PURE__ */ w("button", {
|
|
228
228
|
type: "button",
|
|
229
|
-
onClick: () =>
|
|
230
|
-
"aria-label":
|
|
229
|
+
onClick: () => h(`/channels/${m}`),
|
|
230
|
+
"aria-label": j("channel.backToChannel", "Back to channel"),
|
|
231
231
|
className: "p-2 text-text-secondary hover:text-text-primary hover:bg-bg-sunken rounded-lg transition-colors",
|
|
232
|
-
children: /* @__PURE__ */
|
|
232
|
+
children: /* @__PURE__ */ w(d, {
|
|
233
233
|
size: 20,
|
|
234
234
|
"aria-hidden": "true"
|
|
235
235
|
})
|
|
236
|
-
}), /* @__PURE__ */
|
|
236
|
+
}), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h1", {
|
|
237
237
|
className: "text-xl sm:text-2xl font-bold text-text-primary",
|
|
238
|
-
children:
|
|
239
|
-
}), /* @__PURE__ */
|
|
238
|
+
children: j("channel.channelUsers", "Channel Users")
|
|
239
|
+
}), /* @__PURE__ */ T("p", {
|
|
240
240
|
className: "text-sm text-text-secondary mt-1",
|
|
241
241
|
children: [K.name, " - User connections"]
|
|
242
242
|
})] })]
|
|
243
|
-
}), /* @__PURE__ */
|
|
243
|
+
}), /* @__PURE__ */ T("div", {
|
|
244
244
|
className: "flex items-center gap-3",
|
|
245
|
-
children: [/* @__PURE__ */
|
|
246
|
-
value:
|
|
247
|
-
onChange: (e) =>
|
|
245
|
+
children: [/* @__PURE__ */ T("select", {
|
|
246
|
+
value: B,
|
|
247
|
+
onChange: (e) => V(Number(e.target.value)),
|
|
248
248
|
className: "px-3 py-2 text-sm bg-surface border border-border-subtle rounded-lg focus:outline-none focus:ring-2 focus:ring-accent-primary/50 text-text-primary",
|
|
249
249
|
children: [
|
|
250
|
-
/* @__PURE__ */
|
|
250
|
+
/* @__PURE__ */ w("option", {
|
|
251
251
|
value: 10,
|
|
252
252
|
children: "10 results"
|
|
253
253
|
}),
|
|
254
|
-
/* @__PURE__ */
|
|
254
|
+
/* @__PURE__ */ w("option", {
|
|
255
255
|
value: 25,
|
|
256
256
|
children: "25 results"
|
|
257
257
|
}),
|
|
258
|
-
/* @__PURE__ */
|
|
258
|
+
/* @__PURE__ */ w("option", {
|
|
259
259
|
value: 50,
|
|
260
260
|
children: "50 results"
|
|
261
261
|
}),
|
|
262
|
-
/* @__PURE__ */
|
|
262
|
+
/* @__PURE__ */ w("option", {
|
|
263
263
|
value: 100,
|
|
264
264
|
children: "100 results"
|
|
265
265
|
})
|
|
266
266
|
]
|
|
267
|
-
}), /* @__PURE__ */
|
|
268
|
-
label:
|
|
269
|
-
icon: /* @__PURE__ */
|
|
267
|
+
}), /* @__PURE__ */ w(ie, { actions: [{
|
|
268
|
+
label: j("channel.refresh", "Refresh"),
|
|
269
|
+
icon: /* @__PURE__ */ w(_, {
|
|
270
270
|
size: 16,
|
|
271
|
-
className:
|
|
271
|
+
className: I ? "animate-spin" : "",
|
|
272
272
|
"aria-hidden": "true"
|
|
273
273
|
}),
|
|
274
|
-
disabled:
|
|
274
|
+
disabled: I,
|
|
275
275
|
onSelect: () => void Y(W)
|
|
276
|
-
}, ...
|
|
277
|
-
label:
|
|
278
|
-
icon:
|
|
276
|
+
}, ...k ? [{
|
|
277
|
+
label: j("channel.export", "Export"),
|
|
278
|
+
icon: P ? /* @__PURE__ */ w(g, {
|
|
279
279
|
size: 16,
|
|
280
280
|
className: "animate-spin",
|
|
281
281
|
"aria-hidden": "true"
|
|
282
|
-
}) : /* @__PURE__ */
|
|
282
|
+
}) : /* @__PURE__ */ w(ne, {
|
|
283
283
|
size: 16,
|
|
284
284
|
"aria-hidden": "true"
|
|
285
285
|
}),
|
|
286
|
-
disabled:
|
|
287
|
-
onSelect: () => void
|
|
286
|
+
disabled: P,
|
|
287
|
+
onSelect: () => void N()
|
|
288
288
|
}] : []] })]
|
|
289
289
|
})]
|
|
290
290
|
}),
|
|
291
|
-
|
|
291
|
+
/* @__PURE__ */ w(se, {
|
|
292
|
+
icon: /* @__PURE__ */ w(v, {
|
|
293
|
+
size: 15,
|
|
294
|
+
"aria-hidden": "true"
|
|
295
|
+
}),
|
|
296
|
+
children: j("channel.usersPurpose", "The people reachable through this channel — linked via OAuth or a pairing code on platforms like Slack, Teams or WhatsApp. See who is online, whether their pairing is approved, and whether they have opted into notifications and direct messages. Use it to verify a recipient is actually connected before you target them, or to audit who can receive messages here.")
|
|
297
|
+
}),
|
|
298
|
+
F && /* @__PURE__ */ T("div", {
|
|
292
299
|
className: "p-4 bg-status-error-bg-subtle border border-status-error-border rounded-lg flex items-center gap-3",
|
|
293
|
-
children: [/* @__PURE__ */
|
|
300
|
+
children: [/* @__PURE__ */ w(u, {
|
|
294
301
|
size: 20,
|
|
295
302
|
className: "text-status-error-text"
|
|
296
|
-
}), /* @__PURE__ */
|
|
303
|
+
}), /* @__PURE__ */ w("p", {
|
|
297
304
|
className: "text-sm text-status-error-text flex-1",
|
|
298
|
-
children:
|
|
305
|
+
children: F
|
|
299
306
|
})]
|
|
300
307
|
}),
|
|
301
|
-
/* @__PURE__ */
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
308
|
+
/* @__PURE__ */ T(ae, {
|
|
309
|
+
className: "flex items-center gap-3 p-4",
|
|
310
|
+
children: [/* @__PURE__ */ w("span", {
|
|
311
|
+
className: "rounded-lg bg-accent-blue-subtle p-2",
|
|
312
|
+
children: /* @__PURE__ */ w(y, {
|
|
313
|
+
size: 18,
|
|
314
|
+
className: "text-accent-blue",
|
|
315
|
+
"aria-hidden": "true"
|
|
316
|
+
})
|
|
317
|
+
}), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ T("p", {
|
|
318
|
+
className: "text-sm font-semibold text-text-primary",
|
|
319
|
+
children: [
|
|
320
|
+
H,
|
|
321
|
+
" ",
|
|
322
|
+
H === 1 ? j("channel.connectedUserSingular", "connected user") : j("channel.connectedUsersPlural", "connected users")
|
|
323
|
+
]
|
|
324
|
+
}), /* @__PURE__ */ w("p", {
|
|
305
325
|
className: "text-sm text-text-secondary",
|
|
306
|
-
children: "Users connected to this channel through OAuth or pairing.
|
|
307
|
-
})
|
|
326
|
+
children: j("channel.usersBannerHint", "Users connected to this channel through OAuth or pairing. Notification preferences and DM authorization are managed per user.")
|
|
327
|
+
})] })]
|
|
308
328
|
}),
|
|
309
|
-
/* @__PURE__ */
|
|
310
|
-
columns:
|
|
311
|
-
data:
|
|
329
|
+
/* @__PURE__ */ w(ce, {
|
|
330
|
+
columns: me,
|
|
331
|
+
data: R,
|
|
312
332
|
rowKey: (e) => e.id,
|
|
313
|
-
emptyState: /* @__PURE__ */
|
|
333
|
+
emptyState: /* @__PURE__ */ w(oe, {
|
|
314
334
|
illustration: "empty-people",
|
|
315
|
-
title:
|
|
335
|
+
title: j("channel.noUsersConnected", "No users connected to this channel")
|
|
316
336
|
}),
|
|
317
337
|
className: "bg-surface border border-border-seam rounded-lg"
|
|
318
338
|
}),
|
|
319
|
-
/* @__PURE__ */
|
|
339
|
+
/* @__PURE__ */ T("div", {
|
|
320
340
|
className: "flex items-center justify-between",
|
|
321
|
-
children: [/* @__PURE__ */
|
|
341
|
+
children: [/* @__PURE__ */ w("p", {
|
|
322
342
|
className: "text-sm text-text-secondary",
|
|
323
|
-
children:
|
|
324
|
-
|
|
343
|
+
children: H > 0 && /* @__PURE__ */ T(C, { children: [
|
|
344
|
+
j("channel.showing", "Showing"),
|
|
325
345
|
" ",
|
|
326
|
-
/* @__PURE__ */
|
|
346
|
+
/* @__PURE__ */ T("span", {
|
|
327
347
|
className: "font-medium",
|
|
328
348
|
children: [
|
|
329
|
-
W *
|
|
349
|
+
W * B + 1,
|
|
330
350
|
"–",
|
|
331
|
-
Math.min((W + 1) *
|
|
351
|
+
Math.min((W + 1) * B, H)
|
|
332
352
|
]
|
|
333
353
|
}),
|
|
334
354
|
" ",
|
|
335
|
-
|
|
355
|
+
j("channel.of", "of"),
|
|
336
356
|
" ",
|
|
337
|
-
/* @__PURE__ */
|
|
357
|
+
/* @__PURE__ */ w("span", {
|
|
338
358
|
className: "font-medium",
|
|
339
|
-
children:
|
|
359
|
+
children: H
|
|
340
360
|
})
|
|
341
361
|
] })
|
|
342
|
-
}), /* @__PURE__ */
|
|
362
|
+
}), /* @__PURE__ */ T("div", {
|
|
343
363
|
className: "flex items-center gap-2",
|
|
344
364
|
children: [
|
|
345
|
-
/* @__PURE__ */
|
|
365
|
+
/* @__PURE__ */ T("button", {
|
|
346
366
|
type: "button",
|
|
347
367
|
onClick: () => G((e) => Math.max(0, e - 1)),
|
|
348
|
-
disabled: !
|
|
368
|
+
disabled: !ue || I,
|
|
349
369
|
className: "flex items-center gap-1 px-3 py-1.5 text-sm border border-border-subtle rounded-lg hover:bg-bg-sunken transition-colors disabled:opacity-40 disabled:cursor-not-allowed",
|
|
350
|
-
children: [/* @__PURE__ */
|
|
370
|
+
children: [/* @__PURE__ */ w(ee, { size: 16 }), j("channel.previous", "Previous")]
|
|
351
371
|
}),
|
|
352
|
-
/* @__PURE__ */
|
|
372
|
+
/* @__PURE__ */ T("span", {
|
|
353
373
|
className: "text-sm text-text-secondary",
|
|
354
374
|
children: [
|
|
355
375
|
W + 1,
|
|
@@ -357,12 +377,12 @@ function k() {
|
|
|
357
377
|
$
|
|
358
378
|
]
|
|
359
379
|
}),
|
|
360
|
-
/* @__PURE__ */
|
|
380
|
+
/* @__PURE__ */ T("button", {
|
|
361
381
|
type: "button",
|
|
362
382
|
onClick: () => G((e) => Math.min($ - 1, e + 1)),
|
|
363
|
-
disabled: !
|
|
383
|
+
disabled: !de || I,
|
|
364
384
|
className: "flex items-center gap-1 px-3 py-1.5 text-sm border border-border-subtle rounded-lg hover:bg-bg-sunken transition-colors disabled:opacity-40 disabled:cursor-not-allowed",
|
|
365
|
-
children: [
|
|
385
|
+
children: [j("channel.next", "Next"), /* @__PURE__ */ w(te, { size: 16 })]
|
|
366
386
|
})
|
|
367
387
|
]
|
|
368
388
|
})]
|
|
@@ -372,6 +392,6 @@ function k() {
|
|
|
372
392
|
});
|
|
373
393
|
}
|
|
374
394
|
//#endregion
|
|
375
|
-
export {
|
|
395
|
+
export { O as ChannelUsersPage };
|
|
376
396
|
|
|
377
397
|
//# sourceMappingURL=ChannelUsersPage.js.map
|