Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.

Commit 5e1222b

Browse files
authored
Merge pull request #2170 from umbraco/v14/feature/only-show-app-language-selector-when-more-than-one-language
multiple-app-languages-condition
2 parents bc4dda3 + 697a765 commit 5e1222b

File tree

7 files changed

+61
-8
lines changed

7 files changed

+61
-8
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import type { ManifestTypes } from '../models/index.js';
22
import { manifest as menuAliasConditionManifest } from './menu-alias.condition.js';
3+
import { manifest as multipleAppLanguagesConditionManifest } from './multiple-app-languages.condition.js';
34
import { manifest as sectionAliasConditionManifest } from './section-alias.condition.js';
45
import { manifest as switchConditionManifest } from './switch.condition.js';
56

67
export const manifests: Array<ManifestTypes> = [
78
menuAliasConditionManifest,
9+
multipleAppLanguagesConditionManifest,
810
sectionAliasConditionManifest,
911
switchConditionManifest,
1012
];

src/packages/core/extension-registry/conditions/menu-alias.condition.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ export class UmbMenuAliasCondition extends UmbConditionBase<MenuAliasConditionCo
1717
super(host, args);
1818

1919
this.consumeContext(UMB_MENU_CONTEXT, (context) => {
20-
this.observe(context.alias, (MenuAlias) => {
21-
this.permitted = MenuAlias === this.config.match;
22-
});
20+
this.observe(
21+
context.alias,
22+
(MenuAlias) => {
23+
this.permitted = MenuAlias === this.config.match;
24+
},
25+
'observeAlias',
26+
);
2327
});
2428
}
2529
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { UmbConditionBase } from './condition-base.controller.js';
2+
import { UMB_APP_LANGUAGE_CONTEXT } from '@umbraco-cms/backoffice/language';
3+
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
4+
import type {
5+
ManifestCondition,
6+
UmbConditionConfigBase,
7+
UmbConditionControllerArguments,
8+
UmbExtensionCondition,
9+
} from '@umbraco-cms/backoffice/extension-api';
10+
11+
export type UmbMultipleAppLanguageConditionConfig = UmbConditionConfigBase;
12+
13+
export class UmbMultipleAppLanguageCondition
14+
extends UmbConditionBase<UmbMultipleAppLanguageConditionConfig>
15+
implements UmbExtensionCondition
16+
{
17+
constructor(host: UmbControllerHost, args: UmbConditionControllerArguments<UmbMultipleAppLanguageConditionConfig>) {
18+
super(host, args);
19+
20+
this.consumeContext(UMB_APP_LANGUAGE_CONTEXT, (context) => {
21+
this.observe(
22+
context.moreThanOneLanguage,
23+
(moreThanOneLanguage) => {
24+
this.permitted = moreThanOneLanguage;
25+
},
26+
'observeLanguages',
27+
);
28+
});
29+
}
30+
}
31+
32+
export const manifest: ManifestCondition = {
33+
type: 'condition',
34+
name: 'Multiple App Languages Condition',
35+
alias: 'Umb.Condition.MultipleAppLanguages',
36+
api: UmbMultipleAppLanguageCondition,
37+
};

src/packages/core/extension-registry/conditions/section-alias.condition.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@ export class UmbSectionAliasCondition
2424

2525
if (permissionCheck !== undefined) {
2626
this.consumeContext(UMB_SECTION_CONTEXT, (context) => {
27-
this.observe(context.alias, (sectionAlias) => {
28-
this.permitted = sectionAlias ? permissionCheck!(sectionAlias) : false;
29-
});
27+
this.observe(
28+
context.alias,
29+
(sectionAlias) => {
30+
this.permitted = sectionAlias ? permissionCheck!(sectionAlias) : false;
31+
},
32+
'observeAlias',
33+
);
3034
});
3135
}
3236
}

src/packages/core/extension-registry/conditions/types.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { CollectionBulkActionPermissionConditionConfig } from '../../collec
33
import type { UmbSectionUserPermissionConditionConfig } from '../../section/conditions/index.js';
44
import type { SectionAliasConditionConfig } from './section-alias.condition.js';
55
import type { SwitchConditionConfig } from './switch.condition.js';
6+
import type { UmbMultipleAppLanguageConditionConfig } from './multiple-app-languages.condition.js';
67
import type {
78
WorkspaceAliasConditionConfig,
89
WorkspaceEntityTypeConditionConfig,
@@ -29,8 +30,9 @@ export type ConditionTypes =
2930
| CollectionBulkActionPermissionConditionConfig
3031
| SectionAliasConditionConfig
3132
| SwitchConditionConfig
33+
| UmbConditionConfigBase
3234
| UmbDocumentUserPermissionConditionConfig
35+
| UmbMultipleAppLanguageConditionConfig
3336
| UmbSectionUserPermissionConditionConfig
3437
| WorkspaceAliasConditionConfig
35-
| WorkspaceEntityTypeConditionConfig
36-
| UmbConditionConfigBase;
38+
| WorkspaceEntityTypeConditionConfig;

src/packages/language/app-language-select/manifests.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ const entityActions: Array<ManifestSectionSidebarApp> = [
1212
alias: 'Umb.Condition.SectionAlias',
1313
match: 'Umb.Section.Content',
1414
},
15+
{
16+
alias: 'Umb.Condition.MultipleAppLanguages',
17+
},
1518
],
1619
},
1720
];

src/packages/language/global-contexts/app-language.context.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth';
1212
export class UmbAppLanguageContext extends UmbContextBase<UmbAppLanguageContext> implements UmbApi {
1313
#languageCollectionRepository: UmbLanguageCollectionRepository;
1414
#languages = new UmbArrayState<UmbLanguageDetailModel>([], (x) => x.unique);
15+
moreThanOneLanguage = this.#languages.asObservablePart((x) => x.length > 1);
1516

1617
#appLanguage = new UmbObjectState<UmbLanguageDetailModel | undefined>(undefined);
1718
appLanguage = this.#appLanguage.asObservable();

0 commit comments

Comments
 (0)