@burdenoff/microfe-workspaces 2026.510.50
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 +88 -0
- package/dist/WorkspacesRoot.d.ts +35 -0
- package/dist/WorkspacesRoot.d.ts.map +1 -0
- package/dist/WorkspacesRoot.js +71 -0
- package/dist/WorkspacesRoot.js.map +1 -0
- package/dist/WorkspacesRoutes.d.ts +10 -0
- package/dist/WorkspacesRoutes.d.ts.map +1 -0
- package/dist/WorkspacesRoutes.js +111 -0
- package/dist/WorkspacesRoutes.js.map +1 -0
- package/dist/components/CreateProjectDialog.d.ts +6 -0
- package/dist/components/CreateProjectDialog.d.ts.map +1 -0
- package/dist/components/CreateProjectDialog.js +115 -0
- package/dist/components/CreateProjectDialog.js.map +1 -0
- package/dist/components/CreateWorkspaceDialog.d.ts +2 -0
- package/dist/components/CreateWorkspaceDialog.d.ts.map +1 -0
- package/dist/components/CreateWorkspaceDialog.js +172 -0
- package/dist/components/CreateWorkspaceDialog.js.map +1 -0
- package/dist/components/InviteMemberDialog.d.ts +7 -0
- package/dist/components/InviteMemberDialog.d.ts.map +1 -0
- package/dist/components/InviteMemberDialog.js +148 -0
- package/dist/components/InviteMemberDialog.js.map +1 -0
- package/dist/components/MemberListItem.d.ts +11 -0
- package/dist/components/MemberListItem.d.ts.map +1 -0
- package/dist/components/MemberListItem.js +118 -0
- package/dist/components/MemberListItem.js.map +1 -0
- package/dist/components/ProjectCard.d.ts +13 -0
- package/dist/components/ProjectCard.d.ts.map +1 -0
- package/dist/components/ProjectCard.js +150 -0
- package/dist/components/ProjectCard.js.map +1 -0
- package/dist/components/WorkspaceCard.d.ts +8 -0
- package/dist/components/WorkspaceCard.d.ts.map +1 -0
- package/dist/components/WorkspaceCard.js +79 -0
- package/dist/components/WorkspaceCard.js.map +1 -0
- package/dist/components/WorkspacesErrorBoundary.d.ts +27 -0
- package/dist/components/WorkspacesErrorBoundary.d.ts.map +1 -0
- package/dist/components/WorkspacesErrorBoundary.js +136 -0
- package/dist/components/WorkspacesErrorBoundary.js.map +1 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +7 -0
- package/dist/constants/permissions.d.ts +33 -0
- package/dist/constants/permissions.d.ts.map +1 -0
- package/dist/constants/permissions.js +31 -0
- package/dist/constants/permissions.js.map +1 -0
- package/dist/generated/global-operations.d.ts +279 -0
- package/dist/generated/global-operations.d.ts.map +1 -0
- package/dist/generated/global-operations.js +103 -0
- package/dist/generated/global-operations.js.map +1 -0
- package/dist/generated/global-types.d.ts +20714 -0
- package/dist/generated/global-types.d.ts.map +1 -0
- package/dist/generated/wspace-operations.d.ts +2209 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -0
- package/dist/generated/wspace-operations.js +576 -0
- package/dist/generated/wspace-operations.js.map +1 -0
- package/dist/generated/wspace-types.d.ts +54990 -0
- package/dist/generated/wspace-types.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/useMemberMutations.d.ts +61 -0
- package/dist/hooks/useMemberMutations.d.ts.map +1 -0
- package/dist/hooks/useMemberMutations.js +263 -0
- package/dist/hooks/useMemberMutations.js.map +1 -0
- package/dist/hooks/useProjectMutations.d.ts +26 -0
- package/dist/hooks/useProjectMutations.d.ts.map +1 -0
- package/dist/hooks/useProjectMutations.js +127 -0
- package/dist/hooks/useProjectMutations.js.map +1 -0
- package/dist/hooks/useProjects.d.ts +16 -0
- package/dist/hooks/useProjects.d.ts.map +1 -0
- package/dist/hooks/useProjects.js +103 -0
- package/dist/hooks/useProjects.js.map +1 -0
- package/dist/hooks/useScopedNavigation.d.ts +4 -0
- package/dist/hooks/useScopedNavigation.d.ts.map +1 -0
- package/dist/hooks/useScopedNavigation.js +11 -0
- package/dist/hooks/useScopedNavigation.js.map +1 -0
- package/dist/hooks/useTenants.d.ts +13 -0
- package/dist/hooks/useTenants.d.ts.map +1 -0
- package/dist/hooks/useTenants.js +47 -0
- package/dist/hooks/useTenants.js.map +1 -0
- package/dist/hooks/useWorkspaceActivity.d.ts +12 -0
- package/dist/hooks/useWorkspaceActivity.d.ts.map +1 -0
- package/dist/hooks/useWorkspaceActivity.js +31 -0
- package/dist/hooks/useWorkspaceActivity.js.map +1 -0
- package/dist/hooks/useWorkspaceMembers.d.ts +24 -0
- package/dist/hooks/useWorkspaceMembers.d.ts.map +1 -0
- package/dist/hooks/useWorkspaceMembers.js +130 -0
- package/dist/hooks/useWorkspaceMembers.js.map +1 -0
- package/dist/hooks/useWorkspaceMutations.d.ts +36 -0
- package/dist/hooks/useWorkspaceMutations.d.ts.map +1 -0
- package/dist/hooks/useWorkspaceMutations.js +119 -0
- package/dist/hooks/useWorkspaceMutations.js.map +1 -0
- package/dist/hooks/useWorkspacePermissions.d.ts +29 -0
- package/dist/hooks/useWorkspacePermissions.d.ts.map +1 -0
- package/dist/hooks/useWorkspacePermissions.js +33 -0
- package/dist/hooks/useWorkspacePermissions.js.map +1 -0
- package/dist/hooks/useWorkspaceRoles.d.ts +8 -0
- package/dist/hooks/useWorkspaceRoles.d.ts.map +1 -0
- package/dist/hooks/useWorkspaceRoles.js +31 -0
- package/dist/hooks/useWorkspaceRoles.js.map +1 -0
- package/dist/hooks/useWorkspaces.d.ts +21 -0
- package/dist/hooks/useWorkspaces.d.ts.map +1 -0
- package/dist/hooks/useWorkspaces.js +75 -0
- package/dist/hooks/useWorkspaces.js.map +1 -0
- package/dist/hooks/useWorkspacesEventEmitter.d.ts +14 -0
- package/dist/hooks/useWorkspacesEventEmitter.d.ts.map +1 -0
- package/dist/hooks/useWorkspacesEventEmitter.js +14 -0
- package/dist/hooks/useWorkspacesEventEmitter.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/pages/ActivityListPage.d.ts +2 -0
- package/dist/pages/ActivityListPage.d.ts.map +1 -0
- package/dist/pages/ActivityListPage.js +119 -0
- package/dist/pages/ActivityListPage.js.map +1 -0
- package/dist/pages/CreateWorkspacePage.d.ts +2 -0
- package/dist/pages/CreateWorkspacePage.d.ts.map +1 -0
- package/dist/pages/CreateWorkspacePage.js +264 -0
- package/dist/pages/CreateWorkspacePage.js.map +1 -0
- package/dist/pages/InviteAcceptancePage.d.ts +6 -0
- package/dist/pages/InviteAcceptancePage.d.ts.map +1 -0
- package/dist/pages/InviteAcceptancePage.js +495 -0
- package/dist/pages/InviteAcceptancePage.js.map +1 -0
- package/dist/pages/MembersListPage.d.ts +2 -0
- package/dist/pages/MembersListPage.d.ts.map +1 -0
- package/dist/pages/MembersListPage.js +420 -0
- package/dist/pages/MembersListPage.js.map +1 -0
- package/dist/pages/ProjectDetailPage.d.ts +2 -0
- package/dist/pages/ProjectDetailPage.d.ts.map +1 -0
- package/dist/pages/ProjectDetailPage.js +361 -0
- package/dist/pages/ProjectDetailPage.js.map +1 -0
- package/dist/pages/ProjectsListPage.d.ts +2 -0
- package/dist/pages/ProjectsListPage.d.ts.map +1 -0
- package/dist/pages/ProjectsListPage.js +398 -0
- package/dist/pages/ProjectsListPage.js.map +1 -0
- package/dist/pages/WorkspaceDetailPage.d.ts +2 -0
- package/dist/pages/WorkspaceDetailPage.d.ts.map +1 -0
- package/dist/pages/WorkspaceDetailPage.js +230 -0
- package/dist/pages/WorkspaceDetailPage.js.map +1 -0
- package/dist/pages/WorkspaceSettingsPage.d.ts +2 -0
- package/dist/pages/WorkspaceSettingsPage.d.ts.map +1 -0
- package/dist/pages/WorkspaceSettingsPage.js +157 -0
- package/dist/pages/WorkspaceSettingsPage.js.map +1 -0
- package/dist/pages/WorkspacesListPage.d.ts +2 -0
- package/dist/pages/WorkspacesListPage.d.ts.map +1 -0
- package/dist/pages/WorkspacesListPage.js +186 -0
- package/dist/pages/WorkspacesListPage.js.map +1 -0
- package/dist/pages/dashboard/DashboardCustomizer.d.ts +12 -0
- package/dist/pages/dashboard/DashboardCustomizer.d.ts.map +1 -0
- package/dist/pages/dashboard/DashboardCustomizer.js +136 -0
- package/dist/pages/dashboard/DashboardCustomizer.js.map +1 -0
- package/dist/pages/dashboard/DashboardGrid.d.ts +8 -0
- package/dist/pages/dashboard/DashboardGrid.d.ts.map +1 -0
- package/dist/pages/dashboard/DashboardGrid.js +58 -0
- package/dist/pages/dashboard/DashboardGrid.js.map +1 -0
- package/dist/pages/dashboard/DashboardPage.d.ts +14 -0
- package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -0
- package/dist/pages/dashboard/DashboardPage.js +136 -0
- package/dist/pages/dashboard/DashboardPage.js.map +1 -0
- package/dist/pages/dashboard/WidgetWrapper.d.ts +17 -0
- package/dist/pages/dashboard/WidgetWrapper.d.ts.map +1 -0
- package/dist/pages/dashboard/WidgetWrapper.js +72 -0
- package/dist/pages/dashboard/WidgetWrapper.js.map +1 -0
- package/dist/pages/dashboard/config.d.ts +9 -0
- package/dist/pages/dashboard/config.d.ts.map +1 -0
- package/dist/pages/dashboard/config.js +214 -0
- package/dist/pages/dashboard/config.js.map +1 -0
- package/dist/pages/dashboard/hooks/useDashboardData.d.ts +9 -0
- package/dist/pages/dashboard/hooks/useDashboardData.d.ts.map +1 -0
- package/dist/pages/dashboard/hooks/useDashboardData.js +118 -0
- package/dist/pages/dashboard/hooks/useDashboardData.js.map +1 -0
- package/dist/pages/dashboard/hooks/useDashboardPreferences.d.ts +4 -0
- package/dist/pages/dashboard/hooks/useDashboardPreferences.d.ts.map +1 -0
- package/dist/pages/dashboard/hooks/useDashboardPreferences.js +32 -0
- package/dist/pages/dashboard/hooks/useDashboardPreferences.js.map +1 -0
- package/dist/pages/dashboard/types.d.ts +145 -0
- package/dist/pages/dashboard/types.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/GroupsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/GroupsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/GroupsWidget.js +59 -0
- package/dist/pages/dashboard/widgets/GroupsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/MembersWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/MembersWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/MembersWidget.js +65 -0
- package/dist/pages/dashboard/widgets/MembersWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/ProjectsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/ProjectsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/ProjectsWidget.js +91 -0
- package/dist/pages/dashboard/widgets/ProjectsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/QuickActionsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/QuickActionsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/QuickActionsWidget.js +80 -0
- package/dist/pages/dashboard/widgets/QuickActionsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/RecentActivityWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/RecentActivityWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/RecentActivityWidget.js +81 -0
- package/dist/pages/dashboard/widgets/RecentActivityWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/StorageWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/StorageWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/StorageWidget.js +69 -0
- package/dist/pages/dashboard/widgets/StorageWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/SystemHealthWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/SystemHealthWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/SystemHealthWidget.js +59 -0
- package/dist/pages/dashboard/widgets/SystemHealthWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/TagCloudWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/TagCloudWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/TagCloudWidget.js +61 -0
- package/dist/pages/dashboard/widgets/TagCloudWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/TipsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/TipsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/TipsWidget.js +67 -0
- package/dist/pages/dashboard/widgets/TipsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js +83 -0
- package/dist/pages/dashboard/widgets/UpcomingEventsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/WelcomeWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/WelcomeWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/WelcomeWidget.js +71 -0
- package/dist/pages/dashboard/widgets/WelcomeWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js +97 -0
- package/dist/pages/dashboard/widgets/WorkflowStatsWidget.js.map +1 -0
- package/dist/pages/dashboard/widgets/WorkspacesWidget.d.ts +4 -0
- package/dist/pages/dashboard/widgets/WorkspacesWidget.d.ts.map +1 -0
- package/dist/pages/dashboard/widgets/WorkspacesWidget.js +67 -0
- package/dist/pages/dashboard/widgets/WorkspacesWidget.js.map +1 -0
- package/dist/providers/WorkspacesProvider.d.ts +13 -0
- package/dist/providers/WorkspacesProvider.d.ts.map +1 -0
- package/dist/providers/WorkspacesProvider.js +24 -0
- package/dist/providers/WorkspacesProvider.js.map +1 -0
- package/dist/store/workspacesStore.d.ts +82 -0
- package/dist/store/workspacesStore.d.ts.map +1 -0
- package/dist/store/workspacesStore.js +92 -0
- package/dist/store/workspacesStore.js.map +1 -0
- package/dist/types/index.d.ts +280 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/formatters.d.ts +60 -0
- package/dist/utils/formatters.d.ts.map +1 -0
- package/dist/utils/formatters.js +61 -0
- package/dist/utils/formatters.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/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/dist/utils/projectTags.d.ts +6 -0
- package/dist/utils/projectTags.d.ts.map +1 -0
- package/dist/utils/projectTags.js +49 -0
- package/dist/utils/projectTags.js.map +1 -0
- package/dist/utils/slug.d.ts +13 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +8 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/tokenHelpers.d.ts +114 -0
- package/dist/utils/tokenHelpers.d.ts.map +1 -0
- package/dist/utils/tokenHelpers.js +80 -0
- package/dist/utils/tokenHelpers.js.map +1 -0
- package/package.json +113 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { useWorkspacesContext as e } from "../providers/WorkspacesProvider.js";
|
|
2
|
+
import { WORKSPACE_PERMISSIONS as t } from "../constants/permissions.js";
|
|
3
|
+
import { useCreateWorkspace as n } from "../hooks/useWorkspaceMutations.js";
|
|
4
|
+
import { useMyOrganizations as r, useMyTenants as i } from "../hooks/useTenants.js";
|
|
5
|
+
import { generateSlug as a } from "../utils/slug.js";
|
|
6
|
+
import { useCallback as o, useEffect as s, useMemo as c } from "react";
|
|
7
|
+
import { AlertCircle as l, ArrowLeft as u } from "lucide-react";
|
|
8
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
9
|
+
import { Button as p, Card as m, CardContent as h, CardDescription as g, CardHeader as _, CardTitle as v, Skeleton as y } from "@burdenoff/fe-libs/ui";
|
|
10
|
+
import { Link as b, useNavigate as x } from "react-router-dom";
|
|
11
|
+
import { AccessDenied as S, PermissionGate as C } from "@burdenoff/fe-libs/shared/components";
|
|
12
|
+
import { useI18n as w } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
13
|
+
import { useForm as T, z as E } from "@burdenoff/fe-libs/form";
|
|
14
|
+
//#region src/pages/CreateWorkspacePage.tsx
|
|
15
|
+
function D() {
|
|
16
|
+
let { t: D } = w(), O = o((e, t) => {
|
|
17
|
+
let n = D(e);
|
|
18
|
+
return n === e ? t : n;
|
|
19
|
+
}, [D]), k = c(() => E.object({
|
|
20
|
+
name: E.string().min(2, O("createWorkspace.validation.nameMin", "Name must be at least 2 characters")).max(100),
|
|
21
|
+
slug: E.string().min(2, O("createWorkspace.validation.slugMin", "Slug must be at least 2 characters")).max(50).regex(/^[a-z0-9-]+$/, O("createWorkspace.validation.slugFormat", "Slug can only contain lowercase letters, numbers, and hyphens")),
|
|
22
|
+
tenantId: E.string().min(1, O("createWorkspace.validation.tenantRequired", "Please select a tenant")),
|
|
23
|
+
organizationId: E.string().min(1, O("createWorkspace.validation.organizationRequired", "Please select an organization")),
|
|
24
|
+
type: E.enum(["TEAM", "PERSONAL"]).optional()
|
|
25
|
+
}), [O]), A = x(), { basePath: j = "/" } = e(), { mutate: M, isPending: N } = n(), { data: P, isLoading: F, error: I } = i(), { data: L, isLoading: R, error: z } = r(), B = P?.items ?? [], V = L?.items ?? [], H = c(() => B.find((e) => e.type === "SHARED" || e.slug === "burdenoff-shared")?.id ?? B[0]?.id ?? "", [B]), U = T({
|
|
26
|
+
schema: k,
|
|
27
|
+
defaultValues: {
|
|
28
|
+
name: "",
|
|
29
|
+
slug: "",
|
|
30
|
+
tenantId: "",
|
|
31
|
+
organizationId: "",
|
|
32
|
+
type: "TEAM"
|
|
33
|
+
}
|
|
34
|
+
}), W = U.watch("tenantId"), G = U.watch("name"), K = c(() => W ? V.filter((e) => e.tenantId === W) : [], [W, V]);
|
|
35
|
+
return s(() => {
|
|
36
|
+
U.setValue("slug", G ? a(G) : "");
|
|
37
|
+
}, [G, U]), s(() => {
|
|
38
|
+
U.setValue("organizationId", "");
|
|
39
|
+
}, [W, U]), s(() => {
|
|
40
|
+
!U.getValues("tenantId") && H && U.setValue("tenantId", H, {
|
|
41
|
+
shouldDirty: !1,
|
|
42
|
+
shouldTouch: !1
|
|
43
|
+
});
|
|
44
|
+
}, [H, U]), s(() => {
|
|
45
|
+
let e = U.getValues("organizationId");
|
|
46
|
+
!K.some((t) => t.id === e) && K[0]?.id && U.setValue("organizationId", K[0].id, {
|
|
47
|
+
shouldDirty: !1,
|
|
48
|
+
shouldTouch: !1
|
|
49
|
+
});
|
|
50
|
+
}, [K, U]), /* @__PURE__ */ d(C, {
|
|
51
|
+
permission: t.WORKSPACE_CREATE,
|
|
52
|
+
fallback: /* @__PURE__ */ f("div", {
|
|
53
|
+
className: "p-6",
|
|
54
|
+
children: [/* @__PURE__ */ f(b, {
|
|
55
|
+
to: `${j}/list`,
|
|
56
|
+
className: "inline-flex items-center gap-2 text-muted-foreground hover:text-foreground transition-colors mb-6",
|
|
57
|
+
children: [/* @__PURE__ */ d(u, { size: 20 }), O("createWorkspace.backToWorkspaces", "Back to Workspaces")]
|
|
58
|
+
}), /* @__PURE__ */ d(S, {
|
|
59
|
+
variant: "card",
|
|
60
|
+
title: O("createWorkspace.permissionRequiredTitle", "Permission Required"),
|
|
61
|
+
description: O("createWorkspace.permissionRequiredDescription", "You don't have permission to create workspaces."),
|
|
62
|
+
details: O("createWorkspace.permissionRequiredDetails", "Required: workspace:create"),
|
|
63
|
+
primaryAction: {
|
|
64
|
+
label: O("createWorkspace.goBack", "Go Back"),
|
|
65
|
+
onClick: () => A(`${j}/list`)
|
|
66
|
+
}
|
|
67
|
+
})]
|
|
68
|
+
}),
|
|
69
|
+
children: /* @__PURE__ */ f("div", {
|
|
70
|
+
className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
|
|
71
|
+
children: [/* @__PURE__ */ f(b, {
|
|
72
|
+
to: `${j}/list`,
|
|
73
|
+
className: "inline-flex items-center gap-2 text-muted-foreground hover:text-foreground transition-colors",
|
|
74
|
+
children: [/* @__PURE__ */ d(u, { size: 20 }), O("createWorkspace.backToWorkspaces", "Back to Workspaces")]
|
|
75
|
+
}), /* @__PURE__ */ f(m, {
|
|
76
|
+
className: "max-w-2xl mx-auto",
|
|
77
|
+
children: [/* @__PURE__ */ f(_, { children: [/* @__PURE__ */ d(v, { children: O("createWorkspace.title", "Create New Workspace") }), /* @__PURE__ */ d(g, { children: O("createWorkspace.subtitle", "Set up a new workspace for your team or personal use") })] }), /* @__PURE__ */ d(h, { children: /* @__PURE__ */ f("form", {
|
|
78
|
+
onSubmit: U.handleSubmit((e) => {
|
|
79
|
+
M({
|
|
80
|
+
name: e.name,
|
|
81
|
+
slug: e.slug,
|
|
82
|
+
tenantId: e.tenantId,
|
|
83
|
+
organizationId: e.organizationId,
|
|
84
|
+
type: e.type
|
|
85
|
+
}, { onSuccess: (e) => {
|
|
86
|
+
A(`${j}/${e.id}`);
|
|
87
|
+
} });
|
|
88
|
+
}),
|
|
89
|
+
className: "space-y-6",
|
|
90
|
+
children: [
|
|
91
|
+
/* @__PURE__ */ f("div", {
|
|
92
|
+
className: "space-y-2",
|
|
93
|
+
children: [
|
|
94
|
+
/* @__PURE__ */ d("label", {
|
|
95
|
+
htmlFor: "workspace-name",
|
|
96
|
+
className: "text-sm font-medium text-foreground",
|
|
97
|
+
children: O("createWorkspace.nameLabel", "Workspace Name *")
|
|
98
|
+
}),
|
|
99
|
+
/* @__PURE__ */ d("input", {
|
|
100
|
+
id: "workspace-name",
|
|
101
|
+
placeholder: O("createWorkspace.namePlaceholder", "My Workspace"),
|
|
102
|
+
className: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground",
|
|
103
|
+
...U.register("name")
|
|
104
|
+
}),
|
|
105
|
+
/* @__PURE__ */ d("p", {
|
|
106
|
+
className: "text-xs text-muted-foreground",
|
|
107
|
+
children: O("createWorkspace.nameHint", "A descriptive name for your workspace")
|
|
108
|
+
}),
|
|
109
|
+
U.formState.errors.name?.message && /* @__PURE__ */ d("p", {
|
|
110
|
+
className: "text-sm text-destructive",
|
|
111
|
+
children: U.formState.errors.name.message
|
|
112
|
+
})
|
|
113
|
+
]
|
|
114
|
+
}),
|
|
115
|
+
/* @__PURE__ */ f("div", {
|
|
116
|
+
className: "space-y-2",
|
|
117
|
+
children: [
|
|
118
|
+
/* @__PURE__ */ d("label", {
|
|
119
|
+
htmlFor: "workspace-slug",
|
|
120
|
+
className: "text-sm font-medium text-foreground",
|
|
121
|
+
children: O("createWorkspace.slugLabel", "Slug *")
|
|
122
|
+
}),
|
|
123
|
+
/* @__PURE__ */ d("input", {
|
|
124
|
+
id: "workspace-slug",
|
|
125
|
+
placeholder: O("createWorkspace.slugPlaceholder", "my-workspace"),
|
|
126
|
+
className: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground",
|
|
127
|
+
...U.register("slug")
|
|
128
|
+
}),
|
|
129
|
+
/* @__PURE__ */ d("p", {
|
|
130
|
+
className: "text-xs text-muted-foreground",
|
|
131
|
+
children: O("createWorkspace.slugHint", "URL-friendly identifier (auto-generated, but you can edit it)")
|
|
132
|
+
}),
|
|
133
|
+
U.formState.errors.slug?.message && /* @__PURE__ */ d("p", {
|
|
134
|
+
className: "text-sm text-destructive",
|
|
135
|
+
children: U.formState.errors.slug.message
|
|
136
|
+
})
|
|
137
|
+
]
|
|
138
|
+
}),
|
|
139
|
+
/* @__PURE__ */ f("div", {
|
|
140
|
+
className: "space-y-2",
|
|
141
|
+
children: [
|
|
142
|
+
/* @__PURE__ */ d("label", {
|
|
143
|
+
htmlFor: "workspace-tenant",
|
|
144
|
+
className: "text-sm font-medium text-foreground",
|
|
145
|
+
children: O("createWorkspace.tenantLabel", "Tenant *")
|
|
146
|
+
}),
|
|
147
|
+
F ? /* @__PURE__ */ d(y, { className: "h-10 w-full" }) : I ? /* @__PURE__ */ f("div", {
|
|
148
|
+
className: "flex items-center gap-2 text-sm text-destructive",
|
|
149
|
+
children: [/* @__PURE__ */ d(l, { size: 16 }), O("createWorkspace.failedToLoadTenants", "Failed to load tenants")]
|
|
150
|
+
}) : B.length === 0 ? /* @__PURE__ */ d("div", {
|
|
151
|
+
className: "text-sm text-muted-foreground",
|
|
152
|
+
children: O("createWorkspace.noTenantsAvailable", "No tenants available. Contact your administrator.")
|
|
153
|
+
}) : /* @__PURE__ */ f("select", {
|
|
154
|
+
id: "workspace-tenant",
|
|
155
|
+
className: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground",
|
|
156
|
+
...U.register("tenantId"),
|
|
157
|
+
children: [/* @__PURE__ */ d("option", {
|
|
158
|
+
value: "",
|
|
159
|
+
children: O("createWorkspace.selectTenantPlaceholder", "Select a tenant")
|
|
160
|
+
}), B.map((e) => /* @__PURE__ */ d("option", {
|
|
161
|
+
value: e.id,
|
|
162
|
+
children: e.name
|
|
163
|
+
}, e.id))]
|
|
164
|
+
}),
|
|
165
|
+
/* @__PURE__ */ d("p", {
|
|
166
|
+
className: "text-xs text-muted-foreground",
|
|
167
|
+
children: O("createWorkspace.tenantHint", "Select which tenant this workspace belongs to")
|
|
168
|
+
}),
|
|
169
|
+
U.formState.errors.tenantId?.message && /* @__PURE__ */ d("p", {
|
|
170
|
+
className: "text-sm text-destructive",
|
|
171
|
+
children: U.formState.errors.tenantId.message
|
|
172
|
+
})
|
|
173
|
+
]
|
|
174
|
+
}),
|
|
175
|
+
/* @__PURE__ */ f("div", {
|
|
176
|
+
className: "space-y-2",
|
|
177
|
+
children: [
|
|
178
|
+
/* @__PURE__ */ d("label", {
|
|
179
|
+
htmlFor: "workspace-organization",
|
|
180
|
+
className: "text-sm font-medium text-foreground",
|
|
181
|
+
children: O("createWorkspace.organizationLabel", "Organization *")
|
|
182
|
+
}),
|
|
183
|
+
R ? /* @__PURE__ */ d(y, { className: "h-10 w-full" }) : z ? /* @__PURE__ */ f("div", {
|
|
184
|
+
className: "flex items-center gap-2 text-sm text-destructive",
|
|
185
|
+
children: [/* @__PURE__ */ d(l, { size: 16 }), O("createWorkspace.failedToLoadOrganizations", "Failed to load organizations")]
|
|
186
|
+
}) : W ? K.length === 0 ? /* @__PURE__ */ d("div", {
|
|
187
|
+
className: "text-sm text-muted-foreground",
|
|
188
|
+
children: O("createWorkspace.noOrganizationsFound", "No organizations found for this tenant")
|
|
189
|
+
}) : /* @__PURE__ */ f("select", {
|
|
190
|
+
id: "workspace-organization",
|
|
191
|
+
className: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground",
|
|
192
|
+
disabled: !W,
|
|
193
|
+
...U.register("organizationId"),
|
|
194
|
+
children: [/* @__PURE__ */ d("option", {
|
|
195
|
+
value: "",
|
|
196
|
+
children: O("createWorkspace.selectOrganizationPlaceholder", "Select an organization")
|
|
197
|
+
}), K.map((e) => /* @__PURE__ */ d("option", {
|
|
198
|
+
value: e.id,
|
|
199
|
+
children: e.name
|
|
200
|
+
}, e.id))]
|
|
201
|
+
}) : /* @__PURE__ */ d("div", {
|
|
202
|
+
className: "text-sm text-muted-foreground",
|
|
203
|
+
children: O("createWorkspace.selectTenantFirst", "Please select a tenant first")
|
|
204
|
+
}),
|
|
205
|
+
/* @__PURE__ */ d("p", {
|
|
206
|
+
className: "text-xs text-muted-foreground",
|
|
207
|
+
children: O("createWorkspace.organizationHint", "Select which organization owns this workspace")
|
|
208
|
+
}),
|
|
209
|
+
U.formState.errors.organizationId?.message && /* @__PURE__ */ d("p", {
|
|
210
|
+
className: "text-sm text-destructive",
|
|
211
|
+
children: U.formState.errors.organizationId.message
|
|
212
|
+
})
|
|
213
|
+
]
|
|
214
|
+
}),
|
|
215
|
+
/* @__PURE__ */ f("div", {
|
|
216
|
+
className: "space-y-2",
|
|
217
|
+
children: [
|
|
218
|
+
/* @__PURE__ */ d("label", {
|
|
219
|
+
htmlFor: "workspace-type",
|
|
220
|
+
className: "text-sm font-medium text-foreground",
|
|
221
|
+
children: O("createWorkspace.typeLabel", "Workspace Type")
|
|
222
|
+
}),
|
|
223
|
+
/* @__PURE__ */ f("select", {
|
|
224
|
+
id: "workspace-type",
|
|
225
|
+
className: "h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground",
|
|
226
|
+
...U.register("type"),
|
|
227
|
+
children: [/* @__PURE__ */ d("option", {
|
|
228
|
+
value: "TEAM",
|
|
229
|
+
children: O("createWorkspace.typeTeam", "Team Workspace")
|
|
230
|
+
}), /* @__PURE__ */ d("option", {
|
|
231
|
+
value: "PERSONAL",
|
|
232
|
+
children: O("createWorkspace.typePersonal", "Personal Workspace")
|
|
233
|
+
})]
|
|
234
|
+
}),
|
|
235
|
+
/* @__PURE__ */ d("p", {
|
|
236
|
+
className: "text-xs text-muted-foreground",
|
|
237
|
+
children: O("createWorkspace.typeHint", "Choose between a collaborative workspace or a personal one")
|
|
238
|
+
})
|
|
239
|
+
]
|
|
240
|
+
}),
|
|
241
|
+
/* @__PURE__ */ f("div", {
|
|
242
|
+
className: "flex justify-end gap-3 pt-4",
|
|
243
|
+
children: [/* @__PURE__ */ d(p, {
|
|
244
|
+
type: "button",
|
|
245
|
+
variant: "outline",
|
|
246
|
+
onClick: () => A(`${j}/list`),
|
|
247
|
+
disabled: N,
|
|
248
|
+
children: O("createWorkspace.cancel", "Cancel")
|
|
249
|
+
}), /* @__PURE__ */ d(p, {
|
|
250
|
+
type: "submit",
|
|
251
|
+
disabled: N || F || R,
|
|
252
|
+
children: N ? O("createWorkspace.creating", "Creating...") : O("createWorkspace.submit", "Create Workspace")
|
|
253
|
+
})]
|
|
254
|
+
})
|
|
255
|
+
]
|
|
256
|
+
}) })]
|
|
257
|
+
})]
|
|
258
|
+
})
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
//#endregion
|
|
262
|
+
export { D as CreateWorkspacePage };
|
|
263
|
+
|
|
264
|
+
//# sourceMappingURL=CreateWorkspacePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateWorkspacePage.js","names":[],"sources":["../../src/pages/CreateWorkspacePage.tsx"],"sourcesContent":["import { useEffect, useMemo, useCallback } from 'react';\nimport { ArrowLeft, AlertCircle } from 'lucide-react';\nimport { Link, useNavigate } from 'react-router-dom';\nimport {\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n Skeleton,\n} from '@burdenoff/fe-libs/ui';\nimport { useForm, z } from '@burdenoff/fe-libs/form';\nimport { PermissionGate, AccessDenied } from '@burdenoff/fe-libs/shared/components';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { WORKSPACE_PERMISSIONS } from '../constants/permissions';\nimport { useCreateWorkspace } from '../hooks/useWorkspaceMutations';\nimport { useMyTenants, useMyOrganizations } from '../hooks/useTenants';\nimport { useWorkspacesContext } from '../providers/WorkspacesProvider';\nimport { generateSlug } from '../utils/slug';\n\ntype CreateWorkspaceFormData = {\n name: string;\n slug: string;\n tenantId: string;\n organizationId: string;\n type?: 'TEAM' | 'PERSONAL';\n};\n\nexport function CreateWorkspacePage() {\n const { t } = useI18n();\n const tr = useCallback(\n (key: string, fallback: string): string => {\n const value = t(key);\n return value === key ? fallback : value;\n },\n [t]\n );\n const createWorkspaceSchema = useMemo(\n () =>\n z.object({\n name: z\n .string()\n .min(2, tr('createWorkspace.validation.nameMin', 'Name must be at least 2 characters'))\n .max(100),\n slug: z\n .string()\n .min(2, tr('createWorkspace.validation.slugMin', 'Slug must be at least 2 characters'))\n .max(50)\n .regex(\n /^[a-z0-9-]+$/,\n tr(\n 'createWorkspace.validation.slugFormat',\n 'Slug can only contain lowercase letters, numbers, and hyphens'\n )\n ),\n tenantId: z\n .string()\n .min(1, tr('createWorkspace.validation.tenantRequired', 'Please select a tenant')),\n organizationId: z\n .string()\n .min(\n 1,\n tr('createWorkspace.validation.organizationRequired', 'Please select an organization')\n ),\n type: z.enum(['TEAM', 'PERSONAL']).optional(),\n }),\n [tr]\n );\n\n const navigate = useNavigate();\n const { basePath = '/' } = useWorkspacesContext();\n const { mutate: createWorkspace, isPending } = useCreateWorkspace();\n const { data: tenantsData, isLoading: isLoadingTenants, error: tenantsError } = useMyTenants();\n const {\n data: organizationsData,\n isLoading: isLoadingOrganizations,\n error: organizationsError,\n } = useMyOrganizations();\n\n const tenants = tenantsData?.items ?? [];\n const allOrganizations = organizationsData?.items ?? [];\n\n const defaultTenantId = useMemo(() => {\n const sharedTenant = tenants.find(\n (tenant) => tenant.type === 'SHARED' || tenant.slug === 'burdenoff-shared'\n );\n return sharedTenant?.id ?? tenants[0]?.id ?? '';\n }, [tenants]);\n\n const form = useForm<CreateWorkspaceFormData>({\n schema: createWorkspaceSchema,\n defaultValues: {\n name: '',\n slug: '',\n tenantId: '',\n organizationId: '',\n type: 'TEAM',\n },\n });\n\n const selectedTenantId = form.watch('tenantId');\n const workspaceName = form.watch('name');\n\n // Filter organizations by selected tenant\n const filteredOrganizations = useMemo(() => {\n if (!selectedTenantId) return [];\n return allOrganizations.filter((org) => org.tenantId === selectedTenantId);\n }, [selectedTenantId, allOrganizations]);\n\n // Auto-generate slug from name (clear when name is empty)\n useEffect(() => {\n form.setValue('slug', workspaceName ? generateSlug(workspaceName) : '');\n }, [workspaceName, form]);\n\n // Reset organizationId when tenant changes\n useEffect(() => {\n form.setValue('organizationId', '');\n }, [selectedTenantId, form]);\n\n useEffect(() => {\n if (!form.getValues('tenantId') && defaultTenantId) {\n form.setValue('tenantId', defaultTenantId, {\n shouldDirty: false,\n shouldTouch: false,\n });\n }\n }, [defaultTenantId, form]);\n\n useEffect(() => {\n const currentOrganizationId = form.getValues('organizationId');\n const hasCurrentOrganization = filteredOrganizations.some(\n (organization) => organization.id === currentOrganizationId\n );\n\n if (!hasCurrentOrganization && filteredOrganizations[0]?.id) {\n form.setValue('organizationId', filteredOrganizations[0].id, {\n shouldDirty: false,\n shouldTouch: false,\n });\n }\n }, [filteredOrganizations, form]);\n\n const onSubmit = (data: CreateWorkspaceFormData) => {\n createWorkspace(\n {\n name: data.name,\n slug: data.slug,\n tenantId: data.tenantId,\n organizationId: data.organizationId,\n type: data.type,\n },\n {\n onSuccess: (newWorkspace) => {\n // Navigate to the new workspace\n navigate(`${basePath}/${newWorkspace.id}`);\n },\n }\n );\n };\n\n return (\n <PermissionGate\n permission={WORKSPACE_PERMISSIONS.WORKSPACE_CREATE}\n fallback={\n <div className=\"p-6\">\n <Link\n to={`${basePath}/list`}\n className=\"inline-flex items-center gap-2 text-muted-foreground hover:text-foreground transition-colors mb-6\"\n >\n <ArrowLeft size={20} />\n {tr('createWorkspace.backToWorkspaces', 'Back to Workspaces')}\n </Link>\n <AccessDenied\n variant=\"card\"\n title={tr('createWorkspace.permissionRequiredTitle', 'Permission Required')}\n description={tr(\n 'createWorkspace.permissionRequiredDescription',\n \"You don't have permission to create workspaces.\"\n )}\n details={tr('createWorkspace.permissionRequiredDetails', 'Required: workspace:create')}\n primaryAction={{\n label: tr('createWorkspace.goBack', 'Go Back'),\n onClick: () => navigate(`${basePath}/list`),\n }}\n />\n </div>\n }\n >\n <div className=\"space-y-4 sm:space-y-6 p-3 sm:p-6\">\n {/* Back link */}\n <Link\n to={`${basePath}/list`}\n className=\"inline-flex items-center gap-2 text-muted-foreground hover:text-foreground transition-colors\"\n >\n <ArrowLeft size={20} />\n {tr('createWorkspace.backToWorkspaces', 'Back to Workspaces')}\n </Link>\n\n {/* Form card */}\n <Card className=\"max-w-2xl mx-auto\">\n <CardHeader>\n <CardTitle>{tr('createWorkspace.title', 'Create New Workspace')}</CardTitle>\n <CardDescription>\n {tr(\n 'createWorkspace.subtitle',\n 'Set up a new workspace for your team or personal use'\n )}\n </CardDescription>\n </CardHeader>\n <CardContent>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-6\">\n <div className=\"space-y-2\">\n <label htmlFor=\"workspace-name\" className=\"text-sm font-medium text-foreground\">\n {tr('createWorkspace.nameLabel', 'Workspace Name *')}\n </label>\n <input\n id=\"workspace-name\"\n placeholder={tr('createWorkspace.namePlaceholder', 'My Workspace')}\n className=\"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground\"\n {...form.register('name')}\n />\n <p className=\"text-xs text-muted-foreground\">\n {tr('createWorkspace.nameHint', 'A descriptive name for your workspace')}\n </p>\n {form.formState.errors.name?.message && (\n <p className=\"text-sm text-destructive\">{form.formState.errors.name.message}</p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"workspace-slug\" className=\"text-sm font-medium text-foreground\">\n {tr('createWorkspace.slugLabel', 'Slug *')}\n </label>\n <input\n id=\"workspace-slug\"\n placeholder={tr('createWorkspace.slugPlaceholder', 'my-workspace')}\n className=\"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground\"\n {...form.register('slug')}\n />\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'createWorkspace.slugHint',\n 'URL-friendly identifier (auto-generated, but you can edit it)'\n )}\n </p>\n {form.formState.errors.slug?.message && (\n <p className=\"text-sm text-destructive\">{form.formState.errors.slug.message}</p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"workspace-tenant\" className=\"text-sm font-medium text-foreground\">\n {tr('createWorkspace.tenantLabel', 'Tenant *')}\n </label>\n {isLoadingTenants ? (\n <Skeleton className=\"h-10 w-full\" />\n ) : tenantsError ? (\n <div className=\"flex items-center gap-2 text-sm text-destructive\">\n <AlertCircle size={16} />\n {tr('createWorkspace.failedToLoadTenants', 'Failed to load tenants')}\n </div>\n ) : tenants.length === 0 ? (\n <div className=\"text-sm text-muted-foreground\">\n {tr(\n 'createWorkspace.noTenantsAvailable',\n 'No tenants available. Contact your administrator.'\n )}\n </div>\n ) : (\n <select\n id=\"workspace-tenant\"\n className=\"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground\"\n {...form.register('tenantId')}\n >\n <option value=\"\">\n {tr('createWorkspace.selectTenantPlaceholder', 'Select a tenant')}\n </option>\n {tenants.map((tenant) => (\n <option key={tenant.id} value={tenant.id}>\n {tenant.name}\n </option>\n ))}\n </select>\n )}\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'createWorkspace.tenantHint',\n 'Select which tenant this workspace belongs to'\n )}\n </p>\n {form.formState.errors.tenantId?.message && (\n <p className=\"text-sm text-destructive\">\n {form.formState.errors.tenantId.message}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <label\n htmlFor=\"workspace-organization\"\n className=\"text-sm font-medium text-foreground\"\n >\n {tr('createWorkspace.organizationLabel', 'Organization *')}\n </label>\n {isLoadingOrganizations ? (\n <Skeleton className=\"h-10 w-full\" />\n ) : organizationsError ? (\n <div className=\"flex items-center gap-2 text-sm text-destructive\">\n <AlertCircle size={16} />\n {tr(\n 'createWorkspace.failedToLoadOrganizations',\n 'Failed to load organizations'\n )}\n </div>\n ) : !selectedTenantId ? (\n <div className=\"text-sm text-muted-foreground\">\n {tr('createWorkspace.selectTenantFirst', 'Please select a tenant first')}\n </div>\n ) : filteredOrganizations.length === 0 ? (\n <div className=\"text-sm text-muted-foreground\">\n {tr(\n 'createWorkspace.noOrganizationsFound',\n 'No organizations found for this tenant'\n )}\n </div>\n ) : (\n <select\n id=\"workspace-organization\"\n className=\"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground\"\n disabled={!selectedTenantId}\n {...form.register('organizationId')}\n >\n <option value=\"\">\n {tr(\n 'createWorkspace.selectOrganizationPlaceholder',\n 'Select an organization'\n )}\n </option>\n {filteredOrganizations.map((org) => (\n <option key={org.id} value={org.id}>\n {org.name}\n </option>\n ))}\n </select>\n )}\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'createWorkspace.organizationHint',\n 'Select which organization owns this workspace'\n )}\n </p>\n {form.formState.errors.organizationId?.message && (\n <p className=\"text-sm text-destructive\">\n {form.formState.errors.organizationId.message}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <label htmlFor=\"workspace-type\" className=\"text-sm font-medium text-foreground\">\n {tr('createWorkspace.typeLabel', 'Workspace Type')}\n </label>\n <select\n id=\"workspace-type\"\n className=\"h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground\"\n {...form.register('type')}\n >\n <option value=\"TEAM\">{tr('createWorkspace.typeTeam', 'Team Workspace')}</option>\n <option value=\"PERSONAL\">\n {tr('createWorkspace.typePersonal', 'Personal Workspace')}\n </option>\n </select>\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'createWorkspace.typeHint',\n 'Choose between a collaborative workspace or a personal one'\n )}\n </p>\n </div>\n\n <div className=\"flex justify-end gap-3 pt-4\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => navigate(`${basePath}/list`)}\n disabled={isPending}\n >\n {tr('createWorkspace.cancel', 'Cancel')}\n </Button>\n <Button\n type=\"submit\"\n disabled={isPending || isLoadingTenants || isLoadingOrganizations}\n >\n {isPending\n ? tr('createWorkspace.creating', 'Creating...')\n : tr('createWorkspace.submit', 'Create Workspace')}\n </Button>\n </div>\n </form>\n </CardContent>\n </Card>\n </div>\n </PermissionGate>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InviteAcceptancePage.d.ts","sourceRoot":"","sources":["../../src/pages/InviteAcceptancePage.tsx"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,wBAAgB,oBAAoB,4CAmQnC"}
|