@dxos/shell 0.3.11-main.f437bee → 0.3.11-main.f4c1077
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 +3 -3
- package/dist/bundle/shell.mjs +15374 -13522
- package/dist/bundle/shell.mjs.map +1 -1
- package/dist/bundle/shell.umd.js +81 -75
- package/dist/bundle/shell.umd.js.map +1 -1
- package/dist/bundle/style.css +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react.mjs +712 -446
- package/dist/lib/browser/react.mjs.map +4 -4
- package/dist/lib/browser/testing/index.mjs +35 -14
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/types/src/components/IdentityList/SpaceMemberList.js +1 -1
- package/dist/types/src/components/IdentityList/SpaceMemberList.js.map +1 -1
- package/dist/types/src/components/Panel/Action.d.ts.map +1 -1
- package/dist/types/src/components/Panel/Action.js +3 -18
- package/dist/types/src/components/Panel/Action.js.map +1 -1
- package/dist/types/src/composites/Shell/Shell.d.ts.map +1 -1
- package/dist/types/src/composites/Shell/Shell.js +15 -5
- package/dist/types/src/composites/Shell/Shell.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +17 -9
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js +3 -3
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.d.ts +12 -2
- package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/identityMachine.d.ts +1 -1
- package/dist/types/src/panels/IdentityPanel/identityMachine.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/identityMachine.js +10 -2
- package/dist/types/src/panels/IdentityPanel/identityMachine.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/AgentForm.d.ts +3 -0
- package/dist/types/src/panels/IdentityPanel/steps/AgentForm.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/AgentForm.js +26 -0
- package/dist/types/src/panels/IdentityPanel/steps/AgentForm.js.map +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js +5 -1
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/SignOutChooser.d.ts +16 -0
- package/dist/types/src/panels/IdentityPanel/steps/SignOutChooser.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/SignOutChooser.js +40 -0
- package/dist/types/src/panels/IdentityPanel/steps/SignOutChooser.js.map +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/index.d.ts +2 -0
- package/dist/types/src/panels/IdentityPanel/steps/index.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/index.js +2 -0
- package/dist/types/src/panels/IdentityPanel/steps/index.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts +15 -0
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js +78 -0
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.js +4 -3
- package/dist/types/src/panels/JoinPanel/JoinPanel.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/joinMachine.d.ts +1 -1
- package/dist/types/src/panels/JoinPanel/joinMachine.d.ts.map +1 -1
- package/dist/types/src/panels/JoinPanel/joinMachine.js +15 -18
- package/dist/types/src/panels/JoinPanel/joinMachine.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.js +3 -3
- package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/InvitationInput.d.ts.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/InvitationInput.js +13 -6
- package/dist/types/src/panels/JoinPanel/steps/InvitationInput.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/ResetIdentity.js +1 -1
- package/dist/types/src/panels/JoinPanel/steps/ResetIdentity.js.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanel.js +5 -3
- package/dist/types/src/panels/SpacePanel/SpacePanel.js.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanel.stories.d.ts.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js +2 -2
- package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts +1 -0
- package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts.map +1 -1
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts +1 -0
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts.map +1 -1
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js +3 -1
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js.map +1 -1
- package/dist/types/src/playwright/invitations-manager.d.ts +1 -0
- package/dist/types/src/playwright/invitations-manager.d.ts.map +1 -1
- package/dist/types/src/playwright/invitations-manager.js +4 -1
- package/dist/types/src/playwright/invitations-manager.js.map +1 -1
- package/dist/types/src/playwright/invitations.spec.js +15 -0
- package/dist/types/src/playwright/invitations.spec.js.map +1 -1
- package/dist/types/src/stories/Invitations.e2e-stories.js +3 -3
- package/dist/types/src/stories/Invitations.e2e-stories.js.map +1 -1
- package/dist/types/src/styles/invitationStatusStyles.d.ts.map +1 -1
- package/dist/types/src/styles/invitationStatusStyles.js.map +1 -1
- package/dist/types/src/testing/shell-manager.d.ts +5 -4
- package/dist/types/src/testing/shell-manager.d.ts.map +1 -1
- package/dist/types/src/testing/shell-manager.js +36 -12
- package/dist/types/src/testing/shell-manager.js.map +1 -1
- package/dist/types/src/translations/locales/en-US.d.ts +5 -0
- package/dist/types/src/translations/locales/en-US.d.ts.map +1 -1
- package/dist/types/src/translations/locales/en-US.js +5 -0
- package/dist/types/src/translations/locales/en-US.js.map +1 -1
- package/package.json +22 -21
- package/src/components/IdentityList/SpaceMemberList.tsx +1 -1
- package/src/components/Panel/Action.tsx +4 -19
- package/src/composites/Shell/Shell.tsx +16 -3
- package/src/panels/IdentityPanel/IdentityPanel.stories.tsx +1 -1
- package/src/panels/IdentityPanel/IdentityPanel.tsx +27 -11
- package/src/panels/IdentityPanel/IdentityPanelProps.ts +20 -2
- package/src/panels/IdentityPanel/identityMachine.ts +11 -3
- package/src/panels/IdentityPanel/steps/AgentForm.tsx +61 -0
- package/src/panels/IdentityPanel/steps/IdentityActionChooser.tsx +8 -4
- package/src/panels/IdentityPanel/steps/SignOutChooser.tsx +84 -0
- package/src/panels/IdentityPanel/steps/index.ts +2 -0
- package/src/panels/IdentityPanel/useAgentHandlers.ts +88 -0
- package/src/panels/JoinPanel/JoinPanel.tsx +2 -2
- package/src/panels/JoinPanel/joinMachine.ts +16 -19
- package/src/panels/JoinPanel/steps/AdditionMethodChooser.tsx +3 -3
- package/src/panels/JoinPanel/steps/InvitationInput.tsx +7 -1
- package/src/panels/JoinPanel/steps/InvitationRescuer.tsx +2 -2
- package/src/panels/JoinPanel/steps/ResetIdentity.tsx +1 -1
- package/src/panels/SpacePanel/SpacePanel.stories.tsx +2 -1
- package/src/panels/SpacePanel/SpacePanel.tsx +4 -1
- package/src/panels/SpacePanel/SpacePanelProps.ts +1 -0
- package/src/panels/SpacePanel/steps/SpaceManager.tsx +4 -1
- package/src/playwright/invitations-manager.ts +5 -1
- package/src/playwright/invitations.spec.ts +19 -0
- package/src/stories/Invitations.e2e-stories.tsx +2 -2
- package/src/styles/invitationStatusStyles.ts +6 -6
- package/src/testing/shell-manager.ts +40 -13
- package/src/translations/locales/en-US.ts +5 -0
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.ShellManager = void 0;
|
|
7
7
|
const async_1 = require("@dxos/async");
|
|
8
8
|
const scoped_shell_manager_1 = require("./scoped-shell-manager");
|
|
9
|
+
// TODO(wittjosiah): Normalize data-testids between snake and camel case.
|
|
9
10
|
class ShellManager extends scoped_shell_manager_1.ScopedShellManager {
|
|
10
11
|
// prettier-ignore
|
|
11
12
|
constructor(page, inIFrame = true) {
|
|
@@ -20,6 +21,9 @@ class ShellManager extends scoped_shell_manager_1.ScopedShellManager {
|
|
|
20
21
|
return this.inIFrame ? this.page.frameLocator('data-testid=dxos-shell') : this.page;
|
|
21
22
|
}
|
|
22
23
|
// Getters
|
|
24
|
+
async getDisplayName() {
|
|
25
|
+
return this.shell.getByTestId('identityHeading.displayName').textContent();
|
|
26
|
+
}
|
|
23
27
|
async isCurrentSpaceViewVisible() {
|
|
24
28
|
return await this.shell.getByTestId('current-space-view').isVisible();
|
|
25
29
|
}
|
|
@@ -33,24 +37,44 @@ class ShellManager extends scoped_shell_manager_1.ScopedShellManager {
|
|
|
33
37
|
await this.shell.getByTestId('create-identity-input-continue').click();
|
|
34
38
|
await this.shell.getByTestId('halo-invitation-accepted-done').click();
|
|
35
39
|
}
|
|
36
|
-
async
|
|
37
|
-
|
|
40
|
+
async createDeviceInvitation() {
|
|
41
|
+
this._invitationCode = new async_1.Trigger();
|
|
42
|
+
this._authCode = new async_1.Trigger();
|
|
43
|
+
await this.shell.getByTestId('devices-panel.create-invitation').click();
|
|
44
|
+
return await this._invitationCode.wait();
|
|
38
45
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
46
|
+
async resetDevice() {
|
|
47
|
+
const handleDialog = async (dialog) => {
|
|
48
|
+
if (dialog.type() === 'confirm') {
|
|
49
|
+
await dialog.accept();
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
this.page.on('dialog', handleDialog);
|
|
53
|
+
await this.shell.getByTestId('devices-panel.sign-out').click();
|
|
54
|
+
await this.shell.getByTestId('sign-out.reset-device').click();
|
|
55
|
+
this.page.off('dialog', handleDialog);
|
|
42
56
|
}
|
|
43
|
-
async
|
|
44
|
-
await this.
|
|
57
|
+
async joinNewIdentity(invitationCode) {
|
|
58
|
+
await this.shell.getByTestId('devices-panel.sign-out').click();
|
|
59
|
+
await this.shell.getByTestId('sign-out.join-new-identity').click();
|
|
60
|
+
await this.shell.getByTestId('reset-identity-input').fill('CONFIRM');
|
|
61
|
+
await this.shell.getByTestId('reset-identity-input-confirm').click();
|
|
62
|
+
await this.shell.getByTestId('identity-chooser.join-identity').click();
|
|
63
|
+
await this.inputInvitation('device', invitationCode, this.shell);
|
|
45
64
|
}
|
|
46
|
-
async
|
|
47
|
-
|
|
65
|
+
async authenticateDevice(authCode, skipDone = true) {
|
|
66
|
+
// Wait for focus to shift before typing.
|
|
67
|
+
await (0, async_1.sleep)(1500);
|
|
68
|
+
await this.authenticateInvitation('device', authCode, this.shell);
|
|
69
|
+
// TODO(wittjosiah): When "signing out" and joinging a new identity, the done step seems to be skipped.
|
|
70
|
+
if (!skipDone) {
|
|
71
|
+
await this.doneInvitation('device', this.shell);
|
|
72
|
+
}
|
|
48
73
|
}
|
|
49
|
-
async
|
|
50
|
-
await this.
|
|
74
|
+
async closeShell() {
|
|
75
|
+
await this.page.keyboard.press('Escape');
|
|
51
76
|
}
|
|
52
77
|
async createSpaceInvitation() {
|
|
53
|
-
await this.openCurrentSpace();
|
|
54
78
|
this._invitationCode = new async_1.Trigger();
|
|
55
79
|
this._authCode = new async_1.Trigger();
|
|
56
80
|
await this.shell.getByTestId('spaces-panel.create-invitation').click();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-manager.js","sourceRoot":"","sources":["../../../../src/testing/shell-manager.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAIF,uCAA6C;AAE7C,iEAA4D;AAE5D,MAAa,YAAa,SAAQ,yCAAkB;IAIlD,kBAAkB;IAClB,YACoB,IAAU,EACnB,WAAW,IAAI;QAExB,KAAK,EAAE,CAAC;QAHU,SAAI,GAAJ,IAAI,CAAM;QACnB,aAAQ,GAAR,QAAQ,CAAO;QANlB,oBAAe,GAAG,IAAI,eAAO,EAAU,CAAC;QACxC,cAAS,GAAG,IAAI,eAAO,EAAU,CAAC;QAQxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACtF,CAAC;IAED,UAAU;IAEV,KAAK,CAAC,yBAAyB;QAC7B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,SAAS,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,CAAC;IACrE,CAAC;IAED,UAAU;IAEV,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"shell-manager.js","sourceRoot":"","sources":["../../../../src/testing/shell-manager.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAIF,uCAA6C;AAE7C,iEAA4D;AAE5D,yEAAyE;AAEzE,MAAa,YAAa,SAAQ,yCAAkB;IAIlD,kBAAkB;IAClB,YACoB,IAAU,EACnB,WAAW,IAAI;QAExB,KAAK,EAAE,CAAC;QAHU,SAAI,GAAJ,IAAI,CAAM;QACnB,aAAQ,GAAR,QAAQ,CAAO;QANlB,oBAAe,GAAG,IAAI,eAAO,EAAU,CAAC;QACxC,cAAS,GAAG,IAAI,eAAO,EAAU,CAAC;QAQxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACtF,CAAC;IAED,UAAU;IAEV,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,yBAAyB;QAC7B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,SAAS,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,CAAC;IACrE,CAAC;IAED,UAAU;IAEV,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAO,EAAU,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,eAAO,EAAU,CAAC;QACvC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAC;QACxE,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YAC5C,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;gBAC/B,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;aACvB;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,cAAsB;QAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;QACnE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;QACrE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAgB,EAAE,QAAQ,GAAG,IAAI;QACxD,yCAAyC;QACzC,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,uGAAuG;QACvG,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;SACjD;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAO,EAAU,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,eAAO,EAAU,CAAC;QACvC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,cAAsB;QAChD,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,yCAAyC;QACzC,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAAuB;QACrD,IAAI;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aAChD;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACpC;SACF;QAAC,WAAM,GAAE;IACZ,CAAC;CACF;AApHD,oCAoHC"}
|
|
@@ -94,5 +94,10 @@ export declare const os: {
|
|
|
94
94
|
'reset identity input label': string;
|
|
95
95
|
'failed to reset identity message': string;
|
|
96
96
|
'confirmation value': string;
|
|
97
|
+
'sign out chooser title': string;
|
|
98
|
+
'sign out chooser message': string;
|
|
99
|
+
'join new identity label': string;
|
|
100
|
+
'reset device label': string;
|
|
101
|
+
'reset device confirm message': string;
|
|
97
102
|
};
|
|
98
103
|
//# sourceMappingURL=en-US.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en-US.d.ts","sourceRoot":"","sources":["../../../../../src/translations/locales/en-US.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"en-US.d.ts","sourceRoot":"","sources":["../../../../../src/translations/locales/en-US.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsGd,CAAC"}
|
|
@@ -100,5 +100,10 @@ exports.os = {
|
|
|
100
100
|
'reset identity input label': 'This will clear this device and all associated data. Type {{confirmationValue}} and confirm to continue.',
|
|
101
101
|
'failed to reset identity message': 'Failed to reset identity.',
|
|
102
102
|
'confirmation value': 'CONFIRM',
|
|
103
|
+
'sign out chooser title': 'DANGER ZONE',
|
|
104
|
+
'sign out chooser message': 'Proceeding with either action below will erase all data on this device.',
|
|
105
|
+
'join new identity label': 'Join a new identity',
|
|
106
|
+
'reset device label': 'Reset device',
|
|
107
|
+
'reset device confirm message': 'Are you sure you want to reset your device? All data will be lost.',
|
|
103
108
|
};
|
|
104
109
|
//# sourceMappingURL=en-US.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en-US.js","sourceRoot":"","sources":["../../../../../src/translations/locales/en-US.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"en-US.js","sourceRoot":"","sources":["../../../../../src/translations/locales/en-US.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/shell",
|
|
3
|
-
"version": "0.3.11-main.
|
|
3
|
+
"version": "0.3.11-main.f4c1077",
|
|
4
4
|
"description": "DXOS’s OS experiences",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"src"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@fluentui/react-tabster": "^9.
|
|
31
|
+
"@fluentui/react-tabster": "^9.18.0",
|
|
32
32
|
"@radix-ui/react-accordion": "^1.1.1",
|
|
33
33
|
"@radix-ui/react-context": "^1.0.0",
|
|
34
34
|
"@radix-ui/react-radio-group": "^1.1.2",
|
|
@@ -39,34 +39,35 @@
|
|
|
39
39
|
"react-qr-rounded": "^1.0.0",
|
|
40
40
|
"url-join": "^5.0.0",
|
|
41
41
|
"xstate": "^4.37.0",
|
|
42
|
-
"@dxos/async": "0.3.11-main.
|
|
43
|
-
"@dxos/client-protocol": "0.3.11-main.
|
|
44
|
-
"@dxos/client-services": "0.3.11-main.
|
|
45
|
-
"@dxos/debug": "0.3.11-main.
|
|
46
|
-
"@dxos/display-name": "0.3.11-main.
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/
|
|
49
|
-
"@dxos/react-
|
|
50
|
-
"@dxos/react-ui
|
|
51
|
-
"@dxos/react-ui-
|
|
52
|
-
"@dxos/
|
|
53
|
-
"@dxos/
|
|
42
|
+
"@dxos/async": "0.3.11-main.f4c1077",
|
|
43
|
+
"@dxos/client-protocol": "0.3.11-main.f4c1077",
|
|
44
|
+
"@dxos/client-services": "0.3.11-main.f4c1077",
|
|
45
|
+
"@dxos/debug": "0.3.11-main.f4c1077",
|
|
46
|
+
"@dxos/display-name": "0.3.11-main.f4c1077",
|
|
47
|
+
"@dxos/invariant": "0.3.11-main.f4c1077",
|
|
48
|
+
"@dxos/log": "0.3.11-main.f4c1077",
|
|
49
|
+
"@dxos/react-client": "0.3.11-main.f4c1077",
|
|
50
|
+
"@dxos/react-ui": "0.3.11-main.f4c1077",
|
|
51
|
+
"@dxos/react-ui-theme": "0.3.11-main.f4c1077",
|
|
52
|
+
"@dxos/react-ui-types": "0.3.11-main.f4c1077",
|
|
53
|
+
"@dxos/rpc-tunnel": "0.3.11-main.f4c1077",
|
|
54
|
+
"@dxos/util": "0.3.11-main.f4c1077"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
56
|
-
"@faker-js/faker": "^8.0.2",
|
|
57
57
|
"@phosphor-icons/react": "^2.0.5",
|
|
58
58
|
"@types/lodash.toarray": "^4.4.7",
|
|
59
59
|
"@types/react": "^18.0.21",
|
|
60
60
|
"@types/react-dom": "^18.0.6",
|
|
61
|
-
"@vitejs/plugin-react": "^
|
|
61
|
+
"@vitejs/plugin-react": "^4.2.1",
|
|
62
62
|
"react": "^18.2.0",
|
|
63
63
|
"react-dom": "^18.2.0",
|
|
64
|
-
"vite": "^
|
|
64
|
+
"vite": "^5.0.12",
|
|
65
65
|
"vite-plugin-turbosnap": "^1.0.2",
|
|
66
|
-
"@dxos/config": "0.3.11-main.
|
|
67
|
-
"@dxos/
|
|
68
|
-
"@dxos/react-
|
|
69
|
-
"@dxos/
|
|
66
|
+
"@dxos/config": "0.3.11-main.f4c1077",
|
|
67
|
+
"@dxos/random": "0.3.11-main.f4c1077",
|
|
68
|
+
"@dxos/react-async": "0.3.11-main.f4c1077",
|
|
69
|
+
"@dxos/react-ui-theme": "0.3.11-main.f4c1077",
|
|
70
|
+
"@dxos/storybook-utils": "0.3.11-main.f4c1077"
|
|
70
71
|
},
|
|
71
72
|
"peerDependencies": {
|
|
72
73
|
"@phosphor-icons/react": "^2.0.5",
|
|
@@ -45,7 +45,7 @@ export const SpaceMemberListImpl = ({ members, onSelect }: SpaceMemberListImplPr
|
|
|
45
45
|
const { t } = useTranslation('os');
|
|
46
46
|
const visibleMembers = members.filter((member) => member.identity);
|
|
47
47
|
return visibleMembers.length > 0 ? (
|
|
48
|
-
<List classNames='flex flex-col gap-2'>
|
|
48
|
+
<List classNames='flex flex-col gap-2' data-testid='space-members-list'>
|
|
49
49
|
{visibleMembers.map((member) => {
|
|
50
50
|
return (
|
|
51
51
|
<IdentityListItem
|
|
@@ -6,7 +6,7 @@ import { CaretDown, Check, type IconProps, Placeholder } from '@phosphor-icons/r
|
|
|
6
6
|
import { useControllableState } from '@radix-ui/react-use-controllable-state';
|
|
7
7
|
import React, { type Dispatch, type FC, forwardRef, type SetStateAction } from 'react';
|
|
8
8
|
|
|
9
|
-
import { type ButtonProps, Button,
|
|
9
|
+
import { type ButtonProps, Button, DropdownMenu, useTranslation } from '@dxos/react-ui';
|
|
10
10
|
import { descriptionText, getSize, mx } from '@dxos/react-ui-theme';
|
|
11
11
|
|
|
12
12
|
export type LargeButtonProps = ButtonProps & {
|
|
@@ -26,21 +26,6 @@ export type BifurcatedActionProps = {
|
|
|
26
26
|
defaultActiveAction?: string;
|
|
27
27
|
} & Omit<LargeButtonProps, 'children' | 'onClick'>;
|
|
28
28
|
|
|
29
|
-
const buttonColorFragment: ComponentFragment<LargeButtonProps> = (props: LargeButtonProps) => {
|
|
30
|
-
const resolvedVariant = props.variant ?? 'default';
|
|
31
|
-
return [
|
|
32
|
-
!props.disabled
|
|
33
|
-
? resolvedVariant === 'default'
|
|
34
|
-
? 'bg-neutral-25 hover:bg-white hover:text-primary-500 active:bg-neutral-25 dark:active:bg-neutral-800'
|
|
35
|
-
: resolvedVariant === 'ghost'
|
|
36
|
-
? 'active:bg-neutral-125 dark:active:bg-neutral-800'
|
|
37
|
-
: resolvedVariant === 'primary'
|
|
38
|
-
? 'active:bg-primary-700 dark:active:bg-primary-500'
|
|
39
|
-
: ''
|
|
40
|
-
: '',
|
|
41
|
-
];
|
|
42
|
-
};
|
|
43
|
-
|
|
44
29
|
const defaultActions = {
|
|
45
30
|
noopAction: {
|
|
46
31
|
label: 'No-op',
|
|
@@ -76,7 +61,7 @@ export const BifurcatedAction = forwardRef<HTMLButtonElement, BifurcatedActionPr
|
|
|
76
61
|
<div role='none' className={mx('mbs-2 flex gap-px items-center', isFull && 'is-full')}>
|
|
77
62
|
<Button
|
|
78
63
|
{...rest}
|
|
79
|
-
classNames={['bs-11 flex-1 min-is-0 flex gap-2 rounded-ie-none', classNames
|
|
64
|
+
classNames={['bs-11 flex-1 min-is-0 flex gap-2 rounded-ie-none', classNames]}
|
|
80
65
|
ref={forwardedRef}
|
|
81
66
|
variant={variant}
|
|
82
67
|
onClick={activeAction.onClick}
|
|
@@ -86,7 +71,7 @@ export const BifurcatedAction = forwardRef<HTMLButtonElement, BifurcatedActionPr
|
|
|
86
71
|
</Button>
|
|
87
72
|
<DropdownMenu.Root>
|
|
88
73
|
<DropdownMenu.Trigger asChild>
|
|
89
|
-
<Button classNames={['bs-11 flex-none rounded-is-none', classNames
|
|
74
|
+
<Button classNames={['bs-11 flex-none rounded-is-none', classNames]}>
|
|
90
75
|
<span className='sr-only'>{t('invite options label')}</span>
|
|
91
76
|
<CaretDown />
|
|
92
77
|
</Button>
|
|
@@ -132,7 +117,7 @@ export const Action = forwardRef<HTMLButtonElement, LargeButtonProps>((props, fo
|
|
|
132
117
|
return (
|
|
133
118
|
<Button
|
|
134
119
|
{...rest}
|
|
135
|
-
classNames={[isFull && 'is-full', 'bs-11 flex gap-2 mbs-2', classNames
|
|
120
|
+
classNames={[isFull && 'is-full', 'bs-11 flex gap-2 mbs-2', classNames]}
|
|
136
121
|
ref={forwardedRef}
|
|
137
122
|
variant={variant}
|
|
138
123
|
>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import React, { useEffect, useState } from 'react';
|
|
6
6
|
|
|
7
7
|
import { log } from '@dxos/log';
|
|
8
|
-
import { type LayoutRequest, ShellDisplay, ShellLayout, type ShellRuntime } from '@dxos/react-client';
|
|
8
|
+
import { type LayoutRequest, ShellDisplay, ShellLayout, type ShellRuntime, useClient } from '@dxos/react-client';
|
|
9
9
|
import { useSpace } from '@dxos/react-client/echo';
|
|
10
10
|
|
|
11
11
|
import { IdentityDialog } from '../IdentityDialog';
|
|
@@ -13,12 +13,14 @@ import { JoinDialog } from '../JoinDialog';
|
|
|
13
13
|
import { SpaceDialog } from '../SpaceDialog';
|
|
14
14
|
|
|
15
15
|
export const Shell = ({ runtime, origin }: { runtime: ShellRuntime; origin: string }) => {
|
|
16
|
-
const [{ layout, invitationCode, spaceKey }, setLayout] = useState<LayoutRequest>({
|
|
16
|
+
const [{ layout, invitationCode, spaceKey, target }, setLayout] = useState<LayoutRequest>({
|
|
17
17
|
layout: runtime.layout,
|
|
18
18
|
invitationCode: runtime.invitationCode,
|
|
19
19
|
spaceKey: runtime.spaceKey,
|
|
20
|
+
target: runtime.target,
|
|
20
21
|
});
|
|
21
22
|
|
|
23
|
+
const client = useClient();
|
|
22
24
|
const space = useSpace(spaceKey);
|
|
23
25
|
|
|
24
26
|
useEffect(() => {
|
|
@@ -58,6 +60,11 @@ export const Shell = ({ runtime, origin }: { runtime: ShellRuntime; origin: stri
|
|
|
58
60
|
return (
|
|
59
61
|
<IdentityDialog
|
|
60
62
|
createInvitationUrl={(invitationCode) => `${origin}?deviceInvitationCode=${invitationCode}`}
|
|
63
|
+
onResetDevice={async () => {
|
|
64
|
+
await client.reset();
|
|
65
|
+
await runtime.setAppContext({ display: ShellDisplay.NONE, reload: true });
|
|
66
|
+
}}
|
|
67
|
+
onJoinNewIdentity={() => runtime.setLayout({ layout: ShellLayout.INITIALIZE_IDENTITY })}
|
|
61
68
|
onDone={async () => {
|
|
62
69
|
await runtime.setAppContext({ display: ShellDisplay.NONE });
|
|
63
70
|
runtime.setLayout({ layout: ShellLayout.DEFAULT });
|
|
@@ -69,6 +76,7 @@ export const Shell = ({ runtime, origin }: { runtime: ShellRuntime; origin: stri
|
|
|
69
76
|
return space ? (
|
|
70
77
|
<SpaceDialog
|
|
71
78
|
space={space}
|
|
79
|
+
target={target}
|
|
72
80
|
createInvitationUrl={(invitationCode) => `${origin}?spaceInvitationCode=${invitationCode}`}
|
|
73
81
|
onDone={async () => {
|
|
74
82
|
await runtime.setAppContext({ display: ShellDisplay.NONE });
|
|
@@ -82,7 +90,12 @@ export const Shell = ({ runtime, origin }: { runtime: ShellRuntime; origin: stri
|
|
|
82
90
|
<JoinDialog
|
|
83
91
|
initialInvitationCode={invitationCode}
|
|
84
92
|
onDone={async (result) => {
|
|
85
|
-
|
|
93
|
+
const target = result?.target ?? undefined;
|
|
94
|
+
await runtime.setAppContext({
|
|
95
|
+
display: ShellDisplay.NONE,
|
|
96
|
+
spaceKey: result?.spaceKey ?? undefined,
|
|
97
|
+
target,
|
|
98
|
+
});
|
|
86
99
|
runtime.setLayout({ layout: ShellLayout.DEFAULT });
|
|
87
100
|
}}
|
|
88
101
|
onExit={async () => {
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
import '@dxosTheme';
|
|
6
6
|
|
|
7
|
-
import { faker } from '@faker-js/faker';
|
|
8
7
|
import React from 'react';
|
|
9
8
|
|
|
9
|
+
import { faker } from '@dxos/random';
|
|
10
10
|
import { PublicKey } from '@dxos/react-client';
|
|
11
11
|
import { DeviceKind } from '@dxos/react-client/halo';
|
|
12
12
|
import { Invitation } from '@dxos/react-client/invitations';
|
|
@@ -6,7 +6,7 @@ import React, { useEffect, useMemo } from 'react';
|
|
|
6
6
|
import { generateName } from '@dxos/display-name';
|
|
7
7
|
import { log } from '@dxos/log';
|
|
8
8
|
import { useClient } from '@dxos/react-client';
|
|
9
|
-
import { type Identity, useIdentity, useDevices } from '@dxos/react-client/halo';
|
|
9
|
+
import { type Identity, useIdentity, useDevices, useHaloInvitations } from '@dxos/react-client/halo';
|
|
10
10
|
import { useInvitationStatus } from '@dxos/react-client/invitations';
|
|
11
11
|
import type { CancellableInvitationObservable } from '@dxos/react-client/invitations';
|
|
12
12
|
import { Avatar, DensityProvider, useId, useJdenticonHref, useTranslation } from '@dxos/react-ui';
|
|
@@ -17,7 +17,8 @@ import {
|
|
|
17
17
|
type IdentityPanelProps,
|
|
18
18
|
} from './IdentityPanelProps';
|
|
19
19
|
import { useIdentityMachine } from './identityMachine';
|
|
20
|
-
import { DeviceManager, IdentityActionChooser, ProfileForm } from './steps';
|
|
20
|
+
import { AgentForm, DeviceManager, IdentityActionChooser, ProfileForm, SignOutChooser } from './steps';
|
|
21
|
+
import { useAgentHandlers } from './useAgentHandlers';
|
|
21
22
|
import { Viewport, Heading, CloseButton } from '../../components';
|
|
22
23
|
import { InvitationManager } from '../../steps';
|
|
23
24
|
|
|
@@ -31,7 +32,7 @@ const IdentityHeading = ({ titleId, title, identity, onDone }: IdentityPanelHead
|
|
|
31
32
|
<Avatar.Frame classNames='block mbs-4 mbe-2 mli-auto chromatic-ignore'>
|
|
32
33
|
<Avatar.Fallback href={fallbackHref} />
|
|
33
34
|
</Avatar.Frame>
|
|
34
|
-
<Avatar.Label classNames='block text-center font-light text-xl'>
|
|
35
|
+
<Avatar.Label classNames='block text-center font-light text-xl' data-testid='identityHeading.displayName'>
|
|
35
36
|
{identity.profile?.displayName ?? generateName(identity.identityKey.toHex())}
|
|
36
37
|
</Avatar.Label>
|
|
37
38
|
</Avatar.Root>
|
|
@@ -45,6 +46,8 @@ export const IdentityPanelImpl = (props: IdentityPanelImplProps) => {
|
|
|
45
46
|
titleId,
|
|
46
47
|
activeView,
|
|
47
48
|
onUpdateProfile,
|
|
49
|
+
onResetDevice,
|
|
50
|
+
onJoinNewIdentity,
|
|
48
51
|
IdentityActionChooser: IdentityActionChooserComponent = IdentityActionChooser,
|
|
49
52
|
InvitationManager: InvitationManagerComponent = InvitationManager,
|
|
50
53
|
onDone,
|
|
@@ -53,15 +56,15 @@ export const IdentityPanelImpl = (props: IdentityPanelImplProps) => {
|
|
|
53
56
|
const { t } = useTranslation('os');
|
|
54
57
|
const title = useMemo(() => {
|
|
55
58
|
switch (activeView) {
|
|
56
|
-
case '
|
|
57
|
-
return
|
|
59
|
+
case 'agent manager':
|
|
60
|
+
return 'Manage Agent';
|
|
58
61
|
case 'device invitation manager':
|
|
59
62
|
return t('choose add device label');
|
|
60
63
|
default:
|
|
61
64
|
return t('identity heading');
|
|
62
65
|
}
|
|
63
66
|
}, [activeView, t]);
|
|
64
|
-
|
|
67
|
+
|
|
65
68
|
return (
|
|
66
69
|
<DensityProvider density='fine'>
|
|
67
70
|
<IdentityHeading {...{ identity, titleId, title, onDone }} />
|
|
@@ -88,7 +91,17 @@ export const IdentityPanelImpl = (props: IdentityPanelImplProps) => {
|
|
|
88
91
|
onUpdateProfile={onUpdateProfile}
|
|
89
92
|
/>
|
|
90
93
|
</Viewport.View>
|
|
91
|
-
|
|
94
|
+
<Viewport.View classNames={viewStyles} id='signing out'>
|
|
95
|
+
<SignOutChooser
|
|
96
|
+
send={rest.send}
|
|
97
|
+
active={activeView === 'signing out'}
|
|
98
|
+
onResetDevice={onResetDevice}
|
|
99
|
+
onJoinNewIdentity={onJoinNewIdentity}
|
|
100
|
+
/>
|
|
101
|
+
</Viewport.View>
|
|
102
|
+
<Viewport.View classNames={viewStyles} id='agent manager'>
|
|
103
|
+
<AgentForm send={rest.send} active={activeView === 'agent manager'} {...rest} />
|
|
104
|
+
</Viewport.View>
|
|
92
105
|
</Viewport.Views>
|
|
93
106
|
</Viewport.Root>
|
|
94
107
|
</DensityProvider>
|
|
@@ -112,6 +125,8 @@ export const IdentityPanel = ({
|
|
|
112
125
|
const client = useClient();
|
|
113
126
|
const devices = useDevices();
|
|
114
127
|
const identity = useIdentity();
|
|
128
|
+
const invitations = useHaloInvitations();
|
|
129
|
+
const agentProps = useAgentHandlers({ client, identity, invitations });
|
|
115
130
|
if (!identity) {
|
|
116
131
|
console.error('IdentityPanel rendered with no active identity.');
|
|
117
132
|
return null;
|
|
@@ -136,15 +151,15 @@ export const IdentityPanel = ({
|
|
|
136
151
|
return 'device manager';
|
|
137
152
|
case [{ managingProfile: 'idle' }, { managingProfile: 'pending' }].some(identityState.matches):
|
|
138
153
|
return 'update profile form';
|
|
139
|
-
|
|
140
|
-
|
|
154
|
+
case identityState.matches('signingOut'):
|
|
155
|
+
return 'signing out';
|
|
156
|
+
case [{ managingAgent: 'idle' }, { managingAgent: 'pending' }].some(identityState.matches):
|
|
157
|
+
return 'agent manager';
|
|
141
158
|
default:
|
|
142
159
|
return 'identity action chooser';
|
|
143
160
|
}
|
|
144
161
|
}, [identityState]);
|
|
145
162
|
|
|
146
|
-
console.log({ activeView, identityState });
|
|
147
|
-
|
|
148
163
|
const onUpdateProfile = async (profile: NonNullable<Identity['profile']>) => {
|
|
149
164
|
identitySend({ type: 'updateProfile' });
|
|
150
165
|
await client.halo.updateProfile(profile);
|
|
@@ -159,6 +174,7 @@ export const IdentityPanel = ({
|
|
|
159
174
|
titleId,
|
|
160
175
|
createInvitationUrl,
|
|
161
176
|
onUpdateProfile,
|
|
177
|
+
...agentProps,
|
|
162
178
|
} satisfies IdentityPanelImplProps;
|
|
163
179
|
|
|
164
180
|
return identityState.context.invitation ? (
|
|
@@ -11,12 +11,29 @@ import type { InvitationStatus } from '@dxos/react-client/invitations';
|
|
|
11
11
|
import type { IdentityEvent } from './identityMachine';
|
|
12
12
|
import type { InvitationManagerProps } from '../../steps';
|
|
13
13
|
|
|
14
|
+
export type AgentFormProps = {
|
|
15
|
+
onAgentCreate?: () => Promise<void>;
|
|
16
|
+
onAgentDestroy?: () => Promise<void>;
|
|
17
|
+
agentStatus?: string;
|
|
18
|
+
agentActive?: boolean;
|
|
19
|
+
agentProviderDisabled?: boolean;
|
|
20
|
+
validationMessage?: string;
|
|
21
|
+
};
|
|
22
|
+
|
|
14
23
|
export type IdentityPanelImplProps = {
|
|
15
24
|
titleId: string;
|
|
16
|
-
activeView:
|
|
25
|
+
activeView:
|
|
26
|
+
| 'device manager'
|
|
27
|
+
| 'agent manager'
|
|
28
|
+
| 'update profile form'
|
|
29
|
+
| 'device invitation manager'
|
|
30
|
+
| 'identity action chooser'
|
|
31
|
+
| 'signing out';
|
|
17
32
|
identity: Identity;
|
|
18
33
|
devices: Device[];
|
|
19
34
|
onUpdateProfile?: (profile: NonNullable<Identity['profile']>) => Promise<void>;
|
|
35
|
+
onResetDevice?: () => Promise<void>;
|
|
36
|
+
onJoinNewIdentity?: () => void;
|
|
20
37
|
createInvitationUrl: (invitationCode: string) => string;
|
|
21
38
|
send?: (event: SingleOrArray<Event<IdentityEvent>>) => void;
|
|
22
39
|
onDone?: () => void;
|
|
@@ -24,7 +41,8 @@ export type IdentityPanelImplProps = {
|
|
|
24
41
|
invitationUrl?: string;
|
|
25
42
|
IdentityActionChooser?: React.FC<IdentityPanelStepProps>;
|
|
26
43
|
InvitationManager?: React.FC<InvitationManagerProps>;
|
|
27
|
-
} & Partial<InvitationStatus
|
|
44
|
+
} & Partial<InvitationStatus> &
|
|
45
|
+
Partial<AgentFormProps>;
|
|
28
46
|
|
|
29
47
|
export type IdentityPanelProps = Partial<Omit<IdentityPanelImplProps, 'send' | 'activeView' | 'identity'>>;
|
|
30
48
|
|
|
@@ -19,7 +19,7 @@ type IdentityMachineContext = {
|
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
type IdentityChooseActionEvent = {
|
|
22
|
-
type: 'chooseDevices' | 'chooseProfile' |
|
|
22
|
+
type: 'chooseDevices' | 'chooseAgent' | 'chooseProfile' | 'chooseSignOut' | 'sigingOut' | 'unchooseAction';
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
type IdentitySelectDeviceInvitationEvent = {
|
|
@@ -58,6 +58,13 @@ const identityMachine = createMachine<IdentityMachineContext, IdentityEvent>(
|
|
|
58
58
|
states: {
|
|
59
59
|
choosingAction: {},
|
|
60
60
|
managingDeviceInvitation: {},
|
|
61
|
+
managingAgent: {
|
|
62
|
+
initial: 'idle',
|
|
63
|
+
states: {
|
|
64
|
+
idle: {},
|
|
65
|
+
pending: {},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
61
68
|
managingDevices: {},
|
|
62
69
|
managingProfile: {
|
|
63
70
|
initial: 'idle',
|
|
@@ -70,7 +77,7 @@ const identityMachine = createMachine<IdentityMachineContext, IdentityEvent>(
|
|
|
70
77
|
updateProfile: { target: '.pending', actions: 'log' },
|
|
71
78
|
},
|
|
72
79
|
},
|
|
73
|
-
|
|
80
|
+
signingOut: {},
|
|
74
81
|
},
|
|
75
82
|
on: {
|
|
76
83
|
unchooseAction: { target: '.choosingAction', actions: ['unsetInvitation', 'log'] },
|
|
@@ -78,7 +85,8 @@ const identityMachine = createMachine<IdentityMachineContext, IdentityEvent>(
|
|
|
78
85
|
selectInvitation: { target: '.managingDeviceInvitation', actions: ['setInvitation', 'log'] },
|
|
79
86
|
chooseDevices: { target: '.managingDevices', actions: 'log' },
|
|
80
87
|
chooseProfile: { target: '.managingProfile', actions: 'log' },
|
|
81
|
-
|
|
88
|
+
chooseSignOut: { target: '.signingOut', actions: 'log' },
|
|
89
|
+
chooseAgent: { target: '.managingAgent', actions: 'log' },
|
|
82
90
|
},
|
|
83
91
|
},
|
|
84
92
|
{
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React from 'react';
|
|
6
|
+
|
|
7
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
8
|
+
|
|
9
|
+
import { Action, Actions, StepHeading, Input } from '../../../components';
|
|
10
|
+
import { type AgentFormProps, type IdentityPanelStepProps } from '../IdentityPanelProps';
|
|
11
|
+
|
|
12
|
+
export const AgentForm = (props: IdentityPanelStepProps & AgentFormProps) => {
|
|
13
|
+
const {
|
|
14
|
+
active,
|
|
15
|
+
onAgentCreate,
|
|
16
|
+
onAgentDestroy,
|
|
17
|
+
send,
|
|
18
|
+
validationMessage,
|
|
19
|
+
agentStatus,
|
|
20
|
+
agentActive,
|
|
21
|
+
agentProviderDisabled,
|
|
22
|
+
} = props;
|
|
23
|
+
const disabled = !active;
|
|
24
|
+
const { t } = useTranslation('os');
|
|
25
|
+
return (
|
|
26
|
+
<>
|
|
27
|
+
<div role='none' className='grow flex flex-col justify-center'>
|
|
28
|
+
<Input
|
|
29
|
+
{...{ validationMessage }}
|
|
30
|
+
label={<StepHeading>Agent Status</StepHeading>}
|
|
31
|
+
disabled={disabled}
|
|
32
|
+
data-testid='agent-status'
|
|
33
|
+
value={agentStatus}
|
|
34
|
+
/>
|
|
35
|
+
</div>
|
|
36
|
+
<Actions>
|
|
37
|
+
<Action
|
|
38
|
+
disabled={agentActive || agentProviderDisabled}
|
|
39
|
+
onClick={() => onAgentCreate?.()}
|
|
40
|
+
data-testid={'create-agent'}
|
|
41
|
+
>
|
|
42
|
+
Create Agent
|
|
43
|
+
</Action>
|
|
44
|
+
<Action
|
|
45
|
+
disabled={!agentActive || agentProviderDisabled}
|
|
46
|
+
onClick={() => onAgentDestroy?.()}
|
|
47
|
+
data-testid={'destroy-agent'}
|
|
48
|
+
>
|
|
49
|
+
Destroy Agent
|
|
50
|
+
</Action>
|
|
51
|
+
<Action
|
|
52
|
+
disabled={disabled}
|
|
53
|
+
onClick={() => send?.({ type: 'unchooseAction' })}
|
|
54
|
+
data-testid={'update-profile-form-back'}
|
|
55
|
+
>
|
|
56
|
+
{t('back label')}
|
|
57
|
+
</Action>
|
|
58
|
+
</Actions>
|
|
59
|
+
</>
|
|
60
|
+
);
|
|
61
|
+
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { CaretRight, Devices, Plus, Power, UserGear } from '@phosphor-icons/react';
|
|
5
|
+
import { CaretRight, Devices, Plus, Power, UserGear, HardDrive } from '@phosphor-icons/react';
|
|
6
6
|
import React, { useCallback } from 'react';
|
|
7
7
|
|
|
8
8
|
import { useClient } from '@dxos/react-client';
|
|
@@ -63,6 +63,11 @@ export const IdentityActionChooserImpl = ({
|
|
|
63
63
|
<div role='none' className='grow flex flex-col gap-1'>
|
|
64
64
|
<DensityProvider density='coarse'>
|
|
65
65
|
<div className='grow justify-center flex flex-col gap-1'>
|
|
66
|
+
<Action data-testid='manage-agent' onClick={() => send?.({ type: 'chooseAgent' })} classNames='plb-4'>
|
|
67
|
+
<HardDrive className={getSize(6)} />
|
|
68
|
+
<span className='grow mli-3'>Manage Agent</span>
|
|
69
|
+
<CaretRight weight='bold' className={getSize(4)} />
|
|
70
|
+
</Action>
|
|
66
71
|
<Action
|
|
67
72
|
disabled={!active}
|
|
68
73
|
data-testid='devices-panel.create-invitation'
|
|
@@ -84,9 +89,8 @@ export const IdentityActionChooserImpl = ({
|
|
|
84
89
|
<CaretRight weight='bold' className={getSize(4)} />
|
|
85
90
|
</Action>
|
|
86
91
|
<Action
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
onClick={() => {} /* send({ type: 'chooseSignOut' }) */}
|
|
92
|
+
data-testid='devices-panel.sign-out'
|
|
93
|
+
onClick={() => send?.({ type: 'chooseSignOut' })}
|
|
90
94
|
classNames='plb-4'
|
|
91
95
|
>
|
|
92
96
|
<Power className={getSize(6)} />
|