@dxos/plugin-search 0.8.4-main.c85a9c8dae → 0.8.4-main.d9fc60f731
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/LICENSE +102 -5
- package/PLUGIN.mdl +291 -0
- package/dist/lib/neutral/SearchArticle-CQMZ46ZS.mjs +51 -0
- package/dist/lib/neutral/SearchArticle-CQMZ46ZS.mjs.map +7 -0
- package/dist/lib/neutral/SearchDialog-IFMA5UP5.mjs +76 -0
- package/dist/lib/neutral/SearchDialog-IFMA5UP5.mjs.map +7 -0
- package/dist/lib/neutral/SearchPlugin.mjs +10 -0
- package/dist/lib/neutral/SearchPlugin.mjs.map +7 -0
- package/dist/lib/{browser/app-graph-builder-NUJ2FOVQ.mjs → neutral/app-graph-builder-ADB5LBS5.mjs} +23 -34
- package/dist/lib/neutral/app-graph-builder-ADB5LBS5.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +13 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-2XHA22US.mjs +9 -0
- package/dist/lib/neutral/chunk-2XHA22US.mjs.map +7 -0
- package/dist/lib/neutral/chunk-BST37VRI.mjs +34 -0
- package/dist/lib/neutral/chunk-BST37VRI.mjs.map +7 -0
- package/dist/lib/{browser/chunk-NB4JZIOE.mjs → neutral/chunk-CZU523NP.mjs} +22 -22
- package/dist/lib/neutral/chunk-CZU523NP.mjs.map +7 -0
- package/dist/lib/neutral/chunk-GT3AGVU6.mjs +28 -0
- package/dist/lib/neutral/chunk-GT3AGVU6.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-Q2F6YOOZ.mjs +41 -0
- package/dist/lib/neutral/chunk-Q2F6YOOZ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-TN4G3MZZ.mjs +8 -0
- package/dist/lib/neutral/chunk-TN4G3MZZ.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +97 -0
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +11 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +30 -0
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +40 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +10 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/open-search-Y6OUELN3.mjs +23 -0
- package/dist/lib/neutral/open-search-Y6OUELN3.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-DY624P2R.mjs +13 -0
- package/dist/lib/neutral/operation-handler-DY624P2R.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-3IXL3EOJ.mjs +61 -0
- package/dist/lib/neutral/react-surface-3IXL3EOJ.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +8 -0
- package/dist/lib/neutral/testing.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +25 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +8 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/types/src/SearchPlugin.d.ts +1 -0
- package/dist/types/src/SearchPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +5 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/components/SearchResultStack/SearchResultStack.d.ts +9 -0
- package/dist/types/src/components/SearchResultStack/SearchResultStack.d.ts.map +1 -0
- package/dist/types/src/components/SearchResultStack/index.d.ts +2 -0
- package/dist/types/src/components/SearchResultStack/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/constants.d.ts +2 -1
- package/dist/types/src/constants.d.ts.map +1 -1
- package/dist/types/src/containers/SearchArticle/SearchArticle.d.ts +4 -0
- package/dist/types/src/containers/SearchArticle/SearchArticle.d.ts.map +1 -0
- package/dist/types/src/containers/SearchArticle/SearchArticle.stories.d.ts +14 -0
- package/dist/types/src/containers/SearchArticle/SearchArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/SearchArticle/index.d.ts +2 -0
- package/dist/types/src/containers/SearchArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/SearchDialog/SearchDialog.d.ts +5 -4
- package/dist/types/src/containers/SearchDialog/SearchDialog.d.ts.map +1 -1
- package/dist/types/src/containers/SearchDialog/SearchDialog.stories.d.ts +16 -0
- package/dist/types/src/containers/SearchDialog/SearchDialog.stories.d.ts.map +1 -0
- package/dist/types/src/containers/SearchDialog/index.d.ts +1 -2
- package/dist/types/src/containers/SearchDialog/index.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +1 -3
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/hooks/sync.d.ts +2 -2
- package/dist/types/src/hooks/sync.d.ts.map +1 -1
- package/dist/types/src/hooks/useGlobalSearch.d.ts +2 -2
- package/dist/types/src/hooks/useGlobalSearch.d.ts.map +1 -1
- package/dist/types/src/hooks/useSearchResults.d.ts.map +1 -1
- package/dist/types/src/hooks/useWebSearch.d.ts +1 -1
- package/dist/types/src/hooks/useWebSearch.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts +3 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/operations/open-search.d.ts +5 -0
- package/dist/types/src/operations/open-search.d.ts.map +1 -0
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/search/exa.d.ts +4 -5
- package/dist/types/src/search/exa.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +2 -0
- package/dist/types/src/testing.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +15 -10
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/SearchOperation.d.ts +3 -0
- package/dist/types/src/types/SearchOperation.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/search.d.ts +1 -16
- package/dist/types/src/types/search.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +102 -46
- package/src/SearchPlugin.tsx +12 -22
- package/src/capabilities/{app-graph-builder/app-graph-builder.ts → app-graph-builder.ts} +14 -19
- package/src/capabilities/index.ts +9 -3
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/react-surface.tsx +72 -0
- package/src/components/SearchResultStack/SearchResultStack.tsx +118 -0
- package/src/components/SearchResultStack/index.ts +5 -0
- package/src/components/index.ts +2 -0
- package/src/constants.ts +4 -2
- package/src/containers/SearchArticle/SearchArticle.stories.tsx +79 -0
- package/src/containers/SearchArticle/SearchArticle.tsx +60 -0
- package/src/containers/SearchArticle/index.ts +5 -0
- package/src/containers/SearchDialog/SearchDialog.stories.tsx +108 -0
- package/src/containers/SearchDialog/SearchDialog.tsx +67 -94
- package/src/containers/SearchDialog/index.ts +1 -3
- package/src/containers/index.ts +1 -4
- package/src/hooks/sync.test.ts +4 -4
- package/src/hooks/sync.ts +11 -8
- package/src/hooks/useGlobalSearch.tsx +3 -3
- package/src/hooks/useSearchResults.ts +2 -2
- package/src/hooks/useWebSearch.ts +6 -6
- package/src/index.ts +2 -2
- package/src/meta.ts +25 -7
- package/src/operations/index.ts +7 -0
- package/src/operations/open-search.ts +24 -0
- package/src/plugin.ts +11 -0
- package/src/search/exa.test.ts +6 -6
- package/src/search/exa.ts +6 -6
- package/src/testing.ts +7 -0
- package/src/translations.ts +10 -9
- package/src/types/SearchOperation.ts +20 -0
- package/src/types/index.ts +2 -1
- package/src/types/search.ts +1 -19
- package/src/vite-env.d.ts +10 -0
- package/dist/lib/browser/SearchDialog-E6336HCX.mjs +0 -110
- package/dist/lib/browser/SearchDialog-E6336HCX.mjs.map +0 -7
- package/dist/lib/browser/SearchMain-24ZNJB24.mjs +0 -100
- package/dist/lib/browser/SearchMain-24ZNJB24.mjs.map +0 -7
- package/dist/lib/browser/SpaceMain-IGCYHL7R.mjs +0 -154
- package/dist/lib/browser/SpaceMain-IGCYHL7R.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-NUJ2FOVQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-HRIWTRJV.mjs +0 -22
- package/dist/lib/browser/chunk-HRIWTRJV.mjs.map +0 -7
- package/dist/lib/browser/chunk-I7YWQSUZ.mjs +0 -26
- package/dist/lib/browser/chunk-I7YWQSUZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-NB4JZIOE.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -105
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/operation-resolver-QEGN4ZKN.mjs +0 -26
- package/dist/lib/browser/operation-resolver-QEGN4ZKN.mjs.map +0 -7
- package/dist/lib/browser/react-surface-FLO4YTFP.mjs +0 -73
- package/dist/lib/browser/react-surface-FLO4YTFP.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
- package/dist/types/src/containers/SearchMain/SearchMain.d.ts +0 -6
- package/dist/types/src/containers/SearchMain/SearchMain.d.ts.map +0 -1
- package/dist/types/src/containers/SearchMain/index.d.ts +0 -3
- package/dist/types/src/containers/SearchMain/index.d.ts.map +0 -1
- package/dist/types/src/containers/SpaceMain/SpaceMain.d.ts +0 -6
- package/dist/types/src/containers/SpaceMain/SpaceMain.d.ts.map +0 -1
- package/dist/types/src/containers/SpaceMain/index.d.ts +0 -3
- package/dist/types/src/containers/SpaceMain/index.d.ts.map +0 -1
- package/dist/types/src/types/action.d.ts +0 -16
- package/dist/types/src/types/action.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder/index.ts +0 -7
- package/src/capabilities/operation-resolver/index.ts +0 -7
- package/src/capabilities/operation-resolver/operation-resolver.ts +0 -24
- package/src/capabilities/react-surface/index.ts +0 -7
- package/src/capabilities/react-surface/react-surface.tsx +0 -72
- package/src/containers/SearchMain/SearchMain.tsx +0 -103
- package/src/containers/SearchMain/index.ts +0 -7
- package/src/containers/SpaceMain/SpaceMain.tsx +0 -180
- package/src/containers/SpaceMain/index.ts +0 -7
- package/src/types/action.tsx +0 -18
- /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
- /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
package/src/search/exa.test.ts
CHANGED
|
@@ -15,7 +15,7 @@ describe.skip('Search', () => {
|
|
|
15
15
|
test.skip('contacts', { timeout: 60_000 }, async () => {
|
|
16
16
|
const objects = await search({
|
|
17
17
|
query: 'top executives at google',
|
|
18
|
-
|
|
18
|
+
types: [TestSchema.Person],
|
|
19
19
|
exaApiKey: EXA_API_KEY,
|
|
20
20
|
});
|
|
21
21
|
|
|
@@ -25,7 +25,7 @@ describe.skip('Search', () => {
|
|
|
25
25
|
test.skip('contacts projects and orgs', { timeout: 60_000 }, async () => {
|
|
26
26
|
const objects = await search({
|
|
27
27
|
query: 'top executives at google',
|
|
28
|
-
|
|
28
|
+
types: [TestSchema.Person, TestSchema.Project, TestSchema.Organization],
|
|
29
29
|
exaApiKey: EXA_API_KEY,
|
|
30
30
|
});
|
|
31
31
|
|
|
@@ -35,7 +35,7 @@ describe.skip('Search', () => {
|
|
|
35
35
|
test('a19z org, projects they invest in and team', { timeout: 60_000 }, async () => {
|
|
36
36
|
const objects = await search({
|
|
37
37
|
query: 'a19z org, projects they invest in and team',
|
|
38
|
-
|
|
38
|
+
types: [TestSchema.Project, TestSchema.Organization, TestSchema.Person],
|
|
39
39
|
exaApiKey: EXA_API_KEY,
|
|
40
40
|
});
|
|
41
41
|
|
|
@@ -45,7 +45,7 @@ describe.skip('Search', () => {
|
|
|
45
45
|
test('companies building CRDTs', { timeout: 60_000 }, async () => {
|
|
46
46
|
const objects = await search({
|
|
47
47
|
query: 'companies building CRDTs',
|
|
48
|
-
|
|
48
|
+
types: [TestSchema.Project, TestSchema.Organization, TestSchema.Person],
|
|
49
49
|
exaApiKey: EXA_API_KEY,
|
|
50
50
|
});
|
|
51
51
|
|
|
@@ -57,7 +57,7 @@ describe.skip('Search', () => {
|
|
|
57
57
|
test('composer context-based search', { timeout: 60_000 }, async () => {
|
|
58
58
|
const objects = await search({
|
|
59
59
|
context: COMPOSER_DXOS_DOC,
|
|
60
|
-
|
|
60
|
+
types: [TestSchema.Project, TestSchema.Organization, TestSchema.Person],
|
|
61
61
|
exaApiKey: EXA_API_KEY,
|
|
62
62
|
});
|
|
63
63
|
|
|
@@ -67,7 +67,7 @@ describe.skip('Search', () => {
|
|
|
67
67
|
test.only('edge architecture', { timeout: 60_000 }, async () => {
|
|
68
68
|
const objects = await search({
|
|
69
69
|
context: EDGE_ARCHITECTURE_DOC,
|
|
70
|
-
|
|
70
|
+
types: [TestSchema.Project, TestSchema.Organization, TestSchema.Person],
|
|
71
71
|
exaApiKey: EXA_API_KEY,
|
|
72
72
|
});
|
|
73
73
|
|
package/src/search/exa.ts
CHANGED
|
@@ -9,16 +9,16 @@ import * as Schema from 'effect/Schema';
|
|
|
9
9
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
10
10
|
|
|
11
11
|
import { type Entity, Key, Obj, type Type } from '@dxos/echo';
|
|
12
|
-
import { ReferenceAnnotationId } from '@dxos/echo/internal';
|
|
13
12
|
import { isEncodedReference } from '@dxos/echo-protocol';
|
|
13
|
+
import { ReferenceAnnotationId } from '@dxos/echo/internal';
|
|
14
14
|
import { mapAst } from '@dxos/effect';
|
|
15
15
|
import { deepMapValues, trim } from '@dxos/util';
|
|
16
16
|
|
|
17
|
-
export type SearchOptions<
|
|
17
|
+
export type SearchOptions<T extends Type.AnyEntity> = {
|
|
18
18
|
query?: string;
|
|
19
19
|
// TODO(dmaretskyi): How can we pass this through.
|
|
20
20
|
context?: string;
|
|
21
|
-
|
|
21
|
+
types: T[];
|
|
22
22
|
exaApiKey: string;
|
|
23
23
|
liveCrawl?: boolean;
|
|
24
24
|
};
|
|
@@ -32,8 +32,8 @@ export type SearchResult<T = unknown> = {
|
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
/** @deprecated Use MixedStreamParser */
|
|
35
|
-
export const search = async <
|
|
36
|
-
options: SearchOptions<
|
|
35
|
+
export const search = async <T extends Type.AnyEntity>(
|
|
36
|
+
options: SearchOptions<T>,
|
|
37
37
|
): Promise<SearchResult<Entity.Unknown>> => {
|
|
38
38
|
throw new Error('Not implemented');
|
|
39
39
|
// assertArgument(options.query || options.context, "query or context", "query or context is required");
|
|
@@ -186,7 +186,7 @@ const sanitizeObjects = (entries: { data: any; schema: Type.AnyObj }[]) => {
|
|
|
186
186
|
|
|
187
187
|
return entries
|
|
188
188
|
.map((entry) => {
|
|
189
|
-
idMap.set(entry.data.id, Key.
|
|
189
|
+
idMap.set(entry.data.id, Key.EntityId.random());
|
|
190
190
|
entry.data.id = idMap.get(entry.data.id);
|
|
191
191
|
return entry;
|
|
192
192
|
})
|
package/src/testing.ts
ADDED
package/src/translations.ts
CHANGED
|
@@ -3,21 +3,22 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Resource } from '@dxos/react-ui';
|
|
6
|
+
import { translations as searchTranslations } from '@dxos/react-ui-search/translations';
|
|
6
7
|
|
|
7
|
-
import { meta } from '
|
|
8
|
+
import { meta } from '#meta';
|
|
8
9
|
|
|
9
10
|
export const translations = [
|
|
11
|
+
...searchTranslations,
|
|
10
12
|
{
|
|
11
13
|
'en-US': {
|
|
12
14
|
[meta.id]: {
|
|
13
|
-
'plugin
|
|
14
|
-
'search
|
|
15
|
-
'search
|
|
16
|
-
'search
|
|
17
|
-
'recently
|
|
18
|
-
'pending
|
|
19
|
-
'
|
|
20
|
-
'search label': 'Search',
|
|
15
|
+
'plugin.name': 'Search',
|
|
16
|
+
'search-action.label': 'Search spaces',
|
|
17
|
+
'search.placeholder': 'Search…',
|
|
18
|
+
'search-dialog.title': 'Search',
|
|
19
|
+
'recently-closed.heading': 'Recently closed',
|
|
20
|
+
'pending-results.message': 'Searching…',
|
|
21
|
+
'search.label': 'Search',
|
|
21
22
|
},
|
|
22
23
|
},
|
|
23
24
|
},
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
7
|
+
import * as Schema from 'effect/Schema';
|
|
8
|
+
|
|
9
|
+
import { Operation } from '@dxos/compute';
|
|
10
|
+
import { DXN } from '@dxos/keys';
|
|
11
|
+
|
|
12
|
+
import { meta } from '#meta';
|
|
13
|
+
|
|
14
|
+
const makeKey = (name: string) => DXN.make(`${meta.id}.operation.${name}`);
|
|
15
|
+
|
|
16
|
+
export const OpenSearch = Operation.make({
|
|
17
|
+
meta: { key: makeKey('openSearch'), name: 'Open Search', icon: 'ph--magnifying-glass--regular' },
|
|
18
|
+
input: Schema.Void,
|
|
19
|
+
output: Schema.Void,
|
|
20
|
+
});
|
package/src/types/index.ts
CHANGED
package/src/types/search.ts
CHANGED
|
@@ -2,22 +2,4 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export type SearchResult<T extends Entity.Unknown = Entity.Unknown> = {
|
|
8
|
-
id: string;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Type kind: "contact", "project", "org", etc.
|
|
12
|
-
*/
|
|
13
|
-
type?: string;
|
|
14
|
-
label?: string;
|
|
15
|
-
match?: RegExp;
|
|
16
|
-
snippet?: string;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Icon id.
|
|
20
|
-
*/
|
|
21
|
-
icon?: string;
|
|
22
|
-
object?: T;
|
|
23
|
-
};
|
|
5
|
+
export type { SearchResult } from '@dxos/react-ui-search';
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
useSearchResults
|
|
3
|
-
} from "./chunk-NB4JZIOE.mjs";
|
|
4
|
-
import {
|
|
5
|
-
meta
|
|
6
|
-
} from "./chunk-HRIWTRJV.mjs";
|
|
7
|
-
|
|
8
|
-
// src/containers/SearchDialog/SearchDialog.tsx
|
|
9
|
-
import * as Option from "effect/Option";
|
|
10
|
-
import React, { forwardRef, useCallback, useState } from "react";
|
|
11
|
-
import { useOperationInvoker } from "@dxos/app-framework/ui";
|
|
12
|
-
import { LayoutOperation } from "@dxos/app-toolkit";
|
|
13
|
-
import { useAppGraph, useLayout } from "@dxos/app-toolkit/ui";
|
|
14
|
-
import { Obj } from "@dxos/echo";
|
|
15
|
-
import { Graph } from "@dxos/plugin-graph";
|
|
16
|
-
import { useClient } from "@dxos/react-client";
|
|
17
|
-
import { Filter, useQuery } from "@dxos/react-client/echo";
|
|
18
|
-
import { Button, Dialog, toLocalizedString, useTranslation } from "@dxos/react-ui";
|
|
19
|
-
import { SearchList } from "@dxos/react-ui-searchlist";
|
|
20
|
-
import { mx, osTranslations } from "@dxos/ui-theme";
|
|
21
|
-
var SearchListResult = /* @__PURE__ */ forwardRef(({ node, onSelect }, forwardedRef) => {
|
|
22
|
-
const { t } = useTranslation(meta.id);
|
|
23
|
-
const label = toLocalizedString(node?.properties.label ?? "never", t);
|
|
24
|
-
const handleSelect = useCallback(() => {
|
|
25
|
-
onSelect?.(node.id);
|
|
26
|
-
}, [
|
|
27
|
-
node,
|
|
28
|
-
onSelect
|
|
29
|
-
]);
|
|
30
|
-
return /* @__PURE__ */ React.createElement(SearchList.Item, {
|
|
31
|
-
value: node.id,
|
|
32
|
-
label,
|
|
33
|
-
icon: node?.properties.icon,
|
|
34
|
-
classNames: "flex gap-2 items-center px-2",
|
|
35
|
-
onSelect: handleSelect,
|
|
36
|
-
ref: forwardedRef
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
var SearchDialog = ({ pivotId }) => {
|
|
40
|
-
const { t } = useTranslation(meta.id);
|
|
41
|
-
const { graph } = useAppGraph();
|
|
42
|
-
const layout = useLayout();
|
|
43
|
-
const closed = (Array.isArray(layout.inactive) ? layout.inactive : [
|
|
44
|
-
layout.inactive
|
|
45
|
-
]).map((id) => graph ? Graph.getNode(graph, id) : Option.none()).filter(Boolean);
|
|
46
|
-
const [queryString, setQueryString] = useState("");
|
|
47
|
-
const client = useClient();
|
|
48
|
-
const dangerouslyLoadAllObjects = useQuery(client.spaces, Filter.everything());
|
|
49
|
-
const [pending, results] = useSearchResults(queryString, dangerouslyLoadAllObjects);
|
|
50
|
-
const resultObjects = Array.from(results.keys());
|
|
51
|
-
const { invokePromise } = useOperationInvoker();
|
|
52
|
-
const handleSelect = useCallback(async (nodeId) => {
|
|
53
|
-
await invokePromise(LayoutOperation.UpdateDialog, {
|
|
54
|
-
state: false
|
|
55
|
-
});
|
|
56
|
-
const index = layout.active.findIndex((id) => id === nodeId);
|
|
57
|
-
if (index !== -1) {
|
|
58
|
-
await invokePromise(LayoutOperation.ScrollIntoView, {
|
|
59
|
-
subject: nodeId
|
|
60
|
-
});
|
|
61
|
-
} else {
|
|
62
|
-
await invokePromise(LayoutOperation.Open, {
|
|
63
|
-
subject: [
|
|
64
|
-
nodeId
|
|
65
|
-
],
|
|
66
|
-
pivotId,
|
|
67
|
-
positioning: "end"
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
}, [
|
|
71
|
-
pivotId,
|
|
72
|
-
invokePromise,
|
|
73
|
-
layout
|
|
74
|
-
]);
|
|
75
|
-
const handleSearch = useCallback((query) => {
|
|
76
|
-
setQueryString(query);
|
|
77
|
-
}, []);
|
|
78
|
-
return /* @__PURE__ */ React.createElement(Dialog.Content, null, /* @__PURE__ */ React.createElement(Dialog.Title, null, t("search dialog title")), /* @__PURE__ */ React.createElement(SearchList.Root, {
|
|
79
|
-
onSearch: handleSearch
|
|
80
|
-
}, /* @__PURE__ */ React.createElement(SearchList.Content, {
|
|
81
|
-
classNames: "max-h-[24rem] overflow-auto"
|
|
82
|
-
}, /* @__PURE__ */ React.createElement(SearchList.Input, {
|
|
83
|
-
placeholder: t("search placeholder")
|
|
84
|
-
}), /* @__PURE__ */ React.createElement(SearchList.Viewport, null, queryString.length > 0 ? resultObjects.length > 0 ? resultObjects.map((object) => Graph.getNode(graph, Obj.getDXN(object).toString())).filter(Option.isSome).map((node) => /* @__PURE__ */ React.createElement(SearchListResult, {
|
|
85
|
-
key: node.value.id,
|
|
86
|
-
node: node.value,
|
|
87
|
-
onSelect: handleSelect
|
|
88
|
-
})) : /* @__PURE__ */ React.createElement("p", {
|
|
89
|
-
className: "px-1"
|
|
90
|
-
}, t(pending ? "pending results message" : "empty results message")) : /* @__PURE__ */ React.createElement(React.Fragment, null, closed.length > 0 && /* @__PURE__ */ React.createElement("h2", {
|
|
91
|
-
className: mx("my-1", "text-description")
|
|
92
|
-
}, t("recently closed heading")), closed.filter(Option.isSome).map((node) => /* @__PURE__ */ React.createElement(SearchListResult, {
|
|
93
|
-
key: node.value.id,
|
|
94
|
-
node: node.value,
|
|
95
|
-
onSelect: handleSelect
|
|
96
|
-
})))))), /* @__PURE__ */ React.createElement(Dialog.Close, {
|
|
97
|
-
asChild: true
|
|
98
|
-
}, /* @__PURE__ */ React.createElement(Button, {
|
|
99
|
-
variant: "primary"
|
|
100
|
-
}, t("close label", {
|
|
101
|
-
ns: osTranslations
|
|
102
|
-
}))));
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
// src/containers/SearchDialog/index.ts
|
|
106
|
-
var SearchDialog_default = SearchDialog;
|
|
107
|
-
export {
|
|
108
|
-
SearchDialog_default as default
|
|
109
|
-
};
|
|
110
|
-
//# sourceMappingURL=SearchDialog-E6336HCX.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/containers/SearchDialog/SearchDialog.tsx", "../../../src/containers/SearchDialog/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport React, { forwardRef, useCallback, useState } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { useAppGraph, useLayout } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport { Graph, type Node } from '@dxos/plugin-graph';\nimport { useClient } from '@dxos/react-client';\nimport { Filter, useQuery } from '@dxos/react-client/echo';\nimport { Button, Dialog, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { mx, osTranslations } from '@dxos/ui-theme';\n\nimport { useSearchResults } from '../../hooks';\nimport { meta } from '../../meta';\n\ntype SearchListResultProps = {\n node: Node.Node;\n onSelect?: (nodeId: string) => void;\n};\n\nconst SearchListResult = forwardRef<HTMLDivElement, SearchListResultProps>(({ node, onSelect }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const label = toLocalizedString(node?.properties.label ?? 'never', t);\n const handleSelect = useCallback(() => {\n onSelect?.(node!.id);\n }, [node, onSelect]);\n return (\n <SearchList.Item\n value={node!.id}\n label={label}\n icon={node?.properties.icon}\n classNames='flex gap-2 items-center px-2'\n onSelect={handleSelect}\n ref={forwardedRef}\n />\n );\n});\n\nexport type SearchDialogProps = {\n pivotId: string;\n};\n\nexport const SearchDialog = ({ pivotId }: SearchDialogProps) => {\n const { t } = useTranslation(meta.id);\n const { graph } = useAppGraph();\n const layout = useLayout();\n const closed = (Array.isArray(layout.inactive) ? layout.inactive : [layout.inactive])\n .map((id) => (graph ? Graph.getNode(graph, id) : Option.none()))\n .filter(Boolean);\n const [queryString, setQueryString] = useState('');\n const client = useClient();\n const dangerouslyLoadAllObjects = useQuery(client.spaces, Filter.everything());\n const [pending, results] = useSearchResults(queryString, dangerouslyLoadAllObjects);\n const resultObjects = Array.from(results.keys());\n const { invokePromise } = useOperationInvoker();\n\n const handleSelect = useCallback(\n async (nodeId: string) => {\n await invokePromise(LayoutOperation.UpdateDialog, { state: false });\n\n // If node is already present in the active parts, scroll to it and close the dialog.\n const index = layout.active.findIndex((id) => id === nodeId);\n if (index !== -1) {\n await invokePromise(LayoutOperation.ScrollIntoView, { subject: nodeId });\n } else {\n await invokePromise(LayoutOperation.Open, {\n subject: [nodeId],\n pivotId,\n positioning: 'end',\n });\n }\n },\n [pivotId, invokePromise, layout],\n );\n\n const handleSearch = useCallback((query: string) => {\n setQueryString(query);\n }, []);\n\n return (\n <Dialog.Content>\n <Dialog.Title>{t('search dialog title')}</Dialog.Title>\n <SearchList.Root onSearch={handleSearch}>\n <SearchList.Content classNames='max-h-[24rem] overflow-auto'>\n <SearchList.Input placeholder={t('search placeholder')} />\n <SearchList.Viewport>\n {queryString.length > 0 ? (\n resultObjects.length > 0 ? (\n resultObjects\n .map((object) => Graph.getNode(graph, Obj.getDXN(object).toString()))\n .filter(Option.isSome)\n .map((node) => <SearchListResult key={node.value.id} node={node.value} onSelect={handleSelect} />)\n ) : (\n <p className='px-1'>{t(pending ? 'pending results message' : 'empty results message')}</p>\n )\n ) : (\n <>\n {closed.length > 0 && (\n <h2 className={mx('my-1', 'text-description')}>{t('recently closed heading')}</h2>\n )}\n {closed.filter(Option.isSome).map((node) => (\n <SearchListResult key={node.value.id} node={node.value} onSelect={handleSelect} />\n ))}\n </>\n )}\n </SearchList.Viewport>\n </SearchList.Content>\n </SearchList.Root>\n <Dialog.Close asChild>\n <Button variant='primary'>{t('close label', { ns: osTranslations })}</Button>\n </Dialog.Close>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { SearchDialog } from './SearchDialog';\n\nexport default SearchDialog;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Option", "React", "forwardRef", "useCallback", "useState", "useOperationInvoker", "LayoutOperation", "useAppGraph", "useLayout", "Obj", "Graph", "useClient", "Filter", "useQuery", "Button", "Dialog", "toLocalizedString", "useTranslation", "SearchList", "mx", "osTranslations", "SearchListResult", "forwardRef", "node", "onSelect", "forwardedRef", "t", "useTranslation", "meta", "id", "label", "toLocalizedString", "properties", "handleSelect", "useCallback", "SearchList", "Item", "value", "icon", "classNames", "ref", "SearchDialog", "pivotId", "graph", "useAppGraph", "layout", "useLayout", "closed", "Array", "isArray", "inactive", "map", "Graph", "getNode", "none", "filter", "Boolean", "queryString", "setQueryString", "useState", "client", "useClient", "dangerouslyLoadAllObjects", "useQuery", "spaces", "Filter", "everything", "pending", "results", "useSearchResults", "resultObjects", "from", "keys", "invokePromise", "useOperationInvoker", "nodeId", "LayoutOperation", "UpdateDialog", "state", "index", "active", "findIndex", "ScrollIntoView", "subject", "Open", "positioning", "handleSearch", "query", "Dialog", "Content", "Title", "Root", "onSearch", "Input", "placeholder", "Viewport", "length", "object", "Obj", "getDXN", "toString", "isSome", "key", "p", "className", "h2", "mx", "Close", "asChild", "Button", "variant", "ns", "osTranslations", "SearchDialog"]
|
|
7
|
-
}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
useGlobalSearch,
|
|
3
|
-
useGlobalSearchResults,
|
|
4
|
-
useWebSearch
|
|
5
|
-
} from "./chunk-NB4JZIOE.mjs";
|
|
6
|
-
import {
|
|
7
|
-
meta
|
|
8
|
-
} from "./chunk-HRIWTRJV.mjs";
|
|
9
|
-
|
|
10
|
-
// src/containers/SearchMain/SearchMain.tsx
|
|
11
|
-
import React, { useCallback, useMemo, useState } from "react";
|
|
12
|
-
import { Surface } from "@dxos/app-framework/ui";
|
|
13
|
-
import { useObjectMenuItems, useObjectNavigate } from "@dxos/app-toolkit/ui";
|
|
14
|
-
import { Entity, Query } from "@dxos/echo";
|
|
15
|
-
import { Filter, useQuery } from "@dxos/react-client/echo";
|
|
16
|
-
import { Card, Panel, ScrollArea, Toolbar, useTranslation } from "@dxos/react-ui";
|
|
17
|
-
import { Menu } from "@dxos/react-ui-menu";
|
|
18
|
-
import { Mosaic } from "@dxos/react-ui-mosaic";
|
|
19
|
-
import { SearchList } from "@dxos/react-ui-searchlist";
|
|
20
|
-
import { Text } from "@dxos/schema";
|
|
21
|
-
var SearchMain = ({ space }) => {
|
|
22
|
-
const { t } = useTranslation(meta.id);
|
|
23
|
-
const { setMatch } = useGlobalSearch();
|
|
24
|
-
const [query, setQuery] = useState();
|
|
25
|
-
const objects = useQuery(space?.db, query === void 0 ? Query.select(Filter.nothing()) : Query.all(Query.select(Filter.text(query, {
|
|
26
|
-
type: "full-text"
|
|
27
|
-
})).select(Filter.not(Filter.type(Text.Text))), Query.select(Filter.text(query, {
|
|
28
|
-
type: "full-text"
|
|
29
|
-
})).select(Filter.type(Text.Text)).referencedBy("dxos.org/type/Document", "content")));
|
|
30
|
-
const results = useGlobalSearchResults(objects);
|
|
31
|
-
const { results: webResults } = useWebSearch({
|
|
32
|
-
query
|
|
33
|
-
});
|
|
34
|
-
const allResults = useMemo(() => [
|
|
35
|
-
...results,
|
|
36
|
-
...webResults
|
|
37
|
-
].filter(({ object }) => object && Entity.getLabel(object)), [
|
|
38
|
-
results,
|
|
39
|
-
webResults
|
|
40
|
-
]);
|
|
41
|
-
const handleSearch = useCallback((text) => {
|
|
42
|
-
setQuery(text);
|
|
43
|
-
setMatch?.(text);
|
|
44
|
-
}, [
|
|
45
|
-
setMatch
|
|
46
|
-
]);
|
|
47
|
-
return /* @__PURE__ */ React.createElement(SearchList.Root, {
|
|
48
|
-
onSearch: handleSearch
|
|
49
|
-
}, /* @__PURE__ */ React.createElement(Panel.Root, {
|
|
50
|
-
className: "dx-article"
|
|
51
|
-
}, /* @__PURE__ */ React.createElement(Panel.Toolbar, {
|
|
52
|
-
asChild: true
|
|
53
|
-
}, /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(SearchList.Input, {
|
|
54
|
-
placeholder: t("search placeholder")
|
|
55
|
-
}))), /* @__PURE__ */ React.createElement(Panel.Content, {
|
|
56
|
-
asChild: true
|
|
57
|
-
}, /* @__PURE__ */ React.createElement(SearchList.Content, null, /* @__PURE__ */ React.createElement(Mosaic.Container, {
|
|
58
|
-
asChild: true
|
|
59
|
-
}, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
|
|
60
|
-
orientation: "vertical"
|
|
61
|
-
}, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement(Mosaic.Stack, {
|
|
62
|
-
items: allResults,
|
|
63
|
-
getId: (result) => result.object.id,
|
|
64
|
-
Tile: SearchResultTile
|
|
65
|
-
})))), allResults.length === 0 && /* @__PURE__ */ React.createElement(SearchList.Empty, null, t("empty results message"))))));
|
|
66
|
-
};
|
|
67
|
-
var SearchResultTile = (props) => {
|
|
68
|
-
const data = props.data;
|
|
69
|
-
const object = data.object;
|
|
70
|
-
const objectMenuItems = useObjectMenuItems(object);
|
|
71
|
-
const handleNavigate = useObjectNavigate(object);
|
|
72
|
-
return /* @__PURE__ */ React.createElement(Menu.Root, null, /* @__PURE__ */ React.createElement(Card.Root, {
|
|
73
|
-
key: data.id
|
|
74
|
-
}, /* @__PURE__ */ React.createElement(Card.Toolbar, null, /* @__PURE__ */ React.createElement(Card.DragHandle, null), /* @__PURE__ */ React.createElement(Card.Title, {
|
|
75
|
-
onClick: handleNavigate
|
|
76
|
-
}, data.label ?? (data.object && Entity.getLabel(data.object))), /* @__PURE__ */ React.createElement(Menu.Trigger, {
|
|
77
|
-
asChild: true,
|
|
78
|
-
disabled: !objectMenuItems?.length
|
|
79
|
-
}, /* @__PURE__ */ React.createElement(Toolbar.IconButton, {
|
|
80
|
-
iconOnly: true,
|
|
81
|
-
variant: "ghost",
|
|
82
|
-
icon: "ph--dots-three-vertical--regular",
|
|
83
|
-
label: "Actions"
|
|
84
|
-
})), /* @__PURE__ */ React.createElement(Menu.Content, {
|
|
85
|
-
items: objectMenuItems
|
|
86
|
-
})), /* @__PURE__ */ React.createElement(Surface.Surface, {
|
|
87
|
-
role: "card--content",
|
|
88
|
-
data: {
|
|
89
|
-
subject: data.object
|
|
90
|
-
},
|
|
91
|
-
limit: 1
|
|
92
|
-
})));
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
// src/containers/SearchMain/index.ts
|
|
96
|
-
var SearchMain_default = SearchMain;
|
|
97
|
-
export {
|
|
98
|
-
SearchMain_default as default
|
|
99
|
-
};
|
|
100
|
-
//# sourceMappingURL=SearchMain-24ZNJB24.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/containers/SearchMain/SearchMain.tsx", "../../../src/containers/SearchMain/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { useObjectMenuItems, useObjectNavigate } from '@dxos/app-toolkit/ui';\nimport { Entity, Query } from '@dxos/echo';\nimport { Filter, type Space, useQuery } from '@dxos/react-client/echo';\nimport { Card, Panel, ScrollArea, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { Menu } from '@dxos/react-ui-menu';\nimport { Mosaic, type MosaicStackTileComponent } from '@dxos/react-ui-mosaic';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport { Text } from '@dxos/schema';\n\nimport { useGlobalSearch, useGlobalSearchResults, useWebSearch } from '../../hooks';\nimport { meta } from '../../meta';\nimport { type SearchResult } from '../../types';\n\nexport const SearchMain = ({ space }: { space?: Space }) => {\n const { t } = useTranslation(meta.id);\n const { setMatch } = useGlobalSearch();\n const [query, setQuery] = useState<string>();\n // TODO(burdon): Option to search across spaces.\n const objects = useQuery(\n space?.db,\n query === undefined\n ? Query.select(Filter.nothing())\n : // TODO(dmaretskyi): Final version would walk the ancestry of the object until we find a non-system type.\n Query.all(\n Query.select(Filter.text(query, { type: 'full-text' })).select(Filter.not(Filter.type(Text.Text))),\n Query.select(Filter.text(query, { type: 'full-text' }))\n .select(Filter.type(Text.Text))\n .referencedBy('dxos.org/type/Document', 'content'),\n ),\n );\n\n const results = useGlobalSearchResults(objects);\n const { results: webResults } = useWebSearch({ query });\n const allResults = useMemo(\n () => [...results, ...webResults].filter(({ object }) => object && Entity.getLabel(object)),\n [results, webResults],\n );\n\n const handleSearch = useCallback(\n (text: string) => {\n setQuery(text);\n setMatch?.(text);\n },\n [setMatch],\n );\n\n return (\n <SearchList.Root onSearch={handleSearch}>\n <Panel.Root className='dx-article'>\n <Panel.Toolbar asChild>\n <Toolbar.Root>\n <SearchList.Input placeholder={t('search placeholder')} />\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content asChild>\n <SearchList.Content>\n <Mosaic.Container asChild>\n <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport>\n <Mosaic.Stack items={allResults} getId={(result) => result.object!.id} Tile={SearchResultTile} />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Mosaic.Container>\n {allResults.length === 0 && <SearchList.Empty>{t('empty results message')}</SearchList.Empty>}\n </SearchList.Content>\n </Panel.Content>\n </Panel.Root>\n </SearchList.Root>\n );\n};\n\nconst SearchResultTile: MosaicStackTileComponent<SearchResult> = (props) => {\n const data = props.data;\n const object = data.object!;\n const objectMenuItems = useObjectMenuItems(object);\n const handleNavigate = useObjectNavigate(object);\n\n return (\n <Menu.Root>\n <Card.Root key={data.id}>\n <Card.Toolbar>\n <Card.DragHandle />\n <Card.Title onClick={handleNavigate}>\n {data.label ?? (data.object && Entity.getLabel(data.object))}\n </Card.Title>\n {/* TODO(wittjosiah): Reconcile with Card.Menu. */}\n <Menu.Trigger asChild disabled={!objectMenuItems?.length}>\n <Toolbar.IconButton iconOnly variant='ghost' icon='ph--dots-three-vertical--regular' label='Actions' />\n </Menu.Trigger>\n <Menu.Content items={objectMenuItems} />\n </Card.Toolbar>\n <Surface.Surface role='card--content' data={{ subject: data.object }} limit={1} />\n </Card.Root>\n </Menu.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { SearchMain } from './SearchMain';\n\nexport default SearchMain;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "useCallback", "useMemo", "useState", "Surface", "useObjectMenuItems", "useObjectNavigate", "Entity", "Query", "Filter", "useQuery", "Card", "Panel", "ScrollArea", "Toolbar", "useTranslation", "Menu", "Mosaic", "SearchList", "Text", "SearchMain", "space", "t", "useTranslation", "meta", "id", "setMatch", "useGlobalSearch", "query", "setQuery", "useState", "objects", "useQuery", "db", "undefined", "Query", "select", "Filter", "nothing", "all", "text", "type", "not", "Text", "referencedBy", "results", "useGlobalSearchResults", "webResults", "useWebSearch", "allResults", "useMemo", "filter", "object", "Entity", "getLabel", "handleSearch", "useCallback", "SearchList", "Root", "onSearch", "Panel", "className", "Toolbar", "asChild", "Input", "placeholder", "Content", "Mosaic", "Container", "ScrollArea", "orientation", "Viewport", "Stack", "items", "getId", "result", "Tile", "SearchResultTile", "length", "Empty", "props", "data", "objectMenuItems", "useObjectMenuItems", "handleNavigate", "useObjectNavigate", "Menu", "Card", "key", "DragHandle", "Title", "onClick", "label", "Trigger", "disabled", "IconButton", "iconOnly", "variant", "icon", "Surface", "role", "subject", "limit", "SearchMain"]
|
|
7
|
-
}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
meta
|
|
3
|
-
} from "./chunk-HRIWTRJV.mjs";
|
|
4
|
-
|
|
5
|
-
// src/containers/SpaceMain/SpaceMain.tsx
|
|
6
|
-
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
7
|
-
import { useCapabilities, useOperationInvoker } from "@dxos/app-framework/ui";
|
|
8
|
-
import { AppCapabilities, LayoutOperation } from "@dxos/app-toolkit";
|
|
9
|
-
import { useAppGraph } from "@dxos/app-toolkit/ui";
|
|
10
|
-
import { Filter, Obj, Query } from "@dxos/echo";
|
|
11
|
-
import { Graph, Node, useActionRunner, useConnections } from "@dxos/plugin-graph";
|
|
12
|
-
import { useQuery } from "@dxos/react-client/echo";
|
|
13
|
-
import { ScrollArea, Toolbar, toLocalizedString, useTranslation } from "@dxos/react-ui";
|
|
14
|
-
import { Card, Panel } from "@dxos/react-ui";
|
|
15
|
-
import { Mosaic } from "@dxos/react-ui-mosaic";
|
|
16
|
-
import { SearchList } from "@dxos/react-ui-searchlist";
|
|
17
|
-
import { Text } from "@dxos/schema";
|
|
18
|
-
import { getStyles } from "@dxos/ui-theme";
|
|
19
|
-
var SpaceMain = ({ space }) => {
|
|
20
|
-
const { t } = useTranslation(meta.id);
|
|
21
|
-
const { items, handleSearch } = useSpaceItems(space);
|
|
22
|
-
return /* @__PURE__ */ React.createElement(SearchList.Root, {
|
|
23
|
-
onSearch: handleSearch
|
|
24
|
-
}, /* @__PURE__ */ React.createElement(Panel.Root, {
|
|
25
|
-
className: "dx-article"
|
|
26
|
-
}, /* @__PURE__ */ React.createElement(Panel.Toolbar, {
|
|
27
|
-
asChild: true
|
|
28
|
-
}, /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(SearchList.Input, {
|
|
29
|
-
placeholder: t("search placeholder")
|
|
30
|
-
}))), /* @__PURE__ */ React.createElement(Panel.Content, {
|
|
31
|
-
asChild: true
|
|
32
|
-
}, /* @__PURE__ */ React.createElement(SearchList.Content, null, /* @__PURE__ */ React.createElement(Mosaic.Container, {
|
|
33
|
-
asChild: true
|
|
34
|
-
}, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
|
|
35
|
-
orientation: "vertical"
|
|
36
|
-
}, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, {
|
|
37
|
-
classNames: "p-2"
|
|
38
|
-
}, /* @__PURE__ */ React.createElement(Mosaic.Stack, {
|
|
39
|
-
items,
|
|
40
|
-
getId: (node) => node.id,
|
|
41
|
-
Tile: NodeTile
|
|
42
|
-
}))))))));
|
|
43
|
-
};
|
|
44
|
-
var NodeTile = (props) => {
|
|
45
|
-
const node = props.data;
|
|
46
|
-
const { t } = useTranslation(meta.id);
|
|
47
|
-
const { graph } = useAppGraph();
|
|
48
|
-
const { invokeSync } = useOperationInvoker();
|
|
49
|
-
const runAction = useActionRunner();
|
|
50
|
-
const label = toLocalizedString(node.properties.label, t);
|
|
51
|
-
const icon = node.properties.icon ?? "ph--placeholder--regular";
|
|
52
|
-
const iconHue = node.properties.iconHue;
|
|
53
|
-
const styles = iconHue ? getStyles(iconHue) : void 0;
|
|
54
|
-
const handleClick = () => {
|
|
55
|
-
if (Node.isAction(node)) {
|
|
56
|
-
const [parent] = Graph.getConnections(graph, node.id, Node.childRelation("inbound"));
|
|
57
|
-
if (parent) {
|
|
58
|
-
void runAction(node, {
|
|
59
|
-
parent
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
} else {
|
|
63
|
-
invokeSync(LayoutOperation.Open, {
|
|
64
|
-
subject: [
|
|
65
|
-
node.id
|
|
66
|
-
]
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
return /* @__PURE__ */ React.createElement(Card.Root, {
|
|
71
|
-
fullWidth: true
|
|
72
|
-
}, /* @__PURE__ */ React.createElement(Card.Toolbar, null, /* @__PURE__ */ React.createElement(Card.ToolbarIconButton, {
|
|
73
|
-
variant: "ghost",
|
|
74
|
-
label,
|
|
75
|
-
icon,
|
|
76
|
-
iconOnly: true,
|
|
77
|
-
iconClassNames: styles?.surfaceText
|
|
78
|
-
}), /* @__PURE__ */ React.createElement(Card.Title, {
|
|
79
|
-
onClick: handleClick
|
|
80
|
-
}, label), /* @__PURE__ */ React.createElement(Card.Menu, null)));
|
|
81
|
-
};
|
|
82
|
-
var useMetadataResolver = () => {
|
|
83
|
-
const allMetadata = useCapabilities(AppCapabilities.Metadata);
|
|
84
|
-
return useCallback((typename) => allMetadata.find((m) => m.id === typename)?.metadata ?? {}, [
|
|
85
|
-
allMetadata
|
|
86
|
-
]);
|
|
87
|
-
};
|
|
88
|
-
var useSpaceItems = (space) => {
|
|
89
|
-
const { graph } = useAppGraph();
|
|
90
|
-
const [query, setQuery] = useState();
|
|
91
|
-
const resolveMetadata = useMetadataResolver();
|
|
92
|
-
useEffect(() => {
|
|
93
|
-
const frame = requestAnimationFrame(() => {
|
|
94
|
-
Graph.expand(graph, space.id, "child");
|
|
95
|
-
});
|
|
96
|
-
return () => cancelAnimationFrame(frame);
|
|
97
|
-
}, [
|
|
98
|
-
graph,
|
|
99
|
-
space.id
|
|
100
|
-
]);
|
|
101
|
-
const children = useConnections(graph, space.id, "child");
|
|
102
|
-
const handleSearch = useCallback((text) => {
|
|
103
|
-
setQuery(text);
|
|
104
|
-
}, []);
|
|
105
|
-
const results = useQuery(space.db, query === void 0 ? Query.select(Filter.nothing()) : Query.all(Query.select(Filter.text(query, {
|
|
106
|
-
type: "full-text"
|
|
107
|
-
})).select(Filter.not(Filter.type(Text.Text))), Query.select(Filter.text(query, {
|
|
108
|
-
type: "full-text"
|
|
109
|
-
})).select(Filter.type(Text.Text)).referencedBy("dxos.org/type/Document", "content")));
|
|
110
|
-
const isQueryEmpty = !query?.trim();
|
|
111
|
-
const filteredChildren = useMemo(() => children.filter((node) => {
|
|
112
|
-
if (Obj.isObject(node.data)) {
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
return Node.isAction(node) && node.properties.disposition === "item";
|
|
116
|
-
}), [
|
|
117
|
-
children
|
|
118
|
-
]);
|
|
119
|
-
const items = useMemo(() => {
|
|
120
|
-
if (isQueryEmpty) {
|
|
121
|
-
return filteredChildren;
|
|
122
|
-
}
|
|
123
|
-
return results.map((obj) => {
|
|
124
|
-
const typename = Obj.getTypename(obj);
|
|
125
|
-
const metadata = typename ? resolveMetadata(typename) : {};
|
|
126
|
-
return {
|
|
127
|
-
id: obj.id,
|
|
128
|
-
type: "search-result",
|
|
129
|
-
data: obj,
|
|
130
|
-
properties: {
|
|
131
|
-
label: Obj.getLabel(obj) ?? obj.id,
|
|
132
|
-
icon: metadata.icon ?? "ph--placeholder--regular",
|
|
133
|
-
iconHue: metadata.iconHue
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
});
|
|
137
|
-
}, [
|
|
138
|
-
isQueryEmpty,
|
|
139
|
-
filteredChildren,
|
|
140
|
-
results,
|
|
141
|
-
resolveMetadata
|
|
142
|
-
]);
|
|
143
|
-
return {
|
|
144
|
-
items,
|
|
145
|
-
handleSearch
|
|
146
|
-
};
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
// src/containers/SpaceMain/index.ts
|
|
150
|
-
var SpaceMain_default = SpaceMain;
|
|
151
|
-
export {
|
|
152
|
-
SpaceMain_default as default
|
|
153
|
-
};
|
|
154
|
-
//# sourceMappingURL=SpaceMain-IGCYHL7R.mjs.map
|