@burdenoff/microfe-workspaces 2026.510.50 → 2026.511.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/wspace-operations.d.ts +91 -0
- package/dist/generated/wspace-operations.d.ts.map +1 -1
- package/dist/generated/wspace-operations.js +79 -51
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/hooks/useMemberMutations.d.ts.map +1 -1
- package/dist/hooks/useMemberMutations.js +141 -60
- package/dist/hooks/useMemberMutations.js.map +1 -1
- package/dist/hooks/useProjectMutations.d.ts.map +1 -1
- package/dist/hooks/useProjectMutations.js +84 -44
- package/dist/hooks/useProjectMutations.js.map +1 -1
- package/dist/hooks/useWorkspaceMutations.d.ts.map +1 -1
- package/dist/hooks/useWorkspaceMutations.js +64 -29
- package/dist/hooks/useWorkspaceMutations.js.map +1 -1
- package/dist/hooks/useWorkspacesEventEmitter.d.ts +5 -1
- package/dist/hooks/useWorkspacesEventEmitter.d.ts.map +1 -1
- package/dist/hooks/useWorkspacesEventEmitter.js +8 -7
- package/dist/hooks/useWorkspacesEventEmitter.js.map +1 -1
- package/dist/hooks/useWorkspacesPageView.d.ts +27 -0
- package/dist/hooks/useWorkspacesPageView.d.ts.map +1 -0
- package/dist/hooks/useWorkspacesPageView.js +29 -0
- package/dist/hooks/useWorkspacesPageView.js.map +1 -0
- package/dist/pages/ActivityListPage.d.ts.map +1 -1
- package/dist/pages/ActivityListPage.js +59 -56
- package/dist/pages/ActivityListPage.js.map +1 -1
- package/dist/pages/CreateWorkspacePage.d.ts.map +1 -1
- package/dist/pages/CreateWorkspacePage.js +104 -104
- package/dist/pages/CreateWorkspacePage.js.map +1 -1
- package/dist/pages/InviteAcceptancePage.d.ts.map +1 -1
- package/dist/pages/InviteAcceptancePage.js +197 -216
- package/dist/pages/InviteAcceptancePage.js.map +1 -1
- package/dist/pages/MembersListPage.d.ts.map +1 -1
- package/dist/pages/MembersListPage.js +142 -138
- package/dist/pages/MembersListPage.js.map +1 -1
- package/dist/pages/ProjectDetailPage.d.ts.map +1 -1
- package/dist/pages/ProjectDetailPage.js +181 -176
- package/dist/pages/ProjectDetailPage.js.map +1 -1
- package/dist/pages/ProjectsListPage.d.ts.map +1 -1
- package/dist/pages/ProjectsListPage.js +175 -171
- package/dist/pages/ProjectsListPage.js.map +1 -1
- package/dist/pages/WorkspaceDetailPage.d.ts.map +1 -1
- package/dist/pages/WorkspaceDetailPage.js +104 -101
- package/dist/pages/WorkspaceDetailPage.js.map +1 -1
- package/dist/pages/WorkspaceSettingsPage.d.ts.map +1 -1
- package/dist/pages/WorkspaceSettingsPage.js +182 -137
- package/dist/pages/WorkspaceSettingsPage.js.map +1 -1
- package/dist/pages/WorkspacesListPage.d.ts.map +1 -1
- package/dist/pages/WorkspacesListPage.js +77 -77
- package/dist/pages/WorkspacesListPage.js.map +1 -1
- package/dist/pages/dashboard/DashboardCustomizer.d.ts.map +1 -1
- package/dist/pages/dashboard/DashboardCustomizer.js +53 -55
- package/dist/pages/dashboard/DashboardCustomizer.js.map +1 -1
- package/dist/pages/dashboard/DashboardGrid.d.ts.map +1 -1
- package/dist/pages/dashboard/DashboardGrid.js +33 -36
- package/dist/pages/dashboard/DashboardGrid.js.map +1 -1
- package/dist/pages/dashboard/DashboardPage.d.ts.map +1 -1
- package/dist/pages/dashboard/DashboardPage.js +67 -65
- package/dist/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/pages/dashboard/WidgetWrapper.d.ts.map +1 -1
- package/dist/pages/dashboard/WidgetWrapper.js +3 -6
- package/dist/pages/dashboard/WidgetWrapper.js.map +1 -1
- package/dist/utils/i18n.d.ts +13 -0
- package/dist/utils/i18n.d.ts.map +1 -0
- package/dist/utils/i18n.js +12 -0
- package/dist/utils/i18n.js.map +1 -0
- package/dist/utils/telemetryError.d.ts +2 -0
- package/dist/utils/telemetryError.d.ts.map +1 -0
- package/dist/utils/telemetryError.js +28 -0
- package/dist/utils/telemetryError.js.map +1 -0
- package/package.json +9 -4
|
@@ -1,157 +1,202 @@
|
|
|
1
1
|
import { useWorkspacesContext as e } from "../providers/WorkspacesProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
2
|
+
import { useGetWorkspaceTagsQuery as t, useReplaceWorkspaceTagsMutation as n } from "../generated/wspace-operations.js";
|
|
3
|
+
import { useWorkspace as r } from "../hooks/useWorkspaces.js";
|
|
4
|
+
import { WORKSPACE_PERMISSIONS as i } from "../constants/permissions.js";
|
|
5
|
+
import { tWithFallback as a } from "../utils/i18n.js";
|
|
6
|
+
import { useWorkspacesPageView as o } from "../hooks/useWorkspacesPageView.js";
|
|
7
|
+
import { useUpdateWorkspace as s } from "../hooks/useWorkspaceMutations.js";
|
|
8
|
+
import { useMemo as c } from "react";
|
|
9
|
+
import { ArrowLeft as l, Save as u } from "lucide-react";
|
|
10
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
11
|
+
import { Button as p, Card as m, CardContent as h, CardHeader as g, CardTitle as _ } from "@burdenoff/fe-libs/ui";
|
|
12
|
+
import { useNavigate as v, useParams as y } from "react-router-dom";
|
|
13
|
+
import { AccessDenied as b, PermissionGate as x } from "@burdenoff/fe-libs/shared/components";
|
|
14
|
+
import { useI18n as S } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
15
|
+
import { Form as C, FormControl as w, FormField as T, FormItem as E, FormLabel as D, FormMessage as O, Input as k, z as A } from "@burdenoff/fe-libs/form";
|
|
16
|
+
import { TagsWidget as j } from "@burdenoff/fe-libs/tag";
|
|
13
17
|
//#region src/pages/WorkspaceSettingsPage.tsx
|
|
14
|
-
var
|
|
15
|
-
name:
|
|
16
|
-
contactEmail:
|
|
17
|
-
domain:
|
|
18
|
-
website:
|
|
18
|
+
var M = A.object({
|
|
19
|
+
name: A.string().min(2).max(100),
|
|
20
|
+
contactEmail: A.string().email().optional().or(A.literal("")),
|
|
21
|
+
domain: A.string().optional(),
|
|
22
|
+
website: A.string().url().optional().or(A.literal(""))
|
|
19
23
|
});
|
|
20
|
-
function
|
|
21
|
-
let { t:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
function N() {
|
|
25
|
+
let { t: A } = S(), { workspaceId: N } = y();
|
|
26
|
+
o("workspaces.settings", {
|
|
27
|
+
workspaceId: N,
|
|
28
|
+
requireParams: !0
|
|
29
|
+
});
|
|
30
|
+
let P = v(), { basePath: F = "/" } = e(), { data: I, isLoading: L } = r(N || ""), { mutate: R, isPending: z } = s(), { data: B, refetch: V } = t({
|
|
31
|
+
variables: { input: { workspaceId: N ?? "" } },
|
|
32
|
+
skip: !N,
|
|
33
|
+
fetchPolicy: "cache-and-network"
|
|
34
|
+
}), [H, { loading: U }] = n(), W = c(() => (B?.getWorkspaceTags ?? []).flatMap((e) => e.tag ? [{
|
|
35
|
+
id: e.tagId,
|
|
36
|
+
key: e.tag.key,
|
|
37
|
+
label: e.tag.label,
|
|
38
|
+
value: e.tag.value ?? null,
|
|
39
|
+
vocabularyId: e.tag.vocabularyId ?? null,
|
|
40
|
+
parentId: e.tag.parentId ?? null,
|
|
41
|
+
hierarchyPath: e.tag.hierarchyPath ?? null,
|
|
42
|
+
color: e.tag.color ?? null,
|
|
43
|
+
icon: e.tag.icon ?? null,
|
|
44
|
+
description: e.tag.description ?? null
|
|
45
|
+
}] : []), [B?.getWorkspaceTags]), G = async (e) => {
|
|
46
|
+
N && (await H({ variables: { input: {
|
|
47
|
+
workspaceId: N,
|
|
48
|
+
tagIds: e.map((e) => e.id)
|
|
49
|
+
} } }), await V());
|
|
50
|
+
};
|
|
51
|
+
return L ? /* @__PURE__ */ d("div", {
|
|
26
52
|
className: "p-6",
|
|
27
|
-
children:
|
|
28
|
-
}) :
|
|
29
|
-
permission:
|
|
30
|
-
fallback: /* @__PURE__ */
|
|
53
|
+
children: a(A, "workspaceSettings.loading", "Loading...")
|
|
54
|
+
}) : I ? /* @__PURE__ */ d(x, {
|
|
55
|
+
permission: i.WORKSPACE_UPDATE,
|
|
56
|
+
fallback: /* @__PURE__ */ f("div", {
|
|
31
57
|
className: "p-6",
|
|
32
|
-
children: [/* @__PURE__ */
|
|
58
|
+
children: [/* @__PURE__ */ f(p, {
|
|
33
59
|
variant: "ghost",
|
|
34
|
-
onClick: () =>
|
|
60
|
+
onClick: () => P(`${F}/${N}`),
|
|
35
61
|
className: "gap-2 mb-6 -ml-2",
|
|
36
|
-
children: [/* @__PURE__ */
|
|
37
|
-
}), /* @__PURE__ */
|
|
62
|
+
children: [/* @__PURE__ */ d(l, { size: 20 }), a(A, "workspaceSettings.backToWorkspace", "Back to Workspace")]
|
|
63
|
+
}), /* @__PURE__ */ d(b, {
|
|
38
64
|
variant: "card",
|
|
39
|
-
title:
|
|
40
|
-
description:
|
|
41
|
-
details:
|
|
65
|
+
title: a(A, "workspaceSettings.permissionRequired", "Permission Required"),
|
|
66
|
+
description: a(A, "workspaceSettings.permissionRequiredDesc", "You don't have permission to edit workspace settings."),
|
|
67
|
+
details: a(A, "workspaceSettings.permissionRequiredDetails", "Required: workspace:update"),
|
|
42
68
|
primaryAction: {
|
|
43
|
-
label:
|
|
44
|
-
onClick: () =>
|
|
69
|
+
label: a(A, "workspaceSettings.goBack", "Go Back"),
|
|
70
|
+
onClick: () => P(`${F}/${N}`)
|
|
45
71
|
}
|
|
46
72
|
})]
|
|
47
73
|
}),
|
|
48
|
-
children: /* @__PURE__ */
|
|
74
|
+
children: /* @__PURE__ */ f("div", {
|
|
49
75
|
className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
|
|
50
|
-
children: [
|
|
51
|
-
/* @__PURE__ */
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
children:
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
76
|
+
children: [
|
|
77
|
+
/* @__PURE__ */ f("div", { children: [
|
|
78
|
+
/* @__PURE__ */ f(p, {
|
|
79
|
+
variant: "ghost",
|
|
80
|
+
onClick: () => P(`${F}/${N}`),
|
|
81
|
+
className: "gap-2 mb-2 -ml-2",
|
|
82
|
+
children: [/* @__PURE__ */ d(l, { size: 20 }), a(A, "workspaceSettings.backToWorkspace", "Back to Workspace")]
|
|
83
|
+
}),
|
|
84
|
+
/* @__PURE__ */ d("h1", {
|
|
85
|
+
className: "text-2xl sm:text-3xl font-bold",
|
|
86
|
+
children: a(A, "workspaceSettings.title", "Workspace Settings")
|
|
87
|
+
}),
|
|
88
|
+
/* @__PURE__ */ d("p", {
|
|
89
|
+
className: "text-muted-foreground",
|
|
90
|
+
children: a(A, "workspaceSettings.subtitle", "Manage workspace configuration")
|
|
91
|
+
})
|
|
92
|
+
] }),
|
|
93
|
+
/* @__PURE__ */ f(m, { children: [/* @__PURE__ */ d(g, { children: /* @__PURE__ */ d(_, { children: a(A, "workspaceSettings.generalSettings", "General Settings") }) }), /* @__PURE__ */ d(h, { children: /* @__PURE__ */ d(C, {
|
|
94
|
+
schema: M,
|
|
95
|
+
onSubmit: (e) => {
|
|
96
|
+
N && R({
|
|
97
|
+
id: N,
|
|
98
|
+
input: {
|
|
99
|
+
...e,
|
|
100
|
+
contactEmail: e.contactEmail || void 0,
|
|
101
|
+
domain: e.domain || void 0,
|
|
102
|
+
website: e.website || void 0
|
|
103
|
+
}
|
|
104
|
+
}, { onSuccess: () => {
|
|
105
|
+
P(`${F}/${N}`);
|
|
106
|
+
} });
|
|
107
|
+
},
|
|
108
|
+
formOptions: { defaultValues: {
|
|
109
|
+
name: I?.name || "",
|
|
110
|
+
contactEmail: I?.contactEmail || "",
|
|
111
|
+
domain: I?.domain || "",
|
|
112
|
+
website: I?.website || ""
|
|
113
|
+
} },
|
|
114
|
+
children: (e) => /* @__PURE__ */ f("div", {
|
|
115
|
+
className: "space-y-4",
|
|
116
|
+
children: [
|
|
117
|
+
/* @__PURE__ */ d(T, {
|
|
118
|
+
control: e.control,
|
|
119
|
+
name: "name",
|
|
120
|
+
render: ({ field: e }) => /* @__PURE__ */ f(E, { children: [
|
|
121
|
+
/* @__PURE__ */ d(D, { children: a(A, "workspaceSettings.workspaceName", "Workspace Name") }),
|
|
122
|
+
/* @__PURE__ */ d(w, { children: /* @__PURE__ */ d(k, { ...e }) }),
|
|
123
|
+
/* @__PURE__ */ d(O, {})
|
|
124
|
+
] })
|
|
125
|
+
}),
|
|
126
|
+
/* @__PURE__ */ d(T, {
|
|
127
|
+
control: e.control,
|
|
128
|
+
name: "contactEmail",
|
|
129
|
+
render: ({ field: e }) => /* @__PURE__ */ f(E, { children: [
|
|
130
|
+
/* @__PURE__ */ d(D, { children: a(A, "workspaceSettings.contactEmail", "Contact Email") }),
|
|
131
|
+
/* @__PURE__ */ d(w, { children: /* @__PURE__ */ d(k, {
|
|
132
|
+
type: "email",
|
|
133
|
+
...e
|
|
134
|
+
}) }),
|
|
135
|
+
/* @__PURE__ */ d(O, {})
|
|
136
|
+
] })
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ d(T, {
|
|
139
|
+
control: e.control,
|
|
140
|
+
name: "domain",
|
|
141
|
+
render: ({ field: e }) => /* @__PURE__ */ f(E, { children: [
|
|
142
|
+
/* @__PURE__ */ d(D, { children: a(A, "workspaceSettings.domain", "Domain") }),
|
|
143
|
+
/* @__PURE__ */ d(w, { children: /* @__PURE__ */ d(k, { ...e }) }),
|
|
144
|
+
/* @__PURE__ */ d(O, {})
|
|
145
|
+
] })
|
|
146
|
+
}),
|
|
147
|
+
/* @__PURE__ */ d(T, {
|
|
148
|
+
control: e.control,
|
|
149
|
+
name: "website",
|
|
150
|
+
render: ({ field: e }) => /* @__PURE__ */ f(E, { children: [
|
|
151
|
+
/* @__PURE__ */ d(D, { children: a(A, "workspaceSettings.website", "Website") }),
|
|
152
|
+
/* @__PURE__ */ d(w, { children: /* @__PURE__ */ d(k, {
|
|
153
|
+
type: "url",
|
|
154
|
+
...e
|
|
155
|
+
}) }),
|
|
156
|
+
/* @__PURE__ */ d(O, {})
|
|
157
|
+
] })
|
|
158
|
+
}),
|
|
159
|
+
/* @__PURE__ */ f("div", {
|
|
160
|
+
className: "flex gap-2",
|
|
161
|
+
children: [/* @__PURE__ */ f(p, {
|
|
162
|
+
type: "submit",
|
|
163
|
+
disabled: z,
|
|
164
|
+
className: "gap-2",
|
|
165
|
+
children: [/* @__PURE__ */ d(u, { size: 20 }), z ? a(A, "workspaceSettings.saving", "Saving...") : a(A, "workspaceSettings.saveChanges", "Save Changes")]
|
|
166
|
+
}), /* @__PURE__ */ d(p, {
|
|
167
|
+
type: "button",
|
|
168
|
+
variant: "outline",
|
|
169
|
+
onClick: () => P(`${F}/${N}`),
|
|
170
|
+
children: a(A, "workspaceSettings.cancel", "Cancel")
|
|
171
|
+
})]
|
|
172
|
+
})
|
|
173
|
+
]
|
|
174
|
+
})
|
|
175
|
+
}) })] }),
|
|
176
|
+
N && /* @__PURE__ */ f(m, { children: [/* @__PURE__ */ d(g, { children: /* @__PURE__ */ d(_, { children: a(A, "workspaceSettings.tags", "Tags") }) }), /* @__PURE__ */ f(h, {
|
|
177
|
+
className: "space-y-3",
|
|
178
|
+
children: [/* @__PURE__ */ d("p", {
|
|
179
|
+
className: "text-sm text-muted-foreground",
|
|
180
|
+
children: a(A, "workspaceSettings.tagsDescription", "Use universal tags to classify and filter this workspace.")
|
|
181
|
+
}), /* @__PURE__ */ d(j, {
|
|
182
|
+
entityType: "Workspace",
|
|
183
|
+
entityId: N,
|
|
184
|
+
workspaceId: N,
|
|
185
|
+
tags: W,
|
|
186
|
+
onAdd: (e) => G([...W, e]),
|
|
187
|
+
onRemove: (e) => G(W.filter((t) => t.id !== e)),
|
|
188
|
+
syncGraphNotifications: !1,
|
|
189
|
+
className: U ? "pointer-events-none opacity-75" : void 0
|
|
190
|
+
})]
|
|
191
|
+
})] })
|
|
192
|
+
]
|
|
148
193
|
})
|
|
149
|
-
}) : /* @__PURE__ */
|
|
194
|
+
}) : /* @__PURE__ */ d("div", {
|
|
150
195
|
className: "p-6",
|
|
151
|
-
children:
|
|
196
|
+
children: a(A, "workspaceSettings.notFound", "Workspace not found")
|
|
152
197
|
});
|
|
153
198
|
}
|
|
154
199
|
//#endregion
|
|
155
|
-
export {
|
|
200
|
+
export { N as WorkspaceSettingsPage };
|
|
156
201
|
|
|
157
202
|
//# sourceMappingURL=WorkspaceSettingsPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspaceSettingsPage.js","names":[],"sources":["../../src/pages/WorkspaceSettingsPage.tsx"],"sourcesContent":["import { useCallback } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { ArrowLeft, Save } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Button, Card, CardHeader, CardTitle, CardContent } from '@burdenoff/fe-libs/ui';\nimport {\n Form,\n FormField,\n FormItem,\n FormLabel,\n FormControl,\n FormMessage,\n Input,\n z,\n} from '@burdenoff/fe-libs/form';\nimport { PermissionGate, AccessDenied } from '@burdenoff/fe-libs/shared/components';\nimport { WORKSPACE_PERMISSIONS } from '../constants/permissions';\nimport { useWorkspace } from '../hooks/useWorkspaces';\nimport { useUpdateWorkspace } from '../hooks/useWorkspaceMutations';\nimport { useWorkspacesContext } from '../providers/WorkspacesProvider';\n\nconst updateWorkspaceSchema = z.object({\n name: z.string().min(2).max(100),\n contactEmail: z.string().email().optional().or(z.literal('')),\n domain: z.string().optional(),\n website: z.string().url().optional().or(z.literal('')),\n});\n\ntype UpdateWorkspaceFormData = z.infer<typeof updateWorkspaceSchema>;\n\nexport function WorkspaceSettingsPage() {\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 { workspaceId } = useParams<{ workspaceId: string }>();\n const navigate = useNavigate();\n const { basePath = '/' } = useWorkspacesContext();\n const { data: workspace, isLoading } = useWorkspace(workspaceId || '');\n const { mutate: updateWorkspace, isPending } = useUpdateWorkspace();\n\n const handleSubmit = (data: UpdateWorkspaceFormData) => {\n if (!workspaceId) return;\n\n updateWorkspace(\n {\n id: workspaceId,\n input: {\n ...data,\n contactEmail: data.contactEmail || undefined,\n domain: data.domain || undefined,\n website: data.website || undefined,\n },\n },\n {\n onSuccess: () => {\n navigate(`${basePath}/${workspaceId}`);\n },\n }\n );\n };\n\n if (isLoading) {\n return <div className=\"p-6\">{tr('workspaceSettings.loading', 'Loading...')}</div>;\n }\n\n if (!workspace) {\n return <div className=\"p-6\">{tr('workspaceSettings.notFound', 'Workspace not found')}</div>;\n }\n\n return (\n <PermissionGate\n permission={WORKSPACE_PERMISSIONS.WORKSPACE_UPDATE}\n fallback={\n <div className=\"p-6\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(`${basePath}/${workspaceId}`)}\n className=\"gap-2 mb-6 -ml-2\"\n >\n <ArrowLeft size={20} />\n {tr('workspaceSettings.backToWorkspace', 'Back to Workspace')}\n </Button>\n <AccessDenied\n variant=\"card\"\n title={tr('workspaceSettings.permissionRequired', 'Permission Required')}\n description={tr(\n 'workspaceSettings.permissionRequiredDesc',\n \"You don't have permission to edit workspace settings.\"\n )}\n details={tr(\n 'workspaceSettings.permissionRequiredDetails',\n 'Required: workspace:update'\n )}\n primaryAction={{\n label: tr('workspaceSettings.goBack', 'Go Back'),\n onClick: () => navigate(`${basePath}/${workspaceId}`),\n }}\n />\n </div>\n }\n >\n <div className=\"space-y-4 sm:space-y-6 p-3 sm:p-6\">\n <div>\n <Button\n variant=\"ghost\"\n onClick={() => navigate(`${basePath}/${workspaceId}`)}\n className=\"gap-2 mb-2 -ml-2\"\n >\n <ArrowLeft size={20} />\n {tr('workspaceSettings.backToWorkspace', 'Back to Workspace')}\n </Button>\n <h1 className=\"text-2xl sm:text-3xl font-bold\">\n {tr('workspaceSettings.title', 'Workspace Settings')}\n </h1>\n <p className=\"text-muted-foreground\">\n {tr('workspaceSettings.subtitle', 'Manage workspace configuration')}\n </p>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>{tr('workspaceSettings.generalSettings', 'General Settings')}</CardTitle>\n </CardHeader>\n <CardContent>\n <Form\n schema={updateWorkspaceSchema}\n onSubmit={handleSubmit}\n formOptions={{\n defaultValues: {\n name: workspace?.name || '',\n contactEmail: workspace?.contactEmail || '',\n domain: workspace?.domain || '',\n website: workspace?.website || '',\n },\n }}\n >\n {(form) => (\n <div className=\"space-y-4\">\n <FormField\n control={form.control}\n name=\"name\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n {tr('workspaceSettings.workspaceName', 'Workspace Name')}\n </FormLabel>\n <FormControl>\n <Input {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"contactEmail\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n {tr('workspaceSettings.contactEmail', 'Contact Email')}\n </FormLabel>\n <FormControl>\n <Input type=\"email\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"domain\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>{tr('workspaceSettings.domain', 'Domain')}</FormLabel>\n <FormControl>\n <Input {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"website\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>{tr('workspaceSettings.website', 'Website')}</FormLabel>\n <FormControl>\n <Input type=\"url\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <div className=\"flex gap-2\">\n <Button type=\"submit\" disabled={isPending} className=\"gap-2\">\n <Save size={20} />\n {isPending\n ? tr('workspaceSettings.saving', 'Saving...')\n : tr('workspaceSettings.saveChanges', 'Save Changes')}\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => navigate(`${basePath}/${workspaceId}`)}\n >\n {tr('workspaceSettings.cancel', 'Cancel')}\n </Button>\n </div>\n </div>\n )}\n </Form>\n </CardContent>\n </Card>\n </div>\n </PermissionGate>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkspaceSettingsPage.js","names":[],"sources":["../../src/pages/WorkspaceSettingsPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { ArrowLeft, Save } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { type TagItem, TagsWidget } from '@burdenoff/fe-libs/tag';\nimport { tWithFallback } from '../utils/i18n';\nimport { Button, Card, CardHeader, CardTitle, CardContent } from '@burdenoff/fe-libs/ui';\nimport {\n useGetWorkspaceTagsQuery,\n useReplaceWorkspaceTagsMutation,\n type WorkspaceTagAssignmentFieldsFragment,\n} from '../generated/wspace-operations';\nimport {\n Form,\n FormField,\n FormItem,\n FormLabel,\n FormControl,\n FormMessage,\n Input,\n z,\n} from '@burdenoff/fe-libs/form';\nimport { PermissionGate, AccessDenied } from '@burdenoff/fe-libs/shared/components';\nimport { WORKSPACE_PERMISSIONS } from '../constants/permissions';\nimport { useWorkspace } from '../hooks/useWorkspaces';\nimport { useUpdateWorkspace } from '../hooks/useWorkspaceMutations';\nimport { useWorkspacesContext } from '../providers/WorkspacesProvider';\nimport { useWorkspacesPageView } from '../hooks/useWorkspacesPageView';\n\nconst updateWorkspaceSchema = z.object({\n name: z.string().min(2).max(100),\n contactEmail: z.string().email().optional().or(z.literal('')),\n domain: z.string().optional(),\n website: z.string().url().optional().or(z.literal('')),\n});\n\ntype UpdateWorkspaceFormData = z.infer<typeof updateWorkspaceSchema>;\n\nexport function WorkspaceSettingsPage() {\n const { t } = useI18n();\n const { workspaceId } = useParams<{ workspaceId: string }>();\n useWorkspacesPageView('workspaces.settings', { workspaceId, requireParams: true });\n const navigate = useNavigate();\n const { basePath = '/' } = useWorkspacesContext();\n const { data: workspace, isLoading } = useWorkspace(workspaceId || '');\n const { mutate: updateWorkspace, isPending } = useUpdateWorkspace();\n\n // Workspace tags (universal-tags assignments) — backend exposed via\n // wspace-workspace-svc workspace-tags.gql; this UI is the canonical\n // editor for them. Identical pattern to ProjectDetailPage.\n const { data: tagsData, refetch: refetchTags } = useGetWorkspaceTagsQuery({\n variables: { input: { workspaceId: workspaceId ?? '' } },\n skip: !workspaceId,\n fetchPolicy: 'cache-and-network',\n });\n const [replaceWorkspaceTags, { loading: tagsUpdating }] = useReplaceWorkspaceTagsMutation();\n // The widget keys tags by `id` for add/remove. We store the\n // assignment's tagId there so the round-trip back to\n // replaceWorkspaceTags has the right value to send. Display fields\n // come from the embedded `tag: UniversalTag` resolved by the\n // assignment — assignments without a hydrated tag (deleted or\n // unresolved) are dropped so the widget never renders empty badges.\n const widgetTags = useMemo<TagItem[]>(() => {\n const assignments = tagsData?.getWorkspaceTags ?? [];\n return assignments.flatMap((a: WorkspaceTagAssignmentFieldsFragment) => {\n if (!a.tag) return [];\n return [\n {\n id: a.tagId,\n key: a.tag.key,\n label: a.tag.label,\n value: a.tag.value ?? null,\n vocabularyId: a.tag.vocabularyId ?? null,\n parentId: a.tag.parentId ?? null,\n hierarchyPath: a.tag.hierarchyPath ?? null,\n color: a.tag.color ?? null,\n icon: a.tag.icon ?? null,\n description: a.tag.description ?? null,\n } satisfies TagItem,\n ];\n });\n }, [tagsData?.getWorkspaceTags]);\n\n const persistTags = async (next: TagItem[]) => {\n if (!workspaceId) return;\n await replaceWorkspaceTags({\n variables: {\n input: {\n workspaceId,\n tagIds: next.map((t) => t.id),\n },\n },\n });\n await refetchTags();\n };\n\n const handleAddTag = (tag: TagItem) => persistTags([...widgetTags, tag]);\n const handleRemoveTag = (tagId: string) => persistTags(widgetTags.filter((t) => t.id !== tagId));\n\n const handleSubmit = (data: UpdateWorkspaceFormData) => {\n if (!workspaceId) return;\n\n updateWorkspace(\n {\n id: workspaceId,\n input: {\n ...data,\n contactEmail: data.contactEmail || undefined,\n domain: data.domain || undefined,\n website: data.website || undefined,\n },\n },\n {\n onSuccess: () => {\n navigate(`${basePath}/${workspaceId}`);\n },\n }\n );\n };\n\n if (isLoading) {\n return <div className=\"p-6\">{tWithFallback(t, 'workspaceSettings.loading', 'Loading...')}</div>;\n }\n\n if (!workspace) {\n return (\n <div className=\"p-6\">\n {tWithFallback(t, 'workspaceSettings.notFound', 'Workspace not found')}\n </div>\n );\n }\n\n return (\n <PermissionGate\n permission={WORKSPACE_PERMISSIONS.WORKSPACE_UPDATE}\n fallback={\n <div className=\"p-6\">\n <Button\n variant=\"ghost\"\n onClick={() => navigate(`${basePath}/${workspaceId}`)}\n className=\"gap-2 mb-6 -ml-2\"\n >\n <ArrowLeft size={20} />\n {tWithFallback(t, 'workspaceSettings.backToWorkspace', 'Back to Workspace')}\n </Button>\n <AccessDenied\n variant=\"card\"\n title={tWithFallback(t, 'workspaceSettings.permissionRequired', 'Permission Required')}\n description={tWithFallback(\n t,\n 'workspaceSettings.permissionRequiredDesc',\n \"You don't have permission to edit workspace settings.\"\n )}\n details={tWithFallback(\n t,\n 'workspaceSettings.permissionRequiredDetails',\n 'Required: workspace:update'\n )}\n primaryAction={{\n label: tWithFallback(t, 'workspaceSettings.goBack', 'Go Back'),\n onClick: () => navigate(`${basePath}/${workspaceId}`),\n }}\n />\n </div>\n }\n >\n <div className=\"space-y-4 sm:space-y-6 p-3 sm:p-6\">\n <div>\n <Button\n variant=\"ghost\"\n onClick={() => navigate(`${basePath}/${workspaceId}`)}\n className=\"gap-2 mb-2 -ml-2\"\n >\n <ArrowLeft size={20} />\n {tWithFallback(t, 'workspaceSettings.backToWorkspace', 'Back to Workspace')}\n </Button>\n <h1 className=\"text-2xl sm:text-3xl font-bold\">\n {tWithFallback(t, 'workspaceSettings.title', 'Workspace Settings')}\n </h1>\n <p className=\"text-muted-foreground\">\n {tWithFallback(t, 'workspaceSettings.subtitle', 'Manage workspace configuration')}\n </p>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>\n {tWithFallback(t, 'workspaceSettings.generalSettings', 'General Settings')}\n </CardTitle>\n </CardHeader>\n <CardContent>\n <Form\n schema={updateWorkspaceSchema}\n onSubmit={handleSubmit}\n formOptions={{\n defaultValues: {\n name: workspace?.name || '',\n contactEmail: workspace?.contactEmail || '',\n domain: workspace?.domain || '',\n website: workspace?.website || '',\n },\n }}\n >\n {(form) => (\n <div className=\"space-y-4\">\n <FormField\n control={form.control}\n name=\"name\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n {tWithFallback(t, 'workspaceSettings.workspaceName', 'Workspace Name')}\n </FormLabel>\n <FormControl>\n <Input {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"contactEmail\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n {tWithFallback(t, 'workspaceSettings.contactEmail', 'Contact Email')}\n </FormLabel>\n <FormControl>\n <Input type=\"email\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"domain\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n {tWithFallback(t, 'workspaceSettings.domain', 'Domain')}\n </FormLabel>\n <FormControl>\n <Input {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <FormField\n control={form.control}\n name=\"website\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n {tWithFallback(t, 'workspaceSettings.website', 'Website')}\n </FormLabel>\n <FormControl>\n <Input type=\"url\" {...field} />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n\n <div className=\"flex gap-2\">\n <Button type=\"submit\" disabled={isPending} className=\"gap-2\">\n <Save size={20} />\n {isPending\n ? tWithFallback(t, 'workspaceSettings.saving', 'Saving...')\n : tWithFallback(t, 'workspaceSettings.saveChanges', 'Save Changes')}\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => navigate(`${basePath}/${workspaceId}`)}\n >\n {tWithFallback(t, 'workspaceSettings.cancel', 'Cancel')}\n </Button>\n </div>\n </div>\n )}\n </Form>\n </CardContent>\n </Card>\n\n {workspaceId && (\n <Card>\n <CardHeader>\n <CardTitle>{tWithFallback(t, 'workspaceSettings.tags', 'Tags')}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {tWithFallback(\n t,\n 'workspaceSettings.tagsDescription',\n 'Use universal tags to classify and filter this workspace.'\n )}\n </p>\n <TagsWidget\n entityType=\"Workspace\"\n entityId={workspaceId}\n workspaceId={workspaceId}\n tags={widgetTags}\n onAdd={handleAddTag}\n onRemove={handleRemoveTag}\n syncGraphNotifications={false}\n className={tagsUpdating ? 'pointer-events-none opacity-75' : undefined}\n />\n </CardContent>\n </Card>\n )}\n </div>\n </PermissionGate>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkspacesListPage.d.ts","sourceRoot":"","sources":["../../src/pages/WorkspacesListPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WorkspacesListPage.d.ts","sourceRoot":"","sources":["../../src/pages/WorkspacesListPage.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,kBAAkB,4CAmPjC"}
|