mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-17 10:06:17 +08:00
c28f918527
Part of: [BS-2269](https://linear.app/affine-design/issue/BS-2269/%E8%BF%81%E7%A7%BB-database-block-%E5%88%B0-affine-%E6%96%87%E4%BB%B6%E5%A4%B9%E4%B8%8B%E5%B9%B6%E5%BC%80%E5%90%AF-nouncheckedindexedaccess)
60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
import {
|
|
type DatabaseBlockModel,
|
|
DatabaseBlockSchema,
|
|
} from '@blocksuite/affine-model';
|
|
import { BlockService } from '@blocksuite/block-std';
|
|
import { viewPresets } from '@blocksuite/data-view/view-presets';
|
|
import type { BlockModel, Doc } from '@blocksuite/store';
|
|
|
|
import {
|
|
databaseViewAddView,
|
|
databaseViewInitEmpty,
|
|
databaseViewInitTemplate,
|
|
} from './data-source.js';
|
|
import {
|
|
addProperty,
|
|
applyPropertyUpdate,
|
|
updateCell,
|
|
updateView,
|
|
} from './utils/block-utils.js';
|
|
|
|
export class DatabaseBlockService extends BlockService {
|
|
static override readonly flavour = DatabaseBlockSchema.model.flavour;
|
|
|
|
addColumn = addProperty;
|
|
|
|
applyColumnUpdate = applyPropertyUpdate;
|
|
|
|
databaseViewAddView = databaseViewAddView;
|
|
|
|
databaseViewInitEmpty = databaseViewInitEmpty;
|
|
|
|
updateCell = updateCell;
|
|
|
|
updateView = updateView;
|
|
|
|
viewPresets = viewPresets;
|
|
|
|
initDatabaseBlock(
|
|
doc: Doc,
|
|
model: BlockModel,
|
|
databaseId: string,
|
|
viewType: string,
|
|
isAppendNewRow = true
|
|
) {
|
|
const blockModel = doc.getBlock(databaseId)?.model as
|
|
| DatabaseBlockModel
|
|
| undefined;
|
|
if (!blockModel) {
|
|
return;
|
|
}
|
|
databaseViewInitTemplate(blockModel, viewType);
|
|
if (isAppendNewRow) {
|
|
const parent = doc.getParent(model);
|
|
if (!parent) return;
|
|
doc.addBlock('affine:paragraph', {}, parent.id);
|
|
}
|
|
applyPropertyUpdate(blockModel);
|
|
}
|
|
}
|