@dxos/plugin-space 0.8.3-main.672df60 → 0.8.3-staging.0fa589b
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/lib/browser/{app-graph-builder-DCWUULKX.mjs → app-graph-builder-M2RH72VL.mjs} +49 -14
- package/dist/lib/browser/app-graph-builder-M2RH72VL.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-MLU7XI2P.mjs → app-graph-serializer-F7ISRRBV.mjs} +13 -13
- package/dist/lib/browser/app-graph-serializer-F7ISRRBV.mjs.map +7 -0
- package/dist/lib/browser/{chunk-VEBKN45O.mjs → chunk-4ZKSFDXM.mjs} +29 -17
- package/dist/lib/browser/chunk-4ZKSFDXM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-3LN4LJN6.mjs → chunk-BXNL6SDI.mjs} +2 -1
- package/dist/lib/browser/chunk-BXNL6SDI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZQEIXWBK.mjs → chunk-NFUKCRGE.mjs} +157 -141
- package/dist/lib/browser/chunk-NFUKCRGE.mjs.map +7 -0
- package/dist/lib/browser/chunk-TW7O2EPP.mjs +284 -0
- package/dist/lib/browser/chunk-TW7O2EPP.mjs.map +7 -0
- package/dist/lib/browser/{chunk-N5QMRLKI.mjs → chunk-V24VASAJ.mjs} +112 -43
- package/dist/lib/browser/chunk-V24VASAJ.mjs.map +7 -0
- package/dist/lib/browser/chunk-YMCZR6EZ.mjs +18 -0
- package/dist/lib/browser/chunk-YMCZR6EZ.mjs.map +7 -0
- package/dist/lib/browser/{identity-created-O63SIYOF.mjs → identity-created-PI7TKANR.mjs} +5 -10
- package/dist/lib/browser/identity-created-PI7TKANR.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +61 -51
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/{intent-resolver-PG473BRV.mjs → intent-resolver-RWU6ZE4H.mjs} +66 -45
- package/dist/lib/browser/intent-resolver-RWU6ZE4H.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-FRDC4UXB.mjs → react-root-QIKHSNT2.mjs} +5 -5
- package/dist/lib/browser/{react-surface-QOP7T66K.mjs → react-surface-W56UD53I.mjs} +79 -19
- package/dist/lib/browser/react-surface-W56UD53I.mjs.map +7 -0
- package/dist/lib/browser/{schema-defs-JMN74RNK.mjs → schema-defs-WREJNMIC.mjs} +2 -2
- package/dist/lib/browser/{schema-tools-JIEMHUXV.mjs → schema-tools-ILTVSSS3.mjs} +7 -6
- package/dist/lib/browser/schema-tools-ILTVSSS3.mjs.map +7 -0
- package/dist/lib/browser/{settings-2IN2WLUK.mjs → settings-K54STC5A.mjs} +4 -4
- package/dist/lib/browser/settings-K54STC5A.mjs.map +7 -0
- package/dist/lib/browser/{spaces-ready-L4QAGTDE.mjs → spaces-ready-3PDRDHPC.mjs} +12 -13
- package/dist/lib/browser/spaces-ready-3PDRDHPC.mjs.map +7 -0
- package/dist/lib/browser/{state-6HOSHLIN.mjs → state-HRZ4VRXU.mjs} +2 -2
- package/dist/lib/browser/types/index.mjs +1 -3
- package/dist/lib/node/{app-graph-builder-WC445X77.cjs → app-graph-builder-6LK5HLLE.cjs} +79 -43
- package/dist/lib/node/app-graph-builder-6LK5HLLE.cjs.map +7 -0
- package/dist/lib/node/{app-graph-serializer-UPQOQVMJ.cjs → app-graph-serializer-HKHBNHA3.cjs} +24 -23
- package/dist/lib/node/app-graph-serializer-HKHBNHA3.cjs.map +7 -0
- package/dist/lib/node/chunk-3X4EA4XL.cjs +37 -0
- package/dist/lib/node/chunk-3X4EA4XL.cjs.map +7 -0
- package/dist/lib/node/{chunk-DXL5TDFP.cjs → chunk-DOC5XEZ4.cjs} +32 -18
- package/dist/lib/node/chunk-DOC5XEZ4.cjs.map +7 -0
- package/dist/lib/node/{chunk-USFHJG7C.cjs → chunk-NCHF433F.cjs} +207 -190
- package/dist/lib/node/chunk-NCHF433F.cjs.map +7 -0
- package/dist/lib/node/{chunk-7GQGM4ZF.cjs → chunk-NL5Y4EDX.cjs} +5 -4
- package/dist/lib/node/chunk-NL5Y4EDX.cjs.map +7 -0
- package/dist/lib/node/chunk-ULJZPATP.cjs +312 -0
- package/dist/lib/node/chunk-ULJZPATP.cjs.map +7 -0
- package/dist/lib/node/{chunk-COQYISES.cjs → chunk-XHWVT7LW.cjs} +137 -67
- package/dist/lib/node/chunk-XHWVT7LW.cjs.map +7 -0
- package/dist/lib/node/{identity-created-UXEAUGC7.cjs → identity-created-FF4WZ2WY.cjs} +8 -10
- package/dist/lib/node/identity-created-FF4WZ2WY.cjs.map +7 -0
- package/dist/lib/node/index.cjs +130 -119
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/{intent-resolver-VPVZSSIL.cjs → intent-resolver-AV4CMM3Z.cjs} +99 -79
- package/dist/lib/node/intent-resolver-AV4CMM3Z.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-root-JXLRINF3.cjs → react-root-RQUU3A45.cjs} +10 -10
- package/dist/lib/node/{react-surface-ZIYDBL3C.cjs → react-surface-AZFJLE72.cjs} +119 -58
- package/dist/lib/node/react-surface-AZFJLE72.cjs.map +7 -0
- package/dist/lib/node/{schema-defs-XLFBG3XK.cjs → schema-defs-OB2X2HBH.cjs} +6 -6
- package/dist/lib/node/{schema-tools-ZG6Z2QRC.cjs → schema-tools-IYREN4IH.cjs} +9 -8
- package/dist/lib/node/schema-tools-IYREN4IH.cjs.map +7 -0
- package/dist/lib/node/{settings-FOH7EB5C.cjs → settings-P2EQ7VKQ.cjs} +7 -7
- package/dist/lib/node/settings-P2EQ7VKQ.cjs.map +7 -0
- package/dist/lib/node/{spaces-ready-VXQYCBII.cjs → spaces-ready-DXPOHYV7.cjs} +26 -27
- package/dist/lib/node/spaces-ready-DXPOHYV7.cjs.map +7 -0
- package/dist/lib/node/{state-ZT3MTZXB.cjs → state-M35DK75Z.cjs} +6 -6
- package/dist/lib/node/types/index.cjs +11 -13
- package/dist/lib/node/types/index.cjs.map +2 -2
- package/dist/lib/node-esm/{app-graph-builder-E7CCGPQJ.mjs → app-graph-builder-BCHVZ4OM.mjs} +49 -14
- package/dist/lib/node-esm/app-graph-builder-BCHVZ4OM.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-UCMSLPIA.mjs → app-graph-serializer-TXRGGNP2.mjs} +13 -13
- package/dist/lib/node-esm/app-graph-serializer-TXRGGNP2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-3CP67AYY.mjs +19 -0
- package/dist/lib/node-esm/chunk-3CP67AYY.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-4X4Y63ND.mjs → chunk-BSLREHIX.mjs} +2 -1
- package/dist/lib/node-esm/chunk-BSLREHIX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-D4QMPPS7.mjs +285 -0
- package/dist/lib/node-esm/chunk-D4QMPPS7.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-XAZNQ3QN.mjs → chunk-HO7AIKQS.mjs} +112 -43
- package/dist/lib/node-esm/chunk-HO7AIKQS.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-OSPEGYX3.mjs → chunk-JBQKU4K5.mjs} +29 -17
- package/dist/lib/node-esm/chunk-JBQKU4K5.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-BE2BLE7K.mjs → chunk-LA6AVVH6.mjs} +157 -141
- package/dist/lib/node-esm/chunk-LA6AVVH6.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-ZECO4NH3.mjs → identity-created-35CTAQWI.mjs} +5 -9
- package/dist/lib/node-esm/identity-created-35CTAQWI.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +61 -51
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/{intent-resolver-SK5LP5ZK.mjs → intent-resolver-JO6L2VXC.mjs} +66 -45
- package/dist/lib/node-esm/intent-resolver-JO6L2VXC.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-K2KRGIT7.mjs → react-root-YFGL3B4J.mjs} +5 -5
- package/dist/lib/node-esm/{react-surface-XNUWZCSH.mjs → react-surface-CVAPDLEZ.mjs} +79 -19
- package/dist/lib/node-esm/react-surface-CVAPDLEZ.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-defs-QZJS6UXN.mjs → schema-defs-4MEJETVX.mjs} +2 -2
- package/dist/lib/node-esm/{schema-tools-2Y4D42PD.mjs → schema-tools-SRLCRZ3B.mjs} +7 -6
- package/dist/lib/node-esm/schema-tools-SRLCRZ3B.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-Q4XDFSYD.mjs → settings-TD76LTQS.mjs} +4 -4
- package/dist/lib/node-esm/settings-TD76LTQS.mjs.map +7 -0
- package/dist/lib/node-esm/{spaces-ready-JHKPD4PH.mjs → spaces-ready-FJMGPAVV.mjs} +12 -13
- package/dist/lib/node-esm/spaces-ready-FJMGPAVV.mjs.map +7 -0
- package/dist/lib/node-esm/{state-4ATRHSKA.mjs → state-XQNDCN37.mjs} +2 -2
- package/dist/lib/node-esm/types/index.mjs +1 -3
- package/dist/types/src/SpacePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +8 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/identity-created.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/schema-tools.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
- package/dist/types/src/components/CollectionMain.d.ts +2 -2
- package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
- package/dist/types/src/components/CollectionSection.d.ts +2 -2
- package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -3
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +8 -7
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
- package/dist/types/src/components/MenuFooter.d.ts +2 -2
- package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts +2 -2
- package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +2 -2
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts +2 -2
- package/dist/types/src/components/ObjectSettings/ObjectSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/SchemaContainer.d.ts +2 -2
- package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.d.ts +2 -2
- package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/events.d.ts +1 -3
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +275 -2
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +0 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +81 -12
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +16 -11
- package/dist/types/src/util.d.ts.map +1 -1
- package/package.json +45 -45
- package/src/{SpacePlugin.tsx → SpacePlugin.ts} +30 -10
- package/src/capabilities/app-graph-builder.ts +74 -20
- package/src/capabilities/app-graph-serializer.ts +11 -8
- package/src/capabilities/capabilities.ts +6 -1
- package/src/capabilities/identity-created.ts +5 -4
- package/src/capabilities/intent-resolver.ts +60 -36
- package/src/capabilities/react-surface.tsx +105 -29
- package/src/capabilities/schema-tools.ts +3 -2
- package/src/capabilities/settings.ts +6 -2
- package/src/capabilities/spaces-ready.ts +7 -8
- package/src/components/CollectionMain.tsx +3 -3
- package/src/components/CollectionSection.tsx +2 -2
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +7 -6
- package/src/components/CreateDialog/CreateObjectDialog.tsx +31 -25
- package/src/components/CreateDialog/CreateObjectPanel.tsx +45 -52
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +6 -5
- package/src/components/MembersContainer.tsx +4 -2
- package/src/components/MenuFooter.tsx +3 -2
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +12 -4
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +7 -7
- package/src/components/ObjectSettings/ObjectSettingsContainer.tsx +4 -4
- package/src/components/SchemaContainer.tsx +3 -3
- package/src/components/SpacePluginSettings.tsx +24 -19
- package/src/components/SpacePresence.tsx +22 -15
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +2 -1
- package/src/events.ts +1 -5
- package/src/translations.ts +30 -14
- package/src/types/index.ts +0 -1
- package/src/types/types.ts +32 -11
- package/src/util.tsx +136 -57
- package/dist/lib/browser/app-graph-builder-DCWUULKX.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-MLU7XI2P.mjs.map +0 -7
- package/dist/lib/browser/chunk-3LN4LJN6.mjs.map +0 -7
- package/dist/lib/browser/chunk-N5QMRLKI.mjs.map +0 -7
- package/dist/lib/browser/chunk-VEBKN45O.mjs.map +0 -7
- package/dist/lib/browser/chunk-W46VVHFM.mjs +0 -288
- package/dist/lib/browser/chunk-W46VVHFM.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZQEIXWBK.mjs.map +0 -7
- package/dist/lib/browser/identity-created-O63SIYOF.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-PG473BRV.mjs.map +0 -7
- package/dist/lib/browser/react-surface-QOP7T66K.mjs.map +0 -7
- package/dist/lib/browser/schema-tools-JIEMHUXV.mjs.map +0 -7
- package/dist/lib/browser/settings-2IN2WLUK.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-L4QAGTDE.mjs.map +0 -7
- package/dist/lib/node/app-graph-builder-WC445X77.cjs.map +0 -7
- package/dist/lib/node/app-graph-serializer-UPQOQVMJ.cjs.map +0 -7
- package/dist/lib/node/chunk-7GQGM4ZF.cjs.map +0 -7
- package/dist/lib/node/chunk-COQYISES.cjs.map +0 -7
- package/dist/lib/node/chunk-DXL5TDFP.cjs.map +0 -7
- package/dist/lib/node/chunk-FXHI7JNY.cjs +0 -315
- package/dist/lib/node/chunk-FXHI7JNY.cjs.map +0 -7
- package/dist/lib/node/chunk-USFHJG7C.cjs.map +0 -7
- package/dist/lib/node/identity-created-UXEAUGC7.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-VPVZSSIL.cjs.map +0 -7
- package/dist/lib/node/react-surface-ZIYDBL3C.cjs.map +0 -7
- package/dist/lib/node/schema-tools-ZG6Z2QRC.cjs.map +0 -7
- package/dist/lib/node/settings-FOH7EB5C.cjs.map +0 -7
- package/dist/lib/node/spaces-ready-VXQYCBII.cjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-E7CCGPQJ.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-UCMSLPIA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-4X4Y63ND.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BE2BLE7K.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FTELJGEG.mjs +0 -289
- package/dist/lib/node-esm/chunk-FTELJGEG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OSPEGYX3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XAZNQ3QN.mjs.map +0 -7
- package/dist/lib/node-esm/identity-created-ZECO4NH3.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-SK5LP5ZK.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-XNUWZCSH.mjs.map +0 -7
- package/dist/lib/node-esm/schema-tools-2Y4D42PD.mjs.map +0 -7
- package/dist/lib/node-esm/settings-Q4XDFSYD.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-JHKPD4PH.mjs.map +0 -7
- package/dist/types/src/types/collection.d.ts +0 -15
- package/dist/types/src/types/collection.d.ts.map +0 -1
- package/src/types/collection.ts +0 -18
- /package/dist/lib/browser/{react-root-FRDC4UXB.mjs.map → react-root-QIKHSNT2.mjs.map} +0 -0
- /package/dist/lib/browser/{schema-defs-JMN74RNK.mjs.map → schema-defs-WREJNMIC.mjs.map} +0 -0
- /package/dist/lib/browser/{state-6HOSHLIN.mjs.map → state-HRZ4VRXU.mjs.map} +0 -0
- /package/dist/lib/node/{react-root-JXLRINF3.cjs.map → react-root-RQUU3A45.cjs.map} +0 -0
- /package/dist/lib/node/{schema-defs-XLFBG3XK.cjs.map → schema-defs-OB2X2HBH.cjs.map} +0 -0
- /package/dist/lib/node/{state-ZT3MTZXB.cjs.map → state-M35DK75Z.cjs.map} +0 -0
- /package/dist/lib/node-esm/{react-root-K2KRGIT7.mjs.map → react-root-YFGL3B4J.mjs.map} +0 -0
- /package/dist/lib/node-esm/{schema-defs-QZJS6UXN.mjs.map → schema-defs-4MEJETVX.mjs.map} +0 -0
- /package/dist/lib/node-esm/{state-4ATRHSKA.mjs.map → state-XQNDCN37.mjs.map} +0 -0
|
@@ -2,52 +2,50 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React, { useCallback
|
|
5
|
+
import React, { useCallback } from 'react';
|
|
6
6
|
|
|
7
|
+
import { Type } from '@dxos/echo';
|
|
7
8
|
import { getTypeAnnotation, type TypeAnnotation } from '@dxos/echo-schema';
|
|
8
|
-
import { invariant } from '@dxos/invariant';
|
|
9
9
|
import { type SpaceId, type Space } from '@dxos/react-client/echo';
|
|
10
|
-
import { Icon,
|
|
10
|
+
import { Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
11
11
|
import { Form } from '@dxos/react-ui-form';
|
|
12
12
|
import { SearchList } from '@dxos/react-ui-searchlist';
|
|
13
|
-
import {
|
|
13
|
+
import { cardDialogOverflow, cardDialogPaddedOverflow, cardDialogSearchListRoot } from '@dxos/react-ui-stack';
|
|
14
|
+
import { type DataType } from '@dxos/schema';
|
|
14
15
|
import { isNonNullable, type MaybePromise } from '@dxos/util';
|
|
15
16
|
|
|
16
17
|
import { useInputSurfaceLookup } from '../../hooks';
|
|
17
18
|
import { SPACE_PLUGIN } from '../../meta';
|
|
18
|
-
import { type ObjectForm
|
|
19
|
+
import { type ObjectForm } from '../../types';
|
|
19
20
|
import { getSpaceDisplayName } from '../../util';
|
|
20
21
|
|
|
21
|
-
export type CreateObjectPanelProps =
|
|
22
|
+
export type CreateObjectPanelProps = {
|
|
22
23
|
forms: ObjectForm[];
|
|
23
24
|
spaces: Space[];
|
|
24
25
|
typename?: string;
|
|
25
|
-
target?: Space |
|
|
26
|
+
target?: Space | DataType.Collection;
|
|
26
27
|
name?: string;
|
|
27
28
|
defaultSpaceId?: SpaceId;
|
|
28
29
|
resolve?: (typename: string) => Record<string, any>;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}) => MaybePromise<void>;
|
|
34
|
-
}>;
|
|
30
|
+
onTargetChange?: (target: Space) => void;
|
|
31
|
+
onTypenameChange?: (typename: string) => void;
|
|
32
|
+
onCreateObject?: (params: { form: ObjectForm; data?: Record<string, any> }) => MaybePromise<void>;
|
|
33
|
+
};
|
|
35
34
|
|
|
36
35
|
export const CreateObjectPanel = ({
|
|
37
|
-
classNames,
|
|
38
36
|
forms,
|
|
39
37
|
spaces,
|
|
40
|
-
typename
|
|
41
|
-
target
|
|
38
|
+
typename,
|
|
39
|
+
target,
|
|
42
40
|
name: initialName,
|
|
43
41
|
defaultSpaceId,
|
|
44
42
|
resolve,
|
|
43
|
+
onTargetChange,
|
|
44
|
+
onTypenameChange,
|
|
45
45
|
onCreateObject,
|
|
46
46
|
}: CreateObjectPanelProps) => {
|
|
47
47
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
48
|
-
const
|
|
49
|
-
const [target, setTarget] = useState<Space | CollectionType | undefined>(initialTarget);
|
|
50
|
-
const form = forms.find((form) => getTypeAnnotation(form.objectSchema)?.typename === typename);
|
|
48
|
+
const form = forms.find((form) => Type.getTypename(form.objectSchema) === typename);
|
|
51
49
|
const options: TypeAnnotation[] = forms
|
|
52
50
|
.map((form) => getTypeAnnotation(form.objectSchema))
|
|
53
51
|
.filter(isNonNullable)
|
|
@@ -59,67 +57,63 @@ export const CreateObjectPanel = ({
|
|
|
59
57
|
|
|
60
58
|
const handleCreateObject = useCallback(
|
|
61
59
|
async (props: Record<string, any>) => {
|
|
62
|
-
if (!form
|
|
60
|
+
if (!form) {
|
|
63
61
|
return;
|
|
64
62
|
}
|
|
65
|
-
await onCreateObject?.({ form,
|
|
63
|
+
await onCreateObject?.({ form, data: props });
|
|
66
64
|
},
|
|
67
|
-
[onCreateObject, form
|
|
65
|
+
[onCreateObject, form],
|
|
68
66
|
);
|
|
69
67
|
|
|
70
68
|
const handleSetTypename = useCallback(
|
|
71
69
|
async (typename: string) => {
|
|
72
|
-
invariant(target, 'target is required');
|
|
73
70
|
const form = forms.find((form) => getTypeAnnotation(form.objectSchema)?.typename === typename);
|
|
74
71
|
if (form && !form.formSchema) {
|
|
75
|
-
await onCreateObject?.({ form
|
|
72
|
+
await onCreateObject?.({ form });
|
|
76
73
|
} else {
|
|
77
|
-
|
|
74
|
+
onTypenameChange?.(typename);
|
|
78
75
|
}
|
|
79
76
|
},
|
|
80
|
-
[forms, onCreateObject
|
|
77
|
+
[forms, onCreateObject],
|
|
81
78
|
);
|
|
82
79
|
|
|
83
80
|
const inputSurfaceLookup = useInputSurfaceLookup({ target });
|
|
84
81
|
|
|
85
82
|
// TODO(wittjosiah): These inputs should be rolled into a `Form` once it supports the necessary variants.
|
|
86
|
-
return (
|
|
87
|
-
<
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
/>
|
|
102
|
-
) : undefined}
|
|
83
|
+
return !form ? (
|
|
84
|
+
<SelectSchema options={options} resolve={resolve} onChange={handleSetTypename} />
|
|
85
|
+
) : !target ? (
|
|
86
|
+
<SelectSpace spaces={spaces} defaultSpaceId={defaultSpaceId} onChange={onTargetChange} />
|
|
87
|
+
) : form.formSchema ? (
|
|
88
|
+
<div role='none' className={cardDialogOverflow}>
|
|
89
|
+
<Form
|
|
90
|
+
autoFocus
|
|
91
|
+
values={{ name: initialName }}
|
|
92
|
+
schema={form.formSchema}
|
|
93
|
+
testId='create-object-form'
|
|
94
|
+
onSave={handleCreateObject}
|
|
95
|
+
lookupComponent={inputSurfaceLookup}
|
|
96
|
+
outerSpacing='blockStart-0'
|
|
97
|
+
/>
|
|
103
98
|
</div>
|
|
104
|
-
);
|
|
99
|
+
) : null;
|
|
105
100
|
};
|
|
106
101
|
|
|
107
102
|
const SelectSpace = ({
|
|
108
103
|
spaces,
|
|
109
104
|
defaultSpaceId,
|
|
110
105
|
onChange,
|
|
111
|
-
}: { onChange
|
|
106
|
+
}: { onChange?: (space: Space) => void } & Pick<CreateObjectPanelProps, 'spaces' | 'defaultSpaceId'>) => {
|
|
112
107
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
113
108
|
|
|
114
109
|
return (
|
|
115
|
-
<SearchList.Root label={t('space input label')} classNames=
|
|
110
|
+
<SearchList.Root label={t('space input label')} classNames={cardDialogSearchListRoot}>
|
|
116
111
|
<SearchList.Input
|
|
117
112
|
autoFocus
|
|
118
113
|
data-testid='create-object-form.space-input'
|
|
119
114
|
placeholder={t('space input placeholder')}
|
|
120
|
-
classNames='px-1 my-2'
|
|
121
115
|
/>
|
|
122
|
-
<SearchList.Content classNames=
|
|
116
|
+
<SearchList.Content classNames={[cardDialogOverflow, 'plb-cardSpacingBlock']}>
|
|
123
117
|
{spaces
|
|
124
118
|
.sort((a, b) => {
|
|
125
119
|
const aName = toLocalizedString(getSpaceDisplayName(a, { personal: a.id === defaultSpaceId }), t);
|
|
@@ -130,7 +124,7 @@ const SelectSpace = ({
|
|
|
130
124
|
<SearchList.Item
|
|
131
125
|
key={space.id}
|
|
132
126
|
value={toLocalizedString(getSpaceDisplayName(space, { personal: space.id === defaultSpaceId }), t)}
|
|
133
|
-
onSelect={() => onChange(space)}
|
|
127
|
+
onSelect={() => onChange?.(space)}
|
|
134
128
|
classNames='flex items-center gap-2'
|
|
135
129
|
>
|
|
136
130
|
<span className='grow truncate'>
|
|
@@ -154,14 +148,13 @@ const SelectSchema = ({
|
|
|
154
148
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
155
149
|
|
|
156
150
|
return (
|
|
157
|
-
<SearchList.Root label={t('schema input label')} classNames=
|
|
151
|
+
<SearchList.Root label={t('schema input label')} classNames={cardDialogSearchListRoot}>
|
|
158
152
|
<SearchList.Input
|
|
159
153
|
autoFocus
|
|
160
154
|
data-testid='create-object-form.schema-input'
|
|
161
155
|
placeholder={t('schema input placeholder')}
|
|
162
|
-
classNames='px-1 my-2'
|
|
163
156
|
/>
|
|
164
|
-
<SearchList.Content classNames=
|
|
157
|
+
<SearchList.Content classNames={cardDialogPaddedOverflow}>
|
|
165
158
|
{options.map((option) => (
|
|
166
159
|
<SearchList.Item
|
|
167
160
|
key={option.typename}
|
|
@@ -8,6 +8,7 @@ import React, { useCallback, useRef } from 'react';
|
|
|
8
8
|
import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
|
|
9
9
|
import { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';
|
|
10
10
|
import { Form } from '@dxos/react-ui-form';
|
|
11
|
+
import { cardDialogContent, cardDialogHeader } from '@dxos/react-ui-stack';
|
|
11
12
|
|
|
12
13
|
import { useInputSurfaceLookup } from '../../hooks';
|
|
13
14
|
import { SPACE_PLUGIN } from '../../meta';
|
|
@@ -30,7 +31,7 @@ export const CreateSpaceDialog = () => {
|
|
|
30
31
|
const program = Effect.gen(function* () {
|
|
31
32
|
const { space } = yield* dispatch(createIntent(SpaceAction.Create, data));
|
|
32
33
|
yield* dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: space.id }));
|
|
33
|
-
yield* dispatch(createIntent(
|
|
34
|
+
yield* dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));
|
|
34
35
|
});
|
|
35
36
|
await Effect.runPromise(program);
|
|
36
37
|
},
|
|
@@ -40,8 +41,8 @@ export const CreateSpaceDialog = () => {
|
|
|
40
41
|
return (
|
|
41
42
|
// TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
|
|
42
43
|
// Consider factoring it out to the tabs package.
|
|
43
|
-
<Dialog.Content classNames=
|
|
44
|
-
<div role='none' className=
|
|
44
|
+
<Dialog.Content classNames={cardDialogContent}>
|
|
45
|
+
<div role='none' className={cardDialogHeader}>
|
|
45
46
|
<Dialog.Title>{t('create space dialog title')}</Dialog.Title>
|
|
46
47
|
<Dialog.Close asChild>
|
|
47
48
|
<Button ref={closeRef} density='fine' variant='ghost' autoFocus>
|
|
@@ -49,15 +50,15 @@ export const CreateSpaceDialog = () => {
|
|
|
49
50
|
</Button>
|
|
50
51
|
</Dialog.Close>
|
|
51
52
|
</div>
|
|
52
|
-
<div className='
|
|
53
|
+
<div role='none' className='contents'>
|
|
53
54
|
<Form
|
|
54
55
|
testId='create-space-form'
|
|
55
|
-
classNames='!p-0'
|
|
56
56
|
autoFocus
|
|
57
57
|
values={initialValues}
|
|
58
58
|
schema={SpaceForm}
|
|
59
59
|
lookupComponent={inputSurfaceLookup}
|
|
60
60
|
onSave={handleCreateSpace}
|
|
61
|
+
outerSpacing='scroll-fields'
|
|
61
62
|
/>
|
|
62
63
|
</div>
|
|
63
64
|
</Dialog.Content>
|
|
@@ -7,6 +7,7 @@ import React, { type Dispatch, type SetStateAction, useCallback, useMemo, useSta
|
|
|
7
7
|
import { QR } from 'react-qr-rounded';
|
|
8
8
|
|
|
9
9
|
import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
|
|
10
|
+
import { Type } from '@dxos/echo';
|
|
10
11
|
import { log } from '@dxos/log';
|
|
11
12
|
import { useConfig } from '@dxos/react-client';
|
|
12
13
|
import { fullyQualifiedId, useSpaceInvitations, type Space } from '@dxos/react-client/echo';
|
|
@@ -15,6 +16,7 @@ import { Button, Clipboard, Icon, Input, useId, useTranslation } from '@dxos/rea
|
|
|
15
16
|
import { ControlPage, ControlSection, ControlFrame, ControlFrameItem, ControlItemInput } from '@dxos/react-ui-form';
|
|
16
17
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
17
18
|
import { getSize, mx } from '@dxos/react-ui-theme';
|
|
19
|
+
import { DataType } from '@dxos/schema';
|
|
18
20
|
import {
|
|
19
21
|
type ActionMenuItem,
|
|
20
22
|
AuthCode,
|
|
@@ -28,7 +30,7 @@ import {
|
|
|
28
30
|
import { hexToEmoji } from '@dxos/util';
|
|
29
31
|
|
|
30
32
|
import { SPACE_PLUGIN } from '../meta';
|
|
31
|
-
import {
|
|
33
|
+
import { SpaceAction } from '../types';
|
|
32
34
|
import { COMPOSER_SPACE_LOCK } from '../util';
|
|
33
35
|
|
|
34
36
|
// TODO(wittjosiah): Copied from Shell.
|
|
@@ -65,7 +67,7 @@ export const MembersContainer = ({
|
|
|
65
67
|
};
|
|
66
68
|
|
|
67
69
|
// TODO(wittjosiah): Track which was the most recently viewed object.
|
|
68
|
-
const target = space.properties[
|
|
70
|
+
const target = space.properties[Type.getTypename(DataType.Collection)]?.target?.objects[0]?.target;
|
|
69
71
|
|
|
70
72
|
const locked = space.properties[COMPOSER_SPACE_LOCK];
|
|
71
73
|
const handleChangeLocked = useCallback(() => {
|
|
@@ -5,14 +5,15 @@
|
|
|
5
5
|
import { Planet } from '@phosphor-icons/react';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { getSpace } from '@dxos/client/echo';
|
|
9
|
+
import { type Obj } from '@dxos/echo';
|
|
9
10
|
import { useClient } from '@dxos/react-client';
|
|
10
11
|
import { DropdownMenu, toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
11
12
|
|
|
12
13
|
import { SPACE_PLUGIN } from '../meta';
|
|
13
14
|
import { getSpaceDisplayName } from '../util';
|
|
14
15
|
|
|
15
|
-
export const MenuFooter = ({ object }: { object:
|
|
16
|
+
export const MenuFooter = ({ object }: { object: Obj.Any }) => {
|
|
16
17
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
17
18
|
const client = useClient();
|
|
18
19
|
const space = getSpace(object);
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback, useState } from 'react';
|
|
6
6
|
|
|
7
|
+
import { Obj } from '@dxos/echo';
|
|
7
8
|
import { ForeignKey } from '@dxos/echo-schema';
|
|
8
|
-
import { getMeta, type AnyLiveObject } from '@dxos/react-client/echo';
|
|
9
9
|
import { IconButton, useTranslation } from '@dxos/react-ui';
|
|
10
10
|
import { Form } from '@dxos/react-ui-form';
|
|
11
11
|
|
|
@@ -18,13 +18,13 @@ const initialValues = {
|
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
export type AdvancedObjectSettingsProps = {
|
|
21
|
-
object:
|
|
21
|
+
object: Obj.Any;
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
export const AdvancedObjectSettings = ({ object }: AdvancedObjectSettingsProps) => {
|
|
25
25
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
26
26
|
const [adding, setAdding] = useState(false);
|
|
27
|
-
const keys = getMeta(object)
|
|
27
|
+
const { keys } = Obj.getMeta(object);
|
|
28
28
|
|
|
29
29
|
const handleNew = useCallback(() => setAdding(true), []);
|
|
30
30
|
const handleCancel = useCallback(() => setAdding(false), []);
|
|
@@ -66,7 +66,15 @@ export const AdvancedObjectSettings = ({ object }: AdvancedObjectSettingsProps)
|
|
|
66
66
|
{!adding && <ForeignKeys keys={keys} onDelete={handleDelete} />}
|
|
67
67
|
</div>
|
|
68
68
|
|
|
69
|
-
{adding &&
|
|
69
|
+
{adding && (
|
|
70
|
+
<Form
|
|
71
|
+
outerSpacing={false}
|
|
72
|
+
schema={ForeignKey}
|
|
73
|
+
values={initialValues}
|
|
74
|
+
onSave={handleSave}
|
|
75
|
+
onCancel={handleCancel}
|
|
76
|
+
/>
|
|
77
|
+
)}
|
|
70
78
|
</>
|
|
71
79
|
);
|
|
72
80
|
};
|
|
@@ -4,15 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { type PropsWithChildren, useRef } from 'react';
|
|
6
6
|
|
|
7
|
-
import { type
|
|
7
|
+
import { type Obj } from '@dxos/echo';
|
|
8
8
|
import { Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';
|
|
9
|
-
import { mx } from '@dxos/react-ui-theme';
|
|
10
9
|
|
|
11
10
|
import { meta } from '../../meta';
|
|
12
11
|
|
|
13
12
|
export type BaseObjectSettingsProps = ThemedClassName<
|
|
14
13
|
PropsWithChildren<{
|
|
15
|
-
object:
|
|
14
|
+
object: Obj.Any;
|
|
16
15
|
}>
|
|
17
16
|
>;
|
|
18
17
|
|
|
@@ -24,15 +23,16 @@ export const BaseObjectSettings = ({ classNames, children, object }: BaseObjectS
|
|
|
24
23
|
// The form should only include fields with a specific settings annotation.
|
|
25
24
|
// Perhaps also including the field of the title annotation as well.
|
|
26
25
|
return (
|
|
27
|
-
|
|
26
|
+
<>
|
|
28
27
|
<Input.Root>
|
|
29
28
|
<Input.Label>{t('name label')}</Input.Label>
|
|
30
29
|
<Input.TextInput
|
|
31
30
|
ref={inputRef}
|
|
32
31
|
placeholder={t('name placeholder')}
|
|
33
|
-
|
|
32
|
+
// TODO(burdon): Use annotation to get the name field.
|
|
33
|
+
value={(object as any).name ?? ''}
|
|
34
34
|
onChange={(event) => {
|
|
35
|
-
object.name = event.target.value;
|
|
35
|
+
(object as any).name = event.target.value;
|
|
36
36
|
}}
|
|
37
37
|
onKeyDown={(event) => {
|
|
38
38
|
if (event.key === 'Enter') {
|
|
@@ -42,6 +42,6 @@ export const BaseObjectSettings = ({ classNames, children, object }: BaseObjectS
|
|
|
42
42
|
/>
|
|
43
43
|
</Input.Root>
|
|
44
44
|
{children}
|
|
45
|
-
|
|
45
|
+
</>
|
|
46
46
|
);
|
|
47
47
|
};
|
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
import React, { useMemo } from 'react';
|
|
6
6
|
|
|
7
7
|
import { Surface } from '@dxos/app-framework';
|
|
8
|
-
import { type
|
|
8
|
+
import { type Obj } from '@dxos/echo';
|
|
9
9
|
import { Clipboard } from '@dxos/react-ui';
|
|
10
10
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
11
11
|
|
|
12
12
|
import { BaseObjectSettings } from './BaseObjectSettings';
|
|
13
13
|
|
|
14
14
|
export type ObjectSettingsContainerProps = {
|
|
15
|
-
object:
|
|
15
|
+
object: Obj.Any;
|
|
16
16
|
role: string;
|
|
17
17
|
};
|
|
18
18
|
|
|
@@ -21,8 +21,8 @@ export const ObjectSettingsContainer = ({ object, role }: ObjectSettingsContaine
|
|
|
21
21
|
|
|
22
22
|
return (
|
|
23
23
|
<Clipboard.Provider>
|
|
24
|
-
<StackItem.Content toolbar={false}
|
|
25
|
-
<div className='
|
|
24
|
+
<StackItem.Content toolbar={false}>
|
|
25
|
+
<div role='none' className='overflow-y-auto pli-cardSpacingInline plb-cardSpacingBlock'>
|
|
26
26
|
<BaseObjectSettings object={object}>
|
|
27
27
|
<Surface role='base-object-settings' data={data} />
|
|
28
28
|
</BaseObjectSettings>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useState, useEffect } from 'react';
|
|
6
6
|
|
|
7
|
-
import { type
|
|
7
|
+
import { type Type } from '@dxos/echo';
|
|
8
8
|
import { type Space } from '@dxos/react-client/echo';
|
|
9
9
|
import { useTranslation } from '@dxos/react-ui';
|
|
10
10
|
import { controlItemClasses, ControlPage, ControlSection } from '@dxos/react-ui-form';
|
|
@@ -21,8 +21,8 @@ type SchemaPanelProps = { space: Space };
|
|
|
21
21
|
/**
|
|
22
22
|
* Subscribe to and retrieve all schemas from a space's schema registry.
|
|
23
23
|
*/
|
|
24
|
-
export const useQuerySpaceSchemas = (space: Space):
|
|
25
|
-
const [schemas, setSchemas] = useState<
|
|
24
|
+
export const useQuerySpaceSchemas = (space: Space): Type.Schema[] => {
|
|
25
|
+
const [schemas, setSchemas] = useState<Type.Schema[]>([]);
|
|
26
26
|
|
|
27
27
|
useEffect(() => {
|
|
28
28
|
const query = space.db.schemaRegistry.query();
|
|
@@ -7,8 +7,8 @@ import React from 'react';
|
|
|
7
7
|
import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
|
|
8
8
|
import { useClient } from '@dxos/react-client';
|
|
9
9
|
import { useSpaces } from '@dxos/react-client/echo';
|
|
10
|
-
import { Input, toLocalizedString, useTranslation, List, ListItem,
|
|
11
|
-
import {
|
|
10
|
+
import { Input, toLocalizedString, useTranslation, List, ListItem, IconButton } from '@dxos/react-ui';
|
|
11
|
+
import { controlItemClasses, ControlPage, ControlSection, DeprecatedFormInput } from '@dxos/react-ui-form';
|
|
12
12
|
|
|
13
13
|
import { SPACE_PLUGIN } from '../meta';
|
|
14
14
|
import { SpaceAction, type SpaceSettingsProps } from '../types';
|
|
@@ -16,33 +16,38 @@ import { getSpaceDisplayName } from '../util';
|
|
|
16
16
|
|
|
17
17
|
export const SpacePluginSettings = ({ settings }: { settings: SpaceSettingsProps }) => {
|
|
18
18
|
const { t } = useTranslation(SPACE_PLUGIN);
|
|
19
|
-
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
20
19
|
const client = useClient();
|
|
21
20
|
const spaces = useSpaces({ all: settings.showHidden });
|
|
21
|
+
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
22
22
|
|
|
23
23
|
// TODO(wittjosiah): Migrate to new form container.
|
|
24
24
|
return (
|
|
25
|
-
<
|
|
26
|
-
<
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
<ControlPage>
|
|
26
|
+
<ControlSection title={t('space settings label')} description={t('space settings description')}>
|
|
27
|
+
<div className='pli-trimMd container-max-width'>
|
|
28
|
+
<DeprecatedFormInput label={t('show hidden spaces label')}>
|
|
29
|
+
<Input.Switch
|
|
30
|
+
checked={settings.showHidden}
|
|
31
|
+
onCheckedChange={(checked) => (settings.showHidden = !!checked)}
|
|
32
|
+
/>
|
|
33
|
+
</DeprecatedFormInput>
|
|
34
|
+
</div>
|
|
35
|
+
<List classNames={[controlItemClasses, 'flex flex-col gap-trimSm']}>
|
|
32
36
|
{spaces.map((space) => (
|
|
33
|
-
<ListItem.Root key={space.id}>
|
|
34
|
-
|
|
37
|
+
<ListItem.Root key={space.id} classNames='is-full items-center'>
|
|
38
|
+
{/* TODO(burdon): Should auto center and truncate; NOTE truncate doesn't work with flex grow. */}
|
|
39
|
+
<ListItem.Heading classNames='grow truncate !min-bs-0'>
|
|
35
40
|
{toLocalizedString(getSpaceDisplayName(space, { personal: space === client.spaces.default }), t)}
|
|
36
41
|
</ListItem.Heading>
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
<IconButton
|
|
43
|
+
icon='ph--faders--regular'
|
|
44
|
+
onClick={() => dispatch(createIntent(SpaceAction.OpenSettings, { space }))}
|
|
45
|
+
label={t('open space settings label')}
|
|
46
|
+
/>
|
|
42
47
|
</ListItem.Root>
|
|
43
48
|
))}
|
|
44
49
|
</List>
|
|
45
|
-
</
|
|
46
|
-
</
|
|
50
|
+
</ControlSection>
|
|
51
|
+
</ControlPage>
|
|
47
52
|
);
|
|
48
53
|
};
|
|
@@ -7,7 +7,7 @@ import React, { forwardRef, useCallback, useEffect, useState } from 'react';
|
|
|
7
7
|
|
|
8
8
|
import { useAppGraph, useCapability } from '@dxos/app-framework';
|
|
9
9
|
import { generateName } from '@dxos/display-name';
|
|
10
|
-
import { type
|
|
10
|
+
import { type Type } from '@dxos/echo';
|
|
11
11
|
import { PublicKey, useClient } from '@dxos/react-client';
|
|
12
12
|
import { getSpace, useMembers, type SpaceMember, fullyQualifiedId } from '@dxos/react-client/echo';
|
|
13
13
|
import { type Identity, useIdentity } from '@dxos/react-client/halo';
|
|
@@ -42,7 +42,7 @@ const noViewers = new ComplexMap<PublicKey, ObjectViewerProps>(PublicKey.hash);
|
|
|
42
42
|
// TODO(wittjosiah): Factor out?
|
|
43
43
|
const getName = (identity: Identity) => identity.profile?.displayName ?? generateName(identity.identityKey.toHex());
|
|
44
44
|
|
|
45
|
-
export const SpacePresence = ({ object, spaceKey }: { object: Expando; spaceKey?: PublicKey }) => {
|
|
45
|
+
export const SpacePresence = ({ object, spaceKey }: { object: Type.Expando; spaceKey?: PublicKey }) => {
|
|
46
46
|
// TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.
|
|
47
47
|
const spaceState = useCapability(SpaceCapabilities.MutableState);
|
|
48
48
|
const client = useClient();
|
|
@@ -149,19 +149,26 @@ export const FullPresence = (props: MemberPresenceProps) => {
|
|
|
149
149
|
<Popover.Portal>
|
|
150
150
|
<Popover.Content side='bottom'>
|
|
151
151
|
<Popover.Arrow />
|
|
152
|
-
<
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
152
|
+
<Popover.Viewport classNames='max-bs-56'>
|
|
153
|
+
<List>
|
|
154
|
+
{members.map((member) => (
|
|
155
|
+
<ListItem.Root
|
|
156
|
+
key={member.identity.identityKey.toHex()}
|
|
157
|
+
classNames='flex gap-2 items-center cursor-pointer mbe-2'
|
|
158
|
+
onClick={() => onMemberClick?.(member)}
|
|
159
|
+
data-testid='identity-list-item'
|
|
160
|
+
>
|
|
161
|
+
{/* TODO(Zan): Match always true now we're showing 'members viewing current object'. */}
|
|
162
|
+
<PresenceAvatar
|
|
163
|
+
identity={member.identity}
|
|
164
|
+
size={size}
|
|
165
|
+
showName
|
|
166
|
+
match={member.currentlyAttended}
|
|
167
|
+
/>
|
|
168
|
+
</ListItem.Root>
|
|
169
|
+
))}
|
|
170
|
+
</List>
|
|
171
|
+
</Popover.Viewport>
|
|
165
172
|
</Popover.Content>
|
|
166
173
|
</Popover.Portal>
|
|
167
174
|
</Popover.Root>
|
|
@@ -174,7 +174,8 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
174
174
|
autoSave
|
|
175
175
|
onSave={handleSave}
|
|
176
176
|
Custom={customElements}
|
|
177
|
-
|
|
177
|
+
outerSpacing={false}
|
|
178
|
+
classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content] gap-4'
|
|
178
179
|
/>
|
|
179
180
|
</ControlSection>
|
|
180
181
|
</ControlPage>
|
package/src/events.ts
CHANGED
|
@@ -10,9 +10,5 @@ export namespace SpaceEvents {
|
|
|
10
10
|
export const StateReady = Events.createStateEvent(`${SPACE_PLUGIN}/event/state-ready`);
|
|
11
11
|
export const SetupSettingsPanel = defineEvent(`${SPACE_PLUGIN}/event/setup-settings-panel`);
|
|
12
12
|
export const DefaultSpaceReady = defineEvent(`${SPACE_PLUGIN}/event/default-space-ready`);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// TODO(wittjosiah): Factor out.
|
|
16
|
-
export namespace ThreadEvents {
|
|
17
|
-
export const SetupThread = defineEvent(`${SPACE_PLUGIN}/event/setup-thread`);
|
|
13
|
+
export const SpaceCreated = defineEvent(`${SPACE_PLUGIN}/event/space-created`);
|
|
18
14
|
}
|