@dxos/plugin-space 0.8.4-main.72ec0f3 → 0.8.4-main.7ace549
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/{ObjectDetailsPanel-2BRUBHP6.mjs → ObjectDetailsPanel-ACGHWPDX.mjs} +2 -2
- package/dist/lib/browser/{ObjectDetailsPanel-2BRUBHP6.mjs.map → ObjectDetailsPanel-ACGHWPDX.mjs.map} +3 -3
- package/dist/lib/browser/{ObjectSettings-5LLWCVEK.mjs → ObjectSettings-U3IH7BMV.mjs} +2 -2
- package/dist/lib/browser/{ObjectSettings-5LLWCVEK.mjs.map → ObjectSettings-U3IH7BMV.mjs.map} +3 -3
- package/dist/lib/browser/{RecordArticle-SXDRWTTU.mjs → RecordArticle-2PFEBPXY.mjs} +1 -1
- package/dist/lib/browser/RecordArticle-2PFEBPXY.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-VQAB3GCQ.mjs → app-graph-builder-HABMCWAI.mjs} +140 -151
- package/dist/lib/browser/app-graph-builder-HABMCWAI.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-serializer-KSLKMEPP.mjs → app-graph-serializer-G3VFEGTN.mjs} +4 -4
- package/dist/lib/browser/chunk-6A3NWBB6.mjs +392 -0
- package/dist/lib/browser/chunk-6A3NWBB6.mjs.map +7 -0
- package/dist/lib/browser/{chunk-K5J7ZB5P.mjs → chunk-C6DAPIFF.mjs} +3 -3
- package/dist/lib/browser/chunk-C6DAPIFF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ERQMHU7L.mjs → chunk-GJOZILGC.mjs} +163 -105
- package/dist/lib/browser/chunk-GJOZILGC.mjs.map +7 -0
- package/dist/lib/browser/{chunk-J2BUK5E6.mjs → chunk-KCZ527AM.mjs} +169 -101
- package/dist/lib/browser/chunk-KCZ527AM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PU5IOFMG.mjs → chunk-P25R3AOK.mjs} +4 -47
- package/dist/lib/browser/{chunk-PU5IOFMG.mjs.map → chunk-P25R3AOK.mjs.map} +4 -4
- package/dist/lib/browser/{chunk-OLBBSOVI.mjs → chunk-POFUXISV.mjs} +53 -59
- package/dist/lib/browser/chunk-POFUXISV.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +47 -94
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-Q2XWHAVA.mjs → intent-resolver-RZEWNJ2K.mjs} +51 -40
- package/dist/lib/browser/intent-resolver-RZEWNJ2K.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-root-MM4HADPE.mjs → react-root-JCRD74GI.mjs} +6 -6
- package/dist/lib/browser/{react-surface-SGZC3Y4U.mjs → react-surface-VOETEAG3.mjs} +28 -14
- package/dist/lib/browser/react-surface-VOETEAG3.mjs.map +7 -0
- package/dist/lib/browser/repair-CNLE35NF.mjs +44 -0
- package/dist/lib/browser/repair-CNLE35NF.mjs.map +7 -0
- package/dist/lib/browser/{settings-WKLGKUHQ.mjs → settings-TRLI52I5.mjs} +2 -2
- package/dist/lib/browser/{spaces-ready-C5QC2UFL.mjs → spaces-ready-OHGCWZHQ.mjs} +13 -7
- package/dist/lib/browser/{spaces-ready-C5QC2UFL.mjs.map → spaces-ready-OHGCWZHQ.mjs.map} +2 -2
- package/dist/lib/browser/{state-Q7YRE5KG.mjs → state-C7N6EDDZ.mjs} +2 -2
- package/dist/lib/browser/types/index.mjs +9 -3
- package/dist/lib/node-esm/{ObjectDetailsPanel-6PZQIQG3.mjs → ObjectDetailsPanel-6OFTT3GG.mjs} +2 -2
- package/dist/lib/node-esm/{ObjectDetailsPanel-6PZQIQG3.mjs.map → ObjectDetailsPanel-6OFTT3GG.mjs.map} +3 -3
- package/dist/lib/node-esm/{ObjectSettings-OQSBOH7K.mjs → ObjectSettings-YXPJQMJ5.mjs} +2 -2
- package/dist/lib/node-esm/{ObjectSettings-OQSBOH7K.mjs.map → ObjectSettings-YXPJQMJ5.mjs.map} +3 -3
- package/dist/lib/node-esm/{RecordArticle-NACBH42P.mjs → RecordArticle-SSJ7PULS.mjs} +1 -1
- package/dist/lib/node-esm/RecordArticle-SSJ7PULS.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-24JCLJPX.mjs → app-graph-builder-T6VJKIOA.mjs} +140 -151
- package/dist/lib/node-esm/app-graph-builder-T6VJKIOA.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-serializer-R723K764.mjs → app-graph-serializer-2NLWWFUB.mjs} +4 -4
- package/dist/lib/node-esm/{chunk-TJPQDQNI.mjs → chunk-7EV4SN47.mjs} +4 -47
- package/dist/lib/node-esm/{chunk-TJPQDQNI.mjs.map → chunk-7EV4SN47.mjs.map} +4 -4
- package/dist/lib/node-esm/{chunk-WC4VBFMA.mjs → chunk-AX3UGL5D.mjs} +53 -59
- package/dist/lib/node-esm/chunk-AX3UGL5D.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-VH2EBZEV.mjs → chunk-I6FZP42D.mjs} +163 -105
- package/dist/lib/node-esm/chunk-I6FZP42D.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ITQFSFQ3.mjs → chunk-JAMGJUFU.mjs} +169 -101
- package/dist/lib/node-esm/chunk-JAMGJUFU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-Z7BB6HC2.mjs → chunk-WWGV5FJM.mjs} +3 -3
- package/dist/lib/node-esm/chunk-WWGV5FJM.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-X34VDVMY.mjs +393 -0
- package/dist/lib/node-esm/chunk-X34VDVMY.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +47 -94
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-YK4ESSET.mjs → intent-resolver-4PHJWDXW.mjs} +51 -40
- package/dist/lib/node-esm/intent-resolver-4PHJWDXW.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-root-5ANDLQMX.mjs → react-root-O5I5CDJ7.mjs} +6 -6
- package/dist/lib/node-esm/{react-surface-V7J2QB44.mjs → react-surface-J3XDMU2D.mjs} +28 -14
- package/dist/lib/node-esm/react-surface-J3XDMU2D.mjs.map +7 -0
- package/dist/lib/node-esm/repair-EHZS6MFY.mjs +45 -0
- package/dist/lib/node-esm/repair-EHZS6MFY.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-RBB5633M.mjs → settings-MNQTKHL7.mjs} +2 -2
- package/dist/lib/node-esm/{spaces-ready-SJCXV6YH.mjs → spaces-ready-ZPU24DA2.mjs} +13 -7
- package/dist/lib/node-esm/{spaces-ready-SJCXV6YH.mjs.map → spaces-ready-ZPU24DA2.mjs.map} +2 -2
- package/dist/lib/node-esm/{state-362I5BMK.mjs → state-45TXZQJ6.mjs} +2 -2
- package/dist/lib/node-esm/types/index.mjs +9 -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/capabilities.d.ts +9 -4
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +1 -1
- package/dist/types/src/capabilities/index.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/repair.d.ts +4 -0
- package/dist/types/src/capabilities/repair.d.ts.map +1 -0
- package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +147 -253
- package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +14 -7
- package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
- package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +147 -253
- package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts +147 -253
- package/dist/types/src/components/ObjectSettings/BaseObjectSettings.stories.d.ts.map +1 -1
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts +3 -3
- package/dist/types/src/components/ObjectSettings/ForeignKeys.d.ts.map +1 -1
- package/dist/types/src/components/RecordArticle.stories.d.ts +147 -253
- package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -1
- package/dist/types/src/components/SchemaContainer.d.ts +1 -1
- package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence/SpacePresence.d.ts +2 -2
- package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -1
- package/dist/types/src/components/SpacePresence/SpacePresence.stories.d.ts +147 -253
- package/dist/types/src/components/SpacePresence/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 +147 -253
- package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +147 -253
- 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 +2 -2
- package/dist/types/src/helpers/query.d.ts +1 -1
- package/dist/types/src/helpers/query.d.ts.map +1 -1
- package/dist/types/src/hooks/useTypeOptions.d.ts +2 -2
- package/dist/types/src/hooks/useTypeOptions.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +147 -253
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/form.d.ts +24 -0
- package/dist/types/src/types/form.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +29 -72
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +16 -32
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +54 -50
- package/src/SpacePlugin.ts +34 -84
- package/src/capabilities/app-graph-builder.ts +130 -227
- package/src/capabilities/capabilities.ts +10 -5
- package/src/capabilities/index.ts +1 -1
- package/src/capabilities/intent-resolver.ts +31 -35
- package/src/capabilities/react-surface.tsx +34 -8
- package/src/capabilities/repair.ts +57 -0
- package/src/capabilities/spaces-ready.ts +7 -1
- package/src/components/CreateDialog/CreateObjectDialog.tsx +33 -23
- package/src/components/CreateDialog/CreateObjectPanel.tsx +32 -25
- package/src/components/ObjectDetailsPanel/ObjectForm.tsx +1 -1
- package/src/components/ObjectSettings/AdvancedObjectSettings.tsx +4 -5
- package/src/components/ObjectSettings/BaseObjectSettings.tsx +1 -1
- package/src/components/ObjectSettings/ForeignKeys.tsx +5 -5
- package/src/components/RecordArticle.tsx +6 -6
- package/src/components/SchemaContainer.tsx +2 -2
- package/src/components/SpacePresence/SpacePresence.tsx +2 -2
- package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +25 -6
- package/src/components/ViewEditor.tsx +9 -3
- package/src/helpers/query.ts +1 -1
- package/src/hooks/useTypeOptions.ts +3 -35
- package/src/translations.ts +52 -57
- package/src/types/form.ts +75 -0
- package/src/types/index.ts +1 -0
- package/src/types/types.ts +26 -36
- package/src/util.tsx +165 -107
- package/dist/lib/browser/RecordArticle-SXDRWTTU.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-VQAB3GCQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-ERQMHU7L.mjs.map +0 -7
- package/dist/lib/browser/chunk-J2BUK5E6.mjs.map +0 -7
- package/dist/lib/browser/chunk-K5J7ZB5P.mjs.map +0 -7
- package/dist/lib/browser/chunk-M2Z6D4ZI.mjs +0 -349
- package/dist/lib/browser/chunk-M2Z6D4ZI.mjs.map +0 -7
- package/dist/lib/browser/chunk-OLBBSOVI.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-Q2XWHAVA.mjs.map +0 -7
- package/dist/lib/browser/react-surface-SGZC3Y4U.mjs.map +0 -7
- package/dist/lib/browser/schema-defs-QPI2JU3X.mjs +0 -26
- package/dist/lib/browser/schema-defs-QPI2JU3X.mjs.map +0 -7
- package/dist/lib/node-esm/RecordArticle-NACBH42P.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-24JCLJPX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2PN7QNGV.mjs +0 -350
- package/dist/lib/node-esm/chunk-2PN7QNGV.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ITQFSFQ3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-VH2EBZEV.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-WC4VBFMA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-Z7BB6HC2.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-YK4ESSET.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-V7J2QB44.mjs.map +0 -7
- package/dist/lib/node-esm/schema-defs-ZS2D47XW.mjs +0 -27
- package/dist/lib/node-esm/schema-defs-ZS2D47XW.mjs.map +0 -7
- package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
- package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
- package/src/capabilities/schema-defs.ts +0 -31
- /package/dist/lib/browser/{app-graph-serializer-KSLKMEPP.mjs.map → app-graph-serializer-G3VFEGTN.mjs.map} +0 -0
- /package/dist/lib/browser/{react-root-MM4HADPE.mjs.map → react-root-JCRD74GI.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-WKLGKUHQ.mjs.map → settings-TRLI52I5.mjs.map} +0 -0
- /package/dist/lib/browser/{state-Q7YRE5KG.mjs.map → state-C7N6EDDZ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{app-graph-serializer-R723K764.mjs.map → app-graph-serializer-2NLWWFUB.mjs.map} +0 -0
- /package/dist/lib/node-esm/{react-root-5ANDLQMX.mjs.map → react-root-O5I5CDJ7.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-RBB5633M.mjs.map → settings-MNQTKHL7.mjs.map} +0 -0
- /package/dist/lib/node-esm/{state-362I5BMK.mjs.map → state-45TXZQJ6.mjs.map} +0 -0
package/dist/lib/browser/{ObjectDetailsPanel-2BRUBHP6.mjs → ObjectDetailsPanel-ACGHWPDX.mjs}
RENAMED
|
@@ -37,7 +37,7 @@ var ObjectForm = ({ object, schema }) => {
|
|
|
37
37
|
schema
|
|
38
38
|
]);
|
|
39
39
|
const meta2 = Obj.getMeta(object);
|
|
40
|
-
const tags = (meta2.tags ?? []).map((tag) => space?.db.
|
|
40
|
+
const tags = (meta2.tags ?? []).map((tag) => space?.db.makeRef(DXN.parse(tag))).filter(isNonNullable);
|
|
41
41
|
const values = useMemo(() => ({
|
|
42
42
|
tags,
|
|
43
43
|
...object
|
|
@@ -138,4 +138,4 @@ var ObjectDetailsPanel_default = ObjectDetailsPanel;
|
|
|
138
138
|
export {
|
|
139
139
|
ObjectDetailsPanel_default as default
|
|
140
140
|
};
|
|
141
|
-
//# sourceMappingURL=ObjectDetailsPanel-
|
|
141
|
+
//# sourceMappingURL=ObjectDetailsPanel-ACGHWPDX.mjs.map
|
package/dist/lib/browser/{ObjectDetailsPanel-2BRUBHP6.mjs.map → ObjectDetailsPanel-ACGHWPDX.mjs.map}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/ObjectDetailsPanel/ObjectDetailsPanel.tsx", "../../../src/components/ObjectDetailsPanel/ObjectForm.tsx", "../../../src/components/ObjectDetailsPanel/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useClient } from '@dxos/react-client';\nimport { Filter, getSpace, useQuery, useSchema } from '@dxos/react-client/echo';\nimport { Callout, useTranslation } from '@dxos/react-ui';\nimport { useSelected } from '@dxos/react-ui-attention';\nimport { type View, getTypenameFromQuery } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '../../meta';\n\nimport { ObjectForm } from './ObjectForm';\n\ntype RowDetailsPanelProps = { objectId: string; view: View.View };\n\nexport const ObjectDetailsPanel = ({ objectId, view }: RowDetailsPanelProps) => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const space = getSpace(view);\n const typename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;\n const schema = useSchema(client, space, typename);\n\n const queriedObjects = useQuery(space, schema ? Filter.type(schema) : Filter.nothing());\n const selectedRows = useSelected(objectId, 'multi');\n const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);\n\n if (selectedObjects.length === 0) {\n return (\n <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>\n <Callout.Root classNames='is-full'>\n <Callout.Title>{t('row details no selection label')}</Callout.Title>\n </Callout.Root>\n </div>\n );\n }\n\n return (\n <div role='none' className='bs-full is-full flex flex-col p-2 gap-1 overflow-y-auto'>\n {schema &&\n selectedObjects.map((object) => (\n <div key={object.id} className='border border-separator rounded'>\n <ObjectForm object={object} schema={schema} />\n </div>\n ))}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { DXN, Obj, type Ref, Tag, Type } from '@dxos/echo';\nimport { type JsonPath, setValue } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Form, useRefQueryLookupHandler } from '@dxos/react-ui-form';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta as pluginMeta } from '../../meta';\n\nconst TagSchema = Tag.Tag.pipe(Schema.omit('id'));\n\ntype ObjectFormProps = { object: Obj.Any; schema: Schema.Schema.AnyNoContext };\n\nexport const ObjectForm = ({ object, schema }: ObjectFormProps) => {\n const space = getSpace(object);\n const handleRefQueryLookup = useRefQueryLookupHandler({ space });\n\n const formSchema = useMemo(\n () => Schema.Struct({ tags: Schema.Array(Type.Ref(Tag.Tag)).pipe(Schema.optional) }).pipe(Schema.extend(schema)),\n [schema],\n );\n\n const meta = Obj.getMeta(object);\n const tags = (meta.tags ?? []).map((tag) => space?.db.
|
|
5
|
-
"mappings": ";;;;;;AAIA,OAAOA,YAAW;AAElB,SAASC,iBAAiB;AAC1B,SAASC,QAAQC,YAAAA,WAAUC,UAAUC,iBAAiB;AACtD,SAASC,SAASC,sBAAsB;AACxC,SAASC,mBAAmB;AAC5B,SAAoBC,4BAA4B;AAChD,SAASC,iBAAAA,sBAAqB;;;;ACP9B,YAAYC,YAAY;AACxB,OAAOC,SAASC,aAAaC,eAAe;AAE5C,SAASC,KAAKC,KAAeC,KAAKC,YAAY;AAC9C,SAAwBC,gBAAgB;AACxC,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,MAAMC,gCAAgC;AAC/C,SAASC,qBAAqB;;AAI9B,IAAMC,YAAYC,IAAIA,IAAIC,KAAYC,YAAK,IAAA,CAAA;AAIpC,IAAMC,aAAa,CAAC,EAAEC,QAAQC,OAAM,MAAmB;;;AAC5D,UAAMC,QAAQC,SAASH,MAAAA;AACvB,UAAMI,uBAAuBC,yBAAyB;MAAEH;IAAM,CAAA;AAE9D,UAAMI,aAAaC,QACjB,MAAaC,cAAO;MAAEC,MAAaC,aAAMC,KAAKC,IAAIhB,IAAIA,GAAG,CAAA,EAAGC,KAAYgB,eAAQ;IAAE,CAAA,EAAGhB,KAAYiB,cAAOb,MAAAA,CAAAA,GACxG;MAACA;KAAO;AAGV,UAAMc,QAAOC,IAAIC,QAAQjB,MAAAA;AACzB,UAAMS,QAAQM,MAAKN,QAAQ,CAAA,GAAIS,IAAI,CAACC,QAAQjB,OAAOkB,GAAGC,
|
|
6
|
-
"names": ["React", "useClient", "Filter", "getSpace", "useQuery", "useSchema", "Callout", "useTranslation", "useSelected", "getTypenameFromQuery", "isNonNullable", "Schema", "React", "useCallback", "useMemo", "DXN", "Obj", "Tag", "Type", "setValue", "invariant", "getSpace", "Form", "useRefQueryLookupHandler", "isNonNullable", "TagSchema", "Tag", "pipe", "omit", "ObjectForm", "object", "schema", "space", "getSpace", "handleRefQueryLookup", "useRefQueryLookupHandler", "formSchema", "useMemo", "Struct", "tags", "Array", "Type", "Ref", "optional", "extend", "meta", "Obj", "getMeta", "map", "tag", "db", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useClient } from '@dxos/react-client';\nimport { Filter, getSpace, useQuery, useSchema } from '@dxos/react-client/echo';\nimport { Callout, useTranslation } from '@dxos/react-ui';\nimport { useSelected } from '@dxos/react-ui-attention';\nimport { type View, getTypenameFromQuery } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '../../meta';\n\nimport { ObjectForm } from './ObjectForm';\n\ntype RowDetailsPanelProps = { objectId: string; view: View.View };\n\nexport const ObjectDetailsPanel = ({ objectId, view }: RowDetailsPanelProps) => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const space = getSpace(view);\n const typename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;\n const schema = useSchema(client, space, typename);\n\n const queriedObjects = useQuery(space, schema ? Filter.type(schema) : Filter.nothing());\n const selectedRows = useSelected(objectId, 'multi');\n const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);\n\n if (selectedObjects.length === 0) {\n return (\n <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>\n <Callout.Root classNames='is-full'>\n <Callout.Title>{t('row details no selection label')}</Callout.Title>\n </Callout.Root>\n </div>\n );\n }\n\n return (\n <div role='none' className='bs-full is-full flex flex-col p-2 gap-1 overflow-y-auto'>\n {schema &&\n selectedObjects.map((object) => (\n <div key={object.id} className='border border-separator rounded'>\n <ObjectForm object={object} schema={schema} />\n </div>\n ))}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { DXN, Obj, type Ref, Tag, Type } from '@dxos/echo';\nimport { type JsonPath, setValue } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Form, useRefQueryLookupHandler } from '@dxos/react-ui-form';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta as pluginMeta } from '../../meta';\n\nconst TagSchema = Tag.Tag.pipe(Schema.omit('id'));\n\ntype ObjectFormProps = { object: Obj.Any; schema: Schema.Schema.AnyNoContext };\n\nexport const ObjectForm = ({ object, schema }: ObjectFormProps) => {\n const space = getSpace(object);\n const handleRefQueryLookup = useRefQueryLookupHandler({ space });\n\n const formSchema = useMemo(\n () => Schema.Struct({ tags: Schema.Array(Type.Ref(Tag.Tag)).pipe(Schema.optional) }).pipe(Schema.extend(schema)),\n [schema],\n );\n\n const meta = Obj.getMeta(object);\n const tags = (meta.tags ?? []).map((tag) => space?.db.makeRef(DXN.parse(tag))).filter(isNonNullable);\n const values = useMemo(() => ({ tags, ...object }), [object, tags]);\n\n const handleCreateTag = useCallback((values: Schema.Schema.Type<typeof TagSchema>) => {\n invariant(space);\n const tag = space.db.add(Tag.make(values));\n const meta = Obj.getMeta(object);\n meta.tags = [...(meta.tags ?? []), Obj.getDXN(tag).toString()];\n }, []);\n\n const handleSave = useCallback(\n ({ tags, ...values }: any, { changed }: { changed: Record<JsonPath, boolean> }) => {\n const changedPaths = Object.keys(changed).filter((path) => changed[path as JsonPath]) as JsonPath[];\n for (const path of changedPaths) {\n if (path === 'tags') {\n const meta = Obj.getMeta(object);\n meta.tags = tags?.map((tag: Ref.Ref<Tag.Tag>) => tag.dxn.toString()) ?? [];\n continue;\n }\n\n const value = values[path];\n setValue(object, path, value);\n }\n },\n [object],\n );\n\n return (\n <Form\n autoSave\n schema={formSchema}\n values={values}\n createSchema={TagSchema}\n createOptionIcon='ph--plus--regular'\n createOptionLabel={['add tag label', { ns: pluginMeta.id }]}\n createInitialValuePath='label'\n onCreate={handleCreateTag}\n onSave={handleSave}\n onQueryRefOptions={handleRefQueryLookup}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ObjectDetailsPanel } from './ObjectDetailsPanel';\n\nexport default ObjectDetailsPanel;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useClient", "Filter", "getSpace", "useQuery", "useSchema", "Callout", "useTranslation", "useSelected", "getTypenameFromQuery", "isNonNullable", "Schema", "React", "useCallback", "useMemo", "DXN", "Obj", "Tag", "Type", "setValue", "invariant", "getSpace", "Form", "useRefQueryLookupHandler", "isNonNullable", "TagSchema", "Tag", "pipe", "omit", "ObjectForm", "object", "schema", "space", "getSpace", "handleRefQueryLookup", "useRefQueryLookupHandler", "formSchema", "useMemo", "Struct", "tags", "Array", "Type", "Ref", "optional", "extend", "meta", "Obj", "getMeta", "map", "tag", "db", "makeRef", "DXN", "parse", "filter", "isNonNullable", "values", "handleCreateTag", "useCallback", "invariant", "add", "make", "getDXN", "toString", "handleSave", "changed", "changedPaths", "Object", "keys", "path", "dxn", "value", "setValue", "Form", "autoSave", "createSchema", "createOptionIcon", "createOptionLabel", "ns", "pluginMeta", "id", "createInitialValuePath", "onCreate", "onSave", "onQueryRefOptions", "ObjectDetailsPanel", "objectId", "view", "t", "useTranslation", "meta", "id", "client", "useClient", "space", "getSpace", "typename", "query", "getTypenameFromQuery", "ast", "undefined", "schema", "useSchema", "queriedObjects", "useQuery", "Filter", "type", "nothing", "selectedRows", "useSelected", "selectedObjects", "map", "find", "obj", "filter", "isNonNullable", "length", "React", "div", "role", "className", "Callout", "Root", "classNames", "Title", "object", "key", "ObjectForm", "ObjectDetailsPanel"]
|
|
7
7
|
}
|
|
@@ -40,7 +40,7 @@ var BaseObjectSettings = ({ classNames, children, object }) => {
|
|
|
40
40
|
object
|
|
41
41
|
]);
|
|
42
42
|
const meta2 = Obj.getMeta(object);
|
|
43
|
-
const tags = (meta2.tags ?? []).map((tag) => space?.db.
|
|
43
|
+
const tags = (meta2.tags ?? []).map((tag) => space?.db.makeRef(DXN.parse(tag))).filter(isNonNullable);
|
|
44
44
|
const values = useMemo(() => ({
|
|
45
45
|
tags,
|
|
46
46
|
...object
|
|
@@ -141,4 +141,4 @@ var ObjectSettings_default = ObjectSettingsContainer;
|
|
|
141
141
|
export {
|
|
142
142
|
ObjectSettings_default as default
|
|
143
143
|
};
|
|
144
|
-
//# sourceMappingURL=ObjectSettings-
|
|
144
|
+
//# sourceMappingURL=ObjectSettings-U3IH7BMV.mjs.map
|
package/dist/lib/browser/{ObjectSettings-5LLWCVEK.mjs.map → ObjectSettings-U3IH7BMV.mjs.map}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/ObjectSettings/ObjectSettingsContainer.tsx", "../../../src/components/ObjectSettings/BaseObjectSettings.tsx", "../../../src/components/ObjectSettings/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { type Obj } from '@dxos/echo';\nimport { Clipboard, Toolbar } from '@dxos/react-ui';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { BaseObjectSettings } from './BaseObjectSettings';\n\nexport type ObjectSettingsContainerProps = {\n object: Obj.Any;\n role: string;\n};\n\nexport const ObjectSettingsContainer = ({ object, role }: ObjectSettingsContainerProps) => {\n const data = useMemo(() => ({ subject: object }), [object]);\n\n return (\n <Clipboard.Provider>\n <StackItem.Content toolbar>\n <Toolbar.Root></Toolbar.Root>\n <div role='none' className='overflow-y-auto pli-cardSpacingInline plb-cardSpacingBlock'>\n <BaseObjectSettings object={object}>\n <Surface role='base-object-settings' data={data} />\n </BaseObjectSettings>\n <Surface role='object-settings' data={data} />\n {/* TODO(wittjosiah): Remove? */}\n {/* <AdvancedObjectSettings object={object} /> */}\n </div>\n </StackItem.Content>\n </Clipboard.Provider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { batch } from '@preact/signals-core';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport React, { type PropsWithChildren, useCallback, useMemo } from 'react';\n\nimport { DXN, Obj, type Ref, Tag, Type } from '@dxos/echo';\nimport { type JsonPath, setValue } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { Form, useRefQueryLookupHandler } from '@dxos/react-ui-form';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta as pluginMeta } from '../../meta';\n\n// TODO(wittjosiah): Would be nice to control order when extending so this isn't always first/last.\nconst BaseSchema = Schema.Struct({\n tags: Schema.Array(Type.Ref(Tag.Tag)).pipe(Schema.optional),\n});\n\n// TODO(wittjosiah): Better way to support validation of object schemas?\nconst TagSchema = Tag.Tag.pipe(Schema.omit('id'));\n\nexport type BaseObjectSettingsProps = ThemedClassName<\n PropsWithChildren<{\n object: Obj.Any;\n }>\n>;\n\n// TODO(wittjosiah): Reconcile w/ ObjectDetailsPanel.\nexport const BaseObjectSettings = ({ classNames, children, object }: BaseObjectSettingsProps) => {\n const space = getSpace(object);\n const handleRefQueryLookup = useRefQueryLookupHandler({ space });\n\n const formSchema = useMemo(() => {\n return Function.pipe(\n Obj.getSchema(object),\n Option.fromNullable,\n Option.map((schema) => BaseSchema.pipe(Schema.extend(schema))),\n Option.getOrUndefined,\n );\n }, [object]);\n\n const meta = Obj.getMeta(object);\n const tags = (meta.tags ?? []).map((tag) => space?.db.
|
|
5
|
-
"mappings": ";;;;;;AAIA,OAAOA,UAASC,WAAAA,gBAAe;AAE/B,SAASC,eAAe;AAExB,SAASC,WAAWC,eAAe;AACnC,SAASC,iBAAiB;;;;ACL1B,SAASC,aAAa;AACtB,YAAYC,cAAc;AAC1B,YAAYC,YAAY;AACxB,YAAYC,YAAY;AACxB,OAAOC,SAAiCC,aAAaC,eAAe;AAEpE,SAASC,KAAKC,KAAeC,KAAKC,YAAY;AAC9C,SAAwBC,gBAAgB;AACxC,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AAEzB,SAASC,MAAMC,gCAAgC;AAC/C,SAASC,qBAAqB;;AAK9B,IAAMC,aAAoBC,cAAO;EAC/BC,MAAaC,aAAMC,KAAKC,IAAIC,IAAIA,GAAG,CAAA,EAAGC,KAAYC,eAAQ;AAC5D,CAAA;AAGA,IAAMC,YAAYH,IAAIA,IAAIC,KAAYG,YAAK,IAAA,CAAA;AASpC,IAAMC,qBAAqB,CAAC,EAAEC,YAAYC,UAAUC,OAAM,MAA2B;;;AAC1F,UAAMC,QAAQC,SAASF,MAAAA;AACvB,UAAMG,uBAAuBC,yBAAyB;MAAEH;IAAM,CAAA;AAE9D,UAAMI,aAAaC,QAAQ,MAAA;AACzB,aAAgBb,cACdc,IAAIC,UAAUR,MAAAA,GACPS,qBACAC,WAAI,CAACC,WAAWzB,WAAWO,KAAYmB,cAAOD,MAAAA,CAAAA,CAAAA,GAC9CE,qBAAc;IAEzB,GAAG;MAACb;KAAO;AAEX,UAAMc,QAAOP,IAAIQ,QAAQf,MAAAA;AACzB,UAAMZ,QAAQ0B,MAAK1B,QAAQ,CAAA,GAAIsB,IAAI,CAACM,QAAQf,OAAOgB,GAAGC,
|
|
6
|
-
"names": ["React", "useMemo", "Surface", "Clipboard", "Toolbar", "StackItem", "batch", "Function", "Option", "Schema", "React", "useCallback", "useMemo", "DXN", "Obj", "Tag", "Type", "setValue", "invariant", "getSpace", "Form", "useRefQueryLookupHandler", "isNonNullable", "BaseSchema", "Struct", "tags", "Array", "Type", "Ref", "Tag", "pipe", "optional", "TagSchema", "omit", "BaseObjectSettings", "classNames", "children", "object", "space", "getSpace", "handleRefQueryLookup", "useRefQueryLookupHandler", "formSchema", "useMemo", "Obj", "getSchema", "fromNullable", "map", "schema", "extend", "getOrUndefined", "meta", "getMeta", "tag", "db", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { type Obj } from '@dxos/echo';\nimport { Clipboard, Toolbar } from '@dxos/react-ui';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { BaseObjectSettings } from './BaseObjectSettings';\n\nexport type ObjectSettingsContainerProps = {\n object: Obj.Any;\n role: string;\n};\n\nexport const ObjectSettingsContainer = ({ object, role }: ObjectSettingsContainerProps) => {\n const data = useMemo(() => ({ subject: object }), [object]);\n\n return (\n <Clipboard.Provider>\n <StackItem.Content toolbar>\n <Toolbar.Root></Toolbar.Root>\n <div role='none' className='overflow-y-auto pli-cardSpacingInline plb-cardSpacingBlock'>\n <BaseObjectSettings object={object}>\n <Surface role='base-object-settings' data={data} />\n </BaseObjectSettings>\n <Surface role='object-settings' data={data} />\n {/* TODO(wittjosiah): Remove? */}\n {/* <AdvancedObjectSettings object={object} /> */}\n </div>\n </StackItem.Content>\n </Clipboard.Provider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { batch } from '@preact/signals-core';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport React, { type PropsWithChildren, useCallback, useMemo } from 'react';\n\nimport { DXN, Obj, type Ref, Tag, Type } from '@dxos/echo';\nimport { type JsonPath, setValue } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { Form, useRefQueryLookupHandler } from '@dxos/react-ui-form';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta as pluginMeta } from '../../meta';\n\n// TODO(wittjosiah): Would be nice to control order when extending so this isn't always first/last.\nconst BaseSchema = Schema.Struct({\n tags: Schema.Array(Type.Ref(Tag.Tag)).pipe(Schema.optional),\n});\n\n// TODO(wittjosiah): Better way to support validation of object schemas?\nconst TagSchema = Tag.Tag.pipe(Schema.omit('id'));\n\nexport type BaseObjectSettingsProps = ThemedClassName<\n PropsWithChildren<{\n object: Obj.Any;\n }>\n>;\n\n// TODO(wittjosiah): Reconcile w/ ObjectDetailsPanel.\nexport const BaseObjectSettings = ({ classNames, children, object }: BaseObjectSettingsProps) => {\n const space = getSpace(object);\n const handleRefQueryLookup = useRefQueryLookupHandler({ space });\n\n const formSchema = useMemo(() => {\n return Function.pipe(\n Obj.getSchema(object),\n Option.fromNullable,\n Option.map((schema) => BaseSchema.pipe(Schema.extend(schema))),\n Option.getOrUndefined,\n );\n }, [object]);\n\n const meta = Obj.getMeta(object);\n const tags = (meta.tags ?? []).map((tag) => space?.db.makeRef(DXN.parse(tag))).filter(isNonNullable);\n const values = useMemo(\n () => ({\n tags,\n ...object,\n }),\n [object, tags],\n );\n\n const handleCreateTag = useCallback((values: Schema.Schema.Type<typeof TagSchema>) => {\n invariant(space);\n const tag = space.db.add(Tag.make(values));\n const meta = Obj.getMeta(object);\n meta.tags = [...(meta.tags ?? []), Obj.getDXN(tag).toString()];\n }, []);\n\n const handleSave = useCallback(\n (\n { tags, ...values }: Schema.Schema.Type<typeof formSchema>,\n { changed }: { changed: Record<JsonPath, boolean> },\n ) => {\n const changedPaths = Object.keys(changed).filter((path) => changed[path as JsonPath]) as JsonPath[];\n batch(() => {\n for (const path of changedPaths) {\n if (path === 'tags') {\n const meta = Obj.getMeta(object);\n meta.tags = tags?.map((tag: Ref.Ref<Tag.Tag>) => tag.dxn.toString()) ?? [];\n continue;\n }\n\n const value = values[path];\n setValue(object, path, value);\n }\n });\n },\n [object],\n );\n\n if (!formSchema) {\n return null;\n }\n\n return (\n <>\n <Form\n classNames={classNames}\n outerSpacing={false}\n autoSave\n schema={formSchema}\n values={values}\n createSchema={TagSchema}\n createOptionIcon='ph--plus--regular'\n createOptionLabel={['add tag label', { ns: pluginMeta.id }]}\n createInitialValuePath='label'\n onCreate={handleCreateTag}\n onSave={handleSave}\n onQueryRefOptions={handleRefQueryLookup}\n />\n {children}\n </>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ObjectSettingsContainer } from './ObjectSettingsContainer';\n\nexport default ObjectSettingsContainer;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useMemo", "Surface", "Clipboard", "Toolbar", "StackItem", "batch", "Function", "Option", "Schema", "React", "useCallback", "useMemo", "DXN", "Obj", "Tag", "Type", "setValue", "invariant", "getSpace", "Form", "useRefQueryLookupHandler", "isNonNullable", "BaseSchema", "Struct", "tags", "Array", "Type", "Ref", "Tag", "pipe", "optional", "TagSchema", "omit", "BaseObjectSettings", "classNames", "children", "object", "space", "getSpace", "handleRefQueryLookup", "useRefQueryLookupHandler", "formSchema", "useMemo", "Obj", "getSchema", "fromNullable", "map", "schema", "extend", "getOrUndefined", "meta", "getMeta", "tag", "db", "makeRef", "DXN", "parse", "filter", "isNonNullable", "values", "handleCreateTag", "useCallback", "invariant", "add", "make", "getDXN", "toString", "handleSave", "changed", "changedPaths", "Object", "keys", "path", "batch", "dxn", "value", "setValue", "Form", "outerSpacing", "autoSave", "createSchema", "createOptionIcon", "createOptionLabel", "ns", "pluginMeta", "id", "createInitialValuePath", "onCreate", "onSave", "onQueryRefOptions", "ObjectSettingsContainer", "object", "role", "data", "useMemo", "subject", "React", "Clipboard", "Provider", "StackItem", "Content", "toolbar", "Toolbar", "Root", "div", "className", "BaseObjectSettings", "Surface", "ObjectSettingsContainer"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/RecordArticle.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { type SurfaceComponentProps } from '@dxos/app-framework/react';\nimport { type Entity, Filter, type Obj, Ref, Relation } from '@dxos/echo';\nimport { type Space, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Masonry } from '@dxos/react-ui-masonry';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '../meta';\n\nexport const RecordArticle = ({ subject }: SurfaceComponentProps) => {\n const { t } = useTranslation(meta.id);\n const space = getSpace(subject);\n const data = useMemo(() => ({ subject }), [subject]);\n const related = useRelatedObjects(space, subject, {\n references: true,\n relations: true,\n });\n const singleColumn = related.length === 1;\n\n return (\n <StackItem.Content>\n <div role='none' className={mx('flex flex-col gap-4 p-4 is-full overflow-y-auto')}>\n <div role='none' className={mx('flex is-full card-max-width')}>\n <Surface role='section' data={data} limit={1} />\n </div>\n\n {related.length > 0 && (\n <div role='none' className={mx('flex flex-col gap-1', singleColumn ? 'card-max-width' : 'is-full')}>\n <label className='mbs-2 text-sm text-description'>{t('related objects label')}</label>\n <Masonry.Root<Entity.Unknown>\n items={related}\n render={Card}\n columnCount={singleColumn ? 1 : undefined}\n intrinsicHeight\n />\n </div>\n )}\n </div>\n </StackItem.Content>\n );\n};\n\nconst Card = ({ data: subject }: { data: Entity.Unknown }) => {\n const data = useMemo(() => ({ subject }), [subject]);\n return <Surface role='card' data={data} limit={1} />;\n};\n\n// TODO(wittjosiah): This is a hack. ECHO needs to have a back reference index to easily query for related objects.\nconst useRelatedObjects = (\n space?: Space,\n record?: Obj.Any,\n options: { references?: boolean; relations?: boolean } = {},\n) => {\n const objects = useQuery(space, Filter.everything());\n return useMemo(() => {\n if (!record) {\n return [];\n }\n\n const related: Entity.Unknown[] = [];\n\n // TODO(burdon): Change Person => Organization to relations.\n if (options.references) {\n const getReferences = (obj: Entity.Unknown): Ref.Any[] => {\n return Object.getOwnPropertyNames(obj)\n .map((name) => obj[name as keyof Obj.Any])\n .filter((value) => Ref.isRef(value)) as Ref.Any[];\n };\n\n const references = getReferences(record);\n const referenceTargets = references.map((ref) => ref.target).filter(isNonNullable);\n const referenceSources = objects.filter((obj) => {\n const refs = getReferences(obj);\n return refs.some((ref) => ref.target === record);\n });\n\n related.push(...referenceTargets, ...referenceSources);\n }\n\n if (options.relations) {\n // TODO(dmaretskyi): Workaround until https://github.com/dxos/dxos/pull/10100 lands.\n const isValidRelation = (obj: Relation.Any) => {\n try {\n return Relation.isRelation(obj) && Relation.getSource(obj) && Relation.getTarget(obj);\n } catch {\n return false;\n }\n };\n\n const relations = objects.filter((obj) => Relation.isRelation(obj)).filter((obj) => isValidRelation(obj));\n const targetObjects = relations\n .filter((relation) => Relation.getTarget(relation) === record)\n .map((relation) => Relation.getSource(relation));\n const sourceObjects = relations\n .filter((relation) => Relation.getSource(relation) === record)\n .map((relation) => Relation.getTarget(relation));\n\n related.push(...targetObjects, ...sourceObjects);\n }\n\n return related;\n }, [record, objects]);\n};\n\nexport default RecordArticle;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useMemo", "Surface", "Filter", "Ref", "Relation", "getSpace", "useQuery", "useTranslation", "Masonry", "StackItem", "mx", "isNonNullable", "RecordArticle", "subject", "t", "useTranslation", "meta", "id", "space", "getSpace", "data", "useMemo", "related", "useRelatedObjects", "references", "relations", "singleColumn", "length", "StackItem", "Content", "div", "role", "className", "mx", "Surface", "limit", "label", "Masonry", "Root", "items", "render", "Card", "columnCount", "undefined", "intrinsicHeight", "record", "options", "objects", "useQuery", "Filter", "everything", "getReferences", "obj", "Object", "getOwnPropertyNames", "map", "name", "filter", "value", "Ref", "isRef", "referenceTargets", "ref", "target", "isNonNullable", "referenceSources", "refs", "some", "push", "isValidRelation", "Relation", "isRelation", "getSource", "getTarget", "targetObjects", "relation", "sourceObjects"]
|
|
7
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getActiveSpace
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-P25R3AOK.mjs";
|
|
4
4
|
import {
|
|
5
5
|
SpaceCapabilities
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-C6DAPIFF.mjs";
|
|
7
7
|
import {
|
|
8
8
|
SHARED,
|
|
9
9
|
SPACES,
|
|
@@ -14,11 +14,11 @@ import {
|
|
|
14
14
|
createObjectNode,
|
|
15
15
|
createStaticSchemaActions,
|
|
16
16
|
createStaticSchemaNode
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-GJOZILGC.mjs";
|
|
18
18
|
import {
|
|
19
19
|
SPACE_TYPE,
|
|
20
20
|
SpaceAction
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-6A3NWBB6.mjs";
|
|
22
22
|
import {
|
|
23
23
|
meta
|
|
24
24
|
} from "./chunk-VZBIIYFM.mjs";
|
|
@@ -31,12 +31,12 @@ import * as Option from "effect/Option";
|
|
|
31
31
|
import * as Schema from "effect/Schema";
|
|
32
32
|
import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
|
|
33
33
|
import { SpaceState, getSpace, isSpace } from "@dxos/client/echo";
|
|
34
|
-
import { DXN, Filter, Obj,
|
|
34
|
+
import { DXN, Filter, Obj, Type } from "@dxos/echo";
|
|
35
35
|
import { log } from "@dxos/log";
|
|
36
36
|
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
37
37
|
import { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
|
|
38
38
|
import { ROOT_ID, atomFromObservable, atomFromSignal, createExtension } from "@dxos/plugin-graph";
|
|
39
|
-
import { Collection,
|
|
39
|
+
import { Collection, View, ViewAnnotation, getTypenameFromQuery } from "@dxos/schema";
|
|
40
40
|
import { isNonNullable } from "@dxos/util";
|
|
41
41
|
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-space/src/capabilities/app-graph-builder.ts";
|
|
42
42
|
var app_graph_builder_default = ((context) => {
|
|
@@ -268,7 +268,7 @@ var app_graph_builder_default = ((context) => {
|
|
|
268
268
|
})), Array.filter(isNonNullable))));
|
|
269
269
|
}), Option.getOrElse(() => [])))
|
|
270
270
|
}),
|
|
271
|
-
// Create nodes for objects in a collection or by its
|
|
271
|
+
// Create nodes for objects in a collection or by its DXN.
|
|
272
272
|
createExtension({
|
|
273
273
|
id: `${meta.id}/objects`,
|
|
274
274
|
connector: (node) => Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(Collection.Collection, node2.data) ? Option.some(node2.data) : Option.none()), Option.map((collection) => {
|
|
@@ -280,47 +280,67 @@ var app_graph_builder_default = ((context) => {
|
|
|
280
280
|
resolve: resolve(get),
|
|
281
281
|
navigable: state.navigableCollections
|
|
282
282
|
})), Array.filter(isNonNullable))));
|
|
283
|
-
}), Option.getOrElse(() => [])))
|
|
283
|
+
}), Option.getOrElse(() => []))),
|
|
284
|
+
resolver: (id) => {
|
|
285
|
+
let query;
|
|
286
|
+
return Atom.make((get) => {
|
|
287
|
+
const client = context.getCapability(ClientCapabilities.Client);
|
|
288
|
+
const dxn = DXN.tryParse(id)?.asEchoDXN();
|
|
289
|
+
if (!dxn || !dxn.spaceId) {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
const space = client.spaces.get(dxn.spaceId);
|
|
293
|
+
if (!space) {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
if (!query) {
|
|
297
|
+
query = space.db.query(Filter.ids(dxn.echoId));
|
|
298
|
+
}
|
|
299
|
+
const object = get(atomFromQuery(query)).at(0);
|
|
300
|
+
if (!Obj.isObject(object)) {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
return createObjectNode({
|
|
304
|
+
object,
|
|
305
|
+
space,
|
|
306
|
+
resolve: resolve(get),
|
|
307
|
+
disposition: "hidden"
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
}
|
|
284
311
|
}),
|
|
285
|
-
// Create nodes for
|
|
312
|
+
// Create object nodes for schema-based system collections.
|
|
286
313
|
createExtension({
|
|
287
|
-
id: `${meta.id}/
|
|
314
|
+
id: `${meta.id}/system-collections`,
|
|
288
315
|
connector: (node) => {
|
|
316
|
+
const client = context.getCapability(ClientCapabilities.Client);
|
|
289
317
|
let query;
|
|
290
|
-
return Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(Collection.
|
|
318
|
+
return Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(Collection.Managed, node2.data) ? Option.some(node2.data) : Option.none()), Option.flatMap((collection) => {
|
|
291
319
|
const space = getSpace(collection);
|
|
292
|
-
const
|
|
293
|
-
return
|
|
294
|
-
|
|
295
|
-
|
|
320
|
+
const schema = client.graph.schemaRegistry.schemas.find((schema2) => Type.getTypename(schema2) === collection.key);
|
|
321
|
+
return space && schema ? Option.some({
|
|
322
|
+
space,
|
|
323
|
+
schema
|
|
296
324
|
}) : Option.none();
|
|
297
|
-
}), Option.map(({
|
|
298
|
-
const state = context.getCapability(SpaceCapabilities.State);
|
|
325
|
+
}), Option.map(({ space, schema }) => {
|
|
299
326
|
if (!query) {
|
|
300
|
-
query = space.db.query(
|
|
301
|
-
Query.select(Filter.typename(typename)),
|
|
302
|
-
// TODO(wittjosiah): This query is broader than it should be.
|
|
303
|
-
// It will return all objects in the collection, not just the ones of the given type.
|
|
304
|
-
// However this works fine for now because this query is only used for exclusions.
|
|
305
|
-
Query.select(Filter.typename(typename)).referencedBy(Collection.Collection, "objects").reference("objects")
|
|
306
|
-
));
|
|
327
|
+
query = space.db.query(Filter.type(schema));
|
|
307
328
|
}
|
|
308
|
-
return get(atomFromQuery(query)).
|
|
329
|
+
return get(atomFromQuery(query)).map((object) => createObjectNode({
|
|
309
330
|
object,
|
|
310
331
|
space,
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
})))).filter(isNonNullable);
|
|
332
|
+
managedCollectionChild: true,
|
|
333
|
+
resolve: resolve(get)
|
|
334
|
+
})).filter(isNonNullable);
|
|
315
335
|
}), Option.getOrElse(() => [])));
|
|
316
336
|
}
|
|
317
337
|
}),
|
|
318
|
-
//
|
|
338
|
+
// Create branch nodes for static schema record types.
|
|
319
339
|
createExtension({
|
|
320
340
|
id: `${meta.id}/static-schemas`,
|
|
321
341
|
connector: (node) => {
|
|
322
342
|
const client = context.getCapability(ClientCapabilities.Client);
|
|
323
|
-
return Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(Collection.
|
|
343
|
+
return Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(Collection.Managed, node2.data) && node2.data.key === Type.getTypename(Type.PersistentType) ? Option.some(node2.data) : Option.none()), Option.flatMap((collection) => {
|
|
324
344
|
const space = getSpace(collection);
|
|
325
345
|
return space?.properties.staticRecords ? Option.some(space) : Option.none();
|
|
326
346
|
}), Option.map((space) => {
|
|
@@ -331,101 +351,67 @@ var app_graph_builder_default = ((context) => {
|
|
|
331
351
|
}), Option.getOrElse(() => [])));
|
|
332
352
|
}
|
|
333
353
|
}),
|
|
334
|
-
// Create static schema
|
|
354
|
+
// Create actions for static schema record types.
|
|
335
355
|
createExtension({
|
|
336
356
|
id: `${meta.id}/static-schema-actions`,
|
|
337
357
|
actions: (node) => {
|
|
338
358
|
let query;
|
|
339
|
-
return Atom.make((get) =>
|
|
340
|
-
const
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
359
|
+
return Atom.make((get) => {
|
|
360
|
+
const schemas = get(context.capabilities(ClientCapabilities.Schema)).flat().filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
|
|
361
|
+
const filter2 = Filter.or(...schemas.map((schema) => Filter.type(schema)));
|
|
362
|
+
return Function.pipe(get(node), Option.flatMap((node2) => {
|
|
363
|
+
const space = isSpace(node2.properties.space) ? node2.properties.space : void 0;
|
|
364
|
+
return space && Schema.isSchema(node2.data) ? Option.some({
|
|
365
|
+
space,
|
|
366
|
+
schema: node2.data
|
|
367
|
+
}) : Option.none();
|
|
368
|
+
}), Option.map(({ space, schema }) => {
|
|
369
|
+
if (!query) {
|
|
370
|
+
query = space.db.query(filter2);
|
|
371
|
+
}
|
|
372
|
+
const objects = get(atomFromQuery(query));
|
|
373
|
+
const filteredViews = get(atomFromSignal(() => objects.filter((viewObject) => getTypenameFromQuery(viewObject.view.target?.query.ast) === Type.getTypename(schema))));
|
|
374
|
+
const deletable = filteredViews.length === 0;
|
|
375
|
+
const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
|
|
376
|
+
if (!dispatcher) {
|
|
377
|
+
return [];
|
|
378
|
+
}
|
|
379
|
+
return createStaticSchemaActions({
|
|
380
|
+
schema,
|
|
381
|
+
space,
|
|
382
|
+
dispatch: dispatcher.dispatchPromise,
|
|
383
|
+
deletable
|
|
384
|
+
});
|
|
385
|
+
}), Option.getOrElse(() => []));
|
|
386
|
+
});
|
|
366
387
|
}
|
|
367
388
|
}),
|
|
368
|
-
// Create nodes for
|
|
389
|
+
// Create nodes for views of record types.
|
|
369
390
|
createExtension({
|
|
370
391
|
id: `${meta.id}/schema-views`,
|
|
371
392
|
connector: (node) => {
|
|
372
|
-
let query;
|
|
373
|
-
return Atom.make((get) => Function.pipe(get(node), Option.flatMap((node2) => {
|
|
374
|
-
const space = getSpace(node2.data) ?? (isSpace(node2.properties.space) ? node2.properties.space : void 0);
|
|
375
|
-
return space && (Obj.instanceOf(StoredSchema, node2.data) || Schema.isSchema(node2.data)) ? Option.some({
|
|
376
|
-
space,
|
|
377
|
-
schema: node2.data
|
|
378
|
-
}) : Option.none();
|
|
379
|
-
}), Option.map(({ space, schema }) => {
|
|
380
|
-
if (!query) {
|
|
381
|
-
query = space.db.query(Filter.type(View.View));
|
|
382
|
-
}
|
|
383
|
-
const typename = Schema.isSchema(schema) ? Type.getTypename(schema) : schema.typename;
|
|
384
|
-
return get(atomFromQuery(query)).filter((view) => getTypenameFromQuery(view.query.ast) === typename).filter((view) => get(atomFromSignal(() => {
|
|
385
|
-
const presentation = view.presentation.target;
|
|
386
|
-
if (presentation) {
|
|
387
|
-
const typename2 = Obj.getTypename(presentation);
|
|
388
|
-
return typename2 !== Collection.Collection.typename;
|
|
389
|
-
} else {
|
|
390
|
-
return false;
|
|
391
|
-
}
|
|
392
|
-
}))).map((view) => get(atomFromSignal(() => createObjectNode({
|
|
393
|
-
object: view,
|
|
394
|
-
space,
|
|
395
|
-
resolve: resolve(get),
|
|
396
|
-
droppable: false
|
|
397
|
-
})))).filter(isNonNullable);
|
|
398
|
-
}), Option.getOrElse(() => [])));
|
|
399
|
-
}
|
|
400
|
-
}),
|
|
401
|
-
// Create record nodes.
|
|
402
|
-
createExtension({
|
|
403
|
-
id: `${meta.id}/records`,
|
|
404
|
-
resolver: (id) => {
|
|
405
393
|
let query;
|
|
406
394
|
return Atom.make((get) => {
|
|
407
|
-
const
|
|
408
|
-
const
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
disposition: "hidden"
|
|
428
|
-
});
|
|
395
|
+
const schemas = get(context.capabilities(ClientCapabilities.Schema)).flat().filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
|
|
396
|
+
const filter2 = Filter.or(...schemas.map((schema) => Filter.type(schema)));
|
|
397
|
+
return Function.pipe(get(node), Option.flatMap((node2) => {
|
|
398
|
+
const space = getSpace(node2.data) ?? (isSpace(node2.properties.space) ? node2.properties.space : void 0);
|
|
399
|
+
return space && (Obj.instanceOf(Type.PersistentType, node2.data) || Schema.isSchema(node2.data)) ? Option.some({
|
|
400
|
+
space,
|
|
401
|
+
schema: node2.data
|
|
402
|
+
}) : Option.none();
|
|
403
|
+
}), Option.map(({ space, schema }) => {
|
|
404
|
+
if (!query) {
|
|
405
|
+
query = space.db.query(filter2);
|
|
406
|
+
}
|
|
407
|
+
const typename = Schema.isSchema(schema) ? Type.getTypename(schema) : schema.typename;
|
|
408
|
+
return get(atomFromQuery(query)).filter((object) => get(atomFromSignal(() => getTypenameFromQuery(object.view.target?.query.ast) === typename))).map((object) => get(atomFromSignal(() => createObjectNode({
|
|
409
|
+
object,
|
|
410
|
+
space,
|
|
411
|
+
resolve: resolve(get),
|
|
412
|
+
droppable: false
|
|
413
|
+
})))).filter(isNonNullable);
|
|
414
|
+
}), Option.getOrElse(() => []));
|
|
429
415
|
});
|
|
430
416
|
}
|
|
431
417
|
}),
|
|
@@ -434,41 +420,44 @@ var app_graph_builder_default = ((context) => {
|
|
|
434
420
|
id: `${meta.id}/object-actions`,
|
|
435
421
|
actions: (node) => {
|
|
436
422
|
let query;
|
|
437
|
-
return Atom.make((get) =>
|
|
438
|
-
const
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
423
|
+
return Atom.make((get) => {
|
|
424
|
+
const schemas = get(context.capabilities(ClientCapabilities.Schema)).flat().filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)));
|
|
425
|
+
const filter2 = Filter.or(...schemas.map((schema) => Filter.type(schema)));
|
|
426
|
+
return Function.pipe(get(node), Option.flatMap((node2) => {
|
|
427
|
+
const space = getSpace(node2.data);
|
|
428
|
+
return space && Obj.isObject(node2.data) && Obj.getTypename(node2.data) === node2.type ? Option.some({
|
|
429
|
+
space,
|
|
430
|
+
object: node2.data
|
|
431
|
+
}) : Option.none();
|
|
432
|
+
}), Option.flatMap(({ space, object }) => {
|
|
433
|
+
const isSchema2 = Obj.instanceOf(Type.PersistentType, object);
|
|
434
|
+
if (!query && isSchema2) {
|
|
435
|
+
query = space.db.query(filter2);
|
|
436
|
+
}
|
|
437
|
+
let deletable = !isSchema2 && // Don't allow system collections to be deleted.
|
|
438
|
+
!Obj.instanceOf(Collection.Managed, object);
|
|
439
|
+
if (isSchema2 && query) {
|
|
440
|
+
const objects = get(atomFromQuery(query));
|
|
441
|
+
const filteredViews = get(atomFromSignal(() => objects.filter((viewObject) => getTypenameFromQuery(viewObject.view.target?.query.ast) === object.typename)));
|
|
442
|
+
deletable = filteredViews.length === 0;
|
|
443
|
+
}
|
|
444
|
+
const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
|
|
445
|
+
const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
|
|
446
|
+
const [state] = get(context.capabilities(SpaceCapabilities.State));
|
|
447
|
+
if (!dispatcher || !appGraph || !state) {
|
|
448
|
+
return Option.none();
|
|
449
|
+
} else {
|
|
450
|
+
return Option.some({
|
|
451
|
+
object,
|
|
452
|
+
graph: appGraph.graph,
|
|
453
|
+
dispatch: dispatcher.dispatchPromise,
|
|
454
|
+
resolve: resolve(get),
|
|
455
|
+
deletable,
|
|
456
|
+
navigable: get(atomFromSignal(() => state.navigableCollections))
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
}), Option.map((params) => constructObjectActions(params)), Option.getOrElse(() => []));
|
|
460
|
+
});
|
|
472
461
|
}
|
|
473
462
|
}),
|
|
474
463
|
// View selected objects.
|
|
@@ -525,4 +514,4 @@ var app_graph_builder_default = ((context) => {
|
|
|
525
514
|
export {
|
|
526
515
|
app_graph_builder_default as default
|
|
527
516
|
};
|
|
528
|
-
//# sourceMappingURL=app-graph-builder-
|
|
517
|
+
//# sourceMappingURL=app-graph-builder-HABMCWAI.mjs.map
|