Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
93 commits
Select commit Hold shift + click to select a range
a12db87
extend controller base
madsrasmussen Aug 11, 2025
5d6415f
extend controller base
madsrasmussen Aug 11, 2025
05a4235
add package for management api
madsrasmussen Aug 11, 2025
6212027
add signalr as external package
madsrasmussen Aug 11, 2025
2b1be18
connect to server event hub
madsrasmussen Aug 11, 2025
2490bf8
do no act on undefined
madsrasmussen Aug 11, 2025
8c592e3
add event subject
madsrasmussen Aug 11, 2025
c139362
correct alias
madsrasmussen Aug 11, 2025
62799bd
export token
madsrasmussen Aug 11, 2025
5a3f8f9
add helper methods
madsrasmussen Aug 11, 2025
2deb7cc
cache server responses
madsrasmussen Aug 11, 2025
ad257cf
fix import
madsrasmussen Aug 11, 2025
03c1fc8
use helpers
madsrasmussen Aug 11, 2025
1f1baa6
add detail request manager
madsrasmussen Aug 12, 2025
a2c3283
implement for document type
madsrasmussen Aug 12, 2025
9aa73a7
implement for data type
madsrasmussen Aug 12, 2025
9d33c00
add method for update
madsrasmussen Aug 12, 2025
ba732e3
add support for create method
madsrasmussen Aug 12, 2025
9e1deb6
align code
madsrasmussen Aug 12, 2025
cefc5e0
Update detail-request.manager.ts
madsrasmussen Aug 12, 2025
b38cdf2
move explicit naming
madsrasmussen Aug 12, 2025
9905302
move into folder
madsrasmussen Aug 12, 2025
eef5acb
collect server code in folder
madsrasmussen Aug 12, 2025
0045a74
add implementation for data type request manager
madsrasmussen Aug 12, 2025
9058d26
implement for document type
madsrasmussen Aug 12, 2025
c9f701f
only cache when we have connection to the server events
madsrasmussen Aug 13, 2025
da203e6
update
madsrasmussen Aug 14, 2025
de86ac7
fix imports
madsrasmussen Aug 14, 2025
107e6d6
introduce item cache
madsrasmussen Aug 14, 2025
f4af0e3
call trough get items controller
madsrasmussen Aug 15, 2025
feba22b
remove log
madsrasmussen Aug 15, 2025
523e63b
add unit tests for item cache
madsrasmussen Aug 15, 2025
ebdb339
Create cache.test.ts
madsrasmussen Aug 15, 2025
1f181c3
use sync method to lookup data type item
madsrasmussen Aug 15, 2025
82be7df
Merge branch 'main' into v16/feature/entity-detail-runtime-cache
madsrasmussen Aug 15, 2025
2cdfef1
use correct alias
madsrasmussen Aug 15, 2025
c663462
Merge branch 'v16/feature/entity-detail-runtime-cache' into v16/featu…
madsrasmussen Aug 15, 2025
bfa9918
remove unused code
madsrasmussen Aug 15, 2025
f9e9f67
data type item cache
madsrasmussen Aug 15, 2025
506fbc3
add client document type item cache
madsrasmussen Aug 15, 2025
7499af8
add client cache for dictionary items
madsrasmussen Aug 15, 2025
2f94ef2
add media item client cache
madsrasmussen Aug 16, 2025
b3730f3
add client cache for media type item
madsrasmussen Aug 16, 2025
cec80e5
add client cache for member and member type items
madsrasmussen Aug 16, 2025
5efa935
add member group item cache
madsrasmussen Aug 18, 2025
2df8103
Merge branch 'main' into v16/feature/item-data-runtime-cache
iOvergaard Aug 18, 2025
aa5c1d6
split detail cache invalidation from request manager
madsrasmussen Aug 18, 2025
729d65b
introduce item cache invalidation manager
madsrasmussen Aug 18, 2025
7847a7f
Merge branch 'main' into v16/feature/item-data-runtime-cache
madsrasmussen Aug 18, 2025
bc30045
Merge branch 'v16/feature/item-data-runtime-cache' into v16/feature/i…
madsrasmussen Aug 18, 2025
038d771
remove arg
madsrasmussen Aug 18, 2025
ecb3da0
add data type item cache manager
madsrasmussen Aug 18, 2025
66f8b80
add memeber group item cache invalidation manager
madsrasmussen Aug 18, 2025
5961dd6
remove unused
madsrasmussen Aug 18, 2025
c29c498
invalidate documents when document types changes
madsrasmussen Aug 18, 2025
e8d3f65
align naming
madsrasmussen Aug 18, 2025
cffd86e
add method to get unique
madsrasmussen Aug 18, 2025
03c84a3
Merge branch 'v16/feature/item-data-runtime-cache' into v16/feature/i…
madsrasmussen Aug 18, 2025
85b5d93
add dictionary item cache manager
madsrasmussen Aug 18, 2025
1a6f81d
use server model instead of mapping
madsrasmussen Aug 18, 2025
e74a23a
call method
madsrasmussen Aug 18, 2025
51d15bc
Merge branch 'v16/feature/item-data-runtime-cache' into v16/feature/i…
madsrasmussen Aug 19, 2025
d16dcf9
Merge branch 'main' into v16/feature/item-data-runtime-cache-all-enti…
madsrasmussen Aug 19, 2025
ed83863
Merge branch 'main' into v16/feature/item-data-runtime-cache-all-enti…
madsrasmussen Aug 19, 2025
d9ce71f
update args
madsrasmussen Aug 19, 2025
e43a21f
update document type item cache invalidation
madsrasmussen Aug 19, 2025
6a35f40
add cache invalidation for member items
madsrasmussen Aug 19, 2025
0b8ca76
update
madsrasmussen Aug 19, 2025
08b6550
update
madsrasmussen Aug 19, 2025
87207cc
update
madsrasmussen Aug 19, 2025
74cba33
add item caching for languages
madsrasmussen Aug 19, 2025
f4bf2f1
add template item cache
madsrasmussen Aug 19, 2025
bf51c3d
cache stylesheet items
madsrasmussen Aug 19, 2025
98afa81
add caching for script items
madsrasmussen Aug 19, 2025
49feb7b
Merge branch 'main' into v16/feature/item-data-runtime-cache-all-enti…
madsrasmussen Aug 20, 2025
a8b05f9
cache partial view items
madsrasmussen Aug 20, 2025
769bf8e
cache user items
madsrasmussen Aug 20, 2025
7350f3f
cache user group items
madsrasmussen Aug 20, 2025
44790b1
add document blueprint item cache
madsrasmussen Aug 20, 2025
2cf2b7e
Merge branch 'main' into v16/feature/item-data-runtime-cache-all-enti…
madsrasmussen Aug 20, 2025
8733159
Removed readonly Signs property to re-align client models.
AndyButland Aug 20, 2025
1533da9
Regenerate client types.
AndyButland Aug 20, 2025
718211e
Applied changes from code review.
AndyButland Aug 20, 2025
0b96bcf
Merge remote-tracking branch 'origin/v16/bugfix/fix-models-after-sign…
madsrasmussen Aug 20, 2025
d6e3ffb
cache static file items
madsrasmussen Aug 20, 2025
3fd978b
Merge branch 'main' into v16/feature/item-data-runtime-cache-all-enti…
madsrasmussen Aug 20, 2025
d30b78f
add webhook item cache
madsrasmussen Aug 21, 2025
5df9410
update mocks with signs data
madsrasmussen Aug 21, 2025
37f526f
update mocks
madsrasmussen Aug 21, 2025
dd702ea
fix lint error
madsrasmussen Aug 21, 2025
2c191bf
Merge branch 'v16/feature/generate-server-api' into v16/feature/item-…
madsrasmussen Aug 21, 2025
0290fd6
Merge branch 'main' into v16/feature/item-data-runtime-cache-all-enti…
madsrasmussen Aug 21, 2025
ba330ee
fix eslint errors
madsrasmussen Aug 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import { UmbManagementApiDataTypeDetailDataCacheInvalidationManager } from './repository/detail/server-data-source/data-type-detail.server.cache-invalidation.manager.js';
import { UmbManagementApiDataTypeItemDataCacheInvalidationManager } from './repository/item/data-type-item.server.cache-invalidation.manager.js';
import type { UmbEntryPointOnInit, UmbEntryPointOnUnload } from '@umbraco-cms/backoffice/extension-api';

