Files
AFFiNE-Mirror/blocksuite/framework/std/src/utils/gfx.ts
T
2025-03-28 07:20:34 +00:00

33 lines
750 B
TypeScript

import type { Store } from '@blocksuite/store';
import { effect } from '@preact/signals-core';
import { SurfaceBlockModel } from '../gfx/model/surface/surface-model.js';
export function onSurfaceAdded(
doc: Store,
callback: (model: SurfaceBlockModel | null) => void
) {
let found = false;
let foundId = '';
const dispose = effect(() => {
// if the surface is already found, no need to search again
if (found && doc.getBlock(foundId)) {
return;
}
for (const block of Object.values(doc.blocks.value)) {
if (block.model instanceof SurfaceBlockModel) {
callback(block.model);
found = true;
foundId = block.id;
return;
}
}
callback(null);
});
return dispose;
}