multiple-app-languages-condition

This commit is contained in:
Niels Lyngsø
2024-08-05 21:25:30 +02:00
parent 73de7aa0fe
commit 63e4d1496c
7 changed files with 61 additions and 8 deletions

View File

@@ -1,10 +1,12 @@
import type { ManifestTypes } from '../models/index.js';
import { manifest as menuAliasConditionManifest } from './menu-alias.condition.js';
import { manifest as multipleAppLanguagesConditionManifest } from './multiple-app-languages.condition.js';
import { manifest as sectionAliasConditionManifest } from './section-alias.condition.js';
import { manifest as switchConditionManifest } from './switch.condition.js';
export const manifests: Array<ManifestTypes> = [
menuAliasConditionManifest,
multipleAppLanguagesConditionManifest,
sectionAliasConditionManifest,
switchConditionManifest,
];

View File

@@ -17,9 +17,13 @@ export class UmbMenuAliasCondition extends UmbConditionBase<MenuAliasConditionCo
super(host, args);
this.consumeContext(UMB_MENU_CONTEXT, (context) => {
this.observe(context.alias, (MenuAlias) => {
this.permitted = MenuAlias === this.config.match;
});
this.observe(
context.alias,
(MenuAlias) => {
this.permitted = MenuAlias === this.config.match;
},
'observeAlias',
);
});
}
}

View File

@@ -0,0 +1,37 @@
import { UmbConditionBase } from './condition-base.controller.js';
import { UMB_APP_LANGUAGE_CONTEXT } from '@umbraco-cms/backoffice/language';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type {
ManifestCondition,
UmbConditionConfigBase,
UmbConditionControllerArguments,
UmbExtensionCondition,
} from '@umbraco-cms/backoffice/extension-api';
export type UmbMultipleAppLanguageConditionConfig = UmbConditionConfigBase;
export class UmbMultipleAppLanguageCondition
extends UmbConditionBase<UmbMultipleAppLanguageConditionConfig>
implements UmbExtensionCondition
{
constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<UmbMultipleAppLanguageConditionConfig>) {
super(host, args);
this.consumeContext(UMB_APP_LANGUAGE_CONTEXT, (context) => {
this.observe(
context.moreThanOneLanguage,
(moreThanOneLanguage) => {
this.permitted = moreThanOneLanguage;
},
'observeLanguages',
);
});
}
}
export const manifest: ManifestCondition = {
type: 'condition',
name: 'Multiple App Languages Condition',
alias: 'Umb.Condition.MultipleAppLanguages',
api: UmbMultipleAppLanguageCondition,
};

View File

@@ -24,9 +24,13 @@ export class UmbSectionAliasCondition
if (permissionCheck !== undefined) {
this.consumeContext(UMB_SECTION_CONTEXT, (context) => {
this.observe(context.alias, (sectionAlias) => {
this.permitted = sectionAlias ? permissionCheck!(sectionAlias) : false;
});
this.observe(
context.alias,
(sectionAlias) => {
this.permitted = sectionAlias ? permissionCheck!(sectionAlias) : false;
},
'observeAlias',
);
});
}
}

View File

@@ -3,6 +3,7 @@ import type { CollectionBulkActionPermissionConditionConfig } from '../../collec
import type { UmbSectionUserPermissionConditionConfig } from '../../section/conditions/index.js';
import type { SectionAliasConditionConfig } from './section-alias.condition.js';
import type { SwitchConditionConfig } from './switch.condition.js';
import type { UmbMultipleAppLanguageConditionConfig } from './multiple-app-languages.condition.js';
import type {
WorkspaceAliasConditionConfig,
WorkspaceEntityTypeConditionConfig,
@@ -29,8 +30,9 @@ export type ConditionTypes =
| CollectionBulkActionPermissionConditionConfig
| SectionAliasConditionConfig
| SwitchConditionConfig
| UmbConditionConfigBase
| UmbDocumentUserPermissionConditionConfig
| UmbMultipleAppLanguageConditionConfig
| UmbSectionUserPermissionConditionConfig
| WorkspaceAliasConditionConfig
| WorkspaceEntityTypeConditionConfig
| UmbConditionConfigBase;
| WorkspaceEntityTypeConditionConfig;

View File

@@ -12,6 +12,9 @@ const entityActions: Array<ManifestSectionSidebarApp> = [
alias: 'Umb.Condition.SectionAlias',
match: 'Umb.Section.Content',
},
{
alias: 'Umb.Condition.MultipleAppLanguages',
},
],
},
];

View File

@@ -12,6 +12,7 @@ import { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth';
export class UmbAppLanguageContext extends UmbContextBase<UmbAppLanguageContext> implements UmbApi {
#languageCollectionRepository: UmbLanguageCollectionRepository;
#languages = new UmbArrayState<UmbLanguageDetailModel>([], (x) => x.unique);
moreThanOneLanguage = this.#languages.asObservablePart((x) => x.length > 1);
#appLanguage = new UmbObjectState<UmbLanguageDetailModel | undefined>(undefined);
appLanguage = this.#appLanguage.asObservable();