let detailDataCacheInvalidationManager: UmbManagementApiDataTypeDetailDataCacheInvalidationManager | undefined;
let itemDataCacheInvalidationManager: UmbManagementApiDataTypeItemDataCacheInvalidationManager | undefined;

export const onInit: UmbEntryPointOnInit = (host) => {
detailDataCacheInvalidationManager = new UmbManagementApiDataTypeDetailDataCacheInvalidationManager(host);
itemDataCacheInvalidationManager = new UmbManagementApiDataTypeItemDataCacheInvalidationManager(host);
};

export const onUnload: UmbEntryPointOnUnload = () => {
detailDataCacheInvalidationManager?.destroy();
itemDataCacheInvalidationManager?.destroy();
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { dataTypeItemCache } from './data-type-item.server.cache.js';
import { UmbManagementApiItemDataCacheInvalidationManager } from '@umbraco-cms/backoffice/management-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type { DataTypeItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';

export class UmbManagementApiDataTypeItemDataCacheInvalidationManager extends UmbManagementApiItemDataCacheInvalidationManager<DataTypeItemResponseModel> {
constructor(host: UmbControllerHost) {
super(host, {
dataCache: dataTypeItemCache,
eventSources: ['Umbraco:CMS:DataType'],
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import type { DataTypeItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
import { UmbManagementApiItemDataCache } from '@umbraco-cms/backoffice/management-api';

const dataTypeItemCache = new UmbManagementApiItemDataCache<DataTypeItemResponseModel>();

export { dataTypeItemCache };
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import { UMB_DATA_TYPE_ENTITY_TYPE } from '../../entity.js';
import type { UmbDataTypeItemModel } from './types.js';
import { UmbManagementApiDataTypeItemDataRequestManager } from './data-type-item.server.request-manager.js';
import { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository';
import type { DataTypeItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
import { DataTypeService } from '@umbraco-cms/backoffice/external/backend-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
import type { ManifestPropertyEditorUi } from '@umbraco-cms/backoffice/property-editor';
import { UmbItemDataApiGetRequestController } from '@umbraco-cms/backoffice/entity-item';

let manifestPropertyEditorUis: Array<ManifestPropertyEditorUi> = [];

Expand All @@ -19,12 +18,13 @@ export class UmbDataTypeItemServerDataSource extends UmbItemServerDataSourceBase
DataTypeItemResponseModel,
UmbDataTypeItemModel
> {
#itemRequestManager = new UmbManagementApiDataTypeItemDataRequestManager(this);

/**
* Creates an instance of UmbDataTypeItemServerDataSource.
* @param {UmbControllerHost} host - The controller host for this controller to be appended to
* @memberof UmbDataTypeItemServerDataSource
*/

constructor(host: UmbControllerHost) {
super(host, {
mapper,
Expand All @@ -41,13 +41,7 @@ export class UmbDataTypeItemServerDataSource extends UmbItemServerDataSourceBase
override async getItems(uniques: Array<string>) {
if (!uniques) throw new Error('Uniques are missing');

const itemRequestManager = new UmbItemDataApiGetRequestController(this, {
// eslint-disable-next-line local-rules/no-direct-api-import
api: (args) => DataTypeService.getItemDataType({ query: { id: args.uniques } }),
uniques,
});

const { data, error } = await itemRequestManager.request();
const { data, error } = await this.#itemRequestManager.getItems(uniques);

return { data: this._getMappedItems(data), error };
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/* eslint-disable local-rules/no-direct-api-import */
import { dataTypeItemCache } from './data-type-item.server.cache.js';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { DataTypeService, type DataTypeItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
import { UmbManagementApiItemDataRequestManager } from '@umbraco-cms/backoffice/management-api';

export class UmbManagementApiDataTypeItemDataRequestManager extends UmbManagementApiItemDataRequestManager<DataTypeItemResponseModel> {
constructor(host: UmbControllerHost) {
super(host, {
getItems: (ids: Array<string>) => DataTypeService.getItemDataType({ query: { id: ids } }),
dataCache: dataTypeItemCache,
getUniqueMethod: (item) => item.id,
});
}
}
12 changes: 12 additions & 0 deletions src/Umbraco.Web.UI.Client/src/packages/dictionary/entry-point.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { UmbManagementApiDictionaryItemDataCacheInvalidationManager } from './repository/item/dictionary-item.server.cache-invalidation.manager.js';
import type { UmbEntryPointOnInit, UmbEntryPointOnUnload } from '@umbraco-cms/backoffice/extension-api';

let itemDataCacheInvalidationManager: UmbManagementApiDictionaryItemDataCacheInvalidationManager | undefined;

export const onInit: UmbEntryPointOnInit = (host) => {
itemDataCacheInvalidationManager = new UmbManagementApiDictionaryItemDataCacheInvalidationManager(host);
};

export const onUnload: UmbEntryPointOnUnload = () => {
itemDataCacheInvalidationManager?.destroy();
};
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,10 @@ export const manifests: Array<UmbExtensionManifest> = [
...searchManifests,
...treeManifests,
...workspaceManifests,
{
name: 'Dictionary Backoffice Entry Point',
alias: 'Umb.EntryPoint.Dictionary',
type: 'backofficeEntryPoint',
js: () => import('./entry-point.js'),
},
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { dictionaryItemCache } from './dictionary-item.server.cache.js';
import { UmbManagementApiItemDataCacheInvalidationManager } from '@umbraco-cms/backoffice/management-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type { DictionaryItemItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';

export class UmbManagementApiDictionaryItemDataCacheInvalidationManager extends UmbManagementApiItemDataCacheInvalidationManager<DictionaryItemItemResponseModel> {
constructor(host: UmbControllerHost) {
super(host, {
dataCache: dictionaryItemCache,
eventSources: ['Umbraco:CMS:DictionaryItem'],
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import type { DictionaryItemItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
import { UmbManagementApiItemDataCache } from '@umbraco-cms/backoffice/management-api';

const dictionaryItemCache = new UmbManagementApiItemDataCache<DictionaryItemItemResponseModel>();

export { dictionaryItemCache };
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { UMB_DICTIONARY_ENTITY_TYPE } from '../../entity.js';
import type { UmbDictionaryItemModel } from './types.js';
import { UmbManagementApiDictionaryItemDataRequestManager } from './dictionary-item.server.request-manager.js';
import { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository';
import type { DictionaryItemItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
import { DictionaryService } from '@umbraco-cms/backoffice/external/backend-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbItemDataApiGetRequestController } from '@umbraco-cms/backoffice/entity-item';

/**
* A server data source for Dictionary items
Expand All @@ -15,6 +14,8 @@ export class UmbDictionaryItemServerDataSource extends UmbItemServerDataSourceBa
DictionaryItemItemResponseModel,
UmbDictionaryItemModel
> {
#itemRequestManager = new UmbManagementApiDictionaryItemDataRequestManager(this);

/**
* Creates an instance of UmbDictionaryItemServerDataSource.
* @param {UmbControllerHost} host - The controller host for this controller to be appended to
Expand All @@ -29,13 +30,7 @@ export class UmbDictionaryItemServerDataSource extends UmbItemServerDataSourceBa
override async getItems(uniques: Array<string>) {
if (!uniques) throw new Error('Uniques are missing');

const itemRequestManager = new UmbItemDataApiGetRequestController(this, {
// eslint-disable-next-line local-rules/no-direct-api-import
api: (args) => DictionaryService.getItemDictionary({ query: { id: args.uniques } }),
uniques,
});

const { data, error } = await itemRequestManager.request();
const { data, error } = await this.#itemRequestManager.getItems(uniques);

return { data: this._getMappedItems(data), error };
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/* eslint-disable local-rules/no-direct-api-import */
import { dictionaryItemCache } from './dictionary-item.server.cache.js';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { DictionaryService, type DictionaryItemItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
import { UmbManagementApiItemDataRequestManager } from '@umbraco-cms/backoffice/management-api';

export class UmbManagementApiDictionaryItemDataRequestManager extends UmbManagementApiItemDataRequestManager<DictionaryItemItemResponseModel> {
constructor(host: UmbControllerHost) {
super(host, {
getItems: (ids: Array<string>) => DictionaryService.getItemDictionary({ query: { id: ids } }),
dataCache: dictionaryItemCache,
getUniqueMethod: (item) => item.id,
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { UmbManagementApiDocumentBlueprintItemDataCacheInvalidationManager } from './repository/item/document-blueprint-item.server.cache-invalidation.manager.js';
import type { UmbEntryPointOnInit, UmbEntryPointOnUnload } from '@umbraco-cms/backoffice/extension-api';

let itemDataCacheInvalidationManager: UmbManagementApiDocumentBlueprintItemDataCacheInvalidationManager | undefined;

export const onInit: UmbEntryPointOnInit = (host) => {
itemDataCacheInvalidationManager = new UmbManagementApiDocumentBlueprintItemDataCacheInvalidationManager(host);
};

export const onUnload: UmbEntryPointOnUnload = () => {
itemDataCacheInvalidationManager?.destroy();
};
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,10 @@ export const manifests: Array<UmbExtensionManifest> = [
...repositoryManifests,
...treeManifests,
...workspaceManifests,
{
name: 'Document Blueprint Backoffice Entry Point',
alias: 'Umb.BackofficeEntryPoint.DocumentBlueprint',
type: 'backofficeEntryPoint',
js: () => import('./entry-point.js'),
},
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { documentBlueprintItemCache } from './document-blueprint-item.server.cache.js';
import {
UmbManagementApiItemDataCacheInvalidationManager,
type UmbManagementApiServerEventModel,
} from '@umbraco-cms/backoffice/management-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type { DocumentBlueprintItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';

export class UmbManagementApiDocumentBlueprintItemDataCacheInvalidationManager extends UmbManagementApiItemDataCacheInvalidationManager<DocumentBlueprintItemResponseModel> {
constructor(host: UmbControllerHost) {
super(host, {
dataCache: documentBlueprintItemCache,
/* The Document Blueprint item model includes info about the Document Type.
We need to invalidate the cache for both Document and DocumentType events. */
eventSources: ['Umbraco:CMS:DocumentBlueprint', 'Umbraco:CMS:DocumentType'],
});
}

protected override _onServerEvent(event: UmbManagementApiServerEventModel) {
if (event.eventSource === 'Umbraco:CMS:DocumentType') {
this.#onDocumentTypeChange(event);
} else {
this.#onDocumentChange(event);
}
}

#onDocumentChange(event: UmbManagementApiServerEventModel) {
// Invalidate the specific document
const documentId = event.key;
this._dataCache.delete(documentId);
}

#onDocumentTypeChange(event: UmbManagementApiServerEventModel) {
// Invalidate all documents of the specified Document Type
const documentTypeId = event.key;
const documentIds = this._dataCache
.getAll()
.filter((cachedItem) => cachedItem.documentType.id === documentTypeId)
.map((item) => item.id);

documentIds.forEach((id) => this._dataCache.delete(id));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import type { DocumentBlueprintItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
import { UmbManagementApiItemDataCache } from '@umbraco-cms/backoffice/management-api';

const documentBlueprintItemCache = new UmbManagementApiItemDataCache<DocumentBlueprintItemResponseModel>();

export { documentBlueprintItemCache };
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { UMB_DOCUMENT_BLUEPRINT_ENTITY_TYPE } from '../../entity.js';
import type { UmbDocumentBlueprintItemBaseModel, UmbDocumentBlueprintItemModel } from './types.js';
import { DocumentBlueprintService, DocumentTypeService } from '@umbraco-cms/backoffice/external/backend-api';
import { UmbManagementApiDocumentBlueprintItemDataRequestManager } from './document-blueprint-item.server.request-manager.js';
import { DocumentTypeService } from '@umbraco-cms/backoffice/external/backend-api';
import { UmbItemServerDataSourceBase } from '@umbraco-cms/backoffice/repository';
import type { DocumentBlueprintItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { tryExecute } from '@umbraco-cms/backoffice/resources';
import { UmbItemDataApiGetRequestController } from '@umbraco-cms/backoffice/entity-item';

/**
* A data source for Document Blueprint items that fetches data from the server
Expand All @@ -16,6 +16,8 @@ export class UmbDocumentBlueprintItemServerDataSource extends UmbItemServerDataS
DocumentBlueprintItemResponseModel,
UmbDocumentBlueprintItemModel
> {
#itemRequestManager = new UmbManagementApiDocumentBlueprintItemDataRequestManager(this);

/**
* Creates an instance of UmbDocumentBlueprintItemServerDataSource.
* @param {UmbControllerHost} host - The controller host for this controller to be appended to
Expand Down Expand Up @@ -49,13 +51,7 @@ export class UmbDocumentBlueprintItemServerDataSource extends UmbItemServerDataS
override async getItems(uniques: Array<string>) {
if (!uniques) throw new Error('Uniques are missing');

const itemRequestManager = new UmbItemDataApiGetRequestController(this, {
// eslint-disable-next-line local-rules/no-direct-api-import
api: (args) => DocumentBlueprintService.getItemDocumentBlueprint({ query: { id: args.uniques } }),
uniques,
});

const { data, error } = await itemRequestManager.request();
const { data, error } = await this.#itemRequestManager.getItems(uniques);

return { data: this._getMappedItems(data), error };
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/* eslint-disable local-rules/no-direct-api-import */
import { documentBlueprintItemCache } from './document-blueprint-item.server.cache.js';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import {
DocumentBlueprintService,
type DocumentBlueprintItemResponseModel,
} from '@umbraco-cms/backoffice/external/backend-api';
import { UmbManagementApiItemDataRequestManager } from '@umbraco-cms/backoffice/management-api';

export class UmbManagementApiDocumentBlueprintItemDataRequestManager extends UmbManagementApiItemDataRequestManager<DocumentBlueprintItemResponseModel> {
constructor(host: UmbControllerHost) {
super(host, {
getItems: (ids: Array<string>) => DocumentBlueprintService.getItemDocumentBlueprint({ query: { id: ids } }),
dataCache: documentBlueprintItemCache,
getUniqueMethod: (item) => item.id,
});
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import { UmbManagementApiDocumentTypeDetailDataCacheInvalidationManager } from './repository/detail/server-data-source/document-type-detail.server.cache-invalidation.manager.js';
import { UmbManagementApiDocumentTypeItemDataCacheInvalidationManager } from './repository/item/document-type-item.server.cache-invalidation.manager.js';
import type { UmbEntryPointOnInit, UmbEntryPointOnUnload } from '@umbraco-cms/backoffice/extension-api';

let detailDataCacheInvalidationManager: UmbManagementApiDocumentTypeDetailDataCacheInvalidationManager | undefined;
let itemDataCacheInvalidationManager: UmbManagementApiDocumentTypeItemDataCacheInvalidationManager | undefined;

export const onInit: UmbEntryPointOnInit = (host) => {
detailDataCacheInvalidationManager = new UmbManagementApiDocumentTypeDetailDataCacheInvalidationManager(host);
itemDataCacheInvalidationManager = new UmbManagementApiDocumentTypeItemDataCacheInvalidationManager(host);
};

export const onUnload: UmbEntryPointOnUnload = () => {
detailDataCacheInvalidationManager?.destroy();
itemDataCacheInvalidationManager?.destroy();
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { documentTypeItemCache } from './document-type-item.server.cache.js';
import { UmbManagementApiItemDataCacheInvalidationManager } from '@umbraco-cms/backoffice/management-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type { DocumentTypeItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';

export class UmbManagementApiDocumentTypeItemDataCacheInvalidationManager extends UmbManagementApiItemDataCacheInvalidationManager<DocumentTypeItemResponseModel> {
constructor(host: UmbControllerHost) {
super(host, {
dataCache: documentTypeItemCache,
eventSources: ['Umbraco:CMS:DocumentType'],
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import type { DocumentTypeItemResponseModel } from '@umbraco-cms/backoffice/external/backend-api';
import { UmbManagementApiItemDataCache } from '@umbraco-cms/backoffice/management-api';

const documentTypeItemCache = new UmbManagementApiItemDataCache<DocumentTypeItemResponseModel>();

export { documentTypeItemCache };
Loading
Loading