Browse Source

Solved conflict

pull/13269/head
malik masis 4 years ago
parent
commit
c5e846ea5f
  1. 2
      common.props
  2. 2
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs
  3. 2
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs
  4. 9
      framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObjectManager.cs
  5. 31
      framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs
  6. 11
      framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs
  7. 2
      npm/ng-packs/apps/dev-app/src/environments/environment.ts
  8. 8
      npm/ng-packs/packages/core/src/lib/services/rest.service.ts
  9. 13
      npm/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts
  10. 76
      npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html
  11. 33
      npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts
  12. 1
      npm/ng-packs/packages/setting-management/config/src/lib/enums/index.ts
  13. 4
      npm/ng-packs/packages/setting-management/config/src/lib/enums/policy-names.ts
  14. 0
      npm/ng-packs/packages/setting-management/config/src/lib/enums/route-names.ts
  15. 0
      npm/ng-packs/packages/setting-management/config/src/lib/enums/setting-tab-names.ts
  16. 0
      npm/ng-packs/packages/setting-management/config/src/lib/providers/features.token.ts
  17. 0
      npm/ng-packs/packages/setting-management/config/src/lib/providers/index.ts
  18. 0
      npm/ng-packs/packages/setting-management/config/src/lib/providers/route.provider.ts
  19. 0
      npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts
  20. 0
      npm/ng-packs/packages/setting-management/config/src/lib/providers/visible.provider.ts
  21. 0
      npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md
  22. 35
      npm/ng-packs/packages/setting-management/config/src/lib/proxy/email-settings.service.ts
  23. 4299
      npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json
  24. 0
      npm/ng-packs/packages/setting-management/config/src/lib/proxy/index.ts
  25. 8
      npm/ng-packs/packages/setting-management/config/src/lib/proxy/models.ts
  26. 0
      npm/ng-packs/packages/setting-management/config/src/lib/services/index.ts
  27. 0
      npm/ng-packs/packages/setting-management/config/src/lib/services/settings-tabs.service.ts
  28. 3
      npm/ng-packs/packages/setting-management/config/src/lib/setting-management-config.module.ts
  29. 31
      npm/ng-packs/packages/setting-management/config/src/proxy/email-settings.service.ts
  30. 12
      npm/ng-packs/packages/setting-management/config/src/public-api.ts
  31. 12
      npm/ng-packs/scripts/copy-packages-to-templates.ts

2
common.props

@ -1,7 +1,7 @@
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
<Version>6.0.0</Version> <Version>6.0.0-rc.1</Version>
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn> <NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
<PackageIconUrl>https://abp.io/assets/abp_nupkg.png</PackageIconUrl> <PackageIconUrl>https://abp.io/assets/abp_nupkg.png</PackageIconUrl>
<PackageProjectUrl>https://abp.io/</PackageProjectUrl> <PackageProjectUrl>https://abp.io/</PackageProjectUrl>

2
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs

