Skip to content

Commit 594036c

Browse files
authored
make blocks auto expose on insert (#17724)
1 parent 3caffa2 commit 594036c

File tree

4 files changed

+33
-12
lines changed

4 files changed

+33
-12
lines changed

src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -499,15 +499,7 @@ export abstract class UmbBlockEntryContext<
499499
]),
500500
([variantId, variesByCulture, variesBySegment]) => {
501501
if (!variantId || variesByCulture === undefined || variesBySegment === undefined) return;
502-
if (!variesBySegment && !variesByCulture) {
503-
variantId = UmbVariantId.CreateInvariant();
504-
} else if (!variesBySegment) {
505-
variantId = variantId.toSegmentInvariant();
506-
} else if (!variesByCulture) {
507-
variantId = variantId.toCultureInvariant();
508-
}
509-
510-
this.#variantId.setValue(variantId);
502+
this.#variantId.setValue(variantId.toVariant(variesByCulture, variesBySegment));
511503
this.#gotVariantId();
512504
},
513505
'observeBlockType',

src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ export abstract class UmbBlockManagerContext<
187187
return this.#settings.asObservablePart((source) => source.find((x) => x.key === key));
188188
}
189189
currentExposeOf(contentKey: string) {
190-
const variantId = this.#variantId.getValue();
190+
const variantId = this.getVariantId();
191191
if (!variantId) return;
192192
return mergeObservables(
193193
[this.#exposes.asObservablePart((source) => source.filter((x) => x.contentKey === contentKey)), this.variantId],
@@ -234,7 +234,7 @@ export abstract class UmbBlockManagerContext<
234234
this.#exposes.filter((x) => x.contentKey !== contentKey);
235235
}
236236
removeCurrentExpose(contentKey: string) {
237-
const variantId = this.#variantId.getValue();
237+
const variantId = this.getVariantId();
238238
if (!variantId) return;
239239
this.#exposes.filter((x) => !(x.contentKey === contentKey && variantId.compare(x)));
240240
}
@@ -340,6 +340,23 @@ export abstract class UmbBlockManagerContext<
340340
if (settings && layoutEntry.settingsKey) {
341341
this.#settings.appendOne(settings);
342342
}
343+
344+
// Expose inserted block:
345+
this.contentTypesLoaded.then(() => {
346+
const contentStructure = this.getStructure(content.contentTypeKey);
347+
if (!contentStructure) {
348+
throw new Error(`Cannot expose block, missing content structure for ${content.contentTypeKey}`);
349+
}
350+
const variantId = this.getVariantId();
351+
if (!variantId) {
352+
throw new Error(`Cannot expose block, missing variantId`);
353+
}
354+
const blockVariantId = variantId.toVariant(
355+
contentStructure.getVariesByCulture(),
356+
contentStructure.getVariesBySegment(),
357+
);
358+
this.setOneExpose(content.key, blockVariantId);
359+
});
343360
}
344361

345362
protected removeBlockKey(contentKey: string) {

src/Umbraco.Web.UI.Client/src/packages/core/content-type/structure/content-type-structure-manager.class.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,15 @@ export class UmbContentTypeStructureManager<
268268
return this.#ownerContentTypeUnique;
269269
}
270270

271+
getVariesByCulture() {
272+
const ownerContentType = this.getOwnerContentType();
273+
return ownerContentType?.variesByCulture;
274+
}
275+
getVariesBySegment() {
276+
const ownerContentType = this.getOwnerContentType();
277+
return ownerContentType?.variesBySegment;
278+
}
279+
271280
/**
272281
* Figure out if any of the Content Types has a Property.
273282
* @returns {boolean} - true if any of the Content Type in this composition has a Property.

src/Umbraco.Web.UI.Client/src/packages/core/variant/variant-id.class.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,10 @@ export class UmbVariantId {
8787
return Object.freeze(new UmbVariantId(this.culture, null));
8888
}
8989
public toCultureInvariant(): UmbVariantId {
90-
return Object.freeze(new UmbVariantId(null, this.culture));
90+
return Object.freeze(new UmbVariantId(null, this.segment));
91+
}
92+
public toVariant(varyByCulture?: boolean, varyBySegment?: boolean): UmbVariantId {
93+
return Object.freeze(new UmbVariantId(varyByCulture ? this.culture : null, varyBySegment ? this.segment : null));
9194
}
9295

9396
// TODO: needs localization option:

0 commit comments

Comments
 (0)