@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,448 @@
|
|
|
1
|
+
import { useOrgConsole as e } from "../../../providers/OrgConsoleProvider.js";
|
|
2
|
+
import { toast as t } from "../../../../node_modules/sonner/dist/index.js";
|
|
3
|
+
import { useDeleteOrganization as n, useOrganizations as r } from "../hooks/useOrganizations.js";
|
|
4
|
+
import { OrganizationStatusBadge as i } from "../components/OrganizationStatusBadge.js";
|
|
5
|
+
import { useTr as a } from "../../../shared/hooks/useTr.js";
|
|
6
|
+
import { SearchInput as o } from "../../../shared/components/input/SearchInput.js";
|
|
7
|
+
import { SelectionCheckbox as s } from "../../../shared/components/input/SelectionCheckbox.js";
|
|
8
|
+
import { LoadingState as c } from "../../../shared/components/feedback/LoadingState.js";
|
|
9
|
+
import { ErrorState as ee } from "../../../shared/components/feedback/ErrorState.js";
|
|
10
|
+
import { EmptyState as te } from "../../../shared/components/feedback/EmptyState.js";
|
|
11
|
+
import { useDebouncedValue as ne } from "../../../shared/hooks/useDebouncedValue.js";
|
|
12
|
+
import { useConfirmDialog as l } from "../../../shared/components/dialog/ConfirmDialog.js";
|
|
13
|
+
import { PERMISSIONS as u } from "../../../constants/permissions.js";
|
|
14
|
+
import { useOrganizationPageView as d } from "../../../hooks/useOrganizationPageView.js";
|
|
15
|
+
import { isNative as f, nativeConfirm as re, nativeImpact as ie, nativeNotify as p, nativeToast as m } from "../../../../utils/nativeBridge.js";
|
|
16
|
+
import { useEffect as ae, useMemo as h, useState as g } from "react";
|
|
17
|
+
import { Building2 as _, Eye as v, Plus as y, RefreshCw as b, SquarePen as x, Trash2 as S } from "lucide-react";
|
|
18
|
+
import { useFeatureFlagDetails as oe } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
19
|
+
import { usePermissions as C } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
20
|
+
import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
|
|
21
|
+
//#region src/organization-management/modules/organizations/pages/OrganizationsListPage.tsx
|
|
22
|
+
function D(e) {
|
|
23
|
+
return new Date(e).toLocaleDateString();
|
|
24
|
+
}
|
|
25
|
+
function O() {
|
|
26
|
+
d("organizations.list");
|
|
27
|
+
let O = a(), { navigate: k, basePath: A = "/organizations" } = e(), { hasPermission: j, isLoading: se } = C(), M = oe("organization.create"), N = M ? !!M.value : !0, [P, F] = g(""), I = ne(P, 300), L = {}, [R, z] = g(/* @__PURE__ */ new Set()), { openConfirmDialog: B, ConfirmDialog: V } = l(), { organizations: H, loading: U, error: W, refetch: G } = r({
|
|
28
|
+
...L,
|
|
29
|
+
search: I || void 0
|
|
30
|
+
}, 20, 0), { deleteOrganization: ce, loading: K } = n();
|
|
31
|
+
ae(() => {
|
|
32
|
+
z((e) => {
|
|
33
|
+
let t = new Set(H.map((e) => e.id)), n = new Set([...e].filter((e) => t.has(e)));
|
|
34
|
+
return n.size === e.size ? e : n;
|
|
35
|
+
});
|
|
36
|
+
}, [H]);
|
|
37
|
+
let q = h(() => H.filter((e) => R.has(e.id)), [H, R]), J = H.length > 0 && H.every((e) => R.has(e.id)), Y = H.some((e) => R.has(e.id)) && !J, X = async (e) => {
|
|
38
|
+
try {
|
|
39
|
+
let n = (await Promise.allSettled(e.map(async (e) => {
|
|
40
|
+
let t = await ce(e);
|
|
41
|
+
if (t.errors?.length) throw Error(t.errors[0]?.message ?? "Failed to delete organization");
|
|
42
|
+
}))).find((e) => e.status === "rejected");
|
|
43
|
+
if (n?.status === "rejected") throw n.reason;
|
|
44
|
+
z(/* @__PURE__ */ new Set()), await G();
|
|
45
|
+
let r = e.length === 1 ? O("organizations.delete.successSingle", "Organization deleted successfully") : `${e.length} ${O("organizations.delete.successMany", "organizations deleted successfully")}`;
|
|
46
|
+
t.success(r), p("success"), f() && m(r);
|
|
47
|
+
} catch (e) {
|
|
48
|
+
let n = e instanceof Error ? e.message : O("organizations.delete.failed", "Failed to delete organization");
|
|
49
|
+
t.error(n), p("error"), f() && m(n);
|
|
50
|
+
}
|
|
51
|
+
}, Z = (e, t) => {
|
|
52
|
+
ie("medium");
|
|
53
|
+
let n = O("organizations.delete.title", "Delete organization"), r = `${O("organizations.delete.confirmPrefix", "Delete")} ${t}? ${O("common.cannotBeUndone", "This action cannot be undone.")}`;
|
|
54
|
+
re({
|
|
55
|
+
title: n,
|
|
56
|
+
message: r,
|
|
57
|
+
okButtonTitle: O("common.delete", "Delete")
|
|
58
|
+
}).then((t) => {
|
|
59
|
+
t === null ? B({
|
|
60
|
+
title: n,
|
|
61
|
+
description: r,
|
|
62
|
+
confirmText: O("common.delete", "Delete"),
|
|
63
|
+
variant: "danger",
|
|
64
|
+
onConfirm: () => {
|
|
65
|
+
X([e]);
|
|
66
|
+
}
|
|
67
|
+
}) : t && X([e]);
|
|
68
|
+
});
|
|
69
|
+
}, le = () => {
|
|
70
|
+
q.length !== 0 && B({
|
|
71
|
+
title: O("organizations.delete.bulkTitle", "Delete selected organizations"),
|
|
72
|
+
description: `${O("organizations.delete.bulkPrefix", "Delete")} ${q.length} ${O(q.length === 1 ? "organizations.delete.bulkSuffixSingle" : "organizations.delete.bulkSuffixMany", q.length === 1 ? "selected organization?" : "selected organizations?")} ${O("common.cannotBeUndone", "This action cannot be undone.")}`,
|
|
73
|
+
confirmText: `${O("common.delete", "Delete")} ${q.length}`,
|
|
74
|
+
variant: "danger",
|
|
75
|
+
onConfirm: () => {
|
|
76
|
+
X(q.map((e) => e.id));
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}, Q = (e, t) => {
|
|
80
|
+
z((n) => {
|
|
81
|
+
let r = new Set(n);
|
|
82
|
+
return t ? r.add(e) : r.delete(e), r;
|
|
83
|
+
});
|
|
84
|
+
}, $ = (e) => {
|
|
85
|
+
z((t) => {
|
|
86
|
+
let n = new Set(t);
|
|
87
|
+
return H.forEach((t) => {
|
|
88
|
+
e ? n.add(t.id) : n.delete(t.id);
|
|
89
|
+
}), n;
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
return se ? /* @__PURE__ */ T("div", {
|
|
93
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
94
|
+
children: /* @__PURE__ */ T(c, { message: O("common.loadingPermissions", "Loading permissions...") })
|
|
95
|
+
}) : j(u.ORG_LIST) ? U ? /* @__PURE__ */ T("div", {
|
|
96
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
97
|
+
children: /* @__PURE__ */ T(c, { message: O("organizations.list.loading", "Loading organizations...") })
|
|
98
|
+
}) : W ? /* @__PURE__ */ T("div", {
|
|
99
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6",
|
|
100
|
+
children: /* @__PURE__ */ T(ee, {
|
|
101
|
+
message: W.message,
|
|
102
|
+
action: {
|
|
103
|
+
label: O("common.retry", "Retry"),
|
|
104
|
+
onClick: () => {
|
|
105
|
+
G();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
})
|
|
109
|
+
}) : /* @__PURE__ */ E("div", {
|
|
110
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] px-4 py-6 sm:px-6 animate-in fade-in duration-300",
|
|
111
|
+
children: [/* @__PURE__ */ E("div", {
|
|
112
|
+
className: "mx-auto flex w-full max-w-7xl flex-col gap-6",
|
|
113
|
+
children: [
|
|
114
|
+
/* @__PURE__ */ E("div", {
|
|
115
|
+
className: "flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between",
|
|
116
|
+
children: [/* @__PURE__ */ E("div", {
|
|
117
|
+
className: "space-y-2",
|
|
118
|
+
children: [/* @__PURE__ */ T("h1", {
|
|
119
|
+
className: "text-3xl font-bold text-[var(--color-text-primary)]",
|
|
120
|
+
children: O("organizations.list.title", "Organizations")
|
|
121
|
+
}), /* @__PURE__ */ T("p", {
|
|
122
|
+
className: "max-w-2xl text-[var(--color-text-secondary)]",
|
|
123
|
+
children: O("organizations.list.subtitle", "Manage tenant organizations and the workspaces that belong to them.")
|
|
124
|
+
})]
|
|
125
|
+
}), N && j(u.ORG_CREATE) && /* @__PURE__ */ E("button", {
|
|
126
|
+
onClick: () => k(`${A}/new`),
|
|
127
|
+
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]",
|
|
128
|
+
children: [/* @__PURE__ */ T(y, {
|
|
129
|
+
size: 18,
|
|
130
|
+
"aria-hidden": "true"
|
|
131
|
+
}), /* @__PURE__ */ T("span", {
|
|
132
|
+
className: "font-medium",
|
|
133
|
+
children: O("organizations.create.button", "Create Organization")
|
|
134
|
+
})]
|
|
135
|
+
})]
|
|
136
|
+
}),
|
|
137
|
+
/* @__PURE__ */ E("div", {
|
|
138
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-4 shadow-[var(--shadow-elevation-1)]",
|
|
139
|
+
children: [/* @__PURE__ */ E("div", {
|
|
140
|
+
className: "flex flex-col gap-3 sm:flex-row sm:items-center",
|
|
141
|
+
children: [/* @__PURE__ */ T(o, {
|
|
142
|
+
value: P,
|
|
143
|
+
onChange: F,
|
|
144
|
+
placeholder: O("organizations.list.searchPlaceholder", "Search organizations..."),
|
|
145
|
+
label: O("organizations.list.searchLabel", "Search organizations"),
|
|
146
|
+
inputId: "organizations-search",
|
|
147
|
+
className: "flex-1"
|
|
148
|
+
}), /* @__PURE__ */ T("button", {
|
|
149
|
+
onClick: () => {
|
|
150
|
+
G();
|
|
151
|
+
},
|
|
152
|
+
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] px-4 py-2 text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)] active:scale-95",
|
|
153
|
+
"aria-label": O("organizations.list.refresh", "Refresh organizations"),
|
|
154
|
+
title: O("organizations.list.refresh", "Refresh organizations"),
|
|
155
|
+
children: /* @__PURE__ */ T(b, {
|
|
156
|
+
size: 18,
|
|
157
|
+
"aria-hidden": "true"
|
|
158
|
+
})
|
|
159
|
+
})]
|
|
160
|
+
}), H.length > 0 ? /* @__PURE__ */ E("div", {
|
|
161
|
+
className: "mt-4 flex flex-col gap-3 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-4 sm:flex-row sm:items-center sm:justify-between",
|
|
162
|
+
children: [/* @__PURE__ */ E("div", {
|
|
163
|
+
className: "flex flex-wrap items-center gap-3",
|
|
164
|
+
children: [/* @__PURE__ */ E("label", {
|
|
165
|
+
className: "flex items-center gap-2 text-sm text-[var(--color-text-primary)]",
|
|
166
|
+
children: [/* @__PURE__ */ T(s, {
|
|
167
|
+
checked: J,
|
|
168
|
+
indeterminate: Y,
|
|
169
|
+
onChange: $,
|
|
170
|
+
ariaLabel: O("organizations.list.selectAll", "Select all organizations")
|
|
171
|
+
}), /* @__PURE__ */ T("span", { children: O("common.selectAllVisible", "Select all visible") })]
|
|
172
|
+
}), R.size > 0 ? /* @__PURE__ */ T("button", {
|
|
173
|
+
onClick: () => z(/* @__PURE__ */ new Set()),
|
|
174
|
+
className: "text-sm text-[var(--color-text-secondary)] transition-colors hover:text-[var(--color-text-primary)]",
|
|
175
|
+
children: O("common.clearSelection", "Clear selection")
|
|
176
|
+
}) : null]
|
|
177
|
+
}), /* @__PURE__ */ E("div", {
|
|
178
|
+
className: "flex flex-col gap-2 sm:flex-row sm:items-center",
|
|
179
|
+
children: [/* @__PURE__ */ E("span", {
|
|
180
|
+
className: "text-sm text-[var(--color-text-secondary)]",
|
|
181
|
+
children: [
|
|
182
|
+
R.size,
|
|
183
|
+
" ",
|
|
184
|
+
O("common.selected", "selected")
|
|
185
|
+
]
|
|
186
|
+
}), j(u.ORG_DELETE) && /* @__PURE__ */ E("button", {
|
|
187
|
+
onClick: le,
|
|
188
|
+
disabled: q.length === 0 || K,
|
|
189
|
+
className: "inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-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",
|
|
190
|
+
children: [
|
|
191
|
+
/* @__PURE__ */ T(S, {
|
|
192
|
+
size: 16,
|
|
193
|
+
"aria-hidden": "true"
|
|
194
|
+
}),
|
|
195
|
+
/* @__PURE__ */ T("span", { children: O("common.deleteSelected", "Delete Selected") }),
|
|
196
|
+
q.length > 0 ? /* @__PURE__ */ E("span", { children: [
|
|
197
|
+
"(",
|
|
198
|
+
q.length,
|
|
199
|
+
")"
|
|
200
|
+
] }) : null
|
|
201
|
+
]
|
|
202
|
+
})]
|
|
203
|
+
})]
|
|
204
|
+
}) : null]
|
|
205
|
+
}),
|
|
206
|
+
H.length === 0 ? /* @__PURE__ */ T("div", {
|
|
207
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-6 shadow-[var(--shadow-elevation-1)]",
|
|
208
|
+
children: /* @__PURE__ */ T(te, {
|
|
209
|
+
icon: /* @__PURE__ */ T(_, {
|
|
210
|
+
size: 40,
|
|
211
|
+
"aria-hidden": "true"
|
|
212
|
+
}),
|
|
213
|
+
title: O("organizations.list.emptyTitle", "No organizations found"),
|
|
214
|
+
description: O("organizations.list.emptyDescription", "Create your first organization to start managing workspaces, members, and invites."),
|
|
215
|
+
action: N && j(u.ORG_CREATE) ? {
|
|
216
|
+
label: O("organizations.create.button", "Create Organization"),
|
|
217
|
+
onClick: () => k(`${A}/new`)
|
|
218
|
+
} : void 0
|
|
219
|
+
})
|
|
220
|
+
}) : /* @__PURE__ */ E(w, { children: [/* @__PURE__ */ T("div", {
|
|
221
|
+
className: "grid gap-4 md:hidden",
|
|
222
|
+
children: H.map((e) => /* @__PURE__ */ E("article", {
|
|
223
|
+
className: "rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-4 shadow-[var(--shadow-elevation-1)]",
|
|
224
|
+
children: [/* @__PURE__ */ E("div", {
|
|
225
|
+
className: "flex items-start gap-3",
|
|
226
|
+
children: [/* @__PURE__ */ T(s, {
|
|
227
|
+
checked: R.has(e.id),
|
|
228
|
+
onChange: (t) => Q(e.id, t),
|
|
229
|
+
ariaLabel: `${O("organizations.list.selectOne", "Select organization")} ${e.name}`
|
|
230
|
+
}), /* @__PURE__ */ E("div", {
|
|
231
|
+
className: "flex min-w-0 flex-1 gap-3",
|
|
232
|
+
children: [e.logo ? /* @__PURE__ */ T("img", {
|
|
233
|
+
src: e.logo,
|
|
234
|
+
alt: `${e.name} ${O("common.logo", "logo")}`,
|
|
235
|
+
className: "h-12 w-12 rounded-lg object-cover"
|
|
236
|
+
}) : /* @__PURE__ */ T("div", {
|
|
237
|
+
className: "flex h-12 w-12 items-center justify-center rounded-lg bg-[var(--color-action-primary-bg)]/12 text-base font-semibold text-[var(--color-action-primary-bg)]",
|
|
238
|
+
children: e.name[0]
|
|
239
|
+
}), /* @__PURE__ */ E("div", {
|
|
240
|
+
className: "min-w-0 flex-1",
|
|
241
|
+
children: [
|
|
242
|
+
/* @__PURE__ */ E("div", {
|
|
243
|
+
className: "flex flex-wrap items-start gap-2",
|
|
244
|
+
children: [/* @__PURE__ */ T("h2", {
|
|
245
|
+
className: "text-base font-semibold text-[var(--color-text-primary)]",
|
|
246
|
+
children: e.name
|
|
247
|
+
}), /* @__PURE__ */ T(i, { status: e.status })]
|
|
248
|
+
}),
|
|
249
|
+
/* @__PURE__ */ E("p", {
|
|
250
|
+
className: "mt-1 break-all font-mono text-sm text-[var(--color-text-muted)]",
|
|
251
|
+
children: ["/", e.slug]
|
|
252
|
+
}),
|
|
253
|
+
/* @__PURE__ */ E("dl", {
|
|
254
|
+
className: "mt-3 grid grid-cols-2 gap-3 text-sm",
|
|
255
|
+
children: [/* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("dt", {
|
|
256
|
+
className: "text-[var(--color-text-secondary)]",
|
|
257
|
+
children: O("organizations.list.column.workspaces", "Workspaces")
|
|
258
|
+
}), /* @__PURE__ */ T("dd", {
|
|
259
|
+
className: "font-medium text-[var(--color-text-primary)]",
|
|
260
|
+
children: e.workspaceCount ?? 0
|
|
261
|
+
})] }), /* @__PURE__ */ E("div", { children: [/* @__PURE__ */ T("dt", {
|
|
262
|
+
className: "text-[var(--color-text-secondary)]",
|
|
263
|
+
children: O("common.created", "Created")
|
|
264
|
+
}), /* @__PURE__ */ T("dd", {
|
|
265
|
+
className: "font-medium text-[var(--color-text-primary)]",
|
|
266
|
+
children: D(e.createdAt)
|
|
267
|
+
})] })]
|
|
268
|
+
})
|
|
269
|
+
]
|
|
270
|
+
})]
|
|
271
|
+
})]
|
|
272
|
+
}), /* @__PURE__ */ E("div", {
|
|
273
|
+
className: "mt-4 flex flex-wrap gap-2 border-t border-[var(--color-border-default)] pt-4",
|
|
274
|
+
children: [
|
|
275
|
+
/* @__PURE__ */ E("button", {
|
|
276
|
+
onClick: () => k(`${A}/${e.id}`),
|
|
277
|
+
className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-border-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]",
|
|
278
|
+
children: [/* @__PURE__ */ T(v, {
|
|
279
|
+
size: 16,
|
|
280
|
+
"aria-hidden": "true"
|
|
281
|
+
}), O("common.view", "View")]
|
|
282
|
+
}),
|
|
283
|
+
j(u.ORG_UPDATE) && /* @__PURE__ */ E("button", {
|
|
284
|
+
onClick: () => k(`${A}/${e.id}/edit`),
|
|
285
|
+
className: "inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-border-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]",
|
|
286
|
+
children: [/* @__PURE__ */ T(x, {
|
|
287
|
+
size: 16,
|
|
288
|
+
"aria-hidden": "true"
|
|
289
|
+
}), O("common.edit", "Edit")]
|
|
290
|
+
}),
|
|
291
|
+
j(u.ORG_DELETE) && /* @__PURE__ */ E("button", {
|
|
292
|
+
onClick: () => Z(e.id, e.name),
|
|
293
|
+
disabled: K,
|
|
294
|
+
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",
|
|
295
|
+
children: [/* @__PURE__ */ T(S, {
|
|
296
|
+
size: 16,
|
|
297
|
+
"aria-hidden": "true"
|
|
298
|
+
}), O("common.delete", "Delete")]
|
|
299
|
+
})
|
|
300
|
+
]
|
|
301
|
+
})]
|
|
302
|
+
}, e.id))
|
|
303
|
+
}), /* @__PURE__ */ T("div", {
|
|
304
|
+
className: "hidden overflow-hidden rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] shadow-[var(--shadow-elevation-1)] md:block",
|
|
305
|
+
children: /* @__PURE__ */ T("div", {
|
|
306
|
+
className: "overflow-x-auto",
|
|
307
|
+
children: /* @__PURE__ */ E("table", {
|
|
308
|
+
className: "min-w-full",
|
|
309
|
+
children: [/* @__PURE__ */ T("thead", {
|
|
310
|
+
className: "bg-[var(--color-bg-subtle)]",
|
|
311
|
+
children: /* @__PURE__ */ E("tr", { children: [
|
|
312
|
+
/* @__PURE__ */ T("th", {
|
|
313
|
+
className: "w-12 px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
314
|
+
children: /* @__PURE__ */ T(s, {
|
|
315
|
+
checked: J,
|
|
316
|
+
indeterminate: Y,
|
|
317
|
+
onChange: $,
|
|
318
|
+
ariaLabel: O("organizations.list.selectAll", "Select all organizations")
|
|
319
|
+
})
|
|
320
|
+
}),
|
|
321
|
+
/* @__PURE__ */ T("th", {
|
|
322
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
323
|
+
children: O("organizations.list.column.organization", "Organization")
|
|
324
|
+
}),
|
|
325
|
+
/* @__PURE__ */ T("th", {
|
|
326
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
327
|
+
children: O("common.status", "Status")
|
|
328
|
+
}),
|
|
329
|
+
/* @__PURE__ */ T("th", {
|
|
330
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
331
|
+
children: O("organizations.list.column.workspaces", "Workspaces")
|
|
332
|
+
}),
|
|
333
|
+
/* @__PURE__ */ T("th", {
|
|
334
|
+
className: "px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
335
|
+
children: O("common.created", "Created")
|
|
336
|
+
}),
|
|
337
|
+
/* @__PURE__ */ T("th", {
|
|
338
|
+
className: "px-6 py-3 text-right text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]",
|
|
339
|
+
children: O("common.actions", "Actions")
|
|
340
|
+
})
|
|
341
|
+
] })
|
|
342
|
+
}), /* @__PURE__ */ T("tbody", {
|
|
343
|
+
className: "divide-y divide-[var(--color-border-default)]",
|
|
344
|
+
children: H.map((e) => /* @__PURE__ */ E("tr", {
|
|
345
|
+
className: "transition-colors hover:bg-[var(--color-bg-subtle)]",
|
|
346
|
+
children: [
|
|
347
|
+
/* @__PURE__ */ T("td", {
|
|
348
|
+
className: "px-6 py-4 align-top",
|
|
349
|
+
children: /* @__PURE__ */ T(s, {
|
|
350
|
+
checked: R.has(e.id),
|
|
351
|
+
onChange: (t) => Q(e.id, t),
|
|
352
|
+
ariaLabel: `${O("organizations.list.selectOne", "Select organization")} ${e.name}`
|
|
353
|
+
})
|
|
354
|
+
}),
|
|
355
|
+
/* @__PURE__ */ T("td", {
|
|
356
|
+
className: "px-6 py-4",
|
|
357
|
+
children: /* @__PURE__ */ E("div", {
|
|
358
|
+
className: "flex items-start gap-3",
|
|
359
|
+
children: [e.logo ? /* @__PURE__ */ T("img", {
|
|
360
|
+
src: e.logo,
|
|
361
|
+
alt: `${e.name} ${O("common.logo", "logo")}`,
|
|
362
|
+
className: "h-10 w-10 rounded-lg object-cover"
|
|
363
|
+
}) : /* @__PURE__ */ T("div", {
|
|
364
|
+
className: "flex h-10 w-10 items-center justify-center rounded-lg bg-[var(--color-action-primary-bg)]/12 font-semibold text-[var(--color-action-primary-bg)]",
|
|
365
|
+
children: e.name[0]
|
|
366
|
+
}), /* @__PURE__ */ E("div", {
|
|
367
|
+
className: "min-w-0",
|
|
368
|
+
children: [/* @__PURE__ */ T("p", {
|
|
369
|
+
className: "font-medium text-[var(--color-text-primary)]",
|
|
370
|
+
children: e.name
|
|
371
|
+
}), /* @__PURE__ */ E("p", {
|
|
372
|
+
className: "break-all font-mono text-sm text-[var(--color-text-muted)]",
|
|
373
|
+
children: ["/", e.slug]
|
|
374
|
+
})]
|
|
375
|
+
})]
|
|
376
|
+
})
|
|
377
|
+
}),
|
|
378
|
+
/* @__PURE__ */ T("td", {
|
|
379
|
+
className: "px-6 py-4 align-top",
|
|
380
|
+
children: /* @__PURE__ */ T(i, { status: e.status })
|
|
381
|
+
}),
|
|
382
|
+
/* @__PURE__ */ T("td", {
|
|
383
|
+
className: "px-6 py-4 align-top text-[var(--color-text-primary)]",
|
|
384
|
+
children: e.workspaceCount ?? 0
|
|
385
|
+
}),
|
|
386
|
+
/* @__PURE__ */ T("td", {
|
|
387
|
+
className: "px-6 py-4 align-top text-sm text-[var(--color-text-secondary)]",
|
|
388
|
+
children: D(e.createdAt)
|
|
389
|
+
}),
|
|
390
|
+
/* @__PURE__ */ T("td", {
|
|
391
|
+
className: "px-6 py-4 align-top",
|
|
392
|
+
children: /* @__PURE__ */ E("div", {
|
|
393
|
+
className: "flex items-center justify-end gap-2",
|
|
394
|
+
children: [
|
|
395
|
+
/* @__PURE__ */ T("button", {
|
|
396
|
+
onClick: () => k(`${A}/${e.id}`),
|
|
397
|
+
className: "rounded-lg p-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:bg-[var(--color-bg-muted)] hover:text-[var(--color-text-primary)]",
|
|
398
|
+
title: `${O("common.view", "View")} ${e.name}`,
|
|
399
|
+
"aria-label": `${O("common.view", "View")} ${e.name}`,
|
|
400
|
+
children: /* @__PURE__ */ T(v, {
|
|
401
|
+
size: 18,
|
|
402
|
+
"aria-hidden": "true"
|
|
403
|
+
})
|
|
404
|
+
}),
|
|
405
|
+
j(u.ORG_UPDATE) && /* @__PURE__ */ T("button", {
|
|
406
|
+
onClick: () => k(`${A}/${e.id}/edit`),
|
|
407
|
+
className: "rounded-lg p-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:bg-[var(--color-bg-muted)] hover:text-[var(--color-text-primary)]",
|
|
408
|
+
title: `${O("common.edit", "Edit")} ${e.name}`,
|
|
409
|
+
"aria-label": `${O("common.edit", "Edit")} ${e.name}`,
|
|
410
|
+
children: /* @__PURE__ */ T(x, {
|
|
411
|
+
size: 18,
|
|
412
|
+
"aria-hidden": "true"
|
|
413
|
+
})
|
|
414
|
+
}),
|
|
415
|
+
j(u.ORG_DELETE) && /* @__PURE__ */ T("button", {
|
|
416
|
+
onClick: () => Z(e.id, e.name),
|
|
417
|
+
disabled: K,
|
|
418
|
+
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",
|
|
419
|
+
title: `${O("common.delete", "Delete")} ${e.name}`,
|
|
420
|
+
"aria-label": `${O("common.delete", "Delete")} ${e.name}`,
|
|
421
|
+
children: /* @__PURE__ */ T(S, {
|
|
422
|
+
size: 18,
|
|
423
|
+
"aria-hidden": "true"
|
|
424
|
+
})
|
|
425
|
+
})
|
|
426
|
+
]
|
|
427
|
+
})
|
|
428
|
+
})
|
|
429
|
+
]
|
|
430
|
+
}, e.id))
|
|
431
|
+
})]
|
|
432
|
+
})
|
|
433
|
+
})
|
|
434
|
+
})] })
|
|
435
|
+
]
|
|
436
|
+
}), V]
|
|
437
|
+
}) : /* @__PURE__ */ T("div", {
|
|
438
|
+
className: "min-h-full bg-[var(--color-bg-canvas)] p-6",
|
|
439
|
+
children: /* @__PURE__ */ T("div", {
|
|
440
|
+
className: "p-8 text-center text-[var(--color-text-secondary)]",
|
|
441
|
+
children: O("organizations.list.noPermission", "You don't have permission to view organizations.")
|
|
442
|
+
})
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
//#endregion
|
|
446
|
+
export { O as OrganizationsListPage };
|
|
447
|
+
|
|
448
|
+
//# sourceMappingURL=OrganizationsListPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrganizationsListPage.js","names":[],"sources":["../../../../../src/organization-management/modules/organizations/pages/OrganizationsListPage.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport { Building2, Eye, Plus, RefreshCw, SquarePen, Trash2 } from 'lucide-react';\nimport { toast } from 'sonner';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useFeatureFlagDetails } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useOrgConsole } from '../../../providers/OrgConsoleProvider';\nimport { useDeleteOrganization, useOrganizations } from '../hooks/useOrganizations';\nimport { OrganizationStatusBadge } from '../components/OrganizationStatusBadge';\nimport { SearchInput } from '../../../shared/components/input/SearchInput';\nimport { SelectionCheckbox } from '../../../shared/components/input/SelectionCheckbox';\nimport { LoadingState } from '../../../shared/components/feedback/LoadingState';\nimport { ErrorState } from '../../../shared/components/feedback/ErrorState';\nimport { EmptyState } from '../../../shared/components/feedback/EmptyState';\nimport { useDebouncedValue } from '../../../shared/hooks/useDebouncedValue';\nimport { useConfirmDialog } from '../../../shared/components/dialog/ConfirmDialog';\nimport { PERMISSIONS } from '../../../constants/permissions';\nimport { useTr } from '../../../shared/hooks/useTr';\nimport { useOrganizationPageView } from '../../../hooks/useOrganizationPageView';\nimport type { OrganizationFilterInput } from '../types';\nimport {\n isNative,\n nativeConfirm,\n nativeImpact,\n nativeNotify,\n nativeToast,\n} from '../../../../utils/nativeBridge';\n\nfunction formatDate(date: string) {\n return new Date(date).toLocaleDateString();\n}\n\nexport function OrganizationsListPage() {\n useOrganizationPageView('organizations.list');\n const tr = useTr();\n const { navigate, basePath = '/organizations' } = useOrgConsole();\n const { hasPermission, isLoading: permissionsLoading } = usePermissions();\n // Follow the platform default-allow feature flag policy: unseeded flags must\n // not disable shipped CRUDL, while an explicit false value still gates create.\n const createDetails = useFeatureFlagDetails('organization.create');\n const createEnabled = createDetails ? Boolean(createDetails.value) : true;\n const [searchQuery, setSearchQuery] = useState('');\n const debouncedSearchQuery = useDebouncedValue(searchQuery, 300);\n const filter: OrganizationFilterInput = {};\n const [selectedOrganizationIds, setSelectedOrganizationIds] = useState<Set<string>>(new Set());\n const { openConfirmDialog, ConfirmDialog } = useConfirmDialog();\n\n const { organizations, loading, error, refetch } = useOrganizations(\n { ...filter, search: debouncedSearchQuery || undefined },\n 20,\n 0\n );\n\n const { deleteOrganization, loading: deleteLoading } = useDeleteOrganization();\n\n useEffect(() => {\n setSelectedOrganizationIds((previousSelection) => {\n const visibleIds = new Set(organizations.map((organization) => organization.id));\n const nextSelection = new Set(\n [...previousSelection].filter((organizationId) => visibleIds.has(organizationId))\n );\n\n if (nextSelection.size === previousSelection.size) {\n return previousSelection;\n }\n\n return nextSelection;\n });\n }, [organizations]);\n\n const selectedOrganizations = useMemo(\n () => organizations.filter((organization) => selectedOrganizationIds.has(organization.id)),\n [organizations, selectedOrganizationIds]\n );\n\n const allVisibleSelected =\n organizations.length > 0 &&\n organizations.every((organization) => selectedOrganizationIds.has(organization.id));\n const partiallySelected =\n organizations.some((organization) => selectedOrganizationIds.has(organization.id)) &&\n !allVisibleSelected;\n\n const executeDelete = async (organizationIds: string[]) => {\n try {\n const results = await Promise.allSettled(\n organizationIds.map(async (organizationId) => {\n const result = await deleteOrganization(organizationId);\n if (result.errors?.length) {\n throw new Error(result.errors[0]?.message ?? 'Failed to delete organization');\n }\n })\n );\n\n const rejectedResult = results.find((result) => result.status === 'rejected');\n if (rejectedResult?.status === 'rejected') {\n throw rejectedResult.reason;\n }\n\n setSelectedOrganizationIds(new Set());\n await refetch();\n const successMsg =\n organizationIds.length === 1\n ? tr('organizations.delete.successSingle', 'Organization deleted successfully')\n : `${organizationIds.length} ${tr('organizations.delete.successMany', 'organizations deleted successfully')}`;\n toast.success(successMsg);\n void nativeNotify('success');\n if (isNative()) void nativeToast(successMsg);\n } catch (deleteError) {\n const errorMsg =\n deleteError instanceof Error\n ? deleteError.message\n : tr('organizations.delete.failed', 'Failed to delete organization');\n toast.error(errorMsg);\n void nativeNotify('error');\n if (isNative()) void nativeToast(errorMsg);\n }\n };\n\n const handleDelete = (organizationId: string, organizationName: string) => {\n nativeImpact('medium');\n const title = tr('organizations.delete.title', 'Delete organization');\n const description = `${tr('organizations.delete.confirmPrefix', 'Delete')} ${organizationName}? ${tr('common.cannotBeUndone', 'This action cannot be undone.')}`;\n void nativeConfirm({\n title,\n message: description,\n okButtonTitle: tr('common.delete', 'Delete'),\n }).then((nativeResult) => {\n if (nativeResult === null) {\n openConfirmDialog({\n title,\n description,\n confirmText: tr('common.delete', 'Delete'),\n variant: 'danger',\n onConfirm: () => {\n void executeDelete([organizationId]);\n },\n });\n } else if (nativeResult) {\n void executeDelete([organizationId]);\n }\n });\n };\n\n const handleBulkDelete = () => {\n if (selectedOrganizations.length === 0) return;\n\n openConfirmDialog({\n title: tr('organizations.delete.bulkTitle', 'Delete selected organizations'),\n description: `${tr('organizations.delete.bulkPrefix', 'Delete')} ${selectedOrganizations.length} ${tr(\n selectedOrganizations.length === 1\n ? 'organizations.delete.bulkSuffixSingle'\n : 'organizations.delete.bulkSuffixMany',\n selectedOrganizations.length === 1 ? 'selected organization?' : 'selected organizations?'\n )} ${tr('common.cannotBeUndone', 'This action cannot be undone.')}`,\n confirmText: `${tr('common.delete', 'Delete')} ${selectedOrganizations.length}`,\n variant: 'danger',\n onConfirm: () => {\n void executeDelete(selectedOrganizations.map((organization) => organization.id));\n },\n });\n };\n\n const toggleOrganizationSelection = (organizationId: string, checked: boolean) => {\n setSelectedOrganizationIds((previousSelection) => {\n const nextSelection = new Set(previousSelection);\n if (checked) {\n nextSelection.add(organizationId);\n } else {\n nextSelection.delete(organizationId);\n }\n return nextSelection;\n });\n };\n\n const toggleAllOrganizations = (checked: boolean) => {\n setSelectedOrganizationIds((previousSelection) => {\n const nextSelection = new Set(previousSelection);\n organizations.forEach((organization) => {\n if (checked) {\n nextSelection.add(organization.id);\n } else {\n nextSelection.delete(organization.id);\n }\n });\n return nextSelection;\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.ORG_LIST)) {\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 'organizations.list.noPermission',\n \"You don't have permission to view organizations.\"\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('organizations.list.loading', 'Loading organizations...')} />\n </div>\n );\n }\n\n if (error) {\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}\n action={{\n label: tr('common.retry', 'Retry'),\n onClick: () => {\n void refetch();\n },\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=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div className=\"space-y-2\">\n <h1 className=\"text-3xl font-bold text-[var(--color-text-primary)]\">\n {tr('organizations.list.title', 'Organizations')}\n </h1>\n <p className=\"max-w-2xl text-[var(--color-text-secondary)]\">\n {tr(\n 'organizations.list.subtitle',\n 'Manage tenant organizations and the workspaces that belong to them.'\n )}\n </p>\n </div>\n\n {createEnabled && hasPermission(PERMISSIONS.ORG_CREATE) && (\n <button\n onClick={() => navigate(`${basePath}/new`)}\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 <Plus size={18} aria-hidden=\"true\" />\n <span className=\"font-medium\">\n {tr('organizations.create.button', 'Create Organization')}\n </span>\n </button>\n )}\n </div>\n\n <div className=\"rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-4 shadow-[var(--shadow-elevation-1)]\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center\">\n <SearchInput\n value={searchQuery}\n onChange={setSearchQuery}\n placeholder={tr('organizations.list.searchPlaceholder', 'Search organizations...')}\n label={tr('organizations.list.searchLabel', 'Search organizations')}\n inputId=\"organizations-search\"\n className=\"flex-1\"\n />\n\n <button\n onClick={() => {\n void refetch();\n }}\n className=\"inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] px-4 py-2 text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)] active:scale-95\"\n aria-label={tr('organizations.list.refresh', 'Refresh organizations')}\n title={tr('organizations.list.refresh', 'Refresh organizations')}\n >\n <RefreshCw size={18} aria-hidden=\"true\" />\n </button>\n </div>\n\n {organizations.length > 0 ? (\n <div className=\"mt-4 flex flex-col gap-3 rounded-lg border border-[var(--color-border-default)] bg-[var(--color-bg-canvas)] p-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex flex-wrap items-center gap-3\">\n <label className=\"flex items-center gap-2 text-sm text-[var(--color-text-primary)]\">\n <SelectionCheckbox\n checked={allVisibleSelected}\n indeterminate={partiallySelected}\n onChange={toggleAllOrganizations}\n ariaLabel={tr('organizations.list.selectAll', 'Select all organizations')}\n />\n <span>{tr('common.selectAllVisible', 'Select all visible')}</span>\n </label>\n\n {selectedOrganizationIds.size > 0 ? (\n <button\n onClick={() => setSelectedOrganizationIds(new Set())}\n className=\"text-sm text-[var(--color-text-secondary)] transition-colors hover:text-[var(--color-text-primary)]\"\n >\n {tr('common.clearSelection', 'Clear selection')}\n </button>\n ) : null}\n </div>\n\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center\">\n <span className=\"text-sm text-[var(--color-text-secondary)]\">\n {selectedOrganizationIds.size} {tr('common.selected', 'selected')}\n </span>\n {hasPermission(PERMISSIONS.ORG_DELETE) && (\n <button\n onClick={handleBulkDelete}\n disabled={selectedOrganizations.length === 0 || deleteLoading}\n className=\"inline-flex min-h-11 items-center justify-center gap-2 rounded-lg border border-[var(--color-status-error-border)] px-3 py-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 >\n <Trash2 size={16} aria-hidden=\"true\" />\n <span>{tr('common.deleteSelected', 'Delete Selected')}</span>\n {selectedOrganizations.length > 0 ? (\n <span>({selectedOrganizations.length})</span>\n ) : null}\n </button>\n )}\n </div>\n </div>\n ) : null}\n </div>\n\n {organizations.length === 0 ? (\n <div className=\"rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-6 shadow-[var(--shadow-elevation-1)]\">\n <EmptyState\n icon={<Building2 size={40} aria-hidden=\"true\" />}\n title={tr('organizations.list.emptyTitle', 'No organizations found')}\n description={tr(\n 'organizations.list.emptyDescription',\n 'Create your first organization to start managing workspaces, members, and invites.'\n )}\n action={\n createEnabled && hasPermission(PERMISSIONS.ORG_CREATE)\n ? {\n label: tr('organizations.create.button', 'Create Organization'),\n onClick: () => navigate(`${basePath}/new`),\n }\n : undefined\n }\n />\n </div>\n ) : (\n <>\n <div className=\"grid gap-4 md:hidden\">\n {organizations.map((organization) => (\n <article\n key={organization.id}\n className=\"rounded-xl border border-[var(--color-border-default)] bg-[var(--color-bg-surface)] p-4 shadow-[var(--shadow-elevation-1)]\"\n >\n <div className=\"flex items-start gap-3\">\n <SelectionCheckbox\n checked={selectedOrganizationIds.has(organization.id)}\n onChange={(checked) => toggleOrganizationSelection(organization.id, checked)}\n ariaLabel={`${tr('organizations.list.selectOne', 'Select organization')} ${organization.name}`}\n />\n\n <div className=\"flex min-w-0 flex-1 gap-3\">\n {organization.logo ? (\n <img\n src={organization.logo}\n alt={`${organization.name} ${tr('common.logo', 'logo')}`}\n className=\"h-12 w-12 rounded-lg object-cover\"\n />\n ) : (\n <div className=\"flex h-12 w-12 items-center justify-center rounded-lg bg-[var(--color-action-primary-bg)]/12 text-base font-semibold text-[var(--color-action-primary-bg)]\">\n {organization.name[0]}\n </div>\n )}\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-start gap-2\">\n <h2 className=\"text-base font-semibold text-[var(--color-text-primary)]\">\n {organization.name}\n </h2>\n <OrganizationStatusBadge status={organization.status} />\n </div>\n <p className=\"mt-1 break-all font-mono text-sm text-[var(--color-text-muted)]\">\n /{organization.slug}\n </p>\n <dl className=\"mt-3 grid grid-cols-2 gap-3 text-sm\">\n <div>\n <dt className=\"text-[var(--color-text-secondary)]\">\n {tr('organizations.list.column.workspaces', 'Workspaces')}\n </dt>\n <dd className=\"font-medium text-[var(--color-text-primary)]\">\n {organization.workspaceCount ?? 0}\n </dd>\n </div>\n <div>\n <dt className=\"text-[var(--color-text-secondary)]\">\n {tr('common.created', 'Created')}\n </dt>\n <dd className=\"font-medium text-[var(--color-text-primary)]\">\n {formatDate(organization.createdAt)}\n </dd>\n </div>\n </dl>\n </div>\n </div>\n </div>\n\n <div className=\"mt-4 flex flex-wrap gap-2 border-t border-[var(--color-border-default)] pt-4\">\n <button\n onClick={() => navigate(`${basePath}/${organization.id}`)}\n className=\"inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-border-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]\"\n >\n <Eye size={16} aria-hidden=\"true\" />\n {tr('common.view', 'View')}\n </button>\n {hasPermission(PERMISSIONS.ORG_UPDATE) && (\n <button\n onClick={() => navigate(`${basePath}/${organization.id}/edit`)}\n className=\"inline-flex min-h-10 items-center gap-2 rounded-lg border border-[var(--color-border-default)] px-3 py-2 text-sm text-[var(--color-text-primary)] transition-all duration-200 hover:bg-[var(--color-bg-subtle)]\"\n >\n <SquarePen size={16} aria-hidden=\"true\" />\n {tr('common.edit', 'Edit')}\n </button>\n )}\n {hasPermission(PERMISSIONS.ORG_DELETE) && (\n <button\n onClick={() => handleDelete(organization.id, organization.name)}\n disabled={deleteLoading}\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.delete', 'Delete')}\n </button>\n )}\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-surface)] shadow-[var(--shadow-elevation-1)] 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=\"w-12 px-6 py-3 text-left text-xs font-semibold uppercase tracking-wide text-[var(--color-text-secondary)]\">\n <SelectionCheckbox\n checked={allVisibleSelected}\n indeterminate={partiallySelected}\n onChange={toggleAllOrganizations}\n ariaLabel={tr('organizations.list.selectAll', 'Select all organizations')}\n />\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('organizations.list.column.organization', 'Organization')}\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('common.status', 'Status')}\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('organizations.list.column.workspaces', 'Workspaces')}\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('common.created', 'Created')}\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 {organizations.map((organization) => (\n <tr\n key={organization.id}\n className=\"transition-colors hover:bg-[var(--color-bg-subtle)]\"\n >\n <td className=\"px-6 py-4 align-top\">\n <SelectionCheckbox\n checked={selectedOrganizationIds.has(organization.id)}\n onChange={(checked) =>\n toggleOrganizationSelection(organization.id, checked)\n }\n ariaLabel={`${tr('organizations.list.selectOne', 'Select organization')} ${organization.name}`}\n />\n </td>\n <td className=\"px-6 py-4\">\n <div className=\"flex items-start gap-3\">\n {organization.logo ? (\n <img\n src={organization.logo}\n alt={`${organization.name} ${tr('common.logo', 'logo')}`}\n className=\"h-10 w-10 rounded-lg object-cover\"\n />\n ) : (\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-[var(--color-action-primary-bg)]/12 font-semibold text-[var(--color-action-primary-bg)]\">\n {organization.name[0]}\n </div>\n )}\n <div className=\"min-w-0\">\n <p className=\"font-medium text-[var(--color-text-primary)]\">\n {organization.name}\n </p>\n <p className=\"break-all font-mono text-sm text-[var(--color-text-muted)]\">\n /{organization.slug}\n </p>\n </div>\n </div>\n </td>\n <td className=\"px-6 py-4 align-top\">\n <OrganizationStatusBadge status={organization.status} />\n </td>\n <td className=\"px-6 py-4 align-top text-[var(--color-text-primary)]\">\n {organization.workspaceCount ?? 0}\n </td>\n <td className=\"px-6 py-4 align-top text-sm text-[var(--color-text-secondary)]\">\n {formatDate(organization.createdAt)}\n </td>\n <td className=\"px-6 py-4 align-top\">\n <div className=\"flex items-center justify-end gap-2\">\n <button\n onClick={() => navigate(`${basePath}/${organization.id}`)}\n className=\"rounded-lg p-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:bg-[var(--color-bg-muted)] hover:text-[var(--color-text-primary)]\"\n title={`${tr('common.view', 'View')} ${organization.name}`}\n aria-label={`${tr('common.view', 'View')} ${organization.name}`}\n >\n <Eye size={18} aria-hidden=\"true\" />\n </button>\n {hasPermission(PERMISSIONS.ORG_UPDATE) && (\n <button\n onClick={() => navigate(`${basePath}/${organization.id}/edit`)}\n className=\"rounded-lg p-2 text-[var(--color-text-secondary)] transition-all duration-200 hover:bg-[var(--color-bg-muted)] hover:text-[var(--color-text-primary)]\"\n title={`${tr('common.edit', 'Edit')} ${organization.name}`}\n aria-label={`${tr('common.edit', 'Edit')} ${organization.name}`}\n >\n <SquarePen size={18} aria-hidden=\"true\" />\n </button>\n )}\n {hasPermission(PERMISSIONS.ORG_DELETE) && (\n <button\n onClick={() => handleDelete(organization.id, organization.name)}\n disabled={deleteLoading}\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 title={`${tr('common.delete', 'Delete')} ${organization.name}`}\n aria-label={`${tr('common.delete', 'Delete')} ${organization.name}`}\n >\n <Trash2 size={18} aria-hidden=\"true\" />\n </button>\n )}\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </>\n )}\n </div>\n\n {ConfirmDialog}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { OrganizationStatus } from '../types';
|
|
3
|
+
|
|
4
|
+
export declare const createOrganizationSchema: z.ZodObject<{
|
|
5
|
+
status: z.ZodOptional<z.ZodNativeEnum<typeof OrganizationStatus>>;
|
|
6
|
+
name: z.ZodString;
|
|
7
|
+
slug: z.ZodString;
|
|
8
|
+
description: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
9
|
+
logo: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
10
|
+
website: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
11
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
12
|
+
tenantId: z.ZodString;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
tenantId: string;
|
|
15
|
+
name: string;
|
|
16
|
+
slug: string;
|
|
17
|
+
status?: OrganizationStatus | undefined;
|
|
18
|
+
description?: string | undefined;
|
|
19
|
+
metadata?: Record<string, unknown> | undefined;
|
|
20
|
+
logo?: string | undefined;
|
|
21
|
+
website?: string | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
tenantId: string;
|
|
24
|
+
name: string;
|
|
25
|
+
slug: string;
|
|
26
|
+
status?: OrganizationStatus | undefined;
|
|
27
|
+
description?: string | undefined;
|
|
28
|
+
metadata?: Record<string, unknown> | undefined;
|
|
29
|
+
logo?: string | undefined;
|
|
30
|
+
website?: string | undefined;
|
|
31
|
+
}>;
|
|
32
|
+
export declare const updateOrganizationSchema: z.ZodObject<{
|
|
33
|
+
name: z.ZodOptional<z.ZodString>;
|
|
34
|
+
description: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
35
|
+
logo: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
36
|
+
website: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
37
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
38
|
+
}, "strip", z.ZodTypeAny, {
|
|
39
|
+
name?: string | undefined;
|
|
40
|
+
description?: string | undefined;
|
|
41
|
+
metadata?: Record<string, unknown> | undefined;
|
|
42
|
+
logo?: string | undefined;
|
|
43
|
+
website?: string | undefined;
|
|
44
|
+
}, {
|
|
45
|
+
name?: string | undefined;
|
|
46
|
+
description?: string | undefined;
|
|
47
|
+
metadata?: Record<string, unknown> | undefined;
|
|
48
|
+
logo?: string | undefined;
|
|
49
|
+
website?: string | undefined;
|
|
50
|
+
}>;
|
|
51
|
+
export type CreateOrganizationFormData = z.infer<typeof createOrganizationSchema>;
|
|
52
|
+
export type UpdateOrganizationFormData = z.infer<typeof updateOrganizationSchema>;
|
|
53
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/organization-management/modules/organizations/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AA+B9C,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAInC,CAAC;AAGH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EAMnC,CAAC;AAGH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAClF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { OrganizationStatus as e } from "../../../shared/types/graphql.js";
|
|
2
|
+
import { literalType as t, nativeEnumType as n, objectType as r, recordType as i, stringType as a, unknownType as o } from "../../../../node_modules/zod/v3/types.js";
|
|
3
|
+
//#region src/organization-management/modules/organizations/schemas/index.ts
|
|
4
|
+
var s = {
|
|
5
|
+
name: a().min(2, "Name must be at least 2 characters").max(100, "Name must not exceed 100 characters").trim(),
|
|
6
|
+
slug: a().min(2, "Slug must be at least 2 characters").max(50, "Slug must not exceed 50 characters").regex(/^[a-z0-9-]+$/, "Slug must contain only lowercase letters, numbers, and hyphens").trim(),
|
|
7
|
+
description: a().max(500, "Description must not exceed 500 characters").optional().or(t("")),
|
|
8
|
+
logo: a().url("Must be a valid URL").optional().or(t("")),
|
|
9
|
+
website: a().url("Must be a valid URL").optional().or(t("")),
|
|
10
|
+
metadata: i(a(), o()).optional()
|
|
11
|
+
}, c = r({
|
|
12
|
+
tenantId: a().min(1, "Tenant is required"),
|
|
13
|
+
...s,
|
|
14
|
+
status: n(e).optional()
|
|
15
|
+
}), l = r({
|
|
16
|
+
name: s.name.optional(),
|
|
17
|
+
description: s.description,
|
|
18
|
+
logo: s.logo,
|
|
19
|
+
website: s.website,
|
|
20
|
+
metadata: s.metadata
|
|
21
|
+
});
|
|
22
|
+
//#endregion
|
|
23
|
+
export { c as createOrganizationSchema, l as updateOrganizationSchema };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../src/organization-management/modules/organizations/schemas/index.ts"],"sourcesContent":["import { z } from 'zod';\nimport { OrganizationStatus } from '../types';\n\n/**\n * Organization Validation Schemas\n * Zod schemas for validating organization form inputs\n */\n\n// Base organization schema with common fields\nconst baseOrganizationSchema = {\n name: z\n .string()\n .min(2, 'Name must be at least 2 characters')\n .max(100, 'Name must not exceed 100 characters')\n .trim(),\n slug: z\n .string()\n .min(2, 'Slug must be at least 2 characters')\n .max(50, 'Slug must not exceed 50 characters')\n .regex(/^[a-z0-9-]+$/, 'Slug must contain only lowercase letters, numbers, and hyphens')\n .trim(),\n description: z\n .string()\n .max(500, 'Description must not exceed 500 characters')\n .optional()\n .or(z.literal('')),\n logo: z.string().url('Must be a valid URL').optional().or(z.literal('')),\n website: z.string().url('Must be a valid URL').optional().or(z.literal('')),\n metadata: z.record(z.string(), z.unknown()).optional(),\n};\n\n// Create Organization Schema\nexport const createOrganizationSchema = z.object({\n tenantId: z.string().min(1, 'Tenant is required'),\n ...baseOrganizationSchema,\n status: z.nativeEnum(OrganizationStatus).optional(),\n});\n\n// Update Organization Schema\nexport const updateOrganizationSchema = z.object({\n name: baseOrganizationSchema.name.optional(),\n description: baseOrganizationSchema.description,\n logo: baseOrganizationSchema.logo,\n website: baseOrganizationSchema.website,\n metadata: baseOrganizationSchema.metadata,\n});\n\n// Type exports\nexport type CreateOrganizationFormData = z.infer<typeof createOrganizationSchema>;\nexport type UpdateOrganizationFormData = z.infer<typeof updateOrganizationSchema>;\n"],"mappings":";;;AASA,IAAM,IAAyB;CAC7B,MAAM,GACK,CACR,IAAI,GAAG,qCAAqC,CAC5C,IAAI,KAAK,sCAAsC,CAC/C,MAAM;CACT,MAAM,GACK,CACR,IAAI,GAAG,qCAAqC,CAC5C,IAAI,IAAI,qCAAqC,CAC7C,MAAM,gBAAgB,iEAAiE,CACvF,MAAM;CACT,aAAa,GACF,CACR,IAAI,KAAK,6CAA6C,CACtD,UAAU,CACV,GAAG,EAAU,GAAG,CAAC;CACpB,MAAM,GAAU,CAAC,IAAI,sBAAsB,CAAC,UAAU,CAAC,GAAG,EAAU,GAAG,CAAC;CACxE,SAAS,GAAU,CAAC,IAAI,sBAAsB,CAAC,UAAU,CAAC,GAAG,EAAU,GAAG,CAAC;CAC3E,UAAU,EAAS,GAAU,EAAE,GAAW,CAAC,CAAC,UAAU;CACvD,EAGY,IAA2B,EAAS;CAC/C,UAAU,GAAU,CAAC,IAAI,GAAG,qBAAqB;CACjD,GAAG;CACH,QAAQ,EAAa,EAAmB,CAAC,UAAU;CACpD,CAAC,EAGW,IAA2B,EAAS;CAC/C,MAAM,EAAuB,KAAK,UAAU;CAC5C,aAAa,EAAuB;CACpC,MAAM,EAAuB;CAC7B,SAAS,EAAuB;CAChC,UAAU,EAAuB;CAClC,CAAC"}
|