fix inserting block at the right spot

This commit is contained in:
Niels Lyngsø
2024-05-28 14:38:40 +02:00
parent 29187817a3
commit 06ebd3a2c0
5 changed files with 26 additions and 24 deletions

View File

@@ -124,9 +124,16 @@ export class UmbBlockGridManagerContext<
settings: UmbBlockDataType | undefined,
modalData: UmbBlockGridWorkspaceData,
) {
const index = modalData.originData.index ?? -1;
this.setOneLayout(layoutEntry, modalData);
this.insertBlockData(layoutEntry, content, settings, modalData);
if (modalData.originData.parentUnique && modalData.originData.areaKey) {
return true;
}
setOneLayout(layoutEntry: BlockLayoutType, modalData?: UmbBlockGridWorkspaceData) {
const index = modalData?.originData.index ?? -1;
if (modalData?.originData.parentUnique && modalData?.originData.areaKey) {
// Find layout entry based on parentUnique, recursively, as it needs to check layout of areas as well:
const layoutEntries = this.#appendLayoutEntryToArea(
layoutEntry,
@@ -143,10 +150,6 @@ export class UmbBlockGridManagerContext<
} else {
this._layouts.appendOneAt(layoutEntry, index);
}
this.insertBlockData(layoutEntry, content, settings, modalData);
return true;
}
onDragStart() {

View File

@@ -2,12 +2,13 @@ import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block';
import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal';
import { UmbModalToken } from '@umbraco-cms/backoffice/modal';
export interface UmbBlockGridWorkspaceData
extends UmbBlockWorkspaceData<{
index: number;
parentUnique: string | null;
areaKey?: string;
}> {}
export interface UmbBlockGridWorkspaceOriginData {
index: number;
parentUnique: string | null;
areaKey?: string;
}
export interface UmbBlockGridWorkspaceData extends UmbBlockWorkspaceData<UmbBlockGridWorkspaceOriginData> {}
export const UMB_BLOCK_GRID_WORKSPACE_MODAL = new UmbModalToken<UmbBlockGridWorkspaceData, UmbWorkspaceModalValue>(
'Umb.Modal.Workspace',

View File

@@ -2,10 +2,11 @@ import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block';
import type { UmbWorkspaceModalData, UmbWorkspaceModalValue } from '@umbraco-cms/backoffice/modal';
import { UmbModalToken } from '@umbraco-cms/backoffice/modal';
export interface UmbBlockListWorkspaceData
extends UmbBlockWorkspaceData<{
index: number;
}> {}
export interface UmbBlockListWorkspaceOriginData {
index: number;
}
export interface UmbBlockListWorkspaceData extends UmbBlockWorkspaceData<UmbBlockListWorkspaceOriginData> {}
export const UMB_BLOCK_LIST_WORKSPACE_MODAL = new UmbModalToken<UmbBlockListWorkspaceData, UmbWorkspaceModalValue>(
'Umb.Modal.Workspace',

View File

@@ -167,7 +167,7 @@ export abstract class UmbBlockManagerContext<
return this.#contents.value.find((x) => x.udi === contentUdi);
}
setOneLayout(layoutData: BlockLayoutType) {
setOneLayout(layoutData: BlockLayoutType, modalData?: UmbBlockWorkspaceData) {
this._layouts.appendOne(layoutData);
}
setOneContent(contentData: UmbBlockDataType) {
@@ -190,10 +190,7 @@ export abstract class UmbBlockManagerContext<
modalData?: UmbBlockWorkspaceData,
): UmbBlockDataObjectModel<BlockLayoutType> | undefined;
protected createBlockData<ModalDataType extends UmbBlockWorkspaceData>(
contentElementTypeKey: string,
partialLayoutEntry?: Omit<BlockLayoutType, 'contentUdi'>,
) {
protected createBlockData(contentElementTypeKey: string, partialLayoutEntry?: Omit<BlockLayoutType, 'contentUdi'>) {
// Find block type.
const blockType = this.#blockTypes.value.find((x) => x.contentElementTypeKey === contentElementTypeKey);
if (!blockType) {

View File

@@ -242,7 +242,7 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
#establishLiveSync() {
this.observe(this.layout, (layoutData) => {
if (layoutData) {
this.#blockManager?.setOneLayout(layoutData);
this.#blockManager?.setOneLayout(layoutData, this.#modalContext?.data as UmbBlockWorkspaceData);
}
});
this.observe(this.content.data, (contentData) => {
@@ -324,7 +324,7 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
} else {
// Update data:
this.#blockManager.setOneLayout(layoutData);
this.#blockManager.setOneLayout(layoutData, this.#modalContext?.data as UmbBlockWorkspaceData);
if (contentData) {
this.#blockManager.setOneContent(contentData);
}
@@ -350,7 +350,7 @@ export class UmbBlockWorkspaceContext<LayoutDataType extends UmbBlockLayoutBaseM
} else {
// TODO: Revert the layout, content & settings data to the original state.
if (this.#initialLayout) {
this.#blockManager?.setOneLayout(this.#initialLayout);
this.#blockManager?.setOneLayout(this.#initialLayout, this.#modalContext?.data as UmbBlockWorkspaceData);
}
if (this.#initialContent) {
this.#blockManager?.setOneContent(this.#initialContent);