@burdenoff/microfe-workspaces 2026.1016.10 → 2026.1016.11
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.
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { useTr as e } from "../../hooks/useTr.js";
|
|
2
|
+
import { GetWorkspaceTagsDocument as t, ReplaceWorkspaceTagsDocument as n } from "../../generated/wspace-operations.js";
|
|
3
|
+
import { useLayoutEffect as r, useMemo as i, useRef as a, useState as o } from "react";
|
|
4
|
+
import { jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
5
|
+
import { Button as l } from "@burdenoff/fe-libs/ui";
|
|
6
|
+
import { TagsWidget as u } from "@burdenoff/fe-libs/tag";
|
|
7
|
+
import { NetworkStatus as d } from "@apollo/client";
|
|
8
|
+
import { useMutation as f, useQuery as p } from "@apollo/client/react";
|
|
9
|
+
//#region src/components/tags/WorkspaceTagsEditor.tsx
|
|
10
|
+
function m(e, t) {
|
|
11
|
+
if (!Array.isArray(e)) return !1;
|
|
12
|
+
let n = /* @__PURE__ */ new Set();
|
|
13
|
+
return e.every((e) => !e || typeof e.id != "string" || !e.id || typeof e.tagId != "string" || !e.tagId || e.entityId !== t || e.entityType !== "WORKSPACE" || n.has(e.tagId) ? !1 : (n.add(e.tagId), !0));
|
|
14
|
+
}
|
|
15
|
+
function h(e) {
|
|
16
|
+
let t = e.tag;
|
|
17
|
+
return !t || t.id !== e.tagId || typeof t.key != "string" || !t.key || typeof t.label != "string" || !t.label || ![
|
|
18
|
+
t.value,
|
|
19
|
+
t.vocabularyId,
|
|
20
|
+
t.parentId,
|
|
21
|
+
t.hierarchyPath,
|
|
22
|
+
t.color,
|
|
23
|
+
t.icon,
|
|
24
|
+
t.description
|
|
25
|
+
].every((e) => e === null || typeof e == "string") ? null : {
|
|
26
|
+
id: e.tagId,
|
|
27
|
+
key: t.key,
|
|
28
|
+
label: t.label,
|
|
29
|
+
value: t.value,
|
|
30
|
+
vocabularyId: t.vocabularyId,
|
|
31
|
+
parentId: t.parentId,
|
|
32
|
+
hierarchyPath: t.hierarchyPath,
|
|
33
|
+
color: t.color,
|
|
34
|
+
icon: t.icon,
|
|
35
|
+
description: t.description
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function g({ workspaceId: g }) {
|
|
39
|
+
let _ = e(), v = p(t, {
|
|
40
|
+
variables: { input: { entityId: g } },
|
|
41
|
+
skip: !g,
|
|
42
|
+
fetchPolicy: "network-only",
|
|
43
|
+
notifyOnNetworkStatusChange: !0
|
|
44
|
+
}), [y] = f(n), [b, x] = o(!1), [S, C] = o(!1), w = a(!1), T = a(!1);
|
|
45
|
+
r(() => (w.current = !0, () => {
|
|
46
|
+
w.current = !1;
|
|
47
|
+
}), []);
|
|
48
|
+
let E = v.data?.getWorkspaceTags ?? v.previousData?.getWorkspaceTags, D = m(E, g), O = Array.isArray(E) ? E.flatMap((e) => {
|
|
49
|
+
if (!m([e], g)) return [];
|
|
50
|
+
let t = h(e);
|
|
51
|
+
return t ? [t] : [];
|
|
52
|
+
}) : [], k = D && O.length === E.length, A = !!g && !v.loading && !v.error && v.networkStatus === d.ready && v.dataState === "complete" && k && !S && !b, j = a(null), M = i(() => ({
|
|
53
|
+
ready: A,
|
|
54
|
+
rows: E,
|
|
55
|
+
workspaceId: g
|
|
56
|
+
}), [
|
|
57
|
+
A,
|
|
58
|
+
E,
|
|
59
|
+
g
|
|
60
|
+
]);
|
|
61
|
+
r(() => (j.current = M, () => {
|
|
62
|
+
j.current = null;
|
|
63
|
+
}), [M]);
|
|
64
|
+
async function N(e) {
|
|
65
|
+
if (!(!w.current || j.current !== M || !M.ready || T.current)) {
|
|
66
|
+
T.current = !0, C(!0);
|
|
67
|
+
try {
|
|
68
|
+
let t = await y({ variables: { input: {
|
|
69
|
+
entityId: g,
|
|
70
|
+
tagIds: e.map((e) => e.id)
|
|
71
|
+
} } }), n = t.data?.replaceWorkspaceTags;
|
|
72
|
+
if (t.error || !m(n, g) || n.length !== e.length || n.some((t) => !e.some((e) => e.id === t.tagId)) || n.some((e) => !h(e))) throw Error("Unverified tag replacement");
|
|
73
|
+
if (!w.current) return;
|
|
74
|
+
let r = await v.refetch();
|
|
75
|
+
if (r.error || !m(r.data?.getWorkspaceTags, g) || r.data.getWorkspaceTags.some((e) => !h(e))) throw Error("Unverified tag read");
|
|
76
|
+
} catch {
|
|
77
|
+
w.current && x(!0);
|
|
78
|
+
} finally {
|
|
79
|
+
w.current && C(!1), T.current = !1;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async function P() {
|
|
84
|
+
if (!T.current) {
|
|
85
|
+
C(!0);
|
|
86
|
+
try {
|
|
87
|
+
let e = await v.refetch();
|
|
88
|
+
w.current && !e.error && m(e.data?.getWorkspaceTags, g) && e.data.getWorkspaceTags.every((e) => h(e)) && x(!1);
|
|
89
|
+
} catch {} finally {
|
|
90
|
+
w.current && C(!1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return /* @__PURE__ */ c("div", {
|
|
95
|
+
className: "space-y-3",
|
|
96
|
+
children: [!A && /* @__PURE__ */ c("div", {
|
|
97
|
+
role: "status",
|
|
98
|
+
className: "space-y-2 text-sm text-text-muted",
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ s("p", { children: b ? _("workspaceSettings.tagsUncertain", "The tag update could not be verified. Read again before making changes.") : v.loading || S ? _("workspaceSettings.tagsVerifying", "Verifying workspace tags. Editing is unavailable.") : _("workspaceSettings.tagsUnverified", "Some workspace tags could not be verified. Known tags are shown; editing is unavailable.") }),
|
|
101
|
+
D && !k && /* @__PURE__ */ s("p", { children: _("workspaceSettings.tagsUnavailableCount", "{{count}} known assignment(s) have unavailable tag details.", { count: E.length - O.length }) }),
|
|
102
|
+
/* @__PURE__ */ s(l, {
|
|
103
|
+
type: "button",
|
|
104
|
+
variant: "outline",
|
|
105
|
+
disabled: v.loading || S,
|
|
106
|
+
onClick: () => void P(),
|
|
107
|
+
children: _("workspaceSettings.tagsRetryRead", "Retry read")
|
|
108
|
+
})
|
|
109
|
+
]
|
|
110
|
+
}), /* @__PURE__ */ s("fieldset", {
|
|
111
|
+
disabled: !A,
|
|
112
|
+
inert: !A,
|
|
113
|
+
"aria-label": _("workspaceSettings.tagsFieldset", "Workspace tags"),
|
|
114
|
+
className: "min-w-0",
|
|
115
|
+
children: /* @__PURE__ */ s(u, {
|
|
116
|
+
entityType: "Workspace",
|
|
117
|
+
entityId: g,
|
|
118
|
+
workspaceId: g,
|
|
119
|
+
tags: O,
|
|
120
|
+
syncGraphNotifications: !1,
|
|
121
|
+
onAdd: (e) => N([...O, e]),
|
|
122
|
+
onRemove: (e) => N(O.filter((t) => t.id !== e))
|
|
123
|
+
}, A ? "editable" : "readonly")
|
|
124
|
+
})]
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
//#endregion
|
|
128
|
+
export { g as WorkspaceTagsEditor };
|
|
@@ -1,106 +1,83 @@
|
|
|
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 {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import { Form as T, FormControl as E, FormField as D, FormItem as O, FormLabel as k, FormMessage as A, Input as j, z as M } from "@burdenoff/fe-libs/form";
|
|
16
|
-
import { TagsWidget as N } from "@burdenoff/fe-libs/tag";
|
|
17
|
-
import { useMutation as P, useQuery as F } from "@apollo/client/react";
|
|
2
|
+
import { useWorkspace as t } from "../hooks/useWorkspaces.js";
|
|
3
|
+
import { WORKSPACE_PERMISSIONS as n } from "../constants/permissions.js";
|
|
4
|
+
import { tWithFallback as r } from "../utils/i18n.js";
|
|
5
|
+
import { useWorkspacesPageView as i } from "../hooks/useWorkspacesPageView.js";
|
|
6
|
+
import { useUpdateWorkspace as a } from "../hooks/useWorkspaceMutations.js";
|
|
7
|
+
import { WorkspaceTagsEditor as o } from "../components/tags/WorkspaceTagsEditor.js";
|
|
8
|
+
import { ArrowLeft as s, Save as c } from "lucide-react";
|
|
9
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
10
|
+
import { Button as d, CardContent as f, CardHeader as p, CardTitle as m, GlassCard as h, OptionalFields as g, PagePurpose as _ } from "@burdenoff/fe-libs/ui";
|
|
11
|
+
import { useI18n as v } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
12
|
+
import { useNavigate as y, useParams as b } from "react-router";
|
|
13
|
+
import { AccessDenied as x, PermissionGate as S } from "@burdenoff/fe-libs/shared/components";
|
|
14
|
+
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";
|
|
18
15
|
//#region src/pages/WorkspaceSettingsPage.tsx
|
|
19
|
-
var
|
|
20
|
-
name:
|
|
21
|
-
contactEmail:
|
|
22
|
-
domain:
|
|
23
|
-
website:
|
|
16
|
+
var j = A.object({
|
|
17
|
+
name: A.string().min(2).max(100),
|
|
18
|
+
contactEmail: A.string().email().optional().or(A.literal("")),
|
|
19
|
+
domain: A.string().optional(),
|
|
20
|
+
website: A.string().url().optional().or(A.literal(""))
|
|
24
21
|
});
|
|
25
|
-
function
|
|
26
|
-
let { t:
|
|
27
|
-
|
|
28
|
-
workspaceId:
|
|
22
|
+
function M() {
|
|
23
|
+
let { t: A } = v(), { workspaceId: M } = b();
|
|
24
|
+
i("workspaces.settings", {
|
|
25
|
+
workspaceId: M,
|
|
29
26
|
requireParams: !0
|
|
30
27
|
});
|
|
31
|
-
let
|
|
32
|
-
|
|
33
|
-
skip: !L,
|
|
34
|
-
fetchPolicy: "cache-and-network"
|
|
35
|
-
}), [K, { loading: q }] = P(n), J = c(() => (W?.getWorkspaceTags ?? []).flatMap((e) => e.tag ? [{
|
|
36
|
-
id: e.tagId,
|
|
37
|
-
key: e.tag.key,
|
|
38
|
-
label: e.tag.label,
|
|
39
|
-
value: e.tag.value ?? null,
|
|
40
|
-
vocabularyId: e.tag.vocabularyId ?? null,
|
|
41
|
-
parentId: e.tag.parentId ?? null,
|
|
42
|
-
hierarchyPath: e.tag.hierarchyPath ?? null,
|
|
43
|
-
color: e.tag.color ?? null,
|
|
44
|
-
icon: e.tag.icon ?? null,
|
|
45
|
-
description: e.tag.description ?? null
|
|
46
|
-
}] : []), [W?.getWorkspaceTags]), Y = async (e) => {
|
|
47
|
-
L && (await K({ variables: { input: {
|
|
48
|
-
entityId: L,
|
|
49
|
-
tagIds: e.map((e) => e.id)
|
|
50
|
-
} } }), await G());
|
|
51
|
-
};
|
|
52
|
-
return V ? /* @__PURE__ */ d("div", {
|
|
28
|
+
let N = y(), { basePath: P = "/" } = e(), { data: F, isLoading: I } = t(M || ""), { mutate: L, isPending: R } = a();
|
|
29
|
+
return I ? /* @__PURE__ */ l("div", {
|
|
53
30
|
className: "p-6",
|
|
54
|
-
children:
|
|
55
|
-
}) :
|
|
56
|
-
permission:
|
|
57
|
-
fallback: /* @__PURE__ */
|
|
31
|
+
children: r(A, "workspaceSettings.loading", "Loading...")
|
|
32
|
+
}) : F ? /* @__PURE__ */ l(S, {
|
|
33
|
+
permission: n.WORKSPACE_UPDATE,
|
|
34
|
+
fallback: /* @__PURE__ */ u("div", {
|
|
58
35
|
className: "p-6",
|
|
59
|
-
children: [/* @__PURE__ */
|
|
36
|
+
children: [/* @__PURE__ */ u(d, {
|
|
60
37
|
variant: "ghost",
|
|
61
|
-
onClick: () =>
|
|
38
|
+
onClick: () => N(`${P}/${M}`),
|
|
62
39
|
className: "gap-2 mb-6 -ml-2",
|
|
63
|
-
children: [/* @__PURE__ */
|
|
64
|
-
}), /* @__PURE__ */
|
|
40
|
+
children: [/* @__PURE__ */ l(s, { size: 20 }), r(A, "workspaceSettings.backToWorkspace", "Back to Workspace")]
|
|
41
|
+
}), /* @__PURE__ */ l(x, {
|
|
65
42
|
variant: "card",
|
|
66
|
-
title:
|
|
67
|
-
description:
|
|
68
|
-
details:
|
|
43
|
+
title: r(A, "workspaceSettings.permissionRequired", "Permission Required"),
|
|
44
|
+
description: r(A, "workspaceSettings.permissionRequiredDesc", "You don't have permission to edit workspace settings."),
|
|
45
|
+
details: r(A, "workspaceSettings.permissionRequiredDetails", "Required: workspace:update"),
|
|
69
46
|
primaryAction: {
|
|
70
|
-
label:
|
|
71
|
-
onClick: () =>
|
|
47
|
+
label: r(A, "workspaceSettings.goBack", "Go Back"),
|
|
48
|
+
onClick: () => N(`${P}/${M}`)
|
|
72
49
|
}
|
|
73
50
|
})]
|
|
74
51
|
}),
|
|
75
|
-
children: /* @__PURE__ */
|
|
52
|
+
children: /* @__PURE__ */ u("div", {
|
|
76
53
|
className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
|
|
77
54
|
children: [
|
|
78
|
-
/* @__PURE__ */
|
|
79
|
-
/* @__PURE__ */
|
|
55
|
+
/* @__PURE__ */ u("div", { children: [
|
|
56
|
+
/* @__PURE__ */ u(d, {
|
|
80
57
|
variant: "ghost",
|
|
81
|
-
onClick: () =>
|
|
58
|
+
onClick: () => N(`${P}/${M}`),
|
|
82
59
|
className: "gap-2 mb-2 -ml-2",
|
|
83
|
-
children: [/* @__PURE__ */
|
|
60
|
+
children: [/* @__PURE__ */ l(s, { size: 20 }), r(A, "workspaceSettings.backToWorkspace", "Back to Workspace")]
|
|
84
61
|
}),
|
|
85
|
-
/* @__PURE__ */
|
|
62
|
+
/* @__PURE__ */ l("h1", {
|
|
86
63
|
className: "text-2xl sm:text-3xl font-bold",
|
|
87
|
-
children:
|
|
64
|
+
children: r(A, "workspaceSettings.title", "Workspace Settings")
|
|
88
65
|
}),
|
|
89
|
-
/* @__PURE__ */
|
|
66
|
+
/* @__PURE__ */ l("p", {
|
|
90
67
|
className: "text-text-secondary",
|
|
91
|
-
children:
|
|
68
|
+
children: r(A, "workspaceSettings.subtitle", "Manage workspace configuration")
|
|
92
69
|
})
|
|
93
70
|
] }),
|
|
94
|
-
/* @__PURE__ */
|
|
95
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ l(_, { children: r(A, "workspaceSettings.purpose", "This is where you control how the workspace presents itself and how it's organised — its display name, a contact email, an optional custom domain and website, and the tags used to classify and filter it. Update these to keep the workspace's identity accurate as your team grows.") }),
|
|
72
|
+
/* @__PURE__ */ u(h, {
|
|
96
73
|
treatment: "glass",
|
|
97
74
|
glow: !0,
|
|
98
75
|
className: "border-border-seam",
|
|
99
|
-
children: [/* @__PURE__ */
|
|
100
|
-
schema:
|
|
76
|
+
children: [/* @__PURE__ */ l(p, { children: /* @__PURE__ */ l(m, { children: r(A, "workspaceSettings.generalSettings", "General Settings") }) }), /* @__PURE__ */ l(f, { children: /* @__PURE__ */ l(C, {
|
|
77
|
+
schema: j,
|
|
101
78
|
onSubmit: (e) => {
|
|
102
|
-
|
|
103
|
-
id:
|
|
79
|
+
M && L({
|
|
80
|
+
id: M,
|
|
104
81
|
input: {
|
|
105
82
|
...e,
|
|
106
83
|
contactEmail: e.contactEmail || void 0,
|
|
@@ -108,107 +85,98 @@ function L() {
|
|
|
108
85
|
website: e.website || void 0
|
|
109
86
|
}
|
|
110
87
|
}, { onSuccess: () => {
|
|
111
|
-
|
|
88
|
+
N(`${P}/${M}`);
|
|
112
89
|
} });
|
|
113
90
|
},
|
|
114
91
|
formOptions: { defaultValues: {
|
|
115
|
-
name:
|
|
116
|
-
contactEmail:
|
|
117
|
-
domain:
|
|
118
|
-
website:
|
|
92
|
+
name: F?.name || "",
|
|
93
|
+
contactEmail: F?.contactEmail || "",
|
|
94
|
+
domain: F?.domain || "",
|
|
95
|
+
website: F?.website || ""
|
|
119
96
|
} },
|
|
120
|
-
children: (e) => /* @__PURE__ */
|
|
97
|
+
children: (e) => /* @__PURE__ */ u("div", {
|
|
121
98
|
className: "space-y-4",
|
|
122
99
|
children: [
|
|
123
|
-
/* @__PURE__ */
|
|
100
|
+
/* @__PURE__ */ l(T, {
|
|
124
101
|
control: e.control,
|
|
125
102
|
name: "name",
|
|
126
|
-
render: ({ field: e }) => /* @__PURE__ */
|
|
127
|
-
/* @__PURE__ */
|
|
128
|
-
/* @__PURE__ */
|
|
129
|
-
/* @__PURE__ */
|
|
103
|
+
render: ({ field: e }) => /* @__PURE__ */ u(E, { children: [
|
|
104
|
+
/* @__PURE__ */ l(D, { children: r(A, "workspaceSettings.workspaceName", "Workspace Name") }),
|
|
105
|
+
/* @__PURE__ */ l(w, { children: /* @__PURE__ */ l(k, { ...e }) }),
|
|
106
|
+
/* @__PURE__ */ l(O, {})
|
|
130
107
|
] })
|
|
131
108
|
}),
|
|
132
|
-
/* @__PURE__ */
|
|
109
|
+
/* @__PURE__ */ l(T, {
|
|
133
110
|
control: e.control,
|
|
134
111
|
name: "contactEmail",
|
|
135
|
-
render: ({ field: e }) => /* @__PURE__ */
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
/* @__PURE__ */
|
|
112
|
+
render: ({ field: e }) => /* @__PURE__ */ u(E, { children: [
|
|
113
|
+
/* @__PURE__ */ l(D, { children: r(A, "workspaceSettings.contactEmail", "Contact Email") }),
|
|
114
|
+
/* @__PURE__ */ l(w, { children: /* @__PURE__ */ l(k, {
|
|
138
115
|
type: "email",
|
|
139
116
|
...e
|
|
140
117
|
}) }),
|
|
141
|
-
/* @__PURE__ */
|
|
118
|
+
/* @__PURE__ */ l(O, {})
|
|
142
119
|
] })
|
|
143
120
|
}),
|
|
144
|
-
/* @__PURE__ */
|
|
145
|
-
title:
|
|
146
|
-
description:
|
|
147
|
-
children: [/* @__PURE__ */
|
|
121
|
+
/* @__PURE__ */ u(g, {
|
|
122
|
+
title: r(A, "workspaceSettings.advancedTitle", "Advanced settings"),
|
|
123
|
+
description: r(A, "workspaceSettings.advancedDescription", "Custom domain + website. Most workspaces leave these blank."),
|
|
124
|
+
children: [/* @__PURE__ */ l(T, {
|
|
148
125
|
control: e.control,
|
|
149
126
|
name: "domain",
|
|
150
|
-
render: ({ field: e }) => /* @__PURE__ */
|
|
151
|
-
/* @__PURE__ */
|
|
152
|
-
/* @__PURE__ */
|
|
153
|
-
/* @__PURE__ */
|
|
127
|
+
render: ({ field: e }) => /* @__PURE__ */ u(E, { children: [
|
|
128
|
+
/* @__PURE__ */ l(D, { children: r(A, "workspaceSettings.domain", "Domain") }),
|
|
129
|
+
/* @__PURE__ */ l(w, { children: /* @__PURE__ */ l(k, { ...e }) }),
|
|
130
|
+
/* @__PURE__ */ l(O, {})
|
|
154
131
|
] })
|
|
155
|
-
}), /* @__PURE__ */
|
|
132
|
+
}), /* @__PURE__ */ l(T, {
|
|
156
133
|
control: e.control,
|
|
157
134
|
name: "website",
|
|
158
|
-
render: ({ field: e }) => /* @__PURE__ */
|
|
159
|
-
/* @__PURE__ */
|
|
160
|
-
/* @__PURE__ */
|
|
135
|
+
render: ({ field: e }) => /* @__PURE__ */ u(E, { children: [
|
|
136
|
+
/* @__PURE__ */ l(D, { children: r(A, "workspaceSettings.website", "Website") }),
|
|
137
|
+
/* @__PURE__ */ l(w, { children: /* @__PURE__ */ l(k, {
|
|
161
138
|
type: "url",
|
|
162
139
|
...e
|
|
163
140
|
}) }),
|
|
164
|
-
/* @__PURE__ */
|
|
141
|
+
/* @__PURE__ */ l(O, {})
|
|
165
142
|
] })
|
|
166
143
|
})]
|
|
167
144
|
}),
|
|
168
|
-
/* @__PURE__ */
|
|
145
|
+
/* @__PURE__ */ u("div", {
|
|
169
146
|
className: "flex gap-2",
|
|
170
|
-
children: [/* @__PURE__ */
|
|
147
|
+
children: [/* @__PURE__ */ u(d, {
|
|
171
148
|
type: "submit",
|
|
172
|
-
disabled:
|
|
149
|
+
disabled: R,
|
|
173
150
|
className: "gap-2",
|
|
174
|
-
children: [/* @__PURE__ */
|
|
175
|
-
}), /* @__PURE__ */ d
|
|
151
|
+
children: [/* @__PURE__ */ l(c, { size: 20 }), R ? r(A, "workspaceSettings.saving", "Saving...") : r(A, "workspaceSettings.saveChanges", "Save Changes")]
|
|
152
|
+
}), /* @__PURE__ */ l(d, {
|
|
176
153
|
type: "button",
|
|
177
154
|
variant: "outline",
|
|
178
|
-
onClick: () =>
|
|
179
|
-
children:
|
|
155
|
+
onClick: () => N(`${P}/${M}`),
|
|
156
|
+
children: r(A, "workspaceSettings.cancel", "Cancel")
|
|
180
157
|
})]
|
|
181
158
|
})
|
|
182
159
|
]
|
|
183
160
|
})
|
|
184
161
|
}) })]
|
|
185
162
|
}),
|
|
186
|
-
|
|
163
|
+
M && /* @__PURE__ */ u(h, {
|
|
187
164
|
treatment: "plain",
|
|
188
165
|
className: "border-border-seam",
|
|
189
|
-
children: [/* @__PURE__ */
|
|
166
|
+
children: [/* @__PURE__ */ l(p, { children: /* @__PURE__ */ l(m, { children: r(A, "workspaceSettings.tags", "Tags") }) }), /* @__PURE__ */ u(f, {
|
|
190
167
|
className: "space-y-3",
|
|
191
|
-
children: [/* @__PURE__ */
|
|
168
|
+
children: [/* @__PURE__ */ l("p", {
|
|
192
169
|
className: "text-sm text-text-muted",
|
|
193
|
-
children:
|
|
194
|
-
}), /* @__PURE__ */
|
|
195
|
-
entityType: "Workspace",
|
|
196
|
-
entityId: L,
|
|
197
|
-
workspaceId: L,
|
|
198
|
-
tags: J,
|
|
199
|
-
onAdd: (e) => Y([...J, e]),
|
|
200
|
-
onRemove: (e) => Y(J.filter((t) => t.id !== e)),
|
|
201
|
-
syncGraphNotifications: !1,
|
|
202
|
-
className: q ? "pointer-events-none opacity-75" : void 0
|
|
203
|
-
})]
|
|
170
|
+
children: r(A, "workspaceSettings.tagsDescription", "Use universal tags to classify and filter this workspace.")
|
|
171
|
+
}), /* @__PURE__ */ l(o, { workspaceId: M ?? "" }, M)]
|
|
204
172
|
})]
|
|
205
173
|
})
|
|
206
174
|
]
|
|
207
175
|
})
|
|
208
|
-
}) : /* @__PURE__ */
|
|
176
|
+
}) : /* @__PURE__ */ l("div", {
|
|
209
177
|
className: "p-6",
|
|
210
|
-
children:
|
|
178
|
+
children: r(A, "workspaceSettings.notFound", "Workspace not found")
|
|
211
179
|
});
|
|
212
180
|
}
|
|
213
181
|
//#endregion
|
|
214
|
-
export {
|
|
182
|
+
export { M as WorkspaceSettingsPage };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burdenoff/microfe-workspaces",
|
|
3
|
-
"version": "2026.1016.
|
|
3
|
+
"version": "2026.1016.11",
|
|
4
4
|
"description": "Workspaces microfrontend for Burdenoff products",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"@apollo/client": "^4.0.11",
|
|
51
|
-
"@burdenoff/fe-libs": "2026.
|
|
51
|
+
"@burdenoff/fe-libs": "2026.1016.1",
|
|
52
52
|
"@radix-ui/react-icons": "^1.3.2",
|
|
53
53
|
"@tanstack/react-query": "^5.62.13",
|
|
54
54
|
"axios": "^1.20.0",
|