Bugfix: Variant Blocks create duplicates in the frontend when created in an area (#2464)
* revert to previous code before tiptap * correct rte-entries context
This commit is contained in:
@@ -186,7 +186,7 @@ export class UmbBlockGridManagerContext<
|
||||
originData: UmbBlockGridWorkspaceOriginData,
|
||||
) {
|
||||
this.setOneLayout(layoutEntry, originData);
|
||||
this.insertBlockData(layoutEntry, content, settings);
|
||||
this.insertBlockData(layoutEntry, content, settings, originData);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -48,7 +48,11 @@ export class UmbBlockListEntriesContext extends UmbBlockEntriesContext<
|
||||
})
|
||||
.onSubmit(async (value, data) => {
|
||||
if (value?.create && data) {
|
||||
const created = await this.create(value.create.contentElementTypeKey, {});
|
||||
const created = await this.create(
|
||||
value.create.contentElementTypeKey,
|
||||
{},
|
||||
data.originData as UmbBlockListWorkspaceOriginData,
|
||||
);
|
||||
if (created) {
|
||||
this.insert(
|
||||
created.layout,
|
||||
@@ -127,9 +131,13 @@ export class UmbBlockListEntriesContext extends UmbBlockEntriesContext<
|
||||
this._manager?.setLayouts(layouts);
|
||||
}
|
||||
|
||||
async create(contentElementTypeKey: string, partialLayoutEntry?: Omit<UmbBlockListLayoutModel, 'contentKey'>) {
|
||||
async create(
|
||||
contentElementTypeKey: string,
|
||||
partialLayoutEntry?: Omit<UmbBlockListLayoutModel, 'contentKey'>,
|
||||
originData?: UmbBlockListWorkspaceOriginData,
|
||||
) {
|
||||
await this._retrieveManager;
|
||||
return this._manager?.create(contentElementTypeKey, partialLayoutEntry);
|
||||
return this._manager?.create(contentElementTypeKey, partialLayoutEntry, originData);
|
||||
}
|
||||
|
||||
// insert Block?
|
||||
|
||||
@@ -21,7 +21,13 @@ export class UmbBlockListManagerContext<
|
||||
return this.#inlineEditingMode.getValue();
|
||||
}
|
||||
|
||||
create(contentElementTypeKey: string, partialLayoutEntry?: Omit<BlockLayoutType, 'contentKey'>) {
|
||||
create(
|
||||
contentElementTypeKey: string,
|
||||
partialLayoutEntry?: Omit<BlockLayoutType, 'contentKey'>,
|
||||
// This property is used by some implementations, but not used in this. Do not remove. [NL]
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_originData?: UmbBlockListWorkspaceOriginData,
|
||||
) {
|
||||
return super._createBlockData(contentElementTypeKey, partialLayoutEntry);
|
||||
}
|
||||
|
||||
@@ -33,7 +39,7 @@ export class UmbBlockListManagerContext<
|
||||
) {
|
||||
this._layouts.appendOneAt(layoutEntry, originData.index ?? -1);
|
||||
|
||||
this.insertBlockData(layoutEntry, content, settings);
|
||||
this.insertBlockData(layoutEntry, content, settings, originData);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -53,7 +53,12 @@ export class UmbBlockRteEntriesContext extends UmbBlockEntriesContext<
|
||||
{} as any,
|
||||
);
|
||||
if (created) {
|
||||
this.insert(created.layout, created.content, created.settings);
|
||||
this.insert(
|
||||
created.layout,
|
||||
created.content,
|
||||
created.settings,
|
||||
data.originData as UmbBlockRteWorkspaceOriginData,
|
||||
);
|
||||
} else {
|
||||
throw new Error('Failed to create block');
|
||||
}
|
||||
@@ -122,9 +127,13 @@ export class UmbBlockRteEntriesContext extends UmbBlockEntriesContext<
|
||||
this._manager?.setLayouts(layouts);
|
||||
}
|
||||
|
||||
async create(contentElementTypeKey: string, partialLayoutEntry?: Omit<UmbBlockRteLayoutModel, 'contentKey'>) {
|
||||
async create(
|
||||
contentElementTypeKey: string,
|
||||
partialLayoutEntry?: Omit<UmbBlockRteLayoutModel, 'contentKey'>,
|
||||
originData?: UmbBlockRteWorkspaceOriginData,
|
||||
) {
|
||||
await this._retrieveManager;
|
||||
return this._manager?.create(contentElementTypeKey, partialLayoutEntry);
|
||||
return this._manager?.create(contentElementTypeKey, partialLayoutEntry, originData);
|
||||
}
|
||||
|
||||
// insert Block?
|
||||
@@ -133,9 +142,10 @@ export class UmbBlockRteEntriesContext extends UmbBlockEntriesContext<
|
||||
layoutEntry: UmbBlockRteLayoutModel,
|
||||
content: UmbBlockDataModel,
|
||||
settings: UmbBlockDataModel | undefined,
|
||||
originData: UmbBlockRteWorkspaceOriginData,
|
||||
) {
|
||||
await this._retrieveManager;
|
||||
return this._manager?.insert(layoutEntry, content, settings) ?? false;
|
||||
return this._manager?.insert(layoutEntry, content, settings, originData) ?? false;
|
||||
}
|
||||
|
||||
// create Block?
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import type { UmbBlockRteWorkspaceOriginData } from '../workspace/block-rte-workspace.modal-token.js';
|
||||
import type { UmbBlockRteLayoutModel, UmbBlockRteTypeModel } from '../types.js';
|
||||
import type { UmbBlockDataModel } from '../../block/types.js';
|
||||
import { UmbBlockManagerContext } from '@umbraco-cms/backoffice/block';
|
||||
@@ -14,7 +15,13 @@ export class UmbBlockRteManagerContext<
|
||||
this._layouts.removeOne(contentKey);
|
||||
}
|
||||
|
||||
create(contentElementTypeKey: string, partialLayoutEntry?: Omit<BlockLayoutType, 'contentKey'>) {
|
||||
create(
|
||||
contentElementTypeKey: string,
|
||||
partialLayoutEntry?: Omit<BlockLayoutType, 'contentKey'>,
|
||||
// This property is used by some implementations, but not used in this, do not remove. [NL]
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_originData?: UmbBlockRteWorkspaceOriginData,
|
||||
) {
|
||||
const data = super._createBlockData(contentElementTypeKey, partialLayoutEntry);
|
||||
|
||||
// Find block type.
|
||||
@@ -30,10 +37,15 @@ export class UmbBlockRteManagerContext<
|
||||
return data;
|
||||
}
|
||||
|
||||
insert(layoutEntry: BlockLayoutType, content: UmbBlockDataModel, settings: UmbBlockDataModel | undefined) {
|
||||
insert(
|
||||
layoutEntry: BlockLayoutType,
|
||||
content: UmbBlockDataModel,
|
||||
settings: UmbBlockDataModel | undefined,
|
||||
originData: UmbBlockRteWorkspaceOriginData,
|
||||
) {
|
||||
this._layouts.appendOne(layoutEntry);
|
||||
|
||||
this.insertBlockData(layoutEntry, content, settings);
|
||||
this.insertBlockData(layoutEntry, content, settings, originData);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -203,7 +203,9 @@ export abstract class UmbBlockManagerContext<
|
||||
getContentOf(contentKey: string) {
|
||||
return this.#contents.value.find((x) => x.key === contentKey);
|
||||
}
|
||||
setOneLayout(layoutData: BlockLayoutType) {
|
||||
// originData param is used by some implementations. [NL] should be here, do not remove it.
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
setOneLayout(layoutData: BlockLayoutType, _originData?: BlockOriginDataType) {
|
||||
this._layouts.appendOne(layoutData);
|
||||
}
|
||||
setOneContent(contentData: UmbBlockDataModel) {
|
||||
@@ -316,7 +318,13 @@ export abstract class UmbBlockManagerContext<
|
||||
originData: BlockOriginDataType,
|
||||
): boolean;
|
||||
|
||||
protected insertBlockData(layoutEntry: BlockLayoutType, content: UmbBlockDataModel, settings?: UmbBlockDataModel) {
|
||||
protected insertBlockData(
|
||||
layoutEntry: BlockLayoutType,
|
||||
content: UmbBlockDataModel,
|
||||
settings: UmbBlockDataModel | undefined,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_originData: BlockOriginDataType,
|
||||
) {
|
||||
// Create content entry:
|
||||
if (layoutEntry.contentKey) {
|
||||
this.#contents.appendOne(content);
|
||||
|
||||
@@ -352,7 +352,10 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
|
||||
this.layout,
|
||||
(layoutData) => {
|
||||
if (layoutData) {
|
||||
this.#blockManager?.setOneLayout(layoutData);
|
||||
this.#blockManager?.setOneLayout(
|
||||
layoutData,
|
||||
this.#modalContext?.data.originData as UmbBlockWorkspaceOriginData,
|
||||
);
|
||||
}
|
||||
},
|
||||
'observeThisLayout',
|
||||
@@ -448,7 +451,7 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
|
||||
} else {
|
||||
// Update data:
|
||||
|
||||
this.#blockManager.setOneLayout(layoutData);
|
||||
this.#blockManager.setOneLayout(layoutData, this.#modalContext.data.originData as UmbBlockWorkspaceOriginData);
|
||||
if (contentData) {
|
||||
this.#blockManager.setOneContent(contentData);
|
||||
}
|
||||
@@ -485,7 +488,10 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
|
||||
} else {
|
||||
// Revert the layout, content & settings data to the original state: [NL]
|
||||
if (this.#initialLayout) {
|
||||
this.#blockManager?.setOneLayout(this.#initialLayout);
|
||||
this.#blockManager?.setOneLayout(
|
||||
this.#initialLayout,
|
||||
this.#modalContext?.data.originData as UmbBlockWorkspaceOriginData,
|
||||
);
|
||||
}
|
||||
if (this.#initialContent) {
|
||||
this.#blockManager?.setOneContent(this.#initialContent);
|
||||
|
||||
Reference in New Issue
Block a user