Browse Source

feat(admin-ui): Enable setting default language for Channels

Relates to #296
Michael Bromley 5 years ago
parent
commit
0120202a65

+ 10 - 0
packages/admin-ui/src/lib/settings/src/components/channel-detail/channel-detail.component.html

@@ -43,6 +43,16 @@
             <option *ngFor="let code of currencyCodes" [value]="code">{{ code | currencyName }}</option>
         </select>
     </vdr-form-field>
+    <vdr-form-field [label]="'common.default-language' | translate" for="defaultLanguage">
+        <select
+            clrSelect
+            name="defaultLanguageCode"
+            formControlName="defaultLanguageCode"
+            [vdrDisabled]="!('SuperAdmin' | hasPermission)"
+        >
+            <option *ngFor="let languageCode of availableLanguageCodes$ | async" [value]="languageCode">{{ 'lang.' + languageCode | translate }} ({{ languageCode | uppercase }})</option>
+        </select>
+    </vdr-form-field>
     <vdr-form-field [label]="'settings.prices-include-tax' | translate" for="pricesIncludeTax">
         <clr-toggle-wrapper>
             <input

+ 8 - 4
packages/admin-ui/src/lib/settings/src/components/channel-detail/channel-detail.component.ts

@@ -11,14 +11,13 @@ import {
     LanguageCode,
     UpdateChannelInput,
 } from '@vendure/admin-ui/core';
-import { getDefaultLanguage } from '@vendure/admin-ui/core';
+import { getDefaultUiLanguage } from '@vendure/admin-ui/core';
 import { NotificationService } from '@vendure/admin-ui/core';
 import { DataService } from '@vendure/admin-ui/core';
 import { ServerConfigService } from '@vendure/admin-ui/core';
 import { DEFAULT_CHANNEL_CODE } from '@vendure/common/lib/shared-constants';
 import { Observable } from 'rxjs';
 import { map, mergeMap, take } from 'rxjs/operators';
-
 @Component({
     selector: 'vdr-channel-detail',
     templateUrl: './channel-detail.component.html',
@@ -30,11 +29,12 @@ export class ChannelDetailComponent extends BaseDetailComponent<Channel.Fragment
     zones$: Observable<GetZones.Zones[]>;
     detailForm: FormGroup;
     currencyCodes = Object.values(CurrencyCode);
+    availableLanguageCodes$: Observable<LanguageCode[]>;
 
     constructor(
         router: Router,
         route: ActivatedRoute,
-        serverConfigService: ServerConfigService,
+        protected serverConfigService: ServerConfigService,
         private changeDetector: ChangeDetectorRef,
         protected dataService: DataService,
         private formBuilder: FormBuilder,
@@ -47,6 +47,7 @@ export class ChannelDetailComponent extends BaseDetailComponent<Channel.Fragment
             pricesIncludeTax: [false],
             currencyCode: [''],
             defaultShippingZoneId: ['', Validators.required],
+            defaultLanguageCode: [],
             defaultTaxZoneId: ['', Validators.required],
         });
     }
@@ -54,6 +55,7 @@ export class ChannelDetailComponent extends BaseDetailComponent<Channel.Fragment
     ngOnInit() {
         this.init();
         this.zones$ = this.dataService.settings.getZones().mapSingle((data) => data.zones);
+        this.availableLanguageCodes$ = this.serverConfigService.getAvailableLanguages();
     }
 
     ngOnDestroy() {
@@ -72,7 +74,7 @@ export class ChannelDetailComponent extends BaseDetailComponent<Channel.Fragment
         const input: CreateChannelInput = {
             code: formValue.code,
             token: formValue.token,
-            defaultLanguageCode: getDefaultLanguage(),
+            defaultLanguageCode: formValue.defaultLanguageCode,
             pricesIncludeTax: formValue.pricesIncludeTax,
             currencyCode: formValue.currencyCode,
             defaultShippingZoneId: formValue.defaultShippingZoneId,
@@ -126,6 +128,7 @@ export class ChannelDetailComponent extends BaseDetailComponent<Channel.Fragment
                         pricesIncludeTax: formValue.pricesIncludeTax,
                         currencyCode: formValue.currencyCode,
                         defaultShippingZoneId: formValue.defaultShippingZoneId,
+                        defaultLanguageCode: formValue.defaultLanguageCode,
                         defaultTaxZoneId: formValue.defaultTaxZoneId,
                     } as UpdateChannelInput;
                     return this.dataService.settings.updateChannel(input);
@@ -157,6 +160,7 @@ export class ChannelDetailComponent extends BaseDetailComponent<Channel.Fragment
             pricesIncludeTax: entity.pricesIncludeTax,
             currencyCode: entity.currencyCode,
             defaultShippingZoneId: entity.defaultShippingZone ? entity.defaultShippingZone.id : '',
+            defaultLanguageCode: entity.defaultLanguageCode,
             defaultTaxZoneId: entity.defaultTaxZone ? entity.defaultTaxZone.id : '',
         });
         if (entity.code === DEFAULT_CHANNEL_CODE) {

+ 1 - 0
packages/admin-ui/src/lib/static/i18n-messages/en.json

@@ -137,6 +137,7 @@
     "created-at": "Created at",
     "custom-fields": "Custom fields",
     "default-channel": "Default channel",
+    "default-language": "Default language",
     "delete": "Delete",
     "description": "Description",
     "disabled": "Disabled",