feat(editor): enable block meta for code, image, list block (#10905)

This commit is contained in:
Saul-Mirone
2025-03-17 03:29:51 +00:00
parent 8822acf041
commit 8bd4125c96
4 changed files with 33 additions and 15 deletions
@@ -5,12 +5,14 @@ import {
type Text,
} from '@blocksuite/store';
interface CodeBlockProps {
import type { BlockMeta } from '../../utils/types';
type CodeBlockProps = {
text: Text;
language: string | null;
wrap: boolean;
caption: string;
}
} & BlockMeta;
export const CodeBlockSchema = defineBlockSchema({
flavour: 'affine:code',
@@ -20,6 +22,10 @@ export const CodeBlockSchema = defineBlockSchema({
language: null,
wrap: false,
caption: '',
'meta:createdAt': undefined,
'meta:createdBy': undefined,
'meta:updatedAt': undefined,
'meta:updatedBy': undefined,
}) as CodeBlockProps,
metadata: {
version: 1,
@@ -9,6 +9,7 @@ import {
defineBlockSchema,
} from '@blocksuite/store';
import type { BlockMeta } from '../../utils/types.js';
import { ImageBlockTransformer } from './image-transformer.js';
export type ImageBlockProps = {
@@ -18,7 +19,8 @@ export type ImageBlockProps = {
height?: number;
rotate: number;
size?: number;
} & Omit<GfxCommonBlockProps, 'scale'>;
} & Omit<GfxCommonBlockProps, 'scale'> &
BlockMeta;
const defaultImageProps: ImageBlockProps = {
caption: '',
@@ -30,6 +32,10 @@ const defaultImageProps: ImageBlockProps = {
lockedBySelf: false,
rotate: 0,
size: -1,
'meta:createdAt': undefined,
'meta:createdBy': undefined,
'meta:updatedAt': undefined,
'meta:updatedBy': undefined,
};
export const ImageBlockSchema = defineBlockSchema({
@@ -5,16 +5,18 @@ import {
defineBlockSchema,
} from '@blocksuite/store';
import type { BlockMeta } from '../../utils/types';
// `toggle` type has been deprecated, do not use it
export type ListType = 'bulleted' | 'numbered' | 'todo' | 'toggle';
export interface ListProps {
export type ListProps = {
type: ListType;
text: Text;
checked: boolean;
collapsed: boolean;
order: number | null;
}
} & BlockMeta;
export const ListBlockSchema = defineBlockSchema({
flavour: 'affine:list',
@@ -27,6 +29,10 @@ export const ListBlockSchema = defineBlockSchema({
// number type only for numbered list
order: null,
'meta:createdAt': undefined,
'meta:createdBy': undefined,
'meta:updatedAt': undefined,
'meta:updatedBy': undefined,
}) as ListProps,
metadata: {
version: 1,
@@ -325,23 +325,23 @@ function createToolbarMoreMenuConfigV2(baseUrl?: string) {
const createdAt = 'meta:createdAt';
const createdBy = 'meta:createdBy';
return (
createdAt in block.model &&
block.model[createdAt] !== undefined &&
createdBy in block.model &&
block.model[createdBy] !== undefined &&
typeof block.model[createdBy] === 'string' &&
typeof block.model[createdAt] === 'number'
createdAt in block.model.props &&
block.model.props[createdAt] !== undefined &&
createdBy in block.model.props &&
block.model.props[createdBy] !== undefined &&
typeof block.model.props[createdBy] === 'string' &&
typeof block.model.props[createdAt] === 'number'
);
},
content: cx => {
const model = cx.getCurrentModelBy(BlockSelection);
if (!model) return null;
const createdAt = 'meta:createdAt';
if (!(createdAt in model)) return null;
if (!(createdAt in model.props)) return null;
const createdBy = 'meta:createdBy';
if (!(createdBy in model)) return null;
const createdByUserId = model[createdBy] as string;
const createdAtTimestamp = model[createdAt] as number;
if (!(createdBy in model.props)) return null;
const createdByUserId = model.props[createdBy] as string;
const createdAtTimestamp = model.props[createdAt] as number;
const date = new Date(createdAtTimestamp);
const userProvider = cx.std.get(UserProvider);
userProvider.revalidateUserInfo(createdByUserId);