@burdenoff/microfe-channel 2026.518.2 → 2026.520.1
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 +23 -29
- package/dist/channel/ChannelRoot.js.map +1 -1
- package/dist/channel/components/AdapterCredentialsForm.js +7 -7
- package/dist/channel/components/AdapterCredentialsForm.js.map +1 -1
- package/dist/channel/components/FeatureNotEnabled.d.ts +3 -0
- package/dist/channel/components/FeatureNotEnabled.d.ts.map +1 -1
- package/dist/channel/components/FeatureNotEnabled.js +31 -13
- package/dist/channel/components/FeatureNotEnabled.js.map +1 -1
- package/dist/channel/hooks/useChannels.d.ts +17 -3
- package/dist/channel/hooks/useChannels.d.ts.map +1 -1
- package/dist/channel/hooks/useChannels.js +64 -18
- package/dist/channel/hooks/useChannels.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelDashboardPage.d.ts.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelDashboardPage.js +307 -274
- package/dist/channel/modules/channels/pages/ChannelDashboardPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelDetailsPage.d.ts.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelDetailsPage.js +31 -31
- package/dist/channel/modules/channels/pages/ChannelDetailsPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelSettingsPage.d.ts.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelSettingsPage.js +22 -22
- 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 +193 -137
- package/dist/channel/modules/channels/pages/ChannelUsersPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelsListPage.d.ts.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelsListPage.js +320 -248
- package/dist/channel/modules/channels/pages/ChannelsListPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ConnectionDetailsPage.d.ts.map +1 -1
- package/dist/channel/modules/channels/pages/ConnectionDetailsPage.js +5 -5
- package/dist/channel/modules/channels/pages/ConnectionDetailsPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ConnectionsListPage.d.ts.map +1 -1
- package/dist/channel/modules/channels/pages/ConnectionsListPage.js +160 -112
- package/dist/channel/modules/channels/pages/ConnectionsListPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/CreateChannelPage.js +4 -4
- package/dist/channel/modules/channels/pages/CreateChannelPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/DeliveryHistoryPage.d.ts.map +1 -1
- package/dist/channel/modules/channels/pages/DeliveryHistoryPage.js +221 -157
- package/dist/channel/modules/channels/pages/DeliveryHistoryPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/EditChannelPage.js +9 -9
- 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 +89 -89
- package/dist/channel/modules/channels/pages/SendMessagePage.js.map +1 -1
- package/dist/channel/modules/channels/pages/WebhookEventsPage.d.ts.map +1 -1
- package/dist/channel/modules/channels/pages/WebhookEventsPage.js +188 -126
- package/dist/channel/modules/channels/pages/WebhookEventsPage.js.map +1 -1
- package/dist/generated/global-operations.d.ts +2 -0
- package/dist/generated/global-operations.d.ts.map +1 -1
- package/dist/generated/global-operations.js +2 -0
- package/dist/generated/global-operations.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelRoot.d.ts","sourceRoot":"","sources":["../../src/channel/ChannelRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ChannelRoot.d.ts","sourceRoot":"","sources":["../../src/channel/ChannelRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAMhC,OAAO,KAAK,EAAW,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGzD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CA+F5C,CAAC"}
|
|
@@ -5,77 +5,71 @@ import { ErrorBoundary as i } from "@burdenoff/fe-libs/shared/components";
|
|
|
5
5
|
import { useI18n as a } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
6
6
|
import { Cable as o, Radio as s, Send as c, Settings as l } from "lucide-react";
|
|
7
7
|
import { jsx as u } from "react/jsx-runtime";
|
|
8
|
-
import { FeatureFlagProvider as d } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
9
8
|
//#region src/channel/ChannelRoot.tsx
|
|
10
|
-
var
|
|
11
|
-
let { registerNavItems:
|
|
12
|
-
let n =
|
|
9
|
+
var d = (d) => {
|
|
10
|
+
let { registerNavItems: f, registerFooterItems: p, basePath: m = "/" } = d, { t: h } = a(), g = n((e, t) => {
|
|
11
|
+
let n = h(e);
|
|
13
12
|
return n === e ? t : n;
|
|
14
|
-
}, [
|
|
13
|
+
}, [h]), _ = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
|
|
15
14
|
return r(() => {
|
|
16
|
-
if (
|
|
15
|
+
if (f) return f([
|
|
17
16
|
{
|
|
18
17
|
id: "channel-channels",
|
|
19
|
-
label:
|
|
20
|
-
path:
|
|
18
|
+
label: g("channel.channels", "Channels"),
|
|
19
|
+
path: m === "/" ? "/" : _(m, "list"),
|
|
21
20
|
icon: /* @__PURE__ */ u(s, { size: 20 }),
|
|
22
21
|
order: 100,
|
|
23
22
|
group: "channel"
|
|
24
23
|
},
|
|
25
24
|
{
|
|
26
25
|
id: "channel-connections",
|
|
27
|
-
label:
|
|
28
|
-
path:
|
|
26
|
+
label: g("channel.connections", "Connections"),
|
|
27
|
+
path: _(m, "connections"),
|
|
29
28
|
icon: /* @__PURE__ */ u(o, { size: 20 }),
|
|
30
29
|
order: 110,
|
|
31
30
|
group: "channel"
|
|
32
31
|
},
|
|
33
32
|
{
|
|
34
33
|
id: "channel-send",
|
|
35
|
-
label:
|
|
36
|
-
path:
|
|
34
|
+
label: g("channel.sendMessage", "Send Message"),
|
|
35
|
+
path: _(m, "send"),
|
|
37
36
|
icon: /* @__PURE__ */ u(c, { size: 20 }),
|
|
38
37
|
order: 120,
|
|
39
38
|
group: "channel"
|
|
40
39
|
},
|
|
41
40
|
{
|
|
42
41
|
id: "channel-settings",
|
|
43
|
-
label:
|
|
44
|
-
path:
|
|
42
|
+
label: g("channel.settings", "Settings"),
|
|
43
|
+
path: _(m, "settings"),
|
|
45
44
|
icon: /* @__PURE__ */ u(l, { size: 20 }),
|
|
46
45
|
order: 130,
|
|
47
46
|
group: "channel"
|
|
48
47
|
}
|
|
49
48
|
]);
|
|
50
49
|
}, [
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
f,
|
|
51
|
+
m,
|
|
52
|
+
g
|
|
54
53
|
]), r(() => {
|
|
55
|
-
if (
|
|
54
|
+
if (p) return p([{
|
|
56
55
|
id: "channel-status",
|
|
57
|
-
label:
|
|
56
|
+
label: g("channel.channelsReady", "Channels Ready"),
|
|
58
57
|
type: "status",
|
|
59
58
|
order: 10,
|
|
60
59
|
section: "left"
|
|
61
60
|
}]);
|
|
62
|
-
}, [
|
|
61
|
+
}, [p, g]), /* @__PURE__ */ u(i, {
|
|
63
62
|
fallback: /* @__PURE__ */ u("div", {
|
|
64
63
|
className: "p-6 text-center text-text-secondary",
|
|
65
64
|
children: "Something went wrong loading this module. Please refresh the page."
|
|
66
65
|
}),
|
|
67
|
-
children: /* @__PURE__ */ u(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
defaultEnabled: !1,
|
|
71
|
-
children: /* @__PURE__ */ u(e, {
|
|
72
|
-
...f,
|
|
73
|
-
children: /* @__PURE__ */ u(t, {})
|
|
74
|
-
})
|
|
66
|
+
children: /* @__PURE__ */ u(e, {
|
|
67
|
+
...d,
|
|
68
|
+
children: /* @__PURE__ */ u(t, {})
|
|
75
69
|
})
|
|
76
70
|
});
|
|
77
71
|
};
|
|
78
72
|
//#endregion
|
|
79
|
-
export {
|
|
73
|
+
export { d as ChannelRoot };
|
|
80
74
|
|
|
81
75
|
//# sourceMappingURL=ChannelRoot.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChannelRoot.js","names":[],"sources":["../../src/channel/ChannelRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect, useCallback } from 'react';\nimport { ErrorBoundary } from '@burdenoff/fe-libs/shared/components';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Radio, Cable, Send, Settings } from 'lucide-react';\nimport { ChannelProvider } from './providers/ChannelProvider';\nimport
|
|
1
|
+
{"version":3,"file":"ChannelRoot.js","names":[],"sources":["../../src/channel/ChannelRoot.tsx"],"sourcesContent":["import type { FC } from 'react';\nimport { useEffect, useCallback } from 'react';\nimport { ErrorBoundary } from '@burdenoff/fe-libs/shared/components';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Radio, Cable, Send, Settings } from 'lucide-react';\nimport { ChannelProvider } from './providers/ChannelProvider';\nimport type { NavItem, ChannelRootProps } from './types';\nimport { ChannelRoutes } from './ChannelRoutes';\n\n/**\n * Root component for the Channel microfrontend.\n *\n * This is the main entry point that host applications import and render.\n * It sets up the necessary providers and renders the internal routing.\n * Automatically registers navigation items with the shell if registration functions are provided.\n *\n * @example\n * ```tsx\n * import { ChannelRoot, type ChannelRootProps } from '@burdenoff/microfe-channel';\n *\n * function App() {\n * const props: ChannelRootProps = {\n * basePath: '/channels',\n * navigate: (path) => router.push(path),\n * currentUser: { id: '1', email: 'user@example.com', firstName: 'John', lastName: 'Doe' },\n * workspaceId: 'ws-123',\n * organizationId: 'org-123',\n * apiGatewayUrl: 'https://api.example.com/workspaces/graphql',\n * authToken: 'token',\n * registerNavItems: (items) => { return () => {}; },\n * };\n *\n * return <ChannelRoot {...props} />;\n * }\n * ```\n */\nexport const ChannelRoot: FC<ChannelRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const { t } = useI18n();\n const tr = useCallback(\n (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n },\n [t]\n );\n\n // Helper to join paths correctly, avoiding double slashes\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with the shell\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n {\n id: 'channel-channels',\n label: tr('channel.channels', 'Channels'),\n path: basePath === '/' ? '/' : joinPath(basePath, 'list'),\n icon: <Radio size={20} />,\n order: 100,\n group: 'channel',\n },\n {\n id: 'channel-connections',\n label: tr('channel.connections', 'Connections'),\n path: joinPath(basePath, 'connections'),\n icon: <Cable size={20} />,\n order: 110,\n group: 'channel',\n },\n {\n id: 'channel-send',\n label: tr('channel.sendMessage', 'Send Message'),\n path: joinPath(basePath, 'send'),\n icon: <Send size={20} />,\n order: 120,\n group: 'channel',\n },\n {\n id: 'channel-settings',\n label: tr('channel.settings', 'Settings'),\n path: joinPath(basePath, 'settings'),\n icon: <Settings size={20} />,\n order: 130,\n group: 'channel',\n },\n ];\n\n // Register and get cleanup function\n const cleanup = registerNavItems(navItems);\n\n // Return cleanup function to unregister on unmount\n return cleanup;\n }, [registerNavItems, basePath, tr]);\n\n // Register footer items (example: Channel status indicator in left section)\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'channel-status',\n label: tr('channel.channelsReady', 'Channels Ready'),\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, tr]);\n\n return (\n <ErrorBoundary\n fallback={\n <div className=\"p-6 text-center text-text-secondary\">\n Something went wrong loading this module. Please refresh the page.\n </div>\n }\n >\n <ChannelProvider {...props}>\n <ChannelRoutes />\n </ChannelProvider>\n </ErrorBoundary>\n );\n};\n"],"mappings":";;;;;;;;AAoCA,IAAa,KAAqC,MAAU;CAC1D,IAAM,EAAE,qBAAkB,wBAAqB,cAAW,QAAQ,GAC5D,EAAE,SAAM,GAAS,EACjB,IAAK,GACR,GAAa,MAA6B;EACzC,IAAM,IAAQ,EAAE,EAAI;AACpB,SAAO,MAAU,IAAM,IAAW;IAEpC,CAAC,EAAE,CACJ,EAGK,KAAY,GAAc,OACZ,EAAK,SAAS,IAAI,GAAG,EAAK,MAAM,GAAG,GAAG,GAAG,MACzC,EAAK,WAAW,IAAI,GAAG,IAAO,IAAI;AAoEtD,QA/DA,QAAgB;AACT,QAyCL,QAHgB,EApCY;GAC1B;IACE,IAAI;IACJ,OAAO,EAAG,oBAAoB,WAAW;IACzC,MAAM,MAAa,MAAM,MAAM,EAAS,GAAU,OAAO;IACzD,MAAM,kBAAC,GAAD,EAAO,MAAM,IAAM,CAAA;IACzB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAG,uBAAuB,cAAc;IAC/C,MAAM,EAAS,GAAU,cAAc;IACvC,MAAM,kBAAC,GAAD,EAAO,MAAM,IAAM,CAAA;IACzB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAG,uBAAuB,eAAe;IAChD,MAAM,EAAS,GAAU,OAAO;IAChC,MAAM,kBAAC,GAAD,EAAM,MAAM,IAAM,CAAA;IACxB,OAAO;IACP,OAAO;IACR;GACD;IACE,IAAI;IACJ,OAAO,EAAG,oBAAoB,WAAW;IACzC,MAAM,EAAS,GAAU,WAAW;IACpC,MAAM,kBAAC,GAAD,EAAU,MAAM,IAAM,CAAA;IAC5B,OAAO;IACP,OAAO;IACR;GACF,CAGyC;IAIzC;EAAC;EAAkB;EAAU;EAAG,CAAC,EAGpC,QAAgB;AACT,QAaL,QADgB,EAVI,CAClB;GACE,IAAI;GACJ,OAAO,EAAG,yBAAyB,iBAAiB;GACpD,MAAM;GACN,OAAO;GACP,SAAS;GACV,CACF,CAE+C;IAE/C,CAAC,GAAqB,EAAG,CAAC,EAG3B,kBAAC,GAAD;EACE,UACE,kBAAC,OAAD;GAAK,WAAU;aAAsC;GAE/C,CAAA;YAGR,kBAAC,GAAD;GAAiB,GAAI;aACnB,kBAAC,GAAD,EAAiB,CAAA;GACD,CAAA;EACJ,CAAA"}
|
|
@@ -34,12 +34,12 @@ function m({ adapterType: s, credentials: m, onChange: h, onValidationChange: g,
|
|
|
34
34
|
})
|
|
35
35
|
});
|
|
36
36
|
if (!T) return /* @__PURE__ */ f("div", {
|
|
37
|
-
className: "p-4 bg-warning-
|
|
37
|
+
className: "p-4 bg-status-warning-bg-subtle border border-warning-300 rounded-lg",
|
|
38
38
|
children: /* @__PURE__ */ p("div", {
|
|
39
39
|
className: "flex items-start gap-2",
|
|
40
40
|
children: [/* @__PURE__ */ f(o, {
|
|
41
41
|
size: 16,
|
|
42
|
-
className: "text-warning-
|
|
42
|
+
className: "text-status-warning-text mt-0.5"
|
|
43
43
|
}), /* @__PURE__ */ p("div", { children: [/* @__PURE__ */ p("p", {
|
|
44
44
|
className: "text-sm font-medium text-warning-700",
|
|
45
45
|
children: [
|
|
@@ -69,12 +69,12 @@ function m({ adapterType: s, credentials: m, onChange: h, onValidationChange: g,
|
|
|
69
69
|
[e]: !t[e]
|
|
70
70
|
}));
|
|
71
71
|
}, k = (e) => {
|
|
72
|
-
let t = m[e.key], n = C[e.key] && e.required && !t, r = `w-full px-3 py-2 text-sm bg-surface border rounded-lg focus:outline-none focus:ring-2 focus:ring-accent-primary disabled:opacity-50 disabled:cursor-not-allowed ${n ? "border-error-
|
|
72
|
+
let t = m[e.key], n = C[e.key] && e.required && !t, r = `w-full px-3 py-2 text-sm bg-surface border rounded-lg focus:outline-none focus:ring-2 focus:ring-accent-primary disabled:opacity-50 disabled:cursor-not-allowed ${n ? "border-status-error-border" : "border-border"}`;
|
|
73
73
|
return /* @__PURE__ */ p("div", { children: [
|
|
74
74
|
/* @__PURE__ */ p("label", {
|
|
75
75
|
className: "block text-sm font-medium text-foreground mb-1.5",
|
|
76
76
|
children: [e.displayName, e.required && /* @__PURE__ */ f("span", {
|
|
77
|
-
className: "text-error-
|
|
77
|
+
className: "text-status-error-text ml-1",
|
|
78
78
|
children: "*"
|
|
79
79
|
})]
|
|
80
80
|
}),
|
|
@@ -159,7 +159,7 @@ function m({ adapterType: s, credentials: m, onChange: h, onValidationChange: g,
|
|
|
159
159
|
children: e.description
|
|
160
160
|
}),
|
|
161
161
|
n && /* @__PURE__ */ f("p", {
|
|
162
|
-
className: "mt-1 text-xs text-error-
|
|
162
|
+
className: "mt-1 text-xs text-status-error-text",
|
|
163
163
|
children: b("channel.fieldRequired", "This field is required")
|
|
164
164
|
})
|
|
165
165
|
] }, e.key);
|
|
@@ -207,13 +207,13 @@ function h({ adapterType: e, credentials: t }) {
|
|
|
207
207
|
if (!e) return null;
|
|
208
208
|
let { valid: c, errors: l } = n(e, t);
|
|
209
209
|
return c ? /* @__PURE__ */ p("div", {
|
|
210
|
-
className: "flex items-center gap-1.5 text-success-
|
|
210
|
+
className: "flex items-center gap-1.5 text-status-success-text",
|
|
211
211
|
children: [/* @__PURE__ */ f(s, { size: 14 }), /* @__PURE__ */ f("span", {
|
|
212
212
|
className: "text-xs",
|
|
213
213
|
children: i("channel.allRequiredFieldsFilled", "All required fields filled")
|
|
214
214
|
})]
|
|
215
215
|
}) : /* @__PURE__ */ p("div", {
|
|
216
|
-
className: "flex items-center gap-1.5 text-warning-
|
|
216
|
+
className: "flex items-center gap-1.5 text-status-warning-text",
|
|
217
217
|
children: [/* @__PURE__ */ f(o, { size: 14 }), /* @__PURE__ */ p("span", {
|
|
218
218
|
className: "text-xs",
|
|
219
219
|
children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdapterCredentialsForm.js","names":[],"sources":["../../../src/channel/components/AdapterCredentialsForm.tsx"],"sourcesContent":["/**\n * Adapter Credentials Form\n *\n * Dynamic form that renders credential fields based on the selected adapter type.\n * Field names match exactly what the backend adapters expect.\n */\n\nimport { useState, useEffect } from 'react';\nimport { ExternalLink, Eye, EyeOff, AlertCircle, CheckCircle2 } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { AdapterType } from '../hooks/useChannels';\nimport {\n getAdapterCredentialSchema,\n getDefaultCredentials,\n validateCredentials,\n type CredentialField,\n} from '../config/adapterCredentials';\n\ninterface AdapterCredentialsFormProps {\n adapterType: AdapterType | undefined;\n credentials: Record<string, unknown>;\n onChange: (credentials: Record<string, unknown>) => void;\n onValidationChange?: (isValid: boolean, errors: string[]) => void;\n disabled?: boolean;\n showPlatformMetadata?: boolean;\n}\n\nexport function AdapterCredentialsForm({\n adapterType,\n credentials,\n onChange,\n onValidationChange,\n disabled = false,\n showPlatformMetadata = true,\n}: AdapterCredentialsFormProps) {\n const { t } = useI18n();\n const tr = (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n };\n const [showPasswords, setShowPasswords] = useState<Record<string, boolean>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n const schema = getAdapterCredentialSchema(adapterType);\n\n // Initialize with default values when adapter type changes\n useEffect(() => {\n if (adapterType) {\n const defaults = getDefaultCredentials(adapterType);\n const merged = { ...defaults, ...credentials };\n if (JSON.stringify(merged) !== JSON.stringify(credentials)) {\n onChange(merged);\n }\n }\n }, [adapterType]);\n\n // Validate on change\n useEffect(() => {\n if (onValidationChange && adapterType) {\n const { valid, errors } = validateCredentials(adapterType, credentials);\n onValidationChange(valid, errors);\n }\n }, [credentials, adapterType, onValidationChange]);\n\n if (!adapterType) {\n return (\n <div className=\"text-center py-6 text-muted-foreground\">\n <p className=\"text-sm\">\n {tr('channel.selectAdapterType', 'Select an adapter type to configure credentials')}\n </p>\n </div>\n );\n }\n\n if (!schema) {\n return (\n <div className=\"p-4 bg-warning-100 border border-warning-300 rounded-lg\">\n <div className=\"flex items-start gap-2\">\n <AlertCircle size={16} className=\"text-warning-500 mt-0.5\" />\n <div>\n <p className=\"text-sm font-medium text-warning-700\">\n {tr('channel.noCredentialSchema', 'No credential schema defined for')} {adapterType}\n </p>\n <p className=\"text-xs text-warning-600 mt-1\">\n {tr(\n 'channel.enterCredentialsAsJson',\n 'You can still enter credentials as JSON in the raw format below.'\n )}\n </p>\n </div>\n </div>\n </div>\n );\n }\n\n const handleFieldChange = (key: string, value: unknown) => {\n onChange({ ...credentials, [key]: value });\n };\n\n const handleFieldBlur = (key: string) => {\n setTouched((prev) => ({ ...prev, [key]: true }));\n };\n\n const togglePasswordVisibility = (key: string) => {\n setShowPasswords((prev) => ({ ...prev, [key]: !prev[key] }));\n };\n\n const renderField = (field: CredentialField) => {\n const value = credentials[field.key];\n const fieldError = touched[field.key] && field.required && !value;\n\n const commonInputClasses = `w-full px-3 py-2 text-sm bg-surface border rounded-lg focus:outline-none focus:ring-2 focus:ring-accent-primary disabled:opacity-50 disabled:cursor-not-allowed ${\n fieldError ? 'border-error-500' : 'border-border'\n }`;\n\n return (\n <div key={field.key}>\n <label className=\"block text-sm font-medium text-foreground mb-1.5\">\n {field.displayName}\n {field.required && <span className=\"text-error-500 ml-1\">*</span>}\n </label>\n\n {field.type === 'text' && (\n <input\n type=\"text\"\n value={(value as string) || ''}\n onChange={(e) => handleFieldChange(field.key, e.target.value)}\n onBlur={() => handleFieldBlur(field.key)}\n disabled={disabled}\n placeholder={field.placeholder}\n className={commonInputClasses}\n />\n )}\n\n {field.type === 'password' && (\n <div className=\"relative\">\n <input\n type={showPasswords[field.key] ? 'text' : 'password'}\n value={(value as string) || ''}\n onChange={(e) => handleFieldChange(field.key, e.target.value)}\n onBlur={() => handleFieldBlur(field.key)}\n disabled={disabled}\n placeholder={field.placeholder}\n className={`${commonInputClasses} pr-10`}\n />\n <button\n type=\"button\"\n onClick={() => togglePasswordVisibility(field.key)}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-1 text-muted-foreground hover:text-foreground\"\n tabIndex={-1}\n >\n {showPasswords[field.key] ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n )}\n\n {field.type === 'textarea' && (\n <textarea\n value={(value as string) || ''}\n onChange={(e) => handleFieldChange(field.key, e.target.value)}\n onBlur={() => handleFieldBlur(field.key)}\n disabled={disabled}\n placeholder={field.placeholder}\n rows={4}\n className={`${commonInputClasses} resize-none font-mono text-xs`}\n />\n )}\n\n {field.type === 'number' && (\n <input\n type=\"number\"\n value={(value as number) ?? field.defaultValue ?? ''}\n onChange={(e) =>\n handleFieldChange(field.key, e.target.value ? Number(e.target.value) : undefined)\n }\n onBlur={() => handleFieldBlur(field.key)}\n disabled={disabled}\n placeholder={field.placeholder}\n className={commonInputClasses}\n />\n )}\n\n {field.type === 'boolean' && (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={(value as boolean) ?? field.defaultValue ?? false}\n onChange={(e) => handleFieldChange(field.key, e.target.checked)}\n disabled={disabled}\n className=\"w-4 h-4 rounded border-border text-accent-primary focus:ring-accent-primary\"\n />\n <span className=\"text-sm text-muted-foreground\">{field.description}</span>\n </label>\n )}\n\n {field.type === 'select' && field.options && (\n <select\n value={(value as string) ?? field.defaultValue ?? ''}\n onChange={(e) => handleFieldChange(field.key, e.target.value)}\n onBlur={() => handleFieldBlur(field.key)}\n disabled={disabled}\n className={`${commonInputClasses} bg-bg-surface`}\n >\n <option value=\"\">\n {tr('channel.select', 'Select')} {field.displayName.toLowerCase()}\n </option>\n {field.options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n )}\n\n {field.type !== 'boolean' && (\n <p className=\"mt-1 text-xs text-muted-foreground\">{field.description}</p>\n )}\n\n {fieldError && (\n <p className=\"mt-1 text-xs text-error-500\">\n {tr('channel.fieldRequired', 'This field is required')}\n </p>\n )}\n </div>\n );\n };\n\n return (\n <div className=\"space-y-5\">\n {/* Header with adapter info */}\n <div className=\"flex items-start justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">{schema.displayName}</h3>\n <p className=\"text-xs text-muted-foreground mt-0.5\">{schema.description}</p>\n </div>\n {schema.docUrl && (\n <a\n href={schema.docUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1 text-xs text-accent-primary hover:text-accent-primary-hover\"\n >\n <span>{tr('channel.docs', 'Docs')}</span>\n <ExternalLink size={12} />\n </a>\n )}\n </div>\n\n {/* Credential fields */}\n <div className=\"space-y-4\">\n {schema.credentials.length > 0 && (\n <div className=\"space-y-4\">{schema.credentials.map(renderField)}</div>\n )}\n\n {/* Platform metadata fields (optional settings) */}\n {showPlatformMetadata && schema.platformMetadata && schema.platformMetadata.length > 0 && (\n <>\n <div className=\"border-t border-border pt-4 mt-4\">\n <p className=\"text-xs font-medium text-muted-foreground mb-3\">\n {tr('channel.optionalSettings', 'Optional Settings')}\n </p>\n <div className=\"space-y-4\">{schema.platformMetadata.map(renderField)}</div>\n </div>\n </>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * Compact validation status indicator\n */\nexport function CredentialValidationStatus({\n adapterType,\n credentials,\n}: {\n adapterType: AdapterType | undefined;\n credentials: Record<string, unknown>;\n}) {\n const { t } = useI18n();\n const tr = (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n };\n\n if (!adapterType) return null;\n\n const { valid, errors } = validateCredentials(adapterType, credentials);\n\n if (valid) {\n return (\n <div className=\"flex items-center gap-1.5 text-success-500\">\n <CheckCircle2 size={14} />\n <span className=\"text-xs\">\n {tr('channel.allRequiredFieldsFilled', 'All required fields filled')}\n </span>\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center gap-1.5 text-warning-500\">\n <AlertCircle size={14} />\n <span className=\"text-xs\">\n {errors.length} {tr('channel.fieldsNeedAttention', 'field(s) need attention')}\n </span>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdapterCredentialsForm.js","names":[],"sources":["../../../src/channel/components/AdapterCredentialsForm.tsx"],"sourcesContent":["/**\n * Adapter Credentials Form\n *\n * Dynamic form that renders credential fields based on the selected adapter type.\n * Field names match exactly what the backend adapters expect.\n */\n\nimport { useState, useEffect } from 'react';\nimport { ExternalLink, Eye, EyeOff, AlertCircle, CheckCircle2 } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport type { AdapterType } from '../hooks/useChannels';\nimport {\n getAdapterCredentialSchema,\n getDefaultCredentials,\n validateCredentials,\n type CredentialField,\n} from '../config/adapterCredentials';\n\ninterface AdapterCredentialsFormProps {\n adapterType: AdapterType | undefined;\n credentials: Record<string, unknown>;\n onChange: (credentials: Record<string, unknown>) => void;\n onValidationChange?: (isValid: boolean, errors: string[]) => void;\n disabled?: boolean;\n showPlatformMetadata?: boolean;\n}\n\nexport function AdapterCredentialsForm({\n adapterType,\n credentials,\n onChange,\n onValidationChange,\n disabled = false,\n showPlatformMetadata = true,\n}: AdapterCredentialsFormProps) {\n const { t } = useI18n();\n const tr = (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n };\n const [showPasswords, setShowPasswords] = useState<Record<string, boolean>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n\n const schema = getAdapterCredentialSchema(adapterType);\n\n // Initialize with default values when adapter type changes\n useEffect(() => {\n if (adapterType) {\n const defaults = getDefaultCredentials(adapterType);\n const merged = { ...defaults, ...credentials };\n if (JSON.stringify(merged) !== JSON.stringify(credentials)) {\n onChange(merged);\n }\n }\n }, [adapterType]);\n\n // Validate on change\n useEffect(() => {\n if (onValidationChange && adapterType) {\n const { valid, errors } = validateCredentials(adapterType, credentials);\n onValidationChange(valid, errors);\n }\n }, [credentials, adapterType, onValidationChange]);\n\n if (!adapterType) {\n return (\n <div className=\"text-center py-6 text-muted-foreground\">\n <p className=\"text-sm\">\n {tr('channel.selectAdapterType', 'Select an adapter type to configure credentials')}\n </p>\n </div>\n );\n }\n\n if (!schema) {\n return (\n <div className=\"p-4 bg-status-warning-bg-subtle border border-warning-300 rounded-lg\">\n <div className=\"flex items-start gap-2\">\n <AlertCircle size={16} className=\"text-status-warning-text mt-0.5\" />\n <div>\n <p className=\"text-sm font-medium text-warning-700\">\n {tr('channel.noCredentialSchema', 'No credential schema defined for')} {adapterType}\n </p>\n <p className=\"text-xs text-warning-600 mt-1\">\n {tr(\n 'channel.enterCredentialsAsJson',\n 'You can still enter credentials as JSON in the raw format below.'\n )}\n </p>\n </div>\n </div>\n </div>\n );\n }\n\n const handleFieldChange = (key: string, value: unknown) => {\n onChange({ ...credentials, [key]: value });\n };\n\n const handleFieldBlur = (key: string) => {\n setTouched((prev) => ({ ...prev, [key]: true }));\n };\n\n const togglePasswordVisibility = (key: string) => {\n setShowPasswords((prev) => ({ ...prev, [key]: !prev[key] }));\n };\n\n const renderField = (field: CredentialField) => {\n const value = credentials[field.key];\n const fieldError = touched[field.key] && field.required && !value;\n\n const commonInputClasses = `w-full px-3 py-2 text-sm bg-surface border rounded-lg focus:outline-none focus:ring-2 focus:ring-accent-primary disabled:opacity-50 disabled:cursor-not-allowed ${\n fieldError ? 'border-status-error-border' : 'border-border'\n }`;\n\n return (\n <div key={field.key}>\n <label className=\"block text-sm font-medium text-foreground mb-1.5\">\n {field.displayName}\n {field.required && <span className=\"text-status-error-text ml-1\">*</span>}\n </label>\n\n {field.type === 'text' && (\n <input\n type=\"text\"\n value={(value as string) || ''}\n onChange={(e) => handleFieldChange(field.key, e.target.value)}\n onBlur={() => handleFieldBlur(field.key)}\n disabled={disabled}\n placeholder={field.placeholder}\n className={commonInputClasses}\n />\n )}\n\n {field.type === 'password' && (\n <div className=\"relative\">\n <input\n type={showPasswords[field.key] ? 'text' : 'password'}\n value={(value as string) || ''}\n onChange={(e) => handleFieldChange(field.key, e.target.value)}\n onBlur={() => handleFieldBlur(field.key)}\n disabled={disabled}\n placeholder={field.placeholder}\n className={`${commonInputClasses} pr-10`}\n />\n <button\n type=\"button\"\n onClick={() => togglePasswordVisibility(field.key)}\n className=\"absolute right-2 top-1/2 -translate-y-1/2 p-1 text-muted-foreground hover:text-foreground\"\n tabIndex={-1}\n >\n {showPasswords[field.key] ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n )}\n\n {field.type === 'textarea' && (\n <textarea\n value={(value as string) || ''}\n onChange={(e) => handleFieldChange(field.key, e.target.value)}\n onBlur={() => handleFieldBlur(field.key)}\n disabled={disabled}\n placeholder={field.placeholder}\n rows={4}\n className={`${commonInputClasses} resize-none font-mono text-xs`}\n />\n )}\n\n {field.type === 'number' && (\n <input\n type=\"number\"\n value={(value as number) ?? field.defaultValue ?? ''}\n onChange={(e) =>\n handleFieldChange(field.key, e.target.value ? Number(e.target.value) : undefined)\n }\n onBlur={() => handleFieldBlur(field.key)}\n disabled={disabled}\n placeholder={field.placeholder}\n className={commonInputClasses}\n />\n )}\n\n {field.type === 'boolean' && (\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={(value as boolean) ?? field.defaultValue ?? false}\n onChange={(e) => handleFieldChange(field.key, e.target.checked)}\n disabled={disabled}\n className=\"w-4 h-4 rounded border-border text-accent-primary focus:ring-accent-primary\"\n />\n <span className=\"text-sm text-muted-foreground\">{field.description}</span>\n </label>\n )}\n\n {field.type === 'select' && field.options && (\n <select\n value={(value as string) ?? field.defaultValue ?? ''}\n onChange={(e) => handleFieldChange(field.key, e.target.value)}\n onBlur={() => handleFieldBlur(field.key)}\n disabled={disabled}\n className={`${commonInputClasses} bg-bg-surface`}\n >\n <option value=\"\">\n {tr('channel.select', 'Select')} {field.displayName.toLowerCase()}\n </option>\n {field.options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n )}\n\n {field.type !== 'boolean' && (\n <p className=\"mt-1 text-xs text-muted-foreground\">{field.description}</p>\n )}\n\n {fieldError && (\n <p className=\"mt-1 text-xs text-status-error-text\">\n {tr('channel.fieldRequired', 'This field is required')}\n </p>\n )}\n </div>\n );\n };\n\n return (\n <div className=\"space-y-5\">\n {/* Header with adapter info */}\n <div className=\"flex items-start justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-foreground\">{schema.displayName}</h3>\n <p className=\"text-xs text-muted-foreground mt-0.5\">{schema.description}</p>\n </div>\n {schema.docUrl && (\n <a\n href={schema.docUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1 text-xs text-accent-primary hover:text-accent-primary-hover\"\n >\n <span>{tr('channel.docs', 'Docs')}</span>\n <ExternalLink size={12} />\n </a>\n )}\n </div>\n\n {/* Credential fields */}\n <div className=\"space-y-4\">\n {schema.credentials.length > 0 && (\n <div className=\"space-y-4\">{schema.credentials.map(renderField)}</div>\n )}\n\n {/* Platform metadata fields (optional settings) */}\n {showPlatformMetadata && schema.platformMetadata && schema.platformMetadata.length > 0 && (\n <>\n <div className=\"border-t border-border pt-4 mt-4\">\n <p className=\"text-xs font-medium text-muted-foreground mb-3\">\n {tr('channel.optionalSettings', 'Optional Settings')}\n </p>\n <div className=\"space-y-4\">{schema.platformMetadata.map(renderField)}</div>\n </div>\n </>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * Compact validation status indicator\n */\nexport function CredentialValidationStatus({\n adapterType,\n credentials,\n}: {\n adapterType: AdapterType | undefined;\n credentials: Record<string, unknown>;\n}) {\n const { t } = useI18n();\n const tr = (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n };\n\n if (!adapterType) return null;\n\n const { valid, errors } = validateCredentials(adapterType, credentials);\n\n if (valid) {\n return (\n <div className=\"flex items-center gap-1.5 text-status-success-text\">\n <CheckCircle2 size={14} />\n <span className=\"text-xs\">\n {tr('channel.allRequiredFieldsFilled', 'All required fields filled')}\n </span>\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center gap-1.5 text-status-warning-text\">\n <AlertCircle size={14} />\n <span className=\"text-xs\">\n {errors.length} {tr('channel.fieldsNeedAttention', 'field(s) need attention')}\n </span>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -4,6 +4,9 @@ interface FeatureNotEnabledProps {
|
|
|
4
4
|
/**
|
|
5
5
|
* Default fallback rendered when a feature flag is disabled. Behaves as a
|
|
6
6
|
* "404-style" panel — never throws, never crashes the route.
|
|
7
|
+
*
|
|
8
|
+
* - The flag key is only shown to super admins (developer-facing detail).
|
|
9
|
+
* - The CTA links to Feature Previews so admins can enable the flag directly.
|
|
7
10
|
*/
|
|
8
11
|
export declare function FeatureNotEnabled({ flag }: FeatureNotEnabledProps): import("react/jsx-runtime").JSX.Element;
|
|
9
12
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureNotEnabled.d.ts","sourceRoot":"","sources":["../../../src/channel/components/FeatureNotEnabled.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FeatureNotEnabled.d.ts","sourceRoot":"","sources":["../../../src/channel/components/FeatureNotEnabled.tsx"],"names":[],"mappings":"AAGA,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,sBAAsB,2CAkCjE"}
|
|
@@ -1,32 +1,50 @@
|
|
|
1
1
|
import { Lock as e } from "lucide-react";
|
|
2
|
-
import {
|
|
2
|
+
import { usePermissions as t } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
3
|
+
import { jsx as n, jsxs as r } from "react/jsx-runtime";
|
|
3
4
|
//#region src/channel/components/FeatureNotEnabled.tsx
|
|
4
|
-
function
|
|
5
|
-
|
|
5
|
+
function i({ flag: i }) {
|
|
6
|
+
let { hasRole: a } = t(), o = a("SUPER_ADMIN");
|
|
7
|
+
return /* @__PURE__ */ r("div", {
|
|
6
8
|
className: "flex flex-col items-center justify-center min-h-[400px] gap-4 text-center p-6",
|
|
7
|
-
children: [/* @__PURE__ */
|
|
9
|
+
children: [/* @__PURE__ */ n("div", {
|
|
8
10
|
className: "p-3 rounded-full bg-bg-elevated",
|
|
9
|
-
children: /* @__PURE__ */
|
|
10
|
-
}), /* @__PURE__ */
|
|
11
|
+
children: /* @__PURE__ */ n(e, { className: "h-8 w-8 text-fg-muted" })
|
|
12
|
+
}), /* @__PURE__ */ r("div", {
|
|
11
13
|
className: "space-y-2 max-w-md",
|
|
12
14
|
children: [
|
|
13
|
-
/* @__PURE__ */
|
|
15
|
+
/* @__PURE__ */ n("h3", {
|
|
14
16
|
className: "text-lg font-semibold text-fg",
|
|
15
17
|
children: "Feature not enabled"
|
|
16
18
|
}),
|
|
17
|
-
/* @__PURE__ */
|
|
19
|
+
/* @__PURE__ */ n("p", {
|
|
18
20
|
className: "text-sm text-fg-muted",
|
|
19
|
-
children: "This feature is currently disabled for your workspace.
|
|
21
|
+
children: "This feature is currently disabled for your workspace."
|
|
20
22
|
}),
|
|
21
|
-
/* @__PURE__ */
|
|
22
|
-
className: "text-
|
|
23
|
-
children: [
|
|
23
|
+
o ? /* @__PURE__ */ r("p", {
|
|
24
|
+
className: "text-sm text-fg-muted",
|
|
25
|
+
children: [
|
|
26
|
+
"You can enable it in",
|
|
27
|
+
" ",
|
|
28
|
+
/* @__PURE__ */ n("a", {
|
|
29
|
+
href: "/feature-previews",
|
|
30
|
+
className: "text-action-primary-text underline underline-offset-2 hover:text-action-primary-text-hover",
|
|
31
|
+
children: "Feature Previews"
|
|
32
|
+
}),
|
|
33
|
+
"."
|
|
34
|
+
]
|
|
35
|
+
}) : /* @__PURE__ */ n("p", {
|
|
36
|
+
className: "text-sm text-fg-muted",
|
|
37
|
+
children: "Contact your administrator if you believe this is in error."
|
|
38
|
+
}),
|
|
39
|
+
o && /* @__PURE__ */ r("p", {
|
|
40
|
+
className: "text-xs text-fg-subtle font-mono mt-1",
|
|
41
|
+
children: ["flag: ", i]
|
|
24
42
|
})
|
|
25
43
|
]
|
|
26
44
|
})]
|
|
27
45
|
});
|
|
28
46
|
}
|
|
29
47
|
//#endregion
|
|
30
|
-
export {
|
|
48
|
+
export { i as FeatureNotEnabled };
|
|
31
49
|
|
|
32
50
|
//# sourceMappingURL=FeatureNotEnabled.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureNotEnabled.js","names":[],"sources":["../../../src/channel/components/FeatureNotEnabled.tsx"],"sourcesContent":["import { Lock } from 'lucide-react';\n\ninterface FeatureNotEnabledProps {\n flag: string;\n}\n\n/**\n * Default fallback rendered when a feature flag is disabled. Behaves as a\n * \"404-style\" panel — never throws, never crashes the route.\n */\nexport function FeatureNotEnabled({ flag }: FeatureNotEnabledProps) {\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[400px] gap-4 text-center p-6\">\n <div className=\"p-3 rounded-full bg-bg-elevated\">\n <Lock className=\"h-8 w-8 text-fg-muted\" />\n </div>\n <div className=\"space-y-2 max-w-md\">\n <h3 className=\"text-lg font-semibold text-fg\">Feature not enabled</h3>\n <p className=\"text-sm text-fg-muted\">\n This feature is currently disabled for your workspace
|
|
1
|
+
{"version":3,"file":"FeatureNotEnabled.js","names":[],"sources":["../../../src/channel/components/FeatureNotEnabled.tsx"],"sourcesContent":["import { Lock } from 'lucide-react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\n\ninterface FeatureNotEnabledProps {\n flag: string;\n}\n\n/**\n * Default fallback rendered when a feature flag is disabled. Behaves as a\n * \"404-style\" panel — never throws, never crashes the route.\n *\n * - The flag key is only shown to super admins (developer-facing detail).\n * - The CTA links to Feature Previews so admins can enable the flag directly.\n */\nexport function FeatureNotEnabled({ flag }: FeatureNotEnabledProps) {\n const { hasRole } = usePermissions();\n const isSuperAdmin = hasRole('SUPER_ADMIN');\n\n return (\n <div className=\"flex flex-col items-center justify-center min-h-[400px] gap-4 text-center p-6\">\n <div className=\"p-3 rounded-full bg-bg-elevated\">\n <Lock className=\"h-8 w-8 text-fg-muted\" />\n </div>\n <div className=\"space-y-2 max-w-md\">\n <h3 className=\"text-lg font-semibold text-fg\">Feature not enabled</h3>\n <p className=\"text-sm text-fg-muted\">\n This feature is currently disabled for your workspace.\n </p>\n {isSuperAdmin ? (\n <p className=\"text-sm text-fg-muted\">\n You can enable it in{' '}\n <a\n href=\"/feature-previews\"\n className=\"text-action-primary-text underline underline-offset-2 hover:text-action-primary-text-hover\"\n >\n Feature Previews\n </a>\n .\n </p>\n ) : (\n <p className=\"text-sm text-fg-muted\">\n Contact your administrator if you believe this is in error.\n </p>\n )}\n {isSuperAdmin && <p className=\"text-xs text-fg-subtle font-mono mt-1\">flag: {flag}</p>}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;AAcA,SAAgB,EAAkB,EAAE,WAAgC;CAClE,IAAM,EAAE,eAAY,GAAgB,EAC9B,IAAe,EAAQ,cAAc;AAE3C,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD,EAAM,WAAU,yBAA0B,CAAA;GACtC,CAAA,EACN,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,MAAD;KAAI,WAAU;eAAgC;KAAwB,CAAA;IACtE,kBAAC,KAAD;KAAG,WAAU;eAAwB;KAEjC,CAAA;IACH,IACC,kBAAC,KAAD;KAAG,WAAU;eAAb;MAAqC;MACd;MACrB,kBAAC,KAAD;OACE,MAAK;OACL,WAAU;iBACX;OAEG,CAAA;;MAEF;SAEJ,kBAAC,KAAD;KAAG,WAAU;eAAwB;KAEjC,CAAA;IAEL,KAAgB,kBAAC,KAAD;KAAG,WAAU;eAAb,CAAqD,UAAO,EAAS;;IAClF;KACF"}
|
|
@@ -202,9 +202,23 @@ export declare function useChannel(id: string | undefined): {
|
|
|
202
202
|
subject?: string;
|
|
203
203
|
html?: string;
|
|
204
204
|
}) => Promise<ChannelDeliveryResult | null>;
|
|
205
|
-
fetchDeliveryAttempts: (limit?: number) => Promise<
|
|
206
|
-
|
|
207
|
-
|
|
205
|
+
fetchDeliveryAttempts: (limit?: number, cursor?: string) => Promise<{
|
|
206
|
+
items: DeliveryAttempt[];
|
|
207
|
+
nextCursor?: string;
|
|
208
|
+
hasMore: boolean;
|
|
209
|
+
total: number;
|
|
210
|
+
}>;
|
|
211
|
+
fetchWebhookEvents: (limit?: number, cursor?: string) => Promise<{
|
|
212
|
+
items: WebhookEvent[];
|
|
213
|
+
nextCursor?: string;
|
|
214
|
+
hasMore: boolean;
|
|
215
|
+
total: number;
|
|
216
|
+
}>;
|
|
217
|
+
fetchUserPlatformConnections: (limit?: number, offset?: number) => Promise<{
|
|
218
|
+
items: UserPlatformConnection[];
|
|
219
|
+
hasMore: boolean;
|
|
220
|
+
total: number;
|
|
221
|
+
}>;
|
|
208
222
|
retryDelivery: (attemptId: string) => Promise<{
|
|
209
223
|
success: boolean;
|
|
210
224
|
error?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useChannels.d.ts","sourceRoot":"","sources":["../../../src/channel/hooks/useChannels.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useChannels.d.ts","sourceRoot":"","sources":["../../../src/channel/hooks/useChannels.ts"],"names":[],"mappings":"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"}
|
|
@@ -313,20 +313,35 @@ function D(n) {
|
|
|
313
313
|
} catch (e) {
|
|
314
314
|
throw T(e, "Failed to send test message"), e;
|
|
315
315
|
}
|
|
316
|
-
}, [c, A]), z = S(async (e =
|
|
317
|
-
if (!n) return
|
|
316
|
+
}, [c, A]), z = S(async (e = 25, t) => {
|
|
317
|
+
if (!n) return {
|
|
318
|
+
items: [],
|
|
319
|
+
hasMore: !1,
|
|
320
|
+
total: 0
|
|
321
|
+
};
|
|
318
322
|
try {
|
|
319
|
-
|
|
323
|
+
let r = (await A().query({
|
|
320
324
|
query: p,
|
|
321
325
|
variables: {
|
|
322
326
|
channelId: n,
|
|
323
|
-
limit: e
|
|
327
|
+
limit: e,
|
|
328
|
+
cursor: t
|
|
324
329
|
},
|
|
325
330
|
fetchPolicy: "network-only"
|
|
326
|
-
})).data?.getChannelDeliveryAttempts
|
|
331
|
+
})).data?.getChannelDeliveryAttempts;
|
|
332
|
+
return {
|
|
333
|
+
items: r?.items ?? [],
|
|
334
|
+
nextCursor: r?.nextCursor ?? void 0,
|
|
335
|
+
hasMore: r?.hasMore ?? !1,
|
|
336
|
+
total: r?.total ?? 0
|
|
337
|
+
};
|
|
327
338
|
} catch (e) {
|
|
328
339
|
let t = e instanceof Error ? e.message : "Failed to fetch delivery attempts";
|
|
329
|
-
return T(e, "Failed to fetch delivery attempts"), k(t),
|
|
340
|
+
return T(e, "Failed to fetch delivery attempts"), k(t), {
|
|
341
|
+
items: [],
|
|
342
|
+
hasMore: !1,
|
|
343
|
+
total: 0
|
|
344
|
+
};
|
|
330
345
|
}
|
|
331
346
|
}, [n, A]);
|
|
332
347
|
return {
|
|
@@ -342,36 +357,67 @@ function D(n) {
|
|
|
342
357
|
testConnection: L,
|
|
343
358
|
sendTestNotification: R,
|
|
344
359
|
fetchDeliveryAttempts: z,
|
|
345
|
-
fetchWebhookEvents: S(async (e =
|
|
346
|
-
if (!n) return
|
|
360
|
+
fetchWebhookEvents: S(async (e = 25, t) => {
|
|
361
|
+
if (!n) return {
|
|
362
|
+
items: [],
|
|
363
|
+
hasMore: !1,
|
|
364
|
+
total: 0
|
|
365
|
+
};
|
|
347
366
|
try {
|
|
348
|
-
|
|
367
|
+
let r = (await A().query({
|
|
349
368
|
query: g,
|
|
350
369
|
variables: {
|
|
351
370
|
channelId: n,
|
|
352
|
-
limit: e
|
|
371
|
+
limit: e,
|
|
372
|
+
cursor: t
|
|
353
373
|
},
|
|
354
374
|
fetchPolicy: "network-only"
|
|
355
|
-
})).data?.getChannelWebhookEvents
|
|
375
|
+
})).data?.getChannelWebhookEvents;
|
|
376
|
+
return {
|
|
377
|
+
items: r?.items ?? [],
|
|
378
|
+
nextCursor: r?.nextCursor ?? void 0,
|
|
379
|
+
hasMore: r?.hasMore ?? !1,
|
|
380
|
+
total: r?.total ?? 0
|
|
381
|
+
};
|
|
356
382
|
} catch (e) {
|
|
357
383
|
let t = e instanceof Error ? e.message : "Failed to fetch webhook events";
|
|
358
|
-
return T(e, "Failed to fetch webhook events"), k(t),
|
|
384
|
+
return T(e, "Failed to fetch webhook events"), k(t), {
|
|
385
|
+
items: [],
|
|
386
|
+
hasMore: !1,
|
|
387
|
+
total: 0
|
|
388
|
+
};
|
|
359
389
|
}
|
|
360
390
|
}, [n, A]),
|
|
361
|
-
fetchUserPlatformConnections: S(async (e =
|
|
362
|
-
if (!n) return
|
|
391
|
+
fetchUserPlatformConnections: S(async (e = 25, t = 0) => {
|
|
392
|
+
if (!n) return {
|
|
393
|
+
items: [],
|
|
394
|
+
hasMore: !1,
|
|
395
|
+
total: 0
|
|
396
|
+
};
|
|
363
397
|
try {
|
|
364
|
-
|
|
398
|
+
let r = (await A().query({
|
|
365
399
|
query: h,
|
|
366
400
|
variables: {
|
|
367
401
|
channelId: n,
|
|
368
|
-
pagination: {
|
|
402
|
+
pagination: {
|
|
403
|
+
limit: e,
|
|
404
|
+
offset: t
|
|
405
|
+
}
|
|
369
406
|
},
|
|
370
407
|
fetchPolicy: "network-only"
|
|
371
|
-
})).data?.listUserPlatformConnectionsByChannel
|
|
408
|
+
})).data?.listUserPlatformConnectionsByChannel;
|
|
409
|
+
return {
|
|
410
|
+
items: r?.items ?? [],
|
|
411
|
+
hasMore: r?.hasMore ?? !1,
|
|
412
|
+
total: r?.total ?? 0
|
|
413
|
+
};
|
|
372
414
|
} catch (e) {
|
|
373
415
|
let t = e instanceof Error ? e.message : "Failed to fetch user platform connections";
|
|
374
|
-
return T(e, "Failed to fetch user platform connections"), k(t),
|
|
416
|
+
return T(e, "Failed to fetch user platform connections"), k(t), {
|
|
417
|
+
items: [],
|
|
418
|
+
hasMore: !1,
|
|
419
|
+
total: 0
|
|
420
|
+
};
|
|
375
421
|
}
|
|
376
422
|
}, [n, A]),
|
|
377
423
|
retryDelivery: S(async (e) => {
|