Skip to content

Commit bbfe40d

Browse files
Fix issue preventing blueprint derived values from being scaffolded (#18917)
* Fix issue preventing blueprint derived values from being scaffolded. * fix manipulating frooen array * compare with variantId as well --------- Co-authored-by: Niels Lyngsø <[email protected]>
1 parent 9d30d5b commit bbfe40d

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-detail-workspace-base.ts

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ export abstract class UmbContentDetailWorkspaceContextBase<
283283
await this.structure.loadType((data as any)[this.#contentTypePropertyName].unique);
284284

285285
// Set culture and segment for all values:
286-
const cutlures = this.#languages.getValue().map((x) => x.unique);
286+
const cultures = this.#languages.getValue().map((x) => x.unique);
287287

288288
if (this.structure.variesBySegment) {
289289
console.warn('Segments are not yet implemented for preset');
@@ -319,11 +319,28 @@ export abstract class UmbContentDetailWorkspaceContextBase<
319319
);
320320

321321
const controller = new UmbPropertyValuePresetVariantBuilderController(this);
322-
controller.setCultures(cutlures);
322+
controller.setCultures(cultures);
323323
if (segments) {
324324
controller.setSegments(segments);
325325
}
326-
data.values = await controller.create(valueDefinitions);
326+
327+
const presetValues = await controller.create(valueDefinitions);
328+
329+
// Don't just set the values, as we could have some already populated from a blueprint.
330+
// If we have a value from both a blueprint and a preset, use the latter as priority.
331+
const dataValues = [...data.values];
332+
for (let index = 0; index < presetValues.length; index++) {
333+
const presetValue = presetValues[index];
334+
const variantId = UmbVariantId.Create(presetValue);
335+
const matchingDataValueIndex = dataValues.findIndex((v) => v.alias === presetValue.alias && variantId.compare(v));
336+
if (matchingDataValueIndex > -1) {
337+
dataValues[matchingDataValueIndex] = presetValue;
338+
} else {
339+
dataValues.push(presetValue);
340+
}
341+
}
342+
343+
data.values = dataValues;
327344

328345
return data;
329346
}

0 commit comments

Comments
 (0)