@ -20,7 +20,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling;
public class AbpExceptionFilter : IAsyncExceptionFilter, ITransientDependency public class AbpExceptionFilter : IAsyncExceptionFilter, ITransientDependency
{ {
public async Task OnExceptionAsync(ExceptionContext context) public virtual async Task OnExceptionAsync(ExceptionContext context)
{ {
if (!ShouldHandleException(context)) if (!ShouldHandleException(context))
{ {

2
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs

@ -25,7 +25,7 @@ public class AbpExceptionPageFilter : IAsyncPageFilter, ITransientDependency
return Task.CompletedTask; return Task.CompletedTask;
} }
public async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next) public virtual async Task OnPageHandlerExecutionAsync(PageHandlerExecutingContext context, PageHandlerExecutionDelegate next)
{ {
if (context.HandlerMethod == null || !ShouldHandleException(context)) if (context.HandlerMethod == null || !ShouldHandleException(context))
{ {

9
framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/IMultiLingualObjectManager.cs

@ -1,4 +1,5 @@
using System.Threading.Tasks; using System.Collections.Generic;
using System.Threading.Tasks;
namespace Volo.Abp.MultiLingualObjects; namespace Volo.Abp.MultiLingualObjects;
@ -10,4 +11,10 @@ public interface IMultiLingualObjectManager
bool fallbackToParentCultures = true) bool fallbackToParentCultures = true)
where TMultiLingual : IMultiLingualObject<TTranslation> where TMultiLingual : IMultiLingualObject<TTranslation>
where TTranslation : class, IObjectTranslation; where TTranslation : class, IObjectTranslation;
Task<TTranslation> GetTranslationAsync<TTranslation>(
ICollection<TTranslation> translations,
string culture = null,
bool fallbackToParentCultures = true)
where TTranslation : class, IObjectTranslation;
} }

31
framework/src/Volo.Abp.MultiLingualObjects/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager.cs

@ -19,22 +19,21 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD
{ {
SettingProvider = settingProvider; SettingProvider = settingProvider;
} }
public virtual async Task<TTranslation> GetTranslationAsync<TTranslation>(
public virtual async Task<TTranslation> GetTranslationAsync<TMultiLingual, TTranslation>( ICollection<TTranslation> translations,
TMultiLingual multiLingual, string culture,
string culture = null, bool fallbackToParentCultures)
bool fallbackToParentCultures = true)
where TMultiLingual : IMultiLingualObject<TTranslation>
where TTranslation : class, IObjectTranslation where TTranslation : class, IObjectTranslation
{ {
culture ??= CultureInfo.CurrentUICulture.Name; culture ??= CultureInfo.CurrentUICulture.Name;
if (multiLingual.Translations.IsNullOrEmpty()) if (translations.IsNullOrEmpty())
{ {
return null; return null;
} }
var translation = multiLingual.Translations.FirstOrDefault(pt => pt.Language == culture); var translation = translations.FirstOrDefault(pt => pt.Language == culture);
if (translation != null) if (translation != null)
{ {
return translation; return translation;
@ -44,7 +43,7 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD
{ {
translation = GetTranslationBasedOnCulturalRecursive( translation = GetTranslationBasedOnCulturalRecursive(
CultureInfo.CurrentUICulture.Parent, CultureInfo.CurrentUICulture.Parent,
multiLingual.Translations, translations,
0 0
); );
@ -56,16 +55,26 @@ public class MultiLingualObjectManager : IMultiLingualObjectManager, ITransientD
var defaultLanguage = await SettingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage); var defaultLanguage = await SettingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage);
translation = multiLingual.Translations.FirstOrDefault(pt => pt.Language == defaultLanguage); translation = translations.FirstOrDefault(pt => pt.Language == defaultLanguage);
if (translation != null) if (translation != null)
{ {
return translation; return translation;
} }
translation = multiLingual.Translations.FirstOrDefault(); translation = translations.FirstOrDefault();
return translation; return translation;
} }
public virtual Task<TTranslation> GetTranslationAsync<TMultiLingual, TTranslation>(
TMultiLingual multiLingual,
string culture = null,
bool fallbackToParentCultures = true)
where TMultiLingual : IMultiLingualObject<TTranslation>
where TTranslation : class, IObjectTranslation
{
return GetTranslationAsync(multiLingual.Translations, culture: culture, fallbackToParentCultures: fallbackToParentCultures);
}
protected virtual TTranslation GetTranslationBasedOnCulturalRecursive<TTranslation>( protected virtual TTranslation GetTranslationBasedOnCulturalRecursive<TTranslation>(
CultureInfo culture, ICollection<TTranslation> translations, int currentDepth) CultureInfo culture, ICollection<TTranslation> translations, int currentDepth)
where TTranslation : class, IObjectTranslation where TTranslation : class, IObjectTranslation

11
framework/test/Volo.Abp.MultiLingualObjects.Tests/Volo/Abp/MultiLingualObjects/MultiLingualObjectManager_Tests.cs

@ -51,6 +51,17 @@ public class MultiLingualObjectManager_Tests : AbpIntegratedTest<AbpMultiLingual
} }
} }
[Fact]
public async Task GetTranslationFromListAsync()
{
using (CultureHelper.Use("en-us"))
{
var translation = await _multiLingualObjectManager.GetTranslationAsync(_book.Translations);
translation.Name.ShouldBe("C# in Depth");
}
}
[Fact] [Fact]
public async Task Should_Get_Specified_Language() public async Task Should_Get_Specified_Language()
{ {

2
npm/ng-packs/apps/dev-app/src/environments/environment.ts

@ -37,7 +37,7 @@ export const environment = {
AbpIdentity: { AbpIdentity: {
rootNamespace: 'Volo.Abp', rootNamespace: 'Volo.Abp',
}, },
AbpSettingManagement: { SettingManagement: {
rootNamespace: 'Volo.Abp.SettingManagement', rootNamespace: 'Volo.Abp.SettingManagement',
}, },
}, },

8
npm/ng-packs/packages/core/src/lib/services/rest.service.ts

@ -38,9 +38,9 @@ export class RestService {
api = api || this.getApiFromStore(config.apiName); api = api || this.getApiFromStore(config.apiName);
const { method, params, ...options } = request; const { method, params, ...options } = request;
const { observe = Rest.Observe.Body, skipHandleError } = config; const { observe = Rest.Observe.Body, skipHandleError } = config;
const url = this.removeDuplicateSlashes(api + request.url);
return this.http return this.http
.request<R>(method, api + request.url, { .request<R>(method, url, {
observe, observe,
...(params && { ...(params && {
params: this.getParams(params, config.httpParamEncoder), params: this.getParams(params, config.httpParamEncoder),
@ -62,4 +62,8 @@ export class RestService {
? new HttpParams({ encoder, fromObject: filteredParams }) ? new HttpParams({ encoder, fromObject: filteredParams })
: new HttpParams({ fromObject: filteredParams }); : new HttpParams({ fromObject: filteredParams });
} }
private removeDuplicateSlashes(url: string): string {
return url.replace(/([^:]\/)\/+/g, '$1');
}
} }

13
npm/ng-packs/packages/core/src/lib/tests/rest.service.spec.ts

@ -120,4 +120,17 @@ describe('HttpClient testing', () => {
const req = spectator.expectOne(api + '/test', HttpMethod.GET); const req = spectator.expectOne(api + '/test', HttpMethod.GET);
spectator.flushAll([req], [throwError('Testing error')]); spectator.flushAll([req], [throwError('Testing error')]);
}); });
test('should remove the duplicate slashes', () => {
spectator.service
.request({ method: HttpMethod.GET, url: '//test', params: { id: 1 } })
.subscribe();
spectator.expectOne(api + '/test?id=1', HttpMethod.GET);
});
test('should remove the duplicate slashes multiple', () => {
spectator.service
.request({ method: HttpMethod.GET, url: '//test//my//endpoint', params: { id: 1 } })
.subscribe();
spectator.expectOne(api + '/test/my/endpoint?id=1', HttpMethod.GET);
});
}); });

76
npm/ng-packs/packages/setting-management/config/src/components/email-setting-group/email-setting-group.component.html → npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.html

@ -6,13 +6,13 @@
<div class="mb-3 form-group"> <div class="mb-3 form-group">
<label class="form-label">{{ <label class="form-label">{{
'AbpSettingManagement::DefaultFromDisplayName' | abpLocalization 'AbpSettingManagement::DefaultFromDisplayName' | abpLocalization
}}</label> }}</label>
<input type="text" class="form-control" formControlName="defaultFromDisplayName" /> <input type="text" class="form-control" formControlName="defaultFromDisplayName" />
</div> </div>
<div class="mb-3 form-group"> <div class="mb-3 form-group">
<label class="form-label">{{ <label class="form-label">{{
'AbpSettingManagement::DefaultFromAddress' | abpLocalization 'AbpSettingManagement::DefaultFromAddress' | abpLocalization
}}</label> }}</label>
<input type="text" class="form-control" formControlName="defaultFromAddress" /> <input type="text" class="form-control" formControlName="defaultFromAddress" />
</div> </div>
<div class="mb-3 form-group"> <div class="mb-3 form-group">
@ -25,34 +25,23 @@
</div> </div>
<div class="form-check mb-2"> <div class="form-check mb-2">
<input <input type="checkbox" id="smtp-enable-ssl" class="form-check-input" formControlName="smtpEnableSsl" />
type="checkbox"
id="smtp-enable-ssl"
class="form-check-input"
formControlName="smtpEnableSsl"
/>
<label class="form-check-label" for="smtp-enable-ssl">{{ <label class="form-check-label" for="smtp-enable-ssl">{{
'AbpSettingManagement::SmtpEnableSsl' | abpLocalization 'AbpSettingManagement::SmtpEnableSsl' | abpLocalization
}}</label> }}</label>
</div> </div>
<div class="form-check mb-2"> <div class="form-check mb-2">
<input <input type="checkbox" id="smtp-use-default-credentials" class="form-check-input"
type="checkbox" formControlName="smtpUseDefaultCredentials" />
id="smtp-use-default-credentials"
class="form-check-input"
formControlName="smtpUseDefaultCredentials"
/>
<label class="form-check-label" for="smtp-use-default-credentials">{{ <label class="form-check-label" for="smtp-use-default-credentials">{{
'AbpSettingManagement::SmtpUseDefaultCredentials' | abpLocalization 'AbpSettingManagement::SmtpUseDefaultCredentials' | abpLocalization
}}</label> }}</label>
</div> </div>
<div <div [@collapse]="{
[@collapse]="{
value: form.get('smtpUseDefaultCredentials')?.value ? 'collapsed' : 'expanded', value: form.get('smtpUseDefaultCredentials')?.value ? 'collapsed' : 'expanded',
params: { time: '200ms', easing: 'linear' } params: { time: '200ms', easing: 'linear' }
}" }">
>
<div class="mb-3 form-group"> <div class="mb-3 form-group">
<label class="form-label">{{ 'AbpSettingManagement::SmtpDomain' | abpLocalization }}</label> <label class="form-label">{{ 'AbpSettingManagement::SmtpDomain' | abpLocalization }}</label>
<input type="text" class="form-control" formControlName="smtpDomain" /> <input type="text" class="form-control" formControlName="smtpDomain" />
@ -74,4 +63,51 @@
<button type="submit" class="btn btn-primary"> <button type="submit" class="btn btn-primary">
{{ 'AbpSettingManagement::Save' | abpLocalization }} {{ 'AbpSettingManagement::Save' | abpLocalization }}
</button> </button>
<button type="button" (click)="openSendEmailModal()" class="btn btn-primary mx-2" *abpPermission="emailingPolicy">
<i class="fa f-send"></i>
{{ 'AbpSettingManagement::SendTestEmail' | abpLocalization }}
</button>
</form> </form>
<abp-modal [(visible)]="isEmailTestModalOpen" [options]="modalSize">
<ng-template #abpHeader>
<h3>{{"SendTestEmail" | abpLocalization}}</h3>
</ng-template>
<ng-template #abpBody>
<form [formGroup]="emailTestForm" id="emailTestForm" (ngSubmit)="emailTestFormSubmit()">
<div class="mb-3 form-group">
<label class="form-label">{{ 'AbpSettingManagement::SenderEmailAddress' | abpLocalization }}</label>
<input class="form-control" formControlName="senderEmailAddress" />
</div>
<div class="mb-3 form-group">
<label class="form-label">{{ 'AbpSettingManagement::TargetEmailAddress' | abpLocalization }}</label>
<input class="form-control" formControlName="targetEmailAddress" />
</div>
<div class="mb-3 form-group">
<label class="form-label">{{ 'AbpSettingManagement::Subject' | abpLocalization }}</label>
<input class="form-control" formControlName="subject" />
</div>
<div class="mb-3 form-group">
<label class="form-label">{{ 'AbpSettingManagement::Body' | abpLocalization }}</label>
<textarea class="form-control" formControlName="body"></textarea>
</div>
</form>
</ng-template>
<ng-template #abpFooter>
<abp-button buttonType="submit" iconClass="fa fa-send" formName="emailTestForm"
[disabled]="emailTestForm.invalid && emailTestForm.dirty">
<span>{{ 'AbpTenantManagement::Send' | abpLocalization }}</span>
</abp-button>
<button type="button" class="btn btn-secondary" abpClose>Close</button>
</ng-template>
</abp-modal>

33
npm/ng-packs/packages/setting-management/config/src/components/email-setting-group/email-setting-group.component.ts → npm/ng-packs/packages/setting-management/config/src/lib/components/email-setting-group/email-setting-group.component.ts

@ -1,7 +1,9 @@
import { NgbModalOptions } from '@ng-bootstrap/ng-bootstrap';
import { collapse, ToasterService } from '@abp/ng.theme.shared'; import { collapse, ToasterService } from '@abp/ng.theme.shared';
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { finalize } from 'rxjs/operators'; import { finalize } from 'rxjs/operators';
import { SettingManagementPolicyNames } from '../../enums/policy-names';
import { EmailSettingsService } from '../../proxy/email-settings.service'; import { EmailSettingsService } from '../../proxy/email-settings.service';
import { EmailSettingsDto } from '../../proxy/models'; import { EmailSettingsDto } from '../../proxy/models';
@ -12,8 +14,11 @@ import { EmailSettingsDto } from '../../proxy/models';
}) })
export class EmailSettingGroupComponent implements OnInit { export class EmailSettingGroupComponent implements OnInit {
form!: FormGroup; form!: FormGroup;
emailTestForm: FormGroup;
saving = false; saving = false;
emailingPolicy = SettingManagementPolicyNames.Emailing;
isEmailTestModalOpen = false;
modalSize:NgbModalOptions= { size:"lg"}
constructor( constructor(
private emailSettingsService: EmailSettingsService, private emailSettingsService: EmailSettingsService,
@ -57,4 +62,30 @@ export class EmailSettingGroupComponent implements OnInit {
this.getData(); this.getData();
}); });
} }
openSendEmailModal() {
this.buildEmailTestForm();
this.isEmailTestModalOpen = true;
}
buildEmailTestForm() {
this.emailTestForm = this.fb.group({
senderEmailAddress: ['', [Validators.required, Validators.email]],
targetEmailAddress: ['', [Validators.required, Validators.email]],
subject: ['', [Validators.required]],
body: [''],
});
}
emailTestFormSubmit() {
if(this.emailTestForm.invalid){
return;
}
this.emailSettingsService.sendTestEmail(this.emailTestForm.value).subscribe(res => {
this.toasterService.success('AbpSettingManagement::SuccessfullySent');
this.isEmailTestModalOpen = false;
})
}
} }

