Files
colanode/apps/desktop/src/main/handlers/mutations/document-save.ts

65 lines
1.6 KiB
TypeScript
Raw Normal View History

import { MutationHandler, MutationResult } from '@/main/types';
import { DocumentSaveMutationInput } from '@/operations/mutations/document-save';
import { mapContentsToBlocks } from '@/lib/editor';
import { Block } from '@colanode/core';
import { nodeManager } from '@/main/node-manager';
export class DocumentSaveMutationHandler
implements MutationHandler<DocumentSaveMutationInput>
{
async handleMutation(
input: DocumentSaveMutationInput
): Promise<MutationResult<DocumentSaveMutationInput>> {
await nodeManager.updateNode(
input.userId,
2024-10-29 01:59:35 +01:00
input.documentId,
(attributes) => {
if (attributes.type !== 'page' && attributes.type !== 'record') {
throw new Error('Invalid node type');
}
const blocksMap = new Map<string, Block>();
2024-10-29 01:59:35 +01:00
if (attributes.content) {
for (const [key, value] of Object.entries(attributes.content)) {
blocksMap.set(key, value);
}
}
2024-10-28 09:27:08 +01:00
2024-10-29 01:59:35 +01:00
const blocks = mapContentsToBlocks(
input.documentId,
input.content.content ?? [],
blocksMap
2024-10-29 01:59:35 +01:00
);
attributes.content = blocks.reduce(
(acc, block) => {
acc[block.id] = block;
return acc;
},
{} as Record<string, Block>
);
return attributes;
}
2024-10-29 01:59:35 +01:00
);
return {
output: {
2024-10-29 01:59:35 +01:00
success: true,
},
2024-10-29 01:59:35 +01:00
changes: [
{
type: 'workspace',
table: 'nodes',
userId: input.userId,
},
{
type: 'workspace',
table: 'changes',
userId: input.userId,
},
],
};
}
}