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