diff --git a/src/Umbraco.Web.UI.Client/libs/modal/token/language-picker-modal.token.ts b/src/Umbraco.Web.UI.Client/libs/modal/token/language-picker-modal.token.ts index fb47287bd9..7cb3cb2b8b 100644 --- a/src/Umbraco.Web.UI.Client/libs/modal/token/language-picker-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/libs/modal/token/language-picker-modal.token.ts @@ -3,12 +3,12 @@ import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbLanguagePickerModalData { multiple?: boolean; - selection?: Array; + selection?: Array; filter?: (language: LanguageResponseModel) => boolean; } export interface UmbLanguagePickerModalResult { - selection: Array; + selection: Array; } export const UMB_LANGUAGE_PICKER_MODAL = new UmbModalToken( diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/modals/language-picker/language-picker-modal.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/modals/language-picker/language-picker-modal.element.ts index 968d766cd7..a494344837 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/modals/language-picker/language-picker-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/settings/languages/modals/language-picker/language-picker-modal.element.ts @@ -2,34 +2,28 @@ import { UUITextStyles } from '@umbraco-ui/uui-css'; import { css, html } from 'lit'; import { customElement, state } from 'lit/decorators.js'; import { repeat } from 'lit/directives/repeat.js'; -import { UUIMenuItemElement, UUIMenuItemEvent } from '@umbraco-ui/uui'; -import { ifDefined } from 'lit/directives/if-defined.js'; import { UmbLanguageRepository } from '../../repository/language.repository'; -import { UmbModalElementPickerBase } from '@umbraco-cms/internal/modal'; +import { UmbModalBaseElement } from '@umbraco-cms/internal/modal'; import { LanguageResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import { UmbSelectionManagerBase } from '@umbraco-cms/backoffice/utils'; +import { UmbLanguagePickerModalResult, UmbLanguagePickerModalData } from '@umbraco-cms/backoffice/modal'; @customElement('umb-language-picker-modal') -export class UmbLanguagePickerModalElement extends UmbModalElementPickerBase { - - +export class UmbLanguagePickerModalElement extends UmbModalBaseElement< + UmbLanguagePickerModalData, + UmbLanguagePickerModalResult +> { @state() private _languages: Array = []; - private _languageRepository = new UmbLanguageRepository(this); + #languageRepository = new UmbLanguageRepository(this); + #selectionManager = new UmbSelectionManagerBase(); async firstUpdated() { - const { data } = await this._languageRepository.requestLanguages(); + const { data } = await this.#languageRepository.requestLanguages(); this._languages = data?.items ?? []; } - #onSelection(event: UUIMenuItemEvent) { - event?.stopPropagation(); - const language = event?.target as UUIMenuItemElement; - const isoCode = language.dataset.isoCode; - if (!isoCode) return; - this.handleSelection(isoCode); - } - get #filteredLanguages() { if (this.data?.filter) { return this._languages.filter(this.data.filter); @@ -38,6 +32,14 @@ export class UmbLanguagePickerModalElement extends UmbModalElementPickerBase @@ -47,23 +49,22 @@ export class UmbLanguagePickerModalElement extends UmbModalElementPickerBase html` + selectable + @selected=${() => this.#selectionManager.select(item.isoCode!)} + @unselected=${() => this.#selectionManager.deselect(item.isoCode!)} + ?selected=${this.#selectionManager.isSelected(item.isoCode!)}> ` )}
- - + +
`; } - + static styles = [UUITextStyles, css``]; }