@@ -8,12 +8,15 @@ import type {
8
8
UmbMediaVariantModel ,
9
9
UmbMediaVariantOptionModel ,
10
10
} 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' ;
11
13
import { UMB_MEMBER_DETAIL_MODEL_VARIANT_SCAFFOLD } from './constants.js' ;
12
14
import { UMB_INVARIANT_CULTURE , UmbVariantId } from '@umbraco-cms/backoffice/variant' ;
13
15
import { UmbContentTypeStructureManager } from '@umbraco-cms/backoffice/content-type' ;
14
16
import {
15
17
UmbSubmittableWorkspaceContextBase ,
16
18
UmbWorkspaceIsNewRedirectController ,
19
+ UmbWorkspaceIsNewRedirectControllerAlias ,
17
20
UmbWorkspaceSplitViewManager ,
18
21
} from '@umbraco-cms/backoffice/workspace' ;
19
22
import {
@@ -39,6 +42,7 @@ import { UmbEntityContext } from '@umbraco-cms/backoffice/entity';
39
42
import { UmbIsTrashedEntityContext } from '@umbraco-cms/backoffice/recycle-bin' ;
40
43
import { UmbReadOnlyVariantStateManager } from '@umbraco-cms/backoffice/utils' ;
41
44
import { UmbDataTypeItemRepositoryManager } from '@umbraco-cms/backoffice/data-type' ;
45
+ import { UMB_MEDIA_COLLECTION_ALIAS } from '../collection/index.js' ;
42
46
43
47
type ContentModel = UmbMediaDetailModel ;
44
48
type ContentTypeModel = UmbMediaTypeDetailModel ;
@@ -181,7 +185,7 @@ export class UmbMediaWorkspaceContext
181
185
182
186
this . routes . setRoutes ( [
183
187
{
184
- path : 'create/parent/:entityType/:parentUnique/:mediaTypeUnique' ,
188
+ path : UMB_CREATE_MEDIA_WORKSPACE_PATH_PATTERN . toString ( ) ,
185
189
component : ( ) => import ( './media-workspace-editor.element.js' ) ,
186
190
setup : async ( _component , info ) => {
187
191
const parentEntityType = info . match . params . entityType ;
@@ -197,9 +201,10 @@ export class UmbMediaWorkspaceContext
197
201
} ,
198
202
} ,
199
203
{
200
- path : 'edit/:unique' ,
204
+ path : UMB_EDIT_MEDIA_WORKSPACE_PATH_PATTERN . toString ( ) ,
201
205
component : ( ) => import ( './media-workspace-editor.element.js' ) ,
202
206
setup : ( _component , info ) => {
207
+ this . removeUmbControllerByAlias ( UmbWorkspaceIsNewRedirectControllerAlias ) ;
203
208
const unique = info . match . params . unique ;
204
209
this . load ( unique ) ;
205
210
} ,
@@ -209,8 +214,7 @@ export class UmbMediaWorkspaceContext
209
214
210
215
override resetState ( ) {
211
216
super . resetState ( ) ;
212
- this . #data. setPersisted ( undefined ) ;
213
- this . #data. setCurrent ( undefined ) ;
217
+ this . #data. clear ( ) ;
214
218
}
215
219
216
220
async loadLanguages ( ) {
@@ -240,7 +244,7 @@ export class UmbMediaWorkspaceContext
240
244
#onStoreChange( entity : ContentModel | undefined ) {
241
245
if ( ! entity ) {
242
246
//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 ) ;
244
248
}
245
249
}
246
250
@@ -260,7 +264,7 @@ export class UmbMediaWorkspaceContext
260
264
}
261
265
262
266
getCollectionAlias ( ) {
263
- return 'Umb.Collection.Media' ;
267
+ return UMB_MEDIA_COLLECTION_ALIAS ;
264
268
}
265
269
266
270
getData ( ) {
@@ -308,7 +312,7 @@ export class UmbMediaWorkspaceContext
308
312
}
309
313
310
314
setName ( name : string , variantId ?: UmbVariantId ) {
311
- this . #updateVariantData( variantId ?? UmbVariantId . CreateInvariant ( ) , { name } ) ;
315
+ this . #data . updateVariantData ( variantId ?? UmbVariantId . CreateInvariant ( ) , { name } ) ;
312
316
}
313
317
314
318
name ( variantId ?: UmbVariantId ) {
@@ -330,22 +334,22 @@ export class UmbMediaWorkspaceContext
330
334
async propertyValueByAlias < PropertyValueType = unknown > ( propertyAlias : string , variantId ?: UmbVariantId ) {
331
335
return this . #data. createObservablePartOfCurrent (
332
336
( 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 ) )
334
338
?. value as PropertyValueType ,
335
339
) ;
336
340
}
337
341
338
342
/**
339
343
* 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
342
346
* @returns The value or undefined if not set or found.
343
347
*/
344
348
getPropertyValue < ReturnType = unknown > ( alias : string , variantId ?: UmbVariantId ) {
345
349
const currentData = this . #data. getCurrent ( ) ;
346
350
if ( currentData ) {
347
351
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 ) ,
349
353
) ;
350
354
return newDataSet ?. value as ReturnType ;
351
355
}
@@ -390,108 +394,47 @@ export class UmbMediaWorkspaceContext
390
394
this . #data. finishPropertyValueChange ( ) ;
391
395
} ;
392
396
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' ) ;
469
400
470
401
if ( this . getIsNew ( ) ) {
471
402
const parent = this . #parent. getValue ( ) ;
472
403
if ( ! parent ) throw new Error ( 'Parent is not set' ) ;
473
404
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' ) ;
484
408
}
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 ) ;
485
421
} 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
+ }
487
427
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 ) ;
489
432
const event = new UmbRequestReloadStructureForEntityEvent ( {
490
433
unique : this . getUnique ( ) ! ,
491
434
entityType : this . getEntityType ( ) ,
492
435
} ) ;
493
436
494
- actionEventContext . dispatchEvent ( event ) ;
437
+ eventContext . dispatchEvent ( event ) ;
495
438
}
496
439
}
497
440
@@ -500,8 +443,7 @@ export class UmbMediaWorkspaceContext
500
443
if ( ! data ) {
501
444
throw new Error ( 'Data is missing' ) ;
502
445
}
503
- await this . #createOrSave( ) ;
504
- this . setIsNew ( false ) ;
446
+ await this . #handleSave( ) ;
505
447
}
506
448
507
449
async delete ( ) {
@@ -511,14 +453,6 @@ export class UmbMediaWorkspaceContext
511
453
}
512
454
}
513
455
514
- /*
515
- concept notes:
516
-
517
- public saveAndPreview() {
518
-
519
- }
520
- */
521
-
522
456
public createPropertyDatasetContext (
523
457
host : UmbControllerHost ,
524
458
variantId : UmbVariantId ,
@@ -529,6 +463,7 @@ export class UmbMediaWorkspaceContext
529
463
public override destroy ( ) : void {
530
464
this . #data. destroy ( ) ;
531
465
this . structure . destroy ( ) ;
466
+ this . #languageRepository. destroy ( ) ;
532
467
super . destroy ( ) ;
533
468
}
534
469
}
0 commit comments