Merge pull request #2225 from umbraco/v14/feature/dictionary-language-permissions
Feature: Support Language Permissions in Dictionary Section
This commit is contained in:
@@ -5,26 +5,50 @@ import { UUITextareaEvent } from '@umbraco-cms/backoffice/external/uui';
|
||||
import { css, html, customElement, state, repeat, ifDefined, unsafeHTML } from '@umbraco-cms/backoffice/external/lit';
|
||||
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
|
||||
import { UmbLanguageCollectionRepository, type UmbLanguageDetailModel } from '@umbraco-cms/backoffice/language';
|
||||
import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user';
|
||||
|
||||
@customElement('umb-workspace-view-dictionary-editor')
|
||||
export class UmbWorkspaceViewDictionaryEditorElement extends UmbLitElement {
|
||||
@state()
|
||||
private _dictionary?: UmbDictionaryDetailModel;
|
||||
|
||||
#languageCollectionRepository = new UmbLanguageCollectionRepository(this);
|
||||
|
||||
@state()
|
||||
private _languages: Array<UmbLanguageDetailModel> = [];
|
||||
|
||||
#workspaceContext!: typeof UMB_DICTIONARY_WORKSPACE_CONTEXT.TYPE;
|
||||
@state()
|
||||
private _currentUserLanguageAccess?: Array<string> = [];
|
||||
|
||||
override async connectedCallback() {
|
||||
super.connectedCallback();
|
||||
@state()
|
||||
private _currentUserHasAccessToAllLanguages?: boolean = false;
|
||||
|
||||
#languageCollectionRepository = new UmbLanguageCollectionRepository(this);
|
||||
#workspaceContext!: typeof UMB_DICTIONARY_WORKSPACE_CONTEXT.TYPE;
|
||||
#currentUserContext?: typeof UMB_CURRENT_USER_CONTEXT.TYPE;
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.consumeContext(UMB_DICTIONARY_WORKSPACE_CONTEXT, (_instance) => {
|
||||
this.#workspaceContext = _instance;
|
||||
this.#observeDictionary();
|
||||
});
|
||||
|
||||
this.consumeContext(UMB_CURRENT_USER_CONTEXT, (context) => {
|
||||
this.#currentUserContext = context;
|
||||
this.#observeCurrentUserLanguageAccess();
|
||||
});
|
||||
}
|
||||
|
||||
#observeCurrentUserLanguageAccess() {
|
||||
if (!this.#currentUserContext) return;
|
||||
|
||||
this.observe(this.#currentUserContext.languages, (languages) => {
|
||||
this._currentUserLanguageAccess = languages;
|
||||
});
|
||||
|
||||
this.observe(this.#currentUserContext.hasAccessToAllLanguages, (hasAccess) => {
|
||||
this._currentUserHasAccessToAllLanguages = hasAccess;
|
||||
});
|
||||
}
|
||||
|
||||
override async firstUpdated() {
|
||||
@@ -40,19 +64,11 @@ export class UmbWorkspaceViewDictionaryEditorElement extends UmbLitElement {
|
||||
});
|
||||
}
|
||||
|
||||
#renderTranslation(language: UmbLanguageDetailModel) {
|
||||
if (!language.unique) return;
|
||||
|
||||
const translation = this._dictionary?.translations?.find((x) => x.isoCode === language.unique);
|
||||
|
||||
return html` <umb-property-layout label=${language.name ?? language.unique}>
|
||||
<uui-textarea
|
||||
slot="editor"
|
||||
name=${language.unique}
|
||||
label="translation"
|
||||
@change=${this.#onTextareaChange}
|
||||
value=${ifDefined(translation?.translation)}></uui-textarea>
|
||||
</umb-property-layout>`;
|
||||
#isReadOnly(culture: string | null) {
|
||||
if (!this.#currentUserContext) return true;
|
||||
if (!culture) return false;
|
||||
if (this._currentUserHasAccessToAllLanguages) return false;
|
||||
return !this._currentUserLanguageAccess?.includes(culture);
|
||||
}
|
||||
|
||||
#onTextareaChange(e: Event) {
|
||||
@@ -78,6 +94,22 @@ export class UmbWorkspaceViewDictionaryEditorElement extends UmbLitElement {
|
||||
`;
|
||||
}
|
||||
|
||||
#renderTranslation(language: UmbLanguageDetailModel) {
|
||||
if (!language.unique) return;
|
||||
|
||||
const translation = this._dictionary?.translations?.find((x) => x.isoCode === language.unique);
|
||||
|
||||
return html` <umb-property-layout label=${language.name ?? language.unique}>
|
||||
<uui-textarea
|
||||
slot="editor"
|
||||
name=${language.unique}
|
||||
label="translation"
|
||||
@change=${this.#onTextareaChange}
|
||||
value=${ifDefined(translation?.translation)}
|
||||
?readonly=${this.#isReadOnly(language.unique)}></uui-textarea>
|
||||
</umb-property-layout>`;
|
||||
}
|
||||
|
||||
static override styles = [
|
||||
css`
|
||||
:host {
|
||||
|
||||
Reference in New Issue
Block a user