@jskit-ai/workspaces-web 0.1.73 → 0.1.74
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/package.descriptor.mjs +3 -3
- package/package.json +7 -7
- package/src/client/account-settings/useAccountSettingsInvitesSectionRuntime.js +1 -1
- package/src/client/components/WorkspaceMembersClientElement.vue +6 -6
- package/src/client/components/WorkspacesClientElement.vue +1 -1
- package/test/settingsPlacementContract.test.js +36 -0
package/package.descriptor.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export default Object.freeze({
|
|
2
2
|
packageVersion: 1,
|
|
3
3
|
packageId: "@jskit-ai/workspaces-web",
|
|
4
|
-
version: "0.1.
|
|
4
|
+
version: "0.1.74",
|
|
5
5
|
kind: "runtime",
|
|
6
6
|
description: "Workspace web module: workspace selector, tools widget, workspace surfaces, members UI, and settings hosts.",
|
|
7
7
|
dependsOn: [
|
|
@@ -227,8 +227,8 @@ export default Object.freeze({
|
|
|
227
227
|
mutations: {
|
|
228
228
|
dependencies: {
|
|
229
229
|
runtime: {
|
|
230
|
-
"@jskit-ai/workspaces-core": "0.1.
|
|
231
|
-
"@jskit-ai/users-web": "0.1.
|
|
230
|
+
"@jskit-ai/workspaces-core": "0.1.73",
|
|
231
|
+
"@jskit-ai/users-web": "0.1.112"
|
|
232
232
|
},
|
|
233
233
|
dev: {}
|
|
234
234
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jskit-ai/workspaces-web",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.74",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "node --test"
|
|
@@ -14,12 +14,12 @@
|
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@mdi/js": "^7.4.47",
|
|
17
|
-
"@jskit-ai/http-runtime": "0.1.
|
|
18
|
-
"@jskit-ai/kernel": "0.1.
|
|
19
|
-
"@jskit-ai/shell-web": "0.1.
|
|
20
|
-
"@jskit-ai/users-core": "0.1.
|
|
21
|
-
"@jskit-ai/users-web": "0.1.
|
|
22
|
-
"@jskit-ai/workspaces-core": "0.1.
|
|
17
|
+
"@jskit-ai/http-runtime": "0.1.96",
|
|
18
|
+
"@jskit-ai/kernel": "0.1.98",
|
|
19
|
+
"@jskit-ai/shell-web": "0.1.97",
|
|
20
|
+
"@jskit-ai/users-core": "0.1.107",
|
|
21
|
+
"@jskit-ai/users-web": "0.1.112",
|
|
22
|
+
"@jskit-ai/workspaces-core": "0.1.73"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"@tanstack/vue-query": "^5.90.5",
|
|
@@ -132,7 +132,7 @@ function useAccountSettingsInvitesSectionRuntime() {
|
|
|
132
132
|
const pendingInvites = computed(() =>
|
|
133
133
|
Array.isArray(pendingInvitesModel.pendingInvites) ? pendingInvitesModel.pendingInvites : []
|
|
134
134
|
);
|
|
135
|
-
const isResolvingInvite = computed(() => Boolean(redeemInviteCommand.isRunning
|
|
135
|
+
const isResolvingInvite = computed(() => Boolean(redeemInviteCommand.isRunning));
|
|
136
136
|
|
|
137
137
|
const { workspaceSurfaceId } = useWorkspaceSurfaceId({
|
|
138
138
|
route,
|
|
@@ -413,9 +413,9 @@ const memberRemoveCommand = useCommand({
|
|
|
413
413
|
|
|
414
414
|
const status = computed(() => {
|
|
415
415
|
return {
|
|
416
|
-
isCreatingInvite: Boolean(inviteCreateCommand.isRunning
|
|
417
|
-
isRevokingInvite: Boolean(revokeInviteCommand.isRunning
|
|
418
|
-
isRemovingMember: Boolean(memberRemoveCommand.isRunning
|
|
416
|
+
isCreatingInvite: Boolean(inviteCreateCommand.isRunning),
|
|
417
|
+
isRevokingInvite: Boolean(revokeInviteCommand.isRunning),
|
|
418
|
+
isRemovingMember: Boolean(memberRemoveCommand.isRunning),
|
|
419
419
|
hasLoadedWorkspaceSettings: !canInviteMembers.value || !workspaceSettingsView.isLoading,
|
|
420
420
|
hasLoadedMembersList: !canViewMembers.value || !workspaceMembersList.isInitialLoading,
|
|
421
421
|
hasLoadedInviteList: !canViewMembers.value || !workspaceInvitesList.isInitialLoading,
|
|
@@ -574,7 +574,7 @@ watch(
|
|
|
574
574
|
);
|
|
575
575
|
|
|
576
576
|
async function submitInvite() {
|
|
577
|
-
if (inviteCreateCommand.isRunning
|
|
577
|
+
if (inviteCreateCommand.isRunning || !canInviteMembers.value) {
|
|
578
578
|
return;
|
|
579
579
|
}
|
|
580
580
|
|
|
@@ -594,7 +594,7 @@ async function submitInvite() {
|
|
|
594
594
|
}
|
|
595
595
|
|
|
596
596
|
async function submitRevokeInvite(inviteId) {
|
|
597
|
-
if (revokeInviteCommand.isRunning
|
|
597
|
+
if (revokeInviteCommand.isRunning || !canRevokeInvites.value) {
|
|
598
598
|
return;
|
|
599
599
|
}
|
|
600
600
|
|
|
@@ -645,7 +645,7 @@ async function submitMemberRoleUpdate(member, roleSid) {
|
|
|
645
645
|
}
|
|
646
646
|
|
|
647
647
|
async function submitRemoveMember(member) {
|
|
648
|
-
if (memberRemoveCommand.isRunning
|
|
648
|
+
if (memberRemoveCommand.isRunning || !canManageMembers.value) {
|
|
649
649
|
return;
|
|
650
650
|
}
|
|
651
651
|
|
|
@@ -165,7 +165,7 @@ const isBootstrapping = computed(() => Boolean(bootstrapView.isLoading));
|
|
|
165
165
|
const isRefreshingBootstrap = computed(() => Boolean(bootstrapView.isRefetching));
|
|
166
166
|
const bootstrapLoadError = computed(() => String(bootstrapView.loadError || "").trim());
|
|
167
167
|
const canCreateWorkspace = computed(() => bootstrapModel.workspaceAllowSelfCreate === true);
|
|
168
|
-
const isCreatingWorkspace = computed(() => Boolean(createWorkspaceCommand.isRunning
|
|
168
|
+
const isCreatingWorkspace = computed(() => Boolean(createWorkspaceCommand.isRunning));
|
|
169
169
|
|
|
170
170
|
function reportFeedback({
|
|
171
171
|
message,
|
|
@@ -126,6 +126,42 @@ test("workspaces-web resource load states expose local retry actions", async ()
|
|
|
126
126
|
}
|
|
127
127
|
});
|
|
128
128
|
|
|
129
|
+
test("workspaces-web command loading state uses users-web proxyRefs contract", async () => {
|
|
130
|
+
const expectations = new Map([
|
|
131
|
+
[
|
|
132
|
+
"src/client/components/WorkspaceMembersClientElement.vue",
|
|
133
|
+
[
|
|
134
|
+
/isCreatingInvite: Boolean\(inviteCreateCommand\.isRunning\)/,
|
|
135
|
+
/if \(inviteCreateCommand\.isRunning \|\| !canInviteMembers\.value\)/
|
|
136
|
+
]
|
|
137
|
+
],
|
|
138
|
+
[
|
|
139
|
+
"src/client/components/WorkspacesClientElement.vue",
|
|
140
|
+
[
|
|
141
|
+
/const isCreatingWorkspace = computed\(\(\) => Boolean\(createWorkspaceCommand\.isRunning\)\)/
|
|
142
|
+
]
|
|
143
|
+
],
|
|
144
|
+
[
|
|
145
|
+
"src/client/account-settings/useAccountSettingsInvitesSectionRuntime.js",
|
|
146
|
+
[
|
|
147
|
+
/const isResolvingInvite = computed\(\(\) => Boolean\(redeemInviteCommand\.isRunning\)\)/
|
|
148
|
+
]
|
|
149
|
+
]
|
|
150
|
+
]);
|
|
151
|
+
|
|
152
|
+
for (const [relativePath, patterns] of expectations) {
|
|
153
|
+
const source = await readFile(path.join(PACKAGE_DIR, relativePath), "utf8");
|
|
154
|
+
assert.doesNotMatch(
|
|
155
|
+
source,
|
|
156
|
+
/\.isRunning\.value/,
|
|
157
|
+
`${relativePath} must not read useCommand().isRunning.value; useCommand returns proxyRefs.`
|
|
158
|
+
);
|
|
159
|
+
for (const pattern of patterns) {
|
|
160
|
+
assert.match(source, pattern, `${relativePath} must expose command loading state to the UI.`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
|
|
129
165
|
test("workspaces-web installs an account invites cue scaffold that reads placement runtime state", async () => {
|
|
130
166
|
const source = await readFile(
|
|
131
167
|
path.join(PACKAGE_DIR, "templates", "packages", "main", "src", "client", "components", "AccountPendingInvitesCue.vue"),
|