Lorem ipsum dolor sit amet consectetuer adipiscing elit
+
+
Lorem ipsum dolor sit amet consectetuer.
+
Aenean commodo ligula eget dolor.
+
Aenean massa cum sociis natoque penatibus.
+
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing
+ elit. Aenean commodo ligula eget dolor.
+
+
+
+ Lorem ipsum dolor sit amet, consectetuer
+ adipiscing elit. Aenean commodo ligula eget dolor.
+ Aenean massa strong. Cum sociis
+ natoque penatibus et magnis dis parturient montes,
+ nascetur ridiculus mus. Donec quam felis, ultricies
+ nec, pellentesque eu, pretium quis, sem. Nulla consequat
+ massa quis enim. Donec pede justo, fringilla vel,
+ aliquet nec, vulputate eget, arcu. In em
+ enim justo, rhoncus ut, imperdiet a, venenatis vitae,
+ justo. Nullam link
+ dictum felis eu pede mollis pretium.
+
`;
- }
-
onKeyPress(e: KeyboardEvent) {
if (e.key !== 'Enter') return;
//TODO: Tab does not seem to trigger keyboard events. We need to make some logic for ordered and unordered lists when tab is being used.
@@ -548,20 +102,13 @@ export class UmbInputCodeEditorElement extends FormControlMixin(UmbLitElement) {
}
render() {
- return html`
Lorem ipsum dolor sit amet consectetuer adipiscing elit
-
-
Lorem ipsum dolor sit amet consectetuer.
-
Aenean commodo ligula eget dolor.
-
Aenean massa cum sociis natoque penatibus.
-
-
- Lorem ipsum dolor sit amet, consectetuer adipiscing
- elit. Aenean commodo ligula eget dolor.
-
-
-
- Lorem ipsum dolor sit amet, consectetuer
- adipiscing elit. Aenean commodo ligula eget dolor.
- Aenean massa strong. Cum sociis
- natoque penatibus et magnis dis parturient montes,
- nascetur ridiculus mus. Donec quam felis, ultricies
- nec, pellentesque eu, pretium quis, sem. Nulla consequat
- massa quis enim. Donec pede justo, fringilla vel,
- aliquet nec, vulputate eget, arcu. In em
- enim justo, rhoncus ut, imperdiet a, venenatis vitae,
- justo. Nullam link
- dictum felis eu pede mollis pretium.
-
-
- `,
+ value: `
Lorem ipsum dolor sit amet consectetuer adipiscing elit
+
+
Lorem ipsum dolor sit amet consectetuer.
+
Aenean commodo ligula eget dolor.
+
Aenean massa cum sociis natoque penatibus.
+
+
+ Lorem ipsum dolor sit amet, consectetuer adipiscing
+ elit. Aenean commodo ligula eget dolor.
+
+
+
+ Lorem ipsum dolor sit amet, consectetuer
+ adipiscing elit. Aenean commodo ligula eget dolor.
+ Aenean massa strong. Cum sociis
+ natoque penatibus et magnis dis parturient montes,
+ nascetur ridiculus mus. Donec quam felis, ultricies
+ nec, pellentesque eu, pretium quis, sem. Nulla consequat
+ massa quis enim. Donec pede justo, fringilla vel,
+ aliquet nec, vulputate eget, arcu. In em
+ enim justo, rhoncus ut, imperdiet a, venenatis vitae,
+ justo. Nullam link
+ dictum felis eu pede mollis pretium.
+
+`,
},
{
alias: 'email',
From 0d94309394d006be7d21afdd2c9ddf99e367ad3e Mon Sep 17 00:00:00 2001
From: Bjarne Fyrstenborg
Date: Sun, 18 Feb 2024 19:46:40 +0100
Subject: [PATCH 011/325] Cleanup
---
.../input-code-editor/input-code-editor.element.ts | 13 -------------
1 file changed, 13 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts
index 18386f9e7c..1e7dfd62f3 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-code-editor/input-code-editor.element.ts
@@ -30,28 +30,15 @@ export class UmbInputCodeEditorElement extends FormControlMixin(UmbLitElement) {
@property({ type: String })
language: string = 'HTML';
- @property()
- overlaySize?: UUIModalSidebarSize;
-
#isCodeEditorReady = new UmbBooleanState(false);
#editor?: UmbCodeEditorController;
@query('umb-code-editor')
_codeEditor?: UmbCodeEditorElement;
- private _modalContext?: UmbModalManagerContext;
-
- private serverUrl?: string;
-
constructor() {
super();
this.#loadCodeEditor();
- this.consumeContext(UMB_MODAL_MANAGER_CONTEXT, (instance) => {
- this._modalContext = instance;
- });
- this.consumeContext(UMB_APP_CONTEXT, (instance) => {
- this.serverUrl = instance.getServerUrl();
- });
}
async #loadCodeEditor() {
From 3762bdbfb996406eb5ae2756934913780157c367 Mon Sep 17 00:00:00 2001
From: Bjarne Fyrstenborg
Date: Sun, 18 Feb 2024 19:47:05 +0100
Subject: [PATCH 012/325] Add possible modes
---
.../core/property-editor/uis/code-editor/manifests.ts | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts
index 9c7efaac80..4dacc7286f 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/code-editor/manifests.ts
@@ -20,7 +20,15 @@ export const manifest: ManifestPropertyEditorUi = {
config: [
{
alias: 'items',
- value: ['Razor', 'HTML', 'CSS', 'JavaScript'],
+ value: {
+ 0: { sortOrder: 1, value: 'Razor' },
+ 1: { sortOrder: 2, value: 'HTML' },
+ 2: { sortOrder: 3, value: 'CSS' },
+ 3: { sortOrder: 3, value: 'JavaScript' },
+ 4: { sortOrder: 3, value: 'TypeScript' },
+ 5: { sortOrder: 3, value: 'Markdown' },
+ 6: { sortOrder: 3, value: 'JSON' },
+ },
},
],
},
From 3ca06aaef87a16b7427f7c15ed7a7323b5bdc050 Mon Sep 17 00:00:00 2001
From: Bjarne Fyrstenborg
Date: Sat, 24 Feb 2024 16:52:14 +0100
Subject: [PATCH 013/325] Add more languages
---
.../src/mocks/data/data-type/data-type.data.ts | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts
index f3af6e6981..a49ce4a380 100644
--- a/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts
+++ b/src/Umbraco.Web.UI.Client/src/mocks/data/data-type/data-type.data.ts
@@ -472,6 +472,9 @@ export const data: Array = [
1: { sortOrder: 2, value: 'HTML' },
2: { sortOrder: 3, value: 'CSS' },
3: { sortOrder: 4, value: 'JavaScript' },
+ 4: { sortOrder: 3, value: 'TypeScript' },
+ 5: { sortOrder: 3, value: 'Markdown' },
+ 6: { sortOrder: 3, value: 'JSON' },
},
},
],
From a88d7104ae5c1899ce1d57fe5d4c48c793d57370 Mon Sep 17 00:00:00 2001
From: Mads Rasmussen
Date: Mon, 24 Jun 2024 11:33:01 +0200
Subject: [PATCH 014/325] check paths in dist-cms instead of source
---
src/Umbraco.Web.UI.Client/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json
index 679141f9db..cebcf01b78 100644
--- a/src/Umbraco.Web.UI.Client/package.json
+++ b/src/Umbraco.Web.UI.Client/package.json
@@ -147,7 +147,7 @@
"build:workspaces": "npm run build -ws --if-present",
"build": "tsc --project ./src/tsconfig.build.json && rollup -c ./src/rollup.config.js",
"check": "npm run lint:errors && npm run compile && npm run build-storybook && npm run generate:jsonschema:dist",
- "check:paths": "node ./devops/build/check-path-length.js src 140",
+ "check:paths": "node ./devops/build/check-path-length.js dist-cms 140",
"compile": "tsc",
"dev": "vite",
"dev:server": "VITE_UMBRACO_USE_MSW=off vite",
From f1ba13f589817f0fc1fd174423668a70bb88b439 Mon Sep 17 00:00:00 2001
From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Date: Wed, 26 Jun 2024 11:38:15 +0200
Subject: [PATCH 015/325] check the paths when building
---
src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml b/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
index 6bccda7c83..be4e4d4158 100644
--- a/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
+++ b/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
@@ -40,6 +40,7 @@ jobs:
- run: npm ci --no-audit --no-fund --prefer-offline
- run: npm run lint:errors
- run: npm run build
+ - run: npm run check:paths
- run: npm run generate:jsonschema:dist
- run: npx playwright install --with-deps
- run: npm test
From 19f75e180bdcf28f2033a2df214782d65c5c73c5 Mon Sep 17 00:00:00 2001
From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Date: Wed, 26 Jun 2024 11:38:37 +0200
Subject: [PATCH 016/325] up the requirement to a max of 120 chars
---
src/Umbraco.Web.UI.Client/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json
index 3d8ab3bead..f573aed861 100644
--- a/src/Umbraco.Web.UI.Client/package.json
+++ b/src/Umbraco.Web.UI.Client/package.json
@@ -149,7 +149,7 @@
"build:workspaces": "npm run build -ws --if-present",
"build": "tsc --project ./src/tsconfig.build.json && rollup -c ./src/rollup.config.js",
"check": "npm run lint:errors && npm run compile && npm run build-storybook && npm run generate:jsonschema:dist",
- "check:paths": "node ./devops/build/check-path-length.js dist-cms 140",
+ "check:paths": "node ./devops/build/check-path-length.js dist-cms 120",
"compile": "tsc",
"dev": "vite",
"dev:server": "VITE_UMBRACO_USE_MSW=off vite",
From 2a9d575e23aa5c0ab22e7418853785faae0ef2ab Mon Sep 17 00:00:00 2001
From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Date: Wed, 26 Jun 2024 11:50:06 +0200
Subject: [PATCH 017/325] test workspaces build
---
src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml b/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
index be4e4d4158..c87fc7c101 100644
--- a/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
+++ b/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
@@ -40,6 +40,7 @@ jobs:
- run: npm ci --no-audit --no-fund --prefer-offline
- run: npm run lint:errors
- run: npm run build
+ - run: npm run build:workspaces
- run: npm run check:paths
- run: npm run generate:jsonschema:dist
- run: npx playwright install --with-deps
From 237928c89720595419436bfd5f54d4dece230a9d Mon Sep 17 00:00:00 2001
From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Date: Wed, 26 Jun 2024 11:50:56 +0200
Subject: [PATCH 018/325] turn off declaration generation and only generate
those for npm
---
src/Umbraco.Web.UI.Client/package.json | 2 +-
src/Umbraco.Web.UI.Client/src/tsconfig.build.json | 3 +--
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json
index f573aed861..0825d639e3 100644
--- a/src/Umbraco.Web.UI.Client/package.json
+++ b/src/Umbraco.Web.UI.Client/package.json
@@ -143,7 +143,7 @@
"backoffice:test:e2e": "npx playwright test",
"build-storybook": "npm run wc-analyze && storybook build",
"build:for:cms": "npm run build && npm run build:workspaces && npm run generate:manifest && npm run package:validate && node ./devops/build/copy-to-cms.js",
- "build:for:npm": "npm run build && npm run generate:manifest && npm run package:validate",
+ "build:for:npm": "tsc --project ./src/tsconfig.build.json --declaration && rollup -c ./src/rollup.config.js && npm run generate:manifest && npm run package:validate",
"build:for:static": "vite build",
"build:vite": "tsc && vite build --mode staging",
"build:workspaces": "npm run build -ws --if-present",
diff --git a/src/Umbraco.Web.UI.Client/src/tsconfig.build.json b/src/Umbraco.Web.UI.Client/src/tsconfig.build.json
index fb00a47d31..600705db7e 100644
--- a/src/Umbraco.Web.UI.Client/src/tsconfig.build.json
+++ b/src/Umbraco.Web.UI.Client/src/tsconfig.build.json
@@ -5,9 +5,8 @@
"noEmit": false,
"outDir": "../dist-cms",
"rootDir": "./",
- "composite": true,
"sourceMap": false,
- "declaration": true,
+ "declaration": false,
"allowImportingTsExtensions": false
},
"include": ["./**/*.ts", "./**/*.json", "./**/*.js"],
From aa32aa0e9a8af7fca0a683ca9d6d724762788fa5 Mon Sep 17 00:00:00 2001
From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Date: Wed, 26 Jun 2024 11:52:30 +0200
Subject: [PATCH 019/325] do not check paths for package:validate
---
src/Umbraco.Web.UI.Client/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Umbraco.Web.UI.Client/package.json b/src/Umbraco.Web.UI.Client/package.json
index 0825d639e3..a9a596aca3 100644
--- a/src/Umbraco.Web.UI.Client/package.json
+++ b/src/Umbraco.Web.UI.Client/package.json
@@ -181,7 +181,7 @@
"wc-analyze": "wca **/*.element.ts --outFile dist-cms/custom-elements.json",
"generate:tsconfig": "node ./devops/tsconfig/index.js",
"generate:manifest": "node ./devops/build/create-umbraco-package.js",
- "package:validate": "node ./devops/package/validate-exports.js && npm run check:paths",
+ "package:validate": "node ./devops/package/validate-exports.js",
"generate:ui-api-docs": "typedoc --options typedoc.config.js"
},
"engines": {
From f98d3ae09cfc3c9a5b1792d7d1131aae402c2dc1 Mon Sep 17 00:00:00 2001
From: Lone Iversen <108085781+loivsen@users.noreply.github.com>
Date: Wed, 26 Jun 2024 13:16:40 +0200
Subject: [PATCH 020/325] Bugfix: Export multi url and align element name
---
.../src/packages/multi-url-picker/components/index.ts | 1 +
.../components/input-multi-url/index.ts | 1 +
.../input-multi-url/input-multi-url.element.ts} | 10 +++++-----
.../input-multi-url/input-multi-url.stories.ts} | 6 +++---
.../src/packages/multi-url-picker/entry-point.ts | 1 +
.../multi-url-picker/multi-url-picker/index.ts | 1 -
.../property-editor-ui-multi-url-picker.element.ts | 11 ++++-------
.../src/packages/multi-url-picker/umbraco-package.ts | 6 ++++++
8 files changed, 21 insertions(+), 16 deletions(-)
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/index.ts
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/index.ts
rename src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/{multi-url-picker/multi-url-picker.element.ts => components/input-multi-url/input-multi-url.element.ts} (95%)
rename src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/{multi-url-picker/multi-url-picker.stories.ts => components/input-multi-url/input-multi-url.stories.ts} (59%)
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/entry-point.ts
delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/multi-url-picker/index.ts
diff --git a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/index.ts
new file mode 100644
index 0000000000..4ef883ab59
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/index.ts
@@ -0,0 +1 @@
+export * from './input-multi-url/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/index.ts b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/index.ts
new file mode 100644
index 0000000000..d197dc0c3d
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/index.ts
@@ -0,0 +1 @@
+export * from './input-multi-url.element.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/multi-url-picker/multi-url-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts
similarity index 95%
rename from src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/multi-url-picker/multi-url-picker.element.ts
rename to src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts
index b8a0b8b578..6c9e3eeba5 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/multi-url-picker/multi-url-picker.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.element.ts
@@ -1,5 +1,5 @@
-import type { UmbLinkPickerLink } from '../link-picker-modal/types.js';
-import { UMB_LINK_PICKER_MODAL } from '../link-picker-modal/link-picker-modal.token.js';
+import type { UmbLinkPickerLink } from '../../link-picker-modal/types.js';
+import { UMB_LINK_PICKER_MODAL } from '../../link-picker-modal/link-picker-modal.token.js';
import { css, customElement, html, property, repeat, state } from '@umbraco-cms/backoffice/external/lit';
import { simpleHashCode } from '@umbraco-cms/backoffice/observable-api';
import { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
@@ -18,9 +18,9 @@ import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui';
* @fires blur - when the input loses focus
* @fires focus - when the input gains focus
*/
-const elementName = 'umb-multi-url-picker';
+const elementName = 'umb-input-multi-url';
@customElement(elementName)
-export class UmbMultiUrlPickerElement extends UUIFormControlMixin(UmbLitElement, '') {
+export class UmbInputMultiUrlElement extends UUIFormControlMixin(UmbLitElement, '') {
#sorter = new UmbSorterController(this, {
getUniqueOfElement: (element) => {
return element.id;
@@ -296,6 +296,6 @@ export class UmbMultiUrlPickerElement extends UUIFormControlMixin(UmbLitElement,
declare global {
interface HTMLElementTagNameMap {
- [elementName]: UmbMultiUrlPickerElement;
+ [elementName]: UmbInputMultiUrlElement;
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/multi-url-picker/multi-url-picker.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.stories.ts
similarity index 59%
rename from src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/multi-url-picker/multi-url-picker.stories.ts
rename to src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.stories.ts
index 2772b6ccd2..7b794a12ad 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/multi-url-picker/multi-url-picker.stories.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.stories.ts
@@ -1,14 +1,14 @@
import type { Meta, StoryObj } from '@storybook/web-components';
import './multi-url-picker.element.js';
-import type { UmbMultiUrlPickerElement } from './multi-url-picker.element.js';
+import type { UmbInputMultiUrlElement } from './input-multi-url.element.js';
-const meta: Meta = {
+const meta: Meta = {
title: 'Components/Inputs/Multi URL',
component: 'umb-input-multi-url',
};
export default meta;
-type Story = StoryObj;
+type Story = StoryObj;
export const Overview: Story = {
args: {},
diff --git a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/entry-point.ts b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/entry-point.ts
new file mode 100644
index 0000000000..8a8c2711ca
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/entry-point.ts
@@ -0,0 +1 @@
+export * from './components/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/multi-url-picker/index.ts b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/multi-url-picker/index.ts
deleted file mode 100644
index 2d2ffcb054..0000000000
--- a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/multi-url-picker/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './multi-url-picker.element.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/property-editor/property-editor-ui-multi-url-picker.element.ts b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/property-editor/property-editor-ui-multi-url-picker.element.ts
index ffb6e0ae35..eeab2d167d 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/property-editor/property-editor-ui-multi-url-picker.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/property-editor/property-editor-ui-multi-url-picker.element.ts
@@ -1,5 +1,5 @@
import type { UmbLinkPickerLink } from '../link-picker-modal/types.js';
-import type { UmbMultiUrlPickerElement } from '../multi-url-picker/multi-url-picker.element.js';
+import type { UmbInputMultiUrlElement } from '../components/input-multi-url/input-multi-url.element.js';
import { customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { UmbPropertyValueChangeEvent } from '@umbraco-cms/backoffice/property-editor';
@@ -8,9 +8,6 @@ import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/
import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui';
-// import of local component
-import '../multi-url-picker/multi-url-picker.element.js';
-
/**
* @element umb-property-editor-ui-multi-url-picker
*/
@@ -60,14 +57,14 @@ export class UmbPropertyEditorUIMultiUrlPickerElement extends UmbLitElement impl
});
}
- #onChange(event: CustomEvent & { target: UmbMultiUrlPickerElement }) {
+ #onChange(event: CustomEvent & { target: UmbInputMultiUrlElement }) {
this.value = event.target.urls;
this.dispatchEvent(new UmbPropertyValueChangeEvent());
}
override render() {
return html`
-
-
+
`;
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/umbraco-package.ts b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/umbraco-package.ts
index 85548e535c..b4106c796c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/umbraco-package.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/umbraco-package.ts
@@ -6,4 +6,10 @@ export const extensions = [
type: 'bundle',
js: () => import('./manifests.js'),
},
+ {
+ name: 'Multi Url Picker Entry Point',
+ alias: 'Umb.EntryPoint.MultiUrlPicker',
+ type: 'entryPoint',
+ js: () => import('./entry-point.js'),
+ },
];
From 85cced17e632c910d01e2cad0600684cdb3b8ed4 Mon Sep 17 00:00:00 2001
From: Lone Iversen <108085781+loivsen@users.noreply.github.com>
Date: Wed, 26 Jun 2024 13:26:42 +0200
Subject: [PATCH 021/325] path
---
.../components/input-multi-url/input-multi-url.stories.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.stories.ts b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.stories.ts
index 7b794a12ad..1017d7d56d 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.stories.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/multi-url-picker/components/input-multi-url/input-multi-url.stories.ts
@@ -1,5 +1,5 @@
import type { Meta, StoryObj } from '@storybook/web-components';
-import './multi-url-picker.element.js';
+import './input-multi-url.element.js';
import type { UmbInputMultiUrlElement } from './input-multi-url.element.js';
const meta: Meta = {
From 8177d89d470856de1ebf6384d39423c336db0732 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20Lyngs=C3=B8?=
Date: Fri, 28 Jun 2024 19:30:42 +0200
Subject: [PATCH 022/325] sort imports
---
.../block-grid-area-config-entry.element.ts | 2 +-
...-grid-area-type-workspace-editor.element.ts | 2 +-
.../block-grid-areas-container.element.ts | 4 ++--
.../context/block-grid-entry.context.ts | 18 +++++++++---------
.../block-grid-scale-manager.controller.ts | 2 +-
...ditor-ui-block-grid-areas-config.element.ts | 8 ++++----
6 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/block-grid-area-config-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/block-grid-area-config-entry.element.ts
index 1254987417..70b4e30ee5 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/block-grid-area-config-entry.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/block-grid-area-config-entry.element.ts
@@ -1,7 +1,7 @@
-import { UmbBlockGridAreaConfigEntryContext } from './block-grid-area-config-entry.context.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { html, css, customElement, property, state } from '@umbraco-cms/backoffice/external/lit';
import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import { UmbBlockGridAreaConfigEntryContext } from './block-grid-area-config-entry.context.js';
import '../block-grid-block/index.js';
import '../block-scale-handler/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace-editor.element.ts
index 20056eaf6e..46ebf32887 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace-editor.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-area-config-entry/workspace/block-grid-area-type-workspace-editor.element.ts
@@ -1,7 +1,7 @@
-import { UMB_BLOCK_GRID_AREA_TYPE_WORKSPACE_CONTEXT } from './block-grid-area-type-workspace.context.js';
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
import { customElement, css, html, state, property } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
+import { UMB_BLOCK_GRID_AREA_TYPE_WORKSPACE_CONTEXT } from './block-grid-area-type-workspace.context.js';
@customElement('umb-block-grid-area-type-workspace-editor')
export class UmbBlockGridAreaTypeWorkspaceEditorElement extends UmbLitElement {
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-areas-container/block-grid-areas-container.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-areas-container/block-grid-areas-container.element.ts
index 567c471be8..966d63ce0c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-areas-container/block-grid-areas-container.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-areas-container/block-grid-areas-container.element.ts
@@ -1,7 +1,7 @@
-import { UMB_BLOCK_GRID_MANAGER_CONTEXT } from '../../context/block-grid-manager.context-token.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
-import { UMB_BLOCK_GRID_ENTRY_CONTEXT, type UmbBlockGridTypeAreaType } from '@umbraco-cms/backoffice/block-grid';
import { css, customElement, html, repeat, state } from '@umbraco-cms/backoffice/external/lit';
+import { UMB_BLOCK_GRID_MANAGER_CONTEXT } from '../../context/block-grid-manager.context-token.js';
+import { UMB_BLOCK_GRID_ENTRY_CONTEXT, type UmbBlockGridTypeAreaType } from '@umbraco-cms/backoffice/block-grid';
import '../block-grid-entries/index.js';
/**
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts
index fcbfbd8dce..eadf1ebeb9 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-entry.context.ts
@@ -1,13 +1,4 @@
-import { closestColumnSpanOption } from '../utils/index.js';
-import { UMB_BLOCK_GRID_MANAGER_CONTEXT } from './block-grid-manager.context-token.js';
-import { UMB_BLOCK_GRID_ENTRIES_CONTEXT } from './block-grid-entries.context-token.js';
-import {
- type UmbBlockGridScalableContext,
- UmbBlockGridScaleManager,
-} from './block-grid-scale-manager/block-grid-scale-manager.controller.js';
-import { UmbBlockEntryContext } from '@umbraco-cms/backoffice/block';
import type { UmbContentTypeModel, UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type';
-import type { UmbBlockGridTypeModel, UmbBlockGridLayoutModel } from '@umbraco-cms/backoffice/block-grid';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import {
UmbArrayState,
@@ -17,6 +8,15 @@ import {
appendToFrozenArray,
observeMultiple,
} from '@umbraco-cms/backoffice/observable-api';
+import { closestColumnSpanOption } from '../utils/index.js';
+import { UMB_BLOCK_GRID_MANAGER_CONTEXT } from './block-grid-manager.context-token.js';
+import { UMB_BLOCK_GRID_ENTRIES_CONTEXT } from './block-grid-entries.context-token.js';
+import {
+ type UmbBlockGridScalableContext,
+ UmbBlockGridScaleManager,
+} from './block-grid-scale-manager/block-grid-scale-manager.controller.js';
+import { UmbBlockEntryContext } from '@umbraco-cms/backoffice/block';
+import type { UmbBlockGridTypeModel, UmbBlockGridLayoutModel } from '@umbraco-cms/backoffice/block-grid';
export class UmbBlockGridEntryContext
extends UmbBlockEntryContext<
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-scale-manager/block-grid-scale-manager.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-scale-manager/block-grid-scale-manager.controller.ts
index d969f6e914..4fcfdd1f75 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-scale-manager/block-grid-scale-manager.controller.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/context/block-grid-scale-manager/block-grid-scale-manager.controller.ts
@@ -1,7 +1,7 @@
-import { closestColumnSpanOption } from '../../utils/index.js';
import { getAccumulatedValueOfIndex, getInterpolatedIndexOfPositionInWeightMap } from '@umbraco-cms/backoffice/utils';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
+import { closestColumnSpanOption } from '../../utils/index.js';
// This might be more generic than Block Grid, but this is where it belongs currently:
export interface UmbBlockGridScalableContext extends UmbControllerHost {
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-areas-config/property-editor-ui-block-grid-areas-config.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-areas-config/property-editor-ui-block-grid-areas-config.element.ts
index 64b8879589..8588566500 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-areas-config/property-editor-ui-block-grid-areas-config.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/property-editors/block-grid-areas-config/property-editor-ui-block-grid-areas-config.element.ts
@@ -1,7 +1,3 @@
-import type { UmbBlockGridTypeAreaType } from '../../index.js';
-import { UMB_BLOCK_GRID_DEFAULT_LAYOUT_STYLESHEET } from '../../context/block-grid-manager.context.js';
-import { UMB_BLOCK_GRID_AREA_TYPE_WORKSPACE_MODAL } from '../../components/block-grid-area-config-entry/index.js';
-import { UmbBlockGridAreaTypeEntriesContext } from './block-grid-area-type-entries.context.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { html, customElement, property, state, repeat } from '@umbraco-cms/backoffice/external/lit';
import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
@@ -13,6 +9,10 @@ import {
import { UmbId } from '@umbraco-cms/backoffice/id';
import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router';
import { incrementString } from '@umbraco-cms/backoffice/utils';
+import { UMB_BLOCK_GRID_AREA_TYPE_WORKSPACE_MODAL } from '../../components/block-grid-area-config-entry/index.js';
+import { UMB_BLOCK_GRID_DEFAULT_LAYOUT_STYLESHEET } from '../../context/block-grid-manager.context.js';
+import type { UmbBlockGridTypeAreaType } from '../../index.js';
+import { UmbBlockGridAreaTypeEntriesContext } from './block-grid-area-type-entries.context.js';
@customElement('umb-property-editor-ui-block-grid-areas-config')
export class UmbPropertyEditorUIBlockGridAreasConfigElement
From 7c6ae78ad147f61342fb8fb3dee5a52821d1f7cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20Lyngs=C3=B8?=
Date: Fri, 28 Jun 2024 22:38:24 +0200
Subject: [PATCH 023/325] implementation of custom views for block editors
---
.../block-grid-entry.element.ts | 23 +++++++---
.../src/packages/block/block/types.ts | 27 +-----------
.../block/custom-view/custom-view.element.ts | 18 ++++++++
.../packages/block/custom-view/manifest.ts | 10 +++++
.../src/packages/block/manifests.ts | 4 +-
...ck-editor-custom-view-element.interface.ts | 43 +++++++++++++++++++
.../extension-registry/interfaces/index.ts | 1 +
.../models/block-editor-custom-view.model.ts | 6 ++-
.../models/entity-action.model.ts | 2 +-
9 files changed, 99 insertions(+), 35 deletions(-)
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/block/custom-view/custom-view.element.ts
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/block/custom-view/manifest.ts
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
index 0e86d455e8..76be03cd46 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
@@ -1,9 +1,8 @@
-import { UmbBlockGridEntryContext } from '../../context/block-grid-entry.context.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { html, css, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit';
import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit';
-import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
-import type { UmbBlockViewPropsType } from '@umbraco-cms/backoffice/block';
+import type { ManifestBlockEditorCustomView, UmbBlockEditorCustomViewProperties, UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import { UmbBlockGridEntryContext } from '../../context/block-grid-entry.context.js';
import type { UmbBlockGridLayoutModel } from '@umbraco-cms/backoffice/block-grid';
import '../block-grid-block-inline/index.js';
import '../block-grid-block/index.js';
@@ -40,6 +39,9 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
#context = new UmbBlockGridEntryContext(this);
#renderTimeout: number | undefined;
+ @state()
+ _contentTypeAlias?:string;
+
@state()
_columnSpan?: number;
@@ -84,9 +86,9 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
// TODO: use this type on the Element Interface for the Manifest.
@state()
- _blockViewProps: UmbBlockViewPropsType = { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
+ _blockViewProps: UmbBlockEditorCustomViewProperties = { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
- #updateBlockViewProps(incoming: Partial>) {
+ #updateBlockViewProps(incoming: Partial>) {
this._blockViewProps = { ...this._blockViewProps, ...incoming };
this.requestUpdate('_blockViewProps');
}
@@ -176,6 +178,7 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
});
this.observe(this.#context.contentElementTypeAlias, (contentElementTypeAlias) => {
if (contentElementTypeAlias) {
+ this._contentTypeAlias = contentElementTypeAlias;
this.setAttribute('data-content-element-type-alias', contentElementTypeAlias);
}
});
@@ -235,8 +238,15 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
return html``;
}
+ #extensionSlotFilterMethod = (manifest:ManifestBlockEditorCustomView) => {
+ if(manifest.forContentTypeAlias?.indexOf(this._contentTypeAlias!) === -1) {
+ return false;
+ }
+ return true;
+ }
+
#renderBlock() {
- return this.contentUdi
+ return this.contentUdi && this._contentTypeAlias
? html`
${this._createBeforePath && this._showInlineCreateBefore
? html`${this._inlineEditingMode ? this.#renderInlineEditBlock() : this.#renderRefBlock()}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts
index 433d8e28f7..a6e7722374 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts
@@ -1,31 +1,8 @@
-export interface UmbBlockLayoutBaseModel {
- contentUdi: string;
- settingsUdi?: string | null;
-}
-
-export interface UmbBlockDataType {
- udi: string;
- contentTypeKey: string;
- [key: string]: unknown;
-}
+import type { UmbBlockDataType, UmbBlockLayoutBaseModel } from "@umbraco-cms/backoffice/extension-registry";
+export type { UmbBlockViewUrlsPropType, UmbBlockDataType, UmbBlockLayoutBaseModel } from "@umbraco-cms/backoffice/extension-registry";
export interface UmbBlockValueType {
layout: { [key: string]: Array | undefined };
contentData: Array;
settingsData: Array;
}
-
-export interface UmbBlockViewUrlsPropType {
- editContent?: string;
- editSettings?: string;
-}
-
-export interface UmbBlockViewPropsType {
- label?: string;
- icon?: string;
- contentUdi: string;
- layout?: BlockLayoutType;
- content?: UmbBlockDataType;
- settings?: UmbBlockDataType;
- urls: UmbBlockViewUrlsPropType;
-}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/custom-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/custom-view.element.ts
new file mode 100644
index 0000000000..1217a95f4d
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/custom-view.element.ts
@@ -0,0 +1,18 @@
+import type { UmbBlockDataType, UmbBlockEditorCustomViewElement } from "@umbraco-cms/backoffice/extension-registry";
+import { customElement, html, property } from "@umbraco-cms/backoffice/external/lit";
+import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
+
+@customElement('umb-custom-view-test')
+export class UmbCustomViewTestElement extends UmbLitElement implements UmbBlockEditorCustomViewElement {
+
+ @property({attribute: false})
+ content?: UmbBlockDataType;
+
+ protected override render() {
+ return html`
+ Hello ${this.content?.headline}
+ `
+ }
+}
+
+export {UmbCustomViewTestElement as element};
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/manifest.ts b/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/manifest.ts
new file mode 100644
index 0000000000..44e6dfbe54
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/manifest.ts
@@ -0,0 +1,10 @@
+import type { ManifestBlockEditorCustomView } from '@umbraco-cms/backoffice/extension-registry';
+
+export const manifest:ManifestBlockEditorCustomView = {
+ type: 'blockEditorCustomView',
+ alias: 'Umb.blockEditorCustomView.TestView',
+ name: 'Block Editor Custom View Test',
+ element: () => import('./custom-view.element.js'),
+ //forContentTypeAlias: []
+ //forBlockType?: Array;
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
index 80e1e2bf86..6655135552 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
@@ -1,11 +1,13 @@
+import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
import { manifests as blockManifests } from './block/manifests.js';
import { manifests as blockGridManifests } from './block-grid/manifests.js';
import { manifests as blockListManifests } from './block-list/manifests.js';
import { manifests as blockRteManifests } from './block-rte/manifests.js';
import { manifests as blockTypeManifests } from './block-type/manifests.js';
-import type { ManifestTypes } from '@umbraco-cms/backoffice/extension-registry';
+import { manifest } from './custom-view/manifest.js';
export const manifests: Array = [
+ manifest,
...blockManifests,
...blockTypeManifests,
...blockListManifests,
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
new file mode 100644
index 0000000000..cf4f0b8d4b
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
@@ -0,0 +1,43 @@
+import type { ManifestBlockEditorCustomView } from "../index.js";
+
+// Shared with the Property Editor
+export interface UmbBlockLayoutBaseModel {
+ contentUdi: string;
+ settingsUdi?: string | null;
+}
+
+// Shared with the Property Editor
+export interface UmbBlockDataType {
+ udi: string;
+ contentTypeKey: string;
+ [key: string]: unknown;
+}
+
+export interface UmbBlockEditorCustomViewConfiguration {
+ editContentPath: string;
+ editSettingsPath: string;
+ showEditBlock: boolean;
+}
+
+export interface UmbBlockViewUrlsPropType {
+ editContent?: string;
+ editSettings?: string;
+}
+
+
+export interface UmbBlockEditorCustomViewProperties {
+ manifest?: ManifestBlockEditorCustomView;
+ config?: UmbBlockEditorCustomViewConfiguration;
+ urls?: UmbBlockViewUrlsPropType;
+ contentUdi?: string;
+ label?: string;
+ icon?: string;
+ index?: number;
+ layout?: LayoutType;
+ content?: UmbBlockDataType;
+ settings?: UmbBlockDataType;
+}
+
+export interface UmbBlockEditorCustomViewElement extends UmbBlockEditorCustomViewProperties, HTMLElement {
+
+}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/index.ts
index 1721b7dfec..7585b5001b 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/index.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/index.ts
@@ -1,3 +1,4 @@
+export * from './block-editor-custom-view-element.interface.js';
export * from './dashboard-element.interface.js';
export * from './external-login-provider-element.interface.js';
export * from './menu-item-element.interface.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts
index 002d6f0ecf..7ceea8278f 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts
@@ -1,6 +1,8 @@
-import type { UmbPropertyEditorUiElement } from '../interfaces/index.js';
import type { ManifestElement } from '@umbraco-cms/backoffice/extension-api';
+import type { UmbBlockEditorCustomViewElement } from '../interfaces/index.js';
-export interface ManifestBlockEditorCustomView extends ManifestElement {
+export interface ManifestBlockEditorCustomView extends ManifestElement {
type: 'blockEditorCustomView';
+ forContentTypeAlias?: Array;
+ forBlockType?: Array;
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts
index a24470e952..54685e8106 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/entity-action.model.ts
@@ -1,6 +1,6 @@
+import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
import type { ConditionTypes } from '../conditions/types.js';
import type { UmbEntityAction, UmbEntityActionElement } from '@umbraco-cms/backoffice/entity-action';
-import type { ManifestElementAndApi, ManifestWithDynamicConditions } from '@umbraco-cms/backoffice/extension-api';
import type { UmbModalToken, UmbPickerModalData, UmbPickerModalValue } from '@umbraco-cms/backoffice/modal';
/**
From c7310c358a3ce02fffdbc0dac7aad467b4c3c5a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20Lyngs=C3=B8?=
Date: Fri, 28 Jun 2024 22:39:16 +0200
Subject: [PATCH 024/325] extension slot fine tuning
---
.../base-extensions-initializer.controller.ts | 19 ++++++++++++-------
.../extension-slot/extension-slot.element.ts | 10 +++++-----
2 files changed, 17 insertions(+), 12 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts
index c55c77bb36..5dd5f08506 100644
--- a/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts
+++ b/src/Umbraco.Web.UI.Client/src/libs/extension-api/controller/base-extensions-initializer.controller.ts
@@ -1,5 +1,4 @@
import type { SpecificManifestTypeOrManifestBase } from '../types/map.types.js';
-import { map } from '@umbraco-cms/backoffice/external/rxjs';
import type {
ManifestBase,
UmbBaseExtensionInitializer,
@@ -7,7 +6,6 @@ import type {
} from '@umbraco-cms/backoffice/extension-api';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
-import { createObservablePart } from '@umbraco-cms/backoffice/observable-api';
export type PermittedControllerType = ControllerType & {
manifest: Required>;
@@ -35,7 +33,7 @@ export abstract class UmbBaseExtensionsInitializer<
#onChange?: (permittedManifests: Array) => void;
protected _extensions: Array = [];
#permittedExts: Array = [];
- #exposedPermittedExts: Array = [];
+ #exposedPermittedExts?: Array;
#changeDebounce?: number;
asPromise(): Promise {
@@ -92,6 +90,12 @@ export abstract class UmbBaseExtensionsInitializer<
return;
}
+ // If we get no manifests and we have not exposed any extensions yet, then we should notify to let the listener know that we have our first response. [NL]
+ if(manifests.length === 0 && this.#exposedPermittedExts === undefined) {
+ this.#exposedPermittedExts = [];
+ this.#onChange?.(this.#exposedPermittedExts);
+ }
+
// Clean up extensions that are no longer.
this._extensions = this._extensions.filter((extension) => {
if (!manifests.find((manifest) => manifest.alias === extension.alias)) {
@@ -116,6 +120,7 @@ export abstract class UmbBaseExtensionsInitializer<
protected _extensionChanged = (isPermitted: boolean, controller: ControllerType) => {
let hasChanged = false;
+
// This might be called after this is destroyed, so we need to check if the _permittedExts is still available:
const existingIndex = this.#permittedExts?.indexOf(controller as unknown as MyPermittedControllerType);
if (isPermitted) {
@@ -151,7 +156,7 @@ export abstract class UmbBaseExtensionsInitializer<
// if so, look up the extension it overwrites, and remove it from the list. and check that for if it overwrites another extension and so on.
if (extCtrl.overwrites.length > 0) {
extCtrl.overwrites.forEach((overwrite) => {
- this.#removeOverwrittenExtensions(this.#exposedPermittedExts, overwrite);
+ this.#removeOverwrittenExtensions(this.#exposedPermittedExts!, overwrite);
});
}
});
@@ -195,16 +200,16 @@ export abstract class UmbBaseExtensionsInitializer<
// The this.#extensionRegistry is an indication of wether this is already destroyed.
if (!this.#extensionRegistry) return;
- const oldPermittedExtsLength = this.#exposedPermittedExts.length;
+ const oldPermittedExtsLength = this.#exposedPermittedExts?.length ?? 0;
(this._extensions as any) = undefined;
(this.#permittedExts as any) = undefined;
- this.#exposedPermittedExts.length = 0;
+ this.#exposedPermittedExts = undefined;
if (this.#changeDebounce) {
cancelAnimationFrame(this.#changeDebounce);
this.#changeDebounce = undefined;
}
if (oldPermittedExtsLength > 0) {
- this.#onChange?.(this.#exposedPermittedExts);
+ this.#onChange?.([]);
}
this.#promiseResolvers.length = 0;
this.#filter = undefined;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-slot/extension-slot.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-slot/extension-slot.element.ts
index b5e64b5d8b..2650f5f78d 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-slot/extension-slot.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-slot/extension-slot.element.ts
@@ -1,11 +1,11 @@
-import { umbExtensionsRegistry } from '../../registry.js';
-import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import type { TemplateResult } from '@umbraco-cms/backoffice/external/lit';
import { css, repeat, customElement, property, state, html } from '@umbraco-cms/backoffice/external/lit';
import {
type UmbExtensionElementInitializer,
UmbExtensionsElementInitializer,
} from '@umbraco-cms/backoffice/extension-api';
+import { umbExtensionsRegistry } from '../../registry.js';
+import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
/**
* @element umb-extension-slot
@@ -24,7 +24,7 @@ export class UmbExtensionSlotElement extends UmbLitElement {
#extensionsController?: UmbExtensionsElementInitializer;
@state()
- private _permitted: Array = [];
+ private _permitted?: Array;
/**
* The type or types of extensions to render.
@@ -129,13 +129,13 @@ export class UmbExtensionSlotElement extends UmbLitElement {
}
override render() {
- return this._permitted.length > 0
+ return this._permitted ? this._permitted.length > 0
? repeat(
this._permitted,
(ext) => ext.alias,
(ext, i) => (this.renderMethod ? this.renderMethod(ext, i) : ext.component),
)
- : html``;
+ : html`` : '';
}
static override styles = css`
From 3c1a9eef0dc0b6941d254e01fdd7ebe327ca1bfe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20Lyngs=C3=B8?=
Date: Mon, 1 Jul 2024 09:46:42 +0200
Subject: [PATCH 025/325] Block Editor Custom View specific conditionals
---
.../block-grid-entry.element.ts | 53 ++++++------
.../src/packages/block/block-grid/types.ts | 1 +
.../block-list-entry.element.ts | 85 +++++++++++++------
.../src/packages/block/block-list/types.ts | 1 +
.../packages/block/custom-view/manifest.ts | 4 +-
.../models/block-editor-custom-view.model.ts | 16 +++-
.../src/packages/core/utils/index.ts | 1 +
...tring-or-string-array-contains.function.ts | 3 +
8 files changed, 108 insertions(+), 56 deletions(-)
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/utils/string/string-or-string-array-contains.function.ts
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
index 76be03cd46..32ed7dc718 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
@@ -2,12 +2,13 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { html, css, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit';
import type { PropertyValueMap } from '@umbraco-cms/backoffice/external/lit';
import type { ManifestBlockEditorCustomView, UmbBlockEditorCustomViewProperties, UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import { stringOrStringArrayContains } from '@umbraco-cms/backoffice/utils';
import { UmbBlockGridEntryContext } from '../../context/block-grid-entry.context.js';
-import type { UmbBlockGridLayoutModel } from '@umbraco-cms/backoffice/block-grid';
+import { UMB_BLOCK_GRID, type UmbBlockGridLayoutModel } from '@umbraco-cms/backoffice/block-grid';
+
import '../block-grid-block-inline/index.js';
import '../block-grid-block/index.js';
import '../block-scale-handler/index.js';
-
/**
* @element umb-block-grid-entry
*/
@@ -84,7 +85,6 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
@state()
_inlineCreateAboveWidth?: string;
- // TODO: use this type on the Element Interface for the Manifest.
@state()
_blockViewProps: UmbBlockEditorCustomViewProperties = { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
@@ -99,55 +99,55 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
// Misc:
this.observe(this.#context.showContentEdit, (show) => {
this._showContentEdit = show;
- });
+ }, null);
this.observe(this.#context.settingsElementTypeKey, (key) => {
this._hasSettings = !!key;
- });
+ }, null);
this.observe(this.#context.canScale, (canScale) => {
this._canScale = canScale;
- });
+ }, null);
this.observe(this.#context.label, (label) => {
this.#updateBlockViewProps({ label });
this._label = label;
- });
+ }, null);
this.observe(this.#context.contentElementTypeIcon, (icon) => {
this.#updateBlockViewProps({ icon });
this._icon = icon;
- });
+ }, null);
this.observe(this.#context.inlineEditingMode, (mode) => {
this._inlineEditingMode = mode;
- });
+ }, null);
// Data:
this.observe(this.#context.layout, (layout) => {
this.#updateBlockViewProps({ layout });
- });
+ }, null);
this.observe(this.#context.content, (content) => {
this.#updateBlockViewProps({ content });
- });
+ }, null);
this.observe(this.#context.settings, (settings) => {
this.#updateBlockViewProps({ settings });
- });
+ }, null);
// Paths:
this.observe(this.#context.createBeforePath, (createPath) => {
//const oldValue = this._createBeforePath;
this._createBeforePath = createPath;
//this.requestUpdate('_createPath', oldValue);
- });
+ }, null);
this.observe(this.#context.createAfterPath, (createPath) => {
//const oldValue = this._createAfterPath;
this._createAfterPath = createPath;
//this.requestUpdate('_createPath', oldValue);
- });
+ }, null);
this.observe(this.#context.workspaceEditContentPath, (path) => {
this._workspaceEditContentPath = path;
this.#updateBlockViewProps({ urls: { ...this._blockViewProps.urls, editContent: path } });
- });
+ }, null);
this.observe(this.#context.workspaceEditSettingsPath, (path) => {
this._workspaceEditSettingsPath = path;
this.#updateBlockViewProps({ urls: { ...this._blockViewProps.urls, editSettings: path } });
- });
+ }, null);
}
override connectedCallback(): void {
@@ -175,13 +175,13 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
if (contentElementTypeKey) {
this.setAttribute('data-content-element-type-key', contentElementTypeKey);
}
- });
+ }, 'contentElementTypeKey');
this.observe(this.#context.contentElementTypeAlias, (contentElementTypeAlias) => {
if (contentElementTypeAlias) {
this._contentTypeAlias = contentElementTypeAlias;
this.setAttribute('data-content-element-type-alias', contentElementTypeAlias);
}
- });
+ }, 'contentElementTypeAlias');
this.#callUpdateInlineCreateButtons();
}
@@ -228,6 +228,16 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
}
};
+ #extensionSlotFilterMethod = (manifest:ManifestBlockEditorCustomView) => {
+ if(manifest.forContentTypeAlias && !stringOrStringArrayContains(manifest.forContentTypeAlias, this._contentTypeAlias!)) {
+ return false;
+ }
+ if(manifest.forBlockEditor && !stringOrStringArrayContains(manifest.forBlockEditor, UMB_BLOCK_GRID)) {
+ return false;
+ }
+ return true;
+ }
+
#renderInlineEditBlock() {
return html``;
}
- #extensionSlotFilterMethod = (manifest:ManifestBlockEditorCustomView) => {
- if(manifest.forContentTypeAlias?.indexOf(this._contentTypeAlias!) === -1) {
- return false;
- }
- return true;
- }
-
#renderBlock() {
return this.contentUdi && this._contentTypeAlias
? html`
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/types.ts
index 7925df893a..392c67f0f2 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/types.ts
@@ -2,6 +2,7 @@ import type { UmbBlockLayoutBaseModel, UmbBlockValueType } from '@umbraco-cms/ba
import type { UmbBlockTypeWithGroupKey } from '@umbraco-cms/backoffice/block-type';
export const UMB_BLOCK_GRID_TYPE = 'block-grid-type';
+export const UMB_BLOCK_GRID = 'block-grid';
// Configuration models:
export interface UmbBlockGridTypeModel extends UmbBlockTypeWithGroupKey {
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts
index e7bc5a771f..02feff3482 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts
@@ -1,11 +1,11 @@
-import { UmbBlockListEntryContext } from '../../context/block-list-entry.context.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { html, css, customElement, property, state } from '@umbraco-cms/backoffice/external/lit';
-import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import type { ManifestBlockEditorCustomView, UmbBlockEditorCustomViewProperties, UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
import '../ref-list-block/index.js';
import '../inline-list-block/index.js';
-import type { UmbBlockViewPropsType } from '@umbraco-cms/backoffice/block';
-import type { UmbBlockListLayoutModel } from '@umbraco-cms/backoffice/block-list';
+import { stringOrStringArrayContains } from '@umbraco-cms/backoffice/utils';
+import { UmbBlockListEntryContext } from '../../context/block-list-entry.context.js';
+import { UMB_BLOCK_LIST, type UmbBlockListLayoutModel } from '../../types.js';
/**
* @element umb-block-list-entry
@@ -34,6 +34,9 @@ export class UmbBlockListEntryElement extends UmbLitElement implements UmbProper
#context = new UmbBlockListEntryContext(this);
+ @state()
+ _contentTypeAlias?:string;
+
@state()
_showContentEdit = false;
@state()
@@ -54,52 +57,79 @@ export class UmbBlockListEntryElement extends UmbLitElement implements UmbProper
@state()
_inlineEditingMode?: boolean;
- // TODO: use this type on the Element Interface for the Manifest.
@state()
- _blockViewProps: UmbBlockViewPropsType = { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
+ _blockViewProps: UmbBlockEditorCustomViewProperties = { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
+
+ #updateBlockViewProps(incoming: Partial>) {
+ this._blockViewProps = { ...this._blockViewProps, ...incoming };
+ this.requestUpdate('_blockViewProps');
+ }
constructor() {
super();
this.observe(this.#context.showContentEdit, (showContentEdit) => {
this._showContentEdit = showContentEdit;
- });
+ }, null);
this.observe(this.#context.settingsElementTypeKey, (settingsElementTypeKey) => {
this._hasSettings = !!settingsElementTypeKey;
- });
+ }, null);
this.observe(this.#context.label, (label) => {
+ this.#updateBlockViewProps({ label });
this._label = label;
- this._blockViewProps.label = label;
- this.requestUpdate('_blockViewProps');
- });
+ }, null);
this.observe(this.#context.contentElementTypeIcon, (icon) => {
+ this.#updateBlockViewProps({ icon });
this._icon = icon;
- this._blockViewProps.icon = icon;
- this.requestUpdate('_blockViewProps');
- });
+ }, null);
this.observe(this.#context.inlineEditingMode, (inlineEditingMode) => {
this._inlineEditingMode = inlineEditingMode;
- });
+ }, null);
// Data props:
this.observe(this.#context.layout, (layout) => {
- this._blockViewProps.layout = layout;
- });
+ this.#updateBlockViewProps({ layout });
+ }, null);
this.observe(this.#context.content, (content) => {
- this._blockViewProps.content = content;
- });
+ this.#updateBlockViewProps({ content });
+ }, null);
this.observe(this.#context.settings, (settings) => {
- this._blockViewProps.settings = settings;
- });
+ this.#updateBlockViewProps({ settings });
+ }, null);
this.observe(this.#context.workspaceEditContentPath, (path) => {
this._workspaceEditContentPath = path;
- this._blockViewProps.urls.editContent = path;
- this.requestUpdate('_blockViewProps');
- });
+ this.#updateBlockViewProps({ urls: { ...this._blockViewProps.urls, editContent: path } });
+ }, null);
this.observe(this.#context.workspaceEditSettingsPath, (path) => {
this._workspaceEditSettingsPath = path;
- this._blockViewProps.urls.editSettings = path;
- this.requestUpdate('_blockViewProps');
- });
+ this.#updateBlockViewProps({ urls: { ...this._blockViewProps.urls, editSettings: path } });
+ }, null);
+ }
+
+
+ override connectedCallback(): void {
+ super.connectedCallback();
+ // element styling:
+ this.observe(this.#context.contentElementTypeKey, (contentElementTypeKey) => {
+ if (contentElementTypeKey) {
+ this.setAttribute('data-content-element-type-key', contentElementTypeKey);
+ }
+ }, 'contentElementTypeKey');
+ this.observe(this.#context.contentElementTypeAlias, (contentElementTypeAlias) => {
+ if (contentElementTypeAlias) {
+ this._contentTypeAlias = contentElementTypeAlias;
+ this.setAttribute('data-content-element-type-alias', contentElementTypeAlias);
+ }
+ }, 'contentElementTypeAlias');
+ }
+
+ #extensionSlotFilterMethod = (manifest:ManifestBlockEditorCustomView) => {
+ if(manifest.forContentTypeAlias && !stringOrStringArrayContains(manifest.forContentTypeAlias, this._contentTypeAlias!)) {
+ return false;
+ }
+ if(manifest.forBlockEditor && !stringOrStringArrayContains(manifest.forBlockEditor, UMB_BLOCK_LIST)) {
+ return false;
+ }
+ return true;
}
#renderRefBlock() {
@@ -116,6 +146,7 @@ export class UmbBlockListEntryElement extends UmbLitElement implements UmbProper
type="blockEditorCustomView"
default-element=${this._inlineEditingMode ? 'umb-inline-list-block' : 'umb-ref-list-block'}
.props=${this._blockViewProps}
+ .filter=${this.#extensionSlotFilterMethod}
>${this._inlineEditingMode ? this.#renderInlineBlock() : this.#renderRefBlock()}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts
index dc5894a548..a85c2635df 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts
@@ -2,6 +2,7 @@ import type { UmbBlockTypeBaseModel } from '../block-type/index.js';
import type { UmbBlockLayoutBaseModel, UmbBlockValueType } from '@umbraco-cms/backoffice/block';
export const UMB_BLOCK_LIST_TYPE = 'block-list-type';
+export const UMB_BLOCK_LIST = 'block-list';
export interface UmbBlockListTypeModel extends UmbBlockTypeBaseModel {}
export interface UmbBlockListLayoutModel extends UmbBlockLayoutBaseModel {}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/manifest.ts b/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/manifest.ts
index 44e6dfbe54..69b00c5af3 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/manifest.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/manifest.ts
@@ -5,6 +5,6 @@ export const manifest:ManifestBlockEditorCustomView = {
alias: 'Umb.blockEditorCustomView.TestView',
name: 'Block Editor Custom View Test',
element: () => import('./custom-view.element.js'),
- //forContentTypeAlias: []
- //forBlockType?: Array;
+ forContentTypeAlias: 'elementTypeHeadline',
+ forBlockEditor: 'block-grid'
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts
index 7ceea8278f..72e0216a71 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/models/block-editor-custom-view.model.ts
@@ -3,6 +3,18 @@ import type { UmbBlockEditorCustomViewElement } from '../interfaces/index.js';
export interface ManifestBlockEditorCustomView extends ManifestElement {
type: 'blockEditorCustomView';
- forContentTypeAlias?: Array;
- forBlockType?: Array;
+ /**
+ * @property {string | Array } - Declare if this Custom View only must appear at specific Content Types by Alias.
+ * @description Optional condition if you like this custom view to only appear at for one or more specific Content Types.
+ * @example 'my-element-type-alias'
+ * @example ['my-element-type-alias-A', 'my-element-type-alias-B']
+ */
+ forContentTypeAlias?: string | Array;
+ /**
+ * @property {string | Array } - Declare if this Custom View only must appear at specific Block Editors.
+ * @description Optional condition if you like this custom view to only appear at a specific type of Block Editor.
+ * @example 'block-list'
+ * @example ['block-list', 'block-grid']
+ */
+ forBlockEditor?: string | Array;
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts
index f7ec7dd723..a7e6fb6913 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/index.ts
@@ -19,5 +19,6 @@ export * from './string/from-camel-case.function.js';
export * from './string/generate-umbraco-alias.function.js';
export * from './string/increment-string.function.js';
export * from './string/split-string-to-array.js';
+export * from './string/string-or-string-array-contains.function.js';
export * from './string/to-camel-case/to-camel-case.function.js';
export type * from './type/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/utils/string/string-or-string-array-contains.function.ts b/src/Umbraco.Web.UI.Client/src/packages/core/utils/string/string-or-string-array-contains.function.ts
new file mode 100644
index 0000000000..54f8dc419f
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/utils/string/string-or-string-array-contains.function.ts
@@ -0,0 +1,3 @@
+export function stringOrStringArrayContains(value: string | Array, search: string) {
+ return Array.isArray(value) ? value.indexOf(search) !== -1 : value === search;
+}
From b199425af372eabb56492231608e500cff8564ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20Lyngs=C3=B8?=
Date: Mon, 1 Jul 2024 10:16:20 +0200
Subject: [PATCH 026/325] implement all custom view props
---
.../block-grid-block-inline.element.ts | 10 ++--
.../block-grid-entry.element.ts | 16 ++++--
.../block-list-entry.element.ts | 16 ++++--
.../property-editor-ui-block-list.element.ts | 15 +++--
...i-block-list-type-configuration.element.ts | 6 +-
.../src/packages/block/block-list/types.ts | 2 +-
.../block-rte-entry.element.ts | 57 ++++++++++---------
.../tiny-mce-block-picker.plugin.ts | 6 +-
.../src/packages/block/block-rte/types.ts | 2 +-
.../input-block-type.element.ts | 3 +-
.../src/packages/block/block-type/types.ts | 15 +----
.../workspace/block-type-workspace.context.ts | 6 +-
.../context/block-entries.context-token.ts | 4 +-
.../block/context/block-entries.context.ts | 10 ++--
.../context/block-entry.context-token.ts | 4 +-
.../block/context/block-entry.context.ts | 8 +--
.../block/context/block-manager.context.ts | 8 +--
.../block-catalogue-modal.token.ts | 5 +-
...ck-editor-custom-view-element.interface.ts | 28 ++++++---
...ui-block-rte-type-configuration.element.ts | 3 +-
20 files changed, 121 insertions(+), 103 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts
index 81cb697ccc..6f4ea8de6b 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block-inline/block-grid-block-inline.element.ts
@@ -1,9 +1,9 @@
-import { UMB_BLOCK_GRID_ENTRY_CONTEXT } from '../../context/block-grid-entry.context-token.js';
-import { UmbBlockGridInlinePropertyDatasetContext } from './block-grid-inline-property-dataset.context.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { css, customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit';
import type { UmbPropertyTypeModel } from '@umbraco-cms/backoffice/content-type';
-import type { UmbBlockViewUrlsPropType } from '@umbraco-cms/backoffice/block';
+import type { UmbBlockEditorCustomViewConfiguration } from '@umbraco-cms/backoffice/extension-registry';
+import { UMB_BLOCK_GRID_ENTRY_CONTEXT } from '../../context/block-grid-entry.context-token.js';
+import { UmbBlockGridInlinePropertyDatasetContext } from './block-grid-inline-property-dataset.context.js';
import '../block-grid-areas-container/index.js';
import '../ref-grid-block/index.js';
@@ -17,7 +17,7 @@ export class UmbBlockGridBlockInlineElement extends UmbLitElement {
label?: string;
@property({ attribute: false })
- urls?: UmbBlockViewUrlsPropType;
+ config?: UmbBlockEditorCustomViewConfiguration;
@state()
_inlineProperty: UmbPropertyTypeModel | undefined;
@@ -39,7 +39,7 @@ export class UmbBlockGridBlockInlineElement extends UmbLitElement {
}
override render() {
- return html`
+ return html`
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
index 32ed7dc718..4e1c140bdb 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
@@ -86,7 +86,7 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
_inlineCreateAboveWidth?: string;
@state()
- _blockViewProps: UmbBlockEditorCustomViewProperties = { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
+ _blockViewProps: UmbBlockEditorCustomViewProperties = { contentUdi: undefined!, config: { showContentEdit: false, showSettingsEdit: false} }; // Set to undefined cause it will be set before we render.
#updateBlockViewProps(incoming: Partial>) {
this._blockViewProps = { ...this._blockViewProps, ...incoming };
@@ -97,15 +97,21 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
super();
// Misc:
- this.observe(this.#context.showContentEdit, (show) => {
- this._showContentEdit = show;
+ this.observe(this.#context.showContentEdit, (showContentEdit) => {
+ this._showContentEdit = showContentEdit;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showContentEdit } });
}, null);
this.observe(this.#context.settingsElementTypeKey, (key) => {
this._hasSettings = !!key;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showSettingsEdit: !!key } });
}, null);
this.observe(this.#context.canScale, (canScale) => {
this._canScale = canScale;
}, null);
+ this.observe(this.#context.blockType, (blockType) => {
+ this.#updateBlockViewProps({ blockType });
+ }, null);
+ // TODO: Implement index.
this.observe(this.#context.label, (label) => {
this.#updateBlockViewProps({ label });
this._label = label;
@@ -142,11 +148,11 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
}, null);
this.observe(this.#context.workspaceEditContentPath, (path) => {
this._workspaceEditContentPath = path;
- this.#updateBlockViewProps({ urls: { ...this._blockViewProps.urls, editContent: path } });
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editContentPath: path } });
}, null);
this.observe(this.#context.workspaceEditSettingsPath, (path) => {
this._workspaceEditSettingsPath = path;
- this.#updateBlockViewProps({ urls: { ...this._blockViewProps.urls, editSettings: path } });
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editSettingsPath: path } });
}, null);
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts
index 02feff3482..ce20034f35 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/components/block-list-entry/block-list-entry.element.ts
@@ -58,7 +58,7 @@ export class UmbBlockListEntryElement extends UmbLitElement implements UmbProper
_inlineEditingMode?: boolean;
@state()
- _blockViewProps: UmbBlockEditorCustomViewProperties = { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
+ _blockViewProps: UmbBlockEditorCustomViewProperties = { contentUdi: undefined!, config: { showContentEdit: false, showSettingsEdit: false} }; // Set to undefined cause it will be set before we render.
#updateBlockViewProps(incoming: Partial>) {
this._blockViewProps = { ...this._blockViewProps, ...incoming };
@@ -70,10 +70,16 @@ export class UmbBlockListEntryElement extends UmbLitElement implements UmbProper
this.observe(this.#context.showContentEdit, (showContentEdit) => {
this._showContentEdit = showContentEdit;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showContentEdit } });
}, null);
- this.observe(this.#context.settingsElementTypeKey, (settingsElementTypeKey) => {
- this._hasSettings = !!settingsElementTypeKey;
+ this.observe(this.#context.settingsElementTypeKey, (key) => {
+ this._hasSettings = !!key;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showSettingsEdit: !!key } });
}, null);
+ this.observe(this.#context.blockType, (blockType) => {
+ this.#updateBlockViewProps({ blockType });
+ }, null);
+ // TODO: Implement index.
this.observe(this.#context.label, (label) => {
this.#updateBlockViewProps({ label });
this._label = label;
@@ -97,11 +103,11 @@ export class UmbBlockListEntryElement extends UmbLitElement implements UmbProper
}, null);
this.observe(this.#context.workspaceEditContentPath, (path) => {
this._workspaceEditContentPath = path;
- this.#updateBlockViewProps({ urls: { ...this._blockViewProps.urls, editContent: path } });
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editContentPath: path } });
}, null);
this.observe(this.#context.workspaceEditSettingsPath, (path) => {
this._workspaceEditSettingsPath = path;
- this.#updateBlockViewProps({ urls: { ...this._blockViewProps.urls, editSettings: path } });
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editSettingsPath: path } });
}, null);
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts
index b3828ddd78..c9b1a35958 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-editor/property-editor-ui-block-list.element.ts
@@ -1,22 +1,21 @@
-import { UmbBlockListManagerContext } from '../../context/block-list-manager.context.js';
-import type { UmbBlockListEntryElement } from '../../components/block-list-entry/index.js';
-import type { UmbBlockListLayoutModel, UmbBlockListValueModel } from '../../types.js';
-import { UmbBlockListEntriesContext } from '../../context/block-list-entries.context.js';
-import { UMB_BLOCK_LIST_PROPERTY_EDITOR_ALIAS } from './manifests.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { html, customElement, property, state, repeat, css } from '@umbraco-cms/backoffice/external/lit';
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
-import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbPropertyEditorUiElement , UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import {
UmbPropertyValueChangeEvent,
type UmbPropertyEditorConfigCollection,
} from '@umbraco-cms/backoffice/property-editor';
-import type { UmbBlockLayoutBaseModel } from '@umbraco-cms/backoffice/block';
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
import type { UmbNumberRangeValueType } from '@umbraco-cms/backoffice/models';
import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router';
import type { UmbSorterConfig } from '@umbraco-cms/backoffice/sorter';
import { UmbSorterController } from '@umbraco-cms/backoffice/sorter';
+import { UmbBlockListEntriesContext } from '../../context/block-list-entries.context.js';
+import type { UmbBlockListLayoutModel, UmbBlockListValueModel } from '../../types.js';
+import type { UmbBlockListEntryElement } from '../../components/block-list-entry/index.js';
+import { UmbBlockListManagerContext } from '../../context/block-list-manager.context.js';
+import { UMB_BLOCK_LIST_PROPERTY_EDITOR_ALIAS } from './manifests.js';
+import type { UmbBlockLayoutBaseModel } from '@umbraco-cms/backoffice/block';
import '../../components/block-list-entry/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts
index ef1f279157..8a9bb9ed2c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/property-editors/block-list-type-configuration/property-editor-ui-block-list-type-configuration.element.ts
@@ -1,7 +1,5 @@
-import type { UmbBlockTypeBaseModel, UmbInputBlockTypeElement } from '../../../block-type/index.js';
import '../../../block-type/components/input-block-type/index.js';
-import { UMB_BLOCK_LIST_TYPE } from '../../types.js';
-import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbBlockTypeBaseModel, UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit';
import {
UmbPropertyValueChangeEvent,
@@ -10,6 +8,8 @@ import {
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { UMB_WORKSPACE_MODAL } from '@umbraco-cms/backoffice/modal';
import { UmbModalRouteRegistrationController } from '@umbraco-cms/backoffice/router';
+import type { UmbInputBlockTypeElement } from '../../../block-type/index.js';
+import { UMB_BLOCK_LIST_TYPE } from '../../types.js';
/**
* @element umb-property-editor-ui-block-list-type-configuration
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts
index a85c2635df..4b58ab2ec2 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-list/types.ts
@@ -1,4 +1,4 @@
-import type { UmbBlockTypeBaseModel } from '../block-type/index.js';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbBlockLayoutBaseModel, UmbBlockValueType } from '@umbraco-cms/backoffice/block';
export const UMB_BLOCK_LIST_TYPE = 'block-list-type';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts
index 9637862929..396b96de89 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/components/block-rte-entry/block-rte-entry.element.ts
@@ -1,10 +1,9 @@
-import { UmbBlockRteEntryContext } from '../../context/block-rte-entry.context.js';
-import type { UmbBlockRteLayoutModel } from '../../types.js';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { html, css, property, state, customElement } from '@umbraco-cms/backoffice/external/lit';
-import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbBlockEditorCustomViewProperties, UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbBlockRteLayoutModel } from '../../types.js';
+import { UmbBlockRteEntryContext } from '../../context/block-rte-entry.context.js';
import '../ref-rte-block/index.js';
-import type { UmbBlockViewPropsType } from '@umbraco-cms/backoffice/block';
/**
* @element umb-rte-block
@@ -43,9 +42,13 @@ export class UmbBlockRteEntryElement extends UmbLitElement implements UmbPropert
@state()
_workspaceEditSettingsPath?: string;
- // TODO: use this type on the Element Interface for the Manifest.
@state()
- _blockViewProps: UmbBlockViewPropsType = { contentUdi: undefined!, urls: {} }; // Set to undefined cause it will be set before we render.
+ _blockViewProps: UmbBlockEditorCustomViewProperties = { contentUdi: undefined!, config: { showContentEdit: false, showSettingsEdit: false} }; // Set to undefined cause it will be set before we render.
+
+ #updateBlockViewProps(incoming: Partial>) {
+ this._blockViewProps = { ...this._blockViewProps, ...incoming };
+ this.requestUpdate('_blockViewProps');
+ }
constructor() {
super();
@@ -55,40 +58,42 @@ export class UmbBlockRteEntryElement extends UmbLitElement implements UmbPropert
this.observe(this.#context.showContentEdit, (showContentEdit) => {
this._showContentEdit = showContentEdit;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showContentEdit } });
});
- this.observe(this.#context.settingsElementTypeKey, (settingsElementTypeKey) => {
- this._hasSettings = !!settingsElementTypeKey;
+ this.observe(this.#context.settingsElementTypeKey, (key) => {
+ this._hasSettings = !!key;
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, showSettingsEdit: !!key } });
});
+ this.observe(this.#context.blockType, (blockType) => {
+ this.#updateBlockViewProps({ blockType });
+ }, null);
+ // TODO: Implement index.
this.observe(this.#context.label, (label) => {
+ this.#updateBlockViewProps({ label });
this._label = label;
- this._blockViewProps.label = label;
- this.requestUpdate('_blockViewProps');
- });
+ }, null);
this.observe(this.#context.contentElementTypeIcon, (icon) => {
+ this.#updateBlockViewProps({ icon });
this._icon = icon;
- this._blockViewProps.icon = icon;
- this.requestUpdate('_blockViewProps');
- });
+ }, null);
// Data props:
this.observe(this.#context.layout, (layout) => {
- this._blockViewProps.layout = layout;
- });
+ this.#updateBlockViewProps({ layout });
+ }, null);
this.observe(this.#context.content, (content) => {
- this._blockViewProps.content = content;
- });
+ this.#updateBlockViewProps({ content });
+ }, null);
this.observe(this.#context.settings, (settings) => {
- this._blockViewProps.settings = settings;
- });
+ this.#updateBlockViewProps({ settings });
+ }, null);
this.observe(this.#context.workspaceEditContentPath, (path) => {
this._workspaceEditContentPath = path;
- this._blockViewProps.urls.editContent = path;
- this.requestUpdate('_blockViewProps');
- });
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editContentPath: path } });
+ }, null);
this.observe(this.#context.workspaceEditSettingsPath, (path) => {
this._workspaceEditSettingsPath = path;
- this._blockViewProps.urls.editSettings = path;
- this.requestUpdate('_blockViewProps');
- });
+ this.#updateBlockViewProps({ config: { ...this._blockViewProps.config, editSettingsPath: path } });
+ }, null);
}
override connectedCallback() {
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts
index fd7e3dc831..a924cf9d30 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/tiny-mce-plugin/tiny-mce-block-picker.plugin.ts
@@ -1,8 +1,8 @@
-import { UMB_BLOCK_RTE_ENTRIES_CONTEXT } from '../context/block-rte-entries.context-token.js';
-import { UMB_BLOCK_RTE_MANAGER_CONTEXT } from '../context/block-rte-manager.context-token.js';
import { type TinyMcePluginArguments, UmbTinyMcePluginBase } from '@umbraco-cms/backoffice/tiny-mce';
import { UmbLocalizationController } from '@umbraco-cms/backoffice/localization-api';
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
+import { UMB_BLOCK_RTE_MANAGER_CONTEXT } from '../context/block-rte-manager.context-token.js';
+import { UMB_BLOCK_RTE_ENTRIES_CONTEXT } from '../context/block-rte-entries.context-token.js';
export default class UmbTinyMceMultiUrlPickerPlugin extends UmbTinyMcePluginBase {
#localize = new UmbLocalizationController(this._host);
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/types.ts
index 45404b976e..b5cedd32da 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-rte/types.ts
@@ -1,4 +1,4 @@
-import type { UmbBlockTypeBaseModel } from '../block-type/index.js';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbBlockLayoutBaseModel, UmbBlockValueType } from '@umbraco-cms/backoffice/block';
export const UMB_BLOCK_RTE_TYPE = 'block-rte-type';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts
index 1b587f214a..367a98fa70 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/components/input-block-type/input-block-type.element.ts
@@ -10,7 +10,8 @@ import {
UMB_DOCUMENT_TYPE_PICKER_MODAL,
} from '@umbraco-cms/backoffice/document-type';
import { UmbSorterController } from '@umbraco-cms/backoffice/sorter';
-import type { UmbBlockTypeBaseModel, UmbBlockTypeWithGroupKey } from '../../types.js';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbBlockTypeWithGroupKey } from '../../types.js';
import type { UmbBlockTypeCardElement } from '../block-type-card/index.js';
import '../block-type-card/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/types.ts
index 06bb9dce3c..aa5f55f519 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/types.ts
@@ -1,17 +1,4 @@
-import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui';
-
-export interface UmbBlockTypeBaseModel {
- contentElementTypeKey: string;
- settingsElementTypeKey?: string;
- label?: string;
- //view?: string; // TODO: remove/replace with custom element manifest type for block list.
- //stylesheet?: string; // TODO: remove/replace with custom element manifest type for block list.
- thumbnail?: string;
- iconColor?: string;
- backgroundColor?: string;
- editorSize?: UUIModalSidebarSize;
- forceHideContentEditorInOverlay: boolean;
-}
+import type { UmbBlockTypeBaseModel } from "@umbraco-cms/backoffice/extension-registry";
export interface UmbBlockTypeGroup {
name?: string;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace.context.ts
index 667af0cdd1..0086312690 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-type/workspace/block-type-workspace.context.ts
@@ -1,5 +1,3 @@
-import type { UmbBlockTypeBaseModel, UmbBlockTypeWithGroupKey } from '../types.js';
-import { UmbBlockTypeWorkspaceEditorElement } from './block-type-workspace-editor.element.js';
import type { UmbPropertyDatasetContext } from '@umbraco-cms/backoffice/property';
import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property';
import type {
@@ -13,7 +11,9 @@ import {
} from '@umbraco-cms/backoffice/workspace';
import { UmbArrayState, UmbObjectState, appendToFrozenArray } from '@umbraco-cms/backoffice/observable-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
-import type { ManifestWorkspace, PropertyEditorSettingsProperty } from '@umbraco-cms/backoffice/extension-registry';
+import type { ManifestWorkspace, PropertyEditorSettingsProperty, UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbBlockTypeWithGroupKey } from '../types.js';
+import { UmbBlockTypeWorkspaceEditorElement } from './block-type-workspace-editor.element.js';
export class UmbBlockTypeWorkspaceContext
extends UmbSubmittableWorkspaceContextBase
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context-token.ts
index 5e8190151a..e9dbb55dc3 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context-token.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context-token.ts
@@ -1,8 +1,8 @@
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
+import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import type { UmbBlockLayoutBaseModel } from '../types.js';
import type { UmbBlockEntriesContext } from './block-entries.context.js';
import type { UMB_BLOCK_MANAGER_CONTEXT } from './block-manager.context-token.js';
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
-import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
export const UMB_BLOCK_ENTRIES_CONTEXT = new UmbContextToken<
UmbBlockEntriesContext<
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts
index c16929d7b3..64cc09198e 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entries.context.ts
@@ -1,13 +1,13 @@
-import type { UmbBlockDataType, UmbBlockLayoutBaseModel } from '../types.js';
-import type { UmbBlockWorkspaceData } from '../workspace/block-workspace.modal-token.js';
-import { UMB_BLOCK_ENTRIES_CONTEXT } from './block-entries.context-token.js';
-import type { UmbBlockDataObjectModel, UmbBlockManagerContext } from './block-manager.context.js';
import { type Observable, UmbArrayState, UmbBasicState, UmbStringState } from '@umbraco-cms/backoffice/observable-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type { UmbModalRouteBuilder } from '@umbraco-cms/backoffice/router';
+import type { UmbBlockWorkspaceData } from '../workspace/block-workspace.modal-token.js';
+import type { UmbBlockDataType, UmbBlockLayoutBaseModel } from '../types.js';
+import type { UmbBlockDataObjectModel, UmbBlockManagerContext } from './block-manager.context.js';
+import { UMB_BLOCK_ENTRIES_CONTEXT } from './block-entries.context-token.js';
export abstract class UmbBlockEntriesContext<
BlockManagerContextTokenType extends UmbContextToken,
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context-token.ts
index adb50d369e..1d43662591 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context-token.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context-token.ts
@@ -1,10 +1,10 @@
+import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbBlockLayoutBaseModel } from '../types.js';
import type { UMB_BLOCK_ENTRIES_CONTEXT } from './block-entries.context-token.js';
import type { UmbBlockEntriesContext } from './block-entries.context.js';
import type { UmbBlockEntryContext } from './block-entry.context.js';
import type { UMB_BLOCK_MANAGER_CONTEXT } from './block-manager.context-token.js';
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
-import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
export const UMB_BLOCK_ENTRY_CONTEXT = new UmbContextToken<
UmbBlockEntryContext<
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts
index f2d136a648..240aff932a 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-entry.context.ts
@@ -1,7 +1,3 @@
-import type { UmbBlockLayoutBaseModel, UmbBlockDataType } from '../types.js';
-import type { UmbBlockManagerContext } from '../index.js';
-import type { UmbBlockEntriesContext } from './block-entries.context.js';
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
import type { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
@@ -16,6 +12,10 @@ import { encodeFilePath } from '@umbraco-cms/backoffice/utils';
import { umbConfirmModal } from '@umbraco-cms/backoffice/modal';
import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type';
import type { Observable } from '@umbraco-cms/backoffice/external/rxjs';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbBlockManagerContext } from '../index.js';
+import type { UmbBlockLayoutBaseModel, UmbBlockDataType } from '../types.js';
+import type { UmbBlockEntriesContext } from './block-entries.context.js';
export abstract class UmbBlockEntryContext<
BlockManagerContextTokenType extends UmbContextToken,
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts
index fa4b2d7fb2..f729de6742 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/context/block-manager.context.ts
@@ -1,16 +1,16 @@
-import type { UmbBlockLayoutBaseModel, UmbBlockDataType } from '../types.js';
-import type { UmbBlockWorkspaceData } from '../workspace/index.js';
-import { UMB_BLOCK_MANAGER_CONTEXT } from './block-manager.context-token.js';
import { UmbContextBase } from '@umbraco-cms/backoffice/class-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbArrayState, UmbClassState, UmbStringState } from '@umbraco-cms/backoffice/observable-api';
import { UmbDocumentTypeDetailRepository } from '@umbraco-cms/backoffice/document-type';
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type';
import { UmbId } from '@umbraco-cms/backoffice/id';
import type { UmbPropertyEditorConfigCollection } from '@umbraco-cms/backoffice/property-editor';
import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property';
import type { UmbVariantId } from '@umbraco-cms/backoffice/variant';
+import type { UmbBlockWorkspaceData } from '../workspace/index.js';
+import type { UmbBlockLayoutBaseModel, UmbBlockDataType } from '../types.js';
+import { UMB_BLOCK_MANAGER_CONTEXT } from './block-manager.context-token.js';
function buildUdi(entityType: string, guid: string) {
return `umb://${entityType}/${guid.replace(/-/g, '')}`;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts
index 0558d7d8ff..db261ccc3d 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/modals/block-catalogue/block-catalogue-modal.token.ts
@@ -1,6 +1,7 @@
-import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block';
-import type { UmbBlockTypeBaseModel, UmbBlockTypeGroup } from '@umbraco-cms/backoffice/block-type';
+import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/extension-registry';
import { UmbModalToken } from '@umbraco-cms/backoffice/modal';
+import type { UmbBlockWorkspaceData } from '@umbraco-cms/backoffice/block';
+import type { UmbBlockTypeGroup } from '@umbraco-cms/backoffice/block-type';
export interface UmbBlockCatalogueModalData {
blocks: Array;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
index cf4f0b8d4b..ae380233e2 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
@@ -1,4 +1,17 @@
+
+import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui';
import type { ManifestBlockEditorCustomView } from "../index.js";
+// Shared with the Property Editor
+export interface UmbBlockTypeBaseModel {
+ contentElementTypeKey: string;
+ settingsElementTypeKey?: string;
+ label?: string;
+ thumbnail?: string;
+ iconColor?: string;
+ backgroundColor?: string;
+ editorSize?: UUIModalSidebarSize;
+ forceHideContentEditorInOverlay: boolean;
+}
// Shared with the Property Editor
export interface UmbBlockLayoutBaseModel {
@@ -14,9 +27,10 @@ export interface UmbBlockDataType {
}
export interface UmbBlockEditorCustomViewConfiguration {
- editContentPath: string;
- editSettingsPath: string;
- showEditBlock: boolean;
+ editContentPath?: string;
+ editSettingsPath?: string;
+ showContentEdit: boolean;
+ showSettingsEdit: boolean;
}
export interface UmbBlockViewUrlsPropType {
@@ -25,10 +39,10 @@ export interface UmbBlockViewUrlsPropType {
}
-export interface UmbBlockEditorCustomViewProperties {
+export interface UmbBlockEditorCustomViewProperties {
manifest?: ManifestBlockEditorCustomView;
- config?: UmbBlockEditorCustomViewConfiguration;
- urls?: UmbBlockViewUrlsPropType;
+ config?: Partial;
+ blockType?: BlockType;
contentUdi?: string;
label?: string;
icon?: string;
@@ -38,6 +52,6 @@ export interface UmbBlockEditorCustomViewProperties extends UmbBlockEditorCustomViewProperties, HTMLElement {
+export interface UmbBlockEditorCustomViewElement extends UmbBlockEditorCustomViewProperties, HTMLElement {
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/block-configuration/property-editor-ui-block-rte-type-configuration.element.ts b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/block-configuration/property-editor-ui-block-rte-type-configuration.element.ts
index 0547db8671..2b59427770 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/block-configuration/property-editor-ui-block-rte-type-configuration.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/tiny-mce/property-editors/block-configuration/property-editor-ui-block-rte-type-configuration.element.ts
@@ -1,7 +1,6 @@
-import type { UmbBlockTypeBaseModel } from '@umbraco-cms/backoffice/block-type';
import { UmbInputBlockTypeElement } from '@umbraco-cms/backoffice/block-type';
import { UMB_BLOCK_RTE_TYPE } from '@umbraco-cms/backoffice/block-rte';
-import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbBlockTypeBaseModel, UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry';
import { html, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit';
import {
UmbPropertyValueChangeEvent,
From 0e3c870df8cf72af8223b3cf091e8ee2d4b2d280 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20Lyngs=C3=B8?=
Date: Mon, 1 Jul 2024 10:24:00 +0200
Subject: [PATCH 027/325] remove UmbBlockViewUrlsPropType
---
.../block-grid-block/block-grid-block.element.ts | 7 ++++---
.../src/packages/block/block/types.ts | 2 +-
.../block-editor-custom-view-element.interface.ts | 5 -----
3 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts
index 3069fc1050..6b6629d8d0 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-block/block-grid-block.element.ts
@@ -1,7 +1,8 @@
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import { css, customElement, html, property, state } from '@umbraco-cms/backoffice/external/lit';
+import type { UmbBlockEditorCustomViewConfiguration } from '@umbraco-cms/backoffice/extension-registry';
import { UMB_BLOCK_GRID_ENTRY_CONTEXT } from '../../context/block-grid-entry.context-token.js';
-import type { UmbBlockDataType, UmbBlockViewUrlsPropType } from '@umbraco-cms/backoffice/block';
+import type { UmbBlockDataType } from '@umbraco-cms/backoffice/block';
import '@umbraco-cms/backoffice/ufm';
import '../block-grid-areas-container/index.js';
@@ -17,7 +18,7 @@ export class UmbBlockGridBlockElement extends UmbLitElement {
label?: string;
@property({ attribute: false })
- urls?: UmbBlockViewUrlsPropType;
+ config?: UmbBlockEditorCustomViewConfiguration;
@state()
_content?: UmbBlockDataType;
@@ -37,7 +38,7 @@ export class UmbBlockGridBlockElement extends UmbLitElement {
}
override render() {
- return html`
+ return html``;
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts
index a6e7722374..caf4f56803 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block/types.ts
@@ -1,5 +1,5 @@
import type { UmbBlockDataType, UmbBlockLayoutBaseModel } from "@umbraco-cms/backoffice/extension-registry";
-export type { UmbBlockViewUrlsPropType, UmbBlockDataType, UmbBlockLayoutBaseModel } from "@umbraco-cms/backoffice/extension-registry";
+export type { UmbBlockDataType, UmbBlockLayoutBaseModel } from "@umbraco-cms/backoffice/extension-registry";
export interface UmbBlockValueType {
layout: { [key: string]: Array | undefined };
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
index ae380233e2..e3ffa6bec1 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/interfaces/block-editor-custom-view-element.interface.ts
@@ -33,11 +33,6 @@ export interface UmbBlockEditorCustomViewConfiguration {
showSettingsEdit: boolean;
}
-export interface UmbBlockViewUrlsPropType {
- editContent?: string;
- editSettings?: string;
-}
-
export interface UmbBlockEditorCustomViewProperties {
manifest?: ManifestBlockEditorCustomView;
From 9e3859ea649330a34c4604943ca1836796d6dd44 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20Lyngs=C3=B8?=
Date: Mon, 1 Jul 2024 10:26:10 +0200
Subject: [PATCH 028/325] out comment test
---
src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
index 6655135552..de0e7b0b3e 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
@@ -4,10 +4,11 @@ import { manifests as blockGridManifests } from './block-grid/manifests.js';
import { manifests as blockListManifests } from './block-list/manifests.js';
import { manifests as blockRteManifests } from './block-rte/manifests.js';
import { manifests as blockTypeManifests } from './block-type/manifests.js';
-import { manifest } from './custom-view/manifest.js';
+// TODO: Remove test custom view, or transfer to test or similar?
+//import { manifest } from './custom-view/manifest.js';
export const manifests: Array = [
- manifest,
+// manifest,
...blockManifests,
...blockTypeManifests,
...blockListManifests,
From 19a2699b966f102afa2c15e3111ccbbb5880830e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20Lyngs=C3=B8?=
Date: Mon, 1 Jul 2024 10:30:59 +0200
Subject: [PATCH 029/325] custom view test element
---
.../block-grid-entry/block-grid-entry.element.ts | 4 ----
.../block/custom-view/custom-view.element.ts | 15 ++++++++++++++-
.../src/packages/block/manifests.ts | 2 +-
3 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
index 4e1c140bdb..5a4820a7aa 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/block-grid/components/block-grid-entry/block-grid-entry.element.ts
@@ -367,10 +367,6 @@ export class UmbBlockGridEntryElement extends UmbLitElement implements UmbProper
border-color: var(--uui-color-interactive);
}
- uui-action-bar {
- background-color: var(--uui-color-surface);
- }
-
.umb-block-grid__block {
height: 100%;
}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/custom-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/custom-view.element.ts
index 1217a95f4d..7f5d1bcc1a 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/custom-view.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/custom-view/custom-view.element.ts
@@ -1,5 +1,5 @@
import type { UmbBlockDataType, UmbBlockEditorCustomViewElement } from "@umbraco-cms/backoffice/extension-registry";
-import { customElement, html, property } from "@umbraco-cms/backoffice/external/lit";
+import { css, customElement, html, property } from "@umbraco-cms/backoffice/external/lit";
import { UmbLitElement } from "@umbraco-cms/backoffice/lit-element";
@customElement('umb-custom-view-test')
@@ -13,6 +13,19 @@ export class UmbCustomViewTestElement extends UmbLitElement implements UmbBlockE
Hello ${this.content?.headline}
`
}
+
+ static override styles = [
+ css`
+ :host {
+ display: block;
+ height: 100%;
+ box-sizing: border-box;
+ background-color: #dddddd;
+ border-radius: 9px;
+ padding: 12px;
+ }
+ `
+ ]
}
export {UmbCustomViewTestElement as element};
diff --git a/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
index de0e7b0b3e..6acc156598 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/block/manifests.ts
@@ -8,7 +8,7 @@ import { manifests as blockTypeManifests } from './block-type/manifests.js';
//import { manifest } from './custom-view/manifest.js';
export const manifests: Array = [
-// manifest,
+ //manifest,
...blockManifests,
...blockTypeManifests,
...blockListManifests,
From 587fb4f0c620453f5dc4f56a5bdcab96e404c91a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20Lyngs=C3=B8?=
Date: Mon, 1 Jul 2024 10:42:26 +0200
Subject: [PATCH 030/325] do not render slot in extension-with-api-slot
---
.../extension-with-api-slot.element.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts
index d7d5fc09ab..539c1ac8e2 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts
@@ -26,7 +26,7 @@ export class UmbExtensionWithApiSlotElement extends UmbLitElement {
#extensionsController?: UmbExtensionsElementAndApiInitializer;
@state()
- private _permitted: Array = [];
+ private _permitted?: Array;
/**
* The type or types of extensions to render.
@@ -178,13 +178,13 @@ export class UmbExtensionWithApiSlotElement extends UmbLitElement {
}
override render() {
- return this._permitted.length > 0
+ return this._permitted ? this._permitted.length > 0
? repeat(
this._permitted,
(ext) => ext.alias,
(ext, i) => (this.renderMethod ? this.renderMethod(ext, i) : ext.component),
)
- : html``;
+ : html`` : '';
}
static override styles = css`
From 7f515533fd1720e52327f557d25451b8bb767542 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20Lyngs=C3=B8?=
Date: Mon, 1 Jul 2024 10:43:19 +0200
Subject: [PATCH 031/325] sort import
---
.../extension-with-api-slot.element.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts
index 539c1ac8e2..ab41814cf9 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/components/extension-with-api-slot/extension-with-api-slot.element.ts
@@ -1,5 +1,3 @@
-import { umbExtensionsRegistry } from '../../registry.js';
-import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import type { TemplateResult } from '@umbraco-cms/backoffice/external/lit';
import { css, repeat, customElement, property, state, html } from '@umbraco-cms/backoffice/external/lit';
import {
@@ -8,6 +6,8 @@ import {
type UmbApiConstructorArgumentsMethodType,
type ApiLoaderProperty,
} from '@umbraco-cms/backoffice/extension-api';
+import { umbExtensionsRegistry } from '../../registry.js';
+import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
/**
* @element umb-extension-with-api-slot
From 2ca2d27dd8200490f690498567fa8633ffe9becb Mon Sep 17 00:00:00 2001
From: Mads Rasmussen
Date: Tue, 2 Jul 2024 07:55:56 +0200
Subject: [PATCH 032/325] fix import order
---
.../core/content/workspace/content-workspace.context-token.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-workspace.context-token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-workspace.context-token.ts
index cf2c295263..8977bc8f59 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-workspace.context-token.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/content-workspace.context-token.ts
@@ -1,5 +1,5 @@
-import type { UmbContentWorkspaceContext } from './content-workspace-context.interface.js';
import { UmbContextToken } from '@umbraco-cms/backoffice/context-api';
+import type { UmbContentWorkspaceContext } from './content-workspace-context.interface.js';
export const UMB_CONTENT_WORKSPACE_CONTEXT = new UmbContextToken<
UmbContentWorkspaceContext,
From 5e3907df54164fc50bb2ee7374a94e11c37b53d5 Mon Sep 17 00:00:00 2001
From: Mads Rasmussen
Date: Tue, 2 Jul 2024 07:56:58 +0200
Subject: [PATCH 033/325] add condition to check for content properties
---
.../conditions/has-properties/constants.ts | 1 +
...ntent-has-properties.condition.manifest.ts | 8 +++++
.../content-has-properties.condition.ts | 34 +++++++++++++++++++
.../edit/conditions/has-properties/index.ts | 1 +
4 files changed, 44 insertions(+)
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/constants.ts
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.manifest.ts
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.ts
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/index.ts
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/constants.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/constants.ts
new file mode 100644
index 0000000000..a37e6add77
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/constants.ts
@@ -0,0 +1 @@
+export const UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION = 'Umb.Condition.Workspace.ContentHasProperties';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.manifest.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.manifest.ts
new file mode 100644
index 0000000000..654bbb853b
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.manifest.ts
@@ -0,0 +1,8 @@
+import type { ManifestCondition } from '@umbraco-cms/backoffice/extension-api';
+
+export const manifest: ManifestCondition = {
+ type: 'condition',
+ name: 'Content has properties Workspace Condition',
+ alias: 'Umb.Condition.Workspace.ContentHasProperties',
+ api: () => import('./content-has-properties.condition.js'),
+};
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.ts
new file mode 100644
index 0000000000..b311e27b91
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/content-has-properties.condition.ts
@@ -0,0 +1,34 @@
+import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
+import type {
+ UmbConditionConfigBase,
+ UmbConditionControllerArguments,
+ UmbExtensionCondition,
+} from '@umbraco-cms/backoffice/extension-api';
+import { UMB_CONTENT_WORKSPACE_CONTEXT } from '../../../../content-workspace.context-token.js';
+import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry';
+import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type';
+import { UmbContentTypePropertyStructureHelper } from '@umbraco-cms/backoffice/content-type';
+
+export class UmbContentHasPropertiesWorkspaceCondition
+ extends UmbConditionBase
+ implements UmbExtensionCondition
+{
+ #propertyStructureHelper = new UmbContentTypePropertyStructureHelper(this);
+
+ constructor(host: UmbControllerHost, args: UmbConditionControllerArguments) {
+ super(host, args);
+
+ this.consumeContext(UMB_CONTENT_WORKSPACE_CONTEXT, (context) => {
+ this.observe(
+ context.structure.contentTypes,
+ (contentTypes) => {
+ const hasProperties = contentTypes.some((contentType) => contentType.properties.length > 0);
+ this.permitted = hasProperties;
+ },
+ 'contentTypesObserver',
+ );
+ });
+ }
+}
+
+export { UmbContentHasPropertiesWorkspaceCondition as api };
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/index.ts
new file mode 100644
index 0000000000..4f07201dcf
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/has-properties/index.ts
@@ -0,0 +1 @@
+export * from './constants.js';
From 60b8cee752d562db3e414230066c818e431e8647 Mon Sep 17 00:00:00 2001
From: Mads Rasmussen
Date: Tue, 2 Jul 2024 07:57:24 +0200
Subject: [PATCH 034/325] do the exporting dance
---
.../src/packages/core/content/workspace/index.ts | 1 +
.../src/packages/core/content/workspace/manifests.ts | 4 ++--
.../content/workspace/views/edit/conditions/manifests.ts | 3 +++
.../src/packages/core/content/workspace/views/edit/index.ts | 1 +
.../workspace/views/edit/{manifest.ts => manifests.ts} | 5 ++++-
5 files changed, 11 insertions(+), 3 deletions(-)
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/manifests.ts
create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/index.ts
rename src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/{manifest.ts => manifests.ts} (67%)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts
index 662c027fcb..4c72bcced7 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/index.ts
@@ -1,2 +1,3 @@
export type * from './content-workspace-context.interface.js';
export * from './content-workspace.context-token.js';
+export * from './views/edit/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/manifests.ts
index d30be86fd2..81565ef37a 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/manifests.ts
@@ -1,3 +1,3 @@
-import { contentEditorManifest } from './views/edit/manifest.js';
+import { manifests as contentEditorManifests } from './views/edit/manifests.js';
-export const manifests = [contentEditorManifest];
+export const manifests = [...contentEditorManifests];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/manifests.ts
new file mode 100644
index 0000000000..d4221afab0
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/conditions/manifests.ts
@@ -0,0 +1,3 @@
+import { manifest as hasPropertiesManifest } from './has-properties/content-has-properties.condition.manifest.js';
+
+export const manifests = [hasPropertiesManifest];
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/index.ts
new file mode 100644
index 0000000000..1637f3a5e7
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/index.ts
@@ -0,0 +1 @@
+export * from './conditions/has-properties/index.js';
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifest.ts b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifests.ts
similarity index 67%
rename from src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifest.ts
rename to src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifests.ts
index 3cb898bd97..caa2ec28d8 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifest.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/content/workspace/views/edit/manifests.ts
@@ -1,6 +1,7 @@
+import { manifests as conditionsManifests } from './conditions/manifests.js';
import type { UmbBackofficeManifestKind } from '@umbraco-cms/backoffice/extension-registry';
-export const contentEditorManifest: UmbBackofficeManifestKind = {
+const contentEditorManifest: UmbBackofficeManifestKind = {
type: 'kind',
alias: 'Umb.Kind.WorkspaceView.ContentEditor',
matchKind: 'contentEditor',
@@ -17,3 +18,5 @@ export const contentEditorManifest: UmbBackofficeManifestKind = {
},
},
};
+
+export const manifests = [contentEditorManifest, ...conditionsManifests];
From 299dc9d1912dc65445c7ccf64675fda4441c38fa Mon Sep 17 00:00:00 2001
From: Mads Rasmussen
Date: Tue, 2 Jul 2024 07:57:51 +0200
Subject: [PATCH 035/325] assign condition to document content workspace view
---
.../documents/documents/workspace/manifests.ts | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts
index 15c0479ee3..a47c9feae4 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts
@@ -1,9 +1,3 @@
-import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js';
-import {
- UMB_USER_PERMISSION_DOCUMENT_UNPUBLISH,
- UMB_USER_PERMISSION_DOCUMENT_UPDATE,
- UMB_USER_PERMISSION_DOCUMENT_PUBLISH,
-} from '../user-permissions/index.js';
import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin';
import type {
ManifestWorkspaces,
@@ -12,6 +6,13 @@ import type {
ManifestWorkspaceView,
ManifestTypes,
} from '@umbraco-cms/backoffice/extension-registry';
+import { UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION } from '@umbraco-cms/backoffice/content';
+import {
+ UMB_USER_PERMISSION_DOCUMENT_UNPUBLISH,
+ UMB_USER_PERMISSION_DOCUMENT_UPDATE,
+ UMB_USER_PERMISSION_DOCUMENT_PUBLISH,
+} from '../user-permissions/index.js';
+import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js';
export const UMB_DOCUMENT_WORKSPACE_ALIAS = 'Umb.Workspace.Document';
@@ -63,6 +64,9 @@ const workspaceViews: Array = [
alias: 'Umb.Condition.WorkspaceAlias',
match: workspace.alias,
},
+ {
+ alias: UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION,
+ },
],
},
{
From e385e5f1a11fb10a77fb94a8dc609d05221eb11f Mon Sep 17 00:00:00 2001
From: Mads Rasmussen
Date: Tue, 2 Jul 2024 07:59:13 +0200
Subject: [PATCH 036/325] add condition to media
---
.../src/packages/media/media/workspace/manifests.ts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts
index b26fbb35d9..7d62e0815c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts
@@ -6,6 +6,7 @@ import type {
ManifestTypes,
} from '@umbraco-cms/backoffice/extension-registry';
import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS } from '@umbraco-cms/backoffice/recycle-bin';
+import { UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION } from '@umbraco-cms/backoffice/content';
const workspace: ManifestWorkspaces = {
type: 'workspace',
@@ -55,6 +56,9 @@ const workspaceViews: Array = [
alias: 'Umb.Condition.WorkspaceAlias',
match: workspace.alias,
},
+ {
+ alias: UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION,
+ },
],
},
{
From a39d072ae45892f2ac392a5c3cf2d3dd4f4c6779 Mon Sep 17 00:00:00 2001
From: Mads Rasmussen
Date: Tue, 2 Jul 2024 07:59:49 +0200
Subject: [PATCH 037/325] add condition to member content editor
---
.../src/packages/members/member/workspace/manifests.ts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts
index 0c83475d5c..c47595c8fc 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/members/member/workspace/manifests.ts
@@ -6,6 +6,7 @@ import type {
ManifestWorkspaceView,
ManifestTypes,
} from '@umbraco-cms/backoffice/extension-registry';
+import { UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION } from '@umbraco-cms/backoffice/content';
export const UMB_MEMBER_WORKSPACE_ALIAS = 'Umb.Workspace.Member';
@@ -58,6 +59,9 @@ export const workspaceViews: Array = [
alias: 'Umb.Condition.WorkspaceAlias',
match: UMB_MEMBER_WORKSPACE_ALIAS,
},
+ {
+ alias: UMB_CONTENT_HAS_PROPERTIES_WORKSPACE_CONDITION,
+ },
],
},
{
From cebd19285ac6a57471159203d78a0a6f94c9df1c Mon Sep 17 00:00:00 2001
From: Lone Iversen <108085781+loivsen@users.noreply.github.com>
Date: Tue, 2 Jul 2024 12:52:44 +0200
Subject: [PATCH 038/325] show correct api error msg
---
.../core/resources/resource.controller.ts | 21 +++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/resources/resource.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/resources/resource.controller.ts
index 0c64f0bc8e..ebd873902b 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/core/resources/resource.controller.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/resources/resource.controller.ts
@@ -1,10 +1,11 @@
+import { html } from '@umbraco-cms/backoffice/external/lit';
+import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
+import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
+import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api';
/* eslint-disable @typescript-eslint/no-explicit-any */
import { UMB_AUTH_CONTEXT } from '../auth/index.js';
import { isApiError, isCancelError, isCancelablePromise } from './apiTypeValidators.function.js';
import { UMB_NOTIFICATION_CONTEXT, type UmbNotificationOptions } from '@umbraco-cms/backoffice/notification';
-import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
-import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
-import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api';
import type { UmbDataSourceResponse } from '@umbraco-cms/backoffice/repository';
export class UmbResourceController extends UmbControllerBase {
@@ -36,6 +37,17 @@ export class UmbResourceController extends UmbControllerBase {
this.cancel();
}
+ #buildApiErrorMessage(error: any) {
+ const entries: Array> = [];
+
+ Object.entries(error).forEach(([category, message]) => {
+ entries.push({ category, messages: message as string[] });
+ });
+ const template = html` ${entries.map((e) => e.messages.map((msg: string) => html`