mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 04:48:53 +00:00
chore: merge blocksuite source code (#9213)
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
import { SignalWatcher, WithDisposable } from '@blocksuite/global/utils';
|
||||
import type { BlockModel, Doc } from '@blocksuite/store';
|
||||
import { consume } from '@lit/context';
|
||||
import { LitElement } from 'lit';
|
||||
|
||||
import type { EventName, UIEventHandler } from '../../event/index.js';
|
||||
import type { BlockService } from '../../extension/index.js';
|
||||
import type { BlockStdScope } from '../../scope/index.js';
|
||||
import type { BlockComponent } from './block-component.js';
|
||||
import { modelContext, serviceContext } from './consts.js';
|
||||
import { docContext, stdContext } from './lit-host.js';
|
||||
|
||||
export class WidgetComponent<
|
||||
Model extends BlockModel = BlockModel,
|
||||
B extends BlockComponent = BlockComponent,
|
||||
S extends BlockService = BlockService,
|
||||
> extends SignalWatcher(WithDisposable(LitElement)) {
|
||||
handleEvent = (
|
||||
name: EventName,
|
||||
handler: UIEventHandler,
|
||||
options?: { global?: boolean }
|
||||
) => {
|
||||
this._disposables.add(
|
||||
this.host.event.add(name, handler, {
|
||||
flavour: options?.global ? undefined : this.flavour,
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
get block() {
|
||||
return this.std.view.getBlock(this.model.id) as B;
|
||||
}
|
||||
|
||||
get doc() {
|
||||
return this._doc;
|
||||
}
|
||||
|
||||
get flavour(): string {
|
||||
return this.model.flavour;
|
||||
}
|
||||
|
||||
get host() {
|
||||
return this.std.host;
|
||||
}
|
||||
|
||||
get model() {
|
||||
return this._model;
|
||||
}
|
||||
|
||||
get service() {
|
||||
return this._service;
|
||||
}
|
||||
|
||||
get std() {
|
||||
return this._std;
|
||||
}
|
||||
|
||||
get widgetId() {
|
||||
return this.dataset.widgetId as string;
|
||||
}
|
||||
|
||||
bindHotKey(
|
||||
keymap: Record<string, UIEventHandler>,
|
||||
options?: { global: boolean }
|
||||
) {
|
||||
this._disposables.add(
|
||||
this.host.event.bindHotkey(keymap, {
|
||||
flavour: options?.global ? undefined : this.flavour,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
override connectedCallback() {
|
||||
super.connectedCallback();
|
||||
this.std.view.setWidget(this);
|
||||
|
||||
this.service.specSlots.widgetConnected.emit({
|
||||
service: this.service,
|
||||
component: this,
|
||||
});
|
||||
}
|
||||
|
||||
override disconnectedCallback() {
|
||||
super.disconnectedCallback();
|
||||
this.std?.view.deleteWidget(this);
|
||||
this.service.specSlots.widgetDisconnected.emit({
|
||||
service: this.service,
|
||||
component: this,
|
||||
});
|
||||
}
|
||||
|
||||
override render(): unknown {
|
||||
return null;
|
||||
}
|
||||
|
||||
@consume({ context: docContext })
|
||||
private accessor _doc!: Doc;
|
||||
|
||||
@consume({ context: modelContext })
|
||||
private accessor _model!: Model;
|
||||
|
||||
@consume({ context: serviceContext as never })
|
||||
private accessor _service!: S;
|
||||
|
||||
@consume({ context: stdContext })
|
||||
private accessor _std!: BlockStdScope;
|
||||
}
|
||||
Reference in New Issue
Block a user