1
npm/ng-packs/packages/setting-management/config/src/enums/index.ts → npm/ng-packs/packages/setting-management/config/src/lib/enums/index.ts

@ -1,2 +1,3 @@
export * from './route-names'; export * from './route-names';
export * from './setting-tab-names'; export * from './setting-tab-names';
export * from './policy-names';

4
npm/ng-packs/packages/setting-management/config/src/lib/enums/policy-names.ts

@ -0,0 +1,4 @@
export const enum SettingManagementPolicyNames {
Emailing = 'SettingManagement.Emailing',
}

0
npm/ng-packs/packages/setting-management/config/src/enums/route-names.ts → npm/ng-packs/packages/setting-management/config/src/lib/enums/route-names.ts

0
npm/ng-packs/packages/setting-management/config/src/enums/setting-tab-names.ts → npm/ng-packs/packages/setting-management/config/src/lib/enums/setting-tab-names.ts

0
npm/ng-packs/packages/setting-management/config/src/providers/features.token.ts → npm/ng-packs/packages/setting-management/config/src/lib/providers/features.token.ts

0
npm/ng-packs/packages/setting-management/config/src/providers/index.ts → npm/ng-packs/packages/setting-management/config/src/lib/providers/index.ts

0
npm/ng-packs/packages/setting-management/config/src/providers/route.provider.ts → npm/ng-packs/packages/setting-management/config/src/lib/providers/route.provider.ts

