@replicated/portal-components 0.0.2 → 0.0.4
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/components/metadata/registry.json +83 -2
- package/components/metadata/registry.md +27 -2
- package/dist/actions/index.d.mts +566 -3
- package/dist/actions/index.d.ts +566 -3
- package/dist/actions/index.js +1853 -12
- package/dist/actions/index.js.map +1 -1
- package/dist/airgap-instances.d.mts +26 -0
- package/dist/airgap-instances.d.ts +26 -0
- package/dist/airgap-instances.js +354 -0
- package/dist/airgap-instances.js.map +1 -0
- package/dist/error-page.d.mts +14 -0
- package/dist/error-page.d.ts +14 -0
- package/dist/error-page.js +153 -0
- package/dist/error-page.js.map +1 -0
- package/dist/error.d.mts +15 -0
- package/dist/error.d.ts +15 -0
- package/dist/error.js +144 -0
- package/dist/error.js.map +1 -0
- package/dist/esm/actions/index.js +1816 -13
- package/dist/esm/actions/index.js.map +1 -1
- package/dist/esm/airgap-instances.js +352 -0
- package/dist/esm/airgap-instances.js.map +1 -0
- package/dist/esm/error-page.js +151 -0
- package/dist/esm/error-page.js.map +1 -0
- package/dist/esm/error.js +142 -0
- package/dist/esm/error.js.map +1 -0
- package/dist/esm/helm-install-wizard.js +1007 -0
- package/dist/esm/helm-install-wizard.js.map +1 -0
- package/dist/esm/index.js +2232 -155
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/install-actions.js +746 -0
- package/dist/esm/install-actions.js.map +1 -0
- package/dist/esm/install-card.js +115 -0
- package/dist/esm/install-card.js.map +1 -0
- package/dist/esm/install-targets.js +48 -0
- package/dist/esm/install-targets.js.map +1 -0
- package/dist/esm/instance-card.js +197 -0
- package/dist/esm/instance-card.js.map +1 -0
- package/dist/esm/join-team.js +218 -0
- package/dist/esm/join-team.js.map +1 -0
- package/dist/esm/license-card.js +131 -0
- package/dist/esm/license-card.js.map +1 -0
- package/dist/esm/license-details.js +667 -0
- package/dist/esm/license-details.js.map +1 -0
- package/dist/esm/linux-install-wizard.js +1083 -0
- package/dist/esm/linux-install-wizard.js.map +1 -0
- package/dist/esm/login.js +261 -0
- package/dist/esm/login.js.map +1 -0
- package/dist/esm/online-instance-list.js +287 -0
- package/dist/esm/online-instance-list.js.map +1 -0
- package/dist/esm/pending-installations.js +235 -0
- package/dist/esm/pending-installations.js.map +1 -0
- package/dist/esm/release-history-panel.js +100 -0
- package/dist/esm/release-history-panel.js.map +1 -0
- package/dist/esm/release-notes-card.js +23 -0
- package/dist/esm/release-notes-card.js.map +1 -0
- package/dist/esm/security-card.js +700 -0
- package/dist/esm/security-card.js.map +1 -0
- package/dist/esm/support-bundle-collection-card.js +170 -0
- package/dist/esm/support-bundle-collection-card.js.map +1 -0
- package/dist/esm/support-bundles-card.js +306 -0
- package/dist/esm/support-bundles-card.js.map +1 -0
- package/dist/esm/support-card.js +305 -0
- package/dist/esm/support-card.js.map +1 -0
- package/dist/esm/team-selection.js +117 -0
- package/dist/esm/team-selection.js.map +1 -0
- package/dist/esm/team-settings-card.js +78 -0
- package/dist/esm/team-settings-card.js.map +1 -0
- package/dist/esm/team-settings.js +136 -0
- package/dist/esm/team-settings.js.map +1 -0
- package/dist/esm/top-nav-user-menu.js +173 -0
- package/dist/esm/top-nav-user-menu.js.map +1 -0
- package/dist/esm/top-nav.js +398 -0
- package/dist/esm/top-nav.js.map +1 -0
- package/dist/esm/update-layout.js +405 -0
- package/dist/esm/update-layout.js.map +1 -0
- package/dist/esm/updates-card.js +85 -0
- package/dist/esm/updates-card.js.map +1 -0
- package/dist/esm/upload-support-bundle-modal.js +143 -0
- package/dist/esm/upload-support-bundle-modal.js.map +1 -0
- package/dist/esm/user-settings-card.js +21 -0
- package/dist/esm/user-settings-card.js.map +1 -0
- package/dist/esm/user-settings.js +368 -0
- package/dist/esm/user-settings.js.map +1 -0
- package/dist/esm/utils/index.js +170 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/helm-install-wizard.d.mts +38 -0
- package/dist/helm-install-wizard.d.ts +38 -0
- package/dist/helm-install-wizard.js +1011 -0
- package/dist/helm-install-wizard.js.map +1 -0
- package/dist/index.d.mts +11 -27
- package/dist/index.d.ts +11 -27
- package/dist/index.js +2258 -154
- package/dist/index.js.map +1 -1
- package/dist/install-B19AaKF_.d.mts +233 -0
- package/dist/install-Bi1qJ8Bu.d.ts +233 -0
- package/dist/install-actions.d.mts +141 -0
- package/dist/install-actions.d.ts +141 -0
- package/dist/install-actions.js +765 -0
- package/dist/install-actions.js.map +1 -0
- package/dist/install-card.d.mts +15 -0
- package/dist/install-card.d.ts +15 -0
- package/dist/install-card.js +117 -0
- package/dist/install-card.js.map +1 -0
- package/dist/install-targets.d.mts +19 -0
- package/dist/install-targets.d.ts +19 -0
- package/dist/install-targets.js +50 -0
- package/dist/install-targets.js.map +1 -0
- package/dist/instance-card.d.mts +22 -0
- package/dist/instance-card.d.ts +22 -0
- package/dist/instance-card.js +199 -0
- package/dist/instance-card.js.map +1 -0
- package/dist/join-team.d.mts +30 -0
- package/dist/join-team.d.ts +30 -0
- package/dist/join-team.js +220 -0
- package/dist/join-team.js.map +1 -0
- package/dist/license-card.d.mts +15 -0
- package/dist/license-card.d.ts +15 -0
- package/dist/license-card.js +133 -0
- package/dist/license-card.js.map +1 -0
- package/dist/license-details.d.mts +10 -0
- package/dist/license-details.d.ts +10 -0
- package/dist/license-details.js +669 -0
- package/dist/license-details.js.map +1 -0
- package/dist/linux-install-wizard.d.mts +66 -0
- package/dist/linux-install-wizard.d.ts +66 -0
- package/dist/linux-install-wizard.js +1093 -0
- package/dist/linux-install-wizard.js.map +1 -0
- package/dist/login.d.mts +37 -0
- package/dist/login.d.ts +37 -0
- package/dist/login.js +263 -0
- package/dist/login.js.map +1 -0
- package/dist/online-instance-list.d.mts +22 -0
- package/dist/online-instance-list.d.ts +22 -0
- package/dist/online-instance-list.js +289 -0
- package/dist/online-instance-list.js.map +1 -0
- package/dist/pending-installations.d.mts +15 -0
- package/dist/pending-installations.d.ts +15 -0
- package/dist/pending-installations.js +237 -0
- package/dist/pending-installations.js.map +1 -0
- package/dist/release-history-panel.d.mts +22 -0
- package/dist/release-history-panel.d.ts +22 -0
- package/dist/release-history-panel.js +102 -0
- package/dist/release-history-panel.js.map +1 -0
- package/dist/release-notes-card.d.mts +13 -0
- package/dist/release-notes-card.d.ts +13 -0
- package/dist/release-notes-card.js +25 -0
- package/dist/release-notes-card.js.map +1 -0
- package/dist/security-card.d.mts +73 -0
- package/dist/security-card.d.ts +73 -0
- package/dist/security-card.js +702 -0
- package/dist/security-card.js.map +1 -0
- package/dist/styles.css +1877 -194
- package/dist/support-bundle-collection-card.d.mts +20 -0
- package/dist/support-bundle-collection-card.d.ts +20 -0
- package/dist/support-bundle-collection-card.js +172 -0
- package/dist/support-bundle-collection-card.js.map +1 -0
- package/dist/support-bundles-card.d.mts +19 -0
- package/dist/support-bundles-card.d.ts +19 -0
- package/dist/support-bundles-card.js +308 -0
- package/dist/support-bundles-card.js.map +1 -0
- package/dist/support-card.d.mts +8 -0
- package/dist/support-card.d.ts +8 -0
- package/dist/support-card.js +307 -0
- package/dist/support-card.js.map +1 -0
- package/dist/team-selection.d.mts +23 -0
- package/dist/team-selection.d.ts +23 -0
- package/dist/team-selection.js +119 -0
- package/dist/team-selection.js.map +1 -0
- package/dist/team-settings-card-Dq1d9b5c.d.mts +14 -0
- package/dist/team-settings-card-Dq1d9b5c.d.ts +14 -0
- package/dist/team-settings-card.d.mts +2 -0
- package/dist/team-settings-card.d.ts +2 -0
- package/dist/team-settings-card.js +80 -0
- package/dist/team-settings-card.js.map +1 -0
- package/dist/team-settings.d.mts +25 -0
- package/dist/team-settings.d.ts +25 -0
- package/dist/team-settings.js +138 -0
- package/dist/team-settings.js.map +1 -0
- package/dist/top-nav-0mb1K_H0.d.mts +32 -0
- package/dist/top-nav-0mb1K_H0.d.ts +32 -0
- package/dist/top-nav-user-menu.d.mts +18 -0
- package/dist/top-nav-user-menu.d.ts +18 -0
- package/dist/top-nav-user-menu.js +175 -0
- package/dist/top-nav-user-menu.js.map +1 -0
- package/dist/top-nav.d.mts +3 -0
- package/dist/top-nav.d.ts +3 -0
- package/dist/top-nav.js +400 -0
- package/dist/top-nav.js.map +1 -0
- package/dist/update-layout.d.mts +12 -0
- package/dist/update-layout.d.ts +12 -0
- package/dist/update-layout.js +407 -0
- package/dist/update-layout.js.map +1 -0
- package/dist/updates-card-BbubBrVR.d.mts +18 -0
- package/dist/updates-card-BbubBrVR.d.ts +18 -0
- package/dist/updates-card.d.mts +2 -0
- package/dist/updates-card.d.ts +2 -0
- package/dist/updates-card.js +87 -0
- package/dist/updates-card.js.map +1 -0
- package/dist/upload-support-bundle-modal.d.mts +19 -0
- package/dist/upload-support-bundle-modal.d.ts +19 -0
- package/dist/upload-support-bundle-modal.js +145 -0
- package/dist/upload-support-bundle-modal.js.map +1 -0
- package/dist/user-settings-card.d.mts +8 -0
- package/dist/user-settings-card.d.ts +8 -0
- package/dist/user-settings-card.js +23 -0
- package/dist/user-settings-card.js.map +1 -0
- package/dist/user-settings.d.mts +47 -0
- package/dist/user-settings.d.ts +47 -0
- package/dist/user-settings.js +370 -0
- package/dist/user-settings.js.map +1 -0
- package/dist/utils/index.d.mts +70 -0
- package/dist/utils/index.d.ts +70 -0
- package/dist/utils/index.js +177 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +163 -3
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface TeamUser {
|
|
4
|
+
email: string;
|
|
5
|
+
isCurrentUser: boolean;
|
|
6
|
+
firstAccessed: string;
|
|
7
|
+
lastAccessed: string;
|
|
8
|
+
views: number;
|
|
9
|
+
}
|
|
10
|
+
interface ServiceAccount {
|
|
11
|
+
name: string;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
lastUsed: string | null;
|
|
14
|
+
status: "active" | "revoked";
|
|
15
|
+
}
|
|
16
|
+
interface TeamSettingsProps {
|
|
17
|
+
users?: TeamUser[];
|
|
18
|
+
serviceAccounts?: ServiceAccount[];
|
|
19
|
+
}
|
|
20
|
+
declare const TeamSettings: {
|
|
21
|
+
({ users, serviceAccounts }: TeamSettingsProps): react_jsx_runtime.JSX.Element;
|
|
22
|
+
displayName: string;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { TeamSettings, type TeamSettingsProps };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface TeamUser {
|
|
4
|
+
email: string;
|
|
5
|
+
isCurrentUser: boolean;
|
|
6
|
+
firstAccessed: string;
|
|
7
|
+
lastAccessed: string;
|
|
8
|
+
views: number;
|
|
9
|
+
}
|
|
10
|
+
interface ServiceAccount {
|
|
11
|
+
name: string;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
lastUsed: string | null;
|
|
14
|
+
status: "active" | "revoked";
|
|
15
|
+
}
|
|
16
|
+
interface TeamSettingsProps {
|
|
17
|
+
users?: TeamUser[];
|
|
18
|
+
serviceAccounts?: ServiceAccount[];
|
|
19
|
+
}
|
|
20
|
+
declare const TeamSettings: {
|
|
21
|
+
({ users, serviceAccounts }: TeamSettingsProps): react_jsx_runtime.JSX.Element;
|
|
22
|
+
displayName: string;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export { TeamSettings, type TeamSettingsProps };
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var navigation = require('next/navigation');
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Enterprise Portal Components
|
|
10
|
+
* This file is generated by tsup. Do not edit manually.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
var mockUsers = [
|
|
14
|
+
{
|
|
15
|
+
email: "marc.e.campbell@gmail.com",
|
|
16
|
+
isCurrentUser: true,
|
|
17
|
+
firstAccessed: "Dec 2, 2025 8:44 PM",
|
|
18
|
+
lastAccessed: "Nov 17, 2025 10:23 PM",
|
|
19
|
+
views: 1266
|
|
20
|
+
}
|
|
21
|
+
];
|
|
22
|
+
var mockServiceAccounts = [
|
|
23
|
+
{
|
|
24
|
+
name: "CI/CD Pipeline",
|
|
25
|
+
createdAt: "Nov 15, 2025 3:20 PM",
|
|
26
|
+
lastUsed: "Dec 2, 2025 5:30 AM",
|
|
27
|
+
status: "active"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "Monitoring Service",
|
|
31
|
+
createdAt: "Oct 10, 2025 9:15 AM",
|
|
32
|
+
lastUsed: null,
|
|
33
|
+
status: "revoked"
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
var TeamSettings = ({
|
|
37
|
+
users = mockUsers,
|
|
38
|
+
serviceAccounts = mockServiceAccounts
|
|
39
|
+
}) => {
|
|
40
|
+
const router = navigation.useRouter();
|
|
41
|
+
const pathname = navigation.usePathname();
|
|
42
|
+
const isUsersTab = !pathname.includes("/service-accounts");
|
|
43
|
+
const [activeTab, setActiveTab] = react.useState(
|
|
44
|
+
isUsersTab ? "users" : "service-accounts"
|
|
45
|
+
);
|
|
46
|
+
const handleTabChange = (tab) => {
|
|
47
|
+
setActiveTab(tab);
|
|
48
|
+
const basePath = pathname.split("/team-settings")[0];
|
|
49
|
+
const newPath = tab === "users" ? `${basePath}/team-settings/users` : `${basePath}/team-settings/service-accounts`;
|
|
50
|
+
router.push(newPath);
|
|
51
|
+
};
|
|
52
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-8", children: [
|
|
53
|
+
/* @__PURE__ */ jsxRuntime.jsx("header", { children: /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-4xl font-semibold text-gray-900", children: "Team Settings" }) }),
|
|
54
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-b border-gray-200", children: /* @__PURE__ */ jsxRuntime.jsxs("nav", { className: "flex gap-8", children: [
|
|
55
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
56
|
+
"button",
|
|
57
|
+
{
|
|
58
|
+
type: "button",
|
|
59
|
+
onClick: () => handleTabChange("users"),
|
|
60
|
+
className: `pb-4 text-base font-medium transition ${activeTab === "users" ? "border-b-2 border-gray-900 text-gray-900" : "text-gray-500 hover:text-gray-700"}`,
|
|
61
|
+
children: "Users"
|
|
62
|
+
}
|
|
63
|
+
),
|
|
64
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
65
|
+
"button",
|
|
66
|
+
{
|
|
67
|
+
type: "button",
|
|
68
|
+
onClick: () => handleTabChange("service-accounts"),
|
|
69
|
+
className: `pb-4 text-base font-medium transition ${activeTab === "service-accounts" ? "border-b-2 border-gray-900 text-gray-900" : "text-gray-500 hover:text-gray-700"}`,
|
|
70
|
+
children: "Service Accounts"
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
] }) }),
|
|
74
|
+
activeTab === "users" ? /* @__PURE__ */ jsxRuntime.jsx(TeamUsers, { users }) : /* @__PURE__ */ jsxRuntime.jsx(TeamServiceAccounts, { serviceAccounts })
|
|
75
|
+
] });
|
|
76
|
+
};
|
|
77
|
+
TeamSettings.displayName = "TeamSettings";
|
|
78
|
+
var TeamUsers = ({ users }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
80
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base text-gray-600", children: "Manage users with access to your Enterprise Portal" }),
|
|
81
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
82
|
+
"button",
|
|
83
|
+
{
|
|
84
|
+
type: "button",
|
|
85
|
+
className: "rounded-lg bg-indigo-600 px-6 py-2.5 text-sm font-medium text-white transition hover:bg-indigo-700",
|
|
86
|
+
children: "Invite user"
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
] }),
|
|
90
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-lg border border-gray-200 bg-white", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full", children: [
|
|
91
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { className: "bg-gray-50", children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
92
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Email" }),
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "First Accessed" }),
|
|
94
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Last Accessed" }),
|
|
95
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Views" })
|
|
96
|
+
] }) }),
|
|
97
|
+
/* @__PURE__ */ jsxRuntime.jsx("tbody", { className: "divide-y divide-gray-200", children: users.map((user) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "hover:bg-gray-50", children: [
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsxs("td", { className: "px-6 py-4 text-sm text-gray-900", children: [
|
|
99
|
+
user.email,
|
|
100
|
+
user.isCurrentUser && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2 text-gray-500", children: "(You)" })
|
|
101
|
+
] }),
|
|
102
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-6 py-4 text-sm text-gray-600", children: user.firstAccessed }),
|
|
103
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-6 py-4 text-sm text-gray-600", children: user.lastAccessed }),
|
|
104
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-6 py-4 text-sm text-gray-600", children: user.views })
|
|
105
|
+
] }, user.email)) })
|
|
106
|
+
] }) })
|
|
107
|
+
] });
|
|
108
|
+
var TeamServiceAccounts = ({ serviceAccounts }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
109
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base text-gray-600", children: "Manage service accounts for automated access to your Enterprise Portal" }),
|
|
111
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
112
|
+
"button",
|
|
113
|
+
{
|
|
114
|
+
type: "button",
|
|
115
|
+
className: "rounded-lg bg-indigo-600 px-6 py-2.5 text-sm font-medium text-white transition hover:bg-indigo-700",
|
|
116
|
+
children: "Create service account"
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
] }),
|
|
120
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-lg border border-gray-200 bg-white", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full", children: [
|
|
121
|
+
/* @__PURE__ */ jsxRuntime.jsx("thead", { className: "bg-gray-50", children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
122
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Name" }),
|
|
123
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Created" }),
|
|
124
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Last Used" }),
|
|
125
|
+
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500", children: "Status" })
|
|
126
|
+
] }) }),
|
|
127
|
+
/* @__PURE__ */ jsxRuntime.jsx("tbody", { className: "divide-y divide-gray-200", children: serviceAccounts.map((account) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "hover:bg-gray-50", children: [
|
|
128
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-6 py-4 text-sm font-medium text-gray-900", children: account.name }),
|
|
129
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-6 py-4 text-sm text-gray-600", children: account.createdAt }),
|
|
130
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-6 py-4 text-sm text-gray-600", children: account.lastUsed || "Never" }),
|
|
131
|
+
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-6 py-4 text-sm", children: account.status === "active" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-800", children: "Active" }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex rounded-full bg-gray-100 px-2 py-1 text-xs font-medium text-gray-800", children: "Revoked" }) })
|
|
132
|
+
] }, account.name)) })
|
|
133
|
+
] }) })
|
|
134
|
+
] });
|
|
135
|
+
|
|
136
|
+
exports.TeamSettings = TeamSettings;
|
|
137
|
+
//# sourceMappingURL=team-settings.js.map
|
|
138
|
+
//# sourceMappingURL=team-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/team-settings.tsx"],"names":["useRouter","usePathname","useState","jsxs","jsx"],"mappings":"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","file":"team-settings.js","sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport { useRouter, usePathname } from \"next/navigation\";\n\ninterface TeamUser {\n email: string;\n isCurrentUser: boolean;\n firstAccessed: string;\n lastAccessed: string;\n views: number;\n}\n\ninterface ServiceAccount {\n name: string;\n createdAt: string;\n lastUsed: string | null;\n status: \"active\" | \"revoked\";\n}\n\nexport interface TeamSettingsProps {\n users?: TeamUser[];\n serviceAccounts?: ServiceAccount[];\n}\n\nconst mockUsers: TeamUser[] = [\n {\n email: \"marc.e.campbell@gmail.com\",\n isCurrentUser: true,\n firstAccessed: \"Dec 2, 2025 8:44 PM\",\n lastAccessed: \"Nov 17, 2025 10:23 PM\",\n views: 1266\n }\n];\n\nconst mockServiceAccounts: ServiceAccount[] = [\n {\n name: \"CI/CD Pipeline\",\n createdAt: \"Nov 15, 2025 3:20 PM\",\n lastUsed: \"Dec 2, 2025 5:30 AM\",\n status: \"active\"\n },\n {\n name: \"Monitoring Service\",\n createdAt: \"Oct 10, 2025 9:15 AM\",\n lastUsed: null,\n status: \"revoked\"\n }\n];\n\nexport const TeamSettings = ({ \n users = mockUsers, \n serviceAccounts = mockServiceAccounts \n}: TeamSettingsProps) => {\n const router = useRouter();\n const pathname = usePathname();\n \n // Determine active tab from URL\n const isUsersTab = !pathname.includes(\"/service-accounts\");\n const [activeTab, setActiveTab] = useState<\"users\" | \"service-accounts\">(\n isUsersTab ? \"users\" : \"service-accounts\"\n );\n\n const handleTabChange = (tab: \"users\" | \"service-accounts\") => {\n setActiveTab(tab);\n const basePath = pathname.split(\"/team-settings\")[0];\n const newPath = tab === \"users\" \n ? `${basePath}/team-settings/users`\n : `${basePath}/team-settings/service-accounts`;\n router.push(newPath);\n };\n\n return (\n <div className=\"space-y-8\">\n <header>\n <h1 className=\"text-4xl font-semibold text-gray-900\">Team Settings</h1>\n </header>\n\n {/* Tabs */}\n <div className=\"border-b border-gray-200\">\n <nav className=\"flex gap-8\">\n <button\n type=\"button\"\n onClick={() => handleTabChange(\"users\")}\n className={`pb-4 text-base font-medium transition ${\n activeTab === \"users\"\n ? \"border-b-2 border-gray-900 text-gray-900\"\n : \"text-gray-500 hover:text-gray-700\"\n }`}\n >\n Users\n </button>\n <button\n type=\"button\"\n onClick={() => handleTabChange(\"service-accounts\")}\n className={`pb-4 text-base font-medium transition ${\n activeTab === \"service-accounts\"\n ? \"border-b-2 border-gray-900 text-gray-900\"\n : \"text-gray-500 hover:text-gray-700\"\n }`}\n >\n Service Accounts\n </button>\n </nav>\n </div>\n\n {/* Content */}\n {activeTab === \"users\" ? (\n <TeamUsers users={users} />\n ) : (\n <TeamServiceAccounts serviceAccounts={serviceAccounts} />\n )}\n </div>\n );\n};\n\nTeamSettings.displayName = \"TeamSettings\";\n\nconst TeamUsers = ({ users }: { users: TeamUser[] }) => (\n <div className=\"space-y-6\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-base text-gray-600\">\n Manage users with access to your Enterprise Portal\n </p>\n <button\n type=\"button\"\n className=\"rounded-lg bg-indigo-600 px-6 py-2.5 text-sm font-medium text-white transition hover:bg-indigo-700\"\n >\n Invite user\n </button>\n </div>\n\n <div className=\"overflow-hidden rounded-lg border border-gray-200 bg-white\">\n <table className=\"w-full\">\n <thead className=\"bg-gray-50\">\n <tr>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Email\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n First Accessed\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Last Accessed\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Views\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200\">\n {users.map((user) => (\n <tr key={user.email} className=\"hover:bg-gray-50\">\n <td className=\"px-6 py-4 text-sm text-gray-900\">\n {user.email}\n {user.isCurrentUser && (\n <span className=\"ml-2 text-gray-500\">(You)</span>\n )}\n </td>\n <td className=\"px-6 py-4 text-sm text-gray-600\">\n {user.firstAccessed}\n </td>\n <td className=\"px-6 py-4 text-sm text-gray-600\">\n {user.lastAccessed}\n </td>\n <td className=\"px-6 py-4 text-sm text-gray-600\">\n {user.views}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n);\n\nconst TeamServiceAccounts = ({ serviceAccounts }: { serviceAccounts: ServiceAccount[] }) => (\n <div className=\"space-y-6\">\n <div className=\"flex items-center justify-between\">\n <p className=\"text-base text-gray-600\">\n Manage service accounts for automated access to your Enterprise Portal\n </p>\n <button\n type=\"button\"\n className=\"rounded-lg bg-indigo-600 px-6 py-2.5 text-sm font-medium text-white transition hover:bg-indigo-700\"\n >\n Create service account\n </button>\n </div>\n\n <div className=\"overflow-hidden rounded-lg border border-gray-200 bg-white\">\n <table className=\"w-full\">\n <thead className=\"bg-gray-50\">\n <tr>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Name\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Created\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Last Used\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Status\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200\">\n {serviceAccounts.map((account) => (\n <tr key={account.name} className=\"hover:bg-gray-50\">\n <td className=\"px-6 py-4 text-sm font-medium text-gray-900\">\n {account.name}\n </td>\n <td className=\"px-6 py-4 text-sm text-gray-600\">\n {account.createdAt}\n </td>\n <td className=\"px-6 py-4 text-sm text-gray-600\">\n {account.lastUsed || \"Never\"}\n </td>\n <td className=\"px-6 py-4 text-sm\">\n {account.status === \"active\" ? (\n <span className=\"inline-flex rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-800\">\n Active\n </span>\n ) : (\n <span className=\"inline-flex rounded-full bg-gray-100 px-2 py-1 text-xs font-medium text-gray-800\">\n Revoked\n </span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n);\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface Customer {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
}
|
|
8
|
+
interface TopNavLink {
|
|
9
|
+
label: string;
|
|
10
|
+
href?: string;
|
|
11
|
+
icon: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
interface TopNavProps {
|
|
14
|
+
links?: TopNavLink[];
|
|
15
|
+
hiddenLabels?: string[];
|
|
16
|
+
additionalLinks?: TopNavLink[];
|
|
17
|
+
order?: string[];
|
|
18
|
+
userMenuLabel?: string;
|
|
19
|
+
activeLabel?: string;
|
|
20
|
+
customerName?: string;
|
|
21
|
+
customers?: Customer[];
|
|
22
|
+
currentCustomerId?: string;
|
|
23
|
+
onChangeTeam?: (customerId: string) => Promise<void>;
|
|
24
|
+
userMenuChildren?: ReactNode;
|
|
25
|
+
}
|
|
26
|
+
declare const defaultTopNavLinks: TopNavLink[];
|
|
27
|
+
/**
|
|
28
|
+
* TopNav renders the hero navigation bar shown on authenticated dashboards.
|
|
29
|
+
*/
|
|
30
|
+
declare const TopNav: ({ links, hiddenLabels, additionalLinks, order, userMenuLabel, activeLabel, customerName, customers, currentCustomerId, onChangeTeam, userMenuChildren }: TopNavProps) => Promise<react_jsx_runtime.JSX.Element>;
|
|
31
|
+
|
|
32
|
+
export { type Customer as C, type TopNavLink as T, type TopNavProps as a, TopNav as b, defaultTopNavLinks as d };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface Customer {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
}
|
|
8
|
+
interface TopNavLink {
|
|
9
|
+
label: string;
|
|
10
|
+
href?: string;
|
|
11
|
+
icon: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
interface TopNavProps {
|
|
14
|
+
links?: TopNavLink[];
|
|
15
|
+
hiddenLabels?: string[];
|
|
16
|
+
additionalLinks?: TopNavLink[];
|
|
17
|
+
order?: string[];
|
|
18
|
+
userMenuLabel?: string;
|
|
19
|
+
activeLabel?: string;
|
|
20
|
+
customerName?: string;
|
|
21
|
+
customers?: Customer[];
|
|
22
|
+
currentCustomerId?: string;
|
|
23
|
+
onChangeTeam?: (customerId: string) => Promise<void>;
|
|
24
|
+
userMenuChildren?: ReactNode;
|
|
25
|
+
}
|
|
26
|
+
declare const defaultTopNavLinks: TopNavLink[];
|
|
27
|
+
/**
|
|
28
|
+
* TopNav renders the hero navigation bar shown on authenticated dashboards.
|
|
29
|
+
*/
|
|
30
|
+
declare const TopNav: ({ links, hiddenLabels, additionalLinks, order, userMenuLabel, activeLabel, customerName, customers, currentCustomerId, onChangeTeam, userMenuChildren }: TopNavProps) => Promise<react_jsx_runtime.JSX.Element>;
|
|
31
|
+
|
|
32
|
+
export { type Customer as C, type TopNavLink as T, type TopNavProps as a, TopNav as b, defaultTopNavLinks as d };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface Customer {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
}
|
|
7
|
+
interface TopNavChangeTeamButtonProps {
|
|
8
|
+
displayLabel: string;
|
|
9
|
+
customers?: Customer[];
|
|
10
|
+
currentCustomerId?: string;
|
|
11
|
+
onChangeTeam?: (customerId: string) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
declare const TopNavChangeTeamButton: {
|
|
14
|
+
({ displayLabel, customers, currentCustomerId, onChangeTeam }: TopNavChangeTeamButtonProps): react_jsx_runtime.JSX.Element;
|
|
15
|
+
displayName: string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { type Customer, TopNavChangeTeamButton, type TopNavChangeTeamButtonProps };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
interface Customer {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
}
|
|
7
|
+
interface TopNavChangeTeamButtonProps {
|
|
8
|
+
displayLabel: string;
|
|
9
|
+
customers?: Customer[];
|
|
10
|
+
currentCustomerId?: string;
|
|
11
|
+
onChangeTeam?: (customerId: string) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
declare const TopNavChangeTeamButton: {
|
|
14
|
+
({ displayLabel, customers, currentCustomerId, onChangeTeam }: TopNavChangeTeamButtonProps): react_jsx_runtime.JSX.Element;
|
|
15
|
+
displayName: string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { type Customer, TopNavChangeTeamButton, type TopNavChangeTeamButtonProps };
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var react = require('react');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Enterprise Portal Components
|
|
9
|
+
* This file is generated by tsup. Do not edit manually.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var TopNavChangeTeamButton = ({
|
|
13
|
+
displayLabel,
|
|
14
|
+
customers = [],
|
|
15
|
+
currentCustomerId,
|
|
16
|
+
onChangeTeam
|
|
17
|
+
}) => {
|
|
18
|
+
const [showChangeTeamModal, setShowChangeTeamModal] = react.useState(false);
|
|
19
|
+
const [selectedTeamId, setSelectedTeamId] = react.useState(currentCustomerId || "");
|
|
20
|
+
const [searchQuery, setSearchQuery] = react.useState("");
|
|
21
|
+
const [isChanging, setIsChanging] = react.useState(false);
|
|
22
|
+
const filteredCustomers = customers.filter(
|
|
23
|
+
(customer) => customer.name.toLowerCase().includes(searchQuery.toLowerCase())
|
|
24
|
+
);
|
|
25
|
+
const handleChangeTeam = async () => {
|
|
26
|
+
if (!selectedTeamId || !onChangeTeam) return;
|
|
27
|
+
setIsChanging(true);
|
|
28
|
+
try {
|
|
29
|
+
await onChangeTeam(selectedTeamId);
|
|
30
|
+
setShowChangeTeamModal(false);
|
|
31
|
+
window.location.href = "/";
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.error("[top-nav-user-menu] Failed to change team:", error);
|
|
34
|
+
setIsChanging(false);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
38
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
39
|
+
"button",
|
|
40
|
+
{
|
|
41
|
+
type: "button",
|
|
42
|
+
onClick: () => setShowChangeTeamModal(true),
|
|
43
|
+
className: "block w-full px-4 py-2 text-left hover:bg-gray-100",
|
|
44
|
+
children: "Change team"
|
|
45
|
+
}
|
|
46
|
+
),
|
|
47
|
+
showChangeTeamModal && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full max-w-2xl rounded-3xl bg-white p-8 shadow-xl", children: [
|
|
48
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-6 flex items-center justify-between", children: [
|
|
49
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-3xl font-semibold text-gray-900", children: "Change team" }),
|
|
50
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
51
|
+
"button",
|
|
52
|
+
{
|
|
53
|
+
type: "button",
|
|
54
|
+
onClick: () => setShowChangeTeamModal(false),
|
|
55
|
+
className: "text-gray-400 hover:text-gray-600",
|
|
56
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
57
|
+
"svg",
|
|
58
|
+
{
|
|
59
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
60
|
+
width: "24",
|
|
61
|
+
height: "24",
|
|
62
|
+
viewBox: "0 0 24 24",
|
|
63
|
+
fill: "none",
|
|
64
|
+
stroke: "currentColor",
|
|
65
|
+
strokeWidth: "2",
|
|
66
|
+
strokeLinecap: "round",
|
|
67
|
+
strokeLinejoin: "round",
|
|
68
|
+
children: [
|
|
69
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
|
|
70
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
71
|
+
]
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
)
|
|
76
|
+
] }),
|
|
77
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
78
|
+
customers.length > 3 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-y-0 left-0 flex items-center pl-4", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
80
|
+
"svg",
|
|
81
|
+
{
|
|
82
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
83
|
+
width: "20",
|
|
84
|
+
height: "20",
|
|
85
|
+
viewBox: "0 0 24 24",
|
|
86
|
+
fill: "none",
|
|
87
|
+
stroke: "currentColor",
|
|
88
|
+
strokeWidth: "2",
|
|
89
|
+
strokeLinecap: "round",
|
|
90
|
+
strokeLinejoin: "round",
|
|
91
|
+
className: "text-gray-400",
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8" }),
|
|
94
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "m21 21-4.35-4.35" })
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
) }),
|
|
98
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
99
|
+
"input",
|
|
100
|
+
{
|
|
101
|
+
type: "text",
|
|
102
|
+
value: searchQuery,
|
|
103
|
+
onChange: (e) => setSearchQuery(e.target.value),
|
|
104
|
+
placeholder: "Search teams...",
|
|
105
|
+
className: "portal-input w-full py-4 pl-12 pr-4 text-base"
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
] }),
|
|
109
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4 text-sm text-gray-600", children: "autoci stable" }),
|
|
111
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: filteredCustomers.map((customer) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
112
|
+
"button",
|
|
113
|
+
{
|
|
114
|
+
type: "button",
|
|
115
|
+
onClick: () => setSelectedTeamId(customer.id),
|
|
116
|
+
className: `flex w-full items-center gap-4 rounded-xl border-2 p-6 text-left transition ${selectedTeamId === customer.id ? "border-blue-500 bg-blue-50" : "border-gray-200 bg-white hover:border-gray-300 hover:shadow-sm"}`,
|
|
117
|
+
children: [
|
|
118
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-full bg-blue-100", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
119
|
+
"svg",
|
|
120
|
+
{
|
|
121
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
122
|
+
width: "24",
|
|
123
|
+
height: "24",
|
|
124
|
+
viewBox: "0 0 24 24",
|
|
125
|
+
fill: "none",
|
|
126
|
+
stroke: "currentColor",
|
|
127
|
+
strokeWidth: "2",
|
|
128
|
+
strokeLinecap: "round",
|
|
129
|
+
strokeLinejoin: "round",
|
|
130
|
+
className: "text-blue-600",
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
|
|
133
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9", cy: "7", r: "4" }),
|
|
134
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87" }),
|
|
135
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
) }),
|
|
139
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg font-medium text-gray-900", children: customer.name })
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
customer.id
|
|
143
|
+
)) })
|
|
144
|
+
] }),
|
|
145
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-end gap-3 pt-4", children: [
|
|
146
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
147
|
+
"button",
|
|
148
|
+
{
|
|
149
|
+
type: "button",
|
|
150
|
+
onClick: () => setShowChangeTeamModal(false),
|
|
151
|
+
className: "rounded-xl border border-gray-300 px-6 py-3 text-base font-semibold text-gray-700 transition hover:bg-gray-50",
|
|
152
|
+
disabled: isChanging,
|
|
153
|
+
children: "Cancel"
|
|
154
|
+
}
|
|
155
|
+
),
|
|
156
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
157
|
+
"button",
|
|
158
|
+
{
|
|
159
|
+
type: "button",
|
|
160
|
+
onClick: handleChangeTeam,
|
|
161
|
+
disabled: !selectedTeamId || isChanging || selectedTeamId === currentCustomerId,
|
|
162
|
+
className: "rounded-xl bg-indigo-600 px-6 py-3 text-base font-semibold text-white shadow-sm transition hover:bg-indigo-700 disabled:cursor-not-allowed disabled:opacity-50",
|
|
163
|
+
children: isChanging ? "Changing..." : "Change team"
|
|
164
|
+
}
|
|
165
|
+
)
|
|
166
|
+
] })
|
|
167
|
+
] })
|
|
168
|
+
] }) })
|
|
169
|
+
] });
|
|
170
|
+
};
|
|
171
|
+
TopNavChangeTeamButton.displayName = "TopNavChangeTeamButton";
|
|
172
|
+
|
|
173
|
+
exports.TopNavChangeTeamButton = TopNavChangeTeamButton;
|
|
174
|
+
//# sourceMappingURL=top-nav-user-menu.js.map
|
|
175
|
+
//# sourceMappingURL=top-nav-user-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/top-nav-user-menu.tsx"],"names":["useState","jsxs","Fragment","jsx"],"mappings":"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","file":"top-nav-user-menu.js","sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\n\nexport interface Customer {\n id: string;\n name: string;\n}\n\nexport interface TopNavChangeTeamButtonProps {\n displayLabel: string;\n customers?: Customer[];\n currentCustomerId?: string;\n onChangeTeam?: (customerId: string) => Promise<void>;\n}\n\nexport const TopNavChangeTeamButton = ({\n displayLabel,\n customers = [],\n currentCustomerId,\n onChangeTeam\n}: TopNavChangeTeamButtonProps) => {\n const [showChangeTeamModal, setShowChangeTeamModal] = useState(false);\n const [selectedTeamId, setSelectedTeamId] = useState(currentCustomerId || \"\");\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [isChanging, setIsChanging] = useState(false);\n\n const filteredCustomers = customers.filter((customer) =>\n customer.name.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n const handleChangeTeam = async () => {\n if (!selectedTeamId || !onChangeTeam) return;\n \n setIsChanging(true);\n try {\n await onChangeTeam(selectedTeamId);\n setShowChangeTeamModal(false);\n // Force a full page reload to ensure new JWT is used everywhere\n window.location.href = \"/\";\n } catch (error) {\n console.error(\"[top-nav-user-menu] Failed to change team:\", error);\n setIsChanging(false);\n }\n };\n\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setShowChangeTeamModal(true)}\n className=\"block w-full px-4 py-2 text-left hover:bg-gray-100\"\n >\n Change team\n </button>\n\n {/* Change Team Modal */}\n {showChangeTeamModal && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 p-4\">\n <div className=\"w-full max-w-2xl rounded-3xl bg-white p-8 shadow-xl\">\n <div className=\"mb-6 flex items-center justify-between\">\n <h2 className=\"text-3xl font-semibold text-gray-900\">Change team</h2>\n <button\n type=\"button\"\n onClick={() => setShowChangeTeamModal(false)}\n className=\"text-gray-400 hover:text-gray-600\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <div className=\"space-y-6\">\n {customers.length > 3 && (\n <div className=\"relative\">\n <div className=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-4\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-gray-400\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"m21 21-4.35-4.35\"></path>\n </svg>\n </div>\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search teams...\"\n className=\"portal-input w-full py-4 pl-12 pr-4 text-base\"\n />\n </div>\n )}\n\n <div>\n <p className=\"mb-4 text-sm text-gray-600\">autoci stable</p>\n <div className=\"space-y-3\">\n {filteredCustomers.map((customer) => (\n <button\n key={customer.id}\n type=\"button\"\n onClick={() => setSelectedTeamId(customer.id)}\n className={`flex w-full items-center gap-4 rounded-xl border-2 p-6 text-left transition ${\n selectedTeamId === customer.id\n ? \"border-blue-500 bg-blue-50\"\n : \"border-gray-200 bg-white hover:border-gray-300 hover:shadow-sm\"\n }`}\n >\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-blue-100\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"text-blue-600\"\n >\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\"></path>\n <circle cx=\"9\" cy=\"7\" r=\"4\"></circle>\n <path d=\"M22 21v-2a4 4 0 0 0-3-3.87\"></path>\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\"></path>\n </svg>\n </div>\n <span className=\"text-lg font-medium text-gray-900\">{customer.name}</span>\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"flex justify-end gap-3 pt-4\">\n <button\n type=\"button\"\n onClick={() => setShowChangeTeamModal(false)}\n className=\"rounded-xl border border-gray-300 px-6 py-3 text-base font-semibold text-gray-700 transition hover:bg-gray-50\"\n disabled={isChanging}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleChangeTeam}\n disabled={!selectedTeamId || isChanging || selectedTeamId === currentCustomerId}\n className=\"rounded-xl bg-indigo-600 px-6 py-3 text-base font-semibold text-white shadow-sm transition hover:bg-indigo-700 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {isChanging ? \"Changing...\" : \"Change team\"}\n </button>\n </div>\n </div>\n </div>\n </div>\n )}\n </>\n );\n};\n\nTopNavChangeTeamButton.displayName = \"TopNavChangeTeamButton\";\n"]}
|