@burdenoff/microfe-organization 2026.510.110
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/README.md +64 -0
- package/dist/generated/global-operations.d.ts +1647 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-operations.js +724 -0
- package/dist/generated/global-operations.js.map +1 -0
- package/dist/generated/global-types.d.ts +20716 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/global-types.js +8 -0
- package/dist/generated/global-types.js.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-types.d.ts +53363 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/node_modules/sonner/dist/index.js +163 -0
- package/dist/node_modules/sonner/dist/index.js.map +1 -0
- package/dist/node_modules/zod/v3/ZodError.js +82 -0
- package/dist/node_modules/zod/v3/ZodError.js.map +1 -0
- package/dist/node_modules/zod/v3/errors.js +10 -0
- package/dist/node_modules/zod/v3/errors.js.map +1 -0
- package/dist/node_modules/zod/v3/helpers/errorUtil.js +9 -0
- package/dist/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
- package/dist/node_modules/zod/v3/helpers/parseUtil.js +93 -0
- package/dist/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
- package/dist/node_modules/zod/v3/helpers/util.js +76 -0
- package/dist/node_modules/zod/v3/helpers/util.js.map +1 -0
- package/dist/node_modules/zod/v3/locales/en.js +62 -0
- package/dist/node_modules/zod/v3/locales/en.js.map +1 -0
- package/dist/node_modules/zod/v3/types.js +2441 -0
- package/dist/node_modules/zod/v3/types.js.map +1 -0
- package/dist/organization-management/AdminOrganizationRoot.d.ts +16 -0
- package/dist/organization-management/AdminOrganizationRoot.d.ts.map +1 -0
- package/dist/organization-management/AdminOrganizationRoot.js +76 -0
- package/dist/organization-management/AdminOrganizationRoot.js.map +1 -0
- package/dist/organization-management/AdminOrganizationRoutes.d.ts +16 -0
- package/dist/organization-management/AdminOrganizationRoutes.d.ts.map +1 -0
- package/dist/organization-management/AdminOrganizationRoutes.js +73 -0
- package/dist/organization-management/AdminOrganizationRoutes.js.map +1 -0
- package/dist/organization-management/UserOrganizationRoot.d.ts +17 -0
- package/dist/organization-management/UserOrganizationRoot.d.ts.map +1 -0
- package/dist/organization-management/UserOrganizationRoot.js +45 -0
- package/dist/organization-management/UserOrganizationRoot.js.map +1 -0
- package/dist/organization-management/UserOrganizationRoutes.d.ts +12 -0
- package/dist/organization-management/UserOrganizationRoutes.d.ts.map +1 -0
- package/dist/organization-management/UserOrganizationRoutes.js +30 -0
- package/dist/organization-management/UserOrganizationRoutes.js.map +1 -0
- package/dist/organization-management/constants/permissions.d.ts +30 -0
- package/dist/organization-management/constants/permissions.d.ts.map +1 -0
- package/dist/organization-management/constants/permissions.js +22 -0
- package/dist/organization-management/constants/permissions.js.map +1 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.d.ts +19 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.d.ts.map +1 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.js +15 -0
- package/dist/organization-management/hooks/useOrganizationEventEmitter.js.map +1 -0
- package/dist/organization-management/hooks/useOrganizationPageView.d.ts +11 -0
- package/dist/organization-management/hooks/useOrganizationPageView.d.ts.map +1 -0
- package/dist/organization-management/hooks/useOrganizationPageView.js +24 -0
- package/dist/organization-management/hooks/useOrganizationPageView.js.map +1 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.d.ts +18 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.js +119 -0
- package/dist/organization-management/modules/members/components/InviteMemberForm.js.map +1 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.d.ts +6 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.js +51 -0
- package/dist/organization-management/modules/members/components/InviteStatusBadge.js.map +1 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.d.ts +11 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.js +56 -0
- package/dist/organization-management/modules/members/components/MemberRoleBadge.js.map +1 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.d.ts +22 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.js +70 -0
- package/dist/organization-management/modules/members/components/MyInviteCard.js.map +1 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.d.ts +6 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.d.ts.map +1 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.js +141 -0
- package/dist/organization-management/modules/members/components/PendingInvitesList.js.map +1 -0
- package/dist/organization-management/modules/members/hooks/useInvites.d.ts +75 -0
- package/dist/organization-management/modules/members/hooks/useInvites.d.ts.map +1 -0
- package/dist/organization-management/modules/members/hooks/useInvites.js +253 -0
- package/dist/organization-management/modules/members/hooks/useInvites.js.map +1 -0
- package/dist/organization-management/modules/members/hooks/useMembers.d.ts +84 -0
- package/dist/organization-management/modules/members/hooks/useMembers.d.ts.map +1 -0
- package/dist/organization-management/modules/members/hooks/useMembers.js +95 -0
- package/dist/organization-management/modules/members/hooks/useMembers.js.map +1 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.d.ts +6 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js +91 -0
- package/dist/organization-management/modules/members/pages/InviteMemberPage.js.map +1 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.d.ts +6 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js +115 -0
- package/dist/organization-management/modules/members/pages/MemberDetailPage.js.map +1 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.d.ts +2 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.js +424 -0
- package/dist/organization-management/modules/members/pages/MembersListPage.js.map +1 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.d.ts +6 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.d.ts.map +1 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js +114 -0
- package/dist/organization-management/modules/members/pages/MyInvitesPage.js.map +1 -0
- package/dist/organization-management/modules/members/types/index.d.ts +35 -0
- package/dist/organization-management/modules/members/types/index.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.d.ts +13 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.js +325 -0
- package/dist/organization-management/modules/organizations/components/OrganizationForm.js.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.d.ts +13 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js +49 -0
- package/dist/organization-management/modules/organizations/components/OrganizationStatusBadge.js.map +1 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.d.ts +86 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.js +164 -0
- package/dist/organization-management/modules/organizations/hooks/useOrganizations.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.d.ts +6 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js +76 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationCreatePage.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.d.ts +2 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js +306 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationDetailPage.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.d.ts +6 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js +93 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationEditPage.js.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.d.ts +2 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js +448 -0
- package/dist/organization-management/modules/organizations/pages/OrganizationsListPage.js.map +1 -0
- package/dist/organization-management/modules/organizations/schemas/index.d.ts +53 -0
- package/dist/organization-management/modules/organizations/schemas/index.d.ts.map +1 -0
- package/dist/organization-management/modules/organizations/schemas/index.js +25 -0
- package/dist/organization-management/modules/organizations/schemas/index.js.map +1 -0
- package/dist/organization-management/modules/organizations/types/index.d.ts +34 -0
- package/dist/organization-management/modules/organizations/types/index.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.d.ts +13 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js +147 -0
- package/dist/organization-management/modules/workspaces/components/AddWorkspaceMemberDialog.js.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.d.ts +16 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js +107 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceCard.js.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.d.ts +16 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js +386 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceForm.js.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.d.ts +13 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js +49 -0
- package/dist/organization-management/modules/workspaces/components/WorkspaceStatusBadge.js.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.d.ts +47 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js +46 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaceMembers.js.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.d.ts +133 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js +111 -0
- package/dist/organization-management/modules/workspaces/hooks/useWorkspaces.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js +82 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceCreatePage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js +438 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceDetailPage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js +90 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspaceEditPage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.d.ts +2 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js +465 -0
- package/dist/organization-management/modules/workspaces/pages/WorkspacesListPage.js.map +1 -0
- package/dist/organization-management/modules/workspaces/schemas/index.d.ts +44 -0
- package/dist/organization-management/modules/workspaces/schemas/index.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/schemas/index.js +22 -0
- package/dist/organization-management/modules/workspaces/schemas/index.js.map +1 -0
- package/dist/organization-management/modules/workspaces/types/index.d.ts +39 -0
- package/dist/organization-management/modules/workspaces/types/index.d.ts.map +1 -0
- package/dist/organization-management/modules/workspaces/types/workspace-member.d.ts +48 -0
- package/dist/organization-management/modules/workspaces/types/workspace-member.d.ts.map +1 -0
- package/dist/organization-management/providers/OrgConsoleProvider.d.ts +19 -0
- package/dist/organization-management/providers/OrgConsoleProvider.d.ts.map +1 -0
- package/dist/organization-management/providers/OrgConsoleProvider.js +24 -0
- package/dist/organization-management/providers/OrgConsoleProvider.js.map +1 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.d.ts +28 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.d.ts.map +1 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.js +105 -0
- package/dist/organization-management/shared/components/dialog/ConfirmDialog.js.map +1 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.d.ts +14 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.d.ts.map +1 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.js +30 -0
- package/dist/organization-management/shared/components/feedback/EmptyState.js.map +1 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.d.ts +11 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.d.ts.map +1 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.js +37 -0
- package/dist/organization-management/shared/components/feedback/ErrorState.js.map +1 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.d.ts +6 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.d.ts.map +1 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.js +24 -0
- package/dist/organization-management/shared/components/feedback/LoadingState.js.map +1 -0
- package/dist/organization-management/shared/components/input/SearchInput.d.ts +15 -0
- package/dist/organization-management/shared/components/input/SearchInput.d.ts.map +1 -0
- package/dist/organization-management/shared/components/input/SearchInput.js +40 -0
- package/dist/organization-management/shared/components/input/SearchInput.js.map +1 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.d.ts +10 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.d.ts.map +1 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.js +21 -0
- package/dist/organization-management/shared/components/input/SelectionCheckbox.js.map +1 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.d.ts +2 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.d.ts.map +1 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.js +17 -0
- package/dist/organization-management/shared/hooks/useDebouncedValue.js.map +1 -0
- package/dist/organization-management/shared/hooks/useTr.d.ts +14 -0
- package/dist/organization-management/shared/hooks/useTr.d.ts.map +1 -0
- package/dist/organization-management/shared/hooks/useTr.js +14 -0
- package/dist/organization-management/shared/hooks/useTr.js.map +1 -0
- package/dist/organization-management/shared/logger.d.ts +11 -0
- package/dist/organization-management/shared/logger.d.ts.map +1 -0
- package/dist/organization-management/shared/logger.js +46 -0
- package/dist/organization-management/shared/logger.js.map +1 -0
- package/dist/organization-management/shared/recaptcha.d.ts +2 -0
- package/dist/organization-management/shared/recaptcha.d.ts.map +1 -0
- package/dist/organization-management/shared/recaptcha.js +6 -0
- package/dist/organization-management/shared/recaptcha.js.map +1 -0
- package/dist/organization-management/shared/types/graphql.d.ts +131 -0
- package/dist/organization-management/shared/types/graphql.d.ts.map +1 -0
- package/dist/organization-management/shared/types/graphql.js +10 -0
- package/dist/organization-management/shared/types/graphql.js.map +1 -0
- package/dist/organization-management/shared/utils/cn.d.ts +8 -0
- package/dist/organization-management/shared/utils/cn.d.ts.map +1 -0
- package/dist/organization-management/types/index.d.ts +46 -0
- package/dist/organization-management/types/index.d.ts.map +1 -0
- package/dist/utils/nativeBridge.d.ts +3 -0
- package/dist/utils/nativeBridge.d.ts.map +1 -0
- package/dist/utils/nativeBridge.js +2 -0
- package/package.json +116 -0
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
import { useOrgConsole as e } from "../../../providers/OrgConsoleProvider.js";
|
|
2
|
+
import { toast as t } from "../../../../node_modules/sonner/dist/index.js";
|
|
3
|
+
import { useTr as n } from "../../../shared/hooks/useTr.js";
|
|
4
|
+
import { LoadingState as r } from "../../../shared/components/feedback/LoadingState.js";
|
|
5
|
+
import { ErrorState as i } from "../../../shared/components/feedback/ErrorState.js";
|
|
6
|
+
import { EmptyState as a } from "../../../shared/components/feedback/EmptyState.js";
|
|
7
|
+
import { useConfirmDialog as o } from "../../../shared/components/dialog/ConfirmDialog.js";
|
|
8
|
+
import { PERMISSIONS as s } from "../../../constants/permissions.js";
|
|
9
|
+
import { MemberRoleBadge as c } from "../../members/components/MemberRoleBadge.js";
|
|
10
|
+
import { useWorkspace as l } from "../hooks/useWorkspaces.js";
|
|
11
|
+
import { WorkspaceStatusBadge as u } from "../components/WorkspaceStatusBadge.js";
|
|
12
|
+
import { useRemoveWorkspaceMember as d, useWorkspaceMembers as f } from "../hooks/useWorkspaceMembers.js";
|
|
13
|
+
import { AddWorkspaceMemberDialog as p } from "../components/AddWorkspaceMemberDialog.js";
|
|
14
|
+
import { useMemo as m, useState as h } from "react";
|
|
15
|
+
import { ArrowLeft as g, Briefcase as _, Edit as v, Trash2 as y, UserPlus as b, Users as x } from "lucide-react";
|
|
16
|
+
import { usePermissions as S } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
17
|
+
import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
|
|
18
|
+
import { useParams as E } from "react-router-dom";
|
|
19
|
+
//#region src/organization-management/modules/workspaces/pages/WorkspaceDetailPage.tsx
|
|
20
|
+
function D(e) {
|
|
21
|
+
return new Date(e).toLocaleDateString("en-US", {
|
|
22
|
+
year: "numeric",
|
|
23
|
+
month: "long",
|
|
24
|
+
day: "numeric",
|
|
25
|
+
hour: "2-digit",
|
|
26
|
+
minute: "2-digit"
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function O() {
|
|
30
|
+
let O = n(), { id: k } = E(), { navigate: A, basePath: j = "/organizations" } = e(), { hasPermission: M, isLoading: N } = S(), { workspace: P, loading: F, error: I } = l(k ?? ""), [L, R] = h("overview"), [z, B] = h(!1), { openConfirmDialog: V, ConfirmDialog: H } = o(), { members: U, loading: W, error: G, refetch: K } = f(L === "members" && k ? k ?? "" : "", 50, 0), { removeWorkspaceMember: q, loading: J } = d(), Y = U.length > 0 || L === "members" ? U.length : P?.memberCount ?? 0, X = m(() => [{
|
|
31
|
+
id: "overview",
|
|
32
|
+
label: O("workspaces.detail.tab.overview", "Overview")
|
|
33
|
+
}, {
|
|
34
|
+
id: "members",
|
|
35
|
+
label: `${O("workspaces.detail.tab.members", "Members")} (${Y})`
|
|
36
|
+
}], [Y, O]), Z = (e) => {
|
|
37
|
+
k && V({
|
|
38
|
+
title: O("workspaces.removeMember.title", "Remove workspace member"),
|
|
39
|
+
description: `${O("workspaces.removeMember.prefix", "Remove")} ${e} ${O("workspaces.removeMember.suffix", "from this workspace? They will keep their organization membership.")}`,
|
|
40
|
+
confirmText: O("common.remove", "Remove"),
|
|
41
|
+
variant: "danger",
|
|
42
|
+
onConfirm: () => {
|
|
43
|
+
(async () => {
|
|
44
|
+
try {
|
|
45
|
+
let n = await q(k, e);
|
|
46
|
+
if (n.errors?.length) throw Error(n.errors[0]?.message ?? O("workspaces.removeMember.failed", "Failed to remove workspace member"));
|
|
47
|
+
await K(), t.success(O("workspaces.removeMember.success", "Workspace member removed successfully"));
|
|
48
|
+
} catch (e) {
|
|
49
|
+
t.error(e instanceof Error ? e.message : O("workspaces.removeMember.failed", "Failed to remove workspace member"));
|
|
50
|
+
}
|
|
51
|
+
})();
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
return N ? /* @__PURE__ */ w("div", {
|
|
56
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
57
|
+
children: /* @__PURE__ */ w(r, { message: O("common.loadingPermissions", "Loading permissions...") })
|
|
58
|
+
}) : M(s.WORKSPACE_READ) ? F ? /* @__PURE__ */ w("div", {
|
|
59
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
60
|
+
children: /* @__PURE__ */ w(r, { message: O("workspaces.detail.loading", "Loading workspace details...") })
|
|
61
|
+
}) : I || !P ? /* @__PURE__ */ w("div", {
|
|
62
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
63
|
+
children: /* @__PURE__ */ w(i, {
|
|
64
|
+
message: I?.message || O("workspaces.detail.notFound", "Workspace not found"),
|
|
65
|
+
action: {
|
|
66
|
+
label: O("workspaces.create.backToWorkspaces", "Back to Workspaces"),
|
|
67
|
+
onClick: () => A(`${j}/workspaces`)
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
}) : /* @__PURE__ */ T("div", {
|
|
71
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ T("div", {
|
|
74
|
+
className: "mx-auto flex w-full max-w-7xl flex-col gap-6",
|
|
75
|
+
children: [/* @__PURE__ */ T("div", {
|
|
76
|
+
className: "space-y-4",
|
|
77
|
+
children: [/* @__PURE__ */ T("button", {
|
|
78
|
+
onClick: () => A(`${j}/workspaces`),
|
|
79
|
+
className: "inline-flex min-h-10 items-center gap-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:text-[var(--color-text-primary)] active:scale-[0.98]",
|
|
80
|
+
children: [/* @__PURE__ */ w(g, {
|
|
81
|
+
size: 20,
|
|
82
|
+
"aria-hidden": "true"
|
|
83
|
+
}), /* @__PURE__ */ w("span", {
|
|
84
|
+
className: "text-sm font-medium",
|
|
85
|
+
children: O("workspaces.create.backToWorkspaces", "Back to Workspaces")
|
|
86
|
+
})]
|
|
87
|
+
}), /* @__PURE__ */ T("div", {
|
|
88
|
+
className: "flex flex-col gap-4 rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-5 shadow-[var(--shadow-elevation-1)] lg:flex-row lg:items-start lg:justify-between",
|
|
89
|
+
children: [/* @__PURE__ */ T("div", {
|
|
90
|
+
className: "flex min-w-0 items-start gap-4",
|
|
91
|
+
children: [/* @__PURE__ */ w("div", {
|
|
92
|
+
className: "flex h-16 w-16 items-center justify-center rounded-xl bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]",
|
|
93
|
+
children: /* @__PURE__ */ w(_, {
|
|
94
|
+
size: 28,
|
|
95
|
+
"aria-hidden": "true"
|
|
96
|
+
})
|
|
97
|
+
}), /* @__PURE__ */ T("div", {
|
|
98
|
+
className: "min-w-0 space-y-2",
|
|
99
|
+
children: [/* @__PURE__ */ T("div", {
|
|
100
|
+
className: "flex flex-wrap items-start gap-2",
|
|
101
|
+
children: [
|
|
102
|
+
/* @__PURE__ */ w("h1", {
|
|
103
|
+
className: "text-3xl font-bold text-[var(--color-text-primary)]",
|
|
104
|
+
children: P.name
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ w(u, { status: P.status }),
|
|
107
|
+
/* @__PURE__ */ w("span", {
|
|
108
|
+
className: "inline-flex items-center rounded-md bg-[var(--color-bg-subtle)] px-2 py-1 text-xs font-medium text-[var(--color-text-secondary)]",
|
|
109
|
+
children: P.type
|
|
110
|
+
})
|
|
111
|
+
]
|
|
112
|
+
}), /* @__PURE__ */ T("p", {
|
|
113
|
+
className: "break-all font-mono text-sm text-[var(--color-text-secondary)]",
|
|
114
|
+
children: ["/", P.slug]
|
|
115
|
+
})]
|
|
116
|
+
})]
|
|
117
|
+
}), /* @__PURE__ */ T("div", {
|
|
118
|
+
className: "flex flex-col gap-3 sm:flex-row",
|
|
119
|
+
children: [/* @__PURE__ */ T("button", {
|
|
120
|
+
onClick: () => A(`${j}/${P.organizationId}`),
|
|
121
|
+
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-border-default)] px-4 py-2.5 text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]",
|
|
122
|
+
children: [/* @__PURE__ */ w(x, {
|
|
123
|
+
size: 16,
|
|
124
|
+
"aria-hidden": "true"
|
|
125
|
+
}), /* @__PURE__ */ w("span", { children: O("workspaces.detail.viewOrganization", "View Organization") })]
|
|
126
|
+
}), M(s.WORKSPACE_UPDATE) && /* @__PURE__ */ T("button", {
|
|
127
|
+
onClick: () => A(`${j}/workspaces/${k}/edit`),
|
|
128
|
+
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2.5 text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90 active:scale-[0.98]",
|
|
129
|
+
children: [/* @__PURE__ */ w(v, {
|
|
130
|
+
size: 16,
|
|
131
|
+
"aria-hidden": "true"
|
|
132
|
+
}), /* @__PURE__ */ w("span", { children: O("workspaces.edit.title", "Edit Workspace") })]
|
|
133
|
+
})]
|
|
134
|
+
})]
|
|
135
|
+
})]
|
|
136
|
+
}), /* @__PURE__ */ T("div", {
|
|
137
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] shadow-[var(--shadow-elevation-1)]",
|
|
138
|
+
children: [/* @__PURE__ */ w("div", {
|
|
139
|
+
className: "overflow-x-auto border-b border-[var(--color-border-default)]",
|
|
140
|
+
children: /* @__PURE__ */ w("div", {
|
|
141
|
+
className: "flex min-w-max gap-2 px-4 pt-4 sm:px-6",
|
|
142
|
+
children: X.map((e) => {
|
|
143
|
+
let t = L === e.id;
|
|
144
|
+
return /* @__PURE__ */ w("button", {
|
|
145
|
+
onClick: () => R(e.id),
|
|
146
|
+
className: `inline-flex min-h-11 items-center rounded-t-lg border-b-2 px-4 py-3 text-sm font-medium transition-colors ${t ? "border-[var(--color-action-primary-bg)] text-[var(--color-action-primary-bg)]" : "border-transparent text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)]"}`,
|
|
147
|
+
"aria-pressed": t,
|
|
148
|
+
children: e.label
|
|
149
|
+
}, e.id);
|
|
150
|
+
})
|
|
151
|
+
})
|
|
152
|
+
}), /* @__PURE__ */ w("div", {
|
|
153
|
+
className: "p-4 sm:p-6",
|
|
154
|
+
children: L === "overview" ? /* @__PURE__ */ T("div", {
|
|
155
|
+
className: "grid grid-cols-1 gap-6 xl:grid-cols-[minmax(0,1fr)_320px]",
|
|
156
|
+
children: [/* @__PURE__ */ T("section", {
|
|
157
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-5",
|
|
158
|
+
children: [/* @__PURE__ */ w("h2", {
|
|
159
|
+
className: "text-lg font-semibold text-[var(--color-text-primary)]",
|
|
160
|
+
children: O("workspaces.detail.detailsSection", "Workspace details")
|
|
161
|
+
}), /* @__PURE__ */ T("dl", {
|
|
162
|
+
className: "mt-5 grid grid-cols-1 gap-4 sm:grid-cols-2",
|
|
163
|
+
children: [
|
|
164
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
165
|
+
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
166
|
+
children: O("common.name", "Name")
|
|
167
|
+
}), /* @__PURE__ */ w("dd", {
|
|
168
|
+
className: "mt-1 text-sm text-[var(--color-text-primary)]",
|
|
169
|
+
children: P.name
|
|
170
|
+
})] }),
|
|
171
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
172
|
+
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
173
|
+
children: O("common.slug", "Slug")
|
|
174
|
+
}), /* @__PURE__ */ w("dd", {
|
|
175
|
+
className: "mt-1 break-all font-mono text-sm text-[var(--color-text-primary)]",
|
|
176
|
+
children: P.slug
|
|
177
|
+
})] }),
|
|
178
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
179
|
+
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
180
|
+
children: O("common.status", "Status")
|
|
181
|
+
}), /* @__PURE__ */ w("dd", {
|
|
182
|
+
className: "mt-1",
|
|
183
|
+
children: /* @__PURE__ */ w(u, { status: P.status })
|
|
184
|
+
})] }),
|
|
185
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
186
|
+
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
187
|
+
children: O("workspaces.list.column.type", "Type")
|
|
188
|
+
}), /* @__PURE__ */ w("dd", {
|
|
189
|
+
className: "mt-1 text-sm text-[var(--color-text-primary)]",
|
|
190
|
+
children: P.type
|
|
191
|
+
})] }),
|
|
192
|
+
/* @__PURE__ */ T("div", {
|
|
193
|
+
className: "sm:col-span-2",
|
|
194
|
+
children: [/* @__PURE__ */ w("dt", {
|
|
195
|
+
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
196
|
+
children: O("members.detail.orgId", "Organization ID")
|
|
197
|
+
}), /* @__PURE__ */ w("dd", {
|
|
198
|
+
className: "mt-1 break-all font-mono text-sm text-[var(--color-text-primary)]",
|
|
199
|
+
children: P.organizationId
|
|
200
|
+
})]
|
|
201
|
+
}),
|
|
202
|
+
P.endpoint ? /* @__PURE__ */ T("div", {
|
|
203
|
+
className: "sm:col-span-2",
|
|
204
|
+
children: [/* @__PURE__ */ w("dt", {
|
|
205
|
+
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
206
|
+
children: O("workspaces.detail.endpoint", "Endpoint")
|
|
207
|
+
}), /* @__PURE__ */ w("dd", {
|
|
208
|
+
className: "mt-1 break-all font-mono text-sm text-[var(--color-text-primary)]",
|
|
209
|
+
children: P.endpoint
|
|
210
|
+
})]
|
|
211
|
+
}) : null
|
|
212
|
+
]
|
|
213
|
+
})]
|
|
214
|
+
}), /* @__PURE__ */ T("aside", {
|
|
215
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-5",
|
|
216
|
+
children: [/* @__PURE__ */ w("h2", {
|
|
217
|
+
className: "text-lg font-semibold text-[var(--color-text-primary)]",
|
|
218
|
+
children: O("common.metadata", "Metadata")
|
|
219
|
+
}), /* @__PURE__ */ T("dl", {
|
|
220
|
+
className: "mt-5 space-y-4",
|
|
221
|
+
children: [
|
|
222
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
223
|
+
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
224
|
+
children: O("workspaces.list.members", "Members")
|
|
225
|
+
}), /* @__PURE__ */ w("dd", {
|
|
226
|
+
className: "mt-1 text-sm text-[var(--color-text-primary)]",
|
|
227
|
+
children: Y
|
|
228
|
+
})] }),
|
|
229
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
230
|
+
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
231
|
+
children: O("common.created", "Created")
|
|
232
|
+
}), /* @__PURE__ */ w("dd", {
|
|
233
|
+
className: "mt-1 text-sm text-[var(--color-text-primary)]",
|
|
234
|
+
children: D(P.createdAt)
|
|
235
|
+
})] }),
|
|
236
|
+
/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
237
|
+
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
238
|
+
children: O("common.lastUpdated", "Last updated")
|
|
239
|
+
}), /* @__PURE__ */ w("dd", {
|
|
240
|
+
className: "mt-1 text-sm text-[var(--color-text-primary)]",
|
|
241
|
+
children: D(P.updatedAt)
|
|
242
|
+
})] }),
|
|
243
|
+
P.region ? /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
244
|
+
className: "text-sm font-medium text-[var(--color-text-secondary)]",
|
|
245
|
+
children: O("workspaces.detail.region", "Region")
|
|
246
|
+
}), /* @__PURE__ */ w("dd", {
|
|
247
|
+
className: "mt-1 text-sm text-[var(--color-text-primary)]",
|
|
248
|
+
children: P.region
|
|
249
|
+
})] }) : null
|
|
250
|
+
]
|
|
251
|
+
})]
|
|
252
|
+
})]
|
|
253
|
+
}) : /* @__PURE__ */ T("section", {
|
|
254
|
+
className: "space-y-4",
|
|
255
|
+
children: [/* @__PURE__ */ T("div", {
|
|
256
|
+
className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
|
|
257
|
+
children: [/* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h2", {
|
|
258
|
+
className: "text-lg font-semibold text-[var(--color-text-primary)]",
|
|
259
|
+
children: O("workspaces.detail.membersTitle", "Workspace members")
|
|
260
|
+
}), /* @__PURE__ */ w("p", {
|
|
261
|
+
className: "text-sm text-[var(--color-text-secondary)]",
|
|
262
|
+
children: O("workspaces.detail.membersSubtitle", "Add organization members to this workspace and manage access.")
|
|
263
|
+
})] }), M(s.MEMBER_INVITE) && /* @__PURE__ */ T("button", {
|
|
264
|
+
onClick: () => B(!0),
|
|
265
|
+
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2.5 text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90 active:scale-[0.98]",
|
|
266
|
+
children: [/* @__PURE__ */ w(b, {
|
|
267
|
+
size: 16,
|
|
268
|
+
"aria-hidden": "true"
|
|
269
|
+
}), /* @__PURE__ */ w("span", { children: O("workspaces.detail.addMember", "Add Member") })]
|
|
270
|
+
})]
|
|
271
|
+
}), W ? /* @__PURE__ */ w("div", {
|
|
272
|
+
className: "py-8",
|
|
273
|
+
children: /* @__PURE__ */ w(r, { message: O("workspaces.detail.loadingMembers", "Loading workspace members...") })
|
|
274
|
+
}) : G ? /* @__PURE__ */ w(i, {
|
|
275
|
+
message: G.message,
|
|
276
|
+
action: {
|
|
277
|
+
label: O("common.retry", "Retry"),
|
|
278
|
+
onClick: () => {
|
|
279
|
+
K();
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}) : U.length > 0 ? /* @__PURE__ */ T(C, { children: [/* @__PURE__ */ w("div", {
|
|
283
|
+
className: "grid gap-4 md:hidden",
|
|
284
|
+
children: U.map((e) => /* @__PURE__ */ w("article", {
|
|
285
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-4",
|
|
286
|
+
children: /* @__PURE__ */ T("div", {
|
|
287
|
+
className: "space-y-3",
|
|
288
|
+
children: [
|
|
289
|
+
/* @__PURE__ */ T("div", {
|
|
290
|
+
className: "flex items-start justify-between gap-3",
|
|
291
|
+
children: [/* @__PURE__ */ T("div", {
|
|
292
|
+
className: "min-w-0",
|
|
293
|
+
children: [/* @__PURE__ */ w("h3", {
|
|
294
|
+
className: "break-all font-mono text-sm font-semibold text-[var(--color-text-primary)]",
|
|
295
|
+
children: e.userId
|
|
296
|
+
}), /* @__PURE__ */ T("p", {
|
|
297
|
+
className: "mt-1 text-sm text-[var(--color-text-secondary)]",
|
|
298
|
+
children: [
|
|
299
|
+
O("members.list.joined", "Joined"),
|
|
300
|
+
" ",
|
|
301
|
+
D(e.joinedAt)
|
|
302
|
+
]
|
|
303
|
+
})]
|
|
304
|
+
}), /* @__PURE__ */ w(c, { role: e.role })]
|
|
305
|
+
}),
|
|
306
|
+
/* @__PURE__ */ w("dl", {
|
|
307
|
+
className: "grid grid-cols-1 gap-3 text-sm",
|
|
308
|
+
children: /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("dt", {
|
|
309
|
+
className: "text-[var(--color-text-secondary)]",
|
|
310
|
+
children: O("members.list.invitedBy", "Invited by")
|
|
311
|
+
}), /* @__PURE__ */ w("dd", {
|
|
312
|
+
className: "mt-1 break-all font-mono text-[var(--color-text-primary)]",
|
|
313
|
+
children: e.invitedBy || "—"
|
|
314
|
+
})] })
|
|
315
|
+
}),
|
|
316
|
+
/* @__PURE__ */ T("button", {
|
|
317
|
+
onClick: () => Z(e.userId),
|
|
318
|
+
disabled: J,
|
|
319
|
+
className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-2 text-sm text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
320
|
+
children: [/* @__PURE__ */ w(y, {
|
|
321
|
+
size: 16,
|
|
322
|
+
"aria-hidden": "true"
|
|
323
|
+
}), O("common.remove", "Remove")]
|
|
324
|
+
})
|
|
325
|
+
]
|
|
326
|
+
})
|
|
327
|
+
}, e.id))
|
|
328
|
+
}), /* @__PURE__ */ w("div", {
|
|
329
|
+
className: "hidden overflow-hidden rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] md:block",
|
|
330
|
+
children: /* @__PURE__ */ w("div", {
|
|
331
|
+
className: "overflow-x-auto",
|
|
332
|
+
children: /* @__PURE__ */ T("table", {
|
|
333
|
+
className: "min-w-full",
|
|
334
|
+
children: [/* @__PURE__ */ w("thead", {
|
|
335
|
+
className: "bg-[var(--color-bg-subtle)]",
|
|
336
|
+
children: /* @__PURE__ */ T("tr", { children: [
|
|
337
|
+
/* @__PURE__ */ w("th", {
|
|
338
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
339
|
+
children: O("members.detail.userId", "User ID")
|
|
340
|
+
}),
|
|
341
|
+
/* @__PURE__ */ w("th", {
|
|
342
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
343
|
+
children: O("members.list.column.role", "Role")
|
|
344
|
+
}),
|
|
345
|
+
/* @__PURE__ */ w("th", {
|
|
346
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
347
|
+
children: O("members.list.joined", "Joined")
|
|
348
|
+
}),
|
|
349
|
+
/* @__PURE__ */ w("th", {
|
|
350
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
351
|
+
children: O("members.list.invitedBy", "Invited by")
|
|
352
|
+
}),
|
|
353
|
+
/* @__PURE__ */ w("th", {
|
|
354
|
+
className: "px-6 py-3 text-right text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
355
|
+
children: O("common.actions", "Actions")
|
|
356
|
+
})
|
|
357
|
+
] })
|
|
358
|
+
}), /* @__PURE__ */ w("tbody", {
|
|
359
|
+
className: "divide-y divide-[var(--color-border-default)]",
|
|
360
|
+
children: U.map((e) => /* @__PURE__ */ T("tr", {
|
|
361
|
+
className: "transition-colors hover:bg-[var(--color-bg-subtle)]",
|
|
362
|
+
children: [
|
|
363
|
+
/* @__PURE__ */ w("td", {
|
|
364
|
+
className: "px-6 py-4 font-mono text-sm text-[var(--color-text-primary)]",
|
|
365
|
+
children: e.userId
|
|
366
|
+
}),
|
|
367
|
+
/* @__PURE__ */ w("td", {
|
|
368
|
+
className: "px-6 py-4",
|
|
369
|
+
children: /* @__PURE__ */ w(c, { role: e.role })
|
|
370
|
+
}),
|
|
371
|
+
/* @__PURE__ */ w("td", {
|
|
372
|
+
className: "px-6 py-4 text-sm text-[var(--color-text-secondary)]",
|
|
373
|
+
children: D(e.joinedAt)
|
|
374
|
+
}),
|
|
375
|
+
/* @__PURE__ */ w("td", {
|
|
376
|
+
className: "px-6 py-4 break-all font-mono text-sm text-[var(--color-text-secondary)]",
|
|
377
|
+
children: e.invitedBy || "—"
|
|
378
|
+
}),
|
|
379
|
+
/* @__PURE__ */ w("td", {
|
|
380
|
+
className: "px-6 py-4 text-right",
|
|
381
|
+
children: /* @__PURE__ */ w("button", {
|
|
382
|
+
onClick: () => Z(e.userId),
|
|
383
|
+
disabled: J,
|
|
384
|
+
className: "rounded-lg p-2 text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50",
|
|
385
|
+
"aria-label": `${O("workspaces.removeMember.ariaPrefix", "Remove")} ${e.userId} ${O("workspaces.removeMember.ariaSuffix", "from workspace")}`,
|
|
386
|
+
title: `${O("workspaces.removeMember.ariaPrefix", "Remove")} ${e.userId} ${O("workspaces.removeMember.ariaSuffix", "from workspace")}`,
|
|
387
|
+
children: /* @__PURE__ */ w(y, {
|
|
388
|
+
size: 18,
|
|
389
|
+
"aria-hidden": "true"
|
|
390
|
+
})
|
|
391
|
+
})
|
|
392
|
+
})
|
|
393
|
+
]
|
|
394
|
+
}, e.id))
|
|
395
|
+
})]
|
|
396
|
+
})
|
|
397
|
+
})
|
|
398
|
+
})] }) : /* @__PURE__ */ w("div", {
|
|
399
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-6",
|
|
400
|
+
children: /* @__PURE__ */ w(a, {
|
|
401
|
+
icon: /* @__PURE__ */ w(x, {
|
|
402
|
+
size: 40,
|
|
403
|
+
"aria-hidden": "true"
|
|
404
|
+
}),
|
|
405
|
+
title: O("workspaces.detail.emptyMembersTitle", "No workspace members yet"),
|
|
406
|
+
description: O("workspaces.detail.emptyMembersDescription", "Add people from the parent organization to grant workspace access."),
|
|
407
|
+
action: {
|
|
408
|
+
label: O("workspaces.detail.addMember", "Add Member"),
|
|
409
|
+
onClick: () => B(!0)
|
|
410
|
+
}
|
|
411
|
+
})
|
|
412
|
+
})]
|
|
413
|
+
})
|
|
414
|
+
})]
|
|
415
|
+
})]
|
|
416
|
+
}),
|
|
417
|
+
/* @__PURE__ */ w(p, {
|
|
418
|
+
open: z,
|
|
419
|
+
onOpenChange: B,
|
|
420
|
+
workspaceId: P.id,
|
|
421
|
+
organizationId: P.organizationId,
|
|
422
|
+
existingMembers: U,
|
|
423
|
+
onInviteOrganizationMember: () => A(`${j}/${P.organizationId}/members/invite`)
|
|
424
|
+
}),
|
|
425
|
+
H
|
|
426
|
+
]
|
|
427
|
+
}) : /* @__PURE__ */ w("div", {
|
|
428
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
429
|
+
children: /* @__PURE__ */ w("div", {
|
|
430
|
+
className: "p-8 text-center text-[var(--color-text-secondary)]",
|
|
431
|
+
children: O("workspaces.detail.noPermission", "You don't have permission to view this workspace.")
|
|
432
|
+
})
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
//#endregion
|
|
436
|
+
export { O as WorkspaceDetailPage };
|
|
437
|
+
|
|
438
|
+
//# sourceMappingURL=WorkspaceDetailPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceDetailPage.js","names":[],"sources":["../../../../../src/organization-management/modules/workspaces/pages/WorkspaceDetailPage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { ArrowLeft, Briefcase, Edit, Trash2, UserPlus, Users } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useOrgConsole } from '../../../providers/OrgConsoleProvider';\nimport { useWorkspace } from '../hooks/useWorkspaces';\nimport { useRemoveWorkspaceMember, useWorkspaceMembers } from '../hooks/useWorkspaceMembers';\nimport { WorkspaceStatusBadge } from '../components/WorkspaceStatusBadge';\nimport { LoadingState } from '../../../shared/components/feedback/LoadingState';\nimport { ErrorState } from '../../../shared/components/feedback/ErrorState';\nimport { EmptyState } from '../../../shared/components/feedback/EmptyState';\nimport { MemberRoleBadge } from '../../members/components/MemberRoleBadge';\nimport { AddWorkspaceMemberDialog } from '../components/AddWorkspaceMemberDialog';\nimport { useConfirmDialog } from '../../../shared/components/dialog/ConfirmDialog';\nimport { PERMISSIONS } from '../../../constants/permissions';\nimport { useTr } from '../../../shared/hooks/useTr';\n\ntype ActiveTab = 'overview' | 'members';\n\nfunction formatDate(dateString: string) {\n return new Date(dateString).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nexport function WorkspaceDetailPage() {\n const tr = useTr();\n const { id } = useParams<{ id: string }>();\n const { navigate, basePath = '/organizations' } = useOrgConsole();\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const { workspace, loading, error } = useWorkspace(id ?? '');\n const [activeTab, setActiveTab] = useState<ActiveTab>('overview');\n const [isAddMemberDialogOpen, setIsAddMemberDialogOpen] = useState(false);\n const { openConfirmDialog, ConfirmDialog } = useConfirmDialog();\n\n const shouldFetchMembers = activeTab === 'members' && Boolean(id);\n const {\n members,\n loading: membersLoading,\n error: membersError,\n refetch: refetchMembers,\n } = useWorkspaceMembers(shouldFetchMembers ? (id ?? '') : '', 50, 0);\n const { removeWorkspaceMember, loading: removingMember } = useRemoveWorkspaceMember();\n const resolvedMemberCount =\n members.length > 0 || activeTab === 'members' ? members.length : (workspace?.memberCount ?? 0);\n\n const tabItems = useMemo(\n () => [\n { id: 'overview' as const, label: tr('workspaces.detail.tab.overview', 'Overview') },\n {\n id: 'members' as const,\n label: `${tr('workspaces.detail.tab.members', 'Members')} (${resolvedMemberCount})`,\n },\n ],\n [resolvedMemberCount, tr]\n );\n\n const handleRemoveMember = (userId: string) => {\n if (!id) return;\n\n openConfirmDialog({\n title: tr('workspaces.removeMember.title', 'Remove workspace member'),\n description: `${tr('workspaces.removeMember.prefix', 'Remove')} ${userId} ${tr('workspaces.removeMember.suffix', 'from this workspace? They will keep their organization membership.')}`,\n confirmText: tr('common.remove', 'Remove'),\n variant: 'danger',\n onConfirm: () => {\n void (async () => {\n try {\n const result = await removeWorkspaceMember(id, userId);\n if (result.errors?.length) {\n throw new Error(\n result.errors[0]?.message ??\n tr('workspaces.removeMember.failed', 'Failed to remove workspace member')\n );\n }\n\n await refetchMembers();\n toast.success(\n tr('workspaces.removeMember.success', 'Workspace member removed successfully')\n );\n } catch (removeError) {\n toast.error(\n removeError instanceof Error\n ? removeError.message\n : tr('workspaces.removeMember.failed', 'Failed to remove workspace member')\n );\n }\n })();\n },\n });\n };\n\n if (permissionsLoading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <LoadingState message={tr('common.loadingPermissions', 'Loading permissions...')} />\n </div>\n );\n }\n\n if (!hasPermission(PERMISSIONS.WORKSPACE_READ)) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <div className=\"p-8 text-center text-[var(--color-text-secondary)]\">\n {tr(\n 'workspaces.detail.noPermission',\n \"You don't have permission to view this workspace.\"\n )}\n </div>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6\">\n <LoadingState message={tr('workspaces.detail.loading', 'Loading workspace details...')} />\n </div>\n );\n }\n\n if (error || !workspace) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6\">\n <ErrorState\n message={error?.message || tr('workspaces.detail.notFound', 'Workspace not found')}\n action={{\n label: tr('workspaces.create.backToWorkspaces', 'Back to Workspaces'),\n onClick: () => navigate(`${basePath}/workspaces`),\n }}\n />\n </div>\n );\n }\n\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300\">\n <div className=\"mx-auto flex w-full max-w-7xl flex-col gap-6\">\n <div className=\"space-y-4\">\n <button\n onClick={() => navigate(`${basePath}/workspaces`)}\n className=\"inline-flex min-h-10 items-center gap-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:text-[var(--color-text-primary)] active:scale-[0.98]\"\n >\n <ArrowLeft size={20} aria-hidden=\"true\" />\n <span className=\"text-sm font-medium\">\n {tr('workspaces.create.backToWorkspaces', 'Back to Workspaces')}\n </span>\n </button>\n\n <div className=\"flex flex-col gap-4 rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-5 shadow-[var(--shadow-elevation-1)] lg:flex-row lg:items-start lg:justify-between\">\n <div className=\"flex min-w-0 items-start gap-4\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-xl bg-[var(--color-status-info-bgSubtle)] text-[var(--color-status-info-text)]\">\n <Briefcase size={28} aria-hidden=\"true\" />\n </div>\n\n <div className=\"min-w-0 space-y-2\">\n <div className=\"flex flex-wrap items-start gap-2\">\n <h1 className=\"text-3xl font-bold text-[var(--color-text-primary)]\">\n {workspace.name}\n </h1>\n <WorkspaceStatusBadge status={workspace.status} />\n <span className=\"inline-flex items-center rounded-md bg-[var(--color-bg-subtle)] px-2 py-1 text-xs font-medium text-[var(--color-text-secondary)]\">\n {workspace.type}\n </span>\n </div>\n <p className=\"break-all font-mono text-sm text-[var(--color-text-secondary)]\">\n /{workspace.slug}\n </p>\n </div>\n </div>\n\n <div className=\"flex flex-col gap-3 sm:flex-row\">\n <button\n onClick={() => navigate(`${basePath}/${workspace.organizationId}`)}\n className=\"inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-border-default)] px-4 py-2.5 text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]\"\n >\n <Users size={16} aria-hidden=\"true\" />\n <span>{tr('workspaces.detail.viewOrganization', 'View Organization')}</span>\n </button>\n {hasPermission(PERMISSIONS.WORKSPACE_UPDATE) && (\n <button\n onClick={() => navigate(`${basePath}/workspaces/${id}/edit`)}\n className=\"inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2.5 text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90 active:scale-[0.98]\"\n >\n <Edit size={16} aria-hidden=\"true\" />\n <span>{tr('workspaces.edit.title', 'Edit Workspace')}</span>\n </button>\n )}\n </div>\n </div>\n </div>\n\n <div className=\"rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] shadow-[var(--shadow-elevation-1)]\">\n <div className=\"overflow-x-auto border-b border-[var(--color-border-default)]\">\n <div className=\"flex min-w-max gap-2 px-4 pt-4 sm:px-6\">\n {tabItems.map((tabItem) => {\n const isActive = activeTab === tabItem.id;\n return (\n <button\n key={tabItem.id}\n onClick={() => setActiveTab(tabItem.id)}\n className={`inline-flex min-h-11 items-center rounded-t-lg border-b-2 px-4 py-3 text-sm font-medium transition-colors ${\n isActive\n ? 'border-[var(--color-action-primary-bg)] text-[var(--color-action-primary-bg)]'\n : 'border-transparent text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)]'\n }`}\n aria-pressed={isActive}\n >\n {tabItem.label}\n </button>\n );\n })}\n </div>\n </div>\n\n <div className=\"p-4 sm:p-6\">\n {activeTab === 'overview' ? (\n <div className=\"grid grid-cols-1 gap-6 xl:grid-cols-[minmax(0,1fr)_320px]\">\n <section className=\"rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-5\">\n <h2 className=\"text-lg font-semibold text-[var(--color-text-primary)]\">\n {tr('workspaces.detail.detailsSection', 'Workspace details')}\n </h2>\n\n <dl className=\"mt-5 grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {tr('common.name', 'Name')}\n </dt>\n <dd className=\"mt-1 text-sm text-[var(--color-text-primary)]\">\n {workspace.name}\n </dd>\n </div>\n <div>\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {tr('common.slug', 'Slug')}\n </dt>\n <dd className=\"mt-1 break-all font-mono text-sm text-[var(--color-text-primary)]\">\n {workspace.slug}\n </dd>\n </div>\n <div>\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {tr('common.status', 'Status')}\n </dt>\n <dd className=\"mt-1\">\n <WorkspaceStatusBadge status={workspace.status} />\n </dd>\n </div>\n <div>\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {tr('workspaces.list.column.type', 'Type')}\n </dt>\n <dd className=\"mt-1 text-sm text-[var(--color-text-primary)]\">\n {workspace.type}\n </dd>\n </div>\n <div className=\"sm:col-span-2\">\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {tr('members.detail.orgId', 'Organization ID')}\n </dt>\n <dd className=\"mt-1 break-all font-mono text-sm text-[var(--color-text-primary)]\">\n {workspace.organizationId}\n </dd>\n </div>\n {workspace.endpoint ? (\n <div className=\"sm:col-span-2\">\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {tr('workspaces.detail.endpoint', 'Endpoint')}\n </dt>\n <dd className=\"mt-1 break-all font-mono text-sm text-[var(--color-text-primary)]\">\n {workspace.endpoint}\n </dd>\n </div>\n ) : null}\n </dl>\n </section>\n\n <aside className=\"rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-5\">\n <h2 className=\"text-lg font-semibold text-[var(--color-text-primary)]\">\n {tr('common.metadata', 'Metadata')}\n </h2>\n\n <dl className=\"mt-5 space-y-4\">\n <div>\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {tr('workspaces.list.members', 'Members')}\n </dt>\n <dd className=\"mt-1 text-sm text-[var(--color-text-primary)]\">\n {resolvedMemberCount}\n </dd>\n </div>\n <div>\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {tr('common.created', 'Created')}\n </dt>\n <dd className=\"mt-1 text-sm text-[var(--color-text-primary)]\">\n {formatDate(workspace.createdAt)}\n </dd>\n </div>\n <div>\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {tr('common.lastUpdated', 'Last updated')}\n </dt>\n <dd className=\"mt-1 text-sm text-[var(--color-text-primary)]\">\n {formatDate(workspace.updatedAt)}\n </dd>\n </div>\n {workspace.region ? (\n <div>\n <dt className=\"text-sm font-medium text-[var(--color-text-secondary)]\">\n {tr('workspaces.detail.region', 'Region')}\n </dt>\n <dd className=\"mt-1 text-sm text-[var(--color-text-primary)]\">\n {workspace.region}\n </dd>\n </div>\n ) : null}\n </dl>\n </aside>\n </div>\n ) : (\n <section className=\"space-y-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h2 className=\"text-lg font-semibold text-[var(--color-text-primary)]\">\n {tr('workspaces.detail.membersTitle', 'Workspace members')}\n </h2>\n <p className=\"text-sm text-[var(--color-text-secondary)]\">\n {tr(\n 'workspaces.detail.membersSubtitle',\n 'Add organization members to this workspace and manage access.'\n )}\n </p>\n </div>\n {hasPermission(PERMISSIONS.MEMBER_INVITE) && (\n <button\n onClick={() => setIsAddMemberDialogOpen(true)}\n className=\"inline-flex min-h-11 items-center justify-center gap-2 rounded-lg bg-[var(--color-action-primary-bg)] px-4 py-2.5 text-[var(--color-action-primary-text)] transition-all duration-200 hover:opacity-90 active:scale-[0.98]\"\n >\n <UserPlus size={16} aria-hidden=\"true\" />\n <span>{tr('workspaces.detail.addMember', 'Add Member')}</span>\n </button>\n )}\n </div>\n\n {membersLoading ? (\n <div className=\"py-8\">\n <LoadingState\n message={tr(\n 'workspaces.detail.loadingMembers',\n 'Loading workspace members...'\n )}\n />\n </div>\n ) : membersError ? (\n <ErrorState\n message={membersError.message}\n action={{\n label: tr('common.retry', 'Retry'),\n onClick: () => {\n void refetchMembers();\n },\n }}\n />\n ) : members.length > 0 ? (\n <>\n <div className=\"grid gap-4 md:hidden\">\n {members.map((member) => (\n <article\n key={member.id}\n className=\"rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-4\"\n >\n <div className=\"space-y-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <h3 className=\"break-all font-mono text-sm font-semibold text-[var(--color-text-primary)]\">\n {member.userId}\n </h3>\n <p className=\"mt-1 text-sm text-[var(--color-text-secondary)]\">\n {tr('members.list.joined', 'Joined')}{' '}\n {formatDate(member.joinedAt)}\n </p>\n </div>\n <MemberRoleBadge role={member.role} />\n </div>\n\n <dl className=\"grid grid-cols-1 gap-3 text-sm\">\n <div>\n <dt className=\"text-[var(--color-text-secondary)]\">\n {tr('members.list.invitedBy', 'Invited by')}\n </dt>\n <dd className=\"mt-1 break-all font-mono text-[var(--color-text-primary)]\">\n {member.invitedBy || '—'}\n </dd>\n </div>\n </dl>\n\n <button\n onClick={() => handleRemoveMember(member.userId)}\n disabled={removingMember}\n className=\"inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-2 text-sm text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <Trash2 size={16} aria-hidden=\"true\" />\n {tr('common.remove', 'Remove')}\n </button>\n </div>\n </article>\n ))}\n </div>\n\n <div className=\"hidden overflow-hidden rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] md:block\">\n <div className=\"overflow-x-auto\">\n <table className=\"min-w-full\">\n <thead className=\"bg-[var(--color-bg-subtle)]\">\n <tr>\n <th className=\"px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]\">\n {tr('members.detail.userId', 'User ID')}\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]\">\n {tr('members.list.column.role', 'Role')}\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]\">\n {tr('members.list.joined', 'Joined')}\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]\">\n {tr('members.list.invitedBy', 'Invited by')}\n </th>\n <th className=\"px-6 py-3 text-right text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]\">\n {tr('common.actions', 'Actions')}\n </th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-[var(--color-border-default)]\">\n {members.map((member) => (\n <tr\n key={member.id}\n className=\"transition-colors hover:bg-[var(--color-bg-subtle)]\"\n >\n <td className=\"px-6 py-4 font-mono text-sm text-[var(--color-text-primary)]\">\n {member.userId}\n </td>\n <td className=\"px-6 py-4\">\n <MemberRoleBadge role={member.role} />\n </td>\n <td className=\"px-6 py-4 text-sm text-[var(--color-text-secondary)]\">\n {formatDate(member.joinedAt)}\n </td>\n <td className=\"px-6 py-4 break-all font-mono text-sm text-[var(--color-text-secondary)]\">\n {member.invitedBy || '—'}\n </td>\n <td className=\"px-6 py-4 text-right\">\n <button\n onClick={() => handleRemoveMember(member.userId)}\n disabled={removingMember}\n className=\"rounded-lg p-2 text-[var(--color-status-error-text)] transition-all duration-200 hover:bg-[var(--color-status-error-bgSubtle)] disabled:cursor-not-allowed disabled:opacity-50\"\n aria-label={`${tr('workspaces.removeMember.ariaPrefix', 'Remove')} ${member.userId} ${tr('workspaces.removeMember.ariaSuffix', 'from workspace')}`}\n title={`${tr('workspaces.removeMember.ariaPrefix', 'Remove')} ${member.userId} ${tr('workspaces.removeMember.ariaSuffix', 'from workspace')}`}\n >\n <Trash2 size={18} aria-hidden=\"true\" />\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </>\n ) : (\n <div className=\"rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-6\">\n <EmptyState\n icon={<Users size={40} aria-hidden=\"true\" />}\n title={tr('workspaces.detail.emptyMembersTitle', 'No workspace members yet')}\n description={tr(\n 'workspaces.detail.emptyMembersDescription',\n 'Add people from the parent organization to grant workspace access.'\n )}\n action={{\n label: tr('workspaces.detail.addMember', 'Add Member'),\n onClick: () => setIsAddMemberDialogOpen(true),\n }}\n />\n </div>\n )}\n </section>\n )}\n </div>\n </div>\n </div>\n\n <AddWorkspaceMemberDialog\n open={isAddMemberDialogOpen}\n onOpenChange={setIsAddMemberDialogOpen}\n workspaceId={workspace.id}\n organizationId={workspace.organizationId}\n existingMembers={members}\n onInviteOrganizationMember={() =>\n navigate(`${basePath}/${workspace.organizationId}/members/invite`)\n }\n />\n {ConfirmDialog}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceEditPage.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/workspaces/pages/WorkspaceEditPage.tsx"],"names":[],"mappings":"AAaA,wBAAgB,iBAAiB,4CAiHhC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { useOrgConsole as e } from "../../../providers/OrgConsoleProvider.js";
|
|
2
|
+
import { toast as t } from "../../../../node_modules/sonner/dist/index.js";
|
|
3
|
+
import { useTr as n } from "../../../shared/hooks/useTr.js";
|
|
4
|
+
import { LoadingState as r } from "../../../shared/components/feedback/LoadingState.js";
|
|
5
|
+
import { ErrorState as i } from "../../../shared/components/feedback/ErrorState.js";
|
|
6
|
+
import { PERMISSIONS as a } from "../../../constants/permissions.js";
|
|
7
|
+
import { useUpdateWorkspace as o, useWorkspace as s } from "../hooks/useWorkspaces.js";
|
|
8
|
+
import { WorkspaceForm as c } from "../components/WorkspaceForm.js";
|
|
9
|
+
import { ArrowLeft as l } from "lucide-react";
|
|
10
|
+
import { usePermissions as u } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
11
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
12
|
+
import { useParams as p } from "react-router-dom";
|
|
13
|
+
//#region src/organization-management/modules/workspaces/pages/WorkspaceEditPage.tsx
|
|
14
|
+
function m() {
|
|
15
|
+
let m = n(), { id: h } = p(), { navigate: g, basePath: _ = "/organizations" } = e(), { hasPermission: v, isLoading: y } = u(), { workspace: b, loading: x, error: S } = s(h), { updateWorkspace: C, loading: w } = o(), T = async (e) => {
|
|
16
|
+
if (h) try {
|
|
17
|
+
let n = await C(h, e);
|
|
18
|
+
if (n.errors?.length) throw Error(n.errors[0]?.message ?? m("workspaces.edit.failed", "Failed to update workspace"));
|
|
19
|
+
t.success(m("workspaces.edit.success", "Workspace updated successfully")), g(`${_}/workspaces/${h}`);
|
|
20
|
+
} catch (e) {
|
|
21
|
+
t.error(e instanceof Error ? e.message : m("workspaces.edit.failed", "Failed to update workspace"));
|
|
22
|
+
}
|
|
23
|
+
}, E = () => {
|
|
24
|
+
g(`${_}/workspaces/${h}`);
|
|
25
|
+
};
|
|
26
|
+
return y ? /* @__PURE__ */ d("div", {
|
|
27
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
28
|
+
children: /* @__PURE__ */ d(r, { message: m("common.loadingPermissions", "Loading permissions...") })
|
|
29
|
+
}) : v(a.WORKSPACE_UPDATE) ? x ? /* @__PURE__ */ d("div", {
|
|
30
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
31
|
+
children: /* @__PURE__ */ d(r, { message: m("workspaces.edit.loading", "Loading workspace...") })
|
|
32
|
+
}) : S || !b ? /* @__PURE__ */ d("div", {
|
|
33
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
34
|
+
children: /* @__PURE__ */ d(i, {
|
|
35
|
+
message: S?.message || m("workspaces.detail.notFound", "Workspace not found"),
|
|
36
|
+
action: {
|
|
37
|
+
label: m("workspaces.create.backToWorkspaces", "Back to Workspaces"),
|
|
38
|
+
onClick: () => g(`${_}/workspaces`)
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
}) : /* @__PURE__ */ f("div", {
|
|
42
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300",
|
|
43
|
+
children: [/* @__PURE__ */ f("div", {
|
|
44
|
+
className: "mb-6",
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ f("button", {
|
|
47
|
+
onClick: E,
|
|
48
|
+
className: "\n inline-flex items-center gap-2 mb-4\n text-[var(--color-text-secondary)]\n hover:text-[var(--color-text-primary)]\n active:scale-[0.98]\n transition-all duration-200\n ",
|
|
49
|
+
children: [/* @__PURE__ */ d(l, { size: 20 }), /* @__PURE__ */ f("span", {
|
|
50
|
+
className: "text-sm font-medium",
|
|
51
|
+
children: [
|
|
52
|
+
m("common.backTo", "Back to"),
|
|
53
|
+
" ",
|
|
54
|
+
b.name
|
|
55
|
+
]
|
|
56
|
+
})]
|
|
57
|
+
}),
|
|
58
|
+
/* @__PURE__ */ d("h1", {
|
|
59
|
+
className: "text-3xl font-bold text-[var(--color-text-primary)] mb-2",
|
|
60
|
+
children: m("workspaces.edit.title", "Edit Workspace")
|
|
61
|
+
}),
|
|
62
|
+
/* @__PURE__ */ d("p", {
|
|
63
|
+
className: "text-[var(--color-text-secondary)]",
|
|
64
|
+
children: m("workspaces.edit.subtitle", "Update workspace information")
|
|
65
|
+
})
|
|
66
|
+
]
|
|
67
|
+
}), /* @__PURE__ */ d("div", {
|
|
68
|
+
className: "max-w-2xl",
|
|
69
|
+
children: /* @__PURE__ */ d("div", {
|
|
70
|
+
className: "bg-[var(--color-bg-surface)] border border-[var(--color-border-default)] rounded-lg p-6 shadow-[var(--shadow-elevation-1)]",
|
|
71
|
+
children: /* @__PURE__ */ d(c, {
|
|
72
|
+
workspace: b,
|
|
73
|
+
onSubmit: T,
|
|
74
|
+
onCancel: E,
|
|
75
|
+
loading: w
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
|
+
})]
|
|
79
|
+
}) : /* @__PURE__ */ d("div", {
|
|
80
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
81
|
+
children: /* @__PURE__ */ d("div", {
|
|
82
|
+
className: "p-8 text-center text-[var(--color-text-secondary)]",
|
|
83
|
+
children: m("workspaces.edit.noPermission", "You don't have permission to edit workspaces.")
|
|
84
|
+
})
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//#endregion
|
|
88
|
+
export { m as WorkspaceEditPage };
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=WorkspaceEditPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceEditPage.js","names":[],"sources":["../../../../../src/organization-management/modules/workspaces/pages/WorkspaceEditPage.tsx"],"sourcesContent":["import { useParams } from 'react-router-dom';\nimport { ArrowLeft } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useOrgConsole } from '../../../providers/OrgConsoleProvider';\nimport { useWorkspace, useUpdateWorkspace } from '../hooks/useWorkspaces';\nimport { WorkspaceForm } from '../components/WorkspaceForm';\nimport { LoadingState } from '../../../shared/components/feedback/LoadingState';\nimport { ErrorState } from '../../../shared/components/feedback/ErrorState';\nimport { PERMISSIONS } from '../../../constants/permissions';\nimport { useTr } from '../../../shared/hooks/useTr';\nimport type { UpdateWorkspaceInput } from '../types';\n\nexport function WorkspaceEditPage() {\n const tr = useTr();\n const { id } = useParams<{ id: string }>();\n const { navigate, basePath = '/organizations' } = useOrgConsole();\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n const { workspace, loading: fetchLoading, error } = useWorkspace(id!);\n const { updateWorkspace, loading: updateLoading } = useUpdateWorkspace();\n\n const handleSubmit = async (data: UpdateWorkspaceInput) => {\n if (!id) return;\n\n try {\n const result = await updateWorkspace(id, data);\n if (result.errors?.length) {\n throw new Error(\n result.errors[0]?.message ?? tr('workspaces.edit.failed', 'Failed to update workspace')\n );\n }\n\n toast.success(tr('workspaces.edit.success', 'Workspace updated successfully'));\n navigate(`${basePath}/workspaces/${id}`);\n } catch (error) {\n toast.error(\n error instanceof Error\n ? error.message\n : tr('workspaces.edit.failed', 'Failed to update workspace')\n );\n }\n };\n\n const handleCancel = () => {\n navigate(`${basePath}/workspaces/${id}`);\n };\n\n if (permissionsLoading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <LoadingState message={tr('common.loadingPermissions', 'Loading permissions...')} />\n </div>\n );\n }\n\n if (!hasPermission(PERMISSIONS.WORKSPACE_UPDATE)) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] p-6\">\n <div className=\"p-8 text-center text-[var(--color-text-secondary)]\">\n {tr('workspaces.edit.noPermission', \"You don't have permission to edit workspaces.\")}\n </div>\n </div>\n );\n }\n\n if (fetchLoading) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6\">\n <LoadingState message={tr('workspaces.edit.loading', 'Loading workspace...')} />\n </div>\n );\n }\n\n if (error || !workspace) {\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6\">\n <ErrorState\n message={error?.message || tr('workspaces.detail.notFound', 'Workspace not found')}\n action={{\n label: tr('workspaces.create.backToWorkspaces', 'Back to Workspaces'),\n onClick: () => navigate(`${basePath}/workspaces`),\n }}\n />\n </div>\n );\n }\n\n return (\n <div className=\"min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300\">\n <div className=\"mb-6\">\n <button\n onClick={handleCancel}\n className=\"\n inline-flex items-center gap-2 mb-4\n text-[var(--color-text-secondary)]\n hover:text-[var(--color-text-primary)]\n active:scale-[0.98]\n transition-all duration-200\n \"\n >\n <ArrowLeft size={20} />\n <span className=\"text-sm font-medium\">\n {tr('common.backTo', 'Back to')} {workspace.name}\n </span>\n </button>\n\n <h1 className=\"text-3xl font-bold text-[var(--color-text-primary)] mb-2\">\n {tr('workspaces.edit.title', 'Edit Workspace')}\n </h1>\n <p className=\"text-[var(--color-text-secondary)]\">\n {tr('workspaces.edit.subtitle', 'Update workspace information')}\n </p>\n </div>\n\n <div className=\"max-w-2xl\">\n <div className=\"bg-[var(--color-bg-surface)] border border-[var(--color-border-default)] rounded-lg p-6 shadow-[var(--shadow-elevation-1)]\">\n <WorkspaceForm\n workspace={workspace}\n onSubmit={handleSubmit}\n onCancel={handleCancel}\n loading={updateLoading}\n />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAgB,IAAoB;CAClC,IAAM,IAAK,GAAO,EACZ,EAAE,UAAO,GAA2B,EACpC,EAAE,aAAU,cAAW,qBAAqB,GAAe,EAC3D,EAAE,kBAAe,WAAW,MAAuB,GAAgB,EACnE,EAAE,cAAW,SAAS,GAAc,aAAU,EAAa,EAAI,EAC/D,EAAE,oBAAiB,SAAS,MAAkB,GAAoB,EAElE,IAAe,OAAO,MAA+B;AACpD,QAEL,KAAI;GACF,IAAM,IAAS,MAAM,EAAgB,GAAI,EAAK;AAC9C,OAAI,EAAO,QAAQ,OACjB,OAAU,MACR,EAAO,OAAO,IAAI,WAAW,EAAG,0BAA0B,6BAA6B,CACxF;AAIH,GADA,EAAM,QAAQ,EAAG,2BAA2B,iCAAiC,CAAC,EAC9E,EAAS,GAAG,EAAS,cAAc,IAAK;WACjC,GAAO;AACd,KAAM,MACJ,aAAiB,QACb,EAAM,UACN,EAAG,0BAA0B,6BAA6B,CAC/D;;IAIC,UAAqB;AACzB,IAAS,GAAG,EAAS,cAAc,IAAK;;AA2C1C,QAxCI,IAEA,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAc,SAAS,EAAG,6BAA6B,yBAAyB,EAAI,CAAA;EAChF,CAAA,GAIL,EAAc,EAAY,iBAAiB,GAU5C,IAEA,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAc,SAAS,EAAG,2BAA2B,uBAAuB,EAAI,CAAA;EAC5E,CAAA,GAIN,KAAS,CAAC,IAEV,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD;GACE,SAAS,GAAO,WAAW,EAAG,8BAA8B,sBAAsB;GAClF,QAAQ;IACN,OAAO,EAAG,sCAAsC,qBAAqB;IACrE,eAAe,EAAS,GAAG,EAAS,aAAa;IAClD;GACD,CAAA;EACE,CAAA,GAKR,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf;IACE,kBAAC,UAAD;KACE,SAAS;KACT,WAAU;eAFZ,CAUE,kBAAC,GAAD,EAAW,MAAM,IAAM,CAAA,EACvB,kBAAC,QAAD;MAAM,WAAU;gBAAhB;OACG,EAAG,iBAAiB,UAAU;OAAC;OAAE,EAAU;OACvC;QACA;;IAET,kBAAC,MAAD;KAAI,WAAU;eACX,EAAG,yBAAyB,iBAAiB;KAC3C,CAAA;IACL,kBAAC,KAAD;KAAG,WAAU;eACV,EAAG,4BAA4B,+BAA+B;KAC7D,CAAA;IACA;MAEN,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KACa;KACX,UAAU;KACV,UAAU;KACV,SAAS;KACT,CAAA;IACE,CAAA;GACF,CAAA,CACF;MAnEJ,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAG,gCAAgC,gDAAgD;GAChF,CAAA;EACF,CAAA"}
|