mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-30 00:29:46 +08:00
feat(editor): add more open doc options to editor toolbar (#9588)
fix AF-2036, AF-2092
This commit is contained in:
@@ -9,6 +9,7 @@ export * from './font-loader';
|
||||
export * from './generate-url-service';
|
||||
export * from './native-clipboard-service';
|
||||
export * from './notification-service';
|
||||
export * from './open-doc-config';
|
||||
export * from './page-viewport-service';
|
||||
export * from './parse-url-service';
|
||||
export * from './quick-search-service';
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
import { createIdentifier } from '@blocksuite/global/di';
|
||||
import { CenterPeekIcon, ExpandFullIcon } from '@blocksuite/icons/lit';
|
||||
import { type ExtensionType } from '@blocksuite/store';
|
||||
import type { TemplateResult } from 'lit';
|
||||
|
||||
export type OpenDocMode =
|
||||
| 'open-in-active-view'
|
||||
| 'open-in-new-view'
|
||||
| 'open-in-new-tab'
|
||||
| 'open-in-center-peek';
|
||||
|
||||
// todo: later this will be used to generate the menu items.
|
||||
// for now we only use it as a hint for whether or not to show the open doc buttons.
|
||||
export interface OpenDocConfigItem {
|
||||
type: OpenDocMode;
|
||||
label: string;
|
||||
icon: TemplateResult<1>;
|
||||
}
|
||||
export interface OpenDocConfig {
|
||||
items: OpenDocConfigItem[];
|
||||
}
|
||||
|
||||
export interface OpenDocService {
|
||||
isAllowed: (mode: OpenDocMode) => boolean;
|
||||
items: OpenDocConfig['items'];
|
||||
}
|
||||
|
||||
export const OpenDocExtensionIdentifier = createIdentifier<OpenDocService>(
|
||||
'AffineOpenDocExtension'
|
||||
);
|
||||
|
||||
const defaultConfig: OpenDocConfig = {
|
||||
items: [
|
||||
{
|
||||
type: 'open-in-active-view',
|
||||
label: 'Open this doc',
|
||||
icon: ExpandFullIcon(),
|
||||
},
|
||||
{
|
||||
type: 'open-in-center-peek',
|
||||
label: 'Open in center peek',
|
||||
icon: CenterPeekIcon(),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
export const OpenDocExtension = (config: OpenDocConfig): ExtensionType => ({
|
||||
setup: di => {
|
||||
di.override(OpenDocExtensionIdentifier, () => {
|
||||
const allowedOpenDocModes = new Set(config.items.map(item => item.type));
|
||||
return {
|
||||
isAllowed: (mode: OpenDocMode) => allowedOpenDocModes.has(mode),
|
||||
items: config.items,
|
||||
};
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
export const DefaultOpenDocExtension = OpenDocExtension(defaultConfig);
|
||||
@@ -44,6 +44,16 @@ export function isControlledKeyboardEvent(e: KeyboardEvent) {
|
||||
return e.ctrlKey || e.metaKey || e.altKey;
|
||||
}
|
||||
|
||||
export function isNewTabTrigger(event?: MouseEvent) {
|
||||
return event
|
||||
? (event.ctrlKey || event.metaKey || event.button === 1) && !event.altKey
|
||||
: false;
|
||||
}
|
||||
|
||||
export function isNewViewTrigger(event?: MouseEvent) {
|
||||
return event ? (event.ctrlKey || event.metaKey) && event.altKey : false;
|
||||
}
|
||||
|
||||
export function on<
|
||||
T extends HTMLElement,
|
||||
K extends keyof M,
|
||||
|
||||
Reference in New Issue
Block a user