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..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
@@ -12,9 +12,6 @@ export class UmbCollectionViewBundleElement extends UmbLitElement {
@state()
_currentView?: ManifestCollectionView;
- @state()
- private _isOpen = false;
-
@state()
private _collectionRootPathname = '';
@@ -33,56 +30,65 @@ export class UmbCollectionViewBundleElement extends UmbLitElement {
}
#observeCurrentView() {
- this.observe(this.#collectionContext!.currentView, (view) => {
- this._currentView = view;
- }, 'umbCurrentCollectionViewObserver');
+ this.observe(
+ this.#collectionContext!.currentView,
+ (view) => {
+ //TODO: This is not called when the view is changed
+ 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)} ${view.meta.label}
+
+ `;
}
#renderItemDisplay(view: ManifestCollectionView) {
- return html` ${view.meta.label}`;
+ return html``;
}
static styles = [
UmbTextStyles,
css`
- .item {
+ :host {
+ --uui-button-content-align: left;
}
-
- a {
- display: block;
+ .label {
+ margin-left: var(--uui-size-space-1);
+ }
+ .filter-dropdown {
+ display: flex;
+ gap: var(--uui-size-space-3);
+ flex-direction: column;
}
`,
];
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..7b0994bbf4
--- /dev/null
+++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/popover-layout/popover-layout.element.ts
@@ -0,0 +1,33 @@
+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.
+// TODO: add overwrites for customization.
+@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;
+ }
+}
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..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
@@ -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 || '';
@@ -118,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()}
`;
}
@@ -162,9 +154,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() {
+ 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
+ .slice(0, max)
+ .map((state) => this.localize.term('user_state' + state))
+ .join(', ') + (length > max ? ' + ' + (length - max) : '');
}
#renderFilters() {
@@ -173,45 +183,47 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement {
#renderStatusFilter() {
return html`
-
-
- :
-
-
-
-
- ${this._stateFilterOptions.map(
- (option) =>
- html``,
- )}
-
-
+
+ : ${this.#getStatusFilterLabel()}
+
+
+
+
+ ${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 +255,6 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement {
display: flex;
gap: var(--uui-size-space-3);
flex-direction: column;
- width: fit-content;
}
`,
];