feat(editor): affine to blocksuite doc dnd with prefered card view (#11748)

Close [BS-3070](https://linear.app/affine-design/issue/BS-3070/文档拖动进入edgeless,形成引用时,默认形成embeded的引用,但是记录上次选择)
This commit is contained in:
L-Sun
2025-04-17 04:06:50 +00:00
parent 50b3f5f7df
commit 98899b4eea
13 changed files with 199 additions and 22 deletions

View File

@@ -98,7 +98,9 @@ export class EditPropsStore extends LifeCycleWatcher {
);
this.lastProps$ = computed(() => {
const editorSetting$ = this.std.getOptional(EditorSettingProvider);
const editorSetting$ = this.std.getOptional(
EditorSettingProvider
)?.setting$;
const nextProps = mergeWith(
clonedeep(initProps),
editorSetting$?.value,

View File

@@ -10,21 +10,32 @@ export const GeneralSettingSchema = z
.object({
edgelessScrollZoom: z.boolean().default(false),
edgelessDisableScheduleUpdate: z.boolean().default(false),
docDropCanvasPreferView: z
.enum(['affine:embed-linked-doc', 'affine:embed-synced-doc'])
.default('affine:embed-synced-doc'),
})
.merge(NodePropsSchema);
export type EditorSetting = z.infer<typeof GeneralSettingSchema>;
export const EditorSettingProvider = createIdentifier<
Signal<DeepPartial<EditorSetting>>
>('AffineEditorSettingProvider');
export interface EditorSettingService {
setting$: Signal<DeepPartial<EditorSetting>>;
set?: (
key: keyof EditorSetting,
value: EditorSetting[keyof EditorSetting]
) => void;
}
export const EditorSettingProvider = createIdentifier<EditorSettingService>(
'AffineEditorSettingProvider'
);
export function EditorSettingExtension(
signal: Signal<DeepPartial<EditorSetting>>
service: EditorSettingService
): ExtensionType {
return {
setup: di => {
di.addImpl(EditorSettingProvider, () => signal);
di.addImpl(EditorSettingProvider, () => service);
},
};
}