@burdenoff/microfe-subscriberbot 2026.1031.1 → 2026.1102.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/stories/pages/NegotiationDetailPage.stories.d.ts +11 -0
- package/dist/stories/pages/NegotiationDetailPage.stories.d.ts.map +1 -0
- package/dist/stories/pages/NegotiationNewPage.stories.d.ts +9 -0
- package/dist/stories/pages/NegotiationNewPage.stories.d.ts.map +1 -0
- package/dist/stories/pages/NegotiationsPage.stories.d.ts +11 -0
- package/dist/stories/pages/NegotiationsPage.stories.d.ts.map +1 -0
- package/dist/stories/support/negotiationFixtures.d.ts +14 -0
- package/dist/stories/support/negotiationFixtures.d.ts.map +1 -0
- package/dist/subscriberbot/SubscriberBotRoutes.d.ts.map +1 -1
- package/dist/subscriberbot/SubscriberBotRoutes.js +18 -6
- package/dist/subscriberbot/SubscriberBotRoutes.js.map +1 -1
- package/dist/subscriberbot/admin/AdminDashboardPage.d.ts.map +1 -1
- package/dist/subscriberbot/admin/AdminDashboardPage.js +61 -51
- package/dist/subscriberbot/admin/AdminDashboardPage.js.map +1 -1
- package/dist/subscriberbot/admin/NegotiationDeskPanel.d.ts +4 -0
- package/dist/subscriberbot/admin/NegotiationDeskPanel.d.ts.map +1 -0
- package/dist/subscriberbot/admin/NegotiationDeskPanel.js +210 -0
- package/dist/subscriberbot/admin/NegotiationDeskPanel.js.map +1 -0
- package/dist/subscriberbot/components/negotiations/NegotiationStatusPill.d.ts +8 -0
- package/dist/subscriberbot/components/negotiations/NegotiationStatusPill.d.ts.map +1 -0
- package/dist/subscriberbot/components/negotiations/NegotiationStatusPill.js +18 -0
- package/dist/subscriberbot/components/negotiations/NegotiationStatusPill.js.map +1 -0
- package/dist/subscriberbot/components/negotiations/NegotiationTimeline.d.ts +8 -0
- package/dist/subscriberbot/components/negotiations/NegotiationTimeline.d.ts.map +1 -0
- package/dist/subscriberbot/components/negotiations/NegotiationTimeline.js +49 -0
- package/dist/subscriberbot/components/negotiations/NegotiationTimeline.js.map +1 -0
- package/dist/subscriberbot/components/negotiations/OutcomeForm.d.ts +13 -0
- package/dist/subscriberbot/components/negotiations/OutcomeForm.d.ts.map +1 -0
- package/dist/subscriberbot/components/negotiations/OutcomeForm.js +112 -0
- package/dist/subscriberbot/components/negotiations/OutcomeForm.js.map +1 -0
- package/dist/subscriberbot/components/negotiations/index.d.ts +5 -0
- package/dist/subscriberbot/components/negotiations/index.d.ts.map +1 -0
- package/dist/subscriberbot/components/negotiations/index.js +4 -0
- package/dist/subscriberbot/components/negotiations/labels.d.ts +16 -0
- package/dist/subscriberbot/components/negotiations/labels.d.ts.map +1 -0
- package/dist/subscriberbot/components/negotiations/labels.js +179 -0
- package/dist/subscriberbot/components/negotiations/labels.js.map +1 -0
- package/dist/subscriberbot/hooks/useNegotiationApi.d.ts +51 -0
- package/dist/subscriberbot/hooks/useNegotiationApi.d.ts.map +1 -0
- package/dist/subscriberbot/hooks/useNegotiationApi.js +106 -0
- package/dist/subscriberbot/hooks/useNegotiationApi.js.map +1 -0
- package/dist/subscriberbot/hooks/useSubscriberBotApi.d.ts +1 -0
- package/dist/subscriberbot/hooks/useSubscriberBotApi.d.ts.map +1 -1
- package/dist/subscriberbot/hooks/useSubscriberBotApi.js +1 -1
- package/dist/subscriberbot/hooks/useSubscriberBotApi.js.map +1 -1
- package/dist/subscriberbot/pages/negotiations/NegotiationDetailPage.d.ts +11 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationDetailPage.d.ts.map +1 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationDetailPage.js +312 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationDetailPage.js.map +1 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationNewPage.d.ts +11 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationNewPage.d.ts.map +1 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationNewPage.js +375 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationNewPage.js.map +1 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationsPage.d.ts +10 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationsPage.d.ts.map +1 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationsPage.js +155 -0
- package/dist/subscriberbot/pages/negotiations/NegotiationsPage.js.map +1 -0
- package/dist/subscriberbot/pages/relationships/RelationshipDetailPage.d.ts.map +1 -1
- package/dist/subscriberbot/pages/relationships/RelationshipDetailPage.js +321 -307
- package/dist/subscriberbot/pages/relationships/RelationshipDetailPage.js.map +1 -1
- package/dist/subscriberbot/types/negotiation.d.ts +101 -0
- package/dist/subscriberbot/types/negotiation.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { NegotiationDetailPage } from '../../subscriberbot/pages/negotiations/NegotiationDetailPage';
|
|
3
|
+
|
|
4
|
+
declare const meta: Meta<typeof NegotiationDetailPage>;
|
|
5
|
+
export default meta;
|
|
6
|
+
type Story = StoryObj<typeof meta>;
|
|
7
|
+
export declare const DraftSelfServe: Story;
|
|
8
|
+
export declare const DraftManagedNeedsConsent: Story;
|
|
9
|
+
export declare const RecordSelfServeOutcome: Story;
|
|
10
|
+
export declare const SucceededWithFee: Story;
|
|
11
|
+
//# sourceMappingURL=NegotiationDetailPage.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NegotiationDetailPage.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/pages/NegotiationDetailPage.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8DAA8D,CAAC;AAOrG,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,qBAAqB,CAQ5C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,cAAc,EAAE,KAU5B,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,KAmBtC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAWpC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAU9B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { NegotiationNewPage } from '../../subscriberbot/pages/negotiations/NegotiationNewPage';
|
|
3
|
+
|
|
4
|
+
declare const meta: Meta<typeof NegotiationNewPage>;
|
|
5
|
+
export default meta;
|
|
6
|
+
type Story = StoryObj<typeof meta>;
|
|
7
|
+
export declare const CreateSelfServe: Story;
|
|
8
|
+
export declare const ManagedNeedsAccountHolder: Story;
|
|
9
|
+
//# sourceMappingURL=NegotiationNewPage.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NegotiationNewPage.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/pages/NegotiationNewPage.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2DAA2D,CAAC;AAK/F,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAQzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,eAAe,EAAE,KAoB7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAYvC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { NegotiationsPage } from '../../subscriberbot/pages/negotiations/NegotiationsPage';
|
|
3
|
+
|
|
4
|
+
declare const meta: Meta<typeof NegotiationsPage>;
|
|
5
|
+
export default meta;
|
|
6
|
+
type Story = StoryObj<typeof meta>;
|
|
7
|
+
export declare const Populated: Story;
|
|
8
|
+
export declare const FilterByStatus: Story;
|
|
9
|
+
export declare const OpenRequest: Story;
|
|
10
|
+
export declare const Empty: Story;
|
|
11
|
+
//# sourceMappingURL=NegotiationsPage.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NegotiationsPage.stories.d.ts","sourceRoot":"","sources":["../../../src/stories/pages/NegotiationsPage.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yDAAyD,CAAC;AAO3F,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,gBAAgB,CAQvC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAQ5B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAMzB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAQnB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SubNegotiation, SubNegotiationSummary, SubNegotiationTerms } from '../../subscriberbot/types/negotiation';
|
|
2
|
+
import { GraphqlMockHandlers } from './graphqlMock';
|
|
3
|
+
|
|
4
|
+
export declare const negotiationTerms: SubNegotiationTerms;
|
|
5
|
+
export declare const draftSelfServe: SubNegotiation;
|
|
6
|
+
export declare const draftManaged: SubNegotiation;
|
|
7
|
+
export declare const submittedSelfServe: SubNegotiation;
|
|
8
|
+
export declare const succeededManaged: SubNegotiation;
|
|
9
|
+
export declare const negotiations: SubNegotiation[];
|
|
10
|
+
export declare const negotiationSummary: SubNegotiationSummary;
|
|
11
|
+
/** Populated SubscriberBot handlers plus every negotiation operation. */
|
|
12
|
+
export declare function negotiationHandlers(): GraphqlMockHandlers;
|
|
13
|
+
export declare function emptyNegotiationHandlers(): GraphqlMockHandlers;
|
|
14
|
+
//# sourceMappingURL=negotiationFixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"negotiationFixtures.d.ts","sourceRoot":"","sources":["../../../src/stories/support/negotiationFixtures.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAoB,MAAM,eAAe,CAAC;AAI3E,eAAO,MAAM,gBAAgB,EAAE,mBAO9B,CAAC;AAyDF,eAAO,MAAM,cAAc,gBAAkB,CAAC;AAE9C,eAAO,MAAM,YAAY,gBAOvB,CAAC;AAEH,eAAO,MAAM,kBAAkB,gBAI7B,CAAC;AAEH,eAAO,MAAM,gBAAgB,gBAgB3B,CAAC;AAEH,eAAO,MAAM,YAAY,kBAAuE,CAAC;AAEjG,eAAO,MAAM,kBAAkB,EAAE,qBAMhC,CAAC;AAMF,yEAAyE;AACzE,wBAAgB,mBAAmB,IAAI,mBAAmB,CA0BzD;AAED,wBAAgB,wBAAwB,IAAI,mBAAmB,CAc9D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriberBotRoutes.d.ts","sourceRoot":"","sources":["../../src/subscriberbot/SubscriberBotRoutes.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SubscriberBotRoutes.d.ts","sourceRoot":"","sources":["../../src/subscriberbot/SubscriberBotRoutes.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,EAAkB,MAAM,OAAO,CAAC;AAyGhD,eAAO,MAAM,mBAAmB,EAAE,EA0EjC,CAAC"}
|
|
@@ -5,15 +5,15 @@ import { Navigate as i, Route as a, Routes as o, useLocation as s } from "react-
|
|
|
5
5
|
import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
6
6
|
import { Spinner as u } from "@burdenoff/fe-libs/ui";
|
|
7
7
|
//#region src/subscriberbot/SubscriberBotRoutes.tsx
|
|
8
|
-
var d = r(() => import("./pages/relationships/RelationshipsListPage.js").then((e) => ({ default: e.RelationshipsListPage }))), f = r(() => import("./pages/relationships/RelationshipNewPage.js").then((e) => ({ default: e.RelationshipNewPage }))), p = r(() => import("./pages/relationships/RelationshipDetailPage.js").then((e) => ({ default: e.RelationshipDetailPage }))), m = r(() => import("./pages/providers/ProvidersListPage.js").then((e) => ({ default: e.ProvidersListPage }))), h = r(() => import("./pages/providers/ProviderNewPage.js").then((e) => ({ default: e.ProviderNewPage }))), g = r(() => import("./pages/providers/ProviderDetailPage.js").then((e) => ({ default: e.ProviderDetailPage }))), _ = r(() => import("./pages/InboxPage.js").then((e) => ({ default: e.InboxPage }))), v = r(() => import("./pages/InvoicesPage.js").then((e) => ({ default: e.InvoicesPage }))), y = r(() => import("./pages/WorkflowsPage.js").then((e) => ({ default: e.WorkflowsPage }))), b = r(() => import("./pages/agents/AgentsListPage.js").then((e) => ({ default: e.AgentsListPage }))), x = r(() => import("./pages/agents/AgentNewPage.js").then((e) => ({ default: e.AgentNewPage }))), S = r(() => import("./pages/agents/AgentDetailPage.js").then((e) => ({ default: e.AgentDetailPage }))), C = r(() => import("./pages/decisions/DecisionsPage.js").then((e) => ({ default: e.DecisionsPage }))), w = r(() => import("./pages/decisions/DecisionDetailPage.js").then((e) => ({ default: e.DecisionDetailPage }))), T = r(() => import("./pages/SavingsPage.js").then((e) => ({ default: e.SavingsPage }))), E = r(() => import("./pages/InsightsPage.js").then((e) => ({ default: e.InsightsPage }))), D = r(() => import("./pages/AssetVaultPage.js").then((e) => ({ default: e.AssetVaultPage }))), O = r(() => import("./pages/enterprise/EnterpriseSpendPage.js").then((e) => ({ default: e.EnterpriseSpendPage }))), k = () => /* @__PURE__ */ c("div", {
|
|
8
|
+
var d = r(() => import("./pages/relationships/RelationshipsListPage.js").then((e) => ({ default: e.RelationshipsListPage }))), f = r(() => import("./pages/relationships/RelationshipNewPage.js").then((e) => ({ default: e.RelationshipNewPage }))), p = r(() => import("./pages/relationships/RelationshipDetailPage.js").then((e) => ({ default: e.RelationshipDetailPage }))), m = r(() => import("./pages/providers/ProvidersListPage.js").then((e) => ({ default: e.ProvidersListPage }))), h = r(() => import("./pages/providers/ProviderNewPage.js").then((e) => ({ default: e.ProviderNewPage }))), g = r(() => import("./pages/providers/ProviderDetailPage.js").then((e) => ({ default: e.ProviderDetailPage }))), _ = r(() => import("./pages/InboxPage.js").then((e) => ({ default: e.InboxPage }))), v = r(() => import("./pages/InvoicesPage.js").then((e) => ({ default: e.InvoicesPage }))), y = r(() => import("./pages/WorkflowsPage.js").then((e) => ({ default: e.WorkflowsPage }))), b = r(() => import("./pages/agents/AgentsListPage.js").then((e) => ({ default: e.AgentsListPage }))), x = r(() => import("./pages/agents/AgentNewPage.js").then((e) => ({ default: e.AgentNewPage }))), S = r(() => import("./pages/agents/AgentDetailPage.js").then((e) => ({ default: e.AgentDetailPage }))), C = r(() => import("./pages/decisions/DecisionsPage.js").then((e) => ({ default: e.DecisionsPage }))), w = r(() => import("./pages/decisions/DecisionDetailPage.js").then((e) => ({ default: e.DecisionDetailPage }))), T = r(() => import("./pages/SavingsPage.js").then((e) => ({ default: e.SavingsPage }))), E = r(() => import("./pages/InsightsPage.js").then((e) => ({ default: e.InsightsPage }))), D = r(() => import("./pages/AssetVaultPage.js").then((e) => ({ default: e.AssetVaultPage }))), O = r(() => import("./pages/enterprise/EnterpriseSpendPage.js").then((e) => ({ default: e.EnterpriseSpendPage }))), k = r(() => import("./pages/negotiations/NegotiationsPage.js").then((e) => ({ default: e.NegotiationsPage }))), A = r(() => import("./pages/negotiations/NegotiationNewPage.js").then((e) => ({ default: e.NegotiationNewPage }))), j = r(() => import("./pages/negotiations/NegotiationDetailPage.js").then((e) => ({ default: e.NegotiationDetailPage }))), M = () => /* @__PURE__ */ c("div", {
|
|
9
9
|
className: "flex min-h-[400px] items-center justify-center",
|
|
10
10
|
children: /* @__PURE__ */ c(u, { size: "lg" })
|
|
11
|
-
}),
|
|
12
|
-
let { basePath: r, isStandalone: u } = e(),
|
|
13
|
-
return
|
|
11
|
+
}), N = () => {
|
|
12
|
+
let { basePath: r, isStandalone: u } = e(), N = s(), P = r === "/" ? "" : (r ?? "").replace(/\/$/, "");
|
|
13
|
+
return P && !u && !(N.pathname === P || N.pathname.startsWith(P + "/")) ? null : /* @__PURE__ */ c("div", {
|
|
14
14
|
className: "flex min-h-full flex-col",
|
|
15
15
|
children: /* @__PURE__ */ c(n, {
|
|
16
|
-
fallback: /* @__PURE__ */ c(
|
|
16
|
+
fallback: /* @__PURE__ */ c(M, {}),
|
|
17
17
|
children: /* @__PURE__ */ l(o, { children: [
|
|
18
18
|
/* @__PURE__ */ c(a, {
|
|
19
19
|
index: !0,
|
|
@@ -87,6 +87,18 @@ var d = r(() => import("./pages/relationships/RelationshipsListPage.js").then((e
|
|
|
87
87
|
path: "decisions/:id",
|
|
88
88
|
element: /* @__PURE__ */ c(w, {})
|
|
89
89
|
}),
|
|
90
|
+
/* @__PURE__ */ c(a, {
|
|
91
|
+
path: "negotiations",
|
|
92
|
+
element: /* @__PURE__ */ c(k, {})
|
|
93
|
+
}),
|
|
94
|
+
/* @__PURE__ */ c(a, {
|
|
95
|
+
path: "negotiations/new",
|
|
96
|
+
element: /* @__PURE__ */ c(A, {})
|
|
97
|
+
}),
|
|
98
|
+
/* @__PURE__ */ c(a, {
|
|
99
|
+
path: "negotiations/:id",
|
|
100
|
+
element: /* @__PURE__ */ c(j, {})
|
|
101
|
+
}),
|
|
90
102
|
/* @__PURE__ */ c(a, {
|
|
91
103
|
path: "workflows/:selectedId?",
|
|
92
104
|
element: /* @__PURE__ */ c(y, {})
|
|
@@ -103,6 +115,6 @@ var d = r(() => import("./pages/relationships/RelationshipsListPage.js").then((e
|
|
|
103
115
|
});
|
|
104
116
|
};
|
|
105
117
|
//#endregion
|
|
106
|
-
export {
|
|
118
|
+
export { N as SubscriberBotRoutes };
|
|
107
119
|
|
|
108
120
|
//# sourceMappingURL=SubscriberBotRoutes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriberBotRoutes.js","names":[],"sources":["../../src/subscriberbot/SubscriberBotRoutes.tsx"],"sourcesContent":["/**\n * SubscriberBot Routes\n * @module subscriberbot\n *\n * Domain routes for the Subscriber Bot product. The dashboard is eager-loaded\n * (primary landing); all other pages are lazy-loaded.\n */\n\nimport { type FC, lazy, Suspense } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router';\nimport { Spinner } from '@burdenoff/fe-libs/ui';\nimport { useSubscriberBot } from './context/SubscriberBotContext';\n\n// Eager — primary landing\nimport { DashboardPage } from './pages/DashboardPage';\n\n// Relationships\nconst RelationshipsListPage = lazy(() =>\n import('./pages/relationships/RelationshipsListPage').then((m) => ({\n default: m.RelationshipsListPage,\n }))\n);\nconst RelationshipNewPage = lazy(() =>\n import('./pages/relationships/RelationshipNewPage').then((m) => ({\n default: m.RelationshipNewPage,\n }))\n);\nconst RelationshipDetailPage = lazy(() =>\n import('./pages/relationships/RelationshipDetailPage').then((m) => ({\n default: m.RelationshipDetailPage,\n }))\n);\n\n// Providers\nconst ProvidersListPage = lazy(() =>\n import('./pages/providers/ProvidersListPage').then((m) => ({ default: m.ProvidersListPage }))\n);\nconst ProviderNewPage = lazy(() =>\n import('./pages/providers/ProviderNewPage').then((m) => ({ default: m.ProviderNewPage }))\n);\nconst ProviderDetailPage = lazy(() =>\n import('./pages/providers/ProviderDetailPage').then((m) => ({ default: m.ProviderDetailPage }))\n);\n\n// Inbox / Invoices / Workflows\nconst InboxPage = lazy(() => import('./pages/InboxPage').then((m) => ({ default: m.InboxPage })));\nconst InvoicesPage = lazy(() =>\n import('./pages/InvoicesPage').then((m) => ({ default: m.InvoicesPage }))\n);\nconst WorkflowsPage = lazy(() =>\n import('./pages/WorkflowsPage').then((m) => ({ default: m.WorkflowsPage }))\n);\n\n// Agents\nconst AgentsListPage = lazy(() =>\n import('./pages/agents/AgentsListPage').then((m) => ({ default: m.AgentsListPage }))\n);\nconst AgentNewPage = lazy(() =>\n import('./pages/agents/AgentNewPage').then((m) => ({ default: m.AgentNewPage }))\n);\nconst AgentDetailPage = lazy(() =>\n import('./pages/agents/AgentDetailPage').then((m) => ({ default: m.AgentDetailPage }))\n);\n\n// AI decision queue (BOFF-3663)\nconst DecisionsPage = lazy(() =>\n import('./pages/decisions/DecisionsPage').then((m) => ({ default: m.DecisionsPage }))\n);\nconst DecisionDetailPage = lazy(() =>\n import('./pages/decisions/DecisionDetailPage').then((m) => ({ default: m.DecisionDetailPage }))\n);\n\n// Cost optimization dashboard (BOFF-4001)\nconst SavingsPage = lazy(() =>\n import('./pages/SavingsPage').then((m) => ({ default: m.SavingsPage }))\n);\n\n// Insights + Asset Vault (aggregated real data)\nconst InsightsPage = lazy(() =>\n import('./pages/InsightsPage').then((m) => ({ default: m.InsightsPage }))\n);\nconst AssetVaultPage = lazy(() =>\n import('./pages/AssetVaultPage').then((m) => ({ default: m.AssetVaultPage }))\n);\n\n// Enterprise SaaS spend management (BOFF-4008)\nconst EnterpriseSpendPage = lazy(() =>\n import('./pages/enterprise/EnterpriseSpendPage').then((m) => ({\n default: m.EnterpriseSpendPage,\n }))\n);\n\nconst PageLoader: FC = () => (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <Spinner size=\"lg\" />\n </div>\n);\n\nexport const SubscriberBotRoutes: FC = () => {\n const { basePath, isStandalone } = useSubscriberBot();\n const location = useLocation();\n\n // Normalize base path\n const normalizedBasePath = basePath === '/' ? '' : (basePath ?? '').replace(/\\/$/, '');\n\n // Guard: only render if the current path matches basePath (integrated mode).\n if (normalizedBasePath && !isStandalone) {\n const pathMatches =\n location.pathname === normalizedBasePath ||\n location.pathname.startsWith(normalizedBasePath + '/');\n if (!pathMatches) {\n return null;\n }\n }\n\n return (\n <div className=\"flex min-h-full flex-col\">\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Overview / dashboard */}\n <Route index element={<DashboardPage />} />\n\n {/* Relationships (the core domain) */}\n <Route path=\"relationships\" element={<RelationshipsListPage />} />\n <Route path=\"relationships/new\" element={<RelationshipNewPage />} />\n <Route path=\"relationships/:id\" element={<RelationshipDetailPage />} />\n\n {/* Providers (registry) */}\n <Route path=\"providers\" element={<ProvidersListPage />} />\n <Route path=\"providers/new\" element={<ProviderNewPage />} />\n <Route path=\"providers/:id\" element={<ProviderDetailPage />} />\n\n {/* Universal Inbox */}\n {/* One optional-segment route so selecting a message never remounts the page */}\n <Route path=\"inbox/:selectedId?\" element={<InboxPage />} />\n\n {/* Invoices */}\n <Route path=\"invoices\" element={<InvoicesPage />} />\n\n {/* Insights (spend analytics + renewal forecast) */}\n <Route path=\"insights\" element={<InsightsPage />} />\n\n {/* Enterprise SaaS spend management */}\n <Route path=\"enterprise/spend\" element={<EnterpriseSpendPage />} />\n\n {/* Digital Asset Vault */}\n <Route path=\"vault\" element={<AssetVaultPage />} />\n\n {/* AI Agents */}\n <Route path=\"agents\" element={<AgentsListPage />} />\n <Route path=\"agents/new\" element={<AgentNewPage />} />\n <Route path=\"agents/:id\" element={<AgentDetailPage />} />\n\n {/* AI decision queue */}\n <Route path=\"decisions\" element={<DecisionsPage />} />\n <Route path=\"savings\" element={<SavingsPage />} />\n <Route path=\"decisions/:id\" element={<DecisionDetailPage />} />\n\n {/* Workflows */}\n <Route path=\"workflows/:selectedId?\" element={<WorkflowsPage />} />\n\n {/* Fallback */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SubscriberBotRoutes.js","names":[],"sources":["../../src/subscriberbot/SubscriberBotRoutes.tsx"],"sourcesContent":["/**\n * SubscriberBot Routes\n * @module subscriberbot\n *\n * Domain routes for the Subscriber Bot product. The dashboard is eager-loaded\n * (primary landing); all other pages are lazy-loaded.\n */\n\nimport { type FC, lazy, Suspense } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router';\nimport { Spinner } from '@burdenoff/fe-libs/ui';\nimport { useSubscriberBot } from './context/SubscriberBotContext';\n\n// Eager — primary landing\nimport { DashboardPage } from './pages/DashboardPage';\n\n// Relationships\nconst RelationshipsListPage = lazy(() =>\n import('./pages/relationships/RelationshipsListPage').then((m) => ({\n default: m.RelationshipsListPage,\n }))\n);\nconst RelationshipNewPage = lazy(() =>\n import('./pages/relationships/RelationshipNewPage').then((m) => ({\n default: m.RelationshipNewPage,\n }))\n);\nconst RelationshipDetailPage = lazy(() =>\n import('./pages/relationships/RelationshipDetailPage').then((m) => ({\n default: m.RelationshipDetailPage,\n }))\n);\n\n// Providers\nconst ProvidersListPage = lazy(() =>\n import('./pages/providers/ProvidersListPage').then((m) => ({ default: m.ProvidersListPage }))\n);\nconst ProviderNewPage = lazy(() =>\n import('./pages/providers/ProviderNewPage').then((m) => ({ default: m.ProviderNewPage }))\n);\nconst ProviderDetailPage = lazy(() =>\n import('./pages/providers/ProviderDetailPage').then((m) => ({ default: m.ProviderDetailPage }))\n);\n\n// Inbox / Invoices / Workflows\nconst InboxPage = lazy(() => import('./pages/InboxPage').then((m) => ({ default: m.InboxPage })));\nconst InvoicesPage = lazy(() =>\n import('./pages/InvoicesPage').then((m) => ({ default: m.InvoicesPage }))\n);\nconst WorkflowsPage = lazy(() =>\n import('./pages/WorkflowsPage').then((m) => ({ default: m.WorkflowsPage }))\n);\n\n// Agents\nconst AgentsListPage = lazy(() =>\n import('./pages/agents/AgentsListPage').then((m) => ({ default: m.AgentsListPage }))\n);\nconst AgentNewPage = lazy(() =>\n import('./pages/agents/AgentNewPage').then((m) => ({ default: m.AgentNewPage }))\n);\nconst AgentDetailPage = lazy(() =>\n import('./pages/agents/AgentDetailPage').then((m) => ({ default: m.AgentDetailPage }))\n);\n\n// AI decision queue (BOFF-3663)\nconst DecisionsPage = lazy(() =>\n import('./pages/decisions/DecisionsPage').then((m) => ({ default: m.DecisionsPage }))\n);\nconst DecisionDetailPage = lazy(() =>\n import('./pages/decisions/DecisionDetailPage').then((m) => ({ default: m.DecisionDetailPage }))\n);\n\n// Cost optimization dashboard (BOFF-4001)\nconst SavingsPage = lazy(() =>\n import('./pages/SavingsPage').then((m) => ({ default: m.SavingsPage }))\n);\n\n// Insights + Asset Vault (aggregated real data)\nconst InsightsPage = lazy(() =>\n import('./pages/InsightsPage').then((m) => ({ default: m.InsightsPage }))\n);\nconst AssetVaultPage = lazy(() =>\n import('./pages/AssetVaultPage').then((m) => ({ default: m.AssetVaultPage }))\n);\n\n// Enterprise SaaS spend management (BOFF-4008)\nconst EnterpriseSpendPage = lazy(() =>\n import('./pages/enterprise/EnterpriseSpendPage').then((m) => ({\n default: m.EnterpriseSpendPage,\n }))\n);\n\n// Bill negotiation (BOFF-4154)\nconst NegotiationsPage = lazy(() =>\n import('./pages/negotiations/NegotiationsPage').then((m) => ({ default: m.NegotiationsPage }))\n);\nconst NegotiationNewPage = lazy(() =>\n import('./pages/negotiations/NegotiationNewPage').then((m) => ({\n default: m.NegotiationNewPage,\n }))\n);\nconst NegotiationDetailPage = lazy(() =>\n import('./pages/negotiations/NegotiationDetailPage').then((m) => ({\n default: m.NegotiationDetailPage,\n }))\n);\n\nconst PageLoader: FC = () => (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <Spinner size=\"lg\" />\n </div>\n);\n\nexport const SubscriberBotRoutes: FC = () => {\n const { basePath, isStandalone } = useSubscriberBot();\n const location = useLocation();\n\n // Normalize base path\n const normalizedBasePath = basePath === '/' ? '' : (basePath ?? '').replace(/\\/$/, '');\n\n // Guard: only render if the current path matches basePath (integrated mode).\n if (normalizedBasePath && !isStandalone) {\n const pathMatches =\n location.pathname === normalizedBasePath ||\n location.pathname.startsWith(normalizedBasePath + '/');\n if (!pathMatches) {\n return null;\n }\n }\n\n return (\n <div className=\"flex min-h-full flex-col\">\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Overview / dashboard */}\n <Route index element={<DashboardPage />} />\n\n {/* Relationships (the core domain) */}\n <Route path=\"relationships\" element={<RelationshipsListPage />} />\n <Route path=\"relationships/new\" element={<RelationshipNewPage />} />\n <Route path=\"relationships/:id\" element={<RelationshipDetailPage />} />\n\n {/* Providers (registry) */}\n <Route path=\"providers\" element={<ProvidersListPage />} />\n <Route path=\"providers/new\" element={<ProviderNewPage />} />\n <Route path=\"providers/:id\" element={<ProviderDetailPage />} />\n\n {/* Universal Inbox */}\n {/* One optional-segment route so selecting a message never remounts the page */}\n <Route path=\"inbox/:selectedId?\" element={<InboxPage />} />\n\n {/* Invoices */}\n <Route path=\"invoices\" element={<InvoicesPage />} />\n\n {/* Insights (spend analytics + renewal forecast) */}\n <Route path=\"insights\" element={<InsightsPage />} />\n\n {/* Enterprise SaaS spend management */}\n <Route path=\"enterprise/spend\" element={<EnterpriseSpendPage />} />\n\n {/* Digital Asset Vault */}\n <Route path=\"vault\" element={<AssetVaultPage />} />\n\n {/* AI Agents */}\n <Route path=\"agents\" element={<AgentsListPage />} />\n <Route path=\"agents/new\" element={<AgentNewPage />} />\n <Route path=\"agents/:id\" element={<AgentDetailPage />} />\n\n {/* AI decision queue */}\n <Route path=\"decisions\" element={<DecisionsPage />} />\n <Route path=\"savings\" element={<SavingsPage />} />\n <Route path=\"decisions/:id\" element={<DecisionDetailPage />} />\n\n {/* Bill negotiation */}\n <Route path=\"negotiations\" element={<NegotiationsPage />} />\n <Route path=\"negotiations/new\" element={<NegotiationNewPage />} />\n <Route path=\"negotiations/:id\" element={<NegotiationDetailPage />} />\n\n {/* Workflows */}\n <Route path=\"workflows/:selectedId?\" element={<WorkflowsPage />} />\n\n {/* Fallback */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminDashboardPage.d.ts","sourceRoot":"","sources":["../../../src/subscriberbot/admin/AdminDashboardPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAsB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AdminDashboardPage.d.ts","sourceRoot":"","sources":["../../../src/subscriberbot/admin/AdminDashboardPage.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAsB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAwCpD,eAAO,MAAM,kBAAkB,EAAE,EAgfhC,CAAC"}
|
|
@@ -1,39 +1,40 @@
|
|
|
1
1
|
import { PageLayout as e } from "../components/PageLayout.js";
|
|
2
2
|
import { formatDate as t } from "../utils/formatters.js";
|
|
3
3
|
import { StatusBadge as n } from "../components/StatusBadge.js";
|
|
4
|
-
import { useTr as
|
|
5
|
-
import { useAdapterSubmissions as
|
|
4
|
+
import { useTr as ee } from "../hooks/useTr.js";
|
|
5
|
+
import { useAdapterSubmissions as te, useApproveAdapter as ne, useMarketplaceReports as re, useModerateListing as r, useProviders as i, useRejectAdapter as ie, useUpdateProvider as ae } from "../hooks/useSubscriberBotApi.js";
|
|
6
|
+
import { NegotiationDeskPanel as oe } from "./NegotiationDeskPanel.js";
|
|
6
7
|
import "../hooks/index.js";
|
|
7
|
-
import { Fragment as
|
|
8
|
-
import { CheckCircle2 as
|
|
8
|
+
import { Fragment as a, useState as o } from "react";
|
|
9
|
+
import { CheckCircle2 as s, Handshake as se, Plug as c, Settings2 as l, Store as u, XCircle as d } from "lucide-react";
|
|
9
10
|
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
10
|
-
import { Button as m, Card as h, CardContent as g, CardDescription as _, CardHeader as v, CardTitle as y, EmptyState as b, Spinner as x, Table as S, TableBody as C, TableCell as w, TableHead as T, TableHeader as E, TableRow as D, Tabs as
|
|
11
|
+
import { Button as m, Card as h, CardContent as g, CardDescription as _, CardHeader as v, CardTitle as y, EmptyState as b, Spinner as x, Table as S, TableBody as C, TableCell as w, TableHead as T, TableHeader as E, TableRow as D, Tabs as ce, TabsContent as O, TabsList as le, TabsTrigger as k, Textarea as A } from "@burdenoff/fe-libs/ui";
|
|
11
12
|
//#region src/subscriberbot/admin/AdminDashboardPage.tsx
|
|
12
13
|
var j = () => {
|
|
13
|
-
let j =
|
|
14
|
-
|
|
14
|
+
let j = ee(), [ue, M] = o("providers"), { data: de, isLoading: N } = i({ pagination: { limit: 50 } }), P = ae(), F = (e) => {
|
|
15
|
+
P.mutate({
|
|
15
16
|
id: e,
|
|
16
17
|
input: { status: "VERIFIED" }
|
|
17
18
|
});
|
|
18
|
-
},
|
|
19
|
-
|
|
19
|
+
}, I = (e) => {
|
|
20
|
+
P.mutate({
|
|
20
21
|
id: e,
|
|
21
22
|
input: { status: "DEPRECATED" }
|
|
22
23
|
});
|
|
23
|
-
},
|
|
24
|
-
|
|
25
|
-
},
|
|
24
|
+
}, L = de?.items ?? [], { data: R, isLoading: z } = te({ pagination: { limit: 50 } }), B = ne(), V = ie(), [fe, H] = o(null), [U, W] = o(""), G = R?.items ?? [], pe = (e) => {
|
|
25
|
+
B.mutate({ id: e });
|
|
26
|
+
}, me = (e) => {
|
|
26
27
|
H(e), W("");
|
|
27
|
-
},
|
|
28
|
-
U.trim() &&
|
|
28
|
+
}, he = (e) => {
|
|
29
|
+
U.trim() && V.mutate({
|
|
29
30
|
id: e,
|
|
30
31
|
reason: U.trim()
|
|
31
32
|
}, { onSuccess: () => {
|
|
32
33
|
H(null), W("");
|
|
33
34
|
} });
|
|
34
|
-
}, { data:
|
|
35
|
+
}, { data: ge, isLoading: _e } = re({ pagination: { limit: 50 } }), K = r(), [ve, q] = o(null), [J, Y] = o(null), [X, Z] = o(""), Q = ge?.items ?? [], $ = (e, t) => {
|
|
35
36
|
q(e), Y(t), Z("");
|
|
36
|
-
},
|
|
37
|
+
}, ye = (e) => {
|
|
37
38
|
!J || !X.trim() || K.mutate({
|
|
38
39
|
id: e,
|
|
39
40
|
action: J,
|
|
@@ -45,38 +46,43 @@ var j = () => {
|
|
|
45
46
|
return /* @__PURE__ */ f(e, {
|
|
46
47
|
title: j("admin.title", "SubscriberBot Admin"),
|
|
47
48
|
description: j("admin.description", "Provider registry curation, adapter approvals, and marketplace moderation."),
|
|
48
|
-
children: /* @__PURE__ */ p(
|
|
49
|
-
value:
|
|
50
|
-
onValueChange:
|
|
49
|
+
children: /* @__PURE__ */ p(ce, {
|
|
50
|
+
value: ue,
|
|
51
|
+
onValueChange: M,
|
|
51
52
|
className: "w-full",
|
|
52
53
|
children: [
|
|
53
|
-
/* @__PURE__ */ p(
|
|
54
|
-
className: "mb-4 grid w-full grid-cols-
|
|
54
|
+
/* @__PURE__ */ p(le, {
|
|
55
|
+
className: "mb-4 grid w-full grid-cols-2 sm:w-auto sm:inline-flex",
|
|
55
56
|
children: [
|
|
56
57
|
/* @__PURE__ */ p(k, {
|
|
57
58
|
value: "providers",
|
|
58
59
|
className: "gap-2",
|
|
59
|
-
children: [/* @__PURE__ */ f(
|
|
60
|
+
children: [/* @__PURE__ */ f(l, { size: 16 }), j("admin.tabs.providers", "Provider Registry")]
|
|
60
61
|
}),
|
|
61
62
|
/* @__PURE__ */ p(k, {
|
|
62
63
|
value: "adapters",
|
|
63
64
|
className: "gap-2",
|
|
64
|
-
children: [/* @__PURE__ */ f(
|
|
65
|
+
children: [/* @__PURE__ */ f(c, { size: 16 }), j("admin.tabs.adapters", "Adapter Approvals")]
|
|
65
66
|
}),
|
|
66
67
|
/* @__PURE__ */ p(k, {
|
|
67
68
|
value: "marketplace",
|
|
68
69
|
className: "gap-2",
|
|
69
|
-
children: [/* @__PURE__ */ f(
|
|
70
|
+
children: [/* @__PURE__ */ f(u, { size: 16 }), j("admin.tabs.marketplace", "Marketplace Moderation")]
|
|
71
|
+
}),
|
|
72
|
+
/* @__PURE__ */ p(k, {
|
|
73
|
+
value: "negotiations",
|
|
74
|
+
className: "gap-2",
|
|
75
|
+
children: [/* @__PURE__ */ f(se, { size: 16 }), j("admin.tabs.negotiations", "Negotiation Desk")]
|
|
70
76
|
})
|
|
71
77
|
]
|
|
72
78
|
}),
|
|
73
79
|
/* @__PURE__ */ f(O, {
|
|
74
80
|
value: "providers",
|
|
75
|
-
children: /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(y, { children: j("admin.providers.title", "Provider registry") }), /* @__PURE__ */ f(_, { children: j("admin.providers.description", "Curate the global provider catalog. Verify submitted providers or deprecate stale entries.") })] }), /* @__PURE__ */ f(g, { children:
|
|
81
|
+
children: /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(y, { children: j("admin.providers.title", "Provider registry") }), /* @__PURE__ */ f(_, { children: j("admin.providers.description", "Curate the global provider catalog. Verify submitted providers or deprecate stale entries.") })] }), /* @__PURE__ */ f(g, { children: N ? /* @__PURE__ */ f("div", {
|
|
76
82
|
className: "flex min-h-[200px] items-center justify-center",
|
|
77
83
|
children: /* @__PURE__ */ f(x, { size: "lg" })
|
|
78
|
-
}) :
|
|
79
|
-
icon: /* @__PURE__ */ f(
|
|
84
|
+
}) : L.length === 0 ? /* @__PURE__ */ f(b, {
|
|
85
|
+
icon: /* @__PURE__ */ f(u, { className: "size-6 text-action-primary-bg" }),
|
|
80
86
|
title: j("admin.providers.emptyTitle", "No providers yet"),
|
|
81
87
|
description: j("admin.providers.emptyDescription", "Once providers are created or claimed they will appear here for curation.")
|
|
82
88
|
}) : /* @__PURE__ */ f("div", {
|
|
@@ -90,7 +96,7 @@ var j = () => {
|
|
|
90
96
|
className: "text-right",
|
|
91
97
|
children: j("admin.providers.table.actions", "Actions")
|
|
92
98
|
})
|
|
93
|
-
] }) }), /* @__PURE__ */ f(C, { children:
|
|
99
|
+
] }) }), /* @__PURE__ */ f(C, { children: L.map((e) => /* @__PURE__ */ p(D, { children: [
|
|
94
100
|
/* @__PURE__ */ f(w, {
|
|
95
101
|
className: "font-medium text-text-primary",
|
|
96
102
|
children: e.name
|
|
@@ -111,17 +117,17 @@ var j = () => {
|
|
|
111
117
|
children: [e.status !== "VERIFIED" && /* @__PURE__ */ p(m, {
|
|
112
118
|
size: "sm",
|
|
113
119
|
variant: "outline",
|
|
114
|
-
onClick: () =>
|
|
115
|
-
disabled:
|
|
116
|
-
children: [/* @__PURE__ */ f(
|
|
120
|
+
onClick: () => F(e.id),
|
|
121
|
+
disabled: P.isPending,
|
|
122
|
+
children: [/* @__PURE__ */ f(s, {
|
|
117
123
|
size: 14,
|
|
118
124
|
className: "mr-1"
|
|
119
125
|
}), j("admin.providers.verify", "Verify")]
|
|
120
126
|
}), e.status !== "DEPRECATED" && /* @__PURE__ */ f(m, {
|
|
121
127
|
size: "sm",
|
|
122
128
|
variant: "secondary",
|
|
123
|
-
onClick: () =>
|
|
124
|
-
disabled:
|
|
129
|
+
onClick: () => I(e.id),
|
|
130
|
+
disabled: P.isPending,
|
|
125
131
|
children: j("admin.providers.deprecate", "Deprecate")
|
|
126
132
|
})]
|
|
127
133
|
})
|
|
@@ -131,11 +137,11 @@ var j = () => {
|
|
|
131
137
|
}),
|
|
132
138
|
/* @__PURE__ */ f(O, {
|
|
133
139
|
value: "adapters",
|
|
134
|
-
children: /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(y, { children: j("admin.adapters.title", "Adapter approvals") }), /* @__PURE__ */ f(_, { children: j("admin.adapters.description", "Review submitted integration adapters before they are published to the SubscriberBot adapter marketplace.") })] }), /* @__PURE__ */ f(g, { children:
|
|
140
|
+
children: /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(y, { children: j("admin.adapters.title", "Adapter approvals") }), /* @__PURE__ */ f(_, { children: j("admin.adapters.description", "Review submitted integration adapters before they are published to the SubscriberBot adapter marketplace.") })] }), /* @__PURE__ */ f(g, { children: z ? /* @__PURE__ */ f("div", {
|
|
135
141
|
className: "flex min-h-[200px] items-center justify-center",
|
|
136
142
|
children: /* @__PURE__ */ f(x, { size: "lg" })
|
|
137
143
|
}) : G.length === 0 ? /* @__PURE__ */ f(b, {
|
|
138
|
-
icon: /* @__PURE__ */ f(
|
|
144
|
+
icon: /* @__PURE__ */ f(c, { className: "size-6 text-action-primary-bg" }),
|
|
139
145
|
title: j("admin.adapters.emptyTitle", "No adapter submissions"),
|
|
140
146
|
description: j("admin.adapters.emptyDescription", "Submitted integration adapters will appear here for review.")
|
|
141
147
|
}) : /* @__PURE__ */ f("div", {
|
|
@@ -149,7 +155,7 @@ var j = () => {
|
|
|
149
155
|
className: "text-right",
|
|
150
156
|
children: j("admin.adapters.table.actions", "Actions")
|
|
151
157
|
})
|
|
152
|
-
] }) }), /* @__PURE__ */ f(C, { children: G.map((e) => /* @__PURE__ */ p(
|
|
158
|
+
] }) }), /* @__PURE__ */ f(C, { children: G.map((e) => /* @__PURE__ */ p(a, { children: [/* @__PURE__ */ p(D, { children: [
|
|
153
159
|
/* @__PURE__ */ f(w, {
|
|
154
160
|
className: "font-medium text-text-primary",
|
|
155
161
|
children: e.adapterId
|
|
@@ -170,25 +176,25 @@ var j = () => {
|
|
|
170
176
|
children: [/* @__PURE__ */ p(m, {
|
|
171
177
|
size: "sm",
|
|
172
178
|
variant: "outline",
|
|
173
|
-
onClick: () =>
|
|
174
|
-
disabled:
|
|
175
|
-
children: [/* @__PURE__ */ f(
|
|
179
|
+
onClick: () => pe(e.id),
|
|
180
|
+
disabled: B.isPending || V.isPending,
|
|
181
|
+
children: [/* @__PURE__ */ f(s, {
|
|
176
182
|
size: 14,
|
|
177
183
|
className: "mr-1"
|
|
178
184
|
}), j("admin.adapters.approve", "Approve")]
|
|
179
185
|
}), /* @__PURE__ */ p(m, {
|
|
180
186
|
size: "sm",
|
|
181
187
|
variant: "secondary",
|
|
182
|
-
onClick: () =>
|
|
183
|
-
disabled:
|
|
184
|
-
children: [/* @__PURE__ */ f(
|
|
188
|
+
onClick: () => me(e.id),
|
|
189
|
+
disabled: B.isPending || V.isPending,
|
|
190
|
+
children: [/* @__PURE__ */ f(d, {
|
|
185
191
|
size: 14,
|
|
186
192
|
className: "mr-1"
|
|
187
193
|
}), j("admin.adapters.reject", "Reject")]
|
|
188
194
|
})]
|
|
189
195
|
})
|
|
190
196
|
})
|
|
191
|
-
] }),
|
|
197
|
+
] }), fe === e.id && /* @__PURE__ */ f(D, { children: /* @__PURE__ */ f(w, {
|
|
192
198
|
colSpan: 5,
|
|
193
199
|
className: "bg-bg-sunken",
|
|
194
200
|
children: /* @__PURE__ */ p("div", {
|
|
@@ -204,14 +210,14 @@ var j = () => {
|
|
|
204
210
|
children: [/* @__PURE__ */ f(m, {
|
|
205
211
|
size: "sm",
|
|
206
212
|
variant: "destructive",
|
|
207
|
-
onClick: () =>
|
|
208
|
-
disabled: !U.trim() ||
|
|
213
|
+
onClick: () => he(e.id),
|
|
214
|
+
disabled: !U.trim() || V.isPending,
|
|
209
215
|
children: j("admin.adapters.confirmReject", "Confirm reject")
|
|
210
216
|
}), /* @__PURE__ */ f(m, {
|
|
211
217
|
size: "sm",
|
|
212
218
|
variant: "outline",
|
|
213
219
|
onClick: () => H(null),
|
|
214
|
-
disabled:
|
|
220
|
+
disabled: V.isPending,
|
|
215
221
|
children: j("admin.adapters.cancel", "Cancel")
|
|
216
222
|
})]
|
|
217
223
|
})]
|
|
@@ -221,11 +227,11 @@ var j = () => {
|
|
|
221
227
|
}),
|
|
222
228
|
/* @__PURE__ */ f(O, {
|
|
223
229
|
value: "marketplace",
|
|
224
|
-
children: /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(y, { children: j("admin.marketplace.title", "Marketplace moderation") }), /* @__PURE__ */ f(_, { children: j("admin.marketplace.description", "Review reported marketplace listings and take moderation actions.") })] }), /* @__PURE__ */ f(g, { children:
|
|
230
|
+
children: /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(y, { children: j("admin.marketplace.title", "Marketplace moderation") }), /* @__PURE__ */ f(_, { children: j("admin.marketplace.description", "Review reported marketplace listings and take moderation actions.") })] }), /* @__PURE__ */ f(g, { children: _e ? /* @__PURE__ */ f("div", {
|
|
225
231
|
className: "flex min-h-[200px] items-center justify-center",
|
|
226
232
|
children: /* @__PURE__ */ f(x, { size: "lg" })
|
|
227
233
|
}) : Q.length === 0 ? /* @__PURE__ */ f(b, {
|
|
228
|
-
icon: /* @__PURE__ */ f(
|
|
234
|
+
icon: /* @__PURE__ */ f(u, { className: "size-6 text-action-primary-bg" }),
|
|
229
235
|
title: j("admin.marketplace.emptyTitle", "No reported listings"),
|
|
230
236
|
description: j("admin.marketplace.emptyDescription", "Reported marketplace listings will appear here for moderation.")
|
|
231
237
|
}) : /* @__PURE__ */ f("div", {
|
|
@@ -240,7 +246,7 @@ var j = () => {
|
|
|
240
246
|
className: "text-right",
|
|
241
247
|
children: j("admin.marketplace.table.actions", "Actions")
|
|
242
248
|
})
|
|
243
|
-
] }) }), /* @__PURE__ */ f(C, { children: Q.map((e) => /* @__PURE__ */ p(
|
|
249
|
+
] }) }), /* @__PURE__ */ f(C, { children: Q.map((e) => /* @__PURE__ */ p(a, { children: [/* @__PURE__ */ p(D, { children: [
|
|
244
250
|
/* @__PURE__ */ f(w, {
|
|
245
251
|
className: "font-medium text-text-primary",
|
|
246
252
|
children: e.listingId
|
|
@@ -277,7 +283,7 @@ var j = () => {
|
|
|
277
283
|
})]
|
|
278
284
|
})
|
|
279
285
|
})
|
|
280
|
-
] }),
|
|
286
|
+
] }), ve === e.id && /* @__PURE__ */ f(D, { children: /* @__PURE__ */ f(w, {
|
|
281
287
|
colSpan: 6,
|
|
282
288
|
className: "bg-bg-sunken",
|
|
283
289
|
children: /* @__PURE__ */ p("div", {
|
|
@@ -293,7 +299,7 @@ var j = () => {
|
|
|
293
299
|
children: [/* @__PURE__ */ f(m, {
|
|
294
300
|
size: "sm",
|
|
295
301
|
variant: J === "REMOVE_LISTING" ? "destructive" : "outline",
|
|
296
|
-
onClick: () =>
|
|
302
|
+
onClick: () => ye(e.id),
|
|
297
303
|
disabled: !X.trim() || K.isPending,
|
|
298
304
|
children: J === "REMOVE_LISTING" ? j("admin.marketplace.confirmRemoval", "Confirm removal") : j("admin.marketplace.confirmDismissal", "Confirm dismissal")
|
|
299
305
|
}), /* @__PURE__ */ f(m, {
|
|
@@ -307,6 +313,10 @@ var j = () => {
|
|
|
307
313
|
})
|
|
308
314
|
}) }, `${e.id}-moderate`)] }, e.id)) })] })
|
|
309
315
|
}) })] })
|
|
316
|
+
}),
|
|
317
|
+
/* @__PURE__ */ f(O, {
|
|
318
|
+
value: "negotiations",
|
|
319
|
+
children: /* @__PURE__ */ p(h, { children: [/* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(y, { children: j("admin.desk.title", "Negotiation desk") }), /* @__PURE__ */ f(_, { children: j("admin.desk.description", "Managed bill negotiations customers authorised, across all workspaces. Recording a successful outcome bills the success fee in global billing.") })] }), /* @__PURE__ */ f(g, { children: /* @__PURE__ */ f(oe, {}) })] })
|
|
310
320
|
})
|
|
311
321
|
]
|
|
312
322
|
})
|