diff --git a/apps/server/src/core/page/transclusion/spec/transclusion-prosemirror.util.spec.ts b/apps/server/src/core/page/transclusion/spec/transclusion-prosemirror.util.spec.ts index 0685dffc..03070fb5 100644 --- a/apps/server/src/core/page/transclusion/spec/transclusion-prosemirror.util.spec.ts +++ b/apps/server/src/core/page/transclusion/spec/transclusion-prosemirror.util.spec.ts @@ -17,13 +17,13 @@ describe('collectTransclusionsFromPmJson', () => { expect(collectTransclusionsFromPmJson(doc)).toEqual([]); }); - it('extracts a top-level transclusion with id, name and content', () => { + it('extracts a top-level transclusion with id and content', () => { const doc = { type: 'doc', content: [ { type: 'transclusionSource', - attrs: { id: 'abc123', name: 'Pricing' }, + attrs: { id: 'abc123' }, content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Body' }] }], }, ], @@ -31,7 +31,6 @@ describe('collectTransclusionsFromPmJson', () => { const got = collectTransclusionsFromPmJson(doc); expect(got).toHaveLength(1); expect(got[0].transclusionId).toBe('abc123'); - expect(got[0].name).toBe('Pricing'); expect(got[0].content).toEqual({ type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Body' }] }], @@ -53,7 +52,7 @@ describe('collectTransclusionsFromPmJson', () => { type: 'doc', content: [ { type: 'transclusionSource', attrs: { id: 'a' }, content: [{ type: 'paragraph' }] }, - { type: 'transclusionSource', attrs: { id: 'b', name: 'Two' }, content: [{ type: 'paragraph' }] }, + { type: 'transclusionSource', attrs: { id: 'b' }, content: [{ type: 'paragraph' }] }, ], }; const got = collectTransclusionsFromPmJson(doc); @@ -102,13 +101,24 @@ describe('collectTransclusionsFromPmJson', () => { const doc = { type: 'doc', content: [ - { type: 'transclusionSource', attrs: { id: 'dup', name: 'first' }, content: [{ type: 'paragraph' }] }, - { type: 'transclusionSource', attrs: { id: 'dup', name: 'second' }, content: [{ type: 'paragraph' }] }, + { + type: 'transclusionSource', + attrs: { id: 'dup' }, + content: [{ type: 'paragraph', content: [{ type: 'text', text: 'first' }] }], + }, + { + type: 'transclusionSource', + attrs: { id: 'dup' }, + content: [{ type: 'paragraph', content: [{ type: 'text', text: 'second' }] }], + }, ], }; const got = collectTransclusionsFromPmJson(doc); expect(got).toHaveLength(1); - expect(got[0].name).toBe('second'); + expect(got[0].content).toEqual({ + type: 'doc', + content: [{ type: 'paragraph', content: [{ type: 'text', text: 'second' }] }], + }); }); }); diff --git a/apps/server/src/core/page/transclusion/spec/transclusion.service.spec.ts b/apps/server/src/core/page/transclusion/spec/transclusion.service.spec.ts index 4e9423f3..3a05047e 100644 --- a/apps/server/src/core/page/transclusion/spec/transclusion.service.spec.ts +++ b/apps/server/src/core/page/transclusion/spec/transclusion.service.spec.ts @@ -42,7 +42,7 @@ describe('TransclusionService.syncPageTransclusions', () => { content: [ { type: 'transclusionSource', - attrs: { id: 'a', name: 'Hello' }, + attrs: { id: 'a' }, content: [{ type: 'paragraph' }], }, ], @@ -56,7 +56,6 @@ describe('TransclusionService.syncPageTransclusions', () => { expect.objectContaining({ pageId, transclusionId: 'a', - name: 'Hello', }), undefined, ); @@ -64,27 +63,30 @@ describe('TransclusionService.syncPageTransclusions', () => { expect(repo.deleteByPageAndTransclusionIds).not.toHaveBeenCalled(); }); - it('updates transclusions whose name or content changed', async () => { + it('updates transclusions whose content changed', async () => { repo.findByPageId.mockResolvedValue([ { id: 'row1', pageId, transclusionId: 'a', - name: 'Old', content: { type: 'doc', content: [{ type: 'paragraph' }] }, createdAt: new Date(), updatedAt: new Date(), } as any, ]); + const newContent = { + type: 'doc', + content: [ + { type: 'paragraph', content: [{ type: 'text', text: 'X' }] }, + ], + }; const pm = { type: 'doc', content: [ { type: 'transclusionSource', - attrs: { id: 'a', name: 'New' }, - content: [ - { type: 'paragraph', content: [{ type: 'text', text: 'X' }] }, - ], + attrs: { id: 'a' }, + content: newContent.content, }, ], }; @@ -95,12 +97,12 @@ describe('TransclusionService.syncPageTransclusions', () => { expect(repo.update).toHaveBeenCalledWith( pageId, 'a', - expect.objectContaining({ name: 'New' }), + expect.objectContaining({ content: newContent }), undefined, ); }); - it('skips update when name and content are unchanged', async () => { + it('skips update when content is unchanged', async () => { const sameContent = { type: 'doc', content: [{ type: 'paragraph' }], @@ -110,7 +112,6 @@ describe('TransclusionService.syncPageTransclusions', () => { id: 'row1', pageId, transclusionId: 'a', - name: 'Same', content: sameContent, createdAt: new Date(), updatedAt: new Date(), @@ -121,7 +122,7 @@ describe('TransclusionService.syncPageTransclusions', () => { content: [ { type: 'transclusionSource', - attrs: { id: 'a', name: 'Same' }, + attrs: { id: 'a' }, content: sameContent.content, }, ], @@ -139,7 +140,6 @@ describe('TransclusionService.syncPageTransclusions', () => { id: 'r', pageId, transclusionId: 'gone', - name: null, content: { type: 'doc', content: [] }, createdAt: new Date(), updatedAt: new Date(), diff --git a/apps/server/src/core/page/transclusion/transclusion.service.ts b/apps/server/src/core/page/transclusion/transclusion.service.ts index ff2a8cb4..09c4215d 100644 --- a/apps/server/src/core/page/transclusion/transclusion.service.ts +++ b/apps/server/src/core/page/transclusion/transclusion.service.ts @@ -65,7 +65,6 @@ export class TransclusionService { { pageId, transclusionId: d.transclusionId, - name: d.name, content: d.content as any, }, trx, @@ -74,13 +73,12 @@ export class TransclusionService { continue; } - const nameChanged = prev.name !== d.name; const contentChanged = !isDeepStrictEqual(prev.content, d.content); - if (nameChanged || contentChanged) { + if (contentChanged) { await this.pageTransclusionsRepo.update( pageId, d.transclusionId, - { name: d.name, content: d.content as any }, + { content: d.content as any }, trx, ); updated += 1; @@ -226,7 +224,6 @@ export class TransclusionService { rows.push({ pageId: page.id, transclusionId: s.transclusionId, - name: s.name, content: s.content as any, }); } diff --git a/apps/server/src/core/page/transclusion/transclusion.types.ts b/apps/server/src/core/page/transclusion/transclusion.types.ts index ba951d93..240d121b 100644 --- a/apps/server/src/core/page/transclusion/transclusion.types.ts +++ b/apps/server/src/core/page/transclusion/transclusion.types.ts @@ -10,6 +10,5 @@ export type TransclusionLookup = export type TransclusionNodeSnapshot = { transclusionId: string; - name: string | null; content: unknown; }; diff --git a/apps/server/src/core/page/transclusion/utils/transclusion-prosemirror.util.ts b/apps/server/src/core/page/transclusion/utils/transclusion-prosemirror.util.ts index d43c3f82..35e0e0b8 100644 --- a/apps/server/src/core/page/transclusion/utils/transclusion-prosemirror.util.ts +++ b/apps/server/src/core/page/transclusion/utils/transclusion-prosemirror.util.ts @@ -34,13 +34,8 @@ export function collectTransclusionsFromPmJson( if (node.type === TRANSCLUSION_TYPE) { const id = node.attrs?.id; if (typeof id === 'string' && id.length > 0) { - const name = - typeof node.attrs?.name === 'string' && node.attrs.name.length > 0 - ? node.attrs.name - : null; byId.set(id, { transclusionId: id, - name, content: { type: 'doc', content: node.content ?? [] }, }); } diff --git a/apps/server/src/database/migrations/20260501T202258-page-transclusions.ts b/apps/server/src/database/migrations/20260501T202258-page-transclusions.ts index 80e446f8..98126b01 100644 --- a/apps/server/src/database/migrations/20260501T202258-page-transclusions.ts +++ b/apps/server/src/database/migrations/20260501T202258-page-transclusions.ts @@ -10,7 +10,6 @@ export async function up(db: Kysely): Promise { col.notNull().references('pages.id').onDelete('cascade'), ) .addColumn('transclusion_id', 'varchar', (col) => col.notNull()) - .addColumn('name', 'text') .addColumn('content', 'jsonb', (col) => col.notNull()) .addColumn('created_at', 'timestamptz', (col) => col.notNull().defaultTo(sql`now()`), diff --git a/apps/server/src/database/repos/page-transclusions/page-transclusions.repo.ts b/apps/server/src/database/repos/page-transclusions/page-transclusions.repo.ts index f0526c40..8df1ce08 100644 --- a/apps/server/src/database/repos/page-transclusions/page-transclusions.repo.ts +++ b/apps/server/src/database/repos/page-transclusions/page-transclusions.repo.ts @@ -7,7 +7,6 @@ import { PageTransclusion, UpdatablePageTransclusion, } from '@docmost/db/types/entity.types'; -import { sql } from 'kysely'; @Injectable() export class PageTransclusionsRepo { @@ -21,7 +20,6 @@ export class PageTransclusionsRepo { .selectFrom('pageTransclusions') .selectAll() .where('pageId', '=', pageId) - .orderBy(sql`name asc nulls last`) .orderBy('createdAt', 'asc') .execute(); } diff --git a/apps/server/src/database/types/db.d.ts b/apps/server/src/database/types/db.d.ts index 6854a274..3365de0e 100644 --- a/apps/server/src/database/types/db.d.ts +++ b/apps/server/src/database/types/db.d.ts @@ -242,7 +242,6 @@ export interface PageTransclusions { createdAt: Generated; transclusionId: string; id: Generated; - name: string | null; pageId: string; updatedAt: Generated; } diff --git a/packages/editor-ext/src/lib/transclusion/transclusion-source.ts b/packages/editor-ext/src/lib/transclusion/transclusion-source.ts index 76829ca6..f04a3ae1 100644 --- a/packages/editor-ext/src/lib/transclusion/transclusion-source.ts +++ b/packages/editor-ext/src/lib/transclusion/transclusion-source.ts @@ -9,7 +9,6 @@ export interface TransclusionSourceOptions { export interface TransclusionSourceAttributes { id?: string | null; - name?: string | null; } declare module "@tiptap/core" { @@ -18,7 +17,6 @@ declare module "@tiptap/core" { insertTransclusionSource: ( attributes?: TransclusionSourceAttributes, ) => ReturnType; - setTransclusionSourceName: (name: string | null) => ReturnType; toggleTransclusionSource: () => ReturnType; unsyncTransclusionSource: () => ReturnType; }; @@ -48,12 +46,6 @@ export const TransclusionSource = Node.create({ renderHTML: (attrs) => attrs.id ? { "data-id": attrs.id } : {}, }, - name: { - default: null, - parseHTML: (el) => el.getAttribute("data-name"), - renderHTML: (attrs) => - attrs.name ? { "data-name": attrs.name } : {}, - }, }; }, @@ -104,10 +96,6 @@ export const TransclusionSource = Node.create({ return commands.insertContent(node); }, - setTransclusionSourceName: - (name) => - ({ commands }) => - commands.updateAttributes(this.name, { name }), toggleTransclusionSource: () => ({ commands }) =>