Skip to content

Commit abc5b0d

Browse files
committed
align media
1 parent 0d02dc7 commit abc5b0d

File tree

2 files changed

+47
-112
lines changed

2 files changed

+47
-112
lines changed

src/packages/media/media/paths.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export const UMB_MEDIA_WORKSPACE_PATH = UMB_WORKSPACE_PATH_PATTERN.generateAbsol
1111
export const UMB_CREATE_MEDIA_WORKSPACE_PATH_PATTERN = new UmbPathPattern<{
1212
parentEntityType: UmbMediaEntityTypeUnion;
1313
parentUnique?: string | null;
14-
documentTypeUnique: string;
15-
}>('create/parent/:parentEntityType/:parentUnique/:documentTypeUnique', UMB_MEDIA_WORKSPACE_PATH);
14+
mediaTypeUnique: string;
15+
}>('create/parent/:parentEntityType/:parentUnique/:mediaTypeUnique', UMB_MEDIA_WORKSPACE_PATH);
1616

1717
export const UMB_EDIT_MEDIA_WORKSPACE_PATH_PATTERN = new UmbPathPattern<{ unique: string }>('edit/:unique');

src/packages/media/media/workspace/media-workspace.context.ts

Lines changed: 45 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ import type {
88
UmbMediaVariantModel,
99
UmbMediaVariantOptionModel,
1010
} from '../types.js';
11+
import { UMB_CREATE_MEDIA_WORKSPACE_PATH_PATTERN, UMB_EDIT_MEDIA_WORKSPACE_PATH_PATTERN } from '../paths.js';
12+
import { UMB_MEDIA_SECTION_PATH } from '../../media-section/paths.js';
1113
import { UMB_MEMBER_DETAIL_MODEL_VARIANT_SCAFFOLD } from './constants.js';
1214
import { UMB_INVARIANT_CULTURE, UmbVariantId } from '@umbraco-cms/backoffice/variant';
1315
import { UmbContentTypeStructureManager } from '@umbraco-cms/backoffice/content-type';
1416
import {
1517
UmbSubmittableWorkspaceContextBase,
1618
UmbWorkspaceIsNewRedirectController,
19+
UmbWorkspaceIsNewRedirectControllerAlias,
1720
UmbWorkspaceSplitViewManager,
1821
} from '@umbraco-cms/backoffice/workspace';
1922
import {
@@ -39,6 +42,7 @@ import { UmbEntityContext } from '@umbraco-cms/backoffice/entity';
3942
import { UmbIsTrashedEntityContext } from '@umbraco-cms/backoffice/recycle-bin';
4043
import { UmbReadOnlyVariantStateManager } from '@umbraco-cms/backoffice/utils';
4144
import { UmbDataTypeItemRepositoryManager } from '@umbraco-cms/backoffice/data-type';
45+
import { UMB_MEDIA_COLLECTION_ALIAS } from '../collection/index.js';
4246

4347
type ContentModel = UmbMediaDetailModel;
4448
type ContentTypeModel = UmbMediaTypeDetailModel;
@@ -181,7 +185,7 @@ export class UmbMediaWorkspaceContext
181185

182186
this.routes.setRoutes([
183187
{
184-
path: 'create/parent/:entityType/:parentUnique/:mediaTypeUnique',
188+
path: UMB_CREATE_MEDIA_WORKSPACE_PATH_PATTERN.toString(),
185189
component: () => import('./media-workspace-editor.element.js'),
186190
setup: async (_component, info) => {
187191
const parentEntityType = info.match.params.entityType;
@@ -197,9 +201,10 @@ export class UmbMediaWorkspaceContext
197201
},
198202
},
199203
{
200-
path: 'edit/:unique',
204+
path: UMB_EDIT_MEDIA_WORKSPACE_PATH_PATTERN.toString(),
201205
component: () => import('./media-workspace-editor.element.js'),
202206
setup: (_component, info) => {
207+
this.removeUmbControllerByAlias(UmbWorkspaceIsNewRedirectControllerAlias);
203208
const unique = info.match.params.unique;
204209
this.load(unique);
205210
},
@@ -209,8 +214,7 @@ export class UmbMediaWorkspaceContext
209214

210215
override resetState() {
211216
super.resetState();
212-
this.#data.setPersisted(undefined);
213-
this.#data.setCurrent(undefined);
217+
this.#data.clear();
214218
}
215219

216220
async loadLanguages() {
@@ -240,7 +244,7 @@ export class UmbMediaWorkspaceContext
240244
#onStoreChange(entity: ContentModel | undefined) {
241245
if (!entity) {
242246
//TODO: This solution is alright for now. But reconsider when we introduce signal-r
243-
history.pushState(null, '', 'section/media');
247+
history.pushState(null, '', UMB_MEDIA_SECTION_PATH);
244248
}
245249
}
246250

@@ -260,7 +264,7 @@ export class UmbMediaWorkspaceContext
260264
}
261265

262266
getCollectionAlias() {
263-
return 'Umb.Collection.Media';
267+
return UMB_MEDIA_COLLECTION_ALIAS;
264268
}
265269

266270
getData() {
@@ -308,7 +312,7 @@ export class UmbMediaWorkspaceContext
308312
}
309313

310314
setName(name: string, variantId?: UmbVariantId) {
311-
this.#updateVariantData(variantId ?? UmbVariantId.CreateInvariant(), { name });
315+
this.#data.updateVariantData(variantId ?? UmbVariantId.CreateInvariant(), { name });
312316
}
313317

314318
name(variantId?: UmbVariantId) {
@@ -330,22 +334,22 @@ export class UmbMediaWorkspaceContext
330334
async propertyValueByAlias<PropertyValueType = unknown>(propertyAlias: string, variantId?: UmbVariantId) {
331335
return this.#data.createObservablePartOfCurrent(
332336
(data) =>
333-
data?.values?.find((x) => x?.alias === propertyAlias && (variantId ? variantId.compare(x as any) : true))
337+
data?.values?.find((x) => x?.alias === propertyAlias && (variantId ? variantId.compare(x) : true))
334338
?.value as PropertyValueType,
335339
);
336340
}
337341

338342
/**
339343
* Get the current value of the property with the given alias and variantId.
340-
* @param alias
341-
* @param variantId
344+
* @param {string} alias
345+
* @param {UmbVariantId} variantId
342346
* @returns The value or undefined if not set or found.
343347
*/
344348
getPropertyValue<ReturnType = unknown>(alias: string, variantId?: UmbVariantId) {
345349
const currentData = this.#data.getCurrent();
346350
if (currentData) {
347351
const newDataSet = currentData.values?.find(
348-
(x) => x.alias === alias && (variantId ? variantId.compare(x as any) : true),
352+
(x) => x.alias === alias && (variantId ? variantId.compare(x) : true),
349353
);
350354
return newDataSet?.value as ReturnType;
351355
}
@@ -390,108 +394,47 @@ export class UmbMediaWorkspaceContext
390394
this.#data.finishPropertyValueChange();
391395
};
392396

393-
/* #calculateChangedVariants() {
394-
const persisted = this.#persistedData.getValue();
395-
const current = this.#data.current.getValue();
396-
if (!current) throw new Error('Current data is missing');
397-
398-
const changedVariants = current?.variants.map((variant) => {
399-
const persistedVariant = persisted?.variants.find((x) => UmbVariantId.Create(variant).compare(x));
400-
return {
401-
culture: variant.culture,
402-
segment: variant.segment,
403-
equal: persistedVariant ? jsonStringComparison(variant, persistedVariant) : false,
404-
};
405-
});
406-
407-
const changedProperties = current?.values.map((value) => {
408-
const persistedValues = persisted?.values.find((x) => UmbVariantId.Create(value).compare(x));
409-
return {
410-
culture: value.culture,
411-
segment: value.segment,
412-
equal: persistedValues ? jsonStringComparison(value, persistedValues) : false,
413-
};
414-
});
415-
416-
// calculate the variantIds of those who either have a change in properties or in variants:
417-
return (
418-
changedVariants
419-
?.concat(changedProperties ?? [])
420-
.filter((x) => x.equal === false)
421-
.map((x) => new UmbVariantId(x.culture, x.segment)) ?? []
422-
);
423-
} */
424-
425-
#updateVariantData(variantId: UmbVariantId, update?: Partial<UmbMediaVariantModel>) {
426-
const currentData = this.getData();
427-
if (!currentData) throw new Error('Data is missing');
428-
if (this.#varies === true) {
429-
// If variant Id is invariant, we don't to have the variant appended to our data.
430-
if (variantId.isInvariant()) return;
431-
const variant = currentData.variants.find((x) => variantId.compare(x));
432-
const newVariants = appendToFrozenArray(
433-
currentData.variants,
434-
{
435-
name: '',
436-
createDate: null,
437-
updateDate: null,
438-
...variantId.toObject(),
439-
...variant,
440-
...update,
441-
},
442-
(x) => variantId.compare(x),
443-
);
444-
this.#data.updateCurrent({ variants: newVariants });
445-
} else if (this.#varies === false) {
446-
// TODO: Beware about segments, in this case we need to also consider segments, if its allowed to vary by segments.
447-
const invariantVariantId = UmbVariantId.CreateInvariant();
448-
const variant = currentData.variants.find((x) => invariantVariantId.compare(x));
449-
// Cause we are invariant, we will just overwrite all variants with this one:
450-
const newVariants = [
451-
{
452-
name: '',
453-
createDate: null,
454-
updateDate: null,
455-
...invariantVariantId.toObject(),
456-
...variant,
457-
...update,
458-
},
459-
];
460-
this.#data.updateCurrent({ variants: newVariants });
461-
} else {
462-
throw new Error('Varies by culture is missing');
463-
}
464-
}
465-
466-
async #createOrSave() {
467-
const data = this.#data.getCurrent();
468-
if (!data?.unique) throw new Error('Unique is missing');
397+
async #handleSave() {
398+
const saveData = this.#data.getCurrent();
399+
if (!saveData?.unique) throw new Error('Unique is missing');
469400

470401
if (this.getIsNew()) {
471402
const parent = this.#parent.getValue();
472403
if (!parent) throw new Error('Parent is not set');
473404

474-
if ((await this.repository.create(data, parent.unique)).data !== undefined) {
475-
this.setIsNew(false);
476-
477-
// TODO: this might not be the right place to alert the tree, but it works for now
478-
const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT);
479-
const event = new UmbRequestReloadChildrenOfEntityEvent({
480-
entityType: parent.entityType,
481-
unique: parent.unique,
482-
});
483-
eventContext.dispatchEvent(event);
405+
const { data, error } = await this.repository.create(saveData, parent.unique);
406+
if (!data || error) {
407+
throw new Error('Error creating document');
484408
}
409+
410+
this.setIsNew(false);
411+
this.#data.setPersisted(data);
412+
this.#data.setCurrent(data);
413+
414+
// TODO: this might not be the right place to alert the tree, but it works for now
415+
const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT);
416+
const event = new UmbRequestReloadChildrenOfEntityEvent({
417+
entityType: parent.entityType,
418+
unique: parent.unique,
419+
});
420+
eventContext.dispatchEvent(event);
485421
} else {
486-
await this.repository.save(data);
422+
// Save:
423+
const { data, error } = await this.repository.save(saveData);
424+
if (!data || error) {
425+
throw new Error('Error saving document');
426+
}
487427

488-
const actionEventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT);
428+
this.#data.setPersisted(data);
429+
this.#data.setCurrent(data);
430+
431+
const eventContext = await this.getContext(UMB_ACTION_EVENT_CONTEXT);
489432
const event = new UmbRequestReloadStructureForEntityEvent({
490433
unique: this.getUnique()!,
491434
entityType: this.getEntityType(),
492435
});
493436

494-
actionEventContext.dispatchEvent(event);
437+
eventContext.dispatchEvent(event);
495438
}
496439
}
497440

@@ -500,8 +443,7 @@ export class UmbMediaWorkspaceContext
500443
if (!data) {
501444
throw new Error('Data is missing');
502445
}
503-
await this.#createOrSave();
504-
this.setIsNew(false);
446+
await this.#handleSave();
505447
}
506448

507449
async delete() {
@@ -511,14 +453,6 @@ export class UmbMediaWorkspaceContext
511453
}
512454
}
513455

514-
/*
515-
concept notes:
516-
517-
public saveAndPreview() {
518-
519-
}
520-
*/
521-
522456
public createPropertyDatasetContext(
523457
host: UmbControllerHost,
524458
variantId: UmbVariantId,
@@ -529,6 +463,7 @@ export class UmbMediaWorkspaceContext
529463
public override destroy(): void {
530464
this.#data.destroy();
531465
this.structure.destroy();
466+
this.#languageRepository.destroy();
532467
super.destroy();
533468
}
534469
}

0 commit comments

Comments
 (0)