From 96a966c3e26208dabc5f98638e048fd1620aed36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:30:40 +1300 Subject: [PATCH 01/10] add popover layout --- .../src/packages/core/components/index.ts | 1 + .../core/components/popover-layout/index.ts | 3 ++ .../popover-layout/popover-layout.element.ts | 32 +++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/index.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/popover-layout.element.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts index d212570fa6..99fe0873ce 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/index.ts @@ -33,3 +33,4 @@ export * from './ref-property-editor-ui/index.js'; export * from './table/index.js'; export * from './tooltip-menu/index.js'; export * from './variant-selector/index.js'; +export * from './popover-layout/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/index.ts new file mode 100644 index 0000000000..8bea3415c4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/index.ts @@ -0,0 +1,3 @@ +import './popover-layout.element.js'; + +export * from './popover-layout.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/popover-layout.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/popover-layout.element.ts new file mode 100644 index 0000000000..4f60d3e1b0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/popover-layout.element.ts @@ -0,0 +1,32 @@ +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; + +// TODO: maybe move this to UI Library. +@customElement('umb-popover-layout') +export class UmbPopoverLayoutElement extends UmbLitElement { + render() { + return html``; + } + + static styles = [ + UmbTextStyles, + css` + :host { + background-color: var(--uui-color-surface); + display: block; + border: 1px solid var(--uui-color-border); + border-radius: var(--uui-border-radius); + box-shadow: var(--uui-shadow-depth-3); + padding: var(--uui-size-space-3); + overflow: clip; + } + `, + ]; +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-popover-layout': UmbPopoverLayoutElement; + } +} From 7eb94846670b5978e0644dfa19f44bcc39f83b7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:30:54 +1300 Subject: [PATCH 02/10] use popover layout --- .../user-collection-header.element.ts | 72 ++++++++++--------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts index 29c7bcb878..499073f763 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts @@ -173,45 +173,48 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { #renderStatusFilter() { return html` - - - : - - - -
- ${this._stateFilterOptions.map( - (option) => - html``, - )} -
-
+ + : + + + + +
+ ${this._stateFilterOptions.map( + (option) => + html``, + )} +
+
+
`; } #renderUserGroupFilter() { return html` - - - : ${this.#getUserGroupFilterLabel()} - -
- ${repeat( - this._userGroups, - (group) => group.id, - (group) => html` - - `, - )} -
-
+ + : ${this.#getUserGroupFilterLabel()} + + + +
+ ${repeat( + this._userGroups, + (group) => group.id, + (group) => html` + + `, + )} +
+
+
`; } @@ -243,7 +246,6 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { display: flex; gap: var(--uui-size-space-3); flex-direction: column; - width: fit-content; } `, ]; From c3af008364ca43665d036a6c6381c92bac3799a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:31:41 +1300 Subject: [PATCH 03/10] comment --- .../core/components/popover-layout/popover-layout.element.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/popover-layout.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/popover-layout.element.ts index 4f60d3e1b0..7b0994bbf4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/popover-layout.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/popover-layout.element.ts @@ -3,6 +3,7 @@ import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; // TODO: maybe move this to UI Library. +// TODO: add overwrites for customization. @customElement('umb-popover-layout') export class UmbPopoverLayoutElement extends UmbLitElement { render() { From 6bb85fbf703abae51a5680be70a5afa28302dc80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:44:10 +1300 Subject: [PATCH 04/10] collection view bundle --- .../collection-view-bundle.element.ts | 69 +++++++++---------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts index 54ad3b675a..f7e767c302 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts @@ -12,9 +12,6 @@ export class UmbCollectionViewBundleElement extends UmbLitElement { @state() _currentView?: ManifestCollectionView; - @state() - private _isOpen = false; - @state() private _collectionRootPathname = ''; @@ -33,56 +30,58 @@ export class UmbCollectionViewBundleElement extends UmbLitElement { } #observeCurrentView() { - this.observe(this.#collectionContext!.currentView, (view) => { - this._currentView = view; - }, 'umbCurrentCollectionViewObserver'); + this.observe( + this.#collectionContext!.currentView, + (view) => { + this._currentView = view; + }, + 'umbCurrentCollectionViewObserver', + ); } #observeViews() { - this.observe(this.#collectionContext!.views, (views) => { - this._views = views; - }, 'umbCollectionViewsObserver'); + this.observe( + this.#collectionContext!.views, + (views) => { + this._views = views; + }, + 'umbCollectionViewsObserver', + ); } - - #toggleDropdown() { - this._isOpen = !this._isOpen; - } - - #closeDropdown() { - this._isOpen = false; - } - render() { - return html`${this.#renderLayoutButton()}`; - } - - #renderLayoutButton() { if (!this._currentView) return nothing; - return html` - ${this.#renderItemDisplay(this._currentView)} -
${this._views.map((view) => this.#renderItem(view))}
-
`; + return html` + + ${this.#renderItemDisplay(this._currentView)} + + + +
${this._views.map((view) => this.#renderItem(view))}
+
+
+ `; } #renderItem(view: ManifestCollectionView) { - return html`${this.#renderItemDisplay(view)}`; + return html` + + ${this.#renderItemDisplay(view)} + + `; } #renderItemDisplay(view: ManifestCollectionView) { - return html` ${view.meta.label}`; + return html``; } static styles = [ UmbTextStyles, css` - .item { - } - - a { - display: block; + .filter-dropdown { + display: flex; + gap: var(--uui-size-space-3); + flex-direction: column; } `, ]; From e6ee6acad50d35128296b56d36b474d6de14f614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:47:50 +1300 Subject: [PATCH 05/10] status label --- .../user/collection/user-collection-header.element.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts index 499073f763..7c5ea6423a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts @@ -167,6 +167,12 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { : this._userGroupFilterSelection.map((group) => group.name).join(', '); } + #getStatusFilterLabel() { + return this._stateFilterSelection.length === 0 + ? this.localize.term('general_all') + : this._stateFilterSelection.map((state) => this.localize.term('user_state' + state)).join(', '); + } + #renderFilters() { return html` ${this.#renderStatusFilter()} ${this.#renderUserGroupFilter()} `; } @@ -174,8 +180,7 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { #renderStatusFilter() { return html` - : - + : ${this.#getStatusFilterLabel()} From a3238290b683c290c6a411abd146d0c1fe1d78f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:54:45 +1300 Subject: [PATCH 06/10] comment --- .../core/collection/components/collection-view-bundle.element.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts index f7e767c302..ca67b70a05 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts @@ -33,6 +33,7 @@ export class UmbCollectionViewBundleElement extends UmbLitElement { this.observe( this.#collectionContext!.currentView, (view) => { + //TODO: This is not called when the view is changed this._currentView = view; }, 'umbCurrentCollectionViewObserver', From 4a7edf31af840f476d4ac1a4b8506fa4812429e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:57:47 +1300 Subject: [PATCH 07/10] cleanup --- .../user/collection/user-collection-header.element.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts index 7c5ea6423a..1ab280ee47 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts @@ -69,15 +69,6 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { } } - #onDropdownClick(event: PointerEvent) { - const composedPath = event.composedPath(); - - const dropdown = composedPath.find((el) => el instanceof UmbDropdownElement) as UmbDropdownElement; - if (dropdown) { - dropdown.open = !dropdown.open; - } - } - private _updateSearch(event: InputEvent) { const target = event.target as HTMLInputElement; const filter = target.value || ''; From 33de3db78614912b7d6b90d6c09773b709e1acc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 18:04:15 +1300 Subject: [PATCH 08/10] limit items on filter buttons --- .../user-collection-header.element.ts | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts index 1ab280ee47..7299da3b78 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts @@ -153,15 +153,27 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { } #getUserGroupFilterLabel() { - return this._userGroupFilterSelection.length === 0 + const length = this._userGroupFilterSelection.length; + const max = 2; + //TODO: Temp solution to limit the amount of states shown + return length === 0 ? this.localize.term('general_all') - : this._userGroupFilterSelection.map((group) => group.name).join(', '); + : this._userGroupFilterSelection + .slice(0, max) + .map((group) => group.name) + .join(', ') + (length > max ? ' + ' + (length - max) : ''); } #getStatusFilterLabel() { - return this._stateFilterSelection.length === 0 + const length = this._stateFilterSelection.length; + const max = 2; + //TODO: Temp solution to limit the amount of states shown + return length === 0 ? this.localize.term('general_all') - : this._stateFilterSelection.map((state) => this.localize.term('user_state' + state)).join(', '); + : this._stateFilterSelection + .slice(0, max) + .map((state) => this.localize.term('user_state' + state)) + .join(', ') + (length > max ? ' + ' + (length - max) : ''); } #renderFilters() { @@ -171,7 +183,7 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { #renderStatusFilter() { return html` - : ${this.#getStatusFilterLabel()} + : ${this.#getStatusFilterLabel()} @@ -193,7 +205,7 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { #renderUserGroupFilter() { return html` - : ${this.#getUserGroupFilterLabel()} + : ${this.#getUserGroupFilterLabel()} From 6771f75df3cfd37cde6969a821778ceeef9532f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 18:08:36 +1300 Subject: [PATCH 09/10] header styling --- .../user/user/collection/user-collection-header.element.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts index 7299da3b78..0dc081232f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts @@ -109,8 +109,9 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { render() { return html` - ${this.#renderCollectionActions()} ${this.#renderSearch()} ${this.#renderFilters()} - ${this.#renderCollectionViews()} +
${this.#renderCollectionActions()}
+ ${this.#renderSearch()} +
${this.#renderFilters()} ${this.#renderCollectionViews()}
`; } From fa0a7c1f548e8df79aaf2744b6b2c5c28aef315f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesper=20M=C3=B8ller=20Jensen?= <26099018+JesmoDev@users.noreply.github.com> Date: Tue, 21 Nov 2023 22:22:55 +1300 Subject: [PATCH 10/10] add labels to view bundle dropdown --- .../components/collection-view-bundle.element.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts index ca67b70a05..8283848981 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/components/collection-view-bundle.element.ts @@ -67,7 +67,7 @@ export class UmbCollectionViewBundleElement extends UmbLitElement { #renderItem(view: ManifestCollectionView) { return html` - ${this.#renderItemDisplay(view)} + ${this.#renderItemDisplay(view)} ${view.meta.label} `; } @@ -79,6 +79,12 @@ export class UmbCollectionViewBundleElement extends UmbLitElement { static styles = [ UmbTextStyles, css` + :host { + --uui-button-content-align: left; + } + .label { + margin-left: var(--uui-size-space-1); + } .filter-dropdown { display: flex; gap: var(--uui-size-space-3);