@dxos/plugin-space 0.8.4-main.e098934 → 0.8.4-main.ead640a
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/{CollectionMain-D2B75XBS.mjs → CollectionMain-AX7KKXWP.mjs} +4 -4
- package/dist/lib/browser/CollectionMain-AX7KKXWP.mjs.map +7 -0
- package/dist/lib/browser/ObjectDetailsPanel-MQBHG666.mjs +145 -0
- package/dist/lib/browser/ObjectDetailsPanel-MQBHG666.mjs.map +7 -0
- package/dist/lib/browser/ObjectSettings-KNUZFCGS.mjs +151 -0
- package/dist/lib/browser/ObjectSettings-KNUZFCGS.mjs.map +7 -0
- package/dist/lib/browser/RecordMain-MV535I2C.mjs +119 -0
- package/dist/lib/browser/RecordMain-MV535I2C.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-AFC6PNAB.mjs → app-graph-builder-6SNKPPKD.mjs} +61 -58
- package/dist/lib/browser/app-graph-builder-6SNKPPKD.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-Q7QG4EKW.mjs → app-graph-serializer-YGUHIKUW.mjs} +14 -14
- package/dist/lib/browser/app-graph-serializer-YGUHIKUW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-WZYRDFW7.mjs → chunk-2IAM4LHT.mjs} +12 -4
- package/dist/lib/browser/chunk-2IAM4LHT.mjs.map +7 -0
- package/dist/lib/browser/{chunk-S33AYKSS.mjs → chunk-AB7EFWFA.mjs} +47 -38
- package/dist/lib/browser/chunk-AB7EFWFA.mjs.map +7 -0
- package/dist/lib/browser/chunk-EIXZABXD.mjs +19 -0
- package/dist/lib/browser/chunk-EIXZABXD.mjs.map +7 -0
- package/dist/lib/browser/chunk-IRKDREHY.mjs +11 -0
- package/dist/lib/browser/chunk-IRKDREHY.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6GRF7NEF.mjs → chunk-KXSDZJ5T.mjs} +258 -289
- package/dist/lib/browser/chunk-KXSDZJ5T.mjs.map +7 -0
- package/dist/lib/browser/chunk-RLI2IAHK.mjs +20 -0
- package/dist/lib/browser/chunk-RLI2IAHK.mjs.map +7 -0
- package/dist/lib/browser/chunk-TIVKWB5L.mjs +166 -0
- package/dist/lib/browser/chunk-TIVKWB5L.mjs.map +7 -0
- package/dist/lib/browser/{chunk-URST7EEN.mjs → chunk-WS2PJDES.mjs} +13 -9
- package/dist/lib/browser/chunk-WS2PJDES.mjs.map +7 -0
- package/dist/lib/browser/{identity-created-T6ZNVE7S.mjs → identity-created-PW2BA46S.mjs} +3 -3
- package/dist/lib/browser/{identity-created-T6ZNVE7S.mjs.map → identity-created-PW2BA46S.mjs.map} +1 -1
- package/dist/lib/browser/index.mjs +34 -31
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-CO262Q44.mjs → intent-resolver-XQSUBM5U.mjs} +30 -28
- package/dist/lib/browser/intent-resolver-XQSUBM5U.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-K4IVLFYZ.mjs → react-root-OIXDY6US.mjs} +11 -11
- package/dist/lib/browser/react-root-OIXDY6US.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-TPUOK2LC.mjs → react-surface-I4BQVF7V.mjs} +42 -73
- package/dist/lib/browser/react-surface-I4BQVF7V.mjs.map +7 -0
- package/dist/lib/browser/{schema-defs-YDPFZELA.mjs → schema-defs-7R7RKCAE.mjs} +5 -5
- package/dist/lib/browser/{schema-defs-YDPFZELA.mjs.map → schema-defs-7R7RKCAE.mjs.map} +1 -1
- package/dist/lib/browser/{settings-ZYH2JWNI.mjs → settings-OBFJ67ZG.mjs} +5 -5
- package/dist/lib/browser/{settings-ZYH2JWNI.mjs.map → settings-OBFJ67ZG.mjs.map} +1 -1
- package/dist/lib/browser/{spaces-ready-3I5LISH4.mjs → spaces-ready-6YB55EJK.mjs} +8 -8
- package/dist/lib/browser/spaces-ready-6YB55EJK.mjs.map +7 -0
- package/dist/lib/browser/{state-2RGW7FQG.mjs → state-LSPRFIRO.mjs} +7 -7
- package/dist/lib/browser/state-LSPRFIRO.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node-esm/{CollectionMain-ZJIFCWKZ.mjs → CollectionMain-EU57SRYK.mjs} +4 -4
- package/dist/lib/node-esm/CollectionMain-EU57SRYK.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectDetailsPanel-NABA2S56.mjs +146 -0
- package/dist/lib/node-esm/ObjectDetailsPanel-NABA2S56.mjs.map +7 -0
- package/dist/lib/node-esm/ObjectSettings-GXGTITF5.mjs +152 -0
- package/dist/lib/node-esm/ObjectSettings-GXGTITF5.mjs.map +7 -0
- package/dist/lib/node-esm/RecordMain-ME2BU65P.mjs +120 -0
- package/dist/lib/node-esm/RecordMain-ME2BU65P.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-OW2EBYRI.mjs → app-graph-builder-PYG5N3FB.mjs} +61 -58
- package/dist/lib/node-esm/app-graph-builder-PYG5N3FB.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-6PGC5WR5.mjs → app-graph-serializer-FVQ2WB3U.mjs} +14 -14
- package/dist/lib/node-esm/app-graph-serializer-FVQ2WB3U.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-RXDT5LA5.mjs → chunk-4F25JKVT.mjs} +13 -9
- package/dist/lib/node-esm/chunk-4F25JKVT.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-LGNPMOXU.mjs → chunk-DNRBVD2G.mjs} +12 -4
- package/dist/lib/node-esm/chunk-DNRBVD2G.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-GHL2523Z.mjs +167 -0
- package/dist/lib/node-esm/chunk-GHL2523Z.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-H5UPFRRH.mjs +21 -0
- package/dist/lib/node-esm/chunk-H5UPFRRH.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-HWNG4MEU.mjs → chunk-MWNATOXL.mjs} +2 -4
- package/dist/lib/node-esm/chunk-MWNATOXL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-TEUN2E4F.mjs → chunk-QHAVT7PC.mjs} +47 -38
- package/dist/lib/node-esm/chunk-QHAVT7PC.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SVFKU7EW.mjs +20 -0
- package/dist/lib/node-esm/chunk-SVFKU7EW.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-NMCD2PSG.mjs → chunk-X55EOSEF.mjs} +258 -289
- package/dist/lib/node-esm/chunk-X55EOSEF.mjs.map +7 -0
- package/dist/lib/node-esm/{identity-created-AL7NNCKH.mjs → identity-created-MWTLGQRU.mjs} +3 -3
- package/dist/lib/node-esm/{identity-created-AL7NNCKH.mjs.map → identity-created-MWTLGQRU.mjs.map} +1 -1
- package/dist/lib/node-esm/index.mjs +34 -31
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-EXPK4B76.mjs → intent-resolver-27YPEIWX.mjs} +30 -28
- package/dist/lib/node-esm/intent-resolver-27YPEIWX.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-4OQ7MPGW.mjs → react-root-K7YPW753.mjs} +11 -11
- package/dist/lib/node-esm/react-root-K7YPW753.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-WXEXIDB7.mjs → react-surface-F5LL3JUY.mjs} +42 -73
- package/dist/lib/node-esm/react-surface-F5LL3JUY.mjs.map +7 -0
- package/dist/lib/node-esm/{schema-defs-OYBCWKAS.mjs → schema-defs-RYG5DSUE.mjs} +5 -5
- package/dist/lib/node-esm/{schema-defs-OYBCWKAS.mjs.map → schema-defs-RYG5DSUE.mjs.map} +1 -1
- package/dist/lib/node-esm/{settings-2RYFMMTP.mjs → settings-QGWWNMMZ.mjs} +5 -5
- package/dist/lib/node-esm/{settings-2RYFMMTP.mjs.map → settings-QGWWNMMZ.mjs.map} +1 -1
- package/dist/lib/node-esm/{spaces-ready-JAP22P57.mjs → spaces-ready-EPHL7RGX.mjs} +8 -8
- package/dist/lib/node-esm/spaces-ready-EPHL7RGX.mjs.map +7 -0
- package/dist/lib/node-esm/{state-7VBVBGNS.mjs → state-TCGOPLRO.mjs} +7 -7
- package/dist/lib/node-esm/state-TCGOPLRO.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/SpacePlugin.d.ts +1 -1
- 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/capabilities.d.ts +4 -3
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +80 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -1
- package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
- package/dist/types/src/components/JoinDialog.d.ts +1 -1
- package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer.stories.d.ts +80 -1
- package/dist/types/src/components/MembersContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts +9 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectDetailsPanel.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts +10 -0
- package/dist/types/src/components/ObjectDetailsPanel/ObjectForm.d.ts.map +1 -0
- package/dist/types/src/components/ObjectDetailsPanel/index.d.ts +3 -0
- package/dist/types/src/components/ObjectDetailsPanel/index.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +1500 -0
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +1 -1
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/index.d.ts +2 -1
- package/dist/types/src/components/ObjectSettings/index.d.ts.map +1 -1
- package/dist/types/src/components/PopoverRenameObject.d.ts +1 -1
- package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts +1 -1
- package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
- package/dist/types/src/components/RecordMain.d.ts +1 -1
- package/dist/types/src/components/RecordMain.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence.stories.d.ts +82 -3
- package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +80 -1
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +81 -2
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
- package/dist/types/src/components/ViewEditor.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +4 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts +1 -1
- package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
- package/dist/types/src/hooks/usePath.d.ts +1 -1
- package/dist/types/src/hooks/usePath.d.ts.map +1 -1
- package/dist/types/src/hooks/useTypeOptions.d.ts +10 -0
- package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +80 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +54 -52
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +6 -3
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +61 -59
- package/src/SpacePlugin.ts +206 -200
- package/src/capabilities/app-graph-builder.ts +53 -46
- package/src/capabilities/app-graph-serializer.ts +7 -7
- package/src/capabilities/capabilities.ts +15 -10
- package/src/capabilities/intent-resolver.ts +19 -19
- package/src/capabilities/react-root.tsx +2 -2
- package/src/capabilities/react-surface.tsx +31 -102
- package/src/capabilities/spaces-ready.ts +1 -1
- package/src/capabilities/state.ts +2 -2
- package/src/components/AwaitingObject.tsx +2 -2
- package/src/components/CollectionMain.tsx +2 -2
- package/src/components/CollectionSection.tsx +2 -2
- package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +5 -5
- package/src/components/CreateDialog/CreateObjectDialog.tsx +8 -7
- package/src/components/CreateDialog/CreateObjectPanel.tsx +6 -6
- package/src/components/CreateDialog/CreateSpaceDialog.tsx +5 -4
- package/src/components/JoinDialog.tsx +6 -6
- package/src/components/MembersContainer.stories.tsx +6 -5
- package/src/components/MembersContainer.tsx +6 -6
- package/src/components/MenuFooter.tsx +2 -2
- package/src/components/{ObjectDetailsPanel.tsx → ObjectDetailsPanel/ObjectDetailsPanel.tsx} +9 -36
- package/src/components/ObjectDetailsPanel/ObjectForm.tsx +75 -0
- package/src/components/ObjectDetailsPanel/index.ts +7 -0
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +3 -3
- package/src/components/ObjectSettings/BaseObjectSettings.stories.tsx +63 -0
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +96 -26
- package/src/components/ObjectSettings/ForeignKeys.tsx +3 -3
- package/src/components/ObjectSettings/index.ts +3 -1
- package/src/components/PersistenceStatus.tsx +2 -2
- package/src/components/PopoverRenameObject.tsx +3 -3
- package/src/components/PopoverRenameSpace.tsx +3 -3
- package/src/components/RecordMain.tsx +61 -9
- package/src/components/SchemaContainer.tsx +3 -3
- package/src/components/SpacePluginSettings.tsx +2 -2
- package/src/components/SpacePresence.stories.tsx +22 -24
- package/src/components/SpacePresence.tsx +3 -3
- package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +9 -4
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +13 -12
- package/src/components/SyncStatus/InlineSyncStatus.tsx +7 -7
- package/src/components/SyncStatus/SyncStatus.stories.tsx +4 -5
- package/src/components/SyncStatus/SyncStatus.tsx +92 -5
- package/src/components/ViewEditor.tsx +6 -7
- package/src/components/index.ts +1 -1
- package/src/events.ts +6 -6
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useInputSurfaceLookup.tsx +1 -1
- package/src/hooks/usePath.ts +1 -1
- package/src/hooks/useTypeOptions.ts +59 -0
- package/src/meta.ts +1 -3
- package/src/translations.ts +10 -1
- package/src/types/types.ts +11 -7
- package/src/util.tsx +46 -32
- package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +0 -7
- package/dist/lib/browser/ObjectDetailsPanel-J7KGPJJK.mjs +0 -90
- package/dist/lib/browser/ObjectDetailsPanel-J7KGPJJK.mjs.map +0 -7
- package/dist/lib/browser/RecordMain-TEBGAVSL.mjs +0 -68
- package/dist/lib/browser/RecordMain-TEBGAVSL.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-AFC6PNAB.mjs.map +0 -7
- package/dist/lib/browser/app-graph-serializer-Q7QG4EKW.mjs.map +0 -7
- package/dist/lib/browser/chunk-6GRF7NEF.mjs.map +0 -7
- package/dist/lib/browser/chunk-CBYL62HG.mjs +0 -19
- package/dist/lib/browser/chunk-CBYL62HG.mjs.map +0 -7
- package/dist/lib/browser/chunk-ELJDGQTO.mjs +0 -94
- package/dist/lib/browser/chunk-ELJDGQTO.mjs.map +0 -7
- package/dist/lib/browser/chunk-FBCGT5YY.mjs +0 -13
- package/dist/lib/browser/chunk-FBCGT5YY.mjs.map +0 -7
- package/dist/lib/browser/chunk-S33AYKSS.mjs.map +0 -7
- package/dist/lib/browser/chunk-TUQZO5P4.mjs +0 -20
- package/dist/lib/browser/chunk-TUQZO5P4.mjs.map +0 -7
- package/dist/lib/browser/chunk-URST7EEN.mjs.map +0 -7
- package/dist/lib/browser/chunk-WZYRDFW7.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-CO262Q44.mjs.map +0 -7
- package/dist/lib/browser/react-root-K4IVLFYZ.mjs.map +0 -7
- package/dist/lib/browser/react-surface-TPUOK2LC.mjs.map +0 -7
- package/dist/lib/browser/spaces-ready-3I5LISH4.mjs.map +0 -7
- package/dist/lib/browser/state-2RGW7FQG.mjs.map +0 -7
- package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +0 -7
- package/dist/lib/node-esm/ObjectDetailsPanel-7ADOXZ5W.mjs +0 -91
- package/dist/lib/node-esm/ObjectDetailsPanel-7ADOXZ5W.mjs.map +0 -7
- package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs +0 -70
- package/dist/lib/node-esm/RecordMain-WLYJMYER.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-OW2EBYRI.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-serializer-6PGC5WR5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-FJZNSJC4.mjs +0 -20
- package/dist/lib/node-esm/chunk-FJZNSJC4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HC677WUJ.mjs +0 -21
- package/dist/lib/node-esm/chunk-HC677WUJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HWNG4MEU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-LGNPMOXU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NMCD2PSG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs +0 -96
- package/dist/lib/node-esm/chunk-Q6AAQLQG.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-RXDT5LA5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-TEUN2E4F.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-EXPK4B76.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-4OQ7MPGW.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-WXEXIDB7.mjs.map +0 -7
- package/dist/lib/node-esm/spaces-ready-JAP22P57.mjs.map +0 -7
- package/dist/lib/node-esm/state-7VBVBGNS.mjs.map +0 -7
- package/dist/types/src/components/ObjectDetailsPanel.d.ts +0 -9
- package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +0 -1
|
@@ -2,20 +2,18 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@
|
|
6
|
-
|
|
7
|
-
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
5
|
+
import { type Meta } from '@storybook/react-vite';
|
|
8
6
|
import React from 'react';
|
|
9
7
|
|
|
10
8
|
import { IdentityDid, PublicKey } from '@dxos/keys';
|
|
11
9
|
import { HaloSpaceMember, SpaceMember } from '@dxos/react-client/echo';
|
|
12
|
-
import {
|
|
10
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
13
11
|
|
|
14
12
|
import { translations } from '../translations';
|
|
15
13
|
|
|
16
14
|
import { FullPresence, type Member, type MemberPresenceProps, SmallPresence } from './SpacePresence';
|
|
17
15
|
|
|
18
|
-
const
|
|
16
|
+
const viewers = (n: number, currentlyAttended = true): Member[] =>
|
|
19
17
|
Array.from({ length: n }, () => ({
|
|
20
18
|
role: HaloSpaceMember.Role.ADMIN,
|
|
21
19
|
identity: { did: IdentityDid.random(), identityKey: PublicKey.random() },
|
|
@@ -24,6 +22,16 @@ const nViewers = (n: number, currentlyAttended = true): Member[] =>
|
|
|
24
22
|
currentlyAttended,
|
|
25
23
|
}));
|
|
26
24
|
|
|
25
|
+
const meta = {
|
|
26
|
+
title: 'plugins/plugin-space/SpacePresence',
|
|
27
|
+
decorators: [withTheme],
|
|
28
|
+
parameters: {
|
|
29
|
+
translations,
|
|
30
|
+
},
|
|
31
|
+
} satisfies Meta<typeof IdentityDid>;
|
|
32
|
+
|
|
33
|
+
export default meta;
|
|
34
|
+
|
|
27
35
|
export const Full = (props: MemberPresenceProps) => {
|
|
28
36
|
const p: MemberPresenceProps = {
|
|
29
37
|
...props,
|
|
@@ -32,31 +40,31 @@ export const Full = (props: MemberPresenceProps) => {
|
|
|
32
40
|
return (
|
|
33
41
|
<div className='p-4'>
|
|
34
42
|
<div className='p-3'>
|
|
35
|
-
<FullPresence members={
|
|
43
|
+
<FullPresence members={viewers(1)} {...p} />
|
|
36
44
|
</div>
|
|
37
45
|
<div className='p-3'>
|
|
38
|
-
<FullPresence members={
|
|
46
|
+
<FullPresence members={viewers(2)} {...p} />
|
|
39
47
|
</div>
|
|
40
48
|
<div className='p-3'>
|
|
41
|
-
<FullPresence members={
|
|
49
|
+
<FullPresence members={viewers(3)} {...p} />
|
|
42
50
|
</div>
|
|
43
51
|
<div className='p-3'>
|
|
44
|
-
<FullPresence members={
|
|
52
|
+
<FullPresence members={viewers(3, false)} {...p} />
|
|
45
53
|
</div>
|
|
46
54
|
<div className='p-3'>
|
|
47
|
-
<FullPresence members={
|
|
55
|
+
<FullPresence members={viewers(4)} {...p} />
|
|
48
56
|
</div>
|
|
49
57
|
<div className='p-3'>
|
|
50
|
-
<FullPresence members={
|
|
58
|
+
<FullPresence members={viewers(5)} {...p} />
|
|
51
59
|
</div>
|
|
52
60
|
<div className='p-3'>
|
|
53
|
-
<FullPresence members={
|
|
61
|
+
<FullPresence members={viewers(5, false)} {...p} />
|
|
54
62
|
</div>
|
|
55
63
|
<div className='p-3'>
|
|
56
|
-
<FullPresence members={
|
|
64
|
+
<FullPresence members={viewers(10)} {...p} />
|
|
57
65
|
</div>
|
|
58
66
|
<div className='p-3'>
|
|
59
|
-
<FullPresence members={
|
|
67
|
+
<FullPresence members={viewers(100)} {...p} />
|
|
60
68
|
</div>
|
|
61
69
|
</div>
|
|
62
70
|
);
|
|
@@ -98,13 +106,3 @@ export const Small = () => {
|
|
|
98
106
|
</div>
|
|
99
107
|
);
|
|
100
108
|
};
|
|
101
|
-
|
|
102
|
-
const meta = {
|
|
103
|
-
title: 'plugins/plugin-space/SpacePresence',
|
|
104
|
-
decorators: [withTheme, withLayout()],
|
|
105
|
-
parameters: { translations },
|
|
106
|
-
} satisfies Meta<typeof IdentityDid>;
|
|
107
|
-
|
|
108
|
-
export default meta;
|
|
109
|
-
|
|
110
|
-
type Story = StoryObj<typeof meta>;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Option from 'effect/Option';
|
|
6
6
|
import React, { forwardRef, useCallback, useEffect, useState } from 'react';
|
|
7
7
|
|
|
8
8
|
import { useAppGraph, useCapability } from '@dxos/app-framework';
|
|
@@ -29,7 +29,7 @@ import { ComplexMap, keyToFallback } from '@dxos/util';
|
|
|
29
29
|
|
|
30
30
|
import { SpaceCapabilities } from '../capabilities';
|
|
31
31
|
import { usePath } from '../hooks';
|
|
32
|
-
import {
|
|
32
|
+
import { meta } from '../meta';
|
|
33
33
|
import type { ObjectViewerProps } from '../types';
|
|
34
34
|
|
|
35
35
|
// TODO(thure): Get/derive these values from protocol
|
|
@@ -254,7 +254,7 @@ export type SmallPresenceProps = {
|
|
|
254
254
|
} & Pick<AttentionGlyphProps, 'attended' | 'containsAttended'>;
|
|
255
255
|
|
|
256
256
|
export const SmallPresence = ({ count = 0, attended, containsAttended }: SmallPresenceProps) => {
|
|
257
|
-
const { t } = useTranslation(
|
|
257
|
+
const { t } = useTranslation(meta.id);
|
|
258
258
|
|
|
259
259
|
return (
|
|
260
260
|
<Tooltip.Trigger asChild content={t('presence label', { count })} side='bottom'>
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
import React from 'react';
|
|
9
7
|
|
|
8
|
+
import { IntentPlugin } from '@dxos/app-framework';
|
|
9
|
+
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
10
|
import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
|
|
11
|
-
import { withTheme } from '@dxos/
|
|
11
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
12
12
|
|
|
13
13
|
import { translations } from '../../translations';
|
|
14
14
|
|
|
@@ -27,7 +27,12 @@ const meta = {
|
|
|
27
27
|
title: 'plugins/plugin-space/SpaceSettingsContainer',
|
|
28
28
|
component: SpaceSettingsContainer,
|
|
29
29
|
render: Story,
|
|
30
|
-
decorators: [
|
|
30
|
+
decorators: [
|
|
31
|
+
withTheme,
|
|
32
|
+
withClientProvider({ createIdentity: true, createSpace: true }),
|
|
33
|
+
// TODO(wittjosiah): Try to write story which does not depend on plugin manager.
|
|
34
|
+
withPluginManager({ plugins: [IntentPlugin()] }),
|
|
35
|
+
],
|
|
31
36
|
parameters: {
|
|
32
37
|
translations,
|
|
33
38
|
layout: 'centered',
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Function from 'effect/Function';
|
|
6
|
+
import * as Schema from 'effect/Schema';
|
|
6
7
|
import React, { type ChangeEvent, useCallback, useMemo, useState } from 'react';
|
|
7
8
|
|
|
8
9
|
import { LayoutAction, chain, createIntent, useIntentDispatcher } from '@dxos/app-framework';
|
|
@@ -22,7 +23,7 @@ import {
|
|
|
22
23
|
import { HuePicker, IconPicker } from '@dxos/react-ui-pickers';
|
|
23
24
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
24
25
|
|
|
25
|
-
import {
|
|
26
|
+
import { meta } from '../../meta';
|
|
26
27
|
import { SpaceAction, SpaceForm } from '../../types';
|
|
27
28
|
|
|
28
29
|
const FormSchema = SpaceForm.pipe(
|
|
@@ -35,7 +36,7 @@ export type SpaceSettingsContainerProps = {
|
|
|
35
36
|
|
|
36
37
|
// TODO(wittjosiah): Handle space migrations here?
|
|
37
38
|
export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) => {
|
|
38
|
-
const { t } = useTranslation(
|
|
39
|
+
const { t } = useTranslation(meta.id);
|
|
39
40
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
40
41
|
const client = useClient();
|
|
41
42
|
const archived = useMulticastObservable(space.state) === SpaceState.SPACE_INACTIVE;
|
|
@@ -69,7 +70,7 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
69
70
|
}
|
|
70
71
|
if (properties.archived && !archived) {
|
|
71
72
|
void dispatch(
|
|
72
|
-
pipe(
|
|
73
|
+
Function.pipe(
|
|
73
74
|
createIntent(SpaceAction.Close, { space }),
|
|
74
75
|
chain(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: client.spaces.default.id }),
|
|
75
76
|
),
|
|
@@ -111,14 +112,14 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
111
112
|
);
|
|
112
113
|
},
|
|
113
114
|
icon: ({ type, label, getValue, onValueChange }) => {
|
|
114
|
-
const handleChange = useCallback((
|
|
115
|
-
const
|
|
115
|
+
const handleChange = useCallback((icon: string) => onValueChange(type, icon), [onValueChange, type]);
|
|
116
|
+
const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
|
|
116
117
|
return (
|
|
117
118
|
<ControlItem title={label} description={t('icon description')}>
|
|
118
119
|
<IconPicker
|
|
119
120
|
value={getValue()}
|
|
120
121
|
onChange={handleChange}
|
|
121
|
-
onReset={
|
|
122
|
+
onReset={handleReset}
|
|
122
123
|
classNames='justify-self-end'
|
|
123
124
|
iconSize={5}
|
|
124
125
|
/>
|
|
@@ -127,13 +128,13 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
127
128
|
},
|
|
128
129
|
hue: ({ type, label, getValue, onValueChange }) => {
|
|
129
130
|
const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange, type]);
|
|
130
|
-
const
|
|
131
|
+
const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange, type]);
|
|
131
132
|
return (
|
|
132
133
|
<ControlItem title={label} description={t('hue description')}>
|
|
133
134
|
<HuePicker
|
|
134
135
|
value={getValue()}
|
|
135
136
|
onChange={handleChange}
|
|
136
|
-
onReset={
|
|
137
|
+
onReset={handleReset}
|
|
137
138
|
classNames='[--hue-preview-size:1.25rem] justify-self-end'
|
|
138
139
|
/>
|
|
139
140
|
</ControlItem>
|
|
@@ -162,11 +163,11 @@ export const SpaceSettingsContainer = ({ space }: SpaceSettingsContainerProps) =
|
|
|
162
163
|
);
|
|
163
164
|
|
|
164
165
|
return (
|
|
165
|
-
<StackItem.Content
|
|
166
|
+
<StackItem.Content scrollable>
|
|
166
167
|
<ControlPage>
|
|
167
168
|
<ControlSection
|
|
168
|
-
title={t('space properties settings verbose label', { ns:
|
|
169
|
-
description={t('space properties settings description', { ns:
|
|
169
|
+
title={t('space properties settings verbose label', { ns: meta.id })}
|
|
170
|
+
description={t('space properties settings description', { ns: meta.id })}
|
|
170
171
|
>
|
|
171
172
|
<Form
|
|
172
173
|
schema={FormSchema}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Option from 'effect/Option';
|
|
6
6
|
import React, { useEffect, useState } from 'react';
|
|
7
7
|
|
|
8
8
|
import { useAppGraph } from '@dxos/app-framework';
|
|
@@ -14,14 +14,14 @@ import { Tooltip, useTranslation } from '@dxos/react-ui';
|
|
|
14
14
|
import { AttentionGlyph, useAttended, useAttention } from '@dxos/react-ui-attention';
|
|
15
15
|
|
|
16
16
|
import { usePath } from '../../hooks';
|
|
17
|
-
import {
|
|
17
|
+
import { meta } from '../../meta';
|
|
18
18
|
|
|
19
|
-
const useEdgeStatus = (): EdgeStatus => {
|
|
20
|
-
const [status, setStatus] = useState(EdgeStatus.NOT_CONNECTED);
|
|
19
|
+
const useEdgeStatus = (): EdgeStatus.ConnectionState => {
|
|
20
|
+
const [status, setStatus] = useState(EdgeStatus.ConnectionState.NOT_CONNECTED);
|
|
21
21
|
const client = useClient();
|
|
22
22
|
useEffect(() => {
|
|
23
23
|
client.services.services.EdgeAgentService?.queryEdgeStatus().subscribe(({ status }) => {
|
|
24
|
-
setStatus(status);
|
|
24
|
+
setStatus(status.state);
|
|
25
25
|
});
|
|
26
26
|
}, [client]);
|
|
27
27
|
|
|
@@ -29,7 +29,7 @@ const useEdgeStatus = (): EdgeStatus => {
|
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
export const InlineSyncStatus = ({ space, open }: { space: Space; open?: boolean }) => {
|
|
32
|
-
const { t } = useTranslation(
|
|
32
|
+
const { t } = useTranslation(meta.id);
|
|
33
33
|
const id = space.id;
|
|
34
34
|
const { hasAttention, isAncestor, isRelated } = useAttention(id);
|
|
35
35
|
const isAttended = hasAttention || isAncestor || isRelated;
|
|
@@ -43,7 +43,7 @@ export const InlineSyncStatus = ({ space, open }: { space: Space; open?: boolean
|
|
|
43
43
|
const path = usePath(graph, startOfAttention);
|
|
44
44
|
const containsAttended = !open && !isAttended && id && Option.isSome(path) ? path.value.includes(id) : false;
|
|
45
45
|
|
|
46
|
-
const connectedToEdge = useEdgeStatus() === EdgeStatus.CONNECTED;
|
|
46
|
+
const connectedToEdge = useEdgeStatus() === EdgeStatus.ConnectionState.CONNECTED;
|
|
47
47
|
// TODO(wittjosiah): This is not reactive.
|
|
48
48
|
const edgeSyncEnabled = space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED;
|
|
49
49
|
const syncState = useSpaceSyncState(space);
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
8
6
|
|
|
9
|
-
import {
|
|
7
|
+
import { withClientProvider } from '@dxos/react-client/testing';
|
|
8
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
10
9
|
|
|
11
10
|
import { translations } from '../../translations';
|
|
12
11
|
|
|
@@ -15,10 +14,10 @@ import { SyncStatusIndicator } from './SyncStatus';
|
|
|
15
14
|
const meta = {
|
|
16
15
|
title: 'plugins/plugin-space/SyncStatusIndicator',
|
|
17
16
|
component: SyncStatusIndicator,
|
|
18
|
-
decorators: [withTheme],
|
|
17
|
+
decorators: [withTheme, withClientProvider({ createIdentity: true })],
|
|
19
18
|
parameters: {
|
|
20
|
-
translations,
|
|
21
19
|
layout: 'centered',
|
|
20
|
+
translations,
|
|
22
21
|
},
|
|
23
22
|
} satisfies Meta<typeof SyncStatusIndicator>;
|
|
24
23
|
|
|
@@ -5,11 +5,16 @@
|
|
|
5
5
|
import React, { useEffect, useState } from 'react';
|
|
6
6
|
|
|
7
7
|
import { StatusBar } from '@dxos/plugin-status-bar';
|
|
8
|
+
import { EdgeStatus } from '@dxos/protocols/proto/dxos/client/services';
|
|
9
|
+
import type { QueryEdgeStatusResponse } from '@dxos/protocols/proto/dxos/client/services';
|
|
8
10
|
import { useClient } from '@dxos/react-client';
|
|
11
|
+
import { useStream } from '@dxos/react-client/devtools';
|
|
9
12
|
import { type SpaceSyncStateMap, getSyncSummary, useSyncState } from '@dxos/react-client/echo';
|
|
10
|
-
import { Icon, useTranslation } from '@dxos/react-ui';
|
|
13
|
+
import { Icon, Popover, useTranslation } from '@dxos/react-ui';
|
|
14
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
15
|
+
import { Unit } from '@dxos/util';
|
|
11
16
|
|
|
12
|
-
import {
|
|
17
|
+
import { meta } from '../../meta';
|
|
13
18
|
|
|
14
19
|
import { createClientSaveTracker } from './save-tracker';
|
|
15
20
|
import { getIcon, getStatus } from './status';
|
|
@@ -31,7 +36,7 @@ export const SyncStatus = () => {
|
|
|
31
36
|
};
|
|
32
37
|
|
|
33
38
|
export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap; saved: boolean }) => {
|
|
34
|
-
const { t } = useTranslation(
|
|
39
|
+
const { t } = useTranslation(meta.id);
|
|
35
40
|
const summary = getSyncSummary(state);
|
|
36
41
|
const offline = Object.values(state).length === 0;
|
|
37
42
|
const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;
|
|
@@ -53,7 +58,89 @@ export const SyncStatusIndicator = ({ state, saved }: { state: SpaceSyncStateMap
|
|
|
53
58
|
}, [offline, needsToUpload, needsToDownload]);
|
|
54
59
|
|
|
55
60
|
const title = t(`${status} label`);
|
|
56
|
-
const icon = <Icon icon={getIcon(status)}
|
|
61
|
+
const icon = <Icon icon={getIcon(status)} classNames={classNames} />;
|
|
57
62
|
|
|
58
|
-
return
|
|
63
|
+
return (
|
|
64
|
+
<Popover.Root>
|
|
65
|
+
<Popover.Trigger asChild>
|
|
66
|
+
<StatusBar.Item title={title}>{icon}</StatusBar.Item>
|
|
67
|
+
</Popover.Trigger>
|
|
68
|
+
<Popover.Portal>
|
|
69
|
+
<Popover.Content>
|
|
70
|
+
<EdgeConnectionPopover />
|
|
71
|
+
<Popover.Arrow />
|
|
72
|
+
</Popover.Content>
|
|
73
|
+
</Popover.Portal>
|
|
74
|
+
</Popover.Root>
|
|
75
|
+
);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const useEdgeStatus = (): EdgeStatus | undefined => {
|
|
79
|
+
const client = useClient();
|
|
80
|
+
const { status } = useStream(
|
|
81
|
+
() => client.services.services.EdgeAgentService!.queryEdgeStatus(),
|
|
82
|
+
{} as QueryEdgeStatusResponse,
|
|
83
|
+
);
|
|
84
|
+
return status;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
const EdgeConnectionPopover = () => {
|
|
88
|
+
const status = useEdgeStatus();
|
|
89
|
+
const { t } = useTranslation(meta.id);
|
|
90
|
+
|
|
91
|
+
const isConnected = status?.state === EdgeStatus.ConnectionState.CONNECTED;
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<div className='min-is-[240px] p-2'>
|
|
95
|
+
{/* Connection Status Header */}
|
|
96
|
+
<div className='flex items-center gap-2 mbe-2'>
|
|
97
|
+
<Icon
|
|
98
|
+
icon={isConnected ? 'ph--check-circle--regular' : 'ph--warning-circle--regular'}
|
|
99
|
+
classNames={mx(isConnected ? 'text-successText' : 'text-errorText animate-pulse')}
|
|
100
|
+
/>
|
|
101
|
+
<span className='font-medium text-sm'>
|
|
102
|
+
{isConnected ? t('sync edge connected label') : t('sync edge disconnected label')}
|
|
103
|
+
</span>
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
{/* Connection Details */}
|
|
107
|
+
{status?.state === EdgeStatus.ConnectionState.NOT_CONNECTED && (
|
|
108
|
+
<div className='flex items-center gap-2 text-sm text-description'>
|
|
109
|
+
<Icon icon='ph--cloud-x--regular' />
|
|
110
|
+
<span>{t('sync no connection label')}</span>
|
|
111
|
+
</div>
|
|
112
|
+
)}
|
|
113
|
+
|
|
114
|
+
{status?.state === EdgeStatus.ConnectionState.CONNECTED && (
|
|
115
|
+
<div className='space-y-2'>
|
|
116
|
+
{/* Latency */}
|
|
117
|
+
<div className='flex items-center justify-between'>
|
|
118
|
+
<div className='flex items-center gap-2 text-sm text-description'>
|
|
119
|
+
<Icon icon='ph--timer--regular' />
|
|
120
|
+
<span>{t('sync latency label')}</span>
|
|
121
|
+
</div>
|
|
122
|
+
<span className='text-sm font-mono'>{status.rtt.toFixed(0)} ms</span>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
{/* Upload Speed */}
|
|
126
|
+
<div className='flex items-center justify-between'>
|
|
127
|
+
<div className='flex items-center gap-2 text-sm text-description'>
|
|
128
|
+
<Icon icon='ph--arrow-up--regular' />
|
|
129
|
+
<span>{t('sync upload label')}</span>
|
|
130
|
+
</div>
|
|
131
|
+
<span className='text-sm font-mono'>{Unit.Kilobyte(status.rateBytesUp, 0)}/s</span>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
134
|
+
{/* Download Speed */}
|
|
135
|
+
<div className='flex items-center justify-between'>
|
|
136
|
+
<div className='flex items-center gap-2 text-sm text-description'>
|
|
137
|
+
<Icon icon='ph--arrow-down--regular' />
|
|
138
|
+
<span>{t('sync download label')}</span>
|
|
139
|
+
</div>
|
|
140
|
+
<span className='text-sm font-mono'>{Unit.Kilobyte(status.rateBytesDown, 0)}/s</span>
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
)}
|
|
144
|
+
</div>
|
|
145
|
+
);
|
|
59
146
|
};
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
import React, { useCallback } from 'react';
|
|
6
6
|
|
|
7
7
|
import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
|
|
8
|
-
import {
|
|
8
|
+
import { type QueryAST, Type } from '@dxos/echo';
|
|
9
9
|
import { invariant } from '@dxos/invariant';
|
|
10
10
|
import { useClient } from '@dxos/react-client';
|
|
11
11
|
import { getSpace, useSchema } from '@dxos/react-client/echo';
|
|
12
12
|
import { ViewEditor as NaturalViewEditor } from '@dxos/react-ui-form';
|
|
13
|
-
import { type DataType,
|
|
13
|
+
import { type DataType, getTypenameFromQuery } from '@dxos/schema';
|
|
14
14
|
|
|
15
15
|
import { SpaceAction } from '../types';
|
|
16
16
|
|
|
@@ -20,17 +20,16 @@ export const ViewEditor = ({ view }: ViewEditorProps) => {
|
|
|
20
20
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
21
21
|
const client = useClient();
|
|
22
22
|
const space = getSpace(view);
|
|
23
|
-
const typename = view.query ?
|
|
23
|
+
const typename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;
|
|
24
24
|
const schema = useSchema(client, space, typename);
|
|
25
25
|
|
|
26
26
|
const handleUpdateQuery = useCallback(
|
|
27
|
-
(
|
|
27
|
+
(newQuery: QueryAST.Query) => {
|
|
28
28
|
invariant(schema);
|
|
29
29
|
invariant(Type.isMutable(schema));
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
schema.updateTypename(typename);
|
|
31
|
+
view.query.ast = newQuery;
|
|
32
|
+
schema.updateTypename(getTypenameFromQuery(newQuery));
|
|
34
33
|
},
|
|
35
34
|
[view, schema],
|
|
36
35
|
);
|
package/src/components/index.ts
CHANGED
|
@@ -10,7 +10,6 @@ export * from './CollectionSection';
|
|
|
10
10
|
export * from './JoinDialog';
|
|
11
11
|
export * from './MembersContainer';
|
|
12
12
|
export * from './MenuFooter';
|
|
13
|
-
export * from './ObjectSettings';
|
|
14
13
|
export * from './PersistenceStatus';
|
|
15
14
|
export * from './PopoverRenameObject';
|
|
16
15
|
export * from './PopoverRenameSpace';
|
|
@@ -23,4 +22,5 @@ export * from './ViewEditor';
|
|
|
23
22
|
|
|
24
23
|
export const CollectionMain = lazy(() => import('./CollectionMain'));
|
|
25
24
|
export const ObjectDetailsPanel = lazy(() => import('./ObjectDetailsPanel'));
|
|
25
|
+
export const ObjectSettingsContainer = lazy(() => import('./ObjectSettings'));
|
|
26
26
|
export const RecordMain = lazy(() => import('./RecordMain'));
|
package/src/events.ts
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
import { Events, defineEvent } from '@dxos/app-framework';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { meta } from './meta';
|
|
8
8
|
|
|
9
9
|
export namespace SpaceEvents {
|
|
10
|
-
export const StateReady = Events.createStateEvent(`${
|
|
11
|
-
export const SetupSettingsPanel = defineEvent(`${
|
|
12
|
-
export const DefaultSpaceReady = defineEvent(`${
|
|
13
|
-
export const SpaceCreated = defineEvent(`${
|
|
14
|
-
export const SchemaAdded = defineEvent(`${
|
|
10
|
+
export const StateReady = Events.createStateEvent(`${meta.id}/event/state-ready`);
|
|
11
|
+
export const SetupSettingsPanel = defineEvent(`${meta.id}/event/setup-settings-panel`);
|
|
12
|
+
export const DefaultSpaceReady = defineEvent(`${meta.id}/event/default-space-ready`);
|
|
13
|
+
export const SpaceCreated = defineEvent(`${meta.id}/event/space-created`);
|
|
14
|
+
export const SchemaAdded = defineEvent(`${meta.id}/event/schema-added`);
|
|
15
15
|
}
|
package/src/hooks/index.ts
CHANGED
package/src/hooks/usePath.ts
CHANGED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { useMemo } from 'react';
|
|
6
|
+
|
|
7
|
+
import { useCapabilities } from '@dxos/app-framework';
|
|
8
|
+
import { Type } from '@dxos/echo';
|
|
9
|
+
import { ClientCapabilities } from '@dxos/plugin-client';
|
|
10
|
+
import { useClient } from '@dxos/react-client';
|
|
11
|
+
import { type Space } from '@dxos/react-client/echo';
|
|
12
|
+
import { useTranslation } from '@dxos/react-ui';
|
|
13
|
+
import { DataType, type TypenameAnnotation, getTypenames } from '@dxos/schema';
|
|
14
|
+
|
|
15
|
+
import { SpaceCapabilities } from '../capabilities';
|
|
16
|
+
|
|
17
|
+
const OMIT = [DataType.Collection.typename, Type.getTypename(DataType.QueryCollection)];
|
|
18
|
+
|
|
19
|
+
export const useTypeOptions = ({ space, annotation }: { space?: Space; annotation: TypenameAnnotation[] }) => {
|
|
20
|
+
const { t } = useTranslation();
|
|
21
|
+
const client = useClient();
|
|
22
|
+
|
|
23
|
+
const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
|
|
24
|
+
const whitelistedTypenames = useMemo(
|
|
25
|
+
() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => Type.getTypename(type)))),
|
|
26
|
+
[schemaWhitelists],
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
|
|
30
|
+
const objectFormTypenames = useMemo(
|
|
31
|
+
() =>
|
|
32
|
+
new Set(
|
|
33
|
+
objectForms
|
|
34
|
+
.map((form) => Type.getTypename(form.objectSchema))
|
|
35
|
+
// TODO(wittjosiah): Remove.
|
|
36
|
+
.filter((typename) => !OMIT.includes(typename) && !typename.endsWith('View')),
|
|
37
|
+
),
|
|
38
|
+
[objectForms],
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const typenames = getTypenames({
|
|
42
|
+
annotation,
|
|
43
|
+
whitelistedTypenames,
|
|
44
|
+
objectFormTypenames,
|
|
45
|
+
space,
|
|
46
|
+
client,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
return useMemo(
|
|
50
|
+
() =>
|
|
51
|
+
typenames
|
|
52
|
+
.map((typename) => ({
|
|
53
|
+
value: typename,
|
|
54
|
+
label: t('typename label', { ns: typename, defaultValue: typename }),
|
|
55
|
+
}))
|
|
56
|
+
.toSorted((a, b) => a.label.localeCompare(b.label)),
|
|
57
|
+
[t, typenames],
|
|
58
|
+
);
|
|
59
|
+
};
|
package/src/meta.ts
CHANGED
|
@@ -4,10 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import { type PluginMeta } from '@dxos/app-framework';
|
|
6
6
|
|
|
7
|
-
export const SPACE_PLUGIN = 'dxos.org/plugin/space';
|
|
8
|
-
|
|
9
7
|
export const meta: PluginMeta = {
|
|
10
|
-
id:
|
|
8
|
+
id: 'dxos.org/plugin/space',
|
|
11
9
|
name: 'Spaces',
|
|
12
10
|
icon: 'ph--planet--regular',
|
|
13
11
|
};
|
package/src/translations.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { Type } from '@dxos/echo';
|
|
6
|
-
import { StoredSchema } from '@dxos/echo
|
|
6
|
+
import { StoredSchema } from '@dxos/echo/internal';
|
|
7
7
|
import { type Resource } from '@dxos/react-ui';
|
|
8
8
|
import { DataType } from '@dxos/schema';
|
|
9
9
|
|
|
@@ -190,10 +190,12 @@ export const translations = [
|
|
|
190
190
|
'creating in collection label': 'In Collection',
|
|
191
191
|
'clear input label': 'Clear',
|
|
192
192
|
'expose object label': 'Expose in navtree',
|
|
193
|
+
'add tag label': 'Add tag',
|
|
193
194
|
'advanced settings label': 'Advanced',
|
|
194
195
|
'foreign keys': 'Foreign Keys',
|
|
195
196
|
'add key': 'Add Key',
|
|
196
197
|
'open space settings label': 'Open settings',
|
|
198
|
+
'related objects label': 'Related',
|
|
197
199
|
|
|
198
200
|
'row details no selection label': 'No objects selected',
|
|
199
201
|
'companion selected objects label': 'Selected',
|
|
@@ -229,6 +231,13 @@ export const translations = [
|
|
|
229
231
|
'Archiving a space will remove it from the sidebar and stop replicating updates, but will not delete the data. You can unarchive it by enabling archived spaces in the app settings.',
|
|
230
232
|
'archive space label': 'Archive',
|
|
231
233
|
'unarchive space label': 'Unarchive',
|
|
234
|
+
|
|
235
|
+
'sync edge connected label': 'Edge connected',
|
|
236
|
+
'sync edge disconnected label': 'Edge disconnected',
|
|
237
|
+
'sync no connection label': 'No connection to edge service',
|
|
238
|
+
'sync latency label': 'Latency',
|
|
239
|
+
'sync upload label': 'Upload',
|
|
240
|
+
'sync download label': 'Download',
|
|
232
241
|
},
|
|
233
242
|
},
|
|
234
243
|
},
|