mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-24 05:07:06 +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,
|
type Text,
|
||||||
} from '@blocksuite/store';
|
} from '@blocksuite/store';
|
||||||
|
|
||||||
interface CodeBlockProps {
|
import type { BlockMeta } from '../../utils/types';
|
||||||
|
|
||||||
|
type CodeBlockProps = {
|
||||||
text: Text;
|
text: Text;
|
||||||
language: string | null;
|
language: string | null;
|
||||||
wrap: boolean;
|
wrap: boolean;
|
||||||
caption: string;
|
caption: string;
|
||||||
}
|
} & BlockMeta;
|
||||||
|
|
||||||
export const CodeBlockSchema = defineBlockSchema({
|
export const CodeBlockSchema = defineBlockSchema({
|
||||||
flavour: 'affine:code',
|
flavour: 'affine:code',
|
||||||
@@ -20,6 +22,10 @@ export const CodeBlockSchema = defineBlockSchema({
|
|||||||
language: null,
|
language: null,
|
||||||
wrap: false,
|
wrap: false,
|
||||||
caption: '',
|
caption: '',
|
||||||
|
'meta:createdAt': undefined,
|
||||||
|
'meta:createdBy': undefined,
|
||||||
|
'meta:updatedAt': undefined,
|
||||||
|
'meta:updatedBy': undefined,
|
||||||
}) as CodeBlockProps,
|
}) as CodeBlockProps,
|
||||||
metadata: {
|
metadata: {
|
||||||
version: 1,
|
version: 1,
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import {
|
|||||||
defineBlockSchema,
|
defineBlockSchema,
|
||||||
} from '@blocksuite/store';
|
} from '@blocksuite/store';
|
||||||
|
|
||||||
|
import type { BlockMeta } from '../../utils/types.js';
|
||||||
import { ImageBlockTransformer } from './image-transformer.js';
|
import { ImageBlockTransformer } from './image-transformer.js';
|
||||||
|
|
||||||
export type ImageBlockProps = {
|
export type ImageBlockProps = {
|
||||||
@@ -18,7 +19,8 @@ export type ImageBlockProps = {
|
|||||||
height?: number;
|
height?: number;
|
||||||
rotate: number;
|
rotate: number;
|
||||||
size?: number;
|
size?: number;
|
||||||
} & Omit<GfxCommonBlockProps, 'scale'>;
|
} & Omit<GfxCommonBlockProps, 'scale'> &
|
||||||
|
BlockMeta;
|
||||||
|
|
||||||
const defaultImageProps: ImageBlockProps = {
|
const defaultImageProps: ImageBlockProps = {
|
||||||
caption: '',
|
caption: '',
|
||||||
@@ -30,6 +32,10 @@ const defaultImageProps: ImageBlockProps = {
|
|||||||
lockedBySelf: false,
|
lockedBySelf: false,
|
||||||
rotate: 0,
|
rotate: 0,
|
||||||
size: -1,
|
size: -1,
|
||||||
|
'meta:createdAt': undefined,
|
||||||
|
'meta:createdBy': undefined,
|
||||||
|
'meta:updatedAt': undefined,
|
||||||
|
'meta:updatedBy': undefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const ImageBlockSchema = defineBlockSchema({
|
export const ImageBlockSchema = defineBlockSchema({
|
||||||
|
|||||||
@@ -5,16 +5,18 @@ import {
|
|||||||
defineBlockSchema,
|
defineBlockSchema,
|
||||||
} from '@blocksuite/store';
|
} from '@blocksuite/store';
|
||||||
|
|
||||||
|
import type { BlockMeta } from '../../utils/types';
|
||||||
|
|
||||||
// `toggle` type has been deprecated, do not use it
|
// `toggle` type has been deprecated, do not use it
|
||||||
export type ListType = 'bulleted' | 'numbered' | 'todo' | 'toggle';
|
export type ListType = 'bulleted' | 'numbered' | 'todo' | 'toggle';
|
||||||
|
|
||||||
export interface ListProps {
|
export type ListProps = {
|
||||||
type: ListType;
|
type: ListType;
|
||||||
text: Text;
|
text: Text;
|
||||||
checked: boolean;
|
checked: boolean;
|
||||||
collapsed: boolean;
|
collapsed: boolean;
|
||||||
order: number | null;
|
order: number | null;
|
||||||
}
|
} & BlockMeta;
|
||||||
|
|
||||||
export const ListBlockSchema = defineBlockSchema({
|
export const ListBlockSchema = defineBlockSchema({
|
||||||
flavour: 'affine:list',
|
flavour: 'affine:list',
|
||||||
@@ -27,6 +29,10 @@ export const ListBlockSchema = defineBlockSchema({
|
|||||||
|
|
||||||
// number type only for numbered list
|
// number type only for numbered list
|
||||||
order: null,
|
order: null,
|
||||||
|
'meta:createdAt': undefined,
|
||||||
|
'meta:createdBy': undefined,
|
||||||
|
'meta:updatedAt': undefined,
|
||||||
|
'meta:updatedBy': undefined,
|
||||||
}) as ListProps,
|
}) as ListProps,
|
||||||
metadata: {
|
metadata: {
|
||||||
version: 1,
|
version: 1,
|
||||||
|
|||||||
@@ -325,23 +325,23 @@ function createToolbarMoreMenuConfigV2(baseUrl?: string) {
|
|||||||
const createdAt = 'meta:createdAt';
|
const createdAt = 'meta:createdAt';
|
||||||
const createdBy = 'meta:createdBy';
|
const createdBy = 'meta:createdBy';
|
||||||
return (
|
return (
|
||||||
createdAt in block.model &&
|
createdAt in block.model.props &&
|
||||||
block.model[createdAt] !== undefined &&
|
block.model.props[createdAt] !== undefined &&
|
||||||
createdBy in block.model &&
|
createdBy in block.model.props &&
|
||||||
block.model[createdBy] !== undefined &&
|
block.model.props[createdBy] !== undefined &&
|
||||||
typeof block.model[createdBy] === 'string' &&
|
typeof block.model.props[createdBy] === 'string' &&
|
||||||
typeof block.model[createdAt] === 'number'
|
typeof block.model.props[createdAt] === 'number'
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
content: cx => {
|
content: cx => {
|
||||||
const model = cx.getCurrentModelBy(BlockSelection);
|
const model = cx.getCurrentModelBy(BlockSelection);
|
||||||
if (!model) return null;
|
if (!model) return null;
|
||||||
const createdAt = 'meta:createdAt';
|
const createdAt = 'meta:createdAt';
|
||||||
if (!(createdAt in model)) return null;
|
if (!(createdAt in model.props)) return null;
|
||||||
const createdBy = 'meta:createdBy';
|
const createdBy = 'meta:createdBy';
|
||||||
if (!(createdBy in model)) return null;
|
if (!(createdBy in model.props)) return null;
|
||||||
const createdByUserId = model[createdBy] as string;
|
const createdByUserId = model.props[createdBy] as string;
|
||||||
const createdAtTimestamp = model[createdAt] as number;
|
const createdAtTimestamp = model.props[createdAt] as number;
|
||||||
const date = new Date(createdAtTimestamp);
|
const date = new Date(createdAtTimestamp);
|
||||||
const userProvider = cx.std.get(UserProvider);
|
const userProvider = cx.std.get(UserProvider);
|
||||||
userProvider.revalidateUserInfo(createdByUserId);
|
userProvider.revalidateUserInfo(createdByUserId);
|
||||||
|
|||||||
Reference in New Issue
Block a user