@dxos/plugin-kanban 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc
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/README.md +1 -1
- package/dist/lib/neutral/KanbanArticle-NEJ3LNBO.mjs +132 -0
- package/dist/lib/neutral/KanbanArticle-NEJ3LNBO.mjs.map +7 -0
- package/dist/lib/neutral/KanbanPlugin.mjs +36 -0
- package/dist/lib/neutral/KanbanPlugin.mjs.map +7 -0
- package/dist/lib/neutral/KanbanPlugin.node.mjs +27 -0
- package/dist/lib/neutral/KanbanPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/KanbanPlugin.workerd.mjs +21 -0
- package/dist/lib/neutral/KanbanPlugin.workerd.mjs.map +7 -0
- package/dist/lib/neutral/KanbanSettings-G6M47NSK.mjs +83 -0
- package/dist/lib/neutral/KanbanSettings-G6M47NSK.mjs.map +7 -0
- package/dist/lib/neutral/blueprint-definition-FHVIEKTQ.mjs +15 -0
- package/dist/lib/neutral/blueprint-definition-FHVIEKTQ.mjs.map +7 -0
- package/dist/lib/neutral/blueprints/index.mjs +8 -0
- package/dist/lib/neutral/capabilities/index.mjs +19 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6FPBLOS3.mjs +8 -0
- package/dist/lib/neutral/chunk-6FPBLOS3.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-KDPM77BD.mjs +21 -0
- package/dist/lib/neutral/chunk-KDPM77BD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-OQ72EEGU.mjs +254 -0
- package/dist/lib/neutral/chunk-OQ72EEGU.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ZTQW5KQS.mjs +26 -0
- package/dist/lib/neutral/chunk-ZTQW5KQS.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +243 -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/create-object-DKBSI46K.mjs +40 -0
- package/dist/lib/neutral/create-object-DKBSI46K.mjs.map +7 -0
- package/dist/lib/neutral/delete-card-356CBACE.mjs +24 -0
- package/dist/lib/neutral/delete-card-356CBACE.mjs.map +7 -0
- package/dist/lib/neutral/delete-card-field-IRCZL2BR.mjs +42 -0
- package/dist/lib/neutral/delete-card-field-IRCZL2BR.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +432 -0
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +34 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +8 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/migrations-IWBT35UT.mjs +31 -0
- package/dist/lib/neutral/migrations-IWBT35UT.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-B7IW6MXU.mjs +13 -0
- package/dist/lib/neutral/operation-handler-B7IW6MXU.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-QROEHBRW.mjs +93 -0
- package/dist/lib/neutral/react-surface-QROEHBRW.mjs.map +7 -0
- package/dist/lib/neutral/restore-card-P25Y4YSE.mjs +21 -0
- package/dist/lib/neutral/restore-card-P25Y4YSE.mjs.map +7 -0
- package/dist/lib/neutral/restore-card-field-NHR3R4XI.mjs +40 -0
- package/dist/lib/neutral/restore-card-field-NHR3R4XI.mjs.map +7 -0
- package/dist/lib/neutral/testing/index.mjs +60 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +44 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +22 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/lib/neutral/undo-mappings-6CHW6BOF.mjs +42 -0
- package/dist/lib/neutral/undo-mappings-6CHW6BOF.mjs.map +7 -0
- package/dist/types/src/KanbanPlugin.d.ts +3 -1
- package/dist/types/src/KanbanPlugin.d.ts.map +1 -1
- package/dist/types/src/KanbanPlugin.node.d.ts +4 -0
- package/dist/types/src/KanbanPlugin.node.d.ts.map +1 -0
- package/dist/types/src/KanbanPlugin.test.d.ts +2 -0
- package/dist/types/src/KanbanPlugin.test.d.ts.map +1 -0
- package/dist/types/src/KanbanPlugin.workerd.d.ts +4 -0
- package/dist/types/src/KanbanPlugin.workerd.d.ts.map +1 -0
- package/dist/types/src/blueprints/index.d.ts +2 -0
- package/dist/types/src/blueprints/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/kanban-blueprint.d.ts +4 -0
- package/dist/types/src/blueprints/kanban-blueprint.d.ts.map +1 -0
- package/dist/types/src/capabilities/artifact-definition.d.ts +3 -2
- package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -4
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +11 -0
- package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +13 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/migrations.d.ts +6 -0
- package/dist/types/src/capabilities/migrations.d.ts.map +1 -0
- 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 +3 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/undo-mappings.d.ts +5 -0
- package/dist/types/src/capabilities/undo-mappings.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/KanbanBoard.d.ts +37 -0
- package/dist/types/src/components/KanbanBoard/KanbanBoard.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/KanbanBoard.stories.d.ts +72 -0
- package/dist/types/src/components/KanbanBoard/KanbanBoard.stories.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/KanbanCard.d.ts +9 -0
- package/dist/types/src/components/KanbanBoard/KanbanCard.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/KanbanColumn.d.ts +8 -0
- package/dist/types/src/components/KanbanBoard/KanbanColumn.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/context.d.ts +38 -0
- package/dist/types/src/components/KanbanBoard/context.d.ts.map +1 -0
- package/dist/types/src/components/KanbanBoard/index.d.ts +2 -0
- package/dist/types/src/components/KanbanBoard/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/KanbanArticle/KanbanArticle.d.ts +6 -0
- package/dist/types/src/containers/KanbanArticle/KanbanArticle.d.ts.map +1 -0
- package/dist/types/src/containers/KanbanArticle/KanbanArticle.stories.d.ts +79 -0
- package/dist/types/src/containers/KanbanArticle/KanbanArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/KanbanArticle/index.d.ts +2 -0
- package/dist/types/src/containers/KanbanArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/KanbanSettings/KanbanSettings.d.ts +13 -0
- package/dist/types/src/containers/KanbanSettings/KanbanSettings.d.ts.map +1 -0
- package/dist/types/src/containers/KanbanSettings/index.d.ts +2 -0
- package/dist/types/src/containers/KanbanSettings/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +4 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +7 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useEchoChangeCallback.d.ts +13 -0
- package/dist/types/src/hooks/useEchoChangeCallback.d.ts.map +1 -0
- package/dist/types/src/hooks/useItemsProjection.d.ts +10 -0
- package/dist/types/src/hooks/useItemsProjection.d.ts.map +1 -0
- package/dist/types/src/hooks/useKanbanBoardModel.browser.test.d.ts +2 -0
- package/dist/types/src/hooks/useKanbanBoardModel.browser.test.d.ts.map +1 -0
- package/dist/types/src/hooks/useKanbanBoardModel.d.ts +16 -0
- package/dist/types/src/hooks/useKanbanBoardModel.d.ts.map +1 -0
- package/dist/types/src/hooks/useKanbanColumnEventHandler.d.ts +22 -0
- package/dist/types/src/hooks/useKanbanColumnEventHandler.d.ts.map +1 -0
- package/dist/types/src/hooks/useKanbanItemEventHandler.d.ts +19 -0
- package/dist/types/src/hooks/useKanbanItemEventHandler.d.ts.map +1 -0
- package/dist/types/src/hooks/useProjectionModel.d.ts +15 -0
- package/dist/types/src/hooks/useProjectionModel.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/delete-card-field.d.ts +5 -0
- package/dist/types/src/operations/delete-card-field.d.ts.map +1 -0
- package/dist/types/src/operations/delete-card.d.ts +5 -0
- package/dist/types/src/operations/delete-card.d.ts.map +1 -0
- 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/restore-card-field.d.ts +5 -0
- package/dist/types/src/operations/restore-card-field.d.ts.map +1 -0
- package/dist/types/src/operations/restore-card.d.ts +5 -0
- package/dist/types/src/operations/restore-card.d.ts.map +1 -0
- package/dist/types/src/playwright/board-manager.d.ts +5 -0
- package/dist/types/src/playwright/board-manager.d.ts.map +1 -0
- package/dist/types/src/playwright/playwright.config.d.ts +3 -0
- package/dist/types/src/playwright/playwright.config.d.ts.map +1 -0
- package/dist/types/src/playwright/smoke.spec.d.ts +2 -0
- package/dist/types/src/playwright/smoke.spec.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/testing/KanbanCardTileSimple.d.ts +7 -0
- package/dist/types/src/testing/KanbanCardTileSimple.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +2 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +50 -22
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/Kanban.d.ts +108 -0
- package/dist/types/src/types/Kanban.d.ts.map +1 -0
- package/dist/types/src/types/KanbanOperation.d.ts +52 -0
- package/dist/types/src/types/KanbanOperation.d.ts.map +1 -0
- package/dist/types/src/types/constants.d.ts +6 -0
- package/dist/types/src/types/constants.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +3 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/migrations.test.d.ts +2 -0
- package/dist/types/src/types/migrations.test.d.ts.map +1 -0
- package/dist/types/src/types/schema.d.ts +17 -51
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +28 -0
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util/arrangement.d.ts +72 -0
- package/dist/types/src/util/arrangement.d.ts.map +1 -0
- package/dist/types/src/util/arrangement.test.d.ts +2 -0
- package/dist/types/src/util/arrangement.test.d.ts.map +1 -0
- package/dist/types/src/util/index.d.ts +2 -0
- package/dist/types/src/util/index.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +123 -57
- package/src/KanbanPlugin.node.ts +21 -0
- package/src/KanbanPlugin.test.ts +31 -0
- package/src/KanbanPlugin.tsx +28 -56
- package/src/KanbanPlugin.workerd.ts +18 -0
- package/src/blueprints/index.ts +5 -0
- package/src/blueprints/kanban-blueprint.ts +27 -0
- package/src/capabilities/artifact-definition.ts +116 -114
- package/src/capabilities/blueprint-definition.ts +13 -24
- package/src/capabilities/create-object.ts +40 -0
- package/src/capabilities/index.ts +12 -4
- package/src/capabilities/migrations.ts +35 -0
- package/src/capabilities/operation-handler.ts +14 -0
- package/src/capabilities/react-surface.tsx +77 -67
- package/src/capabilities/undo-mappings.ts +34 -0
- package/src/components/KanbanBoard/KanbanBoard.stories.tsx +145 -0
- package/src/components/KanbanBoard/KanbanBoard.tsx +164 -0
- package/src/components/KanbanBoard/KanbanCard.tsx +101 -0
- package/src/components/KanbanBoard/KanbanColumn.tsx +72 -0
- package/src/components/KanbanBoard/context.ts +54 -0
- package/src/components/KanbanBoard/index.ts +5 -0
- package/src/components/index.ts +1 -2
- package/src/containers/KanbanArticle/KanbanArticle.stories.tsx +276 -0
- package/src/containers/KanbanArticle/KanbanArticle.tsx +178 -0
- package/src/containers/KanbanArticle/index.ts +5 -0
- package/src/containers/KanbanSettings/KanbanSettings.tsx +94 -0
- package/src/containers/KanbanSettings/index.ts +5 -0
- package/src/containers/index.ts +8 -0
- package/src/hooks/index.ts +10 -0
- package/src/hooks/useEchoChangeCallback.ts +30 -0
- package/src/hooks/useItemsProjection.ts +44 -0
- package/src/hooks/useKanbanBoardModel.browser.test.ts +234 -0
- package/src/hooks/useKanbanBoardModel.ts +157 -0
- package/src/hooks/useKanbanColumnEventHandler.ts +106 -0
- package/src/hooks/useKanbanItemEventHandler.ts +133 -0
- package/src/hooks/useProjectionModel.ts +58 -0
- package/src/index.ts +3 -2
- package/src/meta.ts +3 -3
- package/src/operations/delete-card-field.ts +47 -0
- package/src/operations/delete-card.ts +23 -0
- package/src/operations/index.ts +10 -0
- package/src/operations/restore-card-field.ts +41 -0
- package/src/operations/restore-card.ts +21 -0
- package/src/playwright/board-manager.ts +13 -0
- package/src/playwright/playwright.config.ts +19 -0
- package/src/playwright/smoke.spec.ts +107 -0
- package/src/plugin.ts +11 -0
- package/src/testing/KanbanCardTileSimple.tsx +82 -0
- package/src/testing/index.ts +5 -0
- package/src/translations.ts +28 -20
- package/src/types/Kanban.ts +150 -0
- package/src/types/KanbanOperation.ts +67 -0
- package/src/types/constants.ts +9 -0
- package/src/types/index.ts +4 -0
- package/src/types/migrations.test.ts +82 -0
- package/src/types/schema.ts +32 -44
- package/src/types/types.ts +35 -0
- package/src/util/arrangement.test.ts +217 -0
- package/src/util/arrangement.ts +177 -0
- package/src/util/index.ts +5 -0
- package/dist/lib/browser/blueprint-definition-UYVX622Q.mjs +0 -28
- package/dist/lib/browser/blueprint-definition-UYVX622Q.mjs.map +0 -7
- package/dist/lib/browser/chunk-3UDST345.mjs +0 -85
- package/dist/lib/browser/chunk-3UDST345.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/intent-resolver-VVBNS2TO.mjs +0 -111
- package/dist/lib/browser/intent-resolver-VVBNS2TO.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/react-surface-FNXJ6VJX.mjs +0 -255
- package/dist/lib/browser/react-surface-FNXJ6VJX.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -11
- package/dist/lib/node-esm/blueprint-definition-42P47FUY.mjs +0 -30
- package/dist/lib/node-esm/blueprint-definition-42P47FUY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JBOARUAT.mjs +0 -87
- package/dist/lib/node-esm/chunk-JBOARUAT.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -106
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-ACN7UALP.mjs +0 -112
- package/dist/lib/node-esm/intent-resolver-ACN7UALP.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/react-surface-ZHYHCV5N.mjs +0 -256
- package/dist/lib/node-esm/react-surface-ZHYHCV5N.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -12
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/components/KanbanContainer.d.ts +0 -7
- package/dist/types/src/components/KanbanContainer.d.ts.map +0 -1
- package/dist/types/src/components/KanbanContainer.stories.d.ts +0 -41
- package/dist/types/src/components/KanbanContainer.stories.d.ts.map +0 -1
- package/dist/types/src/components/KanbanViewEditor.d.ts +0 -8
- package/dist/types/src/components/KanbanViewEditor.d.ts.map +0 -1
- package/src/capabilities/intent-resolver.ts +0 -71
- package/src/components/KanbanContainer.stories.tsx +0 -193
- package/src/components/KanbanContainer.tsx +0 -95
- package/src/components/KanbanViewEditor.tsx +0 -64
- /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
- /package/dist/lib/{node-esm/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
-
import React, { useCallback, useEffect, useState } from 'react';
|
|
7
|
-
|
|
8
|
-
import { IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
|
|
9
|
-
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
|
-
import { Obj, type QueryAST, Type } from '@dxos/echo';
|
|
11
|
-
import { invariant } from '@dxos/invariant';
|
|
12
|
-
import { ClientPlugin } from '@dxos/plugin-client';
|
|
13
|
-
import { PreviewPlugin } from '@dxos/plugin-preview';
|
|
14
|
-
import { useGlobalFilteredObjects } from '@dxos/plugin-search';
|
|
15
|
-
import { SpacePlugin } from '@dxos/plugin-space';
|
|
16
|
-
import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
|
|
17
|
-
import { ThemePlugin } from '@dxos/plugin-theme';
|
|
18
|
-
import { faker } from '@dxos/random';
|
|
19
|
-
import { useClient } from '@dxos/react-client';
|
|
20
|
-
import { Filter, useQuery, useSchema, useSpaces } from '@dxos/react-client/echo';
|
|
21
|
-
import { withTheme } from '@dxos/react-ui/testing';
|
|
22
|
-
import { ViewEditor } from '@dxos/react-ui-form';
|
|
23
|
-
import { Kanban as KanbanComponent, useKanbanModel } from '@dxos/react-ui-kanban';
|
|
24
|
-
import { Kanban } from '@dxos/react-ui-kanban/types';
|
|
25
|
-
import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
|
|
26
|
-
import { defaultTx } from '@dxos/react-ui-theme';
|
|
27
|
-
import { DataType, ProjectionModel, getTypenameFromQuery } from '@dxos/schema';
|
|
28
|
-
|
|
29
|
-
import { translations } from '../translations';
|
|
30
|
-
|
|
31
|
-
faker.seed(0);
|
|
32
|
-
|
|
33
|
-
//
|
|
34
|
-
// Story components.
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
const rollOrg = () => ({
|
|
38
|
-
name: faker.commerce.productName(),
|
|
39
|
-
description: faker.lorem.paragraph(),
|
|
40
|
-
image: faker.image.url(),
|
|
41
|
-
website: faker.internet.url(),
|
|
42
|
-
status: faker.helpers.arrayElement(DataType.OrganizationStatusOptions).id as DataType.Organization['status'],
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
const StorybookKanban = () => {
|
|
46
|
-
const client = useClient();
|
|
47
|
-
const spaces = useSpaces();
|
|
48
|
-
const space = spaces[spaces.length - 1];
|
|
49
|
-
const views = useQuery(space, Filter.type(DataType.View));
|
|
50
|
-
const [view, setView] = useState<DataType.View>();
|
|
51
|
-
const [projection, setProjection] = useState<ProjectionModel>();
|
|
52
|
-
const typename = view?.query ? getTypenameFromQuery(view.query.ast) : undefined;
|
|
53
|
-
const schema = useSchema(client, space, typename);
|
|
54
|
-
|
|
55
|
-
useEffect(() => {
|
|
56
|
-
if (views.length && !view) {
|
|
57
|
-
const view = views[0];
|
|
58
|
-
setView(view);
|
|
59
|
-
}
|
|
60
|
-
}, [views]);
|
|
61
|
-
|
|
62
|
-
useEffect(() => {
|
|
63
|
-
if (view?.projection && schema) {
|
|
64
|
-
const jsonSchema = Type.toJsonSchema(schema);
|
|
65
|
-
setProjection(new ProjectionModel(jsonSchema, view.projection));
|
|
66
|
-
}
|
|
67
|
-
// TODO(ZaymonFC): Is there a better way to get notified about deep changes in the json schema?
|
|
68
|
-
// @dmaretskyi? Once resolved, update in multiple places (e.g., storybooks).
|
|
69
|
-
}, [view?.projection, schema, JSON.stringify(schema ? Type.toJsonSchema(schema) : {})]);
|
|
70
|
-
|
|
71
|
-
const objects = useQuery(space, schema ? Filter.type(schema) : Filter.nothing());
|
|
72
|
-
const filteredObjects = useGlobalFilteredObjects(objects);
|
|
73
|
-
|
|
74
|
-
const model = useKanbanModel({
|
|
75
|
-
view,
|
|
76
|
-
schema,
|
|
77
|
-
projection,
|
|
78
|
-
items: filteredObjects,
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
const handleAddCard = useCallback(
|
|
82
|
-
(columnValue: string | undefined) => {
|
|
83
|
-
const path = model?.columnFieldPath;
|
|
84
|
-
if (space && schema && path) {
|
|
85
|
-
const card = Obj.make(schema, {
|
|
86
|
-
...rollOrg(),
|
|
87
|
-
[path]: columnValue,
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
space.db.add(card);
|
|
91
|
-
return card.id;
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
[space, schema, model],
|
|
95
|
-
);
|
|
96
|
-
|
|
97
|
-
const handleRemoveCard = useCallback((card: { id: string }) => space.db.remove(card), [space]);
|
|
98
|
-
|
|
99
|
-
const handleUpdateQuery = useCallback(
|
|
100
|
-
(newQuery: QueryAST.Query) => {
|
|
101
|
-
invariant(schema);
|
|
102
|
-
invariant(Type.isMutable(schema));
|
|
103
|
-
invariant(view);
|
|
104
|
-
|
|
105
|
-
schema.updateTypename(getTypenameFromQuery(newQuery));
|
|
106
|
-
view.query.ast = newQuery;
|
|
107
|
-
},
|
|
108
|
-
[view, schema],
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
if (!schema || !view) {
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return (
|
|
116
|
-
<div className='grow grid grid-cols-[1fr_350px]'>
|
|
117
|
-
{model ? <KanbanComponent model={model} onAddCard={handleAddCard} onRemoveCard={handleRemoveCard} /> : <div />}
|
|
118
|
-
<div className='flex flex-col bs-full border-is border-separator overflow-y-auto'>
|
|
119
|
-
<ViewEditor
|
|
120
|
-
registry={space?.db.schemaRegistry}
|
|
121
|
-
schema={schema}
|
|
122
|
-
view={view}
|
|
123
|
-
onQueryChanged={handleUpdateQuery}
|
|
124
|
-
onDelete={(fieldId: string) => {
|
|
125
|
-
console.log('[ViewEditor]', 'onDelete', fieldId);
|
|
126
|
-
}}
|
|
127
|
-
/>
|
|
128
|
-
<SyntaxHighlighter language='json' className='text-xs'>
|
|
129
|
-
{JSON.stringify({ view, schema }, null, 2)}
|
|
130
|
-
</SyntaxHighlighter>
|
|
131
|
-
</div>
|
|
132
|
-
</div>
|
|
133
|
-
);
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
type StoryProps = {
|
|
137
|
-
rows?: number;
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
//
|
|
141
|
-
// Story definitions.
|
|
142
|
-
//
|
|
143
|
-
|
|
144
|
-
const meta = {
|
|
145
|
-
title: 'plugins/plugin-kanban/Kanban',
|
|
146
|
-
component: StorybookKanban,
|
|
147
|
-
render: () => <StorybookKanban />,
|
|
148
|
-
decorators: [
|
|
149
|
-
withTheme,
|
|
150
|
-
withPluginManager({
|
|
151
|
-
plugins: [
|
|
152
|
-
ClientPlugin({
|
|
153
|
-
types: [DataType.Organization, DataType.Person, DataType.View, Kanban.Kanban],
|
|
154
|
-
onClientInitialized: async ({ client }) => {
|
|
155
|
-
await client.halo.createIdentity();
|
|
156
|
-
const space = await client.spaces.create();
|
|
157
|
-
await space.waitUntilReady();
|
|
158
|
-
const { view } = await Kanban.makeView({
|
|
159
|
-
client,
|
|
160
|
-
space,
|
|
161
|
-
typename: DataType.Organization.typename,
|
|
162
|
-
pivotFieldName: 'status',
|
|
163
|
-
});
|
|
164
|
-
space.db.add(view);
|
|
165
|
-
|
|
166
|
-
// TODO(burdon): Replace with sdk/schema/testing.
|
|
167
|
-
Array.from({ length: 80 }).map(() => {
|
|
168
|
-
return space.db.add(Obj.make(DataType.Organization, rollOrg()));
|
|
169
|
-
});
|
|
170
|
-
},
|
|
171
|
-
}),
|
|
172
|
-
SpacePlugin({}),
|
|
173
|
-
IntentPlugin(),
|
|
174
|
-
SettingsPlugin(),
|
|
175
|
-
|
|
176
|
-
// UI
|
|
177
|
-
ThemePlugin({ tx: defaultTx }),
|
|
178
|
-
PreviewPlugin(),
|
|
179
|
-
StorybookLayoutPlugin({}),
|
|
180
|
-
],
|
|
181
|
-
}),
|
|
182
|
-
],
|
|
183
|
-
parameters: {
|
|
184
|
-
layout: 'fullscreen',
|
|
185
|
-
translations,
|
|
186
|
-
},
|
|
187
|
-
} satisfies Meta<typeof StorybookKanban>;
|
|
188
|
-
|
|
189
|
-
export default meta;
|
|
190
|
-
|
|
191
|
-
type Story = StoryObj<typeof meta>;
|
|
192
|
-
|
|
193
|
-
export const Default: Story = {};
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2024 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
6
|
-
|
|
7
|
-
import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
|
|
8
|
-
import { Filter, Obj, Type } from '@dxos/echo';
|
|
9
|
-
import { EchoSchema, type TypedObject } from '@dxos/echo/internal';
|
|
10
|
-
import { useGlobalFilteredObjects } from '@dxos/plugin-search';
|
|
11
|
-
import { useClient } from '@dxos/react-client';
|
|
12
|
-
import { getSpace, useQuery } from '@dxos/react-client/echo';
|
|
13
|
-
import { Kanban, useKanbanModel } from '@dxos/react-ui-kanban';
|
|
14
|
-
import { StackItem } from '@dxos/react-ui-stack';
|
|
15
|
-
import { type DataType, ProjectionModel, getTypenameFromQuery } from '@dxos/schema';
|
|
16
|
-
|
|
17
|
-
import { KanbanAction } from '../types';
|
|
18
|
-
|
|
19
|
-
export const KanbanContainer = ({ view }: { view: DataType.View; role: string }) => {
|
|
20
|
-
const client = useClient();
|
|
21
|
-
const [cardSchema, setCardSchema] = useState<TypedObject<any, any>>();
|
|
22
|
-
const [projection, setProjection] = useState<ProjectionModel>();
|
|
23
|
-
const space = getSpace(view);
|
|
24
|
-
const { dispatchPromise: dispatch } = useIntentDispatcher();
|
|
25
|
-
const typename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;
|
|
26
|
-
|
|
27
|
-
const jsonSchema = useMemo(() => {
|
|
28
|
-
if (!cardSchema) {
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
return cardSchema instanceof EchoSchema ? cardSchema.jsonSchema : Type.toJsonSchema(cardSchema);
|
|
32
|
-
}, [cardSchema]);
|
|
33
|
-
|
|
34
|
-
useEffect(() => {
|
|
35
|
-
const staticSchema = client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename);
|
|
36
|
-
if (staticSchema) {
|
|
37
|
-
setCardSchema(() => staticSchema as TypedObject<any, any>);
|
|
38
|
-
}
|
|
39
|
-
if (!staticSchema && typename && space) {
|
|
40
|
-
const query = space.db.schemaRegistry.query({ typename });
|
|
41
|
-
const unsubscribe = query.subscribe(
|
|
42
|
-
() => {
|
|
43
|
-
const [schema] = query.results;
|
|
44
|
-
if (schema) {
|
|
45
|
-
setCardSchema(schema);
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
{ fire: true },
|
|
49
|
-
);
|
|
50
|
-
return unsubscribe;
|
|
51
|
-
}
|
|
52
|
-
}, [typename, space]);
|
|
53
|
-
|
|
54
|
-
useEffect(() => {
|
|
55
|
-
if (jsonSchema) {
|
|
56
|
-
setProjection(new ProjectionModel(jsonSchema, view.projection));
|
|
57
|
-
}
|
|
58
|
-
// TODO(ZaymonFC): Is there a better way to get notified about deep changes in the json schema?
|
|
59
|
-
}, [view.projection, JSON.stringify(jsonSchema)]);
|
|
60
|
-
|
|
61
|
-
const objects = useQuery(space, cardSchema ? Filter.type(cardSchema) : Filter.nothing());
|
|
62
|
-
const filteredObjects = useGlobalFilteredObjects(objects);
|
|
63
|
-
|
|
64
|
-
const model = useKanbanModel({
|
|
65
|
-
view,
|
|
66
|
-
schema: cardSchema,
|
|
67
|
-
projection,
|
|
68
|
-
items: filteredObjects,
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
const handleAddCard = useCallback(
|
|
72
|
-
(columnValue: string | undefined) => {
|
|
73
|
-
const path = model?.columnFieldPath;
|
|
74
|
-
if (space && cardSchema && path) {
|
|
75
|
-
const card = Obj.make(cardSchema, { [path]: columnValue });
|
|
76
|
-
space.db.add(card);
|
|
77
|
-
return card.id;
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
[space, cardSchema, model],
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
const handleRemoveCard = useCallback(
|
|
84
|
-
(card: { id: string }) => {
|
|
85
|
-
void dispatch(createIntent(KanbanAction.DeleteCard, { card }));
|
|
86
|
-
},
|
|
87
|
-
[dispatch],
|
|
88
|
-
);
|
|
89
|
-
|
|
90
|
-
return (
|
|
91
|
-
<StackItem.Content>
|
|
92
|
-
{model && <Kanban model={model} onAddCard={handleAddCard} onRemoveCard={handleRemoveCard} />}
|
|
93
|
-
</StackItem.Content>
|
|
94
|
-
);
|
|
95
|
-
};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import React, { useCallback, useMemo } from 'react';
|
|
6
|
-
|
|
7
|
-
import { Type } from '@dxos/echo';
|
|
8
|
-
import { EchoSchema, FormatEnum } from '@dxos/echo/internal';
|
|
9
|
-
import { useClient } from '@dxos/react-client';
|
|
10
|
-
import { getSpace, useSchema } from '@dxos/react-client/echo';
|
|
11
|
-
import { type CustomInputMap, Form, SelectInput } from '@dxos/react-ui-form';
|
|
12
|
-
import { Kanban } from '@dxos/react-ui-kanban/types';
|
|
13
|
-
import { type DataType, ProjectionModel, getTypenameFromQuery } from '@dxos/schema';
|
|
14
|
-
|
|
15
|
-
type KanbanViewEditorProps = { view: DataType.View };
|
|
16
|
-
|
|
17
|
-
export const KanbanViewEditor = ({ view }: KanbanViewEditorProps) => {
|
|
18
|
-
const client = useClient();
|
|
19
|
-
const space = getSpace(view);
|
|
20
|
-
const currentTypename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;
|
|
21
|
-
const schema = useSchema(client, space, currentTypename);
|
|
22
|
-
|
|
23
|
-
const projection = useMemo(() => {
|
|
24
|
-
if (schema) {
|
|
25
|
-
const jsonSchema = schema instanceof EchoSchema ? schema.jsonSchema : Type.toJsonSchema(schema);
|
|
26
|
-
const projection = new ProjectionModel(jsonSchema, view.projection);
|
|
27
|
-
projection.normalizeView();
|
|
28
|
-
return projection;
|
|
29
|
-
}
|
|
30
|
-
}, [view.projection, JSON.stringify(schema)]);
|
|
31
|
-
|
|
32
|
-
const fieldProjections = projection?.getFieldProjections() || [];
|
|
33
|
-
const selectFields = fieldProjections
|
|
34
|
-
.filter((field) => field.props.format === FormatEnum.SingleSelect)
|
|
35
|
-
.map(({ field }) => ({ value: field.id, label: field.path }));
|
|
36
|
-
|
|
37
|
-
const handleSave = useCallback(
|
|
38
|
-
(values: Partial<{ columnFieldId: string }>) => {
|
|
39
|
-
view.projection.pivotFieldId = values.columnFieldId;
|
|
40
|
-
},
|
|
41
|
-
[view],
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
const initialValues = useMemo(
|
|
45
|
-
() => ({ columnFieldId: view.projection.pivotFieldId }),
|
|
46
|
-
[view.projection.pivotFieldId],
|
|
47
|
-
);
|
|
48
|
-
const custom: CustomInputMap = useMemo(
|
|
49
|
-
() => ({ columnFieldId: (props) => <SelectInput {...props} options={selectFields} /> }),
|
|
50
|
-
[selectFields],
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
return (
|
|
54
|
-
<Form
|
|
55
|
-
Custom={custom}
|
|
56
|
-
schema={Kanban.SettingsSchema}
|
|
57
|
-
values={initialValues}
|
|
58
|
-
onSave={handleSave}
|
|
59
|
-
autoSave
|
|
60
|
-
outerSpacing={false}
|
|
61
|
-
classNames='pbs-inputSpacingBlock'
|
|
62
|
-
/>
|
|
63
|
-
);
|
|
64
|
-
};
|
|
File without changes
|
|
File without changes
|