From f5a5707bb3f90b3194c9c117d5f227cb73ae6961 Mon Sep 17 00:00:00 2001
From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Date: Thu, 27 Jul 2023 15:44:59 +0200
Subject: [PATCH] add crude language selector to user workspace
---
.../user-workspace-editor.element.ts | 45 ++++++++++++++++---
1 file changed, 40 insertions(+), 5 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/packages/users/users/workspace/user-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/users/users/workspace/user-workspace-editor.element.ts
index 2a378b5d35..138f56decc 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/users/users/workspace/user-workspace-editor.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/users/users/workspace/user-workspace-editor.element.ts
@@ -14,6 +14,7 @@ import {
ifDefined,
repeat,
} from '@umbraco-cms/backoffice/external/lit';
+import { firstValueFrom } from '@umbraco-cms/backoffice/external/rxjs';
import { UMB_CHANGE_PASSWORD_MODAL } from '@umbraco-cms/backoffice/modal';
import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal';
@@ -34,9 +35,11 @@ export class UmbUserWorkspaceEditorElement extends UmbLitElement {
@state()
private _user?: UmbUserDetail;
+ @state()
+ private languages: Array<{ name: string; value: string; selected: boolean }> = [];
+
#auth?: typeof UMB_AUTH.TYPE;
#modalContext?: UmbModalManagerContext;
- #languages = []; //TODO Add languages
#workspaceContext?: UmbUserWorkspaceContext;
#userRepository?: UmbUserRepository;
@@ -78,7 +81,39 @@ export class UmbUserWorkspaceEditorElement extends UmbLitElement {
#observeCurrentUser() {
if (!this.#auth) return;
- this.observe(this.#auth.currentUser, (currentUser) => (this._currentUser = currentUser));
+ this.observe(this.#auth.currentUser, async (currentUser) => {
+ this._currentUser = currentUser;
+
+ if (!currentUser) {
+ return;
+ }
+
+ // Find all translations and make a unique list of iso codes
+ const translations = await firstValueFrom(umbExtensionsRegistry.extensionsOfType('translations'));
+
+ this.languages = translations
+ .filter((isoCode) => isoCode !== undefined)
+ .map((translation) => ({
+ value: translation.meta.culture.toLowerCase(),
+ name: translation.name,
+ selected: false,
+ }));
+
+ const currentUserLanguageCode = currentUser.languageIsoCode?.toLowerCase();
+
+ // Set the current user's language as selected
+ const currentUserLanguage = this.languages.find((language) => language.value === currentUserLanguageCode);
+
+ if (currentUserLanguage) {
+ currentUserLanguage.selected = true;
+ } else {
+ this.languages.push({
+ value: currentUserLanguageCode ?? 'en-us',
+ name: currentUserLanguageCode ? `${currentUserLanguageCode} (unknown)` : 'Unknown',
+ selected: true,
+ });
+ }
+ });
}
#onUserStatusChange() {
@@ -152,10 +187,10 @@ export class UmbUserWorkspaceEditorElement extends UmbLitElement {
return html`
Profile
-
+
-
+
@@ -172,7 +207,7 @@ export class UmbUserWorkspaceEditorElement extends UmbLitElement {
label="Content start node"
description="Limit the content tree to specific start nodes">
this.#workspaceContext?.updateProperty('contentStartNodeIds', e.target.value)}
slot="editor">