Skip to content

Commit 89dfa0c

Browse files
authored
Merge pull request #726 from contember/fix/editor-blocks
Fix editor blocks
2 parents 99364ea + d334b15 commit 89dfa0c

File tree

7 files changed

+34
-20
lines changed

7 files changed

+34
-20
lines changed

build/api/react-slate-editor-legacy.api.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { EntityAccessor } from '@contember/react-binding';
1818
import { EntityAccessor as EntityAccessor_2 } from '@contember/binding';
1919
import { EntityId } from '@contember/react-binding';
2020
import { EntityId as EntityId_2 } from '@contember/binding';
21-
import type { Environment } from '@contember/react-binding';
21+
import { Environment } from '@contember/react-binding';
2222
import { FieldAccessor } from '@contember/react-binding';
2323
import { FieldValue } from '@contember/react-binding';
2424
import { FunctionComponent } from 'react';
@@ -339,7 +339,7 @@ export interface UseBlockEditorSlateNodesOptions {
339339
}
340340

341341
// @public (undocumented)
342-
export const useBlockProps: (children: ReactNode) => BlockProps[];
342+
export const useBlockProps: (children: ReactNode, env: Environment) => BlockProps[];
343343

344344
// @public (undocumented)
345345
export const useDiscriminatedData: <Datum extends DiscriminatedDatum = DiscriminatedDatum>(source: Iterable<Datum>) => NormalizedDiscriminatedData<Datum>;
@@ -348,7 +348,7 @@ export const useDiscriminatedData: <Datum extends DiscriminatedDatum = Discrimin
348348
export const useEditorReferenceBlocks: () => EditorReferenceBlocks;
349349

350350
// @public (undocumented)
351-
export const useNormalizedBlocks: (children: ReactNode) => NormalizedBlocks;
351+
export const useNormalizedBlocks: (children: ReactNode, env: Environment) => NormalizedBlocks;
352352

