@dxos/plugin-kanban 0.7.5-main.9d2a38b → 0.7.5-main.ff8607b
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/{chunk-L4PZ5BVV.mjs → chunk-CX6EJQUM.mjs} +5 -2
- package/dist/lib/browser/{chunk-L4PZ5BVV.mjs.map → chunk-CX6EJQUM.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +7 -7
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/intent-resolver-WZK6U7AV.mjs +76 -0
- package/dist/lib/browser/intent-resolver-WZK6U7AV.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-KCOBVPKL.mjs → react-surface-23WY6Y2I.mjs} +113 -53
- package/dist/lib/browser/react-surface-23WY6Y2I.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +1 -1
- package/dist/lib/node/{chunk-QCB2U2J2.cjs → chunk-LCX4U4ES.cjs} +8 -5
- package/dist/lib/node/{chunk-QCB2U2J2.cjs.map → chunk-LCX4U4ES.cjs.map} +3 -3
- package/dist/lib/node/index.cjs +17 -17
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/intent-resolver-FJATJZJ7.cjs +90 -0
- package/dist/lib/node/intent-resolver-FJATJZJ7.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-MOZ2OTXW.cjs → react-surface-DYOAOKIF.cjs} +120 -60
- package/dist/lib/node/react-surface-DYOAOKIF.cjs.map +7 -0
- package/dist/lib/node/types.cjs +4 -4
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{chunk-PNSRVZBP.mjs → chunk-D3NDCI33.mjs} +5 -2
- package/dist/lib/node-esm/{chunk-PNSRVZBP.mjs.map → chunk-D3NDCI33.mjs.map} +3 -3
- package/dist/lib/node-esm/index.mjs +7 -7
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/intent-resolver-MBXQL2BL.mjs +77 -0
- package/dist/lib/node-esm/intent-resolver-MBXQL2BL.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-HNVSKYHF.mjs → react-surface-P6FJM7SN.mjs} +113 -53
- package/dist/lib/node-esm/react-surface-P6FJM7SN.mjs.map +7 -0
- package/dist/lib/node-esm/types.mjs +1 -1
- package/dist/types/src/KanbanPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +2 -2
- 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/components/KanbanContainer.d.ts.map +1 -1
- package/dist/types/src/components/KanbanViewEditor.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/package.json +21 -21
- package/src/KanbanPlugin.tsx +4 -12
- package/src/capabilities/intent-resolver.ts +27 -21
- package/src/components/KanbanContainer.tsx +30 -29
- package/src/components/KanbanViewEditor.tsx +55 -37
- package/src/meta.ts +3 -1
- package/dist/lib/browser/intent-resolver-ILMGO3TT.mjs +0 -70
- package/dist/lib/browser/intent-resolver-ILMGO3TT.mjs.map +0 -7
- package/dist/lib/browser/react-surface-KCOBVPKL.mjs.map +0 -7
- package/dist/lib/node/intent-resolver-6QZ6AMZF.cjs +0 -84
- package/dist/lib/node/intent-resolver-6QZ6AMZF.cjs.map +0 -7
- package/dist/lib/node/react-surface-MOZ2OTXW.cjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-LRZVOK2C.mjs +0 -71
- package/dist/lib/node-esm/intent-resolver-LRZVOK2C.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-HNVSKYHF.mjs.map +0 -7
|
@@ -10,15 +10,35 @@ import { useGlobalFilteredObjects } from '@dxos/plugin-search';
|
|
|
10
10
|
import { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';
|
|
11
11
|
import { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';
|
|
12
12
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
13
|
+
import { ViewProjection } from '@dxos/schema';
|
|
13
14
|
|
|
14
15
|
export const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {
|
|
15
16
|
const [cardSchema, setCardSchema] = useState<EchoSchema>();
|
|
17
|
+
const [projection, setProjection] = useState<ViewProjection>();
|
|
16
18
|
const space = getSpace(kanban);
|
|
19
|
+
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (kanban.cardView?.target?.query?.type && space) {
|
|
22
|
+
const query = space.db.schemaRegistry.query({ typename: kanban.cardView.target.query.type });
|
|
23
|
+
const unsubscribe = query.subscribe(
|
|
24
|
+
() => {
|
|
25
|
+
const [schema] = query.results;
|
|
26
|
+
if (schema) {
|
|
27
|
+
setCardSchema(schema);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
{ fire: true },
|
|
31
|
+
);
|
|
32
|
+
return unsubscribe;
|
|
33
|
+
}
|
|
34
|
+
}, [kanban.cardView?.target?.query, space]);
|
|
35
|
+
|
|
17
36
|
useEffect(() => {
|
|
18
|
-
if (kanban.cardView &&
|
|
19
|
-
|
|
37
|
+
if (kanban.cardView?.target && cardSchema) {
|
|
38
|
+
setProjection(new ViewProjection(cardSchema, kanban.cardView.target));
|
|
20
39
|
}
|
|
21
|
-
|
|
40
|
+
// TODO(ZaymonFC): Is there a better way to get notified about deep changes in the json schema?
|
|
41
|
+
}, [kanban.cardView?.target, cardSchema, JSON.stringify(cardSchema?.jsonSchema)]);
|
|
22
42
|
|
|
23
43
|
const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());
|
|
24
44
|
const filteredObjects = useGlobalFilteredObjects(objects);
|
|
@@ -26,24 +46,18 @@ export const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }
|
|
|
26
46
|
const model = useKanbanModel({
|
|
27
47
|
kanban,
|
|
28
48
|
cardSchema,
|
|
49
|
+
projection,
|
|
29
50
|
items: filteredObjects,
|
|
30
51
|
});
|
|
31
52
|
|
|
32
|
-
const handleAddColumn = useCallback((columnValue: string) => model?.addEmptyColumn(columnValue), [model]);
|
|
33
|
-
|
|
34
53
|
const handleAddCard = useCallback(
|
|
35
|
-
(columnValue: string) => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
title: '',
|
|
40
|
-
description: '',
|
|
41
|
-
state: columnValue,
|
|
42
|
-
}),
|
|
43
|
-
);
|
|
54
|
+
(columnValue: string | undefined) => {
|
|
55
|
+
const path = model?.columnFieldPath;
|
|
56
|
+
if (space && cardSchema && path) {
|
|
57
|
+
space.db.add(create(cardSchema, { [path]: columnValue }));
|
|
44
58
|
}
|
|
45
59
|
},
|
|
46
|
-
[space, cardSchema],
|
|
60
|
+
[space, cardSchema, model],
|
|
47
61
|
);
|
|
48
62
|
|
|
49
63
|
const handleRemoveCard = useCallback(
|
|
@@ -54,23 +68,10 @@ export const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }
|
|
|
54
68
|
[space],
|
|
55
69
|
);
|
|
56
70
|
|
|
57
|
-
const handleRemoveEmptyColumn = useCallback(
|
|
58
|
-
(columnValue: string) => {
|
|
59
|
-
model?.removeColumnFromArrangement(columnValue);
|
|
60
|
-
},
|
|
61
|
-
[model],
|
|
62
|
-
);
|
|
63
|
-
|
|
64
71
|
return (
|
|
65
72
|
<StackItem.Content toolbar={false}>
|
|
66
73
|
{model ? (
|
|
67
|
-
<Kanban
|
|
68
|
-
model={model}
|
|
69
|
-
onAddCard={handleAddCard}
|
|
70
|
-
onAddColumn={handleAddColumn}
|
|
71
|
-
onRemoveCard={handleRemoveCard}
|
|
72
|
-
onRemoveEmptyColumn={handleRemoveEmptyColumn}
|
|
73
|
-
/>
|
|
74
|
+
<Kanban model={model} onAddCard={handleAddCard} onRemoveCard={handleRemoveCard} />
|
|
74
75
|
) : (
|
|
75
76
|
<span>Loading</span>
|
|
76
77
|
)}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
//
|
|
2
|
-
// Copyright
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
6
6
|
|
|
7
7
|
import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
|
|
8
|
+
import { type EchoSchema, FormatEnum } from '@dxos/echo-schema';
|
|
9
|
+
import { invariant } from '@dxos/invariant';
|
|
8
10
|
import { Filter, getSpace, useQuery } from '@dxos/react-client/echo';
|
|
9
|
-
import { ViewEditor, Form } from '@dxos/react-ui-form';
|
|
10
|
-
import { type KanbanType,
|
|
11
|
-
import { ViewType } from '@dxos/schema';
|
|
11
|
+
import { ViewEditor, Form, SelectInput, type CustomInputMap } from '@dxos/react-ui-form';
|
|
12
|
+
import { type KanbanType, KanbanSettingsSchema } from '@dxos/react-ui-kanban';
|
|
13
|
+
import { ViewType, ViewProjection } from '@dxos/schema';
|
|
12
14
|
|
|
13
15
|
import { KanbanAction } from '../types';
|
|
14
16
|
|
|
@@ -18,21 +20,29 @@ export const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {
|
|
|
18
20
|
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
19
21
|
const space = getSpace(kanban);
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
space && kanban?.cardView?.target?.query?.type
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
const [schema, setSchema] = useState<EchoSchema | undefined>();
|
|
24
|
+
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (space && kanban?.cardView?.target?.query?.type) {
|
|
27
|
+
const query = space.db.schemaRegistry.query({ typename: kanban.cardView.target.query.type });
|
|
28
|
+
const unsubscribe = query.subscribe(
|
|
29
|
+
() => {
|
|
30
|
+
const [schema] = query.results;
|
|
31
|
+
if (schema) {
|
|
32
|
+
setSchema(schema);
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
{ fire: true },
|
|
36
|
+
);
|
|
37
|
+
return unsubscribe;
|
|
38
|
+
}
|
|
39
|
+
}, [space, kanban?.cardView?.target?.query?.type]);
|
|
28
40
|
|
|
29
41
|
const views = useQuery(space, Filter.schema(ViewType));
|
|
30
42
|
const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [kanban?.cardView?.target?.query?.type]);
|
|
31
43
|
const updateViewTypename = useCallback(
|
|
32
44
|
(newTypename: string) => {
|
|
33
|
-
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
45
|
+
invariant(schema);
|
|
36
46
|
const matchingViews = views.filter((view) => view.query.type === currentTypename);
|
|
37
47
|
for (const view of matchingViews) {
|
|
38
48
|
view.query.type = newTypename;
|
|
@@ -42,40 +52,48 @@ export const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {
|
|
|
42
52
|
[views, schema],
|
|
43
53
|
);
|
|
44
54
|
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
if (space && kanban?.cardView?.target?.query?.type) {
|
|
47
|
-
const unsubscribe = space.db.schemaRegistry
|
|
48
|
-
.query({ typename: kanban?.cardView?.target?.query?.type })
|
|
49
|
-
.subscribe((query) => {
|
|
50
|
-
const [schema] = query.results;
|
|
51
|
-
if (schema) {
|
|
52
|
-
setSchema(schema);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
return unsubscribe;
|
|
57
|
-
}
|
|
58
|
-
}, [space, kanban?.cardView?.target?.query?.type]);
|
|
59
|
-
|
|
60
55
|
const handleDelete = useCallback(
|
|
61
56
|
(fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),
|
|
62
57
|
[dispatch, kanban],
|
|
63
58
|
);
|
|
64
59
|
|
|
60
|
+
const projection = useMemo(() => {
|
|
61
|
+
if (kanban?.cardView?.target && schema) {
|
|
62
|
+
return new ViewProjection(schema, kanban.cardView.target);
|
|
63
|
+
}
|
|
64
|
+
}, [kanban?.cardView?.target, schema, JSON.stringify(schema)]);
|
|
65
|
+
|
|
66
|
+
const selectFields = useMemo(() => {
|
|
67
|
+
if (!projection) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return projection
|
|
72
|
+
.getFieldProjections()
|
|
73
|
+
.filter((field) => field.props.format === FormatEnum.SingleSelect)
|
|
74
|
+
.map(({ field }) => ({ value: field.id, label: field.path }));
|
|
75
|
+
}, [projection]);
|
|
76
|
+
|
|
77
|
+
const onSave = useCallback(
|
|
78
|
+
(values: Partial<{ columnFieldId: string }>) => {
|
|
79
|
+
kanban.columnFieldId = values.columnFieldId;
|
|
80
|
+
},
|
|
81
|
+
[kanban],
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
const initialValues = useMemo(() => ({ columnFieldId: kanban.columnFieldId }), [kanban]);
|
|
85
|
+
const custom: CustomInputMap = useMemo(
|
|
86
|
+
() => ({ columnFieldId: (props) => <SelectInput {...props} options={selectFields} /> }),
|
|
87
|
+
[selectFields],
|
|
88
|
+
);
|
|
89
|
+
|
|
65
90
|
if (!space || !schema || !kanban.cardView?.target) {
|
|
66
91
|
return null;
|
|
67
92
|
}
|
|
68
93
|
|
|
69
94
|
return (
|
|
70
95
|
<>
|
|
71
|
-
<Form
|
|
72
|
-
schema={KanbanPropsSchema}
|
|
73
|
-
values={{ columnField: kanban.columnField }}
|
|
74
|
-
onSave={({ columnField }) => {
|
|
75
|
-
kanban.columnField = columnField;
|
|
76
|
-
kanban.arrangement = undefined;
|
|
77
|
-
}}
|
|
78
|
-
/>
|
|
96
|
+
<Form schema={KanbanSettingsSchema} values={initialValues} onSave={onSave} autoSave Custom={custom} />
|
|
79
97
|
<ViewEditor
|
|
80
98
|
registry={space.db.schemaRegistry}
|
|
81
99
|
schema={schema}
|
package/src/meta.ts
CHANGED
|
@@ -9,8 +9,10 @@ export const KANBAN_PLUGIN = 'dxos.org/plugin/kanban';
|
|
|
9
9
|
export const meta = {
|
|
10
10
|
id: KANBAN_PLUGIN,
|
|
11
11
|
name: 'Kanban',
|
|
12
|
-
description:
|
|
12
|
+
description:
|
|
13
|
+
'Kanban allows you to explore Table data in sorted columns defined by your custom schema. You can use Kanbans to track progress or trigger custom automations when cards are moved from one state to another.',
|
|
13
14
|
icon: 'ph--kanban--regular',
|
|
14
15
|
source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-kanban',
|
|
15
16
|
tags: ['experimental'],
|
|
17
|
+
screenshots: ['https://dxos.network/plugin-details-kanban-dark.png'],
|
|
16
18
|
} satisfies PluginMeta;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
KANBAN_PLUGIN,
|
|
3
|
-
KanbanAction,
|
|
4
|
-
createKanban
|
|
5
|
-
} from "./chunk-L4PZ5BVV.mjs";
|
|
6
|
-
|
|
7
|
-
// packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts
|
|
8
|
-
import { contributes, Capabilities, createResolver } from "@dxos/app-framework";
|
|
9
|
-
import { invariant } from "@dxos/invariant";
|
|
10
|
-
import { getSpace } from "@dxos/react-client/echo";
|
|
11
|
-
import { ViewProjection } from "@dxos/schema";
|
|
12
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts";
|
|
13
|
-
var intent_resolver_default = () => contributes(Capabilities.IntentResolver, [
|
|
14
|
-
createResolver(KanbanAction.Create, async ({ space }) => ({
|
|
15
|
-
data: {
|
|
16
|
-
object: await createKanban(space)
|
|
17
|
-
}
|
|
18
|
-
})),
|
|
19
|
-
createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {
|
|
20
|
-
invariant(kanban.cardView, void 0, {
|
|
21
|
-
F: __dxlog_file,
|
|
22
|
-
L: 19,
|
|
23
|
-
S: void 0,
|
|
24
|
-
A: [
|
|
25
|
-
"kanban.cardView",
|
|
26
|
-
""
|
|
27
|
-
]
|
|
28
|
-
});
|
|
29
|
-
const schema = kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);
|
|
30
|
-
invariant(schema, void 0, {
|
|
31
|
-
F: __dxlog_file,
|
|
32
|
-
L: 23,
|
|
33
|
-
S: void 0,
|
|
34
|
-
A: [
|
|
35
|
-
"schema",
|
|
36
|
-
""
|
|
37
|
-
]
|
|
38
|
-
});
|
|
39
|
-
const projection = new ViewProjection(schema, kanban.cardView.target);
|
|
40
|
-
if (!undo) {
|
|
41
|
-
const { deleted, index } = projection.deleteFieldProjection(fieldId);
|
|
42
|
-
return {
|
|
43
|
-
undoable: {
|
|
44
|
-
message: [
|
|
45
|
-
"card field deleted label",
|
|
46
|
-
{
|
|
47
|
-
ns: KANBAN_PLUGIN
|
|
48
|
-
}
|
|
49
|
-
],
|
|
50
|
-
data: {
|
|
51
|
-
deletionData: {
|
|
52
|
-
...deleted,
|
|
53
|
-
index
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
} else if (undo && deletionData) {
|
|
59
|
-
const { field, props, index } = deletionData;
|
|
60
|
-
projection.setFieldProjection({
|
|
61
|
-
field,
|
|
62
|
-
props
|
|
63
|
-
}, index);
|
|
64
|
-
}
|
|
65
|
-
})
|
|
66
|
-
]);
|
|
67
|
-
export {
|
|
68
|
-
intent_resolver_default as default
|
|
69
|
-
};
|
|
70
|
-
//# sourceMappingURL=intent-resolver-ILMGO3TT.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/intent-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, createResolver } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from '../meta';\nimport { createKanban, KanbanAction } from '../types';\n\nexport default () =>\n contributes(Capabilities.IntentResolver, [\n createResolver(KanbanAction.Create, async ({ space }) => ({\n data: { object: await createKanban(space) },\n })),\n createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {\n invariant(kanban.cardView);\n\n const schema =\n kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);\n invariant(schema);\n const projection = new ViewProjection(schema, kanban.cardView.target!);\n\n if (!undo) {\n const { deleted, index } = projection.deleteFieldProjection(fieldId);\n return {\n undoable: {\n message: ['card field deleted label', { ns: KANBAN_PLUGIN }],\n data: { deletionData: { ...deleted, index } },\n },\n };\n } else if (undo && deletionData) {\n const { field, props, index } = deletionData;\n projection.setFieldProjection({ field, props }, index);\n }\n }),\n ]);\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAIA,SAASA,aAAaC,cAAcC,sBAAsB;AAC1D,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;;AAK/B,IAAA,0BAAe,MACbC,YAAYC,aAAaC,gBAAgB;EACvCC,eAAeC,aAAaC,QAAQ,OAAO,EAAEC,MAAK,OAAQ;IACxDC,MAAM;MAAEC,QAAQ,MAAMC,aAAaH,KAAAA;IAAO;EAC5C,EAAA;EACAH,eAAeC,aAAaM,iBAAiB,CAAC,EAAEC,QAAQC,SAASC,aAAY,GAAIC,SAAAA;AAC/EC,cAAUJ,OAAOK,UAAQ,QAAA;;;;;;;;;AAEzB,UAAMC,SACJN,OAAOK,SAASE,UAAUC,SAASR,MAAAA,GAASS,GAAGC,eAAeC,UAAUX,OAAOK,SAASE,OAAOK,MAAMC,IAAI;AAC3GT,cAAUE,QAAAA,QAAAA;;;;;;;;;AACV,UAAMQ,aAAa,IAAIC,eAAeT,QAAQN,OAAOK,SAASE,MAAM;AAEpE,QAAI,CAACJ,MAAM;AACT,YAAM,EAAEa,SAASC,MAAK,IAAKH,WAAWI,sBAAsBjB,OAAAA;AAC5D,aAAO;QACLkB,UAAU;UACRC,SAAS;YAAC;YAA4B;cAAEC,IAAIC;YAAc;;UAC1D1B,MAAM;YAAEM,cAAc;cAAE,GAAGc;cAASC;YAAM;UAAE;QAC9C;MACF;IACF,WAAWd,QAAQD,cAAc;AAC/B,YAAM,EAAEqB,OAAOC,OAAOP,MAAK,IAAKf;AAChCY,iBAAWW,mBAAmB;QAAEF;QAAOC;MAAM,GAAGP,KAAAA;IAClD;EACF,CAAA;CACD;",
|
|
6
|
-
"names": ["contributes", "Capabilities", "createResolver", "invariant", "getSpace", "ViewProjection", "contributes", "Capabilities", "IntentResolver", "createResolver", "KanbanAction", "Create", "space", "data", "object", "createKanban", "DeleteCardField", "kanban", "fieldId", "deletionData", "undo", "invariant", "cardView", "schema", "target", "getSpace", "db", "schemaRegistry", "getSchema", "query", "type", "projection", "ViewProjection", "deleted", "index", "deleteFieldProjection", "undoable", "message", "ns", "KANBAN_PLUGIN", "field", "props", "setFieldProjection"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/KanbanContainer.tsx", "../../../src/components/KanbanViewEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${KANBAN_PLUGIN}/kanban`,\n role: ['article', 'section'],\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/settings`,\n role: 'complementary--settings',\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const [cardSchema, setCardSchema] = useState<EchoSchema>();\n const space = getSpace(kanban);\n useEffect(() => {\n if (kanban.cardView && space) {\n setCardSchema(space.db.schemaRegistry.getSchema(kanban.cardView.target!.query.type));\n }\n }, [kanban.cardView, space]);\n\n const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n const model = useKanbanModel({\n kanban,\n cardSchema,\n items: filteredObjects,\n });\n\n const handleAddColumn = useCallback((columnValue: string) => model?.addEmptyColumn(columnValue), [model]);\n\n const handleAddCard = useCallback(\n (columnValue: string) => {\n if (space && cardSchema) {\n space.db.add(\n create(cardSchema, {\n title: '',\n description: '',\n state: columnValue,\n }),\n );\n }\n },\n [space, cardSchema],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n invariant(space);\n space.db.remove(card);\n },\n [space],\n );\n\n const handleRemoveEmptyColumn = useCallback(\n (columnValue: string) => {\n model?.removeColumnFromArrangement(columnValue);\n },\n [model],\n );\n\n return (\n <StackItem.Content toolbar={false}>\n {model ? (\n <Kanban\n model={model}\n onAddCard={handleAddCard}\n onAddColumn={handleAddColumn}\n onRemoveCard={handleRemoveCard}\n onRemoveEmptyColumn={handleRemoveEmptyColumn}\n />\n ) : (\n <span>Loading</span>\n )}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Filter, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { ViewEditor, Form } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanPropsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\ntype KanbanViewEditorProps = { kanban: KanbanType };\n\nexport const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const space = getSpace(kanban);\n\n // TODO(ZaymonFC): The schema registry needs an API where we can query with initial value and\n // endure typename changes. We shouldn't need to manage a subscription at this layer.\n const [schema, setSchema] = useState(\n space && kanban?.cardView?.target?.query?.type\n ? space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type)\n : undefined,\n );\n\n const views = useQuery(space, Filter.schema(ViewType));\n const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [kanban?.cardView?.target?.query?.type]);\n const updateViewTypename = useCallback(\n (newTypename: string) => {\n if (!schema) {\n return;\n }\n const matchingViews = views.filter((view) => view.query.type === currentTypename);\n for (const view of matchingViews) {\n view.query.type = newTypename;\n }\n schema.updateTypename(newTypename);\n },\n [views, schema],\n );\n\n useEffect(() => {\n if (space && kanban?.cardView?.target?.query?.type) {\n const unsubscribe = space.db.schemaRegistry\n .query({ typename: kanban?.cardView?.target?.query?.type })\n .subscribe((query) => {\n const [schema] = query.results;\n if (schema) {\n setSchema(schema);\n }\n });\n\n return unsubscribe;\n }\n }, [space, kanban?.cardView?.target?.query?.type]);\n\n const handleDelete = useCallback(\n (fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),\n [dispatch, kanban],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form\n schema={KanbanPropsSchema}\n values={{ columnField: kanban.columnField }}\n onSave={({ columnField }) => {\n kanban.columnField = columnField;\n kanban.arrangement = undefined;\n }}\n />\n <ViewEditor\n registry={space.db.schemaRegistry}\n schema={schema}\n view={kanban.cardView.target}\n onTypenameChanged={updateViewTypename}\n onDelete={handleDelete}\n />\n </>\n );\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAIA,OAAOA,YAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;;;ACFzD,OAAOC,SAASC,aAAaC,WAAWC,gBAAgB;AAGxD,SAASC,iBAAiB;AAC1B,SAASC,gCAAgC;AACzC,SAASC,QAAQC,UAAUC,UAAUC,cAAc;AACnD,SAA0BC,gBAAgBC,cAAc;AACxD,SAASC,iBAAiB;;AAEnB,IAAMC,kBAAkB,CAAC,EAAEC,OAAM,MAAwC;AAC9E,QAAM,CAACC,YAAYC,aAAAA,IAAiBb,SAAAA;AACpC,QAAMc,QAAQT,SAASM,MAAAA;AACvBZ,YAAU,MAAA;AACR,QAAIY,OAAOI,YAAYD,OAAO;AAC5BD,oBAAcC,MAAME,GAAGC,eAAeC,UAAUP,OAAOI,SAASI,OAAQC,MAAMC,IAAI,CAAA;IACpF;EACF,GAAG;IAACV,OAAOI;IAAUD;GAAM;AAE3B,QAAMQ,UAAUlB,SAASU,OAAOF,aAAaT,OAAOoB,OAAOX,UAAAA,IAAcT,OAAOqB,QAAO,CAAA;AACvF,QAAMC,kBAAkBvB,yBAAyBoB,OAAAA;AAEjD,QAAMI,QAAQnB,eAAe;IAC3BI;IACAC;IACAe,OAAOF;EACT,CAAA;AAEA,QAAMG,kBAAkB9B,YAAY,CAAC+B,gBAAwBH,OAAOI,eAAeD,WAAAA,GAAc;IAACH;GAAM;AAExG,QAAMK,gBAAgBjC,YACpB,CAAC+B,gBAAAA;AACC,QAAIf,SAASF,YAAY;AACvBE,YAAME,GAAGgB,IACP1B,OAAOM,YAAY;QACjBqB,OAAO;QACPC,aAAa;QACbC,OAAON;MACT,CAAA,CAAA;IAEJ;EACF,GACA;IAACf;IAAOF;GAAW;AAGrB,QAAMwB,mBAAmBtC,YACvB,CAACuC,SAAAA;AACCpC,cAAUa,OAAAA,QAAAA;;;;;;;;;AACVA,UAAME,GAAGsB,OAAOD,IAAAA;EAClB,GACA;IAACvB;GAAM;AAGT,QAAMyB,0BAA0BzC,YAC9B,CAAC+B,gBAAAA;AACCH,WAAOc,4BAA4BX,WAAAA;EACrC,GACA;IAACH;GAAM;AAGT,SACE,sBAAA,cAACjB,UAAUgC,SAAO;IAACC,SAAS;KACzBhB,QACC,sBAAA,cAAClB,QAAAA;IACCkB;IACAiB,WAAWZ;IACXa,aAAahB;IACbiB,cAAcT;IACdU,qBAAqBP;OAGvB,sBAAA,cAACQ,QAAAA,MAAK,SAAA,CAAA;AAId;;;AC1EA,OAAOC,UAASC,eAAAA,cAAaC,aAAAA,YAAWC,SAASC,YAAAA,iBAAgB;AAEjE,SAASC,cAAcC,2BAA2B;AAClD,SAASC,UAAAA,SAAQC,YAAAA,WAAUC,YAAAA,iBAAgB;AAC3C,SAASC,YAAYC,YAAY;AACjC,SAA0BC,yBAAyB;AACnD,SAASC,gBAAgB;AAMlB,IAAMC,mBAAmB,CAAC,EAAEC,OAAM,MAAyB;AAChE,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AACtC,QAAMC,QAAQC,UAASL,MAAAA;AAIvB,QAAM,CAACM,QAAQC,SAAAA,IAAaC,UAC1BJ,SAASJ,QAAQS,UAAUC,QAAQC,OAAOC,OACtCR,MAAMS,GAAGC,eAAeC,UAAUf,OAAOS,SAASC,OAAOC,MAAMC,IAAI,IACnEI,MAAAA;AAGN,QAAMC,QAAQC,UAASd,OAAOe,QAAOb,OAAOc,QAAAA,CAAAA;AAC5C,QAAMC,kBAAkBC,QAAQ,MAAMtB,QAAQS,UAAUC,QAAQC,OAAOC,MAAM;IAACZ,QAAQS,UAAUC,QAAQC,OAAOC;GAAK;AACpH,QAAMW,qBAAqBC,aACzB,CAACC,gBAAAA;AACC,QAAI,CAACnB,QAAQ;AACX;IACF;AACA,UAAMoB,gBAAgBT,MAAMU,OAAO,CAACC,SAASA,KAAKjB,MAAMC,SAASS,eAAAA;AACjE,eAAWO,QAAQF,eAAe;AAChCE,WAAKjB,MAAMC,OAAOa;IACpB;AACAnB,WAAOuB,eAAeJ,WAAAA;EACxB,GACA;IAACR;IAAOX;GAAO;AAGjBwB,EAAAA,WAAU,MAAA;AACR,QAAI1B,SAASJ,QAAQS,UAAUC,QAAQC,OAAOC,MAAM;AAClD,YAAMmB,cAAc3B,MAAMS,GAAGC,eAC1BH,MAAM;QAAEqB,UAAUhC,QAAQS,UAAUC,QAAQC,OAAOC;MAAK,CAAA,EACxDqB,UAAU,CAACtB,UAAAA;AACV,cAAM,CAACL,OAAAA,IAAUK,MAAMuB;AACvB,YAAI5B,SAAQ;AACVC,oBAAUD,OAAAA;QACZ;MACF,CAAA;AAEF,aAAOyB;IACT;EACF,GAAG;IAAC3B;IAAOJ,QAAQS,UAAUC,QAAQC,OAAOC;GAAK;AAEjD,QAAMuB,eAAeX,aACnB,CAACY,YAAoBlC,WAAWmC,aAAaC,aAAaC,iBAAiB;IAAEvC;IAAQoC;EAAQ,CAAA,CAAA,GAC7F;IAAClC;IAAUF;GAAO;AAGpB,MAAI,CAACI,SAAS,CAACE,UAAU,CAACN,OAAOS,UAAUC,QAAQ;AACjD,WAAO;EACT;AAEA,SACE,gBAAA8B,OAAA,cAAAA,OAAA,UAAA,MACE,gBAAAA,OAAA,cAACC,MAAAA;IACCnC,QAAQoC;IACRC,QAAQ;MAAEC,aAAa5C,OAAO4C;IAAY;IAC1CC,QAAQ,CAAC,EAAED,YAAW,MAAE;AACtB5C,aAAO4C,cAAcA;AACrB5C,aAAO8C,cAAc9B;IACvB;MAEF,gBAAAwB,OAAA,cAACO,YAAAA;IACCC,UAAU5C,MAAMS,GAAGC;IACnBR;IACAsB,MAAM5B,OAAOS,SAASC;IACtBuC,mBAAmB1B;IACnB2B,UAAUf;;AAIlB;;;AF1EA,IAAA,wBAAe,MACbgB,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;MAAC;MAAW;;IAClBC,QAAQ,CAACC,SAA0CC,SAASD,KAAKE,OAAO;IACxEC,WAAW,CAAC,EAAEH,MAAMF,KAAI,MAAO,gBAAAM,OAAA,cAACC,iBAAAA;MAAgBC,QAAQN,KAAKE;MAASJ;;EACxE,CAAA;EACAH,cAAc;IACZC,IAAI,GAAGC,aAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAA0CC,SAASD,KAAKE,OAAO;IACxEC,WAAW,CAAC,EAAEH,KAAI,MAAO,gBAAAI,OAAA,cAACG,kBAAAA;MAAiBD,QAAQN,KAAKE;;EAC1D,CAAA;CACD;",
|
|
6
|
-
"names": ["React", "Capabilities", "contributes", "createSurface", "React", "useCallback", "useEffect", "useState", "invariant", "useGlobalFilteredObjects", "Filter", "useQuery", "getSpace", "create", "useKanbanModel", "Kanban", "StackItem", "KanbanContainer", "kanban", "cardSchema", "setCardSchema", "space", "cardView", "db", "schemaRegistry", "getSchema", "target", "query", "type", "objects", "schema", "nothing", "filteredObjects", "model", "items", "handleAddColumn", "columnValue", "addEmptyColumn", "handleAddCard", "add", "title", "description", "state", "handleRemoveCard", "card", "remove", "handleRemoveEmptyColumn", "removeColumnFromArrangement", "Content", "toolbar", "onAddCard", "onAddColumn", "onRemoveCard", "onRemoveEmptyColumn", "span", "React", "useCallback", "useEffect", "useMemo", "useState", "createIntent", "useIntentDispatcher", "Filter", "getSpace", "useQuery", "ViewEditor", "Form", "KanbanPropsSchema", "ViewType", "KanbanViewEditor", "kanban", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "schema", "setSchema", "useState", "cardView", "target", "query", "type", "db", "schemaRegistry", "getSchema", "undefined", "views", "useQuery", "Filter", "ViewType", "currentTypename", "useMemo", "updateViewTypename", "useCallback", "newTypename", "matchingViews", "filter", "view", "updateTypename", "useEffect", "unsubscribe", "typename", "subscribe", "results", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "React", "Form", "KanbanPropsSchema", "values", "columnField", "onSave", "arrangement", "ViewEditor", "registry", "onTypenameChanged", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "filter", "data", "isKanban", "subject", "component", "React", "KanbanContainer", "kanban", "KanbanViewEditor"]
|
|
7
|
-
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var intent_resolver_6QZ6AMZF_exports = {};
|
|
20
|
-
__export(intent_resolver_6QZ6AMZF_exports, {
|
|
21
|
-
default: () => intent_resolver_default
|
|
22
|
-
});
|
|
23
|
-
module.exports = __toCommonJS(intent_resolver_6QZ6AMZF_exports);
|
|
24
|
-
var import_chunk_QCB2U2J2 = require("./chunk-QCB2U2J2.cjs");
|
|
25
|
-
var import_app_framework = require("@dxos/app-framework");
|
|
26
|
-
var import_invariant = require("@dxos/invariant");
|
|
27
|
-
var import_echo = require("@dxos/react-client/echo");
|
|
28
|
-
var import_schema = require("@dxos/schema");
|
|
29
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts";
|
|
30
|
-
var intent_resolver_default = () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.IntentResolver, [
|
|
31
|
-
(0, import_app_framework.createResolver)(import_chunk_QCB2U2J2.KanbanAction.Create, async ({ space }) => ({
|
|
32
|
-
data: {
|
|
33
|
-
object: await (0, import_chunk_QCB2U2J2.createKanban)(space)
|
|
34
|
-
}
|
|
35
|
-
})),
|
|
36
|
-
(0, import_app_framework.createResolver)(import_chunk_QCB2U2J2.KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {
|
|
37
|
-
(0, import_invariant.invariant)(kanban.cardView, void 0, {
|
|
38
|
-
F: __dxlog_file,
|
|
39
|
-
L: 19,
|
|
40
|
-
S: void 0,
|
|
41
|
-
A: [
|
|
42
|
-
"kanban.cardView",
|
|
43
|
-
""
|
|
44
|
-
]
|
|
45
|
-
});
|
|
46
|
-
const schema = kanban.cardView.target && (0, import_echo.getSpace)(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);
|
|
47
|
-
(0, import_invariant.invariant)(schema, void 0, {
|
|
48
|
-
F: __dxlog_file,
|
|
49
|
-
L: 23,
|
|
50
|
-
S: void 0,
|
|
51
|
-
A: [
|
|
52
|
-
"schema",
|
|
53
|
-
""
|
|
54
|
-
]
|
|
55
|
-
});
|
|
56
|
-
const projection = new import_schema.ViewProjection(schema, kanban.cardView.target);
|
|
57
|
-
if (!undo) {
|
|
58
|
-
const { deleted, index } = projection.deleteFieldProjection(fieldId);
|
|
59
|
-
return {
|
|
60
|
-
undoable: {
|
|
61
|
-
message: [
|
|
62
|
-
"card field deleted label",
|
|
63
|
-
{
|
|
64
|
-
ns: import_chunk_QCB2U2J2.KANBAN_PLUGIN
|
|
65
|
-
}
|
|
66
|
-
],
|
|
67
|
-
data: {
|
|
68
|
-
deletionData: {
|
|
69
|
-
...deleted,
|
|
70
|
-
index
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
} else if (undo && deletionData) {
|
|
76
|
-
const { field, props, index } = deletionData;
|
|
77
|
-
projection.setFieldProjection({
|
|
78
|
-
field,
|
|
79
|
-
props
|
|
80
|
-
}, index);
|
|
81
|
-
}
|
|
82
|
-
})
|
|
83
|
-
]);
|
|
84
|
-
//# sourceMappingURL=intent-resolver-6QZ6AMZF.cjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/intent-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, createResolver } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from '../meta';\nimport { createKanban, KanbanAction } from '../types';\n\nexport default () =>\n contributes(Capabilities.IntentResolver, [\n createResolver(KanbanAction.Create, async ({ space }) => ({\n data: { object: await createKanban(space) },\n })),\n createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {\n invariant(kanban.cardView);\n\n const schema =\n kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);\n invariant(schema);\n const projection = new ViewProjection(schema, kanban.cardView.target!);\n\n if (!undo) {\n const { deleted, index } = projection.deleteFieldProjection(fieldId);\n return {\n undoable: {\n message: ['card field deleted label', { ns: KANBAN_PLUGIN }],\n data: { deletionData: { ...deleted, index } },\n },\n };\n } else if (undo && deletionData) {\n const { field, props, index } = deletionData;\n projection.setFieldProjection({ field, props }, index);\n }\n }),\n ]);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA0D;AAC1D,uBAA0B;AAC1B,kBAAyB;AACzB,oBAA+B;;AAK/B,IAAA,0BAAe,UACbA,kCAAYC,kCAAaC,gBAAgB;MACvCC,qCAAeC,mCAAaC,QAAQ,OAAO,EAAEC,MAAK,OAAQ;IACxDC,MAAM;MAAEC,QAAQ,UAAMC,oCAAaH,KAAAA;IAAO;EAC5C,EAAA;MACAH,qCAAeC,mCAAaM,iBAAiB,CAAC,EAAEC,QAAQC,SAASC,aAAY,GAAIC,SAAAA;AAC/EC,oCAAUJ,OAAOK,UAAQ,QAAA;;;;;;;;;AAEzB,UAAMC,SACJN,OAAOK,SAASE,cAAUC,sBAASR,MAAAA,GAASS,GAAGC,eAAeC,UAAUX,OAAOK,SAASE,OAAOK,MAAMC,IAAI;AAC3GT,oCAAUE,QAAAA,QAAAA;;;;;;;;;AACV,UAAMQ,aAAa,IAAIC,6BAAeT,QAAQN,OAAOK,SAASE,MAAM;AAEpE,QAAI,CAACJ,MAAM;AACT,YAAM,EAAEa,SAASC,MAAK,IAAKH,WAAWI,sBAAsBjB,OAAAA;AAC5D,aAAO;QACLkB,UAAU;UACRC,SAAS;YAAC;YAA4B;cAAEC,IAAIC;YAAc;;UAC1D1B,MAAM;YAAEM,cAAc;cAAE,GAAGc;cAASC;YAAM;UAAE;QAC9C;MACF;IACF,WAAWd,QAAQD,cAAc;AAC/B,YAAM,EAAEqB,OAAOC,OAAOP,MAAK,IAAKf;AAChCY,iBAAWW,mBAAmB;QAAEF;QAAOC;MAAM,GAAGP,KAAAA;IAClD;EACF,CAAA;CACD;",
|
|
6
|
-
"names": ["contributes", "Capabilities", "IntentResolver", "createResolver", "KanbanAction", "Create", "space", "data", "object", "createKanban", "DeleteCardField", "kanban", "fieldId", "deletionData", "undo", "invariant", "cardView", "schema", "target", "getSpace", "db", "schemaRegistry", "getSchema", "query", "type", "projection", "ViewProjection", "deleted", "index", "deleteFieldProjection", "undoable", "message", "ns", "KANBAN_PLUGIN", "field", "props", "setFieldProjection"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/KanbanContainer.tsx", "../../../src/components/KanbanViewEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${KANBAN_PLUGIN}/kanban`,\n role: ['article', 'section'],\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/settings`,\n role: 'complementary--settings',\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const [cardSchema, setCardSchema] = useState<EchoSchema>();\n const space = getSpace(kanban);\n useEffect(() => {\n if (kanban.cardView && space) {\n setCardSchema(space.db.schemaRegistry.getSchema(kanban.cardView.target!.query.type));\n }\n }, [kanban.cardView, space]);\n\n const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n const model = useKanbanModel({\n kanban,\n cardSchema,\n items: filteredObjects,\n });\n\n const handleAddColumn = useCallback((columnValue: string) => model?.addEmptyColumn(columnValue), [model]);\n\n const handleAddCard = useCallback(\n (columnValue: string) => {\n if (space && cardSchema) {\n space.db.add(\n create(cardSchema, {\n title: '',\n description: '',\n state: columnValue,\n }),\n );\n }\n },\n [space, cardSchema],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n invariant(space);\n space.db.remove(card);\n },\n [space],\n );\n\n const handleRemoveEmptyColumn = useCallback(\n (columnValue: string) => {\n model?.removeColumnFromArrangement(columnValue);\n },\n [model],\n );\n\n return (\n <StackItem.Content toolbar={false}>\n {model ? (\n <Kanban\n model={model}\n onAddCard={handleAddCard}\n onAddColumn={handleAddColumn}\n onRemoveCard={handleRemoveCard}\n onRemoveEmptyColumn={handleRemoveEmptyColumn}\n />\n ) : (\n <span>Loading</span>\n )}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Filter, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { ViewEditor, Form } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanPropsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\ntype KanbanViewEditorProps = { kanban: KanbanType };\n\nexport const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const space = getSpace(kanban);\n\n // TODO(ZaymonFC): The schema registry needs an API where we can query with initial value and\n // endure typename changes. We shouldn't need to manage a subscription at this layer.\n const [schema, setSchema] = useState(\n space && kanban?.cardView?.target?.query?.type\n ? space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type)\n : undefined,\n );\n\n const views = useQuery(space, Filter.schema(ViewType));\n const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [kanban?.cardView?.target?.query?.type]);\n const updateViewTypename = useCallback(\n (newTypename: string) => {\n if (!schema) {\n return;\n }\n const matchingViews = views.filter((view) => view.query.type === currentTypename);\n for (const view of matchingViews) {\n view.query.type = newTypename;\n }\n schema.updateTypename(newTypename);\n },\n [views, schema],\n );\n\n useEffect(() => {\n if (space && kanban?.cardView?.target?.query?.type) {\n const unsubscribe = space.db.schemaRegistry\n .query({ typename: kanban?.cardView?.target?.query?.type })\n .subscribe((query) => {\n const [schema] = query.results;\n if (schema) {\n setSchema(schema);\n }\n });\n\n return unsubscribe;\n }\n }, [space, kanban?.cardView?.target?.query?.type]);\n\n const handleDelete = useCallback(\n (fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),\n [dispatch, kanban],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form\n schema={KanbanPropsSchema}\n values={{ columnField: kanban.columnField }}\n onSave={({ columnField }) => {\n kanban.columnField = columnField;\n kanban.arrangement = undefined;\n }}\n />\n <ViewEditor\n registry={space.db.schemaRegistry}\n schema={schema}\n view={kanban.cardView.target}\n onTypenameChanged={updateViewTypename}\n onDelete={handleDelete}\n />\n </>\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_react", "import_app_framework", "import_echo", "import_react_ui_kanban", "KanbanContainer", "kanban", "cardSchema", "setCardSchema", "useState", "space", "getSpace", "useEffect", "cardView", "db", "schemaRegistry", "getSchema", "target", "query", "type", "objects", "useQuery", "Filter", "schema", "nothing", "filteredObjects", "useGlobalFilteredObjects", "model", "useKanbanModel", "items", "handleAddColumn", "useCallback", "columnValue", "addEmptyColumn", "handleAddCard", "add", "create", "title", "description", "state", "handleRemoveCard", "card", "invariant", "remove", "handleRemoveEmptyColumn", "removeColumnFromArrangement", "React", "StackItem", "Content", "toolbar", "Kanban", "onAddCard", "onAddColumn", "onRemoveCard", "onRemoveEmptyColumn", "span", "KanbanViewEditor", "dispatchPromise", "dispatch", "useIntentDispatcher", "setSchema", "undefined", "views", "ViewType", "currentTypename", "useMemo", "updateViewTypename", "newTypename", "matchingViews", "filter", "view", "updateTypename", "unsubscribe", "typename", "subscribe", "results", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "Form", "KanbanPropsSchema", "values", "columnField", "onSave", "arrangement", "ViewEditor", "registry", "onTypenameChanged", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "data", "isKanban", "subject", "component"]
|
|
7
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
KANBAN_PLUGIN,
|
|
4
|
-
KanbanAction,
|
|
5
|
-
createKanban
|
|
6
|
-
} from "./chunk-PNSRVZBP.mjs";
|
|
7
|
-
|
|
8
|
-
// packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts
|
|
9
|
-
import { contributes, Capabilities, createResolver } from "@dxos/app-framework";
|
|
10
|
-
import { invariant } from "@dxos/invariant";
|
|
11
|
-
import { getSpace } from "@dxos/react-client/echo";
|
|
12
|
-
import { ViewProjection } from "@dxos/schema";
|
|
13
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-kanban/src/capabilities/intent-resolver.ts";
|
|
14
|
-
var intent_resolver_default = () => contributes(Capabilities.IntentResolver, [
|
|
15
|
-
createResolver(KanbanAction.Create, async ({ space }) => ({
|
|
16
|
-
data: {
|
|
17
|
-
object: await createKanban(space)
|
|
18
|
-
}
|
|
19
|
-
})),
|
|
20
|
-
createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {
|
|
21
|
-
invariant(kanban.cardView, void 0, {
|
|
22
|
-
F: __dxlog_file,
|
|
23
|
-
L: 19,
|
|
24
|
-
S: void 0,
|
|
25
|
-
A: [
|
|
26
|
-
"kanban.cardView",
|
|
27
|
-
""
|
|
28
|
-
]
|
|
29
|
-
});
|
|
30
|
-
const schema = kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);
|
|
31
|
-
invariant(schema, void 0, {
|
|
32
|
-
F: __dxlog_file,
|
|
33
|
-
L: 23,
|
|
34
|
-
S: void 0,
|
|
35
|
-
A: [
|
|
36
|
-
"schema",
|
|
37
|
-
""
|
|
38
|
-
]
|
|
39
|
-
});
|
|
40
|
-
const projection = new ViewProjection(schema, kanban.cardView.target);
|
|
41
|
-
if (!undo) {
|
|
42
|
-
const { deleted, index } = projection.deleteFieldProjection(fieldId);
|
|
43
|
-
return {
|
|
44
|
-
undoable: {
|
|
45
|
-
message: [
|
|
46
|
-
"card field deleted label",
|
|
47
|
-
{
|
|
48
|
-
ns: KANBAN_PLUGIN
|
|
49
|
-
}
|
|
50
|
-
],
|
|
51
|
-
data: {
|
|
52
|
-
deletionData: {
|
|
53
|
-
...deleted,
|
|
54
|
-
index
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
} else if (undo && deletionData) {
|
|
60
|
-
const { field, props, index } = deletionData;
|
|
61
|
-
projection.setFieldProjection({
|
|
62
|
-
field,
|
|
63
|
-
props
|
|
64
|
-
}, index);
|
|
65
|
-
}
|
|
66
|
-
})
|
|
67
|
-
]);
|
|
68
|
-
export {
|
|
69
|
-
intent_resolver_default as default
|
|
70
|
-
};
|
|
71
|
-
//# sourceMappingURL=intent-resolver-LRZVOK2C.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/intent-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, createResolver } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { ViewProjection } from '@dxos/schema';\n\nimport { KANBAN_PLUGIN } from '../meta';\nimport { createKanban, KanbanAction } from '../types';\n\nexport default () =>\n contributes(Capabilities.IntentResolver, [\n createResolver(KanbanAction.Create, async ({ space }) => ({\n data: { object: await createKanban(space) },\n })),\n createResolver(KanbanAction.DeleteCardField, ({ kanban, fieldId, deletionData }, undo) => {\n invariant(kanban.cardView);\n\n const schema =\n kanban.cardView.target && getSpace(kanban)?.db.schemaRegistry.getSchema(kanban.cardView.target.query.type);\n invariant(schema);\n const projection = new ViewProjection(schema, kanban.cardView.target!);\n\n if (!undo) {\n const { deleted, index } = projection.deleteFieldProjection(fieldId);\n return {\n undoable: {\n message: ['card field deleted label', { ns: KANBAN_PLUGIN }],\n data: { deletionData: { ...deleted, index } },\n },\n };\n } else if (undo && deletionData) {\n const { field, props, index } = deletionData;\n projection.setFieldProjection({ field, props }, index);\n }\n }),\n ]);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;AAIA,SAASA,aAAaC,cAAcC,sBAAsB;AAC1D,SAASC,iBAAiB;AAC1B,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;;AAK/B,IAAA,0BAAe,MACbC,YAAYC,aAAaC,gBAAgB;EACvCC,eAAeC,aAAaC,QAAQ,OAAO,EAAEC,MAAK,OAAQ;IACxDC,MAAM;MAAEC,QAAQ,MAAMC,aAAaH,KAAAA;IAAO;EAC5C,EAAA;EACAH,eAAeC,aAAaM,iBAAiB,CAAC,EAAEC,QAAQC,SAASC,aAAY,GAAIC,SAAAA;AAC/EC,cAAUJ,OAAOK,UAAQ,QAAA;;;;;;;;;AAEzB,UAAMC,SACJN,OAAOK,SAASE,UAAUC,SAASR,MAAAA,GAASS,GAAGC,eAAeC,UAAUX,OAAOK,SAASE,OAAOK,MAAMC,IAAI;AAC3GT,cAAUE,QAAAA,QAAAA;;;;;;;;;AACV,UAAMQ,aAAa,IAAIC,eAAeT,QAAQN,OAAOK,SAASE,MAAM;AAEpE,QAAI,CAACJ,MAAM;AACT,YAAM,EAAEa,SAASC,MAAK,IAAKH,WAAWI,sBAAsBjB,OAAAA;AAC5D,aAAO;QACLkB,UAAU;UACRC,SAAS;YAAC;YAA4B;cAAEC,IAAIC;YAAc;;UAC1D1B,MAAM;YAAEM,cAAc;cAAE,GAAGc;cAASC;YAAM;UAAE;QAC9C;MACF;IACF,WAAWd,QAAQD,cAAc;AAC/B,YAAM,EAAEqB,OAAOC,OAAOP,MAAK,IAAKf;AAChCY,iBAAWW,mBAAmB;QAAEF;QAAOC;MAAM,GAAGP,KAAAA;IAClD;EACF,CAAA;CACD;",
|
|
6
|
-
"names": ["contributes", "Capabilities", "createResolver", "invariant", "getSpace", "ViewProjection", "contributes", "Capabilities", "IntentResolver", "createResolver", "KanbanAction", "Create", "space", "data", "object", "createKanban", "DeleteCardField", "kanban", "fieldId", "deletionData", "undo", "invariant", "cardView", "schema", "target", "getSpace", "db", "schemaRegistry", "getSchema", "query", "type", "projection", "ViewProjection", "deleted", "index", "deleteFieldProjection", "undoable", "message", "ns", "KANBAN_PLUGIN", "field", "props", "setFieldProjection"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/KanbanContainer.tsx", "../../../src/components/KanbanViewEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { type KanbanType } from '@dxos/react-ui-kanban';\n\nimport { KanbanContainer, KanbanViewEditor } from '../components';\nimport { KANBAN_PLUGIN } from '../meta';\nimport { isKanban } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${KANBAN_PLUGIN}/kanban`,\n role: ['article', 'section'],\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data, role }) => <KanbanContainer kanban={data.subject} role={role} />,\n }),\n createSurface({\n id: `${KANBAN_PLUGIN}/settings`,\n role: 'complementary--settings',\n filter: (data): data is { subject: KanbanType } => isKanban(data.subject),\n component: ({ data }) => <KanbanViewEditor kanban={data.subject} />,\n }),\n ]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { type EchoSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useGlobalFilteredObjects } from '@dxos/plugin-search';\nimport { Filter, useQuery, getSpace, create } from '@dxos/react-client/echo';\nimport { type KanbanType, useKanbanModel, Kanban } from '@dxos/react-ui-kanban';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nexport const KanbanContainer = ({ kanban }: { kanban: KanbanType; role: string }) => {\n const [cardSchema, setCardSchema] = useState<EchoSchema>();\n const space = getSpace(kanban);\n useEffect(() => {\n if (kanban.cardView && space) {\n setCardSchema(space.db.schemaRegistry.getSchema(kanban.cardView.target!.query.type));\n }\n }, [kanban.cardView, space]);\n\n const objects = useQuery(space, cardSchema ? Filter.schema(cardSchema) : Filter.nothing());\n const filteredObjects = useGlobalFilteredObjects(objects);\n\n const model = useKanbanModel({\n kanban,\n cardSchema,\n items: filteredObjects,\n });\n\n const handleAddColumn = useCallback((columnValue: string) => model?.addEmptyColumn(columnValue), [model]);\n\n const handleAddCard = useCallback(\n (columnValue: string) => {\n if (space && cardSchema) {\n space.db.add(\n create(cardSchema, {\n title: '',\n description: '',\n state: columnValue,\n }),\n );\n }\n },\n [space, cardSchema],\n );\n\n const handleRemoveCard = useCallback(\n (card: { id: string }) => {\n invariant(space);\n space.db.remove(card);\n },\n [space],\n );\n\n const handleRemoveEmptyColumn = useCallback(\n (columnValue: string) => {\n model?.removeColumnFromArrangement(columnValue);\n },\n [model],\n );\n\n return (\n <StackItem.Content toolbar={false}>\n {model ? (\n <Kanban\n model={model}\n onAddCard={handleAddCard}\n onAddColumn={handleAddColumn}\n onRemoveCard={handleRemoveCard}\n onRemoveEmptyColumn={handleRemoveEmptyColumn}\n />\n ) : (\n <span>Loading</span>\n )}\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Filter, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { ViewEditor, Form } from '@dxos/react-ui-form';\nimport { type KanbanType, KanbanPropsSchema } from '@dxos/react-ui-kanban';\nimport { ViewType } from '@dxos/schema';\n\nimport { KanbanAction } from '../types';\n\ntype KanbanViewEditorProps = { kanban: KanbanType };\n\nexport const KanbanViewEditor = ({ kanban }: KanbanViewEditorProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const space = getSpace(kanban);\n\n // TODO(ZaymonFC): The schema registry needs an API where we can query with initial value and\n // endure typename changes. We shouldn't need to manage a subscription at this layer.\n const [schema, setSchema] = useState(\n space && kanban?.cardView?.target?.query?.type\n ? space.db.schemaRegistry.getSchema(kanban.cardView.target.query.type)\n : undefined,\n );\n\n const views = useQuery(space, Filter.schema(ViewType));\n const currentTypename = useMemo(() => kanban?.cardView?.target?.query?.type, [kanban?.cardView?.target?.query?.type]);\n const updateViewTypename = useCallback(\n (newTypename: string) => {\n if (!schema) {\n return;\n }\n const matchingViews = views.filter((view) => view.query.type === currentTypename);\n for (const view of matchingViews) {\n view.query.type = newTypename;\n }\n schema.updateTypename(newTypename);\n },\n [views, schema],\n );\n\n useEffect(() => {\n if (space && kanban?.cardView?.target?.query?.type) {\n const unsubscribe = space.db.schemaRegistry\n .query({ typename: kanban?.cardView?.target?.query?.type })\n .subscribe((query) => {\n const [schema] = query.results;\n if (schema) {\n setSchema(schema);\n }\n });\n\n return unsubscribe;\n }\n }, [space, kanban?.cardView?.target?.query?.type]);\n\n const handleDelete = useCallback(\n (fieldId: string) => dispatch?.(createIntent(KanbanAction.DeleteCardField, { kanban, fieldId })),\n [dispatch, kanban],\n );\n\n if (!space || !schema || !kanban.cardView?.target) {\n return null;\n }\n\n return (\n <>\n <Form\n schema={KanbanPropsSchema}\n values={{ columnField: kanban.columnField }}\n onSave={({ columnField }) => {\n kanban.columnField = columnField;\n kanban.arrangement = undefined;\n }}\n />\n <ViewEditor\n registry={space.db.schemaRegistry}\n schema={schema}\n view={kanban.cardView.target}\n onTypenameChanged={updateViewTypename}\n onDelete={handleDelete}\n />\n </>\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "Capabilities", "contributes", "createSurface", "React", "useCallback", "useEffect", "useState", "invariant", "useGlobalFilteredObjects", "Filter", "useQuery", "getSpace", "create", "useKanbanModel", "Kanban", "StackItem", "KanbanContainer", "kanban", "cardSchema", "setCardSchema", "space", "cardView", "db", "schemaRegistry", "getSchema", "target", "query", "type", "objects", "schema", "nothing", "filteredObjects", "model", "items", "handleAddColumn", "columnValue", "addEmptyColumn", "handleAddCard", "add", "title", "description", "state", "handleRemoveCard", "card", "remove", "handleRemoveEmptyColumn", "removeColumnFromArrangement", "Content", "toolbar", "onAddCard", "onAddColumn", "onRemoveCard", "onRemoveEmptyColumn", "span", "React", "useCallback", "useEffect", "useMemo", "useState", "createIntent", "useIntentDispatcher", "Filter", "getSpace", "useQuery", "ViewEditor", "Form", "KanbanPropsSchema", "ViewType", "KanbanViewEditor", "kanban", "dispatchPromise", "dispatch", "useIntentDispatcher", "space", "getSpace", "schema", "setSchema", "useState", "cardView", "target", "query", "type", "db", "schemaRegistry", "getSchema", "undefined", "views", "useQuery", "Filter", "ViewType", "currentTypename", "useMemo", "updateViewTypename", "useCallback", "newTypename", "matchingViews", "filter", "view", "updateTypename", "useEffect", "unsubscribe", "typename", "subscribe", "results", "handleDelete", "fieldId", "createIntent", "KanbanAction", "DeleteCardField", "React", "Form", "KanbanPropsSchema", "values", "columnField", "onSave", "arrangement", "ViewEditor", "registry", "onTypenameChanged", "onDelete", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "KANBAN_PLUGIN", "role", "filter", "data", "isKanban", "subject", "component", "React", "KanbanContainer", "kanban", "KanbanViewEditor"]
|
|
7
|
-
}
|