Skip to content

Commit a39bc0e

Browse files
Feature: Client Cache for Document Type and Data Type Detail Models (#19904)
* extend controller base * extend controller base * add package for management api * add signalr as external package * connect to server event hub * do no act on undefined * add event subject * correct alias * export token * add helper methods * cache server responses * fix import * use helpers * add detail request manager * implement for document type * implement for data type * add method for update * add support for create method * align code * Update detail-request.manager.ts * move explicit naming * move into folder * collect server code in folder * add implementation for data type request manager * implement for document type * only cache when we have connection to the server events * update * fix imports * Create cache.test.ts * use sync method to lookup data type item * use correct alias
1 parent 7c3f4f9 commit a39bc0e

34 files changed

+799
-188
lines changed

src/Umbraco.Web.UI.Client/package-lock.json

Lines changed: 128 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Umbraco.Web.UI.Client/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"./lit-element": "./dist-cms/packages/core/lit-element/index.js",
6161
"./localization": "./dist-cms/packages/core/localization/index.js",
6262
"./log-viewer": "./dist-cms/packages/log-viewer/index.js",
63+
"./management-api": "./dist-cms/packages/management-api/index.js",
6364
"./markdown-editor": "./dist-cms/packages/markdown-editor/index.js",
6465
"./media-type": "./dist-cms/packages/media/media-types/index.js",
6566
"./media": "./dist-cms/packages/media/media/index.js",
@@ -126,6 +127,7 @@
126127
"./external/monaco-editor": "./dist-cms/external/monaco-editor/index.js",
127128
"./external/openid": "./dist-cms/external/openid/index.js",
128129
"./external/rxjs": "./dist-cms/external/rxjs/index.js",
130+
"./external/signalr": "./dist-cms/external/signalr/index.js",
129131
"./external/tiptap": "./dist-cms/external/tiptap/index.js",
130132
"./external/uui": "./dist-cms/external/uui/index.js"
131133
},

src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const CORE_PACKAGES = [
1515
import('../../packages/block/umbraco-package.js'),
1616
import('../../packages/clipboard/umbraco-package.js'),
1717
import('../../packages/code-editor/umbraco-package.js'),
18+
import('../../packages/content/umbraco-package.js'),
1819
import('../../packages/data-type/umbraco-package.js'),
1920
import('../../packages/dictionary/umbraco-package.js'),
2021
import('../../packages/documents/umbraco-package.js'),
@@ -24,6 +25,7 @@ const CORE_PACKAGES = [
2425
import('../../packages/help/umbraco-package.js'),
2526
import('../../packages/language/umbraco-package.js'),
2627
import('../../packages/log-viewer/umbraco-package.js'),
28+
import('../../packages/management-api/umbraco-package.js'),
2729
import('../../packages/markdown-editor/umbraco-package.js'),
2830
import('../../packages/media/umbraco-package.js'),
2931
import('../../packages/members/umbraco-package.js'),
@@ -48,7 +50,6 @@ const CORE_PACKAGES = [
4850
import('../../packages/umbraco-news/umbraco-package.js'),
4951
import('../../packages/user/umbraco-package.js'),
5052
import('../../packages/webhook/umbraco-package.js'),
51-
import('../../packages/content/umbraco-package.js'),
5253
];
5354

5455
@customElement('umb-backoffice')
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from '@microsoft/signalr';
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "@umbraco-backoffice/signalr",
3+
"private": true,
4+
"type": "module",
5+
"scripts": {
6+
"build": "vite build"
7+
},
8+
"dependencies": {
9+
"@microsoft/signalr": "9.0.6"
10+
}
11+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { defineConfig } from 'vite';
2+
import { rmSync } from 'fs';
3+
import { getDefaultConfig } from '../../vite-config-base';
4+
5+
const dist = '../../../dist-cms/external/signalr';
6+
7+
// delete the unbundled dist folder
8+
rmSync(dist, { recursive: true, force: true });
9+
10+
export default defineConfig({
11+
...getDefaultConfig({
12+
dist,
13+
base: '/umbraco/backoffice/external/signalr',
14+
entry: {
15+
index: './index.ts',
16+
},
17+
}),
18+
});

src/Umbraco.Web.UI.Client/src/packages/block/block/workspace/block-element-manager.ts

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ export class UmbBlockElementManager<LayoutDataType extends UmbBlockLayoutBaseMod
5151
}
5252

5353
readonly #dataTypeItemManager = new UmbDataTypeItemRepositoryManager(this);
54-
#dataTypeSchemaAliasMap = new Map<string, string>();
5554

5655
readonly structure = new UmbContentTypeStructureManager<UmbContentTypeModel>(
5756
this,
@@ -91,18 +90,6 @@ export class UmbBlockElementManager<LayoutDataType extends UmbBlockLayoutBaseMod
9190
},
9291
null,
9392
);
94-
this.observe(
95-
this.#dataTypeItemManager.items,
96-
(dataTypes) => {
97-
// Make a map of the data type unique and editorAlias:
98-
this.#dataTypeSchemaAliasMap = new Map(
99-
dataTypes.map((dataType) => {
100-
return [dataType.unique, dataType.propertyEditorSchemaAlias];
101-
}),
102-
);
103-
},
104-
null,
105-
);
10693
}
10794

10895
public isLoaded() {
@@ -217,8 +204,9 @@ export class UmbBlockElementManager<LayoutDataType extends UmbBlockLayoutBaseMod
217204
throw new Error(`Property alias "${alias}" not found.`);
218205
}
219206

220-
// TODO: I think we should await this in the same way as we do for Content Detail Workspace Context. [NL]
221-
const editorAlias = this.#dataTypeSchemaAliasMap.get(property.dataType.unique);
207+
const dataTypeItem = await this.#dataTypeItemManager.getItemByUnique(property.dataType.unique);
208+
const editorAlias = dataTypeItem?.propertyEditorSchemaAlias;
209+
222210
if (!editorAlias) {
223211
throw new Error(`Editor Alias of "${property.dataType.unique}" not found.`);
224212
}

src/Umbraco.Web.UI.Client/src/packages/data-type/repository/detail/data-type-detail.repository.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { UmbDataTypeDetailModel } from '../../types.js';
2-
import { UmbDataTypeServerDataSource } from './data-type-detail.server.data-source.js';
2+
import { UmbDataTypeServerDataSource } from './server-data-source/data-type-detail.server.data-source.js';
33
import type { UmbDataTypeDetailStore } from './data-type-detail.store.js';
44
import { UMB_DATA_TYPE_DETAIL_STORE_CONTEXT } from './data-type-detail.store.context-token.js';
55
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';

0 commit comments

Comments
 (0)