mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-12 15:46:29 +08:00
feat(editor): enable block meta for code, image, list block (#10905)
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user