0
npm/ng-packs/packages/setting-management/config/src/providers/setting-tab.provider.ts → npm/ng-packs/packages/setting-management/config/src/lib/providers/setting-tab.provider.ts

0
npm/ng-packs/packages/setting-management/config/src/providers/visible.provider.ts → npm/ng-packs/packages/setting-management/config/src/lib/providers/visible.provider.ts

0
npm/ng-packs/packages/setting-management/config/src/proxy/README.md → npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md

35
npm/ng-packs/packages/setting-management/config/src/lib/proxy/email-settings.service.ts

@ -0,0 +1,35 @@
import type { EmailSettingsDto, SendTestEmailInput, UpdateEmailSettingsDto } from './models';
import { RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class EmailSettingsService {
apiName = 'SettingManagement';
get = () =>
this.restService.request<any, EmailSettingsDto>({
method: 'GET',
url: '/api/setting-management/emailing',
},
{ apiName: this.apiName });
sendTestEmail = (input: SendTestEmailInput) =>
this.restService.request<any, void>({
method: 'POST',
url: '/api/setting-management/emailing/send-test-email',
body: input,
},
{ apiName: this.apiName });
update = (input: UpdateEmailSettingsDto) =>
this.restService.request<any, void>({
method: 'POST',
url: '/api/setting-management/emailing',
body: input,
},
{ apiName: this.apiName });
constructor(private restService: RestService) {}
}

4299
npm/ng-packs/packages/setting-management/config/src/proxy/generate-proxy.json → npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json

File diff suppressed because it is too large

0
npm/ng-packs/packages/setting-management/config/src/proxy/index.ts → npm/ng-packs/packages/setting-management/config/src/lib/proxy/index.ts

8
npm/ng-packs/packages/setting-management/config/src/proxy/models.ts → npm/ng-packs/packages/setting-management/config/src/lib/proxy/models.ts

@ -1,3 +1,4 @@
export interface EmailSettingsDto { export interface EmailSettingsDto {
smtpHost?: string; smtpHost?: string;
smtpPort: number; smtpPort: number;
@ -10,6 +11,13 @@ export interface EmailSettingsDto {
defaultFromDisplayName?: string; defaultFromDisplayName?: string;
} }
export interface SendTestEmailInput {
senderEmailAddress: string;
targetEmailAddress: string;
subject: string;
body?: string;
}
export interface UpdateEmailSettingsDto { export interface UpdateEmailSettingsDto {
smtpHost?: string; smtpHost?: string;
smtpPort: number; smtpPort: number;

0
npm/ng-packs/packages/setting-management/config/src/services/index.ts → npm/ng-packs/packages/setting-management/config/src/lib/services/index.ts

0
npm/ng-packs/packages/setting-management/config/src/services/settings-tabs.service.ts → npm/ng-packs/packages/setting-management/config/src/lib/services/settings-tabs.service.ts

3
npm/ng-packs/packages/setting-management/config/src/setting-management-config.module.ts → npm/ng-packs/packages/setting-management/config/src/lib/setting-management-config.module.ts

@ -1,3 +1,4 @@
import { ThemeSharedModule } from '@abp/ng.theme.shared';
import { ModuleWithProviders, NgModule } from '@angular/core'; import { ModuleWithProviders, NgModule } from '@angular/core';
import { CoreModule } from '@abp/ng.core'; import { CoreModule } from '@abp/ng.core';
import { NgxValidateCoreModule } from '@ngx-validate/core'; import { NgxValidateCoreModule } from '@ngx-validate/core';
@ -8,7 +9,7 @@ import { SETTING_MANAGEMENT_SETTING_TAB_PROVIDERS } from './providers/setting-ta
import { EmailSettingGroupComponent } from './components/email-setting-group/email-setting-group.component'; import { EmailSettingGroupComponent } from './components/email-setting-group/email-setting-group.component';
@NgModule({ @NgModule({
imports: [CoreModule, NgxValidateCoreModule], imports: [CoreModule,ThemeSharedModule,NgxValidateCoreModule],
declarations: [EmailSettingGroupComponent], declarations: [EmailSettingGroupComponent],
exports: [EmailSettingGroupComponent], exports: [EmailSettingGroupComponent],
}) })

31
npm/ng-packs/packages/setting-management/config/src/proxy/email-settings.service.ts

@ -1,31 +0,0 @@
import type { EmailSettingsDto, UpdateEmailSettingsDto } from './models';
import { RestService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class EmailSettingsService {
apiName = 'SettingManagement';
get = () =>
this.restService.request<any, EmailSettingsDto>(
{
method: 'GET',
url: '/api/setting-management/emailing',
},
{ apiName: this.apiName },
);
update = (input: UpdateEmailSettingsDto) =>
this.restService.request<any, void>(
{
method: 'POST',
url: '/api/setting-management/emailing',
body: input,
},
{ apiName: this.apiName },
);
constructor(private restService: RestService) {}
}

12
npm/ng-packs/packages/setting-management/config/src/public-api.ts

@ -1,6 +1,6 @@
export * from './components/email-setting-group/email-setting-group.component'; export * from './lib/components/email-setting-group/email-setting-group.component';
export * from './enums'; export * from './lib/enums';
export * from './providers'; export * from './lib/providers';
export * from './proxy'; export * from './lib/proxy';
export * from './services'; export * from './lib/services';
export * from './setting-management-config.module'; export * from './lib/setting-management-config.module';

12
npm/ng-packs/scripts/copy-packages-to-templates.ts

@ -1,8 +1,10 @@
import execa from 'execa'; import execa from 'execa';
import fse from 'fs-extra'; import fse from 'fs-extra';
import fs from 'fs'; import fs from 'fs';
import program from 'commander';
const templates = ['app', 'app-nolayers', 'module']; const defaultTemplates = ['app', 'app-nolayers', 'module'];
const defaultTemplatePath = '../../../templates';
const packageMap = { const packageMap = {
account: 'ng.account', account: 'ng.account',
'account-core': 'ng.account.core', 'account-core': 'ng.account.core',
@ -16,7 +18,11 @@ const packageMap = {
'theme-basic': 'ng.theme.basic', 'theme-basic': 'ng.theme.basic',
'theme-shared': 'ng.theme.shared', 'theme-shared': 'ng.theme.shared',
}; };
program.option('-t, --templates <templates>', 'template dirs', false);
program.option('-p, --template-path <templatePath>', 'root template path', false);
program.parse(process.argv);
const templates = program.templates ? program.templates.split(',') : defaultTemplates;
const templateRootPath = program.templatePath ? program.templatePath : defaultTemplatePath;
(async () => { (async () => {
await execa('yarn', ['build'], { await execa('yarn', ['build'], {
stdout: 'inherit', stdout: 'inherit',
@ -33,7 +39,7 @@ async function runEachTemplate(
handler: (template: string, templatePath?: string) => void | Promise<any>, handler: (template: string, templatePath?: string) => void | Promise<any>,
) { ) {
for (var template of templates) { for (var template of templates) {
const templatePath = `../../../templates/${template}/angular`; const templatePath = `${templateRootPath}/${template}/angular`;
const result = handler(template, templatePath); const result = handler(template, templatePath);
result instanceof Promise ? await result : result; result instanceof Promise ? await result : result;
} }

Loading…
Cancel
Save