Skip to content

Commit e39b05f

Browse files
authored
Property type: Vary in the same way as the owner Document Type (#20751)
set new property type preset to vary if document type varies
1 parent 2067db1 commit e39b05f

File tree

1 file changed

+48
-18
lines changed

1 file changed

+48
-18
lines changed

src/Umbraco.Web.UI.Client/src/packages/content/content-type/workspace/views/design/content-type-design-editor-properties.element.ts

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export class UmbContentTypeDesignEditorPropertiesElement extends UmbLitElement {
137137
public set containerId(value: string | null | undefined) {
138138
if (value === this._containerId) return;
139139
this._containerId = value;
140-
this.createPropertyTypeWorkspaceRoutes();
140+
this.#createPropertyTypeWorkspaceRoutes();
141141
this.#propertyStructureHelper.setContainerId(value);
142142
this.#addPropertyModal?.setUniquePathValue('container-id', value === null ? 'root' : value);
143143
this.#editPropertyModal?.setUniquePathValue('container-id', value === null ? 'root' : value);
@@ -153,6 +153,12 @@ export class UmbContentTypeDesignEditorPropertiesElement extends UmbLitElement {
153153
>;
154154

155155
#propertyStructureHelper = new UmbContentTypePropertyStructureHelper<UmbContentTypeModel>(this);
156+
#initResolver?: () => void;
157+
#initReject?: (reason?: any) => void;
158+
#init = new Promise<void>((resolve, reject) => {
159+
this.#initResolver = resolve;
160+
this.#initReject = reject;
161+
});
156162

157163
@property({ attribute: false })
158164
editContentTypePath?: string;
@@ -199,30 +205,48 @@ export class UmbContentTypeDesignEditorPropertiesElement extends UmbLitElement {
199205
}
200206

201207
this._ownerContentTypeUnique = workspaceContext?.structure.getOwnerContentTypeUnique();
202-
this.createPropertyTypeWorkspaceRoutes();
203-
204-
this.observe(
205-
workspaceContext?.variesByCulture,
206-
(variesByCulture) => {
207-
this._ownerContentTypeVariesByCulture = variesByCulture;
208-
},
209-
'observeOwnerVariesByCulture',
210-
);
211-
this.observe(
212-
workspaceContext?.variesBySegment,
213-
(variesBySegment) => {
214-
this._ownerContentTypeVariesBySegment = variesBySegment;
215-
},
216-
'observeOwnerVariesBySegment',
217-
);
208+
this.#createPropertyTypeWorkspaceRoutes();
209+
210+
const varyByCulturePromise =
211+
this.observe(
212+
workspaceContext?.variesByCulture,
213+
(variesByCulture) => {
214+
this._ownerContentTypeVariesByCulture = variesByCulture;
215+
},
216+
'observeOwnerVariesByCulture',
217+
)?.asPromise() ?? Promise.reject();
218+
const varyBySegmentPromise =
219+
this.observe(
220+
workspaceContext?.variesBySegment,
221+
(variesBySegment) => {
222+
this._ownerContentTypeVariesBySegment = variesBySegment;
223+
},
224+
'observeOwnerVariesBySegment',
225+
)?.asPromise() ?? Promise.reject();
226+
227+
if (this.#initResolver) {
228+
Promise.all([varyByCulturePromise, varyBySegmentPromise])
229+
.then(() => {
230+
this.#initResolver?.();
231+
this.#initResolver = undefined;
232+
this.#initReject = undefined;
233+
})
234+
.catch(() => {});
235+
}
218236
});
219237
this.observe(this.#propertyStructureHelper.propertyStructure, (propertyStructure) => {
220238
this._properties = propertyStructure;
221239
this.#sorter.setModel(this._properties);
222240
});
223241
}
224242

225-
createPropertyTypeWorkspaceRoutes() {
243+
override disconnectedCallback(): void {
244+
super.disconnectedCallback();
245+
this.#initReject?.(new Error('Component disconnected'));
246+
}
247+
248+
async #createPropertyTypeWorkspaceRoutes() {
249+
await this.#init;
226250
if (!this._ownerContentTypeUnique || this._containerId === undefined) return;
227251

228252
// Note: Route for adding a new property
@@ -247,6 +271,12 @@ export class UmbContentTypeDesignEditorPropertiesElement extends UmbLitElement {
247271
}
248272
preset.sortOrder = sortOrderInt;
249273
}
274+
if (this._ownerContentTypeVariesByCulture) {
275+
preset.variesByCulture = true;
276+
}
277+
if (this._ownerContentTypeVariesBySegment) {
278+
preset.variesBySegment = true;
279+
}
250280
return { data: { contentTypeUnique: this._ownerContentTypeUnique, preset: preset } };
251281
})
252282
.observeRouteBuilder((routeBuilder) => {

0 commit comments

Comments
 (0)