From 77a000b30ea390ba11bfb4a1e7d781be4b5f8f4f Mon Sep 17 00:00:00 2001 From: Artem Savchenko Date: Mon, 26 Jan 2026 17:27:20 +0700 Subject: [PATCH 1/2] Reuse one metadata interface Signed-off-by: Artem Savchenko --- .../extension/shortcuts/tablePaste.ts | 14 +------------- .../extension/table/actions/tableUtils.ts | 2 +- .../extension/table/refreshTable.ts | 3 +-- .../extension/table/tableMetadata.ts | 11 +---------- .../view-resources/src/copyAsMarkdownTable.ts | 19 ++----------------- plugins/view-resources/src/index.ts | 1 - plugins/view/src/types.ts | 12 ++++++++++++ 7 files changed, 18 insertions(+), 44 deletions(-) diff --git a/plugins/text-editor-resources/src/components/extension/shortcuts/tablePaste.ts b/plugins/text-editor-resources/src/components/extension/shortcuts/tablePaste.ts index e824bc598f6..d0c11e261ba 100644 --- a/plugins/text-editor-resources/src/components/extension/shortcuts/tablePaste.ts +++ b/plugins/text-editor-resources/src/components/extension/shortcuts/tablePaste.ts @@ -16,19 +16,7 @@ import { markdownToMarkup } from '@hcengineering/text-markdown' import { Extension } from '@tiptap/core' import { Fragment, Node } from '@tiptap/pm/model' import { Plugin } from '@tiptap/pm/state' - -// TableMetadata type - matches the definition in @hcengineering/view-resources -// Defined here to avoid circular dependency (view-resources depends on text-editor-resources) -interface TableMetadata { - version: string - cardClass: string - viewletId?: string - config?: Array> - query?: Record - documentIds: string[] - timestamp: number - workspace?: string -} +import type { TableMetadata } from '@hcengineering/view' export const TableMetadataPasteExtension = Extension.create({ name: 'tableMetadataPaste', diff --git a/plugins/text-editor-resources/src/components/extension/table/actions/tableUtils.ts b/plugins/text-editor-resources/src/components/extension/table/actions/tableUtils.ts index ab9c9f73176..13f6b5796af 100644 --- a/plugins/text-editor-resources/src/components/extension/table/actions/tableUtils.ts +++ b/plugins/text-editor-resources/src/components/extension/table/actions/tableUtils.ts @@ -16,8 +16,8 @@ import { type Node } from '@tiptap/pm/model' import { TableMap } from '@tiptap/pm/tables' import type { Client } from '@hcengineering/core' import { getClient } from '@hcengineering/presentation' +import type { TableMetadata } from '@hcengineering/view' import { buildMarkdownTableFromDocs } from '../refreshTable' -import type { TableMetadata } from '../tableMetadata' /** * Extract markdown string from a ProseMirror table node diff --git a/plugins/text-editor-resources/src/components/extension/table/refreshTable.ts b/plugins/text-editor-resources/src/components/extension/table/refreshTable.ts index a9b2ed7ed17..06567f07188 100644 --- a/plugins/text-editor-resources/src/components/extension/table/refreshTable.ts +++ b/plugins/text-editor-resources/src/components/extension/table/refreshTable.ts @@ -14,8 +14,7 @@ import type { Client, Doc } from '@hcengineering/core' import { getResource } from '@hcengineering/platform' -import view, { type BuildMarkdownTableMetadata } from '@hcengineering/view' -import type { TableMetadata } from './tableMetadata' +import view, { type BuildMarkdownTableMetadata, type TableMetadata } from '@hcengineering/view' /** * Build markdown table string from documents and metadata diff --git a/plugins/text-editor-resources/src/components/extension/table/tableMetadata.ts b/plugins/text-editor-resources/src/components/extension/table/tableMetadata.ts index e0f5d6f5522..7640a9d087c 100644 --- a/plugins/text-editor-resources/src/components/extension/table/tableMetadata.ts +++ b/plugins/text-editor-resources/src/components/extension/table/tableMetadata.ts @@ -13,16 +13,7 @@ // import type { Node } from '@tiptap/pm/model' -import type { BuildMarkdownTableMetadata } from '@hcengineering/view' - -// Extended TableMetadata for text editor storage (includes additional fields for persistence) -export interface TableMetadata extends BuildMarkdownTableMetadata { - version: string - documentIds: string[] - timestamp: number - workspace?: string - originalUrl?: string // Original URL of the page/view where the table was created -} +import type { TableMetadata } from '@hcengineering/view' /** * Extract table metadata from a ProseMirror table node diff --git a/plugins/view-resources/src/copyAsMarkdownTable.ts b/plugins/view-resources/src/copyAsMarkdownTable.ts index 8e252dd4e7d..6f64933b6a5 100644 --- a/plugins/view-resources/src/copyAsMarkdownTable.ts +++ b/plugins/view-resources/src/copyAsMarkdownTable.ts @@ -32,7 +32,8 @@ import viewPlugin, { type Viewlet, type AttributeModel, type BuildModelKey, - type BuildMarkdownTableMetadata + type BuildMarkdownTableMetadata, + type TableMetadata } from '@hcengineering/view' import presentation, { getClient } from '@hcengineering/presentation' import { getName, getPersonByPersonId } from '@hcengineering/contact' @@ -479,22 +480,6 @@ export interface CopyRelationshipTableAsMarkdownProps { query?: DocumentQuery // Original query used to fetch documents } -/** - * Metadata structure for table clipboard data - * Used to preserve query and configuration for refresh/diff functionality - */ -export interface TableMetadata { - version: string // For future compatibility - cardClass: Ref> - viewletId?: Ref - config?: Array - query?: DocumentQuery - documentIds: Array> - timestamp: number - workspace?: string // Optional workspace identifier - originalUrl?: string // Original URL of the page/view where the table was created -} - /** * Build metadata object from props and documents * If viewlet is not provided, tries to find a default viewlet for the class diff --git a/plugins/view-resources/src/index.ts b/plugins/view-resources/src/index.ts index 71176bda35f..46e29c8640a 100644 --- a/plugins/view-resources/src/index.ts +++ b/plugins/view-resources/src/index.ts @@ -225,7 +225,6 @@ export { type CopyRelationshipTableAsMarkdownProps, type RelationshipCellModel, type RelationshipRowModel, - type TableMetadata, type ValueFormatter, registerValueFormatterForClass, registerValueFormatter, diff --git a/plugins/view/src/types.ts b/plugins/view/src/types.ts index 3c07a45cec4..fde684d54b8 100644 --- a/plugins/view/src/types.ts +++ b/plugins/view/src/types.ts @@ -906,3 +906,15 @@ export interface BuildMarkdownTableMetadata { query?: Record | DocumentQuery originalUrl?: string // Original URL of the page/view where the table was created } + +/** + * @public + * Complete table metadata including persistence fields + * Extends BuildMarkdownTableMetadata with additional fields for storage and versioning + */ +export interface TableMetadata extends BuildMarkdownTableMetadata { + version: string // For future compatibility + documentIds: Array> // Document IDs used in the table + timestamp: number // Timestamp when the table was created/updated + workspace?: string // Optional workspace identifier +} From c9e46a5a41360e0c374a57853c91df2edd24e315 Mon Sep 17 00:00:00 2001 From: Artem Savchenko Date: Tue, 27 Jan 2026 11:04:23 +0700 Subject: [PATCH 2/2] Fix imports Signed-off-by: Artem Savchenko --- .../extension/table/actions/OriginalTableDataViewer.svelte | 3 +-- .../components/extension/table/actions/TableDiffViewer.svelte | 2 +- .../extension/table/actions/TableRefreshConfirmation.svelte | 2 +- .../components/extension/table/actions/TableSourceInfo.svelte | 3 +-- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/plugins/text-editor-resources/src/components/extension/table/actions/OriginalTableDataViewer.svelte b/plugins/text-editor-resources/src/components/extension/table/actions/OriginalTableDataViewer.svelte index ceb5408d2a6..972110d318c 100644 --- a/plugins/text-editor-resources/src/components/extension/table/actions/OriginalTableDataViewer.svelte +++ b/plugins/text-editor-resources/src/components/extension/table/actions/OriginalTableDataViewer.svelte @@ -18,9 +18,8 @@ import presentation, { Card } from '@hcengineering/presentation' import textEditor from '@hcengineering/text-editor' import { Component, Loading } from '@hcengineering/ui' - import type { BuildModelKey, Viewlet } from '@hcengineering/view' + import type { BuildModelKey, TableMetadata, Viewlet } from '@hcengineering/view' import { createEventDispatcher } from 'svelte' - import type { TableMetadata } from '../tableMetadata' import TableSourceInfo from './TableSourceInfo.svelte' diff --git a/plugins/text-editor-resources/src/components/extension/table/actions/TableDiffViewer.svelte b/plugins/text-editor-resources/src/components/extension/table/actions/TableDiffViewer.svelte index 6bc051a5e4b..c8d0b2515b1 100644 --- a/plugins/text-editor-resources/src/components/extension/table/actions/TableDiffViewer.svelte +++ b/plugins/text-editor-resources/src/components/extension/table/actions/TableDiffViewer.svelte @@ -18,7 +18,7 @@ import presentation, { Card } from '@hcengineering/presentation' import textEditor from '@hcengineering/text-editor' import { createEventDispatcher } from 'svelte' - import type { TableMetadata } from '../tableMetadata' + import type { TableMetadata } from '@hcengineering/view' import MarkupDiffViewer from '../../../MarkupDiffViewer.svelte' import TableSourceInfo from './TableSourceInfo.svelte' diff --git a/plugins/text-editor-resources/src/components/extension/table/actions/TableRefreshConfirmation.svelte b/plugins/text-editor-resources/src/components/extension/table/actions/TableRefreshConfirmation.svelte index 8becb0d6870..c09804c6ffb 100644 --- a/plugins/text-editor-resources/src/components/extension/table/actions/TableRefreshConfirmation.svelte +++ b/plugins/text-editor-resources/src/components/extension/table/actions/TableRefreshConfirmation.svelte @@ -19,7 +19,7 @@ import textEditor from '@hcengineering/text-editor' import { Button } from '@hcengineering/ui' import { createEventDispatcher } from 'svelte' - import type { TableMetadata } from '../tableMetadata' + import type { TableMetadata } from '@hcengineering/view' import MarkupDiffViewer from '../../../MarkupDiffViewer.svelte' import TableSourceInfo from './TableSourceInfo.svelte' diff --git a/plugins/text-editor-resources/src/components/extension/table/actions/TableSourceInfo.svelte b/plugins/text-editor-resources/src/components/extension/table/actions/TableSourceInfo.svelte index 96b8d9bb6c6..ff2937d43ef 100644 --- a/plugins/text-editor-resources/src/components/extension/table/actions/TableSourceInfo.svelte +++ b/plugins/text-editor-resources/src/components/extension/table/actions/TableSourceInfo.svelte @@ -17,9 +17,8 @@ import core from '@hcengineering/core' import { IconWithEmoji, getClient } from '@hcengineering/presentation' import ui, { Icon, Label } from '@hcengineering/ui' - import view from '@hcengineering/view' + import view, { type TableMetadata } from '@hcengineering/view' import textEditor from '@hcengineering/text-editor' - import type { TableMetadata } from '../tableMetadata' export let metadata: TableMetadata