353353
// @public (undocumented)
354354
export interface WithBlockElements {

packages/playground/tailwind.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
/** @type {import('tailwindcss').Config} */
33
module.exports = {
4-
content: ['./**/*.{html,js,tsx,ts}'],
4+
content: ['./**/*.{html,js,tsx,ts}', '../react-ui-lib/src/**/*.{html,js,tsx,ts}'],
55
darkMode: ['class'],
66
theme: {
77
container: {

packages/react-slate-editor-legacy/src/blockEditor/BlockEditor.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
SugaredField,
88
SugaredFieldProps,
99
SugaredRelativeEntityList,
10+
TreeNodeEnvironmentFactory,
1011
useDesugaredRelativeSingleField,
1112
useEntity,
1213
useEnvironment,
@@ -81,7 +82,17 @@ const BlockEditorComponent: FunctionComponent<BlockEditorProps> = Component(
8182
const desugaredEmbedContentDiscriminationField = useDesugaredRelativeSingleField(embedContentDiscriminationField)
8283

8384

84-
const editorReferenceBlocks = useEditorReferenceBlocks(children)
85+
86+
let refEnv = environment
87+
if (!props.monolithicReferencesMode) {
88+
refEnv = TreeNodeEnvironmentFactory.createEnvironmentForEntityList(refEnv, {
89+
field: props.field,
90+
})
91+
}
92+
refEnv = referencesField ? TreeNodeEnvironmentFactory.createEnvironmentForEntityList(refEnv, typeof referencesField === 'string' ? {
93+
field: referencesField,
94+
} : referencesField) : refEnv
95+
const editorReferenceBlocks = useEditorReferenceBlocks(children, refEnv)
8596

8697
//
8798

@@ -96,6 +107,7 @@ const BlockEditorComponent: FunctionComponent<BlockEditorProps> = Component(
96107
embedReferenceDiscriminant !== undefined
97108
? getDiscriminatedBlock(editorReferenceBlocks, embedReferenceDiscriminant)?.datum.children
98109
: undefined, // TODO this may crash
110+
refEnv,
99111
)
100112

101113
const entity = useEntity()

packages/react-slate-editor-legacy/src/blockEditor/templating/useEditorReferenceBlocks.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEnvironment } from '@contember/react-binding'
1+
import { Environment, useEnvironment } from '@contember/react-binding'
22
import { useConstantValueInvariant } from '@contember/react-utils'
33
import { ReactNode, useMemo } from 'react'
44
import { BlockProps, useBlockProps } from '../../blocks'
@@ -11,11 +11,10 @@ export interface EditorReferenceBlock extends BlockProps {
1111

1212
export type EditorReferenceBlocks = NormalizedDiscriminatedData<EditorReferenceBlock>
1313

14-
export const useEditorReferenceBlocks = (children: ReactNode): EditorReferenceBlocks => {
14+
export const useEditorReferenceBlocks = (children: ReactNode, env: Environment): EditorReferenceBlocks => {
1515
useConstantValueInvariant(children, `BlockEditor: cannot change the set of Blocks between renders!`)
16-
const env = useEnvironment()
1716

18-
const propList = useBlockProps(children)
17+
const propList = useBlockProps(children, env)
1918
const propsWithTemplates = useMemo(() => {
2019
return propList.map(
2120
(props): EditorReferenceBlock => ({
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
1-
import { useEnvironment } from '@contember/react-binding'
1+
import { Environment, useEnvironment } from '@contember/react-binding'
22
import { ReactNode, useMemo } from 'react'
33
import type { BlockProps } from './Block'
44
import { blockAnalyzer } from './blockAnalyzer'
55

6-
export const useBlockProps = (children: ReactNode): BlockProps[] => {
7-
const environment = useEnvironment()
8-
6+
export const useBlockProps = (children: ReactNode, env: Environment): BlockProps[] => {
97
return useMemo(() => {
108
if (children === undefined) {
119
return []
1210
}
13-
return blockAnalyzer.processChildren(children, environment)
14-
}, [children, environment])
11+
return blockAnalyzer.processChildren(children, env)
12+
}, [children, env])
1513
}

packages/react-slate-editor-legacy/src/blocks/useNormalizedBlocks.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ import type { ReactNode } from 'react'
22
import { NormalizedDiscriminatedData, useDiscriminatedData } from '../discrimination'
33
import type { BlockProps } from './Block'
44
import { useBlockProps } from './useBlockProps'
5+
import { Environment } from '@contember/react-binding'
56

67
export type NormalizedBlocks = NormalizedDiscriminatedData<BlockProps>
78

8-
export const useNormalizedBlocks = (children: ReactNode): NormalizedBlocks => {
9-
const propList = useBlockProps(children)
9+
export const useNormalizedBlocks = (children: ReactNode, env: Environment): NormalizedBlocks => {
10+
const propList = useBlockProps(children, env)
1011

1112
return useDiscriminatedData<BlockProps>(propList)
1213
}

packages/react-slate-editor/src/plugins/references/withReferences.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { EditorPlugin, EditorPluginWrapperProps } from '@contember/react-slate-editor-base'
22
import { useMemo } from 'react'
3-
import { SugaredRelativeEntityList, SugaredRelativeSingleField } from '@contember/binding'
3+
import { SugaredRelativeEntityList, SugaredRelativeSingleField, TreeNodeEnvironmentFactory } from '@contember/binding'
44
import { isElementWithReference } from './elements'
55
import { referenceOverrides } from './referenceOverrides'
66
import { ErrorBoundary } from 'react-error-boundary'
@@ -22,7 +22,9 @@ export interface ReferencesPluginArgs {
2222
export const withReferences = (args: ReferencesPluginArgs): EditorPlugin => {
2323
return {
2424
extendEditor: ({ editor, children, environment, entity }) => {
25-
const blocks = getEditorReferenceBlocks(children, environment)
25+
const blocks = getEditorReferenceBlocks(children, TreeNodeEnvironmentFactory.createEnvironmentForEntityList(environment, {
26+
field: args.field,
27+
}))
2628
for (const block of Object.values(blocks)) {
2729
editor.registerElement({
2830
type: block.name,
@@ -58,7 +60,9 @@ export const withReferences = (args: ReferencesPluginArgs): EditorPlugin => {
5860
const env = useEnvironment()
5961

6062
const editorReferenceBlocks = useMemo(() => {
61-
return getEditorReferenceBlocks(children, env)
63+
return getEditorReferenceBlocks(children, TreeNodeEnvironmentFactory.createEnvironmentForEntityList(env, {
64+
field: args.field,
65+
}))
6266
}, [children, env])
6367
useCleanupReferences({ field: args.field, editor })
6468

0 commit comments

Comments